2021年最新Java面試精講,Java面試2021
二、常見的併發問題
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實現了原子性、一致性、永續性
總結
面試難免讓人焦慮不安。經歷過的人都懂的。但是如果你提前預測面試官要問你的問題並想出得體的回答方式,就會容易很多。
此外,都說“面試造火箭,工作擰螺絲”,那對於準備面試的朋友,你只需懂一個字:刷!
給我刷刷刷刷,使勁兒刷刷刷刷刷!今天既是來談面試的,那就必須得來整點面試真題,這不花了我整28天,做了份“Java一線大廠高崗面試題解析合集:JAVA基礎-中級-高階面試+SSM框架+分散式+效能調優+微服務+併發程式設計+網路+設計模式+資料結構與演算法等”
且除了單純的刷題,也得需準備一本【JAVA進階核心知識手冊】:JVM、JAVA集合、JAVA多執行緒併發、JAVA基礎、Spring 原理、微服務、Netty與RPC、網路、日誌、Zookeeper、Kafka、RabbitMQ、Hbase、MongoDB、Cassandra、設計模式、負載均衡、資料庫、一致性演算法、JAVA演算法、資料結構、加密演算法、分散式快取、Hadoop、Spark、Storm、YARN、機器學習、雲端計算,用來查漏補缺最好不過。