最全面试中的最常被问到的两种锁_互斥锁和悲观锁区别

面试中的最常被问到的两种锁

公众号后台领取更多 面试必看资料


面试中经常被问到的锁到底是哪两种锁呢?接下来我们就得介绍下乐观锁和悲观锁了。那我们我就来了解一波吧!

锁的分类

1.公平锁/非公平锁

2.可重入锁

3.独享锁/共享锁

4.互斥锁/读写锁

5.乐观锁/悲观锁

6.分段锁

7.偏向锁/轻量级锁/重量级锁8.自旋锁

乐观锁

所谓的乐观,实际上是相对于悲观锁来说,我们先看一下百度百科中的解释。

乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库 性能的大量开销, 特别是对长事务而言,这样的开销往往无法承受。相对悲观锁而言,乐观锁更倾向于开发运用。

上面的内容都是乐观锁在百度百科中的解释,我们如果想要理解这个锁,是需要我们去找一个场景来进行解释的。

我们就从最经典的案例“老王取钱”来说,

图片

**图中有三个存在,分别表示老王,和老王账户,还有一个就是版本信息。版本信息默认是1,**这时候老王要买点东西,结果发现钱不太够,那就去银行取点钱去呗,果断的来了银行。

图片

然后告诉柜员,取5000块钱,然后柜员就会从他的账户余额里面扣除5000,就是-5000

图片

这时候版本信息是1,但是我们对金额做了修改之后,要把版本信息换成2,因为现在保存的版本信息是1,柜员查看的时候也是1,老王取钱了, 就想着修改成2。

但是,就在这个时候,来事了,老王的媳妇出去买衣服,发现身上钱不太够,就打算取点钱,就来了另外一家银行,这时候老王钱拿到了,但是柜员还没修改版本信息

就是这样子的,

图片

这时候告诉柜员要取钱,柜员就回去读卡了,发现版本信息是1,

图片

然后就在这时候,老王这头,柜员打算把这-5000的操作记录到数据库中,然后把版本信息变成2,这时候校验数据库中的版本信息还是1,所以, 录入成功了,就稳定的把这个信息改成了2,

这时候就是这样的

图片

钱也到手了,老王美滋滋的拿钱走了。

然后在老王媳妇这边的柜员在操作的时候就会出现问题了,之前读出来的账户信息版本是1,但是他要去操作的时候,发现不对呀,有人修改过呀, 就会出现这种情况。

图片

但是他想去修改的时候人家现在默认的是2,这时候他在比对的时候是1和2了,然后就想着在次提交,这时候,操作完成不了,这就太尴尬了

这种情况就是证明不能让老王媳妇这边的柜员,拿着一版本的数据去吧老王那边的数据覆盖掉。这种其实就相当于是一种乐观锁的提现。

上面的图解就是乐观锁,

乐观锁,大多是基于数据版本( Version )记录机制实现。 何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现。 读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对, 如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。

那什么又是悲观锁呢?我们接下来在说说什么是悲观锁。

悲观锁

惯例,先来看看百度百科中的解释

悲观锁,正如其名,具有强烈的独占和排他特性。

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

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

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

ps://bbs.csdn.net/topics/618545628)**

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值