2018-個人年度技術總結及清單
技術深度改造
- Java基礎
集合類
ArrayList
原始碼分析- 為什麼ArrayList查詢快,其實質是實現了RandomAccess介面
- 初始化大小
HashMap
原始碼分析- 建構函式分析(不是所有的建構函式都初始化了
threshold
) - Hash資料初始化大小(inintal_Capacity,預設16)
- 載入因子(loadFactor,預設0.75)
- 至於為什麼是16和0.75,是在大量資料測試下,數學公式分析這兩個值會使Hash分佈更加均勻(面試時可以這麼說 泊淞分佈)
- 閾值大小(
threshold
,擴容函式裡面初始化) - 擴容函式(不僅做了擴容,還用於初始化
雜湊表
)
- 建構函式分析(不是所有的建構函式都初始化了
TreeMap
原始碼分析- 二叉查詢樹
- 平衡二叉樹
- 紅黑樹結構
- TreeMap新增刪除元素
- …其他
抽象類
與介面
的實際應用(何時使用抽象類,何時使用介面)多執行緒和併發
(JUC
包下的知識點暫時沒有深入,暫列幾個知識點)- AQS
- 通過state值喚醒佇列頭執行緒
- CAS原理(深究原理)
- Java程式碼分析
- C語言程式碼分析
- 使用者態-系統態(加鎖),而synchronized關鍵字都加鎖了,所以切換會消耗很多資源
- CPU-主存操作機制(硬體層面分析)
- 併發集合分析-對比jdk7和jdk8優化
- synchronized關鍵字(物件頭分析)
- 鎖升級(輕量級->自旋鎖->偏向鎖->重量鎖)
- 鎖膨脹(鎖無法降級,導致鎖膨脹)
- volatile關鍵字
- 保證所有執行緒對volatile修飾的變數訪問的可見性
- 當一個執行緒對volatile修飾的變數的值進行修改,則其他執行緒訪問的時候會得到最新的資料具體原理涉及到作業系統:講當前處理器快取行的資料寫回到系統記憶體中,這個寫回記憶體的操作會使在其他CPU裡快取了該記憶體地址的資料無效
- ThreadLocal共享變數使用
- 執行緒狀態
- 執行緒池
- 執行緒池與佇列都滿了,拒絕策略怎麼定義?
- Object類預設控制執行緒狀態函式分析
- AQS
jdk8面向函式程式設計
- lamada表示式
- 集合遍歷
- stream操作-過濾、合併、遍歷
- 建立執行緒
JVM
- JVM模型
- 方法區(類物件元資訊class-meta-info)
- 堆(物件)
- 棧(區域性變數)
- 本地方法棧(用於C語言變數儲存區)
- 靜態區
- 程式碼區
- GC回收機制
- java採取分割槽回收機制,針對不同區域回收無用物件
- 堆分割槽分塊
- 年輕代
- 過渡區
- 老年代
- OMM問題產生原因
- 雙親委託
- Java編譯器版本
- JVM模型
設計模式學習
- 單例模式
- 可解決記憶體緊張問題
- 使用ENUM列舉類設計單例最佳,其他都會出現單例規則破壞問題
- 破壞方法
- 反序列化
- 反射
- 模板方法模式
- 解決多業務,一套邏輯程式碼即可問題
- 擴充套件性高,測試方便,易於排除問題
- 工廠方法模式
- 使用不多,但是可以學一學
- 抽象工廠模式
- 框架設計使用多,業務中使用少
- 框架設計中需要生產一個物件,而對於需求的物件是不可測的,此時這個產品物件也是抽象的,那麼這是生產的工廠也需要為抽象
- 介面卡模式
- 這個模式是為了複用之前的介面,在之前的介面增強邏輯,為新的需求做擴充套件
- 單例模式
Redis
生產環境問題(快取穿透、快取雪崩問題解決)- 快取穿透
- 產生原因:有人惡意通過傳非正id查詢,快取肯定找不到,所以走資料庫,遲早資料庫被搞掛,導致系統癱瘓
- 解決方案:
- 快取儲存非正空資料,控制失效時間非常短,解決有人惡搞
- 業務層過濾非正id查詢
- 快取雪崩
- 產生原因:key快取時間設定基本相同,導致一大批key同時失效,導致大量請求忽略快取層,直接到資料庫,導致資料庫掛了
- 解決方案:
- 快取時間固定值加隨機時間值
- 遺留問題(每個資料結構沒有細緻去分析)
- String(session管理,分散式鎖、限流)
- zset(排行榜)
- set(好友關係,點贊)
- …
- 快取穿透
Spring
原始碼閱讀分析- 學習解決Spring迴圈依賴問題
- 解決方案-三層快取
- 新概念-非完美物件(個人定義的詞)
- Spring的配置檔案載入、標籤解析、bean載入、bean初始化
- SpringMVC介面卡解決Controller擴充套件知識點
- Spring提供的鉤子介面(這個沒用到)
- …
- 學習解決Spring迴圈依賴問題
Dubbo
原始碼閱讀分析- 服務暴露-原始碼分析
- 服務引用-原始碼分析
- Dubbo如何整合Spring,運用到Spring的鉤子介面實現工程啟動服務釋出與注入
- SPI機制進行框架擴充套件-原始碼分析
- Dubbo的叢集呼叫鏈路、以及Mock機制、Directory服務路由、Router服務過濾、負載均衡原始碼分析
- …
Netty
書籍閱讀分析- 傳統NIO程式設計缺陷
- Netty風格程式設計優點
- 應用層網路傳輸載體
ByteBuf
類分析 - 自定義協議分析
Pipeline
管道線路 與ChannelHandler
邏輯處理器分析- TCP
粘包
問題產生 - Netty如何解決
拆包
與粘包
問題(使用Netty的拆包類),遺留問題就是Netty怎麼做到拆包-原始碼分析 - 心跳檢測機制(Netty如何做到的-原始碼分析)
RocketMQ
中介軟體原始碼分析- …
- Java基礎
- 2019-年度展望
RocketMQ原始碼分析
-解決生產上問題所需Dubbo原始碼繼續分析
-學習更多框架設計模式和完成業務需求Spring原始碼
-業務所需Netty原始碼
-網路通訊Java基礎
-必不可少的學習ElaticSearch
搜尋引擎-新知識點Elatic-Job
定時任務框架-新知識點