- 博客(23)
- 收藏
- 关注
原创 一文看懂MyBatis
Mybatis官方文档:https://mybatis.org/mybatis-3/zh_CN/getting-started.html
2025-03-04 20:00:43
849
原创 一文搞懂AQS
AQS的核心思想:如果被请求的共享资源关闭,那么就将请求资源的线程设置为有效的工作线程,将共享资源设置为锁定状态;如果共享资源被占用,就需要一定的阻塞等待唤醒机制来保证锁分配。这个机制主要使用CLH队列的变体来实现的,将暂时获取不到锁的线程加入到队列中。AQS中的队列是CLH变体的虚拟双向队列(FIFO),AQS通过将每条请求共享资源的线程封装成一个节点来实现锁的分配。主要原理图如下:AQS使用一个volatile的int类型的成员变量来表示同步状态,通过CAS对state值的修改。
2024-12-31 20:46:49
637
原创 volatile关键字
指令重排序是指在不影响单线程程序执行结果的前提下,编译器和处理器为了优化程序的性能,对指令的执行顺序进行重新排列的一种优化技术。
2024-12-04 15:24:46
739
原创 synchronized底层原理
原子性synchronized和volatile特性上最大的区别就是原子性,volatile不具备原子性。可见性有序性可重入性2.2 静态同步方法2.3 同步方法块三、synchronized的底层实现JVM中,对象在内存中分为三块区域在Hotspot虚拟机中,Monitor是由ObjectMonitor实现的,源码时C++语言实现的,想深入了解的可以下载Hotspot的源码,我们在这里只是简单介绍一下数据结构从上图可以总结获取Monitor和释放Monitor的流程如下:查看的字节码指
2024-11-27 16:40:00
1202
原创 并发编程理论
原子性在一次或多次操作中,要么所有的操作都执行,要么所有操作都不执行。i0thread1thread2i10000i++2000i++操作实际上包含了读取i的值、将其加1、再将结果写回i这三个步骤,它不是一个原子性操作。可见性是指一个线程对共享变量进行修改,另一个线程立即得到修改后的最新值。flagfalseflagtrueflagflagtrue有序性程序中代码执行的顺序,Java在编译时和运行时会对代码进行优化,会导致程序最终的执行顺序不一定就是我们编写代码时的顺序。
2024-11-16 15:47:16
847
原创 线程和进程
线程是CPU调度的最小单位,是独立执行的路径。进程是系统进行资源分配和调度的基本单位,是线程的集合,一个进程出来包含多个线程之外,还有其余的共享变量空间。
2024-11-11 11:18:10
238
原创 一文拿下JVM面试
类加载器是JVM用来加载类的核心组件,负责将Java字节码文件(.class)动态的加载到内存中,并将其转化为JVM可以执行的类对象。
2024-10-13 17:02:56
888
原创 MySQL语句执行流程
MySQL可以分为Service层和存储引擎层Service层:连接器、查询缓存、分析器、优化器、执行器存储引擎层:负责数据的存储和提取。
2024-09-21 23:24:12
483
原创 MySQL索引
索引就是MySQL高效获取数据的数据结构。通俗点来讲,索引就好比是书的目录,可以提高数据库的查询速度。索引下推减少了不必要的行访问和回表操作。在MySQL5.6之前,会直接进行全表扫描。在MySQL5.6之后,会先对age进行过滤,在进行扫描。
2024-09-19 19:15:51
967
原创 什么是MVCC?
版本链存储的除了我们实际的数据,其实还存储了trx_id(事务ID)和指向上一个版本的指针。undo log就是用来存储历史数据的。字段含义m_ids当前活跃的事务ID集合min_trx_id最小活跃事务IDmax_trx_id预分配事务ID,当前最大事务ID + 1(因为事务ID是自增的)ReadView创建者的事务IDread view就规定了版本链数据的访问规则。条件是否可以访问可以访问可以访问不能访问。
2024-09-18 16:44:38
360
原创 数组中常见的算法
数组在内存中的空间是连续的,所以就会导致数组的插入、删除的时间复杂度会很高,我们在删除和插入元素的时候需要移动其他元素来保证数组内存空间的连续。数组的下标是从0开始的。
2024-09-17 23:02:45
368
1
原创 Java的变量和常量
变量声明式赋初值语法:数据类型 变量名 = 值;先声明变量,然后赋值语法:数据类型 变量名;变量名=值;int num;num = 1;常量就是固定不变的值,是不能改变的数据。使用final关键字修饰语法:final 数据类型 变量名 = 值;
2024-05-17 21:48:13
1560
原创 JAVA数据类型
Java数据类型分为基本数据类型和引用数据类型。大家最容易混淆的就是String,String是引用数据类型而不是基本数据类型。
2024-05-16 14:32:15
158
原创 JDK和JRE的区别
一、什么是JDKJDK是Java Development ToolKit的简称,也就是Java开发工具包。JDK是整个Java的核心。二、什么是JREJRE是Java的运行环境,并不是开发环境。三、JDK和JRE的区别JDK是给程序员用的,JRE提供给想运行Java程序的用户使用的。
2024-05-16 00:00:35
273
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人