面試分享:2019最新百度併發程式設計40道以及學習路線分享!
前言
如何在併發場景中寫出優良的程式碼,是一道繞不開的坎,也是考量一個 Java 開發者功底的關鍵技術。因此,不難發現 Java 併發問題一直是各個大廠面試的重點之一,然而我發現很多候選人在面試時,常常表示對各種併發原理一臉懵逼,好像知道一些卻又講不清楚,最終導致面試失敗。於是發奮學習,啃大部頭書又發現理論太多,頭疼。其實 Java 的併發問題雖然內容繁雜,然而整個脈絡還是很清晰的。 在這分享一些併發程式設計中常問的問題和併發程式設計學習導圖!
執行緒安全和執行緒同步器
- java如何實現多執行緒之間的通訊和協作?
- 什麼叫執行緒安全?servlet是執行緒安全嗎?
- 同步有幾種實現方法?
- volatile有什麼用?能否用一句話說明下volatile的應用場景?
- 請說明下java的記憶體模型及其工作流程。
- 為什麼程式碼會重排序?
- 分析下JUC 中倒數計數器 CountDownLatch 的使用與原理?
- CountDownLatch 與執行緒的 Join 方法區別是什麼?
- 講講對JUC 中迴環屏障 CyclicBarrier 的使用?
- CyclicBarrier內部的實現與 CountDownLatch 有何不同?
- Semaphore 的內部實現是怎樣的?
- 簡單對比同步器實現,談談你的看法?
- 併發元件CopyOnWriteArrayList 是如何通過寫時拷貝實現併發安全的 List?
鎖
- 什麼是可重入鎖、樂觀鎖、悲觀鎖、公平鎖、非公平鎖、獨佔鎖、共享鎖??
- 當一個執行緒進入某個物件的一個synchronized的例項方法後,其它執行緒是否可進入此物件的其它方法?
- synchronized和java.util.concurrent.locks.Lock的異同?
- 樂觀鎖和悲觀鎖的理解及如何實現,有哪些實現方式?
- 如何實現樂觀鎖(CAS)?如何避免ABA問題?
- 讀寫鎖可以用於什麼應用場景?
- 什麼時候應該使用可重入鎖?
- 什麼場景下可以使用volatile替換synchronized?
併發框架和併發佇列
- SynchronizedMap和ConcurrentHashMap有什麼區別?
- CopyOnWriteArrayList可以用於什麼應用場景?
- 如何讓一段程式併發的執行,並最終彙總結果?
- 任務非常多的時候,使用什麼阻塞佇列能獲取最好的吞吐量?
- 如何使用阻塞佇列實現一個生產者和消費者模型?
- 多讀少寫的場景應該使用哪個併發容器,為什麼使用它?
- 談下對基於連結串列的非阻塞無界佇列 ConcurrentLinkedQueue 原理的理解?
- ConcurrentLinkedQueue 內部是如何使用 CAS 非阻塞演算法來保證多執行緒下入隊出隊操作的執行緒安全?
- 基於連結串列的阻塞佇列 LinkedBlockingQueue 原理。
- 阻塞佇列LinkedBlockingQueue 內部是如何使用兩個獨佔鎖 ReentrantLock 以及對應的條件變數保證多執行緒先入隊出隊操作的執行緒安全?
- 為什麼不使用一把鎖,使用兩把為何能提高併發度?
- 基於陣列的阻塞佇列 ArrayBlockingQueue 原理。
- ArrayBlockingQueue 內部如何基於一把獨佔鎖以及對應的兩個條件變數實現出入隊操作的執行緒安全?
- 談談對無界優先順序佇列 PriorityBlockingQueue 原理?
- PriorityBlockingQueue 內部使用堆演算法保證每次出隊都是優先順序最高的元素,元素入隊時候是如何建堆的,元素出隊後如何調整堆的平衡的?
CountDownLatch
- 介紹一下 CountDownLatch 工作原理?
- CountDownLatch 和 CyclicBarrier 的區別?
- CountDownLatch 的使用場景?
- CountDownLatch 類中主要的方法?
併發程式設計學習思維導圖
小結
當留給你準備面試的時間不充足時,要“以始為終”的去思考你最終展示在面試官哪裡的狀態。先寫好簡歷,然後以這種目標去針對性的複習技術知識點。確保簡歷上寫到的技術點,都有話可聊,都可以聊到關鍵點上。面試也是要看狀態的,當所有的問題你都可以侃侃而談,這時你的狀態自然是最好的。祝各位面試順利!
最後
本文提到的一些併發程式設計面試問題,我總結出答案做成文件及更多架構面試題資料及答案和視訊資料及高清學習思維導圖免費分享,還有更多關於Mysql、Spring、MyBatis、Nginx、Dubbo、Redis、Netty、Spring cloud、分散式、高併發、效能調優等架構技術資料和架構面試題資料,有需要的朋友可以來免費領取!
資料領取方式:加QQ群930254941,進群領取資料!
點選連結加入群聊【java架構交流群】: 點選進群