ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

如何化身BAT面试收割机?看这一篇就够了

2021-07-06 08:02:16  阅读:124  来源: 互联网

标签:BAT 加锁 行锁 收割机 就够 程序员 MyISAM Mysql 设计模式


## 锁种类 Mysql中锁的分类按照不同类型的划分可以分成不同的锁,按照**「锁的粒度」**划分可以分成:**「表锁、页锁、行锁」**;按照**「使用的方式」**划分可以分为:**「共享锁」**和**「排它锁」**;按照思想的划分:**「乐观锁」**和**「悲观锁」**。 下面我们对着这几种划分的锁进行详细的解说和介绍,在了解设计者设计锁的概念的同时,也能深入的理解设计者的设计思想。 **「表锁」**是粒度最大的锁,开销小,加锁快,不会出现死锁,但是由于粒度太大,因此造成锁的冲突几率大,并发性能低。 Mysql中**「MyISAM储存引擎就支持表锁」**,MyISAM的表锁模式有两种:**「表共享读锁」**和**「表独占写锁」**。 当一个线程获取到MyISAM表的读锁的时候,会阻塞其他用户对该表的写操作,但是不会阻塞其它用户对该用户的读操作。 相反的,当一个线程获取到MyISAM表的写锁的时候,就会阻塞其它用户的读写操作对其它的线程具有排它性。 **「页锁」**的粒度是介于行锁和表锁之间的一种锁,因为页锁是在BDB中支持的一种锁机制,也很少没人提及和使用,所以这里制作概述,不做详解。 **「行锁」**是粒度最小的锁机制,行锁的加锁开销性能大,加锁慢,并且会出现死锁,但是行锁的锁冲突的几率低,并发性能高。 行锁是InnoDB默认的支持的锁机制,MyISAM不支持行锁,这个也是InnoDB和MyISAM的区别之一。 行锁在使用的方式上可以划分为:**「共享读锁(S锁)**「和」**排它写锁(X锁)」**。 当一个事务对Mysql中的一条数据行加上了S锁,当前事务不能修改该行数据只能执行度操作,其他事务只能对该行数据加S锁不能加X锁。 若是一个事务对一行数据加了X锁,该事物能够对该行数据执行读和写操作,其它事务不能对该行数据加任何的锁,既不能读也不能写。 **「悲观锁和乐观锁是在很多框架都存在的一种思想,不要狭义地认为它们是某一种框架的锁机制」**。 数据库管理系统中为了控制并发,保证在多个事务执行时的数据一致性以及事务的隔离性,使用悲观锁和乐观锁来解决并发场景下的问题。 Mysql中**「悲观锁的实现是基于Mysql自身的锁机制实现,而乐观锁需要程序员自己去实现的锁机制」**,最常见的乐观锁实现就锁机制是**「使用版本号实现」**。 乐观锁设计思想的在`CAS`的运用也是比较经典,之前我写过一篇关于CAS的文章,大家感兴趣的可以参考这一篇[]。 从上面的介绍中说了每一种锁的概念,但是很难说哪一种锁就是最好的,锁没有最好的,只有哪种业务场景最适合哪种锁,具体业务具体分析。 下面我们就具体基于Mysql的存储引擎详细的分析每一种锁在存储引擎中的运用和实现。 ## MyISAM MyISAM中默认支持的表级锁有两种:**「共享读锁」**和**「独占写锁」**。表级锁在MyISAM和InnoDB的存储引擎中都支持,但是InnoDB默认支持的是行锁。 Mysql中平时读写操作都是隐式的进行加锁和解锁操作,Mysql已经自动帮我们实现加锁和解锁操作了,若是想要测试锁机制,我们就要显示的自己控制锁机制。 Mysql中可以通过以下sql来显示的在事务中显式的进行加锁和解锁操作 ## 言尽于此,完结 无论是一个初级的 coder,高级的程序员,还是顶级的系统架构师,应该都有深刻的领会到设计模式的重要性。 * 第一,设计模式能让专业人之间交流方便,如下: 程序员A:这里我用了XXX设计模式 程序员B:那我大致了解你程序的设计思路了 * 第二,易维护 项目经理:今天客户有这样一个需求… 程序员:明白了,这里我使用了XXX设计模式,所以改起来很快 * 第三,设计模式是编程经验的总结 程序员A:B,你怎么想到要这样去构建你的代码 程序员B:在我学习了XXX设计模式之后,好像自然而然就感觉这样写能避免一些问题 * 第四,学习设计模式并不是必须的 程序员A:B,你这段代码使用的是XXX设计模式对吗? 程序员B:不好意思,我没有学习过设计模式,但是我的经验告诉我是这样写的 ![image](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625529202252571.jpg) 从设计思想解读开源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源码解读,我都已收集整理全套,篇幅有限,这块只是详细的解说了23种设计模式,整理的文件如下图一览无余! [**资料领取方式:点击这里下载**](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB) ![image](http://www.icode9.com/i/li/?n=2&i=images/20210706/1625529203195418.jpg) 搜集费时费力,能看到此处的都是真爱!

标签:BAT,加锁,行锁,收割机,就够,程序员,MyISAM,Mysql,设计模式
来源: https://blog.51cto.com/u_15290979/2985344

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有