1. 程式人生 > >Java併發總結--校招面經

Java併發總結--校招面經

努力的意義,就是,在以後的日子裡,放眼望去全是自己喜歡的人和事!

時間總是不知不覺的就溜走了,一晃,學生時代就真的要結束了。前天才吃完了師門的最後的聚餐,痛痛快快的喝了一頓酒。在酒中,對身邊的人感恩,也像是自己在對自己的學生時代告別。自己也特別喜歡校園這種簡單單純,讓人覺得很青春年輕的感覺,但是,是該開啟另一段人生旅程了。

從去年結束秋招,但現在忙完畢業論文答辯,這段時間應該算是“間隔月”。在完成秋招的時候,我對自己說,等有空餘時間的時候,好好整理下。在準確秋招的時候,很多就是很直接去看面試題,像準備考試一樣,但很多感悟都是後知後覺的,但只要不是太晚就行。

自己特別喜歡併發問題,所以,我答應自己在間隔月好好理一下併發的基礎知識,算是給自己學生時代結束的禮物,我想,這一切就像是春日的陽光,溫暖而靜謐……最後,再多看看校園的梧桐。

關於這篇文章:(1)包含了併發的基礎知識,每個標題連結到一篇具體的文章;(2)包含了秋招面試的問題,弄懂了會讓你有所收穫(也祝大家都能找到心儀的工作:))(3)在閱讀過程中,如果有所幫助,麻煩點贊,算是對我的鼓勵,因為這所有的文章都是我親手打進去的,碼過字的應該都知道這其中所需要的堅持。

  1. 基礎知識

    知識點:(1)為什麼要用到併發?(優點);(2)併發程式設計的缺點;(3)易混淆的概念

    知識點:(1)如何新建執行緒;(2)執行緒狀態的轉換;(3)執行緒的基本操作;(4)守護執行緒Daemon;

  2. 併發理論(JMM)

    知識點:(1)JMM記憶體結構;(2)重排序;(3)happens-before規則

  3. 併發關鍵字

    知識點:(1)如何使用synchronized;(2)monitor機制;(3)synchronized的happens-before關係;(4)synchronized的記憶體語義;(5)鎖優化;(6)鎖升級策略

    知識點:(1)實現原理;(2)happens-before的關係推導;(3)記憶體語義;(4)記憶體語義的實現

    知識點:(1)如何使用;(2)final的重排序規則;(3)final實現原理;(4)final引用不能從建構函式中“溢位”(this逃逸)

    知識點:(1)原子性:synchronized;(2)可見性:synchronized,volatile;(3)有序性:synchronized,volatile

  4. Lock體系

    知識點:(1)Lock和synchronized的比較;(2)AQS設計意圖;(3)如何使用AQS實現自定義同步元件;(4)可重寫的方法;(5)AQS提供的模板方法;

    知識點:(1)AQS同步佇列的資料結構;(2)獨佔式鎖;(3)共享式鎖;

    知識點:(1)重入鎖的實現原理;(2)公平鎖的實現原理;(3)非公平鎖的實現原理;(4)公平鎖和非公平鎖的比較

    知識點:(1)如何表示讀寫狀態;(2)WriteLock的獲取和釋放;(3)ReadLock的獲取和釋放;(4)鎖降級策略;(5)生成Condition等待佇列;(6)應用場景

    知識點:(1)與Object的wait/notify機制相比具有的特性;(2)與Object的wait/notify相對應的方法;(3)底層資料結構;(4)await實現原理;(5)signal/signalAll實現原理;(6)await和signal/signalAll的結合使用;

    知識點:(1)主要功能;(2)與synchronized阻塞喚醒相比具有的特色;

  5. 併發容器

    知識點:(1)關鍵屬性;(2)重要內部類;(3)涉及到的CAS操作;(4)構造方法;(5)put執行流程;(6)get執行流程;(7)擴容機制;(8)用於統計size的方法的執行流程;(9)1.8版本的ConcurrentHashMap與之前版本的比較

    知識點:(1)實現原理;(2)COW和ReentrantReadWriteLock的區別;(3)應用場景;(4)為什麼具有弱一致性;(5)COW的缺點;

    知識點:(1)實現原理;(2)資料結構;(3)核心方法;(4)HOPS延遲更新的設計意圖

    知識點:(1)實現原理;(2)set方法原理;(3)get方法原理;(4)remove方法原理;(5)ThreadLocalMap

    知識點:(1)ThreadLocal記憶體洩漏原理;(2)ThreadLocal的最佳實踐;(3)應用場景

    知識點:(1)BlockingQueue的基本操作;(2)常用的BlockingQueue;

  6. 執行緒池(Executor體系)

    知識點:(1)為什麼要用到執行緒池?(2)執行流程;(3)構造器各個引數的意義;(4)如何關閉執行緒池;(5)如何配置執行緒池;

    知識點:(1)類結構;(2)常用方法;(3)ScheduledFutureTask;(3)DelayedWorkQueue;

    知識點:(1)FutureTask的幾種狀態;(2)get方法;(3)cancel方法;(4)應用場景;(5)實現 Runnable介面

  7. 原子操作類

    知識點:(1)實現原理;(2)原子更新基本型別;(3)原子更新陣列型別;(4)原子更新引用型別;(5)原子更新欄位型別

  8. 併發工具

    知識點:(1)倒計時器CountDownLatch;(2)迴圈柵欄CyclicBarrier;(3)CountDownLatch與CyclicBarrier的比較

    知識點:(1)資源訪問控制Semaphore;(2)資料交換Exchanger

JAVA併發知識圖譜

可移動到新視窗,放大檢視效果更好或者檢視原圖

JAVA併發知識圖譜.png