求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

Linux後端開發工程實踐檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋

來自 孔夫子網 的圖片

Linux後端開發工程實踐》,萬木春 著,出版社: 人民郵電出版社。

人民郵電出版社是全國優秀出版社、全國百佳圖書出版單位。人民郵電出版社出版領域涵蓋科技出版、教育出版、大眾出版,涉及信息技術、通信、工業技術、科普[1]、經濟管理、攝影、藝術、運動與休閒、心理學、少兒、大中專教材等10餘個出版門類,年出版圖書[2]近萬種。

內容簡介

本書全面介紹了Linux後端開發的相關知識和技能,涵蓋了Linux系統的各種功能和工具、Linux編程的相關知識和技能,以及開發後端服務和應用程序的內容。本書分為15章,主要內容包括Linux後端開發概述,開發環境搭建,服務器運維,shell編程簡介,實現簡易shell,使用Git管理代碼,編譯、鏈接、運行與調試,後端服務編寫,網絡通信基礎,I O模型與並發,公共代碼提煉,應用層協議設計與實現,MyRPC框架設計與實現以及微服務集群的構建等。

本書講解通俗易懂,實例豐富,適合C C 開發人員、Linux後端開發人員、對Linux後端開發感興趣或者希望從事Linux後端開發的人員閱讀,也適合作為高等院校計算機相關專業師生的學習用書及培訓學校的教材。

目錄

第 1章 概述1

1.1 本書不會涉及的內容1

1.2 本書專注的內容1

1.3 為什麼這麼安排1

1.4 Linux是什麼2

1.5 後端開發是什麼2

1.6 您將學到什麼3

1.7 代碼目錄結構說明3

1.7.1 目錄MyRPC4

1.7.2 第三方依賴4

1.8 如何學習Linux後端開發4

1.8.1 堅持不懈的心態4

1.8.2 以問題作為切入點4

1.8.3 動手實踐和創造5

1.9 本章小結5

第 2章 開發環境搭建6

2.1 本地開發環境6

2.1.1 代碼編輯器6

2.1.2 終端管理器6

2.1.3 測試工具6

2.2 遠端運行環境7

2.3 本章小結9

第3章 服務器運維10

3.1 什麼是shell10

3.2 shell下的命令行11

3.2.1 命令行的組成11

3.2.2 大部分命令具備的共性11

3.2.3 使用man命令查詢在線手冊12

3.2.4 命令和文件補全13

3.2.5 命令行的通配符和特殊符號13

3.2.6 內置命令與外部命令13

3.3 基本的命令操作14

3.3.1 屏幕相關14

3.3.2 目錄和文件相關14

3.3.3 進程相關21

3.3.4 網絡相關22

3.3.5 系統相關22

3.3.6 用戶相關24

3.3.7 命令執行相關25

3.3.8 日期相關27

3.4 man的替代工具27

3.5 命令黏合劑:管道機制28

3.5.1 如何使用管道28

3.5.2 行過濾命令grep28

3.5.3 文本分析處理工具awk29

3.5.4 流編輯命令sed30

3.5.5 參數傳遞命令xargs32

3.5.6 其他常用的輔助命令34

3.6 命令輸入 輸出的重定向35

3.7 命令的連續執行36

3.8 vi編輯器簡介36

3.9 本章小結37

第4章 shell編程簡介38

4.1 什麼是shell編程38

4.2 「hello world」程序38

4.3 shell的執行過程38

4.4 調試39

4.5 執行方式的不同39

4.5.1 直接執行39

4.5.2 使用bash來執行40

4.5.3 使用source或英文點號「.」來執行40

4.6 變量41

4.6.1 環境變量41

4.6.2 自定義變量41

4.6.3 特殊變量42

4.6.4 在C語言中操作環境變量43

4.6.5 查看進程運行時的環境變量44

4.7 選擇與判斷44

4.7.1 test命令與判斷符號「[]」44

4.7.2 if語句46

4.7.3 case語句47

4.8 循環48

4.8.1 while循環48

4.8.2 until循環48

4.8.3 for循環49

4.8.4 break語句和continue語句50

4.9 函數50

4.10 命令選項51

4.11 本章小結51

第5章 實現簡易shell52

5.1 實現的特性52

5.2 執行邏輯52

5.3 實現原理52

5.3.1 命令行解析52

5.3.2 特性實現53

5.3.3 函數介紹53

5.4 編碼實現55

5.5 特性測試64

5.6 本章小結65

