自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(49)
  • 收藏
  • 关注

原创 图解 MySQL MVCC 实现原理

用图解的方式解释了 MySQL MVCC 机制实现的原理

2023-02-03 20:54:53 824

原创 MySQL explain 命令

介绍了 MySQL explain 命令的用法,并逐一解释了返回字段的含义

2021-12-14 21:02:28 899

原创 MySQL 索引类别与索引使用指南

详细地介绍了 MySQL 的 4 种索引类型与 2 种索引方法,接下来介绍了主键构成的索引结构及其优缺点,最后介绍了索引的数据排序规则,以及一些使用规则。

2021-12-11 12:33:03 1244

原创 MySQL 索引底层数据结构实现

详细地介绍了 MySQL 索引的底层数据结构。列举了常见的查询数据结构,并从 InnoDB 引擎开发人员的视角逐一分析和对比为何 MySQL 要使用 B+ 树来实现索引

2021-12-08 23:17:05 1163 2

原创 MySQL 逻辑架构与常用的存储引擎

主要介绍了MySQL 逻辑架构与常用的存储引擎。逻辑架构主要分为 Server 层和存储引擎层,其中Server 层主要介绍了连接器、查询缓存、分析器、优化器、执行器这些主要的功能模块。而存储引擎层,则主要介绍了 InnoDB 和 MyISAM 两种较为常用的存储引擎的文件储存方式,主要特性,以及查询执行逻辑等内容

2021-12-07 23:11:28 2033

原创 LeetCode.31 下一个排列

介绍了有关 LeetCode.31 下一个排列题目的有关思路与解法

2021-12-07 19:53:36 463

原创 Java 故障处理与性能监控工具

主要介绍了一些用于处理 Java 程序故障及性能监控的工具。介绍一些 JDK 自带的命令行工具,如 jps、jstat、jinfo、jmap、jhat、jstack 命令;以及一些高级的监控工具,如 VisualVM、Arthas、GC Easy。

2021-12-05 18:15:16 708

原创 Java 主流垃圾收集器

主要介绍了一些基于分代收集理论的 Java 垃圾收集器的主要特性与执行流程、优缺点等内容,例如 Serial、Serial Old、Parallel Scavenge、Parallel Old、CMS,以及 G1 垃圾收集器

2021-12-05 16:02:34 212

原创 内存回收算法与 Hot Spot 算法实现细节

详细介绍了主流对象存活判定算法、垃圾收集算法,以及对应的 Hot Spot 虚拟机对于算法的实现细节

2021-12-02 22:57:58 684 2

原创 JVM 内存模型与内存分配方式

详细介绍了 JVM 内存模型,与内存划分方法、内存划分并发问题的解决方案、对象栈上分配、基于分代收集理论的垃圾收集器管理下的堆内存分配规则等知识点。

2021-11-30 22:23:27 441

原创 Java 类加载机制

文章目录概述类的生命周期类加载的时机类加载的主要 5 个阶段加载验证准备准备阶段初始值的含义解析符号引用直接引用解析阶段的理解静态绑定与动态绑定初始化类加载器类加载器与类之间的关系类加载器的种类双亲委派机制双亲委派机制设计目的破坏双亲委派机制破坏双亲委派机制的方法破坏双亲委派机制的意义概述JVM 类加载机制,指的是把某个类加载到 JVM 中的整个流程。类的生命周期类从被加载到 JVM 中开始,到使用完毕卸载出内存为止,整个生命周期包括:Created with Raphaël 2.3.0加载验证准

2021-11-28 21:56:29 317

原创 常用并发工具类(线程池)

文章目录概述ThreadPoolExecutorThreadPoolExecutor 的主要属性Worker 主要属性线程池的状态线程池的状态流转线程池提交任务的执行流程线程池的种类FixedThreadPoolCachedThreadPoolSingleThreadExecutorScheduledThreadPoolExecutorSingleThreadScheduledExecutorForkJoinPoolwork-stealing概述线程池,是资源池化思想的一种实现。线程是一种宝贵且有限的

