自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL进阶之(十四)MVCC-多版本并发控制

在 MVCC 机制中,多个事务对同一个行记录进行更新会产生多个历史快照,这些历史快照保存在 undo log 里,如果一个事务想要查询这个行记录,需要读取哪个版本的行记录呢?这时就需要用到 ReadView 了,它帮助我们解决了行的可见性问题。ReadView 就是事务在使用 MVCC 机制进行快照读操作时产生的读视图。当事务启动时,会生成数据库系统当前的一个快照,InnoDB 为每个事务构造了一个数组,用来记录并维护系统当前活跃事务的 id(活跃指的就是,启动了但还没提交)。

2024-11-10 15:53:54 664

原创 MySQL进阶之(十三)MySQL锁机制

脏读的产生是因为当前事务读取了另一个事务未提交的记录,如果另一个事务再写记录的时候就给这条记录加锁,那么当前事务就无法继续读取该记录了,所以也就不会有脏读的问题产生了。不可重复读的产生是因为当前事务先读取了一条记录,另外一个事务对该记录做了改动之后并提交,当前事务再次读取时会获得不同的值,如果在当前事务读取记录时就给该记录加锁,那么另一个事务就无法修改该记录,也就不会发生不可重复读了。幻读。

2024-11-03 16:35:56 857

原创 MySQL进阶之(十二)MySQL事务日志-undo log

在事务中更新数据的前置操作其实就是要先写入一个 undo log。

2024-10-20 21:01:33 1120

原创 MySQL进阶之(十一)MySQL事务日志-redo log

这个和磁盘的扇区有关,机械磁盘默认的扇区就是 512 字节,如果要写入的数据大于 512 字节,那么要写入的扇区肯定不止一个,这时就要设计到盘片的转动,找到下一个扇区,假设需要写入两个扇区 A 和 B,如果扇区 A 写入成功,而扇区 B 写入失败,那么就会出现非原子性的写入,而如果每次只写入和扇区的大小一样的 512 字节,那么每次的写入都是原子性的。对于使用 InnoDB 存储引擎的表来说,无论是用于存储用户数据的索引,还是各种系统数据,都是以【页】的形式存放在表空间中的。

2024-10-18 23:11:13 1195

原创 MySQL进阶之(十)事务和隔离级别

MySQL 事务主要用于处理操作量大、复杂度高的数据。比如:张三给李四转钱这个操作,必须同时完成两步:扣除张三账户中的钱、新增李四账户中的钱。这两步数据库操作就构成了一个事务。事务是一组逻辑操作单元,使数据从一种状态变换到另一种状态。事务是数据库区别于文件系统的重要特性之一,有了事务就会让数据库始终保持一致性,同时还能通过事务机制恢复到某个时间点,这样可以保证已提交到数据库的修改不会因为系统崩溃而丢失。在 MySQL 中只有使用了InnoDB 存储引擎的数据库或表才支持事务。

2024-07-22 23:04:04 713

原创 MySQL进阶之(九)数据库的设计规范

在关系型数据库中,关于数据表设计的基本原则、规则就称为范式。可以理解为,一张数据表的设计结构需要满足的某种设计标准的级别。要想设计一个结构合理的关系型数据库,就必须满足一定的范式(Normal Form,简称:NF)。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法。目前关系型数据库有六种常见范式,按照范式级别,从低到高分别是:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)、第五范式(5NF,又称完美范式)。

2024-05-28 22:54:13 931

原创 MySQL进阶之(八)索引优化与查询优化

提前为下文做数据准备,两张表:学员表(student) 插入 50w 条数据,班级表(class) 插入 1w 条数据。

2024-05-16 22:46:16 912

原创 MySQL进阶之(七)EXPLAIN 详解

id 如果相同,可以认为是一组,自上往下顺序执行。在所有组中,id 值越大,优先级越高,越先执行。id 的每个值都代表一趟独立的查询,一个 sql 的查询趟数越少越好。

2024-04-10 22:10:43 1037

原创 MySQL进阶之(六)索引的使用与设计原则

① 冗余索引例如:通过 idx_name_birthday_phone_number 索引就可以对 name 列进行快速搜索,再创建一个专门针对 name 列的索引就算是一个冗余索引,维护这个索引只会增加维护的成本,并不会对搜索有什么好处。② 重复索引col2 INT,例如:col1 既是主键、又给它定义为一个唯一索引,还给它定义了一个普通索引,可是主键本身就会生成聚簇索引,所以定义的唯一索引和普通索引是重复的,这种情况要避免。

2024-03-28 22:05:59 1205

原创 MySQL进阶之(五)InnoDB数据存储结构之表空间

在。

2024-03-09 19:59:16 1342

原创 MySQL进阶之(四)InnoDB数据存储结构之行格式

之所以要存储 NULL 值,是因为数据都是需要对齐的,如果没有标注出来 NULL 值的位置,就有可能。

2024-03-06 22:54:51 1446

原创 MySQL进阶之(三)InnoDB数据存储结构之数据页结构

InnoDB数据页结构

2024-03-01 23:11:01 1450

原创 MySQL进阶之(二)索引的数据结构

索引的数据结构

2024-01-09 20:13:08 1884 2

原创 MySQL进阶之(一)逻辑架构

逻辑架构、select语句的执行过程、update语句的执行过程

2023-12-28 22:50:55 1788 1

原创 (五)Java 的内存模型 JMM

