十分鐘帶你回顧Spring常問的知識點,2021年Java高級面試題總結

程序員Ifni 2021-09-19 00:56:00 阅读数:462

十分 spring java

二、常見的並發問題

1、髒讀

一個事務讀取了另一個事務未提交的數據

2、不可重複讀

一個事務對同一數據的讀取結果前後不一致。兩次讀取中間被其他事務修改了

3、幻讀

幻讀是指事務讀取某個範圍的數據時,因為其他事務的操作導致前後兩次讀取的結果不一致。幻讀和不可重複讀的區別在於,不可重複讀是針對確定的某一行數據而言,而幻讀是針對不確定的多行數據。因而幻讀通常出現在帶有查詢條件的範圍查詢中

三、事務隔離級別

1、讀未提交(READ UNCOMMITTED)

可能產生髒讀、不可重複讀、幻讀

2、讀已提交(READ COMMITTED)

避免了髒讀,可能產生不可重複讀、幻讀

3、可重複讀(REPEATABLE READ)(mysql默認隔離級別)

避免了髒讀,不可重複讀。通過區間鎖技術避免了幻讀

4、串行化(SERIALIZABLE)

串行化可以避免所有可能出現的並發异常,但是會極大的降低系統的並發處理能力

四、數據庫日志有哪些?

1、undo日志

undo日志用於存放數據修改被修改前的值

UNDO LOG中分為兩種類型,一種是 INSERT_UNDO(INSERT操作),記錄插入的唯一鍵值;

一種是 UPDATE_UNDO(包含UPDATE及DELETE操作),記錄修改的唯一鍵值以及old column記錄。

2、redo日志

mysql會將一個事務中的所有sq先l記錄到redo log中,然後再將記錄從redo log同步到數據文件中

它可以帶來這些好處:

  • 當buffer pool中的dirty page 還沒有刷新到磁盤的時候,發生crash,啟動服務後,可通過redo log 找到需要重新刷新到磁盤文件的記錄;
  • buffer pool中的數據直接flush到disk file,是一個隨機IO,效率較差,而把buffer pool中的數據記錄到redo log,是一個順序IO,可以提高事務提交的速度;

3、binlog日志

用於數據庫主從複制的記錄,是二進制格式。在事務提交之後進行一個磁盤寫入。

這裏注意下redo log 跟binary log 的區別,redo log 是存儲引擎層產生的,而binary log是數據庫層產生的。假設一個大事務,對tba做10萬行的記錄插入,在這個過程中,一直不斷的往redo log順序記錄,而binary log不會記錄,直到這個事務提交,才會一次寫入到binary log文件中

五、數據庫事務控制

1、默認情况下,開啟事務自動提交功能。每執行一個sql,都會對應一個事務的提交

2、spring會將底層連接的自動提交特性設置為false。使用手動提交

六、事務的ACID特性

1、原子性(Atomicity)

事務中的所有操作作為一個整體像原子一樣不可分割,要麼全部成功,要麼全部失敗。

2、一致性(Consistency)

事務的執行結果必須使數據庫從一個一致性狀態到另一個一致性狀態。一致性狀態是指:1.系統的狀態滿足數據的完整性約束(主碼,參照完整性,check約束等) 2.系統的狀態反應數據庫本應描述的現實世界的真實狀態,比如轉賬前後兩個賬戶的金額總和應該保持不變。

3、隔離性(Isolation)

並發執行的事務不會相互影響,其對數據庫的影響和它們串行執行時一樣。比如多個用戶同時往一個賬戶轉賬,最後賬戶的結果應該和他們按先後次序轉賬的結果一樣。

4、持久性(Durability)

事務一旦提交,其對數據庫的更新就是持久的。任何事務或系統故障都不會導致數據丟失。

5、redo log和undo log實現了原子性、一致性、持久性

總結

在清楚了各個大廠的面試重點之後,就能很好的提高你刷題以及面試准備的效率,接下來小編也為大家准備了最新的互聯網大廠資料。

 CodeChina開源項目:【一線大廠Java面試題解析+核心總結學習筆記+最新講解視頻】

十分鐘帶你回顧Spring常問的知識點,2021年Java高級面試題總結_Java

十分鐘帶你回顧Spring常問的知識點,2021年Java高級面試題總結_後端_02

十分鐘帶你回顧Spring常問的知識點,2021年Java高級面試題總結_程序員_03

十分鐘帶你回顧Spring常問的知識點,2021年Java高級面試題總結_Java_04

版权声明:本文为[程序員Ifni]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210919005559874w.html