《0 bug C/C++商用工程之道》

內容簡介:程序員

共分12個章節,主要針對C/C++語言在商用工程開發中的程序實戰進行論述,從商用解決方案的角度來理解C和C++語言的程序設計技巧。具體內容包括商用工程開發思路、C/C++無錯化程序設計、設計本身的工程庫、Log日誌管理系統等。該書可供各大專院校做爲教材使用,也可供從事相關工做的人員做爲參考用書使用。《0 bug:C/C++商用工程之道》主要針對C/C++語言在商用工程開發中的程序實戰進行論述,從需求出發,從商用解決方案的角度來理解C和C++語言的程序設計技巧。商用程序員在實際工做中最爲關注的無錯化、並行、時間片、內存池、線程池、任務池、工程庫和跨平臺等相關問題,在《0 bug:C/C++商用工程之道》中都有寶貴的經驗總結和理念梳理。《0 bug:C/C++商用工程之道》不是教科書,更多的是在開發技巧、測試調試、工程代碼庫等方面給出實例與總結。《0 bug:C/C++商用工程之道》也能夠說是教科書,做者試圖經過實戰技巧的訓練,幫助讀者昇華出一種全新的程序設計理念。《0 bug:C/C++商用工程之道》能夠幫助你擺脫「Training」式編程開發思惟與方法,培養「商用」和「產品」標準的工程開發技能。編程

目錄:數組

第1章  商用工程開發思路安全

1.1  系統分析初步服務器

1.1.1  需求理解和溝通網絡

1.1.2  「上家」和「下家」數據結構

1.1.3  角色「定名」多線程

1.1.4  初步的拓撲圖負載均衡

1.1.5  後續的模塊級設計異步

1.1.6  商用設計思惟

1.2  商用程序員對開發的理解

1.2.1  資源和成本

1.2.2  盈利導向

1.2.3  客觀

1.2.4  平衡

1.2.5  服務

1.3  基本開發思路

1.3.1  邊界

1.3.2  「細分」的分析方法

1.3.3  靈活,逆向思惟

1.3.4  小內核,大外延,工程庫思惟

1.3.5  單筆交易失敗不算失敗

1.4  數據傳輸各個角色的開發思路

1.4.1  服務器的設計原則

1.4.2  PC客戶端的開發思路

1.4.3  嵌入式設備的開發思路

1.4.4  跨平臺軟件模塊的開發思路

第2章  基礎知識

2.1  內存的理解

2.1.1  32位操做系統的內存分配

2.1.2  C/C++語言對內存的使用

2.1.3  內存——bug之源

2.2  並行運算

2.2.1  時間片

2.2.2  進程和線程

2.2.3  同步和異步

2.2.4  禮貌地釋放時間片資源

2.2.5  跨線程通訊

2.2.6  跨進程通訊

2.2.7  網絡,並行運算的世界

2.3  「鎖」的使用

2.3.1  爲何要使用鎖

2.3.2  使用鎖容易犯什麼錯誤

2.3.3  「行爲鎖」和「資源鎖」

2.3.4  單寫多讀鎖

2.3.5  不可重入鎖

2.3.6  用鎖的最高境界——不用

2.4  「池」的深入含義

2.4.1  「池」的由來

2.4.2  「池」的使用

2.5  跨平臺、跨語言開發基礎

2.5.1  C/C++跨平臺開發基礎

2.5.2  dll和so

2.5.3  API和NPI

2.5.4  服務無處不在

2.6  debug的重要性

2.6.1  在數據傳輸領域,你親眼看到的都不是真的

2.6.2  如何看到——萬事從debug開始

2.6.3  debug的原則

2.6.4  如何分析數據

2.7  性能統計的重要性

2.7.1  須要統計哪些信息

2.7.2  基本的統計方法

2.7.3  隨機數的產生

2.8  隊列無處不在

2.8.1  數據結構在數據傳輸中的應用分析

