2024年面试被吊打系列 - 事务隔离级别(1),分布式架构演进+相关笔记参考

总结:心得体会

既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。

学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。

面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。

最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。

大厂Java架构核心笔记(适合中高级程序员阅读):

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

小张:Mysql默认的隔离级别是REPEATABLE READ,Oracle则采用的是READ COMMITTED

面试官:但是我们使用MySQL的时候并没有出现幻读啊,怎么解决的?

小张擦了擦汗,开始有点紧张了:额,InnoDB主要是利用锁来解决幻读问题的。

面试官:对,是采用了锁,那么具体怎么实现的呢?

小张:我…我突然有点事,我先回去了。

面试官:要了解InnoDB怎么解决幻读得先知道InnoDB有哪几种锁。

  • Record Lock:单个行记录上的锁

  • Gap Lock:间隙锁,锁定一个范围,而非记录本身,遵循左开右闭原则

  • Next-Key Lock:结合Gap Lock和Record Lock,锁定一个范围,并且锁定记录本身。主要解决的问题是REPEATABLE READ隔离级别下的幻读。

注意,如果走唯一索引,那么Next-Key Lock会降级为Record Lock,即仅锁住索引本身,而不是范围。也就是说Next-Key Lock前置条件为事务隔离级别为RR且查询的索引走的非唯一索引、主键索引。

下面我们通过具体的例子来模拟上面出现的幻读问题:

CREATE TABLE T (id int ,name varchar(50),f_id int,PRIMARY KEY (id), KEY(f_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8

insert into T SELECT 1,‘张三’,10;

insert into T SELECT 2,‘李四’,30;

InnoDB在数据库中会为索引维护一套B+树,用来快速定位行记录。B+索引树是有序的,所以会把这张表的索引分割成几个区间。

事务A执行如下语句,需要将张三修改成李四。

select * from t;

update t set name = ‘李四’ where f_id = 10;

这时SQL语句走非唯一索引,因此使用Next-Key Lock加锁,不仅会给f_10=10的行加上行锁,而且还会给这条记录的两边添加上间隙锁,即(-∞,10]、(10,30]这2个区间都加了间隙锁。

此时如果B事务要执行如下语句,都会报错[Err] 1205 - Lock wait timeout exceeded; try restarting transaction

INSERT INTO T SELECT 3,‘王五’,10;  – 满足行锁,执行阻塞

INSERT INTO T SELECT 4,‘赵六’,8;   – 满足间隙锁,执行阻塞

INSERT INTO T SELECT 5,‘孙七’,18;  – 满足间隙锁,执行阻塞

不仅插入 f_id = 10 的记录需要等待事务A提交,f_id <1010< f_id <30 的记录也无法完成,而大于等于30的记录则不受影响,这足以解决幻读问题了。

刚刚讲的是f_id 是索引列的情况,那么如果 f_id不是索引列会怎么样呢?

这时候数据库会为整个表加上间隙锁。所以,如果是没有索引的话,不管 f_id 是否大于等于30,都要等待事务A提交才可以成功插入。

最后

看完上述知识点如果你深感Java基础不够扎实,或者刷题刷的不够、知识不全面

小编专门为你量身定制了一套<Java一线大厂高岗面试题解析合集:JAVA基础-中级-高级面试+SSM框架+分布式+性能调优+微服务+并发编程+网络+设计模式+数据结构与算法>

image

针对知识面不够,也莫慌!还有一整套的<Java核心进阶手册>,可以瞬间查漏补缺

image

全都是一丢一丢的收集整理纯手打出来的

更有纯手绘的各大知识体系大纲,可供梳理:Java筑基、MySQL、Redis、并发编程、Spring、分布式高性能架构知识、微服务架构知识、开源框架知识点等等的xmind手绘图~

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值