- 博客(15)
- 问答 (1)
- 收藏
- 关注
原创 深入理解MySQL全局锁、表锁、行锁的加锁原理
官方的解释是说,在给索引记录加锁的同时,会给当前索引与前一个索引之间的间隙加锁,所以其加锁规则是前开后闭区间,也就是说,在上图中next-key lock锁定范围可能是:(-∞,a1]、(a1,a3]、(a3,a5]、(a5,a9]、(a9,+∞)。比如,给t2=a5的记录加了锁,只是锁定了t2这个索引,如果不给主键索引加锁,别的线程通过update test set t1=300 where id=3修改这一列的值。但是,t2列的每个数据之间,是有间隙的,这并不能防止其他线程插入记录。
2024-06-09 20:53:47
1215
原创 如何提升MySQL分页查询的效率?
1、本文采用MySQL 5.7.30`id` INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键',`order_id` VARCHAR ( 32 ) NOT NULL COMMENT '订单ID',`user_id` VARCHAR ( 32 ) NOT NULL COMMENT '用户ID',`address_id` VARCHAR ( 32 ) NOT NULL COMMENT '地址ID',
2024-06-03 20:37:55
487
原创 一文读懂lambda表达式
文章目录前言一、什么是lambda表达式二、lambda表达式初体验三、lambda表达式结构四、函数式接口1、消费型函数接口2、供给型接口3、函数型接口4、断言型接口前言lambda表达式现在应用得越来越多,以前我总觉得lambda表达式可读性是不是不太好,但是用了它之后,真香。一直想找个时间写篇文章总结一下,但是不是因为工作忙就是有其他的事情,从周一就立了一个flag,周末一定要写,但是周六又不由自主的打开了王者荣耀,唉,还一波连跪,就很离谱。抓住周末的尾巴,可算把flag完成了。一、什么是lam
2021-08-01 18:29:10
582
1
原创 SpringBoot-自动配置核心原理
一、概述在Spring Boot的开发过程中,我们想要在某一个场景下开发,只需要引入这个场景对应的starter,Spring Boot会自动加载相关依赖,配置好相关初始化参数,本文将从源码的角度解析Spring Boot自动配置的原理。从本文中,您将学习Spring Boot自动配置的核心原理、Spring、Spring Boot的一些核心注解,自动配置类的加载、注册的条件判断等。二、源码解析Spring Boot工程创建以后会默认生成一个*Application的启动类,这个类就是一个普通的包含J
2021-07-03 18:21:20
395
1
原创 JVM探秘(五)-GC,如何判定对象可回收?
一、概述通过一系列称为“GC Roots”的根对象作为起始节点集,从这些节点开始,根据引用关系向下搜索,搜索过程所走过的路径称为“引用链”(Reference Chain),如果某个对象到GC Roots间没有任何引用链相连,或者用图论的话来说就是从GC Roots到这个对象不可达时,则证明此对象是不可能再被使用的。如图所示:图中蓝色,代表以GC Root为根节点,路径是可达的,所以在判定时,认为蓝色是不可回收对象。图中橙色,虽然对象之间有引用,但是没有GC Roots集合中的对象关联,所以在判定时会
2021-01-27 10:31:35
967
8
原创 多线程-Java线程状态转换过程详解
一、概述从图中可以看出,线程的状态大致可分为5种,NEW、RUNNABLE、RUNNING、BLOCKED、TERMINATED。可能读者会感到疑惑,为什么没有等待状态,其实大家可以不必刻意去区分等待状态和阻塞状态,只需要弄清楚二者的区别即可。等待状态的定义:处于这种状态的线程无限期地等待另一个线程执行特定操作。阻塞状态的定义:一个线程因为等待临界区的锁被阻塞产生的状态。我们可以看出二者的区别等待状态是主动的阻塞,阻塞状态是被动的阻塞。大家可以看看能够进入等待状态的方法:Object.wait()
2021-01-25 13:53:02
421
原创 JVM探秘(四)-Java虚拟机性能监控工具详解
一、概述jps(JVM Process Status Tool):可以列出正在运行的虚拟机进 程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一 ID(LVMID,Local Virtual Machine Identifier)。LVMID是类似于进程号,比如我们同时运行三个Java程序,那么将会有与之对应的三个Java虚拟机实例。每一个虚拟机实例都类似于进程,有一个ID标识符。二、使用方法jps的命令格式如下:jps [ options ]
2021-01-21 21:49:55
1233
11
原创 JVM探秘(三)-Java虚拟机类加载详解
小伙伴们,大家好:今天我们要介绍的内容是Java虚拟机类加载的过程,从上文《JVM系列(二)字节码文件结构(基础篇)》中我们详细的介绍了,Java源文件经过编译器编译后得到的字节码文件的内部存储细节,那么在虚拟机是如何加载并且使用这些数据结构的呢?我们一起来看看吧。从一个字节码文件被虚拟机加载到内存开始,到卸载出内存为止,它整个生命周期将会经历加载、加载 (Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化 (Initializati
2021-01-21 10:39:46
374
3
原创 JVM探秘(二)-字节码文件结构(基础篇)
小伙伴们,大家好:今天是JVM系列的第二篇,字节码结构详解。在讲解字节码文件之前,我觉得有必要聊聊我们为什么要学习字节码。很多小伙伴可能会有这样的想法,我编程用不上字节码文件,我学它干啥?那小伙伴们想一想,在你没有学习虚拟机之前,假设你的项目再线上遇到一个CPU占用率高的问题,你是不是只能逛逛博客,百度,寻求问题的解决方案,但是在你学习虚拟机之后,你可能会尝试着使用jstack等故障诊断工具区排查问题。又比如在你未曾看JDK源码之前,你遇到一个异常,是否又只能去百度,但是如果你看了源码,你会想着去从源码的
2021-01-18 00:02:37
868
6
原创 JVM探秘(一)-Java虚拟机运行时数据区域详解
Hello,大家好:今天咱们来聊聊Java运行时数据区域,在我们学习Java的时候,很多人将Java的内存区域都笼统的分为堆和栈,只知道new的对象都存储在堆中,基本数据类型保存在栈中。这种想法对于初学者很合适,但是对于有一定Java编程经验的大佬们来说,可就错了。下面我们来看看Java运行时数据区域。我们先从线程私有区域进行讲解:程序计数器(pc Register):JDK官方是这样给出定义的:Java虚拟机可以同时支持多个线程执行。每个Java虚拟机线程都有自己的pc(程序计数器)寄存器。在任
2021-01-12 21:00:46
493
3
原创 Java中的迭代器模式-Iterator和Iterable源码解析
Hello,大家好:在上一篇博文中我们讲解了设计模式中的迭代器模式,这一篇文章,咱们来聊聊JDK源码中是如何去实现迭代器模式的。如果对迭代器模式不清楚的同学,请查看这篇文章超详细-设计模式之迭代器模式。在Java中存储数据的数据结构有很多种,例如Map、数组、列表等等。每种数据结构的遍历方式都不相同,对于使用者来说,我肯定希望能在不知道每种数据结构内部的存储细节的情况下,对每种容器完成遍历。于是Java实现了迭代器模式,定义一种通用的遍历元素的方法,由每种数据结构去实现这些遍历方法。下面我们将从源码的角
2021-01-08 20:38:48
615
2
原创 超详细-设计模式之迭代器模式
Hello,大家好:今天我们来聊一下设计模式中迭代器模式。背景:甲、乙、丙三人合作开发一套人员管理系统,甲在编程中习惯使用数组存储元素,乙喜欢编程中习惯使用List等集合存储元素,丙在项目开发中刚好需要遍历甲、乙存储的元素。无奈,丙只能写两套不同的遍历方法,最终丙被组长说写了废代码。丙只能说:呵呵,怪我了。上述场景用代码描述为:Student[] students = new Student[10];for (int i = 0; i < students.length; i++) {
2021-01-07 12:40:47
2181
8
原创 ArrayList源码解析
Hello,小伙伴们,大家好:今天要分析的是ArrayList类的源码,我们一起来看看吧。今天是我们源码篇的第一天,在阅读源码之前我们应该清楚阅读源码的意义在哪儿。我认为阅读源码的意义有以下三点:1、阅读源码能够学习前辈们许多优秀的代码设计方法。2、阅读源码能够帮助我们提升编程能力。3、阅读源码能够帮助我们快速的定位开发、运行时碰到的各种问题。所以对于想提升技术的小伙伴们,我们阅读源码是一段必经的旅程。好,我们进入正题,开篇一张图,了解一下ArrayList的继承关系。Iterable接口:
2021-01-05 12:48:31
403
1
原创 赫夫曼树的原理及Java实现
一、基本介绍1、 简介:在给定n个权值作为n个叶子节点,构造一颗二叉树,如果该二叉树的带权路径长度(wpl)达到最小,称为这样的树称为最优二叉树,也称赫夫曼树。赫夫曼树是带权路径最短的树,权值越大的结点离根结点最近。2、 二叉树的路径长度:由根结点到所有叶子结点的路径长度之和。3、 二叉树的带权路径长度:从根结点到各个叶子结点的路径长度与相应结点权值的乘积之和。例如一下树的带权路径长度为:...
2020-04-03 13:03:28
389
空空如也
关于PropertyEditorRegistry的一点疑惑
2022-08-05
TA创建的收藏夹 TA关注的收藏夹
TA关注的人