自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

努力推石头的西西弗斯

https://gitee.com/sisyphus2016

  • 博客(258)
  • 收藏
  • 关注

原创 《人件》学习指南

在软件管理领域,很少有著作能够与本书媲美。作为经久不衰的畅销书,本书深刻地洞察到软件开发的最大问题不在于技术,而在于人。人的因素并不容易解决,一旦解决了,你将更有可能获得成功。本书是软件管理领域的传奇经典,被誉为“对美国软件业影响最大的一本书”。全书从管理人力资源、创建健康的办公环境、雇用并留用正确的人、高效团队形成、改造企业文化和快乐工作等多个角度阐释了如何思考和管理软件开发的最大问题——人(而不是技术),以得到高效的项目和团队。豆瓣链接。

2022-09-28 10:38:23 401 1

原创 Redis 6.0源码学习 String类型

以"SETa111"为例,解析完请求之后,111对应的redisObject是编码为OBJ_ENCODING_RAW的字符串。tryObjectEncoding会进行一次编码推断,如果符合OBJ_ENCODING_INT的约束,还可能从享元池中复用对象。String字符串类型是Redis最基本的一个类型。通过对redisObject学习,我们得知了字符串类型可能出现的3种编码格式。Redis会根据当前值的类型和长度决定使用哪种内部实现。代码片段t_string.csetCommand。......

2022-07-28 16:03:55 462

原创 Redis 6.0源码学习 RedisObject

  Redis 是一个开源(BSD许可)、基于内存、高性能的数据结构,可以作为K-V数据库、缓存、消息代理(message broker)和流引擎。  Redis提供了许多数据结构,诸如String、Hash、List、Set、Sorted Set、BitMap、Hyperloglog、Geospatial index和Stream。  Redis 使用标准版本标记进行版本控制:major.minor.patchlevel。偶数的版本号表示稳定的版本, 例如 1.2,2.0,2.2,2.4,2.6,2.8,

2022-07-28 14:54:07 550

原创 Redis 6.0学习指南

  Redis 是一个开源(BSD许可)、基于内存、高性能的数据结构,可以作为K-V数据库、缓存、消息代理(message broker)和流引擎。  Redis提供了许多数据结构,诸如String、Hash、List、Set、Sorted Set、BitMap、Hyperloglog、Geospatial index和Stream。  Redis 使用标准版本标记进行版本控制:major.minor.patchlevel。偶数的版本号表示稳定的版本, 例如 1.2,2.0,2.2,2.4,2.6,2.8,

2022-07-28 14:06:58 593

原创 基于JMH对ArrayList和LinkedList插入操作进行性能测试

基于JMH对ArrayList和LinkedList插入操作进行性能测试

2022-07-22 16:32:13 230

原创 Redis 6.0源码学习 Simple Dynamic String

C语言中的字符串为Null-terminatedString,它用’\0’来表示字符串的结束。SDS对上层暴露的指针不是指向SDS结构体的指针,而是直接指向buf的指针。个人猜想是为了编码方便。不同命令的参数个数都不相同,一开始分不清哪个位置是key哪个位置是value,索性统一处理,在具体场景下,再单独优化。在函数中会根据字符串长度选择合适的类型,初始化完相应的统计值后,返回指定字符串内容的指针。最终可以确认,长度小于32的键值对,键的底层是sdshdr5,而值的robj底层是sdshdr8。...

2022-07-22 16:12:29 326

转载 MySQL索引原理及慢查询优化

原文地址:https://tech.meituan.com/mysql_index.html本文旨在以开发工程师的角度来解释数据库索引的原理和如何优化慢查询。索引的目的索引的目的是建立高效查询的数据结构。磁盘IO与预读磁盘读取数据靠的是机械运动,每次读取数据花费的时间可以分为寻道时间、旋转延迟、传输时间三个部分。寻道时间指的是磁臂移动到指定磁道所需要的时间,主流磁盘一般在5ms以下;旋转延迟就是我们经常听说的磁盘转速比如一个磁盘7200转,表示每分钟能转7200次,也就是说1秒钟能转1.

2022-05-25 02:54:14 165

原创 MySQL Join算法