一方面,需要 JMM 提供一个强的内存模型来编写代码;另一方面,编译器和处理器希望 JMM 对它们的束缚越少越好,这样它们就可以最可能多的做优化来提高性能,希望的是一个弱的内存模型。JMM 考虑了这两种需求,并且找到了平衡点,对编译器和处理器来说,只要不改变程序的执行结果(单线程程序和正确同步了的多线程程序),编译器和处理器怎么优化都可以。而对于我们开发来说,JMM 提供了 happens-before 规则(JSR-133规范),满足了我们的需求——简单易懂,并且提供了足够强的内存可见性保证。

2023-07-17 16:37:20 226

原创 (四)并发编程带来了哪些问题?

CPU 是很宝贵的资源,速度也非常快,为了保证雨露均沾,通常为给不同的线程分配时间片,当 CPU 从执行一个线程切换到执行另一个线程时,CPU 需要保存当前线程的本地数据、程序指针等状态,并加载下一个要执行的线程的本地数据、程序指针等,这个开关被称为。这时线程 2 执行 get() 方法,首先会从主内存中读取 i 的值,然后加载到自己的工作内存中,这个时候读取到 i 的值是 50,再将 50 赋值给 j,最后返回 j 的值就是 50 了。然而,车道一旦多起来,也就意味着『加塞』的场景可能就会越来越多。

2023-07-06 14:53:47 611

原创 (三)线程组和线程优先级

可以看到终端或命令提示符界面没有任何输出,main 线程(非守护线程)在启动了 DaemonThread 线程之后随着 main 方法的执行结束而终止了,而此时 Java 虚拟机中已经没有非守护线程了,所以 Java 虚拟机需要退出,同时 Java 虚拟机中所有的线程都要立即终止,因此 DaemonThread 守护线程直接终止,finally 代码块中的语句并没有执行。由此可见,如果某个线程的优先级大于线程所在线程组的最大优先级,那么该线程的优先级将会失效,取而代之的是线程组的最大优先级。

2023-07-04 17:59:19 444

原创 (二)线程的六种状态及上下文切换

线程的六种状态及上下文切换。

2023-07-02 16:52:54 924

原创 (一)创建线程的三种方式

如果其他线程都执行完毕,main() 方法也执行完毕,JVM 就会退出,也就是停止运行。如果 JVM 都停止运行了,守护线程自然也就停止了。创建一个类实现 Callable 接口,重写 call() 方法,这种方式可以通过FutureTask获取任务执行的返回值。使当前正在执行的线程暂停指定的毫秒数,也就是进入休眠的状态。显然,这些概念是很抽象的。因为 run() 方法是用来封装被线程执行的代码。

2023-06-29 22:20:07 512

原创 JavaSE进阶之(十六)枚举

枚举

2023-03-23 16:42:20 498

原创 Java 到底是值传递还是引用传递?

Java 到底是值传递还是引用传递

2023-03-18 19:47:06 3237 3

原创 重写时应当遵守的 11条规则

重写时应当遵守的 11条规则

2023-03-17 17:17:41 1364

原创 深入理解 Java 中的 hashCode

深入理解 Java 中的 hashCode

2023-03-17 09:55:27 2443 6

原创 Java 中的浅拷贝和深拷贝

Java 中的浅拷贝和深拷贝

2023-03-09 23:02:56 2122

原创 Java 中的拆箱和装箱

Java 中的拆箱和装箱

2023-03-08 17:44:29 478

原创 Java中 new Integer 与 Integer.valueOf 的区别

Java中 new Integer 与 Integer.valueOf 的区别

2023-03-06 22:27:53 517

原创 RocketMQ之(一)RocketMQ入门

RocketMQ入门

2023-02-20 21:44:45 2766

原创 JavaSE基础之(十九)Collections类、Hutool类、Guava类

Java中常用工具类

2022-11-11 15:33:31 1478

原创 JavaSE进阶之(十三)Java 异常处理的 21 个最佳实践

Java 异常处理的 21 个最佳实践

2022-11-10 17:59:44 1073

原创 JavaSE进阶之(十二)Map 子接口之 TreeMap

TreeMap

2022-11-02 15:36:55 532

原创 JavaSE进阶之(十一)Map 子接口之 LinkedHashMap

Map 子接口之 LinkedHashMap

2022-11-01 17:30:41 990

原创 JavaSE进阶之(十)Map 子接口之 ConcurrentHashMap

Map 子接口之 ConcurrentHashMap

2022-10-29 17:48:35 1139

原创 JavaSE进阶之(九)Map 子接口之 HashMap

Map 子接口之 HashMap。

2022-10-24 18:21:42 403

原创 JavaSE进阶之(七)Collection 子接口之 Queue

Collection 子接口之 Queue

2022-10-14 10:26:48 432

原创 JavaSE进阶之(六)Collection 子接口之 Set

Set集合

2022-09-22 16:58:37 544

原创 JavaSE基础之(二十二)Java中的this和super

Java中的this和super

2022-09-20 10:50:40 672

原创 JavaSE基础之(二十一)Java内部类

Java内部类。

2022-09-19 15:19:49 827

原创 抽象类和接口的区别

抽象类和接口的区别。

2022-09-19 10:36:19 201

原创 JavaSE基础之(十六)final关键字

十六、final关键字

2022-08-29 16:56:31 112

原创 JavaSE基础之(八)Java中的访问权限修饰符

八、Java 中的访问权限修饰符

2022-08-29 16:42:10 240

空空如也

空空如也

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

TA关注的人

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