Linux後端開發工程實踐
萬木春
買這商品的人也買了...
-
$620$527 -
$390$371 -
$680$537 -
$403編程之美 : 微軟技術面試心得
-
$680$510 -
$207算法設計指南, 2/e (The Algorithm Design Manual, 2/e)
-
$534$507 -
$534$507 -
$1,200$792 -
$600$468 -
$806深入理解 Go 並發編程:從原理到實踐,看這本就夠了
-
$528$502 -
$479$455 -
$780$616
相關主題
商品描述
本書系統介紹了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