java面試知識點
1. HashMap 原始碼解讀(TreeMap. LinkedHashMap)
hashmap 允許 空值 和 空key, 非執行緒安全的,不保證儲存順序
初始容量 和 負載因子(0.75)
結構化改變,增加或者刪除必須是同步的, 單純的改變值不需要同步
獲取遍歷器的時候,多執行緒的結構的改變,不是通過遍歷器的remove方法的結構改變,都是在遍歷器的時候 丟擲異常,但是這個不能保證,只能是測試使用
根據hashcode排序,相同comparable的根據comparable排序
treeNode是正常節點的2倍 .
樹節點往往是根節點, iterator.remove才可能不是根節點,但是可以根據treenode.root恢復
容量必須是2的倍數,預設為16,最大為2^30
一個桶的元素>=8 就從list 變為 tree,<=6就從tree變為list
桶數量到64的時候裡面的桶才會被樹形化
4*8的元素在同一個節點的時候,會被重新更新size大小
hashBinNode hashCode是key和value的異或
2. heap 和 stack 的區別
stack: 先進後出
函式呼叫棧,有結構,查詢快,執行緒獨佔的,儲存引用和基本型別
heap:
先進先出,沒有結構,查詢慢,執行緒共享的,儲存數值,等待垃圾回收
方法區, 儲存static唯一變數, 被所有執行緒共享
3. java基礎
基本型別: byte short int double float long boolean char
快速排序:
單例模式(單例三個)
列舉實現單例模式:
StringBuffer 執行緒安全和 StringBuilder非執行緒安全
Builder 設計模式
介面卡模式(比如實體類裝換):
Composite組合模式: 樹形
Observer觀察者模式: 區別對待觀察者, java預設的觀察者介面
裝飾器模式(裝飾器和被裝飾物件介面相同):
橋接模式:
簡訊郵件 傳送 緊急訊息, 普通訊息, 進行橋接
責任鏈模式:
Shiro的許可權框架
Iterator 模式:
自己寫的分段List,Set迭代器
Command 命令模式:
策略模式:
工廠方法:匯出不同格式的檔案
一個產品的時候, 返回不同的工廠
抽象工廠:不同格式的檔案,前 綴也不同
多個產品,返回不同的工廠
代理模式:
java 動態代理
狀態模式:
Spring 狀態框架
JVM 垃圾回收演算法:
計數器法, 標記清除, 標記整理, copy 演算法 (物件區和空閒區互相換),
java中可作為GC Root的物件有
1.虛擬機器棧中引用的物件(本地變量表)
2.方法區中靜態屬性引用的物件
3. 方法區中常量引用的物件
4.本地方法棧中引用的物件(Native物件)
分代演算法:
年輕代,年老代, 永久代
類載入機制:
AOP:
依賴注入:
排序演算法(jdk sort):
ln A B B是連結, A是實質檔案
java記憶體模型:(除錯工具)
tomcat調優:
jvm引數, 連線數, 執行緒數,緩衝池,資料庫連線池
自旋鎖:
@transanal
資料結構:
堆排序:
AVL:
紅黑樹:
B-樹:
樂觀鎖和悲觀鎖(CAS):
版本號和時間戳實現樂觀鎖
Volatile 原理:
JVM 卡頓調優:
-Xincgc
開啟增量gc(預設為關閉);這有助於減少長時間GC時應用程式出現的停頓;但由於可能和應用程式併發執行,所以會降低CPU對應用的處理能力
java 8:
分散式鎖: 略
ConcurrentHashMap:略
TreeMap:
java發現死鎖:
jstack -l pid 列舉出執行緒
執行緒狀態:
java.lang.Thread.State
執行緒池:
kafka 和 redis
http:三次握手
負載均衡, 斷路器, 服務註冊原理
Spring 迴圈依賴:
Spring cache