Java一些小知識整理,用於面試
1.CloseGuard
CloseGuard原始碼
大多數出現該情況是記憶體洩漏,你佔用了資源沒有釋放或者關閉,比如資料庫。
CloseGuard is a mechanism for flagging implicit finalizer cleanup of
* resources that should have been cleaned up by explicit close
* methods (aka "explicit termination methods" in Effective Java).
* A simple example: <pre> {@code
* class Foo {
*
* private final CloseGuard guard = CloseGuard.get();
*
* ...
*
* public Foo() {
* ...;
* guard.open("cleanup");
* }
*
* public void cleanup() {
* guard.close();
* ...;
* }
*
* protected void finalize() throws Throwable {
* try {
* if (guard != null) {
* guard.warnIfOpen();
* }
* cleanup();
* } finally {
* super.finalize();
* }
* }
* }
* }
原始碼的列子很清楚,需要finalize配合使用,它能制定在你的Foo,回收必須強制呼叫cleanup回收,不然在物件析構的時候就報錯。具體錯誤官方有。
2.序列化
3.泛型
4.同步,重入鎖,volatile
什麼叫鎖,計算機實現原理:
一般分為2類:
1.快取加鎖:就是如果快取在處理器快取行中記憶體區域在LOCK操作期間被鎖定,當它執行鎖操作回寫記憶體時,處理器不在匯流排上聲言LOCK#訊號,而是修改內部的記憶體地址,並允許它的快取一致性機制來保證操作的原子性,因為快取一致性機制會阻止同時修改被兩個以上處理器快取的記憶體區域資料,當其他處理器回寫已被鎖定的快取行的資料時會起快取行無效,在例1中,當CPU1修改快取行中的i時使用快取鎖定,那麼CPU2就不能同時快取了i的快取行。
2.匯流排加鎖:匯流排鎖就是使用處理器提供的一個LOCK#訊號,當一個處理器在匯流排上輸出此訊號時,其他處理器的請求將被阻塞住,那麼該處理器可以獨佔使用共享記憶體
併發原理
ConcurrentHashMap
ConcurrentMap
CopyOnWriteArrayList
BlockingQueue
BlockingDeque
同步工具類
閉鎖
閉鎖是一次性物件的使用,一旦進入終止狀態,就不能被重置。
解釋下原理:
按前面紅框中游戲玩家舉例。我有5個玩家,進入我的主機,每個玩家是一個執行緒。
我作為主機控制著,我希望知道所有玩家作為準備後,需要多長時間,然後進行同步下一步任務。
這時候startGate會鎖住Thread中的Task,等你進來之後就開始countDown讓你準備。
最後endGate,正如文中所說,主機不會去關係某個人做完準備工作的時間,當5個人全部做完,那麼我主機就知道所有人總時間了。
訊號量
柵欄
重入
long和double的坑:
同步鎖的優化,分解鎖和分段鎖
Condition
這裡解釋下lock.lock()用於同步使用了,也就相當於一個synchronizer,真正阻塞在await()。
volatile原則就是:僅當一個變數參與到包含其他狀態變數的不變性條件時,才可以宣告volatile型別。也就是說這貨是個獨立的,不能帶節奏以後,其他變數值會被他影響。
下面看一個“錯誤”加鎖例子:
4.非同步
Future
Callable和Future
ExecuteCompletionService
這裡解釋下for迴圈中的take(),是從ExecuteCompletionService中BlockingQueue中拿出來的Future,本身不會阻塞。但Future拿結果get會阻塞,直到資料完成。
5.物件回收
C++是用引用計數器,Java是用GC Root
6.守護執行緒
7.執行緒池使用
注意學習上面Semaphore使用,一般可以配合ThreadLoacl使用。
注意學習上面ThreadLoacl使用,每個執行緒有自己例項空間堆疊,不受其他執行緒影響,不能線上程通訊使用。
8.顯示鎖
9.顯示鎖讀寫鎖
10非阻塞演算法
說明下:compareAndSet既能提供原子性,又能提供可見性。當一個執行緒需要修改棧狀態時,它能有寫入volaite型別一樣,快速同步記憶體效果。
相關文章
- JAVA核心面試知識整理Java面試
- JVM--Java核心面試知識整理(一)JVMJava面試
- JVM 面試知識整理JVM面試
- 高階 Java 面試通關知識點整理Java面試
- jQuery面試知識點整理jQuery面試
- iOS | 面試知識整理 - OC基礎 (一)iOS面試
- Vue 面試中常問知識點整理Vue面試
- PHP 面試知識點整理歸納PHP面試
- 自己整理的php面試知識點PHP面試
- 關於網頁的一些小知識點網頁
- Java知識整理Java
- Java面試知識總結(一)-- 網路基礎Java面試
- 一些知識點的整理以及面試題記錄面試題
- java面試知識點總結Java面試
- Java 基礎面試知識點Java面試
- Java基礎知識面試題Java面試題
- Java 面試知識點總結Java面試
- 搞定PHP面試 - HTTP協議知識點整理PHP面試HTTP協議
- [ Java面試題 ]Java 開發崗面試知識點解析Java面試題
- 【Java面試】Java基礎知識面試題—2020最新版!Java面試題
- 搞定PHP面試 - 正規表示式知識點整理PHP面試
- 有關python的一些小知識Python
- Java 資料庫知識整理Java資料庫
- Java基礎面試知識點總結Java面試
- 《面試補習》- Java鎖知識大梳理面試Java
- Java面試題必備知識之ThreadLocalJava面試題thread
- 常見Java面試知識點總結Java面試
- 面試知識點面試
- 前端知識點總結—面試專用前端面試
- Java面試題整理《上》Java面試題
- 2018前端面試知識整理【上】前端面試
- Java基礎知識整理之this用法Java
- Java容器相關知識點整理Java
- 整理Java基礎知識--Calendar 類Java
- python3 numpy的一些小知識點Python
- Java高階架構面試知識點整理:基於 Hystrix 執行緒池技術實現資源隔離Java架構面試執行緒
- 【Java面試題系列】:Java基礎知識面試題,看這一篇就夠了(持續更新)Java面試題
- Java面試整理(精簡版)Java面試
- 關於 SSH 框架面試知識點的總結框架面試