字节Java高工面试:java软件开发工程师的市场薪资

2021/7/2 11:26:07

本文主要是介绍字节Java高工面试:java软件开发工程师的市场薪资,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

### 正文 谈到 MYSQL 的事物, 相信大家对这几个概念都不会陌生: * **四大特性**:ACID * **并发问题** * 脏读 * 不可重复读 * 幻读 * **隔离级别** * Read Uncommitted(读未提交) * Read Committed(读提交) * Repeatable Read(可重读) * Serializable(可串行化) 下面的思维导图可能更表达得清晰?? ![](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190343531643.jpg) MySQL 的默认事物隔离级别是 `RR (Repeatable Read)` ,可重复读级别是能够解决脏读、不可重复读的这两个事物并发问题的,但是幻读的问题仍会存在,如果使用`Serializable`的隔离级别,对于高并发的业务来说是不实际的。那么 MySQL 是如何解决幻读这个棘手的问题呢? 没错,MySQL 通过`MVCC`(多版本并发控制)和`Gap Lock`(间隙锁)这两个机制解决了幻读的问题~ 那么这两种方式具体又是如何实现的呢? 这里我们先讲一下 MySQL 的**"读"的区别**。因为在事物隔离级别中的**"读"**,分为`快照读(snapshot read)`和`当前读(current read)` ##### 1\. 当前读(current read) > select...lock in share mode (共享读锁) select...for update update , delete , insert 读取的是最新的数据,并且对读取的记录加锁,**阻塞其他事物对当前事物查询数据的修改和插入**,从而解决幻读。 实现方式:`Next-key Locks(临键锁)` 官方对临键锁的定义是: > A next-key lock is a combination of a record lock on the index record and a gap lock on the gap before the index record. 简单来说就是 临键锁 = 行记录锁 + 间隙锁 行锁、间隙锁这个锁的概念,下文会介绍。所以这里我们只要知道的是,对于事物的当前读模式,是通过 Gap-Key-Locks 解决的。 ##### 2\. 快照读(snapshot read) > select * from table 单纯的 select 操作 Read Committed 隔离级别:每次select都生成一个快照读。 Read Repeatable 隔离级别:**开启事务后第一个select语句才是快照读的地方,而不是一开启事务就快照读。** 实现方式:undolog 和 MVCC undolog 用于数据的撤回操作,它记录了修改的反向操作,比如,插入对应删除,修改对应修改为原来的数据,通过undo log 可以实现事务回滚,并且可以根据 undo log 回溯到某个特定的版本的数据。 MVCC 就是上文提到的多版本并发控制。 ### 实现方式 #### MVCC MVCC 只是工作在两种事务级别底下: * Read Committed * Repeatable Read MVCC 每行记录后面保存三个隐藏的列,其中其主要作用的有两列 **DB_TRX_ID**: 记录行数据创建时的事物版本号。每开启一个事物,事物版本号都会递增。 **DB_ROLL_PTR**: 记录行数据何时过期(或者被删除)。指向前一个版本的 undolog 记录,组成 undo 链表。如果更新了行,则撤消日志记录包含在更新行之前重建行内容所需的信息。 * INSERT 插入数据时, DB_TRX_ID 记录的是当前新增数据的事物版本号 * DELETE 删除数据时,DB_ROLL_PTR 记录的是当前操作删除的事物版本号 * UPDATE 1. 更新数据时,插入一条新的数据,DB_TRX_ID 记录的是当前更新数据的事物版本号 2. 将旧数据的 DB_ROLL_PTR 值更新为当前更新数据的事物版本号 * SELECT 查询规则如下: 1. 查找**数据行版本号早于当前事务版本号**的数据行记录,也就是说(当前的查询的事物版本号 >= `DB_TRX_ID` 中的值) 这样就能确保事物读取的数据,要么是当前事物已经存在的,要么是当前事物所操作过的。 2. 查找**删除版本号**要么为NULL,要么**大于当前事务版本号**的记录。也就是说 (`DB_ROLL_PTR` IS NULL OR `DB_ROLL_PTR` > 当前的查询的事物版本号) 这样确保查询出来的数据行记录在事务开启之前没有被删除。 # 《MySql面试专题》 ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190343113178.jpg) ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190344890395.jpg) # 《MySql性能优化的21个最佳实践》 ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190345626311.jpg) ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190345115826.jpg) ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190345161635.jpg) ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190346635944.jpg) # 《MySQL高级知识笔记》 ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190346150172.jpg) ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190347650923.jpg) ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190347693513.jpg) ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190347545628.jpg) ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190348792449.jpg) ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190348674527.jpg) ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190349880052.jpg) ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190350762007.jpg) ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190350583333.jpg) ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190350281060.jpg) 文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图 ![全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好](http://www.www.zyiz.net/i/li/?n=2&i=images/20210702/1625190350512910.jpg) ## 获取方式:[点击这里前往传送门](https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB) **关注我,点赞本文给更多有需要的人**

这篇关于字节Java高工面试:java软件开发工程师的市场薪资的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程