2021-11-28 14:35:34 1543

原创 常用并发工具类(并发集合类)

文章目录概述BlockingQueueArrayBlockingQueue数据存储相关属性阻塞特性相关属性主要方法LinkedBlockingQueueLinkedBlockingQueue 主要属性LinkedBlockingQueue 设计思想ConcurrentLinkedQueuePriorityBlockingQueuePriorityBlockingQueue 主要属性PriorityBlockingQueue 设计思想SynchronousQueueLinkedBlockingDequeDel

2021-11-23 23:10:05 1888

原创 常用并发工具类(锁和线程间通信工具类)

常用并发工具类总结JUC 下的常用并发工具类(锁和线程间通信工具类),主要包括 ReentrantLock、ReentrantReadWriteLock、CountDownLatch、CyclicBarrier、Semaphore、ExchangerReentrantLock 和 ReentrantReadWriteLockReentrantLock 是可重入独占锁,ReentrantReadWriteLock 是可重入读写锁。ReentrantLockReentrantLock 支持公平和非公平

2021-11-21 22:43:23 471

原创 Java 序列化总结.md

概述序列化:将对象写入到 IO 流中反序列化:从 IO 流中恢复对象实现方法实现 Serializable 或者 ExternalizableSerializable:标记接口,不用实现任何方法,可以指定序列化 IDExternalizable:增强的序列化标记接口,提供了 writeExternal 和 readExternal 两个接口方法,这两个方法在序列化和反序列化的过程中会被调用注意,序列化 ID 只是一个版本号,两种方法都可以不指定,JVM 会根据类中的信息自动计算一个序列

2021-11-08 07:43:48 108

原创 MySQL 排名函数.md

概述MySQL 自带的排名的函数,主要有:row_number()rank()dense_rank()ntile()测试数据测试数据如下所示:row_number() 函数用法如下:SELECT row_number() OVER (ORDER BY Salary DESC) row_num, SalaryFROM Employee查询结果如下:注意,row_number() 函数在 Salary 相等的情况下,行号是递增的rank() 函数

2021-10-11 15:51:53 262

原创 不使用 + 和 - 运算符计算两整数之和

问题概述不使用运算符 + 和 -,计算两整数之和思考不适用 + 和 - ,那就只能想到用位运算来处理了。思路如下:两数进行 ^(异或运算),可以得到两个数在相同位上数值不同的相加结果两数进行 &(与运算),可以得到哪些位该进位如果与运算的结果为 0,代表两数的所有位都是不同的数值,不需要进位,那么第一步得到的结果就是最终的结果如果与运算的结果不为 0,代表有位要进位,那么需要将这个结果往左移一位重复上面两步,直到与运算结果为 0,即得到的就是正确的结果实现代码publi

2021-08-08 12:16:53 470

原创 Spring bean 不被 GC 的真正原因

概述自从开始接触 Spring 之后,一直以来都在思考一个问题,在 Spring 应用的运行过程中,为什么这些 bean 不会被回收?今天深入探究了这个问题之后,才有了答案。思考点大家都知道,一个 bean 会不会被回收,取决于对象存活判定算法。在 JVM 底层中使用的是可达性分析算法,抛开 HotSpot 的实现细节不谈,那么一个对象被判定为死亡,应该与 GC Root 不存在可达的引用路径。所以,Spring 的 bean 肯定是与 GC Root 存在可达的引用路径,才不会被回收掉在 J

2021-07-21 16:01:18 2220

原创 详解 ConcurrentHashMap

文章目录ConcurrentHashMap 的底层数据结构?ConcurrentHashMap 的带参构造方法的流程?ConcurrentHashMap 的 put 方法的流程?ConcurrentHashMap addCount 方法的流程是怎样的呢?ConcurrentHashMap transfer 方法的流程是怎样的呢?ConcurrentHashMap helpTransfer 方法的流程是怎样的呢?ConcurrentHashMap 的 get 方法的流程?ConcurrentHashMap 的

