如何强大且优雅的搞定Linux文件系统,算法题 JVM,

程序猿小码农 2021-09-15 07:17:10
java 后端 程序员


正文

谈到 MYSQL 的事物, 相信大家对这几个概念都不会陌生:

  • 四大特性:ACID
  • 并发问题
    • 脏读
    • 不可重复读
    • 幻读
  • 隔离级别
    • Read Uncommitted(读未提交)
    • Read Committed(读提交)
    • Repeatable Read(可重读)
    • Serializable(可串行化)

下面的思维导图可能更表达得清晰??

如何强大且优雅的搞定Linux文件系统,算法题 JVM,_后端

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 > 当前的查询的事物版本号)

      这样确保查询出来的数据行记录在事务开启之前没有被删除。

技术学习总结

学习技术一定要制定一个明确的学习路线,这样才能高效的学习,不必要做无效功,既浪费时间又得不到什么效率,大家不妨按照我这份路线来学习。

如何强大且优雅的搞定Linux文件系统,算法题 JVM,_程序员_02

如何强大且优雅的搞定Linux文件系统,算法题 JVM,_程序员_03

如何强大且优雅的搞定Linux文件系统,算法题 JVM,_程序员_04

最后面试分享

大家不妨直接在牛客和力扣上多刷题,同时,我也拿了一些面试题跟大家分享,也是从一些大佬那里获得的,大家不妨多刷刷题,为金九银十冲一波!

如何强大且优雅的搞定Linux文件系统,算法题 JVM,_后端_05

如何强大且优雅的搞定Linux文件系统,算法题 JVM,_Java_06

 CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】

版权声明
本文为[程序猿小码农]所创,转载请带上原文链接,感谢
https://blog.51cto.com/u_15302398/3888164

  1. 别再说你不会JVM性能监控和调优了,2021华为Java高级面试题及答案,
  2. 15 useful cron work examples commonly used by Senior Linux system administrators
  3. Ne dites pas que vous ne pouvez pas surveiller et ajuster les performances JVM, 2021 Huawei Java Advanced interview Questions and Answers,
  4. 別再說你不會JVM性能監控和調優了,2021華為Java高級面試題及答案,
  5. 十多家大厂Java面试真题锦集干货整理,Java开发者该学习哪些东西提高竞争力?
  6. 十分钟带你回顾Spring常问的知识点,35岁老年程序员的绝地翻身之路,
  7. 区区一个SpringBoot问题就被干趴下了,看完这一篇就够了!
  8. K8s gestion des ressources (opérations de base)
  9. Java and cloud native dating
  10. 區區一個SpringBoot問題就被幹趴下了,看完這一篇就够了!
  11. Un problème de démarrage de printemps dans le district a été séché, et c'est assez!
  12. Dix minutes pour vous faire passer en revue les points de connaissance que Spring demande souvent, le chemin du retour Jedi d'un programmeur âgé de 35 ans,
  13. Plus d'une douzaine de grandes usines Java interview vrai sujet brocade collection de marchandises sèches, les développeurs Java devraient apprendre ce qui améliore la compétitivité?
  14. 十分鐘帶你回顧Spring常問的知識點,35歲老年程序員的絕地翻身之路,
  15. Guide de route d'apprentissage Java, redis a plusieurs types de données?
  16. 华为Java高级工程师面试题,字节跳动上千道精选面试题还不刷起来!
  17. 华为Java面试题目,腾讯Java开发面试记录,
  18. Propriétés et méthodes des objets Array en javascript!,Pseudo - classes et pseudo - éléments pour CSS
  19. Design pattern -- agent pattern
  20. 華為Java面試題目,騰訊Java開發面試記錄,
  21. Huawei Java interview title, Tencent Java Development interview record,
  22. Huawei Java Senior Engineer interview question, Byte Jumping thousand Selected Interview Question is still not Brushed!
  23. 双非本科字节跳动Java面试题分享,一篇文章教你搞定计算机网络面试,
  24. 又到一年金三银四,2021最新Java笔试题及答案,
  25. Huawei Finance and Economics 2021 Spring Recruitment interview, what is distributed Lock?Pourquoi utiliser des serrures distribuées?
  26. Un an plus tard, Golden, Silver, Silver, and Silver, 2021, the latest Java written Examination Questions and Answers,
  27. Partage de questions d'entrevue Java à double saut d'octets non - premier cycle, un article vous apprend à gérer l'entrevue réseau informatique,
  28. Computer graduation project java online voting system based on SSM
  29. K8s gestion des ressources (opérations de base)
  30. 又到一年金三銀四,2021最新Java筆試題及答案,
  31. Collection de code de base JavaScript (1)
  32. Vérification des permissions d'interface pour le démarrage du printemps à l'aide d'annotations personnalisées AOP +.
  33. Vérification des permissions d'interface pour le démarrage du printemps à l'aide d'annotations personnalisées AOP +.
  34. Cloud Security Daily 210914: Red Hat Jboss Middleware Platform found important Security Vulnerability and needs to be upgraded as soon as possible
  35. 吐血整理,腾讯团队实力打造spring入门教程,
  36. 史上最全的微服务专业术语面试50问,字节跳动Java岗经典面试真题,
  37. Absolument!C'est l'analyse la plus détaillée du code source de hashtap que j'ai jamais vu!
  38. Computer graduation project Java logistics order management system of logistics company based on SSM
  39. Talk about Kafka: source code analysis of producer
  40. [springboot2 starts from 0] development tips - Lombok, devtools, spring initailizr
  41. 国内一线互联网公司面试题汇总,2021年大厂Java岗面试必问,
  42. 啃完吃透保你涨薪5K,熬夜整理小米Java面试题,
  43. 和字节跳动大佬的技术面谈,Redis成神之路电子版教程已问世,
  44. Le terme professionnel le plus complet de l'histoire des micro - services interview 50 questions, Byte Jumping Java post Classic interview vrai problème,
  45. After using mybatisplus, I haven't written SQL for a long time
  46. [springboot2 starts from 0] how to write a springboot application?
  47. Huawei cloud guassdb (for redis) released a new version, and the two core features were officially unveiled
  48. 和字節跳動大佬的技術面談,Redis成神之路電子版教程已問世,
  49. 啃完吃透保你漲薪5K,熬夜整理小米Java面試題,
  50. Avec l'interview technique du gigolo, le tutoriel électronique redis est sorti.
  51. Après avoir mangé, assurez - vous d'augmenter votre salaire de 5K et de rester debout tard pour trier les questions d'entrevue Java de millet.
  52. Résumé des questions d'entrevue pour les entreprises Internet nationales de première ligne, qui doivent être posées lors de l'entrevue d'emploi Java de la grande usine en 2021,
  53. Le tri des crachats de sang, la force de l'équipe Tencent pour créer le tutoriel d'introduction au printemps,
  54. Java and scala concurrency Fundamentals
  55. Analysis of java thread source code based on Hotspot
  56. 國內一線互聯網公司面試題匯總,2021年大廠Java崗面試必問,
  57. Introduction au module de contrôle de Connexion MySQL
  58. 大厂高级测试面试题,Java面试基础技能罗列,
  59. Comprendre l'architecture sous - jacente d'InnoDB en exécutant une instruction
  60. Chargeur de classe 1 Tomcat