架構師的自我修煉:技術、架構和未來
李智慧 著
買這商品的人也買了...
-
$580$458 -
$390$304 -
$500$390 -
$580$452 -
$594$564 -
$680$530 -
$534$507 -
$680$537 -
$480$379 -
$414$393 -
$500$390 -
$690$538 -
$662敏捷測試 : 以持續測試促進持續交付
-
$580$435 -
$880$695 -
$520$406 -
$620$484 -
$534$507 -
$654$621 -
$800$624 -
$580$458 -
$500$390 -
$880$695 -
$654$621 -
$850$663
相關主題
商品描述
架構師的工作包羅萬象,從開發基礎框架到設計軟件架構,從優化系統性能到修復重要Bug,從新技術選型到做出關鍵技術決策,從指導工程師開發到溝通、協調各種內外部關系。想要成為一個優秀的軟件架構師,需要經過漫長的修煉,構建起自己的軟件開發技術體系。但是一切看似紛繁復雜的技術技巧,均有其核心和基本的原理。
本書對架構師在職業進階道路上必須牢固掌握的各項技術技能進行了梳理,涵蓋基礎知識、程序設計、系統架構、溝通管理4大方面。本書包含38章,每一章都用一個軟件開發中常見又經典的問題引出,深入淺出地剖析這個技術點背後的核心原理與外延擴展,進而幫助讀者建立起自己的架構師知識體系。
架構師應該是軟件開發的全才,需要掌握各個方面的知識,才能夠針對業務場景選擇出最合適的技術解決方案,並解決開發實踐中形形色色的問題。那麽,架構師如何獲得這些技能,如何構建起自己的知識體系呢?本書從4個方面全面梳理了架構師在職業進階的道路上必須牢固掌握的各種技術技能,幫助讀者建立起自己的知識體系。
本書特色
從經典面試題著手:本書每一章都用一個軟件開發中常見又經典的面試題引出,並據此展開,深入分析問題背後的技術原理,進而拓展出相應的知識體系,使讀者能夠對這個知識點抓得住、理得清、想得透、用得活。
4大必備修煉模塊:本書基於作者十幾年從事架構師工作的經驗提煉4大修煉模塊,包括基礎知識、程序設計、架構方法、溝通管理,涉及38項軟件開發技術與方法,涵蓋架構師應該掌握的全部核心知識點和技能。
基於底層原理構建知識體系:一切技術的產生與發展都離不開最基本的原理,瞭解技術體系最基本、最底層的原理,我們就能根據這些知識儲備建立自己的技術框架,實現自我成長。本書立足於復雜的技術和應用,將其背後簡單的原理抽象出來,為讀者展現一個脈絡清晰、結構簡單的架構師知識體系,使讀者可快速應用於實踐。
訓練架構師的思維方式:本書將引導讀者以架構師的思維方式處理好工作中的各種關系,在工作中實踐自己的技術思想,得到更多的晉升和發揮空間,使自己的技術成長和職業發展互相促進。
作者簡介
李智慧,資深架構專家,同程旅行交通首席架構師,曾在NEC、阿里巴巴、Intel等知名企業擔任架構師,也曾在WiFi萬能鑰匙等企業擔任CTO。
長期從事大數據、大型網站的架構和研發工作,領導設計過多個日活用戶在千萬級以上的互聯網系統架構,實戰經驗豐富。
曾設計、開發過Web 服務器防火牆、分佈式NoSQL 系統、大數據倉庫引擎、反應式編程框架等各種類型的軟件系統。
Apache Spark代碼貢獻者,騰訊雲TVP,著有暢銷書《大型網站技術架構》,同時也是極客時間《從0開始學大數據》《後端技術面試38講》等專欄的作者。
目錄大綱
前言
第一部分 架構師的基礎知識修煉
第1章 操作系統原理:程序是如何運行和崩潰的 2
1.1 程序是如何運行起來的 2
1.2 一臺電腦如何同時處理數以百計的任務 4
1.3 系統為什麽會變慢,為什麽會崩潰 5
1.4 小結 7
第2章 數據結構原理:Hash表的時間復雜度為什麽是O(1) 8
2.1 數組的結構 8
2.2 鏈表的結構 9
2.3 Hash表的結構 10
2.4 棧的結構 12
2.5 隊列的結構 13
2.6 樹的結構 14
2.7 小結 14
第3章 Java虛擬機原理:JVM為什麽被稱為機器 16
3.1 JVM的構造 17
3.2 JVM的垃圾回收 19
3.3 Web應用程序在JVM中的執行過程 22
3.4 小結 24
第4章 網絡編程原理:一個字符的互聯網之旅 25
4.1 DNS域名解析原理 26
4.2 CDN 27
4.3 HTTP的結構 28
4.4 TCP的結構 29
4.5 鏈路層負載均衡原理 32
4.6 小結 33
第5章 文件系統原理:用1分鐘遍歷一個100TB的文件 34
5.1 硬盤結構原理 35
5.2 文件系統原理 36
5.3 RAID硬盤陣列原理 37
5.4 分佈式文件系統架構原理 39
5.5 小結 40
第6章 數據庫原理:SQL為什麽要預編譯 42
6.1 數據庫架構與SQL執行過程 43
6.2 使用PrepareStatement執行SQL的好處 45
6.3 數據庫文件存儲與索引工作原理 46
6.4 小結 48
第7章 編程語言原理:面向對象編程是編程的終極形態嗎 49
7.1 軟件編程的遠古時代 49
7.2 機器與匯編語言時代 51
7.3 高級編程語言時代 51
7.4 面向對象編程時代 52
7.5 編程語言的未來 53
7.6 小結 54
第二部分 架構師的程序設計修煉
第8章 軟件設計的方法論:軟件為什麽要建模 56
8.1 什麽是軟件建模 57
8.2 4+1視圖模型 58
8.3 UML建模 59
8.4 小結 60
第9章 軟件設計實踐:使用UML完成一個設計文檔 61
9.1 用類圖設計對象模型 61
9.2 用序列圖描述系統調用 62
9.3 用組件圖進行模塊設計 63
9.4 用部署圖描述系統物理架構 64
9.5 使用用例圖進行需求分析 65
9.6 用狀態圖描述對象狀態變遷 66
9.7 用活動圖描述調用流程 66
9.8 使用合適的UML模型構建一個軟件設計文檔 67
9.9 軟件架構設計文檔示例模板 68
9.10 小結 74
第10章 軟件設計的目的:糟糕的程序差在哪裡 75
10.1 糟糕的設計有多糟糕 76
10.2 一個設計“腐壞”的例子 77
10.3 解決之道 78
10.4 小結 80
第11章 軟件設計的開閉原則:不修改代碼卻能實現需求變更 81
11.1 什麽是開閉原則 81
11.2 一個違反開閉原則的例子 82
11.3 使用策略模式實現開閉原則 84
11.4 使用適配器模式實現開閉原則 85
11.5 使用觀察者模式實現開閉原則 86
11.6 使用模板方法模式實現開閉原則 88
11.7 小結 89
第12章 軟件設計的依賴倒置原則:不依賴代碼卻可以復用它的功能 91
12.1 依賴倒置原則 91
12.2 依賴倒置的關鍵是接口所有權的倒置 93
12.3 使用依賴倒置來實現高層模塊復用 94
12.4 小結 96
第13章 軟件設計的里氏替換原則:正方形可以繼承長方形嗎 97
13.1 里氏替換原則 98
13.2 一個違反里氏替換原則的例子 99
13.3 正方形可以繼承長方形嗎 100
13.4 子類不能比父類更嚴格 101
13.5 小結 102
第14章 軟件設計的單一職責原則:一個類文件打開後最好不要超過一屏 104
14.1 單一職責原則 107
14.2 一個違反單一職責原則的例子 107
14.3 從Web應用架構演進看單一職責原則 108
14.4 小結 110
第15章 軟件設計的接口隔離原則:如何對類的調用者隱藏類的公有方法 112
15.1 接口隔離原則 113
15.2 一個使用接口隔離原則優化的例子 114
15.3 接口隔離原則在迭代器設計模式中的應用 117
15.4 小結 117
第16章 設計模式基礎:不會靈活應用設計模式,就沒有掌握面向對象編程 119
16.1 面向對象編程的本質是多態 119
16.2 設計模式的精髓是對多態的使用 121
16.3 小結 123
第17章 設計模式應用:編程框架中的設計模式 125
17.1 什麽是框架 125
17.2 Web容器中的設計模式 127
17.3 JUnit中的設計模式 129
17.4 小結 132
第18章 反應式編程框架設計:如何使程序調用不阻塞等待,立即響應 133
18.1 反應式編程 135
18.2 反應式編程框架Flower的基本原理 135
18.3 反應式編程框架Flower的設計方法 138
18.4 反應式編程框架Flower的落地效果 140
18.5 小結 141
第19章 組件設計原則:組件的邊界在哪裡 143
19.1 組件內聚原則 144
19.2 組件耦合原則 145
19.3 小結 147
第20章 領域驅動設計:35歲的程序員應該寫什麽樣的代碼 148
20.1 領域模型模式 149
20.2 領域驅動設計 151
20.3 小結 154
第三部分 架構師的架構方法修煉
第21章 分佈式架構:如何應對高並發的用戶請求 156
21.1 垂直伸縮與水平伸縮 157
21.2 互聯網分佈式架構演化 157
21.3 小結 163
第22章 緩存架構:減少不必要的計算 165
22.1 通讀緩存 166
22.2 旁路緩存 168
22.3 緩存註意事項 171
22.4 小結 173
第23章 異步架構:避免互相依賴的系統間耦合 174
23.1 使用消息隊列實現異步架構 175
23.2 消息隊列異步架構的好處 178
23.3 小結 180
第24章 負載均衡架構:用10行代碼實現一個負載均衡服務 181
24.1 HTTP重定向負載均衡 181
24.2 DNS負載均衡 183
24.3 反向代理負載均衡 184
24.4 IP負載均衡 184
24.5 數據鏈路層負載均衡 186
24.6 小結 187
第25章 數據存儲架構:改善系統的數據存儲能力 188
25.1 數據庫主從復制 188
25.2 數據庫分片 190
25.3 關系數據庫的混合部署 193
25.4 NoSQL數據庫 196
25.5 小結 197
第26章 搜索引擎架構:瞬間完成海量數據檢索 199
26.1 搜索引擎倒排索引 199
26.2 搜索引擎結果排序 202
26.3 小結 205
第27章 微服務架構:微服務究竟是“靈丹”還是“毒藥” 206
27.1 單體架構的困難和挑戰 206
27.2 微服務框架原理 208
27.3 微服務架構的落地實踐 210
27.4 小結 211
第28章 高性能架構:除了代碼,還可以在哪些地方優化性能 212
28.1 性能指標 212
28.2 性能測試 213
28.3 性能優化 215
28.4 小結 219
第29章 高可用架構:淘寶應用升級時,為什麽沒有停機 220
29.1 高可用的度量 221
29.2 高可用的架構 222
29.3 小結 225
第30章 安全性架構:為什麽說用戶密碼泄露是程序員的問題 227
30.1 數據加密與解密 227
30.2 HTTP攻擊與防護 230
30.3 小結 233
第31章 大數據架構:思想和原理 234
31.1 HDFS分佈式文件存儲架構 235
31.2 MapReduce大數據計算架構 236
31.3 Hive大數據倉庫架構 238
31.4 Spark快速大數據計算架構 240
31.5 大數據流計算架構 242
31.6 小結 242
第32章 AI與物聯網架構:從智能引擎到物聯網平臺 243
32.1 大數據平臺架構 244
32.2 智能推薦算法 245
32.3 物聯網大數據架構 249
32.4 小結 250
第33章 區塊鏈技術架構:區塊鏈到底能做什麽 251
33.1 比特幣與區塊鏈原理 251
33.2 聯盟鏈與區塊鏈的企業級應用 255
33.3 小結 257
第四部分 架構師的思維修煉
第34章 技術修煉之道:同樣工作十幾年,為什麽有的人成為資深架構師,有的人失業 260
34.1 德雷大眾模型 261
34.2 如何在工作中成長 263
34.3 小結 264
第35章 技術進階之道:你和世界上頂級的程序員差幾個等級 265
35.1 軟件技術的生態江湖與等級體系 265
35.2 技術進階之捷徑 267
35.3 小結 269
第36章 技術落地之道:你真的知道自己要解決的問題是什麽嗎 270
36.1 確定會議真正要解決的問題是什麽 271
36.2 不需要去解決別人的問題,提醒他問題的存在即可 272
36.3 去解決那些被人們習以為常而忽略了的問題 273
36.4 小結 273
第37章 技術溝通之道:如何解決問題 275
37.1 讓有能力解決問題的人感受到問題的存在 275
37.2 “直言有諱” 276
37.3 想解決一個大家都不關註的問題,可以等問題變得更糟 277
37.4 如果不填老師想要的答案,你就得不了分 278
37.5 小結 278
第38章 技術管理之道:真的要轉管理嗎 280
38.1 彼得定律 281
38.2 用目標驅動 282
38.3 小結 283
附錄A 軟件開發技術的第一性原理 284
附錄B 我的架構師成長之路 287
附錄C 無處不在的架構之美 293
附錄D 軟件架構師之道 298