Linux 後端開發工程實踐

萬木春

  • 出版商: 人民郵電
  • 出版日期: 2024-01-01
  • 售價: $719
  • 貴賓價: 9.5$683
  • 語言: 簡體中文
  • 頁數: 391
  • ISBN: 711562562X
  • ISBN-13: 9787115625625
  • 相關分類: Linux
  • 立即出貨 (庫存 < 4)

  • Linux 後端開發工程實踐-preview-1
  • Linux 後端開發工程實踐-preview-2
Linux 後端開發工程實踐-preview-1

買這商品的人也買了...

商品描述

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

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

作者簡介

高等院校计算机相关专业的师生、C/C++研发人员、Linux后端研发人员、Linux C/C++后端研发人员、对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 目錄MyRPC 4

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 什麽是shell 10

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 行過濾命令grep 28

3.5.3 文本分析處理工具awk 29

3.5.4 流編輯命令sed 30

3.5.5 參數傳遞命令xargs 32

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章 實現簡易shell 52

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 makefile 86

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與RARP 139

9.3.6 ICMP 145

9.4 傳輸層 156

9.4.1 UDP 157

9.4.2 TCP 158

9.5 網絡編程接口 173

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

9.5.2 socket網絡編程 174

9.6 TCP經典異常場景分析 181

9.6.1 場景1:Address already in use 181

9.6.2 場景2:Connection refused 181

9.6.3 場景3:Broken pipe 182

9.6.4 場景4:Connection timeout 182

9.6.5 場景5:Connection reset by peer 184

9.7 本章小結 184

第 10章 I/O模型與並發 185

10.1 I/O模型概述 185

10.1.1 阻塞I/O 185

10.1.2 非阻塞I/O 185

10.1.3 I/O多路復用 185

10.1.4 異步I/O 186

10.2 並發實例——EchoServer 186

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 進程池1 207

10.2.8 進程池2 208

10.2.9 線程池 209

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

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

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

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

10.2.14 I/O多路復用之epoll(單進程)-Reactor 222

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

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

10.2.17 I/O多路復用之epoll(線程池)-Reactor 229

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

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

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/O 253

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 示例服務Echo 339

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 服務代碼生成工具myrpcc 347

13.5.2 接口測試工具myrpct 362

13.5.3 接口壓測工具myrpcb 365

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