碼農(nóng)野蠻生長——Java源碼閱讀方法論
定 價(jià):88 元
- 作者:沈進(jìn)群
- 出版時(shí)間:2025/7/1
- ISBN:9787121506154
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP312.8
- 頁碼:324
- 紙張:
- 版次:01
- 開本:16開
如何克服閱讀經(jīng)典源碼的畏難情緒?如何將零散的 Java 高級(jí)知識(shí)串聯(lián)為一個(gè)整體?如何將 Java 高級(jí)知識(shí)的學(xué)習(xí)與實(shí)踐融為一體?閱讀本書,你將獲得想要的答案。本書向流暢閱讀集高并發(fā)、高可用于一體的 ZooKeeper 源碼的終極目標(biāo)出發(fā),從環(huán)境搭建開始點(diǎn)滴積累,提供了一種與眾不同的 Java 語言學(xué)習(xí)路徑。 本書首先講解了源碼閱讀環(huán)境選型、必備插件準(zhǔn)備、快捷操作高級(jí)技巧、源碼跟蹤調(diào)試高級(jí)技巧及常見問題分析,介紹了如何構(gòu)建 ZooKeeper 源碼及多個(gè)底層開源組件的源碼閱讀環(huán)境;其次完整地論述了字符集的基礎(chǔ)知識(shí),說明了字符亂碼產(chǎn)生的原因及根本的解決辦法;接著以裝飾模式為核心構(gòu)建一套新的I/O 學(xué)習(xí)方法,并結(jié)合源碼深入分析了線程、線程池、ThreadFactory 和 ThreadLocal;然后以 JCStress 壓測(cè)為輔助手段深入講解 Java 內(nèi)存模型,并深入分析了高并發(fā)常用編程組件;最后圍繞案例講解基于 BIO、NIO、AIO 的網(wǎng)絡(luò)編程模型,以實(shí)戰(zhàn)形式分析 RMI、WebService、RPC、HttpServer、HttpClient 等 JDK 內(nèi)置組件。
沈進(jìn)群,人民大學(xué)軟件工程碩士,中級(jí)經(jīng)濟(jì)師,持有DBA證書。本書作者擁有超過20年的資深行業(yè)經(jīng)驗(yàn),專注于大型金融系統(tǒng)架構(gòu)設(shè)計(jì)與研發(fā)管理,長期服務(wù)于銀行、保險(xiǎn)等國家級(jí)金融機(jī)構(gòu),深度參與多項(xiàng)億級(jí)規(guī)模核心業(yè)務(wù)系統(tǒng)的戰(zhàn)略級(jí)項(xiàng)目,近期研究方向?yàn)樯墒紸I,對(duì)大模型網(wǎng)絡(luò)架構(gòu)、預(yù)訓(xùn)練和微調(diào)等有比較深入的探索及實(shí)踐。
第1章 打磨源碼閱讀環(huán)境
1.1 集成開發(fā)環(huán)境準(zhǔn)備
1.1.1 Eclipse IDE安裝與優(yōu)化
1.1.2 IntelliJ IDEA社區(qū)版安裝與優(yōu)化
1.2 Eclipse開發(fā)環(huán)境高級(jí)設(shè)置
1.2.1 高效編程必備設(shè)置
1.2.2 全鍵盤操作修煉之道
1.3 IDEA快捷操作進(jìn)階
1.3.1 快捷操作之Live Templates
1.3.2 快捷操作之Postfix Completion
1.4 編碼效率提升利器——Vrapper與IdeaVim速成
1.4.1 命令模式
1.4.2 文本編輯模式
1.4.3 尾行模式
1.5 JDK版本選型、安裝和配置
1.5.1 版本選型——OpenJDK 11
1.5.2 Eclipse環(huán)境設(shè)置Java Module可訪問性
1.5.3 IDEA中設(shè)置JDK Module可見性
1.6 本章小結(jié)
第2章 創(chuàng)建示例工程,開啟源碼調(diào)試研究
2.1 示例工程的設(shè)計(jì)原則
2.2 創(chuàng)建標(biāo)準(zhǔn)工作區(qū)——Eclipse
2.3 創(chuàng)建標(biāo)準(zhǔn)工作區(qū)——IntelliJ IDEA
2.4 源碼跟蹤及調(diào)試實(shí)用技巧——Eclipse
2.4.1 六種顯式斷點(diǎn)各盡其用
2.4.2 六種隱式斷點(diǎn)深度揭秘
2.4.3 揭秘?cái)帱c(diǎn)調(diào)試中的八大“靈異”事件
2.4.4 持續(xù)提升Debug技能
2.5 基于IntelliJ IDEA的源碼跟蹤及調(diào)試實(shí)用技巧
2.5.1 IDEA調(diào)試功能“平替”Eclipse
2.5.2 IDEA高階調(diào)試技巧
2.5.3 調(diào)試侵入干擾程序功能和性能
2.6 本章小結(jié)
第3章 導(dǎo)入、編譯與運(yùn)行ZooKeeper源碼
3.1 ZooKeeper 3.4.14源碼閱讀準(zhǔn)備
3.1.1 ZooKeeper 3.4.14源碼導(dǎo)入Eclipse
3.1.2 ZooKeeper 3.4.14源碼導(dǎo)入IDEA
3.2 極速簡易法開啟ZK工程驗(yàn)證
3.2.1 ZK編譯常見問題處理
3.2.2 突破源碼閱讀第一關(guān)
3.2.3 ZK服務(wù)端啟動(dòng)
3.2.4 ZK客戶端啟動(dòng)連接
3.3 JDK 11源碼解壓縮及導(dǎo)入
3.4 Log4j源碼閱讀準(zhǔn)備
3.4.1 源碼搜索方法匯總
3.4.2 將日志組件源碼導(dǎo)入到示例工程
3.4.3 補(bǔ)充導(dǎo)入循環(huán)依賴組件
3.5 SLF4J源碼閱讀準(zhǔn)備
3.6 JUnit源碼閱讀準(zhǔn)備
3.7 本章小結(jié)
第4章 根治中文亂碼——Java字符集考證
4.1 常見字符集與字符編碼辨識(shí)
4.1.1 ASCII碼回顧
4.1.2 單字節(jié)拉丁字符集ISO-8859-1
4.1.3 雙字節(jié)中文字符集GB2312
4.1.4 漢字?jǐn)U展庫GBK與CP936代碼頁
4.1.5 Windows操作系統(tǒng)中的ANSI
4.2 統(tǒng)一碼(Unicode)
4.2.1 動(dòng)手制作Unicode字典表
4.2.2 Unicode字符集知識(shí)體系
4.2.3 基于Unicode字符集的六大編碼辨析
4.3 發(fā)掘Java端字符集控制的工具箱
4.3.1 JDK命令行工具與字符集控制參數(shù)
4.3.2 操作系統(tǒng)對(duì)字符集的影響
4.3.3 IDE中的字符編碼設(shè)置
4.4 讓亂碼原地現(xiàn)形的組合拳
4.4.1 解決亂碼的策略
4.4.2 字符集有損轉(zhuǎn)換與無損轉(zhuǎn)換實(shí)踐
4.4.3 常見亂碼典型特征識(shí)別
4.4.4 Java命令行參數(shù)解決亂碼問題
4.4.5 IDE設(shè)置與亂碼處置
4.4.6 通過代碼轉(zhuǎn)換解決亂碼(String類)
4.4.7 操作系統(tǒng)側(cè)修正亂碼
4.5 字符集控制底層邏輯與JDK源碼解讀
4.5.1 UTF-16字符編碼關(guān)聯(lián)Character類
4.5.2 String類中的顯式或隱式編碼轉(zhuǎn)換
4.5.3 所有字符集或編碼的祖先——Charset類
4.5.4 Java序列化之DataOutputStream類
4.5.5 Java反序列化之DataInputStream類
4.5.6 屬性文件處理與Properties類
4.5.7 標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出與System類
4.6 本章小結(jié)
第5章 摒棄死記硬背,全方位精通Java I/O體系
5.1 Java I/O迂回學(xué)習(xí)歸納總結(jié)
5.1.1 深扒Java I/O體系學(xué)習(xí)十大槽點(diǎn)
5.1.2 Java I/O學(xué)習(xí)的必要性
5.1.3 Java I/O學(xué)習(xí)范式
5.2 字節(jié)流基礎(chǔ)應(yīng)用及源碼分析
5.2.1 向本地磁盤寫Java對(duì)象
5.2.2 兩種方式從本地磁盤獲取文本內(nèi)容
5.2.3 自定義輸入流——按指定分隔符讀取
5.2.4 字節(jié)輸出流源碼解讀
5.2.5 字節(jié)輸入流源碼解讀
5.3 節(jié)點(diǎn)流、過濾流與序列化的綜合應(yīng)用
5.3.1 八個(gè)原生數(shù)據(jù)類型的字節(jié)碼輸入輸出
5.3.2 自定義原生數(shù)據(jù)類型可視化輸出
5.3.3 Java對(duì)象的序列化與反序列化
5.3.4 回退流應(yīng)用原理解析
5.4 字符流基礎(chǔ)應(yīng)用及源碼分析
5.4.1 字符輸入流的整行讀取
5.4.2 從源碼看字符流與字節(jié)流的關(guān)系
5.5 字符流與半個(gè)漢字讀寫問題
5.5.1 字符輸出流對(duì)SMP文字的支持
5.5.2 用混編字符串考查字符輸出流
5.6 從BIO到NIO的延伸閱讀
5.6.1 NIO中的通道和緩沖區(qū)
5.6.2 自定義字節(jié)緩沖區(qū)MyByteBuffer
5.6.3 模擬Netty中的雙向指針字節(jié)緩沖區(qū)
5.6.4 NIO中的性能優(yōu)化
5.7 本章小結(jié)
第6章 盤點(diǎn)線程、線程狀態(tài)與線程池
6.1 輕松入門多線程編程
6.1.1 三種線程初始化方法比較
6.1.2 返回式線程的回調(diào)與阻塞
6.1.3 源碼解讀之java.lang.Thread類
6.2 枚舉全部線程狀態(tài),探究狀態(tài)跳轉(zhuǎn)規(guī)則
6.2.1 枚舉線程運(yùn)行時(shí)的六種狀態(tài)
6.2.2 區(qū)分Thread類中的interrupt關(guān)鍵字
6.2.3 線程中斷不能立即生效的例外情況
6.3 線程池與線程工廠應(yīng)用
6.3.1 線程池中的單例多線程
6.3.2 靜態(tài)變量無懼多線程干擾
6.3.3 帶返回參數(shù)的線程池應(yīng)用
6.3.4 ThreadFactory簡單應(yīng)用
6.4 線程本地對(duì)象與線程安全
6.4.1 ThreadLocal類應(yīng)用實(shí)例
6.4.2 從源碼再認(rèn)識(shí)ThreadLocal
6.5 非侵入式多線程優(yōu)化重構(gòu)
6.6 本章小結(jié)
第7章 挖掘Java高并發(fā)支撐體系
7.1 線程安全基礎(chǔ)之synchronized關(guān)鍵字
7.1.1 synchronized關(guān)鍵字鎖定對(duì)象驗(yàn)證
7.1.2 線程通信與wait、notify和notifyAll
7.2 Java內(nèi)存模型與高并發(fā)陷阱
7.2.1 JMM原子性檢驗(yàn)及實(shí)現(xiàn)策略
7.2.2 JMM可見性驗(yàn)證及應(yīng)對(duì)策略
7.2.3 用JCStress驗(yàn)證JMM的有序性
7.2.4 final關(guān)鍵字語義分析
7.3 ZK組件之高并發(fā)Lock應(yīng)用
7.3.1 LockSupport功能演示
7.3.2 重入鎖ReentrantLock詳細(xì)解讀
7.3.3 AQS底層的原子性與可見性
7.3.4 讀寫分離與ReentrantReadWriteLock
7.4 ZK組件之高并發(fā)同步工具應(yīng)用
7.4.1 ZK應(yīng)用之CountDownLatch
7.4.2 CountDownLatch源碼解析
7.5 ZK組件之高性能List、Set和Map
7.5.1 ArrayList線程不安全分析
7.5.2 線程安全的List實(shí)現(xiàn)及Vector類解析
7.5.3 讀多寫少之CopyOnWriteArrayList
7.6 ZK組件之高并發(fā)Queue應(yīng)用
7.6.1 單鎖數(shù)組隊(duì)列ArrayBlockingQueue
7.6.2 雙鎖鏈表隊(duì)列LinkedBlockingQueue
7.6.3 無鎖無界隊(duì)列ConcurrentLinkedQueue
7.7 本章小結(jié)
第8章 探索網(wǎng)絡(luò)原理與網(wǎng)絡(luò)應(yīng)用的邊界
8.1 阻塞式網(wǎng)絡(luò)編程模型
8.1.1 Java阻塞式網(wǎng)絡(luò)編程
8.1.2 基于BIO的雙向簡易聊天室實(shí)現(xiàn)
8.1.3 基于NIO的阻塞式網(wǎng)絡(luò)編程模型
8.2 非阻塞、多路復(fù)用和異步網(wǎng)絡(luò)編程模型
8.2.1 基于NIO的非阻塞式網(wǎng)絡(luò)編程模型
8.2.2 基于Selector的多路復(fù)用網(wǎng)絡(luò)編程模型
8.2.3 基于AIO的異步網(wǎng)絡(luò)編程模型
8.3 JDK內(nèi)置網(wǎng)絡(luò)組件應(yīng)用
8.3.1 遠(yuǎn)程方法調(diào)用(RMI)
8.3.2 WebService遠(yuǎn)程調(diào)用
8.3.3 遠(yuǎn)程過程調(diào)用(RPC)
8.3.4 JDK內(nèi)置HTTP協(xié)議支持
8.4 ZK組件之網(wǎng)絡(luò)應(yīng)用
8.4.1 Netty模式應(yīng)用
8.4.2 ZK工程中的NIO模式應(yīng)用分析
8.4.3 ZK工程中Netty應(yīng)用分析
8.4.4 粘包拆包問題處理
8.5 本章小結(jié)