2.8.2  須要哪幾種隊列形式

2.9  不要求全責備

第3章  C/C++無錯化程序設計

3.1  「無錯化程序設計」簡介

3.1.1  無錯化程序設計思路

3.1.2  C/C++無錯化設計的解決方案

3.1.3  使用後的效果

3.2  計算機程序的真諦

3.2.1  程序就是「搬數」

3.2.2  程序就是「寫文章」

3.2.3  程序就是「複製」

3.2.4  筆者看程序設計

3.3  定名

3.3.1  匈牙利命名法

3.3.2  函數命名原則

3.3.3  變量命名原則

3.3.4  其餘命名規則

3.3.5  定名的折中

3.4  無錯化程序的基本書寫原則

3.4.1  寫簡單易懂的程序

3.4.2  嚴禁變量轉義

3.4.3  嚴禁一語多義

3.4.4  函數只能有一個出口

3.4.5  變量如不使用,保持初值

3.4.6  常量必須定名

3.4.7  太大數組不要用靜態方式

3.4.8  儘可能避免使用遞歸

3.4.9  解決方案一套就夠

3.5  基本程序設計原則

3.5.1  函數的設計

3.5.2  類的設計

3.5.3  其餘要點

3.6  基本語句的約定

3.6.1  判斷語句,常量永遠在左邊

3.6.2  for (i = 0; i < n; i + +)

3.6.3  while(1)

3.6.4  不要使用do...while( )

3.6.5  i++和++i問題

3.6.6  請不要使用「?(...) :(...)」結構

3.6.7  善用大括號{ }縮小做用域

3.7  請使用goto語句

3.7.1  函數只有一個出口的原則須要goto

3.7.2  誰分配、誰釋放的原則須要goto

3.7.3  商用工程要求goto

3.7.4  程序的易讀性要求goto

3.7.5  break爲何不能亂用

3.7.6  goto的常規使用手法

3.8  指針的使用原則

3.8.1  商用數據傳輸常見的指針類型

3.8.2  不要使用兩個以上的*號

3.8.3  指針不能參與四則運算

3.9  使用結構體的技巧

3.9.1  結構體傳參的必要性

3.9.2  預防多重指針的隱患

3.9.3  32位到64位移植

3.9.4  彈性內存使用須要結構體傳參

3.9.5  網絡傳輸協議,須要結構體傳參

3.10  使用宏的建議

3.10.1  宏的幾大做用

3.10.2  C+ +的建議

3.10.3  編譯宏——跨平臺開發

3.11  回調函數設計方法

3.11.1  回調模型設計者

3.11.2  回調模型使用者

3.11.3  參數傳遞的常規手法

3.11.4  事件模型和回調模型

3.12  C語言字符串的深刻研究

3.12.1  字符串拷貝

3.12.2  字符串構造

3.12.3  關於字符串處理的結論

3.13  C/C+ +語言無錯化程序設計小結

第4章  設計本身的工程庫

4.1  數據傳輸庫中到底須要哪些模塊

4.1.1  跨平臺定義

4.1.2  鎖與安全模塊

4.1.3  內存池

4.1.4  資源管理池

4.1.5  線程池與任務池

4.1.6  隊列管理

4.1.7  其餘工具

4.2  工程庫基礎——跨平臺定義

4.2.1  鎖定義

4.2.2  線程控制相關定義

4.2.3  Socket傳輸相關定義

4.2.4  include系統頭文件

第5章  debug工具

5.1  變參函數的設計

5.2  文本輸出

5.2.1  得到時間戳

5.2.2  同時輸出到文件和屏幕

5.2.3  文本輸出的原則

5.3  二進制輸出的debug函數

5.4  核心debug和日誌系統的區別

5.5  統計模塊

5.5.1  累加器

5.5.2  ?計算模塊

5.5.3  平均值計算

5.5.4  統計平均值計算

5.5.5  輔助功能函數

5.6  CLowDebug工具類

