我後悔在簡歷上寫了“精通”…程序員面試時給自己挖的坑!

前言:眾所周知,簡歷上“瞭解=聽過名字;熟悉=知道是啥;熟練=用過;精通=做過東西”,我現在十分後悔在簡歷上寫了“精通”二字…

我後悔在簡歷上寫了“精通”…程序員面試時給自己挖的坑!

對於程序員來說,去任何一家公司面試,數據庫是避不開的。開發人員對MySQL的掌握,越深入,你能做的事情就越多。

完成業務功能,懂基本的Sql語句。

做性能優化,懂索引,懂引擎。

做分庫分表,懂主從,懂讀寫分離。

做安全,懂權限,懂備份,懂日誌。

做雲數據庫,懂源碼,懂瓶頸。

相信大家對於MySQL的索引都不陌生,索引(Index)是幫助MySQL高效獲取數據的數據結構。索引作為MySQL中比較重點的知識,在面試中出現的頻率特別高。樓主自認為對MySQL優化的索引相關知識有很多瞭解,同事們也都熱情的稱呼我為大佬。樓主一直想進阿里,特地花了1個月左右時間複習相關知識,自信MySQL掌握的很好了,所以斗膽在簡歷上寫了“精通MySQL”,想不到被阿里面試官狠狠虐了一把…

前半段和麵試官相談甚歡,聊著聊著我提到我們業務量比較大,每天大概有幾百萬的新數據生成。

面試官來了興趣:你們每天這麼大的數據量,都是保存在關係型數據庫中嗎?

我:是的,我們線上使用的是MySQL數據庫。

面試官:那你們有沒有對於查詢做一些優化呢?

我:我們在數據庫中創建了一些索引(我現在非常後悔我當時說了這句話)。

我後悔在簡歷上寫了“精通”…程序員面試時給自己挖的坑!

面試官:你能說說為什麼B+樹相對於B樹在查詢上會更加優勝嗎?

我:(這道題我背過答案!)B+樹磁盤讀寫代價更低,;B+樹查詢效率更加穩定;對於範圍查找來說,B+樹只需遍歷葉子節點鏈表即可,B樹卻需要重複地中序遍歷…

面試官:除了上面這個範圍查詢的,你還能說出其他的一些區別嗎?

我:???

聚簇索引、覆蓋索引

面試官:剛剛我們聊到B+ Tree,那你知道B+Tree的葉子節點都可以存哪些東西嗎?

面試官:聚簇索引和非聚簇索引,在查詢數據的時候有區別嗎?

面試官:剛剛你提到主鍵索引查詢只會查一次,而非主鍵索引需要回表查詢多次。是所有情況都是這樣的嗎?非主鍵索引一定會查詢多次嗎?

我後悔在簡歷上寫了“精通”…程序員面試時給自己挖的坑!

簡化B+Tree

這些問題有點難,但還是憑藉著自己的知識儲備簡單的回答上一些。

聯合索引、最左前綴匹配

面試官:你們在創建索引的時候都會考慮哪些因素呢?你們有用過聯合索引嗎?

面試官:那你們在創建聯合索引的時候,需要做聯合索引多個字段之間順序你們是如何選擇的呢?

索引下推、查詢優化

面試官:你知道在MySQL 5.6中,對索引做了哪些優化嗎?

面試官:你們創建的那麼多索引,到底有沒有生效,或者說你們的SQL語句有沒有使用索引查詢你們有統計過嗎?

我:這個還沒有統計過,除非遇到慢SQL的時候我們才會去排查;

面試官:那排查的時候,有什麼手段可以知道有沒有走索引查詢呢?

面試官:那什麼情況下會發生明明創建了索引,但是執行的時候並沒有通過索引呢?

我:(依稀記得和優化器有關,但是這個問題並沒有回答好)

面試官:哦,索引有關的知識我們暫時就問這麼多吧。你們線上數據的事務隔離級別是什麼呀?

我後悔在簡歷上寫了“精通”…程序員面試時給自己挖的坑!

MySQL查詢過程

總結&感悟

通過這次面試,發現像阿里這種大廠對於底層知識還是比較看重的,這次面試關於索引的知識,自己大概能回答70%,但是自信答對的只佔一半, 我以前以為關於索引最多也就問一下Hash和B+有什麼區別,沒想到最後都能問到查詢優化器上面。看來自己索引有關的知識瞭解的還是不夠多。

來源丨程序員小灰

喜歡請多多關注易傑智科技!


分享到:


相關文章: