這個回答讓我錯失offer!Java開發避坑指南!
01. 基礎架構:一條SQL查詢語句是如何執行的?
MySQL 的邏輯架構圖
02. 日誌系統:一條SQL更新語句是如何執行的?
之前你可能經常聽DBA同事說,MySQL可以恢復到半個月內任意一秒的狀態,驚歎的同時,你是不是心中也會不免會好奇,這是怎樣做到的呢?
03. 事務隔離:為什麼你改了我還看不見?
提到事務,你肯定不陌生,和資料庫打交道的時候,我們總是會用到事務。最經典的例子就是轉賬,你要給朋友小王轉100塊錢,而此時你的銀行卡只有100塊錢。
轉賬過程具體到程式裡會有一系列的操作,比如查詢餘額、做加減法、更新餘額等,這些操作必須保證是一體的,不然等程式查完之後,還沒做減法之前,你這100塊錢,完全可以藉著這個時間差再查一次,然後再給另外一個朋友轉賬,如果銀行這麼整,不就亂了麼?這時就要用到“事務”這個概念了。
說說索引(上)
提到資料庫索引,我想你並不陌生,在日常工作中會經常接觸到。比如某一個 SQL 查詢比較慢,分析完原因之後,你可能就會說“給某個欄位加個索引吧”之類的解決方案。但到底什麼是索引,索引又是如何工作的呢?
說說索引(下)
06. 全域性鎖和表鎖 :給表加個欄位怎麼有這麼多阻礙?
資料庫鎖設計的初衷是處理併發問題。作為多使用者共享的資源,當出現併發訪問的時候,資料庫需要合理地控制資源的訪問規則。而鎖就是用來實現這些訪問規則的重要資料結構。
07. 行鎖功過:怎麼減少行鎖對效能的影響?
MySQL 的行鎖是在引擎層由各個引擎自己實現的。但並不是所有的引擎都支援行鎖,比如MyISAM引擎就不支援行鎖。不支援行鎖意味著併發控制只能使用表鎖,對於這種引擎的表,同一張表上任何時刻只能有一個更新在執行,這就會影響到業務併發度。InnoDB是支援行鎖的,這也是 MyISAM 被 InnoDB 替代的重要原因之一。
08. 事務到底是隔離的還是不隔離的?
09. 普通索引和唯一索引,應該怎麼選擇?
10. MySQL為什麼有時候會選錯索引?
不知道你有沒有碰到過這種情況,一條本來可以執行得很快的語句,卻由於MySQL選錯了索引,而導致執行速度變得很慢?
11. 怎麼給字串欄位加索引?
現在,幾乎所有的系統都支援郵箱登入,如何在郵箱這樣的欄位上建立合理的索引,是要討論的問題。
12. 為什麼你的MySQL會“抖”一下?
平時的工作中,不知道你有沒有遇到過這樣的場景,一條 SQL 語句,正常執行的時候特別快,但是有時也不知道怎麼回事,它就會變得特別慢,並且這樣的場景很難復現,它不只隨機,而且持續時間還很短。看上去,這就像是資料庫“抖”了一下。今天,我們就一起來看一看這是什麼原因。
13. 為什麼表資料刪掉一半,表文件大小不變?
我的資料庫佔用空間太大,我把一個最大的表刪掉了一半的資料,怎麼表文件的大小還是沒變?
14. count(*)這麼慢,你該怎麼辦?
在開發系統的時候,你可能經常需要計算一個表的行數,比如一個交易系統的所有變更記錄總數。這時候你可能會想,一條select count(*) from t 語句不就解決了嗎?
但是,你會發現隨著系統中記錄數越來越多,這條語句執行得也會越來越慢。然後你可能就想了,MySQL 怎麼這麼笨啊,記個總數,每次要查的時候直接讀出來,不就好了嗎。
15. 日誌和索引相關問題
兩階段提交示意圖
16. “order by”是怎麼工作的?
17. 如何正確地顯示隨機訊息?
18. 為什麼這些SQL語句邏輯相同,效能卻差異巨大?
在 MySQL 中,有很多看上去邏輯相同,但效能卻差異巨大的 SQL 語句。對這些語句使用不當的話,就會不經意間導致整個資料庫的壓力變大。
我今天挑選了三個這樣的案例和你分享。希望再遇到相似的問題時,你可以做到舉一反三、快速解決問題。
19. 為什麼我只查一行的語句,也執行這麼慢?
20. 幻讀是什麼,幻讀有什麼問題?
21. 為什麼只改一行的語句,鎖這麼多?
22. MySQL有哪些“飲鴆止渴”提高效能的方法?
不知道你在實際運維過程中有沒有碰到這樣的情景:業務高峰期,生產環境的 MySQL 壓力太大,沒法正常響應,需要短期內、臨時性地提升一些效能。
23. MySQL是怎麼保證資料不丟的?
24. MySQL是怎麼保證主備一致的?
大家知道 binlog 可以用來歸檔,也可以用來做主備同步,但它的內容是什麼樣的呢?為什麼備庫執行了 binlog 就可以跟主庫保持一致了呢?咱們就好好嘮嘮這個問題。
25. MySQL是怎麼保證高可用的?
最後
面試前一定少不了刷題,為了方便大家複習,我分享一波個人整理的面試大全寶典
想獲取個人高清面試題的可以戳這裡免費領取及個人也準備了很多面試題含答案的資料供你刷!
- Java核心知識整理
Java核心知識
- Spring全家桶(實戰系列)
- 其他電子書資料
Step3:刷題
既然是要面試,那麼就少不了刷題,實際上春節回家後,哪兒也去不了,我自己是刷了不少面試題的,所以在面試過程中才能夠做到心中有數,基本上會清楚面試過程中會問到哪些知識點,高頻題又有哪些,所以刷題是面試前期準備過程中非常重要的一點。
以下是我私藏的面試題庫: