1. 程式人生 > 其它 >內容非常全面,附小技巧

內容非常全面,附小技巧

內容非常全面,附小技巧

二、解析

? 1. 硬體層的併發優化基礎知識

? ?儲存器的層次結構圖如下:

???

? ?各級快取耗時對比:

???

? ?採用分層快取的層次結構會帶來資料不一致問題,如下圖:

???

? ?那麼如何保證資料的一致性,現代CPU處理辦法有兩種:

? ?(1) 鎖系統匯流排;

? (2) 利用快取一致性協議MESI(Intel處理器用的比較多,還有很多其他的快取一致性協議),大致結構如下圖:

?

?2. CPU的亂序執行

??CPU中有個亂序執行的概念,概念圖如下:

CPU在執行指令的時候,往往不是順序執行,但是會遵守as-if-serial原則,也就是最終一致性原則。CPU為了提高指令執行效率,會在一條指令執行過程中(比如去記憶體讀資料),去同時執行另一條指令,前提是這兩條指令沒有依賴關係。雖然指令執行順序發生改變,但是不會影響單執行緒執行結果。多執行緒情況下為了不讓CUP進行指令重排序,則需要用到Volatile關鍵字,因為Volatile的重要作用之一就是防止指令重排序。

?CPU還會存在合併寫的現象。當第一條指令往上級快取寫入資料時,由於上級快取訪問速度比較慢,可能第二條指令又對上一條指令的結果進行了修改,那麼CPU將這兩條指令合併的最終結果一次性的寫入到快取中,這就成為合併寫。

?3. 如何保證不亂序執行

(1) 記憶體屏障:java採用的是記憶體屏障,記憶體屏障其實就是一個CPU指令,在硬體層面上來說可以扥為兩種:Load Barrier 和 Store Barrier即讀屏障和寫屏障。主要有兩個作用:

???a. 阻止屏障兩側的指令重排序;

???b. 強制把寫緩衝區/快取記憶體中的髒資料等寫回主記憶體,讓快取中相應的資料失效。

總結

螞蟻面試比較重視基礎,所以Java那些基本功一定要紮實。螞蟻的工作環境還是挺讚的,因為我面的是穩定性保障部門,還有許多單獨的小組,什麼三年1班,很有青春的感覺。面試官基本水平都比較高,基本都P7以上,除了基礎還問了不少架構設計方面的問題,收穫還是挺大的。

資料領取方式:戳這裡


經歷這次面試我還通過一些渠道發現了需要大廠真實面試主要有:螞蟻金服、拼多多、阿里雲、百度、唯品會、攜程、豐巢科技、樂信、軟通動力、OPPO、銀盛支付、中國平安等初,中級,高階Java面試題集合,附帶超詳細答案,希望能幫助到大家。