面试常问之~悲观锁和乐观锁

   

 

        我们在开发中,有时候常常去实现一些业务的功能实现,往往忽略了很多源头的东西,这也是我身边有很多业务超级强的人,但是一旦跳槽以及面试会被一些东西卡掉,你要说他真的不知道吗?其实不是,只是很多东西,我们常用,但是没有深入去了解或者不能再面试时候给出官方的解释(这一点我真的很烦)下面就悲观锁和乐观锁给出我的理解,当然我也是面试经常会被问到,我一般都是按照自己理解去回答 ,从来不去官方解释(每个人不一样,只要大家觉得适合自己的就行.)

  一般面试官会从和几个点问你:

       1.什么是锁? 

       2.你知道悲观锁和乐观锁?

       3.你可以大概简单讲一下你的理解? 

  一般这三个问题是层层递进的,一般问道锁了 就心里要想了 ,千万不要不懂装懂,一定把自己最拿手最熟悉的说出来.好啦,进入正题.

   一: 首先理解锁:

              我的认为:锁的出现必定是因为并发才会有的东西,因为在并发的情况下,锁是来控制多个操作顺序,保证数据安全变动的一个很好的东西,锁一般最多是在: 多线程中的锁  和  数据库的锁.

比如在数据库层,一个表中同一个数据,同时多个修改操作过来,那数据库就会给表钟该行数据上锁,通常也叫行锁.我们今天说的悲观锁以及乐观锁是基于数据库层面的,跟程序中的多线程中的锁是不一样的.

       悲观锁:

              从字面意思来看,这家伙就是很悲观,我更喜欢叫它谨慎锁.从数据库层来讲:

1.去拿数据,会认为在此同时会有人也来动这个数据,所以它就会上锁.

2.这样,别人要是也操作这个数据,就需要它那边完事,释放锁之后.

   这个机制其实对应于我们常说你的    行锁 表锁  读锁  写锁 

  

乐观锁

      就是很乐观,我一般叫大意锁.从数据库层来讲:

 1.去拿数据,会认为在此同时不会有人也来动这个数据,所以它就不会上锁.

2.但是,不上锁不代表就会不负责,一般在最后更新数据的时候,一般使用版本号来处理.(问版本号如何处理?

         乐观锁通常是通过在表中增加一个版本或时间戳来实现,一般常用版本。

 例如:

   A操作数据库数据时候 

 1. 从数据库中取数据时附带了版本号 

 2. A操作后对数据有变动最后想要将其存到表中时,这个时候会将之前取出的数据中的版本号与数据库表中最新的版本号相对比,

 3.  如果两版本一样,那么说明在数据变动期间,没有其他事务对数据进行修改,此时,就允许A操作对表中的数据进行修改成功,同时会将版本号进行+1操作

 4. 如果不相等,那就证明有人动过该数据,就不准A操作成立,让其重新操作一遍.

 好啦,到这里 你会发现 他们两个虽然最后都保证了数据的安全,但是,如果一个数据被修改的情况很少,我们使用悲观锁每一次加锁势必耗时,所以,场景就出来了,一般的话乐观锁适用于写比较少的情况下,悲观锁适用于读比较少的情况下.

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值