5.6.1  需求分析

5.6.2  數據邊界聲明

5.6.3  類聲明

5.6.4  類工具函數

5.6.5  業務函數

5.7  基本debug工具小結

第6章  鎖

6.1  二元動做理論

6.1.1  二元動做在C語言中的書寫特性

6.1.2  面向對象和麪向過程的本質差別

6.1.3  二元動做在C++語言中的特殊要求

6.1.4  二元動做開發關注要點

6.2  鎖對象

6.3  多線程安全的變量

6.3.1  CMint和CMbool試驗

6.3.2  多線程安全的變量模板

6.4  單寫多讀鎖

6.4.1  單寫多讀鎖的來源

6.4.2  單寫多讀鎖C語言實現

6.4.3  單寫多讀鎖的C++實現

6.4.4  TonyXiaoMinSleep

6.4.5  單寫多讀鎖安全變量

6.4.6  單寫多讀鎖的真實意義

6.5  不可重入鎖

6.5.1  需求分析

6.5.2  類實現

6.5.3  使用樣例

6.6  線程控制鎖

6.6.1  線程控制鎖的實現

6.6.2  線程控制鎖的使用

6.7  儘可能不用鎖

第7章  內存與資源管理

7.1  內存管理的基本要求

7.1.1  不泄露

7.1.2  不產生碎片

7.1.3  能夠自動報警

7.2  內存池的核心邏輯——內存棧

7.2.1  內存管理的數學模型

7.2.2  管理模型的優化

7.2.3  關於鏈表管理的思考

7.2.4  內存塊元素

7.2.5  內存棧

7.3  內存指針註冊管理模塊

7.3.1  內存註冊模塊原理介紹

7.3.2  模塊設計及類聲明

7.3.3  構造函數和析構函數

7.3.4  Add函數

7.3.5  Del函數

7.3.6  Modeify函數

7.3.7  PrintInfo函數

7.3.8  內存註冊模塊的深刻使用

7.4  Socket註冊管理模塊

7.4.1  類聲明

7.4.2  構造函數和析構函數

7.4.3  Add函數

7.4.4  Del函數

7.4.5  PrintInfo函數

7.5  內存池類

7.5.1  類聲明

7.5.2  構造函數和析構函數

7.5.3  內存棧公有方法

7.5.4  指針管理方法

7.5.5  Socket管理方法

7.5.6  PrintfInfo方法

7.6  內存管理的深層次含義

7.6.1  資源重用的理念

7.6.2  註冊和反註冊機制

7.6.3  靜態資源的管理思路

7.7  被動池的常見組織形式

7.7.1  被動池的數據特性及需求分析

7.7.2  動態與靜態被動池的差別性

7.7.3  靜態被動池實施原理

7.7.4  被動池的常見組織形式

第8章  隊列

8.1  爲何單說隊列

8.1.1  網絡同步的需求

8.1.2  協議信令排序的需求

8.1.3  存儲轉發的需求

8.1.4  異步轉同步須要隊列

8.1.5  負載均衡須要隊列

8.1.6  等停須要隊列

8.1.7  特例:實時轉發不須要隊列

8.2  幾種常見的隊列介紹

8.2.1  不是隊列的隊列CBuffer

8.2.2  靜態隊列PopBuffer

8.2.3  動態隊列MenQueue

8.3  動態Buffer類

8.3.1  編程思想的轉變

8.3.2  Buffer類的需求分析

8.3.3  Buffer類聲明

8.3.4  構造和析構函數

8.3.5  緩衝區大小設置函數

8.3.6  二進制拷貝函數

8.3.7  數值轉換函數

8.3.8  二進制數據處理函數

8.3.9  文本字符串處理函數

8.3.10  數據比較函數

8.3.11  小結

8.4  靜態Buffer類

8.4.1  類聲明

8.4.2  構造函數和析構函數

8.4.3  緩衝區設置函數

