2️⃣ 本深圳小公司 Java 后端
投票
面试官说我可重复读和读已提交的实现原理答的不对。
我答的主要是 MVCC 机制中 ReadView 的生成机制不同
面试官说不是的(´・_・`)
他说在是因为如下原因
在可重复读的隔离级别下一个先执行的事物去读取数据会给数据加共享锁,并且共享锁不会在读取完成后立即释放,因为共享锁和排他锁互斥的原因,其他事务此时想要更新数据就会被阻塞,无法完成更新,所以数据两次读取的值是相同的。
而在读已提交级别事物会立即释放,所以别的事物进行数据更新不会被阻塞能完成数据更新导致两次读取数据不一致
那他的意思是原理是通过控制锁的释放时间了
我的内心:
不是 mvcc?
select 语句默认不是不加任何锁?
阻塞?不主动给 select 语句后面加 lock in share mode 会有共享锁吗?i
#大家都开始春招面试了吗# #
#数据人的面试交流地# #数据人offer决赛圈怎么选# #聊聊我眼中的AI# #牛客解忧铺#
我答的主要是 MVCC 机制中 ReadView 的生成机制不同
面试官说不是的(´・_・`)
他说在是因为如下原因
在可重复读的隔离级别下一个先执行的事物去读取数据会给数据加共享锁,并且共享锁不会在读取完成后立即释放,因为共享锁和排他锁互斥的原因,其他事务此时想要更新数据就会被阻塞,无法完成更新,所以数据两次读取的值是相同的。
而在读已提交级别事物会立即释放,所以别的事物进行数据更新不会被阻塞能完成数据更新导致两次读取数据不一致
那他的意思是原理是通过控制锁的释放时间了
我的内心:
不是 mvcc?
select 语句默认不是不加任何锁?
阻塞?不主动给 select 语句后面加 lock in share mode 会有共享锁吗?i
#大家都开始春招面试了吗# #
#数据人的面试交流地# #数据人offer决赛圈怎么选# #聊聊我眼中的AI# #牛客解忧铺#
全部评论

面试官没有明确区分普通SELECT和显式加锁的情况。对于普通SELECT,隔离级别的行为主要由MVCC决定,而不是锁的释放时间。
@神哥不得了
默认包是MVCC的,锁个鸡毛,反问问他他写mysql是不是每一条语句都加for update。
很正常,秋招的时候有我也被一个面试官整得怀疑自己了,最后回去一查就是他错了。
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
03-06 15:35
石家庄学院 Java 点赞 评论 收藏
分享
点赞 评论 收藏
分享