第6章 使用Git管理代碼66

6.1 初始化66

6.1.1 安裝Git工具66

6.1.2 設置用戶名和郵箱66

6.1.3 創建倉庫66

6.1.4 創建readme.md文件67

6.1.5 創建.gitignore文件67

6.2 核心概念67

6.3 常用操作68

6.3.1 查看當前倉庫的狀態68

6.3.2 添加文件69

6.3.3 刪除文件69

6.3.4 回退變更70

6.3.5 查看提交日誌70

6.3.6 查看差異71

6.3.7 分支管理71

6.3.8 其他操作73

6.4 團隊協作74

6.4.1 同步代碼倉庫74

6.4.2 創建自己的分支74

6.4.3 推送分支到遠程倉庫75

6.4.4 發起合入請求75

6.4.5 發布變更75

6.5 本章小結75

第7章 編譯、鏈接、運行與調試76

7.1 單文件程序的編譯與鏈接76

7.1.1 預處理階段77

7.1.2 編譯階段78

7.1.3 匯編階段79

7.1.4 鏈接階段80

7.1.5 ELF概述80

7.1.6 符號解析與重定位82

7.2 工程項目的編譯與鏈接85

7.2.1 makefile86

7.2.2 一個實例87

7.2.3 實現簡易的make命令92

7.2.4 常用的編譯和鏈接選項100

7.3 動態鏈接與靜態鏈接102

7.4 Linux動態鏈接庫規範103

7.4.1 動態鏈接庫的命名104

7.4.2 動態鏈接庫的三個不同名稱104

7.4.3 動態鏈接庫的管理105

7.5 自定義的動態鏈接庫107

7.5.1 相關源代碼107

7.5.2 生成攜帶「so name」的動態鏈接庫108

7.5.3 生成不攜帶「so name」的動態鏈接庫109

7.6 進程的內存模型110

7.6.1 進程的虛擬地址空間布局110

7.6.2 棧與堆的區別111

7.6.3 經典問題剖析111

7.7 調試程序115

7.7.1 gdb的啟動115

7.7.2 gdb常用命令115

7.8 本章小結118

第8章 後端服務編寫119

8.1 守護進程119

8.1.1 什麼是守護進程119

8.1.2 守護進程如何編寫119

8.1.3 代碼實現121

8.2 設置資源限制122

8.3 信號處理123

8.4 加載配置功能124

8.5 命令行參數解析125

8.6 日誌輸出功能125

8.7 服務啟停腳本126

8.7.1 加載系統自帶的shell函數128

8.7.2 服務相關變量聲明128

8.7.3 服務啟動函數128

8.7.4 服務停止函數128

8.7.5 服務重啟函數128

8.7.6 服務狀態查看函數129

8.7.7 case語句129

8.8 本章小結129

第9章 網絡通信基礎130

9.1 TCP IP協議棧概述130

9.2 物理層與數據鏈路層132

9.2.1 物理層132

9.2.2 數據鏈路層132

9.3 網絡層133

9.3.1 網際協議的特點133

9.3.2 IP數據報格式133

9.3.3 IP地址135

9.3.4 路由選擇138

9.3.5 ARP與RARP139

9.3.6 ICMP145

9.4 傳輸層156

9.4.1 UDP157

9.4.2 TCP158

9.5 網絡編程接口173

9.5.1 TCP網絡通信的基本流程173

9.5.2 socket網絡編程174

9.6 TCP經典異常場景分析181

9.6.1 場景1:Address already in use181

9.6.2 場景2:Connection refused181

9.6.3 場景3:Broken pipe182

9.6.4 場景4:Connection timeout182

9.6.5 場景5:Connection reset by peer184

9.7 本章小結184

第 10章 I O模型與並發185

10.1 I O模型概述185

10.1.1 阻塞I O185

10.1.2 非阻塞I O185

10.1.3 I O多路復用185

10.1.4 異步I O186

10.2 並發實例——EchoServer186

10.2.1 Echo協議186

10.2.2 協程190

10.2.3 benchmark工具201

10.2.4 單進程204

10.2.5 多進程205

10.2.6 多線程206

10.2.7 進程池1207

10.2.8 進程池2208

10.2.9 線程池209

10.2.10 簡單的領導者-跟隨者模型210

10.2.11 I O多路復用之select(單進程)-阻塞I O212

10.2.12 I O多路復用之poll(單進程)-阻塞I O214

10.2.13 I O多路復用之epoll(單進程)-阻塞I O216