8.4.4  二進制拷貝函數

8.4.5  數值轉換函數

8.4.6  二進制數據處理函數

8.4.7  文本字符串處理函數

8.4.8  數據比較函數

8.4.9  小結

8.5  PopBuffer

8.5.1  PopBuffer基本需求分析

8.5.2  基本數據結構介紹

8.5.3  基本類模型

8.5.4  構造函數和析構函數

8.5.5  工具服務函數

8.5.6  業務查詢函數

8.5.7  添加AddLast

8.5.8  提取GetAndDeleteFirst

8.5.9  MoveAllData

8.5.10  PopBuffer小結

8.5.11  PopBuffer的不足

8.6  MemQueue

8.6.1  動態隊列的管理原則

8.6.2  基本數據結構介紹以及優化考慮

8.6.3  基本功能類聲明

8.6.4  構造函數和析構函數

8.6.5  輔助工具函數

8.6.6  追加AddLast

8.6.7  提取GetAndDeleteFirst

8.6.8  PopBuffer相關操做

8.6.9  文件保存相關操做

8.6.10  線程安全鎖封裝類

8.7  小結

第9章  時間片管理

9.1  多線程與單線程開發的差別

9.1.1  單任務操做系統運行程序的特色

9.1.2  任天堂遊戲機中斷機制

9.1.3  利用中斷實現多任務

9.1.4  多任務操做系統運行程序的特色

9.1.5  多任務操做系統運行程序的機制

9.1.6  多任務運行環境的世界觀

9.2  多任務操做系統常見線程操做

9.2.1  線程相關變量

9.2.2  線程函數聲明

9.2.3  線程函數啓動

9.2.4  MIN_SLEEP

9.2.5  線程操做總結

9.3  線程池

9.3.1  線程池的來源和需求分析

9.3.2  線程池的設計原理

9.3.3  線程池的基本數據結構

9.3.4  線程池的類設計說明

9.3.5  構造函數和析構函數

9.3.6  管理者線程

9.3.7  服務者線程

9.3.8  註冊函數

9.3.9  線程池小結

9.4  任務池

9.4.1  任務池的原理分析

9.4.2  任務池的需求和設計

9.4.3  任務池的基本定義說明

9.4.4  任務池的類聲明

9.4.5  構造函數和析構函數

9.4.6  管理者線程

9.4.7  服務者線程

9.4.8  任務註冊接口

9.4.9  任務池的小結及實現示例

9.5  任務池的運行體

9.5.1  簡化運行態

9.5.2  任務描述工具類

9.5.3  任務池運行體的設計原理

9.5.4  任務池運行體的類聲明

9.5.5  StartTask

9.5.6  StopAll和PrintInfo

9.5.7  任務執行線程回調

9.5.8  任務池運行體小結及調用示例

9.6  時間片小結

第10章  Log日誌管理系統

10.1  日誌管理系統需求分析

10.2  設計原理和邊界定義

10.3  類聲明

10.4  構造函數和析構函數

10.4.1  構造函數

10.4.2  析構函數

10.5  文件名控制邏輯

10.6  業務輸出方法函數

10.7  Log日誌系統小結

第11章  聚合工具類

11.1  聚合工具類的類聲明

11.2  聚合工具類函數說明

11.3  額外的話題:Linux服務程序怎麼寫

11.3.1  服務器的開發習慣

11.3.2  Linux的開發習慣

11.3.3  Linux下開發服務程序的基本需求

11.3.4  基本設計原理

11.3.5  程序實戰演示

11.3.6  程序使用說明

第12章  細節決定成敗(代結束語)

12.1  工程實踐注重細節

12.2  究竟怎樣才能學好C和C++語言開發

12.3  如何作一名成功的軟件工程師

12.4  關於網絡數據傳輸

12.5  結束語

下載地址:點我下載(提取碼:ybz9)     備用下載(提取碼:5e6b)

相關文章
相關標籤/搜索