官方开发者博客https://dev.mysql.com/blog-archive/hash-join-in-mysql-8/mysql8.0的hash join算法及其优化这篇博客拓展了许多细节。https://blog.csdn.net/qq_35423190/article/details/120504960MySQL 8.0 hash join有重大缺陷?https://zhuanlan.zhihu.com/p/133284115...

2022-05-25 02:14:20 207

原创 MySQL常见知识点整理

文章目录MySQl 常见面试题整理事务基础什么是数据库的事务?哪些存储引擎支持事务?事务四大特性 ★★★★★事务在什么时候开始和结束?事务隔离级别 ★★★★★InnoDBInnoDB的事务隔离级别 ★★★★★如何解决数据的读一致性问题 ★★★★InnoDB 锁的基本类型InnoDB和MyISAM中锁的对比MySQl 常见面试题整理  面试题本身只是将原来的知识打碎并以问答的形式展示。如果遇到从未了解过的内容,还是推荐进行系统的学习。事务基础什么是数据库的事务?  事务是数据库管理系统(DBMS)执

2022-05-25 00:44:50 281

原创 MySQL 排查锁表常用SQL

文章目录MySQL 排查锁表常用Sql锁信息查询是否被锁的表查询innodb事务获取的锁查询会话当前会话列表基于IP过滤基于数据库过滤会话详情查询会话执行过的sql杀死会话杀死指定会话生成杀死某一IP下会话SQLMySQL 排查锁表常用Sql锁信息查询是否被锁的表show OPEN TABLES where In_use > 0;查询innodb事务获取的锁select * from information_schema.innodb_trx;查询会话当前会话列表show PRO

2022-05-18 16:59:57 6658

原创 统一建模语言 Unified Modeling Language

文章目录统一建模语言 Unified Modeling LanguageUML建模工具Rational RosePowerDesignerStartUMLOffice VisioDrawioUML类图类元组成部分类元名关键字属性可见性方法可见性学习统一建模语言需要有面向对象编程的知识和经验,务必在学习UML之前学习面向对象编程。统一建模语言 Unified Modeling Language  “统一建模语言(Unified Modeling Language)是描述、构造和文档化系统产品的可视化

2022-05-07 01:22:16 620

原创 设计模式 知识大纲

文章目录设计模式前言设计模式创建型模式结构型模式行为型模式附录拓展学习资料推荐书籍网络资源设计模式前言  设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。你必须找到相关的对象,以适当的颗粒将它们归类,再定义类的接口和继承层次,建立对象之间的基本关系。你的设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性。你也希望避免复杂设计或尽可能少做重复设计。有经验的面向对象设计者会告诉你,要一下子就得到复用性和灵活性好的设计,即使不是不可能的,至少也是非常困难的。一个设计在最终

2022-05-06 17:48:27 155

原创 Java多线程基础 09.LongAdder原理解析

文章目录Java多线程基础 09.LongAdderLongAdder和AtomicLong性能比对LongAdder原理解析Striped64的更多子类Java多线程基础 09.LongAdder  Java 8新增了一个新的类LongAdder,以空间换时间的方式提高高并发场景下CAS操作的性能。  LongAdder的核心思想是热点分离,与ConcurrentHashMap中的分段锁非常类似。LongAdder将常规的value属性拆成一个数组;并发访问时,通过哈希算法将线程映射到对应的元素进行

2022-04-18 23:37:42 636

原创 《人月神话》学习指南

文章目录《人月神话》学习指南原书介绍内容介绍作者简介目录阅读指南学习资料Bilibili《人月神话》学习指南原书介绍豆瓣链接内容介绍  在软件领域,很少能有像《人月神话》一样具有深远影响力和畅销不衰的著作。Brooks博士为人们管理复杂项目提供了最具洞察力的见解,既有很多发人深省的观点,又有大量软件工程的实践。本书内容来自Brooks博士在IBM公司SYSTEM/360家族和OS/360中的项目管理经验,该项目堪称软件开发项目管理的典范。该书英文原版一经面世,即引起业内人士的强烈反响,后又译为德、

2022-04-13 00:00:12 3923 1

原创 Java多线程基础 08.JUC包下的AtomicXXX类

文章目录Java多线程基础 08.AtomicInteger、AtomicLong、AtomicObjectAtomicXXX原子性测试AtomicInteger原理解析AtomicLong、AtomicObject原理解析AtomicBoolean原理解析Java多线程基础 08.AtomicInteger、AtomicLong、AtomicObjectAtomicXXX  java.util.concurrent.atomic包下有着许多AtomicXXX命名的类。这些类基于Unsafe的cas方

