跟面試官聊MySQL

2021-10-22 16:16:29 字數 2535 閱讀 1113

目錄

——你熟悉mysql嗎?

——mysql的整體架構是怎樣的?

——什麼是儲存引擎?mysql常用的儲存引擎有哪些?

——innodb和myisam有什麼區別?

——innodb索引的底層資料結構是怎樣的?

——為什麼不用b樹或者紅黑樹?

——說說你知道的索引吧。

——什麼情況下索引會失效?

——你知道mysql的隔離級別嗎?

——什麼是髒讀、不可重複讀、幻讀?

——mysql是怎麼保證原子性和永續性的?

還行。mysql主要分為四層架構,分別是網路連線層、服務層、儲存引擎層、物理層。

網路連線層:主要負責連線管理。mysql伺服器上維護了乙個執行緒池(即資料庫連線池),每個客戶端對應伺服器上的乙個執行緒。

服務層:mysql的核心層,包括查詢快取、解析器、預處理器、查詢優化器。

儲存引擎層:負責資料的儲存和提取。通過提供一系列介面來遮蔽不同引擎之間的差異。

物理層:資料檔案。

mysql中的資料用各種不同的技術儲存在檔案(或者記憶體)中。這些技術中的每一種技術都使用不同的儲存機制、索引技巧、鎖定水平並且最終提供廣泛的不同的功能和能力。

說白了,儲存引擎就是 一些儲存機制的組合。

這些儲存機制包括 是不是支援事務、使用什麼樣的索引、鎖定水平、提供哪些功能 等等。

mysql中最常用的儲存引擎有innodb和myisam。

innodb支援事務,myisam不支援事務;

innodb支援外來鍵,myisam不支援外來鍵;

innodb索引是聚集索引,myisam索引是非聚集索引;

innodb支援表、行(預設)級鎖,myisam只支援表級鎖;

innodb表必須有唯一索引,myisam可以沒有。

innodb索引的底層資料結構是b+樹。

b+樹的特點是:

mysql從磁碟中讀取資料的方式是按頁讀取,乙個磁碟頁的預設大小是16kb。

​​如果使用b樹作為索引結構,乙個結點(乙個磁碟頁)中能儲存的索引數受到儲存資料的影響會減少,b樹可能會很高;而且b樹沒有維護葉子結點之間的指標,不能進行範圍查詢。

如果使用紅黑樹作為索引結構,紅黑樹會很高,不利於查詢。

單值索引、復合索引、全文索引;b樹索引、hash索引;聚集索引、非聚集索引。

單值索引:乙個索引只包含乙個列,乙個表中可以有多個單值索引。

復合索引:表中多個字段組合形成的索引,使用時遵循最左字首原則

全文索引:只有在myisam引擎上才能使用。原理是先定義乙個詞庫,然後在文章中查詢每個詞條(term)出現的頻率和位置,把這樣的頻率和位置資訊按照詞庫的順序歸納,這樣就相當於對檔案建立了乙個以詞庫為目錄的索引,這樣查詢某個詞的時候就能很快的定位到該詞出現的位置。

b樹索引:mysql在大多數場景下使用的索引。

hash索引:陣列+鍊錶,對索引的key進行一次hash計算就可以定位出資料儲存的位置,適用於等值查詢,且比b樹索引更高效,但不能進行範圍查詢。

聚集索引:索引和資料放在同乙個檔案中。(如innodb)

非聚集索引:索引和資料分開放在不同的檔案中。(如myisam)

where條件裡有不等於號;

where條件裡使用了函式;

模糊查詢的第乙個字元是萬用字元;

某個資料列裡包含許多重複的值。

sql標準定義了四種隔離級別,mysql全部都支援。這四種隔離級別分別是:

讀未提交:不加鎖,任何事務對資料的修改都會第一時間暴露給其它事務。可能會發生髒讀、不可重複讀、幻讀。

讀已提交:乙個事務只能讀到其它事務已經提交過的資料。不會發生髒讀,可能會發生不可重複讀、幻讀。

可重複讀:事務不會讀到其它事務對已有資料的修改,即使其它事務已提交,也就是說,事務開始時讀到的已有資料是什麼,在事務提交前的任意時刻,這些資料的值都是一樣的。不會發生髒讀、不可重複讀,可能會發生幻讀。【值得注意的是,mysql的可重複讀級別解決了幻讀問題】

序列化:將事務的執行變為順序執行,後乙個事務執行必須等待前乙個事務結束。不會發生髒讀、不可重複讀、幻讀。

髒讀:讀未提交隔離等級下,a事務(未提交)修改一條資料後,b事務能直接讀取到修改後的資料,若a事務發生回滾,b事務就讀到了髒資料。

不可重複讀:讀已提交和讀未提交隔離等級下,b事務讀取一條資料後,a事務(已提交)修改了這條資料,b事務再次讀這條資料時,讀到了修改後的資料——b事務兩次讀取資料的結果不一致。

幻讀:可重複讀、讀已提交、讀未提交隔離等級下,a事務(已提交)插入了一條新資料,b事務在a事務提交前後讀到表中的資料總數不一樣。

原子性:利用了undo log。undo log在事務修改資料時產生,當mysql需要進行事務回滾時,可以通過undo log撤銷所有已經成功執行的sql語句。

永續性:利用了redo log。在事務提交的時候,必須先將該事務的所有事務日誌寫入磁碟上的redo log中。

加油!(ง •_•)ง

跟面試官講Binder(零)

面試的時候,面試官問你說,簡單說一下android的binder機制,你會怎麼回答?我想,我會這麼說。在android啟動的時候,zygote程序孵化出第乙個子程序叫systemserver,而在這個程序中,很多系統提供的服務,比如activitymanagerserivce,powermanage...

面試官感悟

其實之前也面試過幾個人,但都是零星的跟著別人一起,我也只是偶爾詢問一兩句就結束了。昨天這是一場真正的大型招聘會,而且面試也是相當規範,面對的還是社招。對於我這種初出茅廬來說,這是第一次真正接觸參與的一場招聘會,想起要面那些比自己工作年限還長的人,心裡很沒底,有點小擔心和緊張的。當然一整天下來也算體驗...

面試官問題

解釋一些壓縮感知理論 壓縮感知是一種全新的訊號採集和恢復理論,它打破了傳統的奈奎斯特取樣定律,可以從更少的觀測訊號訊號中重建出高質量的原始訊號。其基本思想是,當訊號是稀疏或可壓縮時,我們可以通過乙個隨機測量矩陣將高維訊號投影到低維空間,再通過乙個求解優化問題高概率的恢復原始訊號。解釋一下壓縮感知磁共...