眾所周知,在Java的知識體系中,並行程式設計是非常重要的一環,也是面試的必問題,一個好的Java開發者是必須對並行程式設計這塊有所瞭解的。
而如何在並行場景中寫出優良的程式碼,是一道繞不開的坎,也是考量一個 Java 開發者功底的關鍵技術。因此,不難發現 Java
並行問題一直是各個大廠面試的重點之一,然而我發現很多候選人在面試時,常常表示對各種並行原理一臉懵逼,好像知道一些卻又講不清楚,最終導致面試失敗。於是發奮學習,啃大部頭書又發現理論太多,頭疼。其實
Java 的並行問題雖然內容繁雜,然而整個脈絡還是很清晰的。那麼接下來,一起來看看面試中會問到哪些並行的知識點。
問題一:Java 中的執行緒池是如何實現的?
問題二:建立執行緒池的幾個核心構造引數?
問題三:執行緒池中的執行緒是怎麼建立的?是一開始就隨著執行緒池的啟動建立好的嗎?
問題四:既然提到可以通過設定不同引數建立出不同的執行緒池,那麼 Java 中預設實現好的執行緒池又有哪些呢?請比較它們的異同。
問題五:如何在 Java 執行緒池中提交執行緒?
問題一:java如何實現多執行緒之間的通訊和共同作業?
問題二:什麼叫執行緒安全?servlet是執行緒安全嗎?
問題三:同步有幾種實現方法?
問題四:volatile有什麼用?能否用一句話說明下volatile的應用場景?
問題五:請說明下java的記憶體模型及其工作流程。
問題六:為什麼程式碼會重排序?
問題七:分析下JUC 中倒數計數器 CountDownLatch 的使用與原理?
問題八:CountDownLatch 與執行緒的 Join 方法區別是什麼?
問題九:講講對JUC 中迴環屏障 CyclicBarrier 的使用?
問題十:CyclicBarrier內部的實現與 CountDownLatch 有何不同?
問題十一:Semaphore 的內部實現是怎樣的?
問題十二:簡單對比同步器實現,談談你的看法?
問題十三:並行元件CopyOnWriteArrayList 是如何通過寫時拷貝實現並行安全的 List?
問題一:什麼是 Java 的記憶體模型,Java 中各個執行緒是怎麼彼此看到對方的變數的?
問題二:請談談 volatile 有什麼特點,為什麼它能保證變數對所有執行緒的可見性?
問題三:既然 volatile 能夠保證執行緒間的變數可見性,是不是就意味著基於 volatile 變數的運算就是並行安全的?
問題四:請對比下 volatile 對比 Synchronized 的異同。
問題五:請談談 ThreadLocal 是怎麼解決並行安全的?
問題六:很多人都說要慎用 ThreadLocal,談談你的理解,使用 ThreadLocal 需要注意些什麼?
問題一:什麼是可重入鎖、樂觀鎖、悲觀鎖、公平鎖、非公平鎖、獨佔鎖、共用鎖?
問題二:當一個執行緒進入某個物件的一個synchronized的實體方法後,其它執行緒是否可進入此物件的其它方法?
問題三:synchronized和java.util.concurrent.locks.Lock的異同?
問題四:什麼是鎖消除和鎖粗化?
問題五:樂觀鎖和悲觀鎖的理解及如何實現,有哪些實現方式?
問題六:如何實現樂觀鎖(CAS)?如何避免ABA問題?
問題七:讀寫鎖可以用於什麼應用場景?
問題八:什麼是可重入性,為什麼說 Synchronized 是可重入鎖?
問題九:什麼時候應該使用可重入鎖?
問題十:什麼場景下可以使用volatile替換synchronized?
問題一:SynchronizedMap和ConcurrentHashMap有什麼區別?
問題二:CopyOnWriteArrayList可以用於什麼應用場景?
問題三:如何讓一段程式並行的執行,並最終彙總結果?
問題四:任務非常多的時候,使用什麼阻塞佇列能獲取最好的吞吐量?
問題五:如何使用阻塞佇列實現一個生產者和消費者模型?
問題六:多讀少寫的場景應該使用哪個並行容器,為什麼使用它?
問題七:談下對基於連結串列的非阻塞無界佇列 ConcurrentLinkedQueue 原理的理解?
問題八:ConcurrentLinkedQueue 內部是如何使用 CAS 非阻塞演演算法來保證多執行緒下入隊出隊操作的執行緒安全?
問題九:基於連結串列的阻塞佇列 LinkedBlockingQueue 原理。
問題十:阻塞佇列LinkedBlockingQueue 內部是如何使用兩個獨佔鎖 ReentrantLock 以及對應的條件變數保證多執行緒先入隊出隊操作的執行緒安全?
問題十一:為什麼不使用一把鎖,使用兩把為何能提高並行度?
問題十二:基於陣列的阻塞佇列 ArrayBlockingQueue 原理。
問題十三:ArrayBlockingQueue 內部如何基於一把獨佔鎖以及對應的兩個條件變數實現出入隊操作的執行緒安全?
問題十四:談談對無界優先順序佇列 PriorityBlockingQueue 原理?
問題十五:PriorityBlockingQueue 內部使用堆演演算法保證每次出隊都是優先順序最高的元素,元素入隊時候是如何建堆的,元素出隊後如何調整堆的平衡的?
問題一:介紹一下 CountDownLatch 工作原理?
問題二:CountDownLatch 和 CyclicBarrier 的區別?
問題三:CountDownLatch 的使用場景?
問題四:CountDownLatch 類中主要的方法?
由於文章篇幅原因,答案不能一起上傳,需要答案的一鍵三連後「加我小助理VX」即可免費獲取到