2022-04-12 16:03:32 503

原创 Java多线程基础 07.Compare-And-Swap

文章目录Java多线程基础 07.Compare-And-SwapCompare-And-SwapJava中的CASABA问题Java多线程基础 07.Compare-And-SwapCompare-And-Swap  Compare-And-Swap(之后简称CAS)是支持并发的第一个处理器提供的原子操作。,CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。如果内存位置的值与预期原值相匹配,那么处理器会自动将该位置值更新为新值。否则,处理器不做任何操作。无论哪种情况,它都会在C

2022-04-12 16:02:15 855

原创 解析MySQL中的各种锁

本笔记整理自腾讯课堂https://ke.qq.com/course/415911第一部分:Innodb锁分类Innodb中锁的分配行锁Shared and Exclusive Locks行共享锁(S)与排他锁(x)较好理解,s锁与x锁互相冲突。当读取当一行记录时为了防止别人修改则需要添加S锁。当修改一行记录时为了防止别人同时进行修改则需要添加x锁7国睡意观香。这里需要知道MySQL中具有MVCC特性,所以通常情况下普通的查询属于一致性非锁定读不会添加任何锁,另外一种是锁定读例如..

2022-03-18 15:58:45 1031 1

原创 MySQL 数据库单表备份存储过程

创建存储过程CREATE PROCEDURE `backup_table`( IN tableName CHAR ( 100 ) )BEGIN SET @backupTable = CONCAT( tableName, '_bak_',DATE_FORMAT(NOW(), '%Y%m%d%k%i%s') ); SET @stmt = CONCAT( "create table ", @backupTable, " like ", tableName, ";" ); PREPARE stmt

2022-03-18 15:49:59 998

原创 数据指标体系 2.核心概念

文章目录数据指标体系四、面向主题域管理4.1 数据域4.2 业务过程4.3 时间周期4.4 修饰类型4.5 修饰词4.6 原子指标4.7 派生指标4.7.1 事务型指标4.7.2 存量型指标4.7.3 复合指标4.8 维度4.9 维度属性五、指标命名规范5.1 原子指标命名规范5.2 派生指标命名规范数据指标体系四、面向主题域管理  指标体系采用面向主题域的管理方式,按照业务板块、数据域和业务过程三层结构进行管理。 数据仓库指标体系概念关系图4.1 数据域  指面向业务分析,

2022-03-17 18:54:17 1147

原创 数据指标体系 1.What Why How

文章目录数据指标体系一、什么是数据指标体系二、为什么需要数据指标体系2.1 指导业务分析工作2.2 驱动用户增长2.3 口径一致2.3.1 不知道大家在日常工作中是否会经常遇到如下类似的问题三、如何评估数据指标体系3.1 全方位衡量业务真实现状3.2 指标之间有没有逻辑关系3.3 是否以业务核心目标,围绕目标建设指标体系3.4 拆解指标是否有意义数据指标体系一、什么是数据指标体系  随着企业业务的发展,单一的营收指标不足以衡量和检测业务的好坏,因此需要更为立体的指标体系,监测业务状况,为业务的发展提供

2022-03-17 18:53:47 2817

原创 《深入理解计算机系统》学习指南

《深入理解计算机系统》学习指南原书介绍豆瓣链接内容介绍  本书从程序员的视角详细阐述计算机系统的本质概念,并展示这些概念如何实实在在地影响应用程序的正确性、性能和实用性。全书共12章,主要内容包括信息的表示和处理、程序的机器级表示、处理器体系结构、优化程序性能、存储器层次结构、链接、异常控制流、虚拟存储器、系统级I/O、网络编程、并发编程等。书中提供大量的例子和练习,并给出部分答案,有助于读者加深对正文所述概念和知识的理解。  本书的最大优点是为程序员描述计算机系统的实现细节,帮助其在大脑中构造一

2022-03-16 16:08:05 397

原创 Linux硬件资源管理