2021-07-01 23:29:06 778 1

原创 Fail-fast 和 Fail-safe 机制

fail-fast 和 fail-safe 的区别从字面意思来看 fail-fast 是快速失败,fail-safe 是安全失败,这都是集合类对于并发读写时的一种应对机制。fail-fast,广泛应用于 java.util 下的集合类中,其机制为在使用迭代器遍历的过程中,如果此时集合对象的结构被改变(即插入、删除元素时, modCount 的值发生变化。替换元素的值不会发生改变)后,会抛出 ConcurrentModificationException (并发修改异常)的异常。这是一种不支持并发读写的

2021-07-01 23:25:14 312

原创 Java 线程状态流转

线程一共有 6 种状态:NEW:新建状态,当一个线程被创建完成,还没有调用 start() 方法时,是这种状态。RUNNABLE:可运行状态,当一个线程正在正常地执行 run() 中的代码时,是这种状态。可运行状态包含了正在被 CPU 选中执行的状态。等待 CPU 调度的状态。BLOCKED:阻塞状态,当一个线程尝试获取对象的监视器锁失败时(例如未能争抢到对象的监视器锁,从而被 synchronized 关键字修饰的方法/代码块阻塞的线程,这些线程将会放到这个对象的阻塞池(entryLis

2021-06-14 10:52:38 1232 1

原创 包装类型与基本类型的装箱与拆箱操作

文章目录概述Boolean 与 booleanCharacter 与 charByte 与 byteShort 与 shortInteger 与 intFloat 与 floatDouble 与 doubleLong 与 long总结概述基本类型与包装类型,存在相互转化的关系。基本类型转为包装类型这个过程,被称之为装箱包装类型转为基本类型这个过程,被称之为拆箱Boolean 与 boolean装箱操作通过 Boolean.valueOf() 来完成拆箱操作通过 Boolean.boole

2021-06-05 15:27:23 530

原创 Iterator 和 ListIterator 的区别

概述Iterator 和 ListIterator 都是迭代器,都可以用来遍历 List,ListIterator 还继承自 Iterator。区别Iterator 只能用于顺序遍历,且只能删除元素ListIterator 可以顺序或者反序遍历ListIterator 可以增加(add(E e) 方法)、替换(set(E e)方法)和删除元素ListIterator 可以获取前一个或者后一个元素的下标注意点ListIterator 的 set(E e) 方法,是替换迭代器访问的最后一个

2021-05-25 22:55:36 220

原创 CountDownLatch 介绍与举例实现

文章目录概述主要方法举例实现概述CountDownLatch 是 JUC 包下的一个重要的并发工具,它是一个线程协同作业的工具,使某些线程一直处于等待状态,直到另外的线程完成任务后再执行。主要方法CountDownLatch 主要靠内部的一个计数器来实现同步功能,其过程具有不可重复性。countDown() 方法:计数器的值 -1。getCount() 方法:获取当前计数器的值。await() 方法:当计数器的值不为 0 时,将阻塞所有调用此方法的线程,一直到计数器的值为 0 时,才会唤醒所

2021-05-20 23:31:09 275

原创 java.lang.relect.Array 类

概述这是一个位于 java.lang.reflect 包下的类,类中的方法都是静态方法,主要的功能就是更方便地创建数组。在数组元素类型未知时,简化了操作数组的代码。使用示例//创建一个长度为 5 的整形数组//等价于 int[] array = new int[4];int[] array = (int[]) Array.newInstance(int.class, 5);//填充 0-4 下标的值,等价于 array[i] = i Array.set(array, 0, 1);Array.

2021-05-16 15:48:42 96

原创 Docker exec 命令执行出错, 显示 the input device is not aTTY 的解决办法

问题描述在使用 docker exec 命令进入容器时,发现报错信息如下:the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'解决办法这是因为命令行权限不足导致的,解决办法就是提升权限Windows 环境下,使用管理员权限打开 CMD 窗口再次执行命令即可解决问题Linux 环境下,使用 sudo 再次执行命令即可解决问题...

2021-05-15 15:06:53 1630

原创 Java 父子类方法调用顺序

概述在 Java 的多态中,有个结论可以直接引用:对象类型看左边静态方法和成员变量看左边成员方法,编译看左边,运行看右边(子类可能重写)如果有多个匹配的方法可以调用,优先调用参数最匹配的一个调用顺序现在有这么一段代码Parent p = new Son();// do something here....首先看父类中是否存在可以匹配的方法如果父类中不存在,那么编译出错如果父类中存在如果父类中有多个匹配的方法,则寻找最匹配的那个方法,例如 method(Integer a)

2021-05-13 10:56:58 390

原创 RabbitMQ 基本概念与高级特性

文章目录1. 什么是消息队列1.1 消息队列概述1.2 使用消息队列的优势1.3 使用消息队列的劣势2.2.6 Connection2.2.7 Channel2.2.8 Virtual Host2.2.9 Consumer2.2.10 Broker2.3 RabbitMQ 的六种工作模式2.3.1 工作队列模式2.3.2 发布/订阅模式2.3.3 路由模式2.3.4 主题模式2.3.5 RPC 模式2.3.6 消息头模式3. RabbitMQ 高级特性3.1 消息投递时序图3.2 消息的可靠投递3.2.1

2021-04-18 21:40:40 658

原创 Spring Bean 的生命周期

概述Spring 启动,扫描指定的包路径,查找需要被 Spring 管理的 bean构造 BeanDefinition 对象实例化 bean,如果有多个构造方法,则需要推断构造方法,确定好构造方法后,进行实例化得到一个对象进行 bean 的属性注入如果 bean 实现了 BeanNameAware 接口,Spring 将会 bean 的 id 传递给 setBeanName() 方法如果 bean 实现了 BeanFactoryAware 接口,Spring 将会调用 setBeanFacto

2021-04-03 11:07:19 70 1

原创 判断链表是否相交并找出交点

问题概述单链表定义如下: public class ListNode { int val; ListNode next; ListNode(int x) { val = x; next = null; } }编写程序, 找出两个链表的交点。如图所示,链表 A 和链表 B 在节点 8 处相交。算法思路首先确定一个事情:如果两个链表有交点, 那么这两个链表的尾节点一定是相等的。现在不仅需要判断是否有

2021-03-09 23:06:58 208

原创 Boyer-Moore 投票算法

多数元素问题有以下问题:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。比较容易想到的解法是用哈希表对每个数出现的次数进行保存,然后就可以找出次数最多的那个数了。这样做的时间和空间复杂度都是 O(n)O(n)O(n)。但是这并不是最优解。Boyer-Moore 投票算法算法的基本思路为:随机指定一个数组中的一个数为候选者(candidate),用 count 记录它的出现次数

2021-03-06 15:48:07 95 1

原创 递推算法之滚动数组思维方式

概述在算法的最终结果只用到本层与上一层的结果时, 可以使用滚动数组思想。简单的理解就是每次都使用固定的几个存储空间达到压缩节省存储空间的作用, 主要用在递推算法中。示例1: 爬楼梯问题假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?由题可知, 在爬上第 n 阶楼梯时,可以爬 1 个或 2 个台阶, 即爬上最后一阶台阶时,总办法数 = 最后一阶台阶是 n-1 阶与 最后一阶台阶是 n-2 阶的办法数的和, 即状态转移方程为:f

2021-02-28 15:04:18 174

原创 Docker Swarm compose 文件 depends_on 属性

Swarm 部署时候如果需要管理应用之间的启动先后顺序,则可以使用 services.depends_on 属性进行指定,例如services: eureka-service: ...... depends_on: - config-service ......

2021-02-19 21:43:15 931

原创 服务启动不了,显示 config 异常的问题排查

文章目录问题详情排查过程1.1 查看配置文件是否可以正常加载1.2 进入 config 服务正在运行的容器, 查看文件是否存在1.3 查看容器运行日志:最后发现是配置文件中多了一个 TAB 符,唉,说多了都是泪!问题详情出现异常报错: Could not locate PropertySource and the fail fast property is set, failing排查过程1.1 查看配置文件是否可以正常加载查看配置文件是否正确加载的 url:http://configserve

2021-02-19 21:41:39 2898

原创 终止线程的方法

如何终止一个正在运行的线程?设置状态位来终止一个正在运行的线程。可以自己实现, 也可以使用 interrupt 方法来设置这个状态位, 然后在代码中判断 isInterrupted 的返回结果来执行退出执行的逻辑。了解 Thread 类中的 stop、interrupt 方法吗?为什么不用 stop 方法来终止线程的运行呢?stop 方法是用来强制中断线程执行的方法, 但是现在已经过时了;interrupt 方法是用来设置线程的中断状态位的, 这个状态位通过本地方法 interrupt0 来设置;

2021-02-19 21:36:06 59

原创 HashMap 学习笔记

1.HashMap 的类继承关系图示即为 Map 相关类的继承关系。源码中的类签名如下:public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable { ......}2.HashMap 的底层存储结构HashMap 的底层存储结构是 Node 类, 实现了 Map 中的 Entry。即 HashMap 底层是由

2021-02-19 21:29:50 915

原创 Java 父子类加载顺序

现在有一个Parent类和一个Son类, 代码分别如下:public class Parent { static { System.out.println(" order 0"); } private static String s = init(); { System.out.println(" order 3"); } public Parent() { System.out.println(" order

2021-02-19 21:26:49 703

原创 Java 异常种类及处理方法

概述异常的基类是 Throwable, Throwable 有两个子类:Exception : 表示可以恢复的异常, 编译器可以捕捉。Error : 表示编译时和系统错误, 表示系统在运行期间出现了严重的错误, 属于不可恢复的错误。受检异常和非受检异常受检异常指的是在编译期间会接受编译器检查, 且必须要处理( try... catch 处理掉或直接在方法签名中使用 throws 抛出), 否则会编译出错。此类异常是除了 RuntimeException 和 Error 外所有的异常, 例

2021-02-19 21:25:36 140

原创 MySQL count(1) , count(*), count(列名) 的异同

count 函数主要用于统计行数,我们一般会用 count(1) , count(*), count(列名) 来统计行数,但是这三者之间有什么差距呢?异同当 count(列名) 在列名不是主键列的情况下,将只统计该列的非空行数,效率也最低下;当 count(列名) 在列名为主键列,且在没有非聚集索引的情况下,三者都将使用主键索引来查询并统计,效率一致;当 count(列名) 在列名为主键列,且有非聚集索引的情况下,三者都将使用长度最小的非聚集索引来进行统计,效率一致。总结查询优化器的优化

2021-02-19 21:23:26 139

原创 微服务雪崩效应与 Hystrix

文章目录微服务雪崩效应微服务中常见的容错方案常见的服务容错思路Hystrix 简介微服务雪崩效应微服务系统中, 每一个服务专心于自己的业务逻辑, 并对外提供相应的接口, 看上去似乎耦合度比较低, 但经常会遇见这样一种场景:可以看到, 当 C 服务挂掉时, B 服务还在不断地调用 C 服务期望获得结果, 结果在 B 服务内部产生了大量的调用等待和重试调用的线程, 随着新的请求不断地往这条调用链路上跑, 那么 B 服务的资源就会被这些线程耗尽, 从而导致 B 服务也不可用。同理, 当 B 服务也挂掉时

2021-02-19 21:18:21 138

空空如也

空空如也

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

TA关注的人

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