衆所周知,在Java的知識體系中,併發編程是很是重要的一環,也是面試的必問題,一個好的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 類中主要的方法?多線程
上述不少知識點都會在個人公衆號《Java技術zhai》中涉及到,我會站在 理論、模型的角度 講解 Java 併發,讓你融匯貫通,造成 全面系統的併發編程知識體系 。最終能夠 駕輕就熟地解決各類併發難題,同時將這些知識用於其餘編程語言。併發