文章目录Linux硬件资源管理查看系统PCI设备查看CPU信息查看系统物理CPU的个数查看系统所有逻辑CPU个数查看系统内存信息查看磁盘分区信息Linux硬件资源管理查看系统PCI设备lspci此外,可以通过命令"lspci -v"得到更详细的PCI设备信息执行效果如下[root@localhost /]# lspci00:00.0 Host bridge: Intel Corporation Gemini Lake Host Bridge (rev 06)00:00.1 Signal p

2022-03-15 16:41:39 1769

原创 Linux磁盘分区、挂载

文章目录Linux磁盘分区、挂载分区命名方案查看当前系统的分区情况使用lsblk命令查看当前系统的分区情况Swap分区Swap分区多少合适Linux磁盘分区、挂载分区命名方案  Linux下是通过字母和数字的组合来标识硬盘分区的,这点不同于Windows系统下使用类似“C盘”或者“C:”来标识硬盘分区。Linux的这种命名方案比起Windows更加灵活,表达的含义也更加清晰,完全可以通过分区标识来详细了解硬盘分区情况。同时,Linux的这种硬盘命名方案是基于文件的,一般有如下文件命名方式:/dev/

2022-03-15 15:15:19 1615

原创 CentOS 7 安装MySQL8

CentOS 7 安装MySQL8安装步骤配置Mysql 8.0安装源sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm安装Mysql 8.0sudo yum --enablerepo=mysql80-community install mysql-community-server疑难杂症解决安装Mysql失败:GPG密钥已安装,但是不适用于此软件包的问题https://bl

2022-03-14 14:03:49 1686

原创 Java多线程基础 06.深入理解ThreadLocal

文章目录Java多线程基础 06.深入理解ThreadLocalThreadLocal的使用ThreadLocal的线程本地性质ThreadLocal设置初始值ThreadLocal的原理ThreadLocal.get方法ThreadLocal.set方法ThreadLocal.remove方法ThreadLocalMap初始化ThreadLocalMap.get方法ThreadLocalMap.expungeStaleEntry方法ThreadLocalMap.remove方法ThreadLocalMap

2022-02-21 20:35:58 439

原创 Java多线程基础 05.synchronized关键字

synchronized关键字  Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。synchronized 方法  如果声明了一个方法时,在前面加上关键字synchronized,那么这个方法就每次只能由一个线程运行。这种方法称为synchronized方法,有时也称为同步方法。public synchronized void run(){ }synchronized 代码块  如果只是想让方法中

2022-02-21 14:40:01 323

原创 Java多线程基础 04.Java线程安全结束

Java线程安全结束Thread::stop@Deprecatedpublic final void stop()调用stop方法,会直接停止线程,并直接释放所有的锁。Thread::suspend、Thread::resume@Deprecatedpublic final void suspend()suspend方法会直接暂停线程,并不释放锁,容易出现死锁。@Deprecatedpublic final void resume()与suspend方法对应的resume方法。

2022-02-21 14:39:31 2818

原创 Java多线程基础 03.Java线程中断机制

Java线程中断机制  interrupt业内有翻译成“打断”,也有翻译成“中断”。本文参考《Java编程思想》,译为“中断”。需要注意的是,java中的interrupt和CPU中的中断信号是两个不同的概念。Java中的interrupt只是设置标志位,在某些场景是会中断对应线程,但这并不绝对,原则上只是设置了中断标志位。线程中断的三个方法public interrupt()中断某个线程,设置标志位。public isInterrupted()查询某线程是否被中断过,不会重置标志位。publ

2022-02-21 14:38:56 301

原创 Java多线程基础 02.Java线程的生命周期

Java线程的生命周期  在给定时间点上,一个线程只能处在一种状态。Thread对象中的状态,是指Java虚拟机中线程对象的状态,并非操作系统中对应线程的状态。  JVM中线程一共有6个状态,分别为NEW(尚未启动),RUNNABLE(执行中),BLOCKED(阻塞中),WAITING(等待中),TIMED_WAITING(限时等待中)和TERMINATE(执行完成)。线程的状态迁移...

2022-02-21 14:38:26 270

原创 Java多线程基础 01.多线程第一步,启动线程

