面試總結二

2021-10-18 10:02:05 字數 1107 閱讀 3540

執行緒獨佔:虛擬機器棧,本地方法棧,程式計數器       執行緒共享:方法區。堆

oom(out of memory):就是記憶體溢位

volatile是jvm提供的乙個輕量級的同步機制。有兩個作用:①:保證可見性(快取一致性協議mesi,②:保證有序性(禁止指令重排優化)

volatile是在彙編層面加lock,使用快取一致性協議(mesi)解決併發可見性的。mesi協議其實是乙個變數在記憶體中的不同狀態!首先cpu會根據共享變數是否帶有volatile欄位,來決定是否使用mesi協議保證快取一致性。 如果有volatile,彙編層面會對變數加上lock字首,當乙個執行緒修改變數的值後,會馬上經過store、write等原子操作修改主記憶體的值(如果不加lock字首不會馬上同步),為什麼監聽到修改會馬上同步呢?就是為了觸發cpu的嗅探機制,及時失效其他執行緒變數副本。cpu匯流排嗅探機制監聽到這個變數被修改,就會把其他執行緒的變數副本由共享s置為無效i,當其他執行緒在使用變數副本時,發現其已經無效,就回去主記憶體中拿乙個最新的值。

多執行緒環境下,有序性問題產生的主要原因就是執行重排優化,而volatile的另乙個作用就是禁止指令重排優化。具體是通過對volatile修飾的變數增加記憶體屏障來完成的!記憶體屏障的主要工作原理為:通過在指令間插入一條記憶體屏障並禁止cpu對volatile修飾的變數進行重排序,也就是說通過插入記憶體屏障禁止在記憶體屏障前後執行重排序優化!

為什麼volatile無法保證原子性?

比如,當前主記憶體的 count = 5,執行緒a 通過read、load等原子操作把 count = 5載入到本地記憶體中

以上**於:

區別:  

面試總結(二)

前兩天面試了乙個嵌入式驅動開發的小夥子。碩士畢業2年左右。他做過linux和wince方面的移植工作。之前做的是車載 的方案。具體深入問下去,主要做的是一些驗證的工作,在研發上的經驗仍然不足。後來在和同去的面試官交流的時候,我其實還是願意給他機會進來的。不過他給了否定意見。原因就是他這塊經驗確實不足...

面試總結(二)

nginx四層 七層負載均衡的區別 所謂四層就是基於ip 埠的負載均衡,通過虛擬ip 埠接收請求,然後再分配到真實的伺服器 七層通過虛擬的url或主機名接收請求,然後再分配到真實的伺服器七層就是基於url等應用層資訊的負載均衡。七層負載 root www cat etc nginx conf.d t...

C 筆記(面試總結二)

1.編寫類string的建構函式 拷貝建構函式 析構函式和賦值函式 class string 編寫類string的建構函式 析構函式和賦值函式,已知類string的原型為 class string 1 建構函式 1 建構函式在構造物件時使用 2 傳入引數的判斷 3 物件的初始化問題。string s...