《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
Mysql表存储引擎众多,我们重点了解一下MyISAM与InnoDB
MyISAM存储引擎不支持事务,仅支持表级锁,支持全文索引,适合读多写很少的应用场景,在实际开发中很少使用。
InnoDB存储引擎支持事务,支持行锁,支持SQL4种隔离级别(读未提交、读已提交、可重读、串行化),支持多版本并发控制(MVCC)实现无锁的并发读。
事务的隔离级别针对的是读操作。
MVCC多版本并发控制,主要是InnoDB为支持无锁的并发控制,实现读已提交、可重读隔离级别,所谓的可重复读就是在一个事务中读取同一条记录,返回的数据一致。举例如下:
A 事务 B事务
start transalation start transalation
select a.id,a.name from A a where a.id=1
返回( 1,dingw) update A set a.name=‘dingw2’ where a.id=1
commit
select a.id,a.name from A a where a.id=1
返回(1,dingw),此结结果不受事务B的影响,尽管B事务已经提交。
如何实现上述需求呢?如果通过锁是可以实现的,如果A事务对A表进行查询操作,使得B事务的更新无法执行,这样在A事务结束后B事务才能执行,能实现可重读隔离级别,但并发读明显不理想,有没有一种无锁设计来实现可重复读隔离级别呢?InnoDB使用MVCC(多版本并发控制协议来实现可重复读隔离级别)
MVCC 为每行数据增加二列(更新版本号,删除版本号)[版本号存储的其实就是事务ID]【可重读隔离级别】
select 操作:
Mysql只返回满足如下条件的行数据:
1)更新版本号小于或等于当前事务ID(小于表示是事务开始之前的数据,等于表示当前事务对数据进行过修改。)
2)删除版本号要么为空,要么大于当前事务ID,(如果为空,表示未删除,如果大于事务ID,表示是以后修改的)
insert 操作
1)更新版本号设置为当前事务ID,删除版本号为空
update 操作
Java核心架构进阶知识点
面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的
内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!