1. 程式人生 > 實用技巧 >寫了幾年程式碼,面試依然掛掉?這些題你看過嗎? 基礎打好面試不愁!

寫了幾年程式碼,面試依然掛掉?這些題你看過嗎? 基礎打好面試不愁!

2020最新Java常見面試題合集+答案詳解(十五)

持續更新Java相關資料。最近花了幾天諮詢大佬們最新的面試訊息,爭取蒐集到更全的面試資訊。大家想看前幾個合集的可以去我主頁查詢。

有些答案是我自己總結的,有些是在網上搜集整理的。看完這些面試不慌!大家如果有更多經驗可以在評論分享,有錯誤也歡迎大家指出,不吝賜教,謝謝

149. mysql 索引是怎麼實現的?

索引是滿足某種特定查詢演算法的資料結構,而這些資料結構會以某種方式指向資料,從而實現高效查詢資料。

具體來說 MySQL 中的索引,不同的資料引擎實現有所不同,但目前主流的資料庫引擎的索引都是 B+ 樹實現的,B+ 樹的搜尋效率,可以到達二分法的效能,找到資料區域之後就找到了完整的資料結構了,所有索引的效能也是更好的。

150. 怎麼驗證 mysql 的索引是否滿足需求?

使用 explain 檢視 SQL 是如何執行查詢語句的,從而分析你的索引是否滿足需求。

explain 語法:explain select * from table where type=1。

151. 說一下資料庫的事務隔離?

MySQL 的事務隔離是在 MySQL. ini 配置檔案裡新增的,在檔案的最後新增:transaction-isolation = REPEATABLE-READ

可用的配置值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE。

  • READ-UNCOMMITTED:未提交讀,最低隔離級別、事務未提交前,就可被其他事務讀取(會出現幻讀、髒讀、不可重複讀)。

  • READ-COMMITTED:提交讀,一個事務提交後才能被其他事務讀取到(會造成幻讀、不可重複讀)。

  • REPEATABLE-READ:可重複讀,預設級別,保證多次讀取同一個資料時,其值都和事務開始時候的內容是一致,禁止讀取到別的事務未提交的資料(會造成幻讀)。

  • SERIALIZABLE:序列化,代價最高最可靠的隔離級別,該隔離級別能防止髒讀、不可重複讀、幻讀。

髒讀 :表示一個事務能夠讀取另一個事務中還未提交的資料。比如,某個事務嘗試插入記錄 A,此時該事務還未提交,然後另一個事務嘗試讀取到了記錄 A。

不可重複讀 :是指在一個事務內,多次讀同一資料。

幻讀 :指同一個事務內多次查詢返回的結果集不一樣。比如同一個事務 A 第一次查詢時候有 n 條記錄,但是第二次同等條件下查詢卻有 n+1 條記錄,這就好像產生了幻覺。發生幻讀的原因也是另外一個事務新增或者刪除或者修改了第一個事務結果集裡面的資料,同一個記錄的資料內容被修改了,所有資料行的記錄就變多或者變少了。

自己先看題目自檢再看答案詳解會更有效果喲

152. 說一下 mysql 常用的引擎?

InnoDB 引擎:InnoDB 引擎提供了對資料庫 acid 事務的支援,並且還提供了行級鎖和外來鍵的約束,它的設計的目標就是處理大資料容量的資料庫系統。MySQL 執行的時候,InnoDB 會在記憶體中建立緩衝池,用於緩衝資料和索引。但是該引擎是不支援全文搜尋,同時啟動也比較的慢,它是不會儲存表的行數的,所以當進行 select count(*) from table 指令的時候,需要進行掃描全表。由於鎖的粒度小,寫操作是不會鎖定全表的,所以在併發度較高的場景下使用會提升效率的。

MyIASM 引擎:MySQL 的預設引擎,但不提供事務的支援,也不支援行級鎖和外來鍵。因此當執行插入和更新語句時,即執行寫操作的時候需要鎖定這個表,所以會導致效率會降低。不過和 InnoDB 不同的是,MyIASM 引擎是儲存了表的行數,於是當進行 select count(*) from table 語句時,可以直接的讀取已經儲存的值而不需要進行掃描全表。所以,如果表的讀操作遠遠多於寫操作時,並且不需要事務的支援的,可以將 MyIASM 作為資料庫引擎的首選。

153. 說一下 mysql 的行鎖和表鎖?

MyISAM 只支援表鎖,InnoDB 支援表鎖和行鎖,預設為行鎖。

  • 表級鎖:開銷小,加鎖快,不會出現死鎖。鎖定粒度大,發生鎖衝突的概率最高,併發量最低。

  • 行級鎖:開銷大,加鎖慢,會出現死鎖。鎖力度小,發生鎖衝突的概率小,併發度最高。

154. 說一下樂觀鎖和悲觀鎖?

  • 樂觀鎖:每次去拿資料的時候都認為別人不會修改,所以不會上鎖,但是在提交更新的時候會判斷一下在此期間別人有沒有去更新這個資料。

  • 悲觀鎖:每次去拿資料的時候都認為別人會修改,所以每次在拿資料的時候都會上鎖,這樣別人想拿這個資料就會阻止,直到這個鎖被釋放。

資料庫的樂觀鎖需要自己實現,在表裡面新增一個 version 欄位,每次修改成功值加 1,這樣每次修改的時候先對比一下,自己擁有的 version 和資料庫現在的 version 是否一致,如果不一致就不修改,這樣就實現了樂觀鎖。

155. mysql 問題排查都有哪些手段?

  • 使用 show processlist 命令檢視當前所有連線資訊。

  • 使用 explain 命令查詢 SQL 語句執行計劃。

  • 開啟慢查詢日誌,檢視慢查詢的 SQL。

156. 如何做 mysql 的效能優化?

  • 為搜尋欄位建立索引。

  • 避免使用 select *,列出需要查詢的欄位。

  • 垂直分割分表。

  • 選擇正確的儲存引擎。

    最後

    面試題內容到這裡就結束了,後續會有更多更新內容,希望對大家有幫助。

    最後還想對你們說幾句心裡話,工作這麼多年,也幫別人面試過一些人。不管是站在面試官的角度看還是leader的視角,面試大廠除了面試技巧和經驗,過硬的技術和好的專案經驗也是自己的王牌和底氣。一線大廠核心技術分享

    我花了比較長的時間整理了一些學習資料,上面發的就是資料中的冰山一角,希望能幫到大家!點選一起學習 暗號:csdn

    後續會分享更多純乾貨文章,希望能真正幫到你們。你們的支援就是我最大的動力!歡迎關注點贊啊!