10.2.14 I O多路復用之epoll(單進程)-Reactor222

10.2.15 I O多路復用之epoll(單進程)-Reactor-ET模式225

10.2.16 I O多路復用之epoll(單進程)-Reactor-協程池226

10.2.17 I O多路復用之epoll(線程池)-Reactor229

10.2.18 I O多路復用之epoll(線程池)-Reactor-HSHA230

10.2.19 I O多路復用之epoll(線程池)-Reactor-MS233

10.2.20 I O多路復用之epoll(進程池)-Reactor-協程池236

10.3 基準性能對比與分析239

10.3.1 非I O復用模型對比239

10.3.2 I O復用模型對比240

10.3.3 epoll下LT模式和ET模式對比240

10.3.4 epoll下協程池模式和非協程池模式對比241

10.3.5 HSHA模式下工作線程和I O線程寫應答對比241

10.3.6 MS模式下MainReactor線程是否監聽可讀事件對比241

10.3.7 epoll下動態和固定超時時間對比242

10.3.8 epoll下進程池和線程池對比242

10.4 本章小結243

第 11章 公共代碼提煉244

11.1 參數列表244

11.2 命令行參數解析245

11.3 字符串248

11.4 配置文件讀取249

11.5 延遲執行251

11.6 單例模板252

11.7 百分位數計算252

11.8 魯棒的I O253

11.9 時間處理254

11.10 狀態碼255

11.11 轉換256

11.12 socket選項257

11.13 「龍套」258

11.14 日誌文件260

11.15 服務鎖262

11.16 本章小結263

第 12章 應用層協議設計與實現264

12.1 協議概述264

12.2 協議分類264

12.2.1 按編解碼方式對協議進行分類265

12.2.2 按邊界劃分方式對協議進行分類265

12.3 協議評判266

12.4 自定義協議的優缺點266

12.4.1 優點266

12.4.2 缺點267

12.5 協議設計267

12.5.1 協議消息格式267

12.5.2 協議設計權衡268

12.6 預備知識268

12.6.1 大小端268

12.6.2 字節序269

12.6.3 字節序的互轉270

12.6.4 內存對象與布局272

12.6.5 指針類型的本質272

12.6.6 序列化與反序列化273

12.7 其他協議274

12.7.1 HTTP消息格式275

12.7.2 RESP消息格式276

12.8 協議實現276

12.8.1 協議編解碼抽象277

12.8.2 MySvr實現279

12.8.3 HTTP實現284

12.8.4 RESP實現289

12.8.5 混合協議實現293

12.8.6 共性總結295

12.9 本章小結296

第 13章 MyRPC框架設計與實現297

13.1 框架概述297

13.2 並發模型298

13.3 框架具體實現299

13.3.1 服務啟動流程300

13.3.2 事件分發流程304

13.3.3 服務器端請求處理流程311

13.3.4 客戶端請求處理流程321

13.3.5 分布式調用棧追蹤334

13.3.6 超時管理338

13.3.7 本地協程變量管理338

13.3.8 業務層的並發339

13.4 示例服務Echo339

13.4.1 目錄結構劃分340

13.4.2 服務描述文件340

13.4.3 服務啟動341

13.4.4 業務處理341

13.4.5 配置與輔助文件342

13.4.6 通用的服務啟停腳本345

13.4.7 接口測試346

13.5 工具集合347

13.5.1 服務代碼生成工具myrpcc347

13.5.2 接口測試工具myrpct362

13.5.3 接口壓測工具myrpcb365

13.6 本章小結371

第 14章 微服務集群372

14.1 集群架構概述372

14.2 持久化層372

14.2.1 Redis服務373

14.2.2 authstore服務373

14.2.3 userstore服務375

14.3 業務邏輯層379

14.3.1 auth服務379

14.3.2 user服務383

14.4 接入層387

14.4.1 目錄結構387

14.4.2 代碼與配置388

14.4.3 接口測試389

14.5 本章小結389

第 15章 回顧總結390

15.1 6種思維模式390

15.1.1 不要被編程語言所限制390

15.1.2 掌握多種編程語言是必然的390

15.1.3 計算機本身就是一個狀態機391

15.1.4 動手是最好的實踐391

15.1.5 依靠工具提高效率和質量391

15.1.6 像工匠一樣為自己創造工具391

15.2 寫在最後391

參考文獻

  1. 100部科普經典名著,豆瓣,2018-04-26
  2. 圖書的演變歷史資料,學習啦,2017-06-07