本書用故事的方式講解了軟件編程的若干重要領域, 側重于基礎性、原理性的知識。第1章講述計算機的基礎知識,包括程序的運行原理,進程、線程、文件系統(tǒng)、I/O系統(tǒng)、數(shù)據(jù)庫原理、TCP/IP,Socket,編譯原理的概述,遞歸等。第2章側重Java的基礎知識,包括Java的歷史、JVM、序列化、持久化、JDBC、JSP、動態(tài)代理、泛型、注解、日志、JMS、CAS等。第3章則偏重Web后端編程,包括HTTPS、SSO、OAuth、RPC、SOA、微服務、HTTP服務器的原理、緩存、分布式一致性算法、高可用性、數(shù)據(jù)庫讀寫分離等。第4章講解代碼管理的本質(zhì),包括各種源碼管理工具(SVN, Git)的原理,Ant和Maven的原理,如何做單元測試,爛代碼的產(chǎn)生等。第5章講述了JavaScript的歷史、Node.js的原理、程序的鏈接、命令式和聲明式的區(qū)別以及作者十多年來使用過的各種編程語言的感受。第6章是作者的經(jīng)驗總結和心得體會,包括職場發(fā)展的注意事項、作為架構師的感想、寫作的好處等。
劉欣(@碼農(nóng)翻身):15年的軟件行業(yè)從業(yè)經(jīng)驗,前IBM系統(tǒng)架構師,擅長企業(yè)應用架構和設計,領導過多個企業(yè)級應用架構設計和開發(fā)工作。
第1章 計算機的世界你不懂 1
1.1 我是一個線程 1
初生牛犢 1
漸入佳境 4
虎口脫險 5
江湖再見 8
1.2 TCP/IP之大明內(nèi)閣 9
1.3 TCP/IP之大明郵差 12
1.4 CPU阿甘 17
啟動 17
運行 18
新裝備:緩存 19
自我提升:流水線 20
1.5 我是一個進程 21
批處理系統(tǒng) 22
多道程序 22
地址重定位 24
分時系統(tǒng) 26
分塊裝入內(nèi)存 27
虛擬內(nèi)存:分頁 28
分段 分頁 30
程序的裝載 31
線程 35
1.6 我是一塊硬盤 36
內(nèi)部結構 37
文件 38
文件的存放 39
管理空閑塊 44
文件系統(tǒng) 45
1.7 我是一個鍵盤 46
二等公民 46
總線和端口 47
輪詢(程序式I/O) 48
中斷 49
DMA 50
1.8 數(shù)據(jù)庫的奇妙之旅 51
無紙化辦公 51
數(shù)據(jù)的冗余和不一致 52
李氏查詢 52
并發(fā)訪問 54
原子性問題 56
安全 58
1.9 搞清楚Socket 59
1.10 從1加到100:一道簡單的數(shù)學題挑戰(zhàn)一下你的大腦 64
CPU和內(nèi)存 64
從1加到100 65
熱身 65
正式出發(fā) 65
1.11 一個翻譯家族的發(fā)家史 68
機器語言 68
匯編語言 69
高級語言 70
1.12 編程世界的那把鎖 74
共享變量惹的禍 74
爭搶吧,線程 75
改進 76
信號量 77
1.13 繞不開的加法器 81
1.14 遞歸那點事兒 85
第2章 Java帝國 91
2.1 Java:一個帝國的誕生 91
C語言帝國的統(tǒng)治 91
反抗 92
一鳴驚人 93
開拓疆土 93
帝國的誕生 94
2.2 我是一個Java Class 96
陌生警察 96
刺探信息 97
初識虛擬機 98
快樂假期 102
真相大白 103
2.3 持久化:Java帝國反擊戰(zhàn) 104
斷電的威脅 104
數(shù)據(jù)庫聯(lián)合酋長國 105
表面風光的EJB 106
輕量級O/R Mapping框架 106
帝國的反擊 107
2.4 JDBC的誕生 108
談判 108
統(tǒng)一接口 110
面向接口編程 111
簡單工廠 112
數(shù)據(jù)驅(qū)動 114
工廠方法 115
2.5 Java帝國之宮廷內(nèi)斗 119
JDBC大臣 119
密謀 120
兩階段提交 121
JTA 123
塞翁失馬,焉知非福 124
基本可用 125
走漏風聲 127
宮廷激辯 128
2.6 JSP:一個裝配工的沒落 131
黑暗歲月 131
服務器端動態(tài)頁面 132
標簽庫 134
模板引擎 134
草根攪局 135
2.7 Java 帝國之消息隊列 137
張家村的歷史 137
拆分 138
新問題 139
消息隊列 139
互不兼容的MQ 140
消息隊列接口設計 141
配置和代碼的分離 143
再次抽象 144
2.8 Java帝國之動態(tài)代理 147
深夜奏對 147
明察暗訪 149
Java 動態(tài)代理 150
2.9 Java注解是怎么成功上位的 153
XML大臣 153
安翰林獻計 154
早朝爭斗 157
2.10 Java帝國之泛型 159
新王登基 159
C 使者 159
泛型實現(xiàn) 162
泛型方法 163
泛型和繼承 164
2.11 一個著名的日志系統(tǒng)是怎么設計出來的 166
前言 166
張家村 167
小張的設計 167
正交性 170
Log4j 171
尾聲 171
2.12 序列化:一個老家伙的咸魚翻身 172
寒冬的蟄伏 172
XML和JSON的挑戰(zhàn) 173
新協(xié)議的崛起 175
2.13 加鎖還是不加鎖,這是一個問題 176
互斥鎖 176
要不要加鎖 177
CAS的擴展 179
2.14 Spring 的本質(zhì) 182
問題來源 183
設計模式:模板方法 184
設計模式:裝飾者 186
AOP 187
實現(xiàn)AOP 188
對象的創(chuàng)建 189
IoC與DI 191
第3章 浪潮之巔的Web 192
3.1 Web的起源 192
3.2 兩個程序的愛情故事 195
好感 195
分離 196
網(wǎng)絡 197
Web 198
3.3 一個故事講完HTTPS 199
總有一種被偷窺的感覺 199
RSA:非對稱加密 200
非對稱加密 對稱加密 202
中間人劫持 202
你到底是誰 203
HTTPS 206
3.4 機房夜話 207
第一夜 207
第二夜 209
第三夜 211
3.5 從密碼到token,一個有關授權的故事 215
我把密碼獻給你 215
token 216
授權碼 token 218
后記 220
3.6 后端風云 220
數(shù)據(jù)庫老頭兒 220
危機 221
黨委擴大會議 221
分家 223
Redis 224
余數(shù)算法 227
一致性Hash算法 229
Hash槽 (Hash Slot) 233
故障轉移 235
高可用的Nginx 237
高可用的Tomcat 238
數(shù)據(jù)庫的讀寫分離 240
3.7 我是一個函數(shù) 243
3.8 從SOA到微服務 246
3.9 什么是框架 249
3.10 HTTP Server:一個差生的逆襲 252
HTTP Server 1.0 252
HTTP Server 2.0:多進程 253
HTTP Server 3.0:select模型 254
HTTP Server 4.0:epoll模型 255
第4章 代碼管理那些事兒 258
4.1 版本管理簡史 258
“人肉” 版本管理 258
鎖定文件:避免互相覆蓋 259
允許沖突:退一步海闊天空 260
分支:多版本并行 261
分布式管理:給程序員放權 262
程序員也愛社交 264
4.2 Build的演進之路 265
手工Build的煩惱 265
自動化Build 267
Java 與 XML 268
消除重復 270
4.3 爛代碼傳奇 275
4.4 敏捷下的單元測試 277
敏捷運動 277
困惑 278
討論 279
一年以后 280
4.5 再見!Bug 281
第5章 我的編程語言簡史 284
5.1 JavaScript :一個草根的逆襲 284
出世 284
成長 286
第一桶金 288
發(fā)明JSON 289
人生巔峰 291
5.2 Node.js:我只需要一個店小二 292
5.3 C老頭兒和Java小子的硬盤夜話 295
5.4 編程語言的“愛恨情仇” 300
讓人懷疑的C 語言 300
被忘卻的 VB & Visual FoxPro 301
蹂躪我的C 302
賴以謀生的Java 303
優(yōu)雅的Ruby 304
5.5 命令式編程 VS 聲明式編程 306
一則小故事 306
命令式編程 306
聲明式編程 307
第6章 老司機的精進 309
6.1 凡事必先騎上虎背,和性格內(nèi)向的程序員聊幾句 309
6.2 碼農(nóng)需要知道的“潛規(guī)則” 311
上帝的規(guī)矩:局部性原理 311
坐飛機的怎么和坐驢車的打交道:緩存 311
拋棄細節(jié):抽象 312
我只想和鄰居打交道:分層 312
我怕等不及:異步調(diào)用 313
大事化小,小事化了:分而治之 314
6.3 15年編程生涯,一名架構師的總結 314
好奇心 315
養(yǎng)成計算機的思維方式 315
扎實基礎,融會貫通 317
要透徹地理解一門技術的本質(zhì) 317
能寫漂亮的代碼 318
抽象的能力 319
技術領導力 319
6.4 對自己狠一點,開始寫作吧 320
6.5 學習編程的四兄弟 322
搖擺不定的老大 322
“小倉鼠”老二 322
不看書的老三 323
半途而廢的老四 323