2020年Java面試題大全及答案

2020年Java面試題大全及答案

長沙達(dá)內(nèi)教育      2022-05-02 02:00:01     18

2020年Java面試題大全及答案,  1)Java中能創(chuàng)建volatile數(shù)組嗎?  能,Java中可以創(chuàng)建volatile類型數(shù)組,不過只是一個指向數(shù)組的引用,而不是整個數(shù)組。

課程價格 請咨詢

上課時段: 授課校區(qū):

詳細(xì)介紹


  1)Java中能創(chuàng)建volatile數(shù)組嗎?


  能,Java中可以創(chuàng)建volatile類型數(shù)組,不過只是一個指向數(shù)組的引用,而不是整個數(shù)組。我的意思是,如果改變引用指向的數(shù)組,將會受到volatile的保護(hù),但是如果多個線程同時改變數(shù)組的元素,volatile標(biāo)示符就不能起到之前的保護(hù)作用了。


  2)volatile能使得一個非原子操作變成原子操作嗎?


  一個典型的例子是在類中有一個long類型的成員變量。如果你知道該成員變量會被多個線程訪問,如計數(shù)器、價格等,你最好是將其設(shè)置為volatile。為什么?因為Java中讀取long類型變量不是原子的,需要分成兩步,如果一個線程正在修改該long變量的值,另一個線程可能只能看到該值的一半(前32位)。但是對一個volatile型的long或double變量的讀寫是原子。


  3)volatile修飾符的有過什么實踐?


  一種實踐是用volatile修飾long和double變量,使其能按原子類型來讀寫。double和long都是64位寬,因此對這兩種類型的讀是分為兩部分的,第一次讀取第一個32位,然后再讀剩下的32位,這個過程不是原子的,但Java中volatile型的long或double變量的讀寫是原子的。volatile修復(fù)符的另一個作用是提供內(nèi)存屏障(memorybarrier),例如在分布式框架中的應(yīng)用。簡單的說,就是當(dāng)你寫一個volatile變量之前,Java內(nèi)存模型會插入一個寫屏障(writebarrier),讀一個volatile變量之前,會插入一個讀屏障(readbarrier)。意思就是說,在你寫一個volatile域時,能保證任何線程都能看到你寫的值,同時,在寫之前,也能保證任何數(shù)值的更新對所有線程是可見的,因為內(nèi)存屏障會將其他所有寫的值更新到緩存。


  4)volatile類型變量提供什么保證?


  volatile變量提供順序和可見性保證,例如,JVM或者JIT為了獲得更好的性能會對語句重排序,但是volatile類型變量即使在沒有同步塊的情況下賦值也不會與其他語句重排序。volatile提供happens-before的保證,確保一個線程的修改能對其他線程是可見的。某些情況下,volatile還能提供原子性,如讀64位數(shù)據(jù)類型,像long和double都不是原子的,但volatile類型的double和long就是原子的。


  5)10個線程和2個線程的同步代碼,哪個更容易寫?


  從寫代碼的角度來說,兩者的復(fù)雜度是相同的,因為同步代碼與線程數(shù)量是相互獨立的。但是同步策略的選擇依賴于線程的數(shù)量,因為越多的線程意味著更大的競爭,所以你需要利用同步技術(shù),如鎖分離,這要求更復(fù)雜的代碼和專業(yè)知識。



      以上就是長沙達(dá)內(nèi)教育Java培訓(xùn)機(jī)構(gòu)小編介紹的“2020年Java面試題大全及答案”的內(nèi)容,希望對大家有幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。


Java面試題

培訓(xùn)啦提醒您:交易時請核實對方資質(zhì),對于過大宣傳或承諾需謹(jǐn)慎!任何要求預(yù)付定金、匯款等方式均存在風(fēng)險,謹(jǐn)防上當(dāng)。