多线程第一步,启动线程  从源码层面来讲,JAVA启动线程的方式只有一种,那就是创建一个Thread对象,然后调用start()方法。继承Thread启动线程public void runThread() { Thread t1 = new T1(); t1.start();}class T1 extends Thread { @Override public void run() { System.out.println("thread");

2022-02-21 14:37:04 266

原创 Java集合框架 06.深入LinkedList源码

文章目录Java集合框架 06.深入理解LinkedList前置知识点正文Node节点Java集合框架 06.深入理解LinkedList前置知识点数据结构链表JavaList接口Queue接口Dequeue接口正文  ArrayList随机访问效率很高,但插入和删除时需要复制数组,性能较差。所以在插入和删除频繁的场景下,需要使用链表。Java中有现成的双向链表类,java.util.LinkedList。package java.util;public class Lin

2022-02-21 14:34:01 342

原创 Java集合框架 05.Queue接口、Deque接口

Queue接口  Queue —— 队列,是一种具有FIFO(先进先出)特性的线性表,非常常用。Java实现中,Queue接口继承自Collection接口,并提供了基础能力的抽象。package java.util;public interface Queue<E> extends Collection<E>boolean add(E e)  将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 Illeg

2022-02-21 14:20:22 317

原创 Java Core相关博客

文章目录Java Core相关博客-枚举集合他山之石时间API奇技淫巧辅助工具Java Core相关博客-枚举Java 探索Enum实现集合Java集合 01.集合概览Java集合 02.Collection接口解析Java集合 03.深入ArrayList源码Java集合 04.深入理解ArrayList.toArray()他山之石Java集合常见知识点&面试题总结(上) by javaguideJava集合常见知识点&面试题总结(下) by javaguideJ

2022-02-16 18:25:47 238

原创 Java集合 04.深入理解ArrayList.toArray(T[] a)

深入理解ArrayList.toArray(T[] a)  ArrayList.toArray(T[] a) 是一个将ArrayList转为数组的方法,经常用于方法的参数类型适配。Java Doc  返回包含此列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。如果指定的数组能容纳列表,则将该列表返回入参时数组。否则,将分配一个具有指定数组的运行时类型和此列表大小的新数组。 如果指定的数组能容纳队列,并有剩余的空间(即数组的元素比队列多),那么会将数组中紧接 collection 尾部的

2022-02-16 18:00:05 416

原创 Java集合 03.深入ArrayList源码

ArrayList类  ArrayList是基于动态数组实现的,对象内部存在一个Object数组elementData。transient Object[] elementData;可以随机访问,按照索引位置进行访问效率很高,用算法描述中的术语,效率是O(1)。除非数组已排序,否则按照内容查找元素效率比较低,具体是O(N), N为数组内容长度,也就是说,性能与数组长度成正比。添加元素的效率还可以,重新分配和复制数组的开销被平摊了,具体来说,添加N个元素的效率为O(N)。插入和删除元素的效率比

2022-02-16 17:58:44 276

原创 Java集合框架 01.集合概述

快速了解ArrayList对于ArrayList,它的特点是内部采用动态数组实现,这决定了以下几点。1)可以随机访问,按照索引位置进行访问效率很高,用算法描述中的术语,效率是O(1),简单说就是可以一步到位。2)除非数组已排序,否则按照内容查找元素效率比较低,具体是O(N), N为数组内容长度,也就是说,性能与数组长度成正比。3)添加元素的效率还可以,重新分配和复制数组的开销被平摊了,具体来说,添加N个元素的效率为O(N)。4)插入和删除元素的效率比较低,因为需要移动元素,具体为...

2022-02-16 17:56:40 486

原创 Java集合框架 02.浅谈Collection接口

Java集合 02.Collection接口解析  java.util.Collection接口是java中对集合的抽象,此处的集合并不是数学意义上的集合,区别在于Collection中元素是可以重复的。Collection中的核心方法int size()  获得集合的长度。boolean isEmpty()  返回集合是否为空。contains(Object o)  返回是否包含指定元素。containsAll(Collection<?> c)  返回是否包含指定集合中的所

2022-02-16 17:43:43 246

原创 JAVA Leetcode225. 用队列实现栈

225. 用队列实现栈来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/implement-stack-using-queues著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈

2022-01-24 17:28:26 206

原创 JAVA Leetcode232. 用栈实现队列

232. 用栈实现队列来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/implement-queue-using-stacks著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返

2022-01-24 16:54:48 213

原创 JAVA Leetcode155. 最小栈

155. 最小栈来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/min-stack著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack",

2022-01-20 19:32:09 293

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除