內容簡介
本書共分三部分。技術篇講解了程式設計中最通用的技術問題,包括c/c++、數據結構與算法、程式活動記錄、記憶體分配與管理、程式調試、程式測試、多執行緒編程、進程通信等;開發篇介紹了程式設計的各個領域,包括網路編程、資料庫編程、核心編程、界面編程等;求職篇介紹了如何準備面試,發揮自己的正常水平,並通過實際的面試經驗為大家揭開大公司面試過程的神秘面紗,也探討了程式設計師的軟實力培養與職業發展規劃。
本書適合計算機專業的在校學生及正在尋找工作的應屆畢業生,也適合在職軟體開發人員、編程技術愛好者以及更換工作屢敗屢戰者。
作譯者介紹
周揚榮,男,四川人,畢業於中國科學院研究生院軟體研究所。曾就職於北京大學計算機研究所信息安全工程中心,從事計算機犯罪取證與Rootkit檢測研究與開發:Sun中國工程研究院,從事Solaris核心技術研究與開發;Comodo安全方案公司,從事Windows主機入侵防禦系統(HIPS)的研究與開發。現就職於奇虎360安全公司,從事Windows系統中主動防禦的研究與開發。業餘愛好包括旅遊、歷史、地理、古生物、宇宙學等。
編輯推薦
深入講解技術問題
系統介紹熱門領域
傳授實際面試經驗
探討職業發展規劃
目錄
出版說明
前言
上篇 技術
第1章 c語言 1
1.1 指針 2
1.2 位運算 15
1.3 運算符 19
1.4 數據對齊 21
1.5 實數 24
1.6 整數 26
1.6.1 編碼 26
1.6.2 存儲 27
1.7 字元 29
1.7.1 ascii與unicode 29
1.7.2 char與wchar_t 30
1.7.3 ansi_string與unicode_string 30
1.8 溢出 32
1.8.1 數組溢出 32
1.8.2 數溢出 33
1.8.3 緩衝區溢出 35
.1.8.4 棧溢出 36
1.8.5 指針溢出 36
1.9 雜項 38
1.9.1 變數 38
1.9.2 #pragma 39
1.9.3 位域 40
1.9.4 static 42
第2章 c++ 44
2.1 c++與c的區別 44
2.2 構造函式、析構函式和賦值函式 45
2.2.1 默認生成函式 46
2.2.2 構造函式實現 46
2.2.3 成員初始化方法 47
2.2.4 基類析構函式 49
2.2.5 賦值運算 50
2.3 繼承和多重繼承 52
2.3.1 模板與繼承的選擇 52
2.3.2 菱形繼承 52
2.4 多態與虛函式機制 54
2.4.1 什麼是多態 54
2.4.2 虛函式機制 55
2.4.3 virtual與inline 57
2.5 重載(重整)、重寫 59
2.5.1 重載 60
2.5.2 重寫 60
2.6 stl模板庫 63
2.6.1 vector 64
2.6.2 list 64
2.6.3 deque 65
2.6.4 set/multiset 65
2.6.5 map/multimap 66
2.6.6 stack 66
2.6.7 queue/priority_queue 67
2.6.8 算法 69
2.7 棧和佇列的c++實現 70
2.8 string類 72
2.9 寫時拷貝 73
2.10 智慧型指針 75
2.11 i++與++i 77
2.12 禁止或要求對象產生於堆中 79
第3章 數據結構與算法 81
3.1 算法設計步驟 81
3.2 字元串 86
3.2.1 實現strstr() 86
3.2.2 實現strtok() 88
3.2.3 實現strcpy() 89
3.2.4 實現strcmp() 90
3.2.5 實現tolower() 90
3.2.6 刪除特定字元或字元組 91
3.2.7 識別字元串中的單詞 91
3.2.8 逆置字元串 92
3.2.9 實現memcpy() 92
3.2.10 ip字元串與整數的轉化 93
3.2.11 將一組字元串排序 95
3.2.12 正則式匹配 95
3.3 鍊表 97
3.3.1 逆向鍊表 97
3.3.2 鍊表排序 98
3.3.3 棧和佇列的實現 98
3.3.4 鍊表合併與刪除 101
3.3.5 循環鍊表 103
3.3.6 找出倒數第m個元素 104
3.4 樹 105
3.4.1 樹的遍歷 106
3.4.2 二叉排序樹 109
3.4.3 平衡二叉排序樹 111
3.4.4 公共祖先 112
3.4.5 字典樹 115
3.5 數 117
3.5.1 最大公約數 117
3.5.2 字元串整數轉化 118
3.5.3 素數 119
3.5.4 字元串到實數轉換 120
3.5.5 因式分解 121
3.5.6 不用比較運算符,求兩個數中最大值 121
3.5.7 將一個整數分解為兩個數的和 121
3.6 數組 122
3.6.1 數組的使用 122
3.6.2 找出數組中第二小數 123
3.6.3 找出數組中的最大數和最小數(要求o (3/2n)) 124
3.6.4 找出數組中重複的數 124
3.6.5 刪除數組中重複的數(數組已經排好序) 125
3.6.6 用數組實現棧和佇列 126
3.6.7 求中位數 127
3.7 排序 128
3.7.1 插入排序 129
3.7.2 選擇排序 130
3.7.3 交換排序 132
3.7.4 歸併排序 133
3.7.5 基數排序 135
3.8 查找 136
3.8.1 折半查找 136
3.8.2 二叉排序樹查找 137
3.8.3 hash表查找 138
3.9 遞歸 139
3.9.1 遞歸的概念 139
3.9.2 遞歸與非遞歸轉化 140
3.9.3 遞歸的套用 142
3.10 算法設計關鍵 148
3.10.1 熟練使用循環語句 148
3.10.2 各種情形的完備考慮 149
3.10.3 嘗試用遞歸解決問題 150
第4章 程式活動記錄 151
4.1 記憶體空間 151
4.2 堆和棧的區別 152
4.3 函式調用規約 154
4.3.1 stdcall調用規約 155
4.3.2 cdecl調用規約 155
4.3.3 fastcall調用規約 155
4.3.4 thiscall調用規約 156
4.3.5 naked call調用規約 156
4.4 c語言活動記錄(棧幀) 156
第5章 記憶體分配與管理 162
5.1 記憶體分配 162
5.1.1 virtualalloc() 162
5.1.2 new/malloc() 162
5.1.3 檔案映射 163
5.1.4 分配比較 164
5.1.5 核心記憶體分配 165
5.2 記憶體管理 166
5.3 記憶體泄漏 166
第6章 程式調試 173
6.1 彙編基礎 173
6.1.1 基本概念 173
6.1.2 彙編版hello world程式 176
6.1.3 c代碼與彙編 178
6.1.4 64位彙編 182
6.2 調試方法 182
6.2.1 動態執行調試 183
6.2.2 事後靜態調試 183
6.2.3 列印調試信息 184
6.3 調試工具 185
6.3.1 vc 6.0 185
6.3.2 ollyice 188
6.3.3 windbg 191
6.3.4 gdb 206
6.4 轉儲檔案分析 212
6.4.1 windows轉儲檔案分析 212
6.4.2 solaris轉儲檔案分析 215
6.5 bug修復 216
第7章 程式測試 218
7.1 測試方法 218
7.1.1 基本方法 219
7.1.2 數據測試 219
7.1.3 記憶體泄漏檢測 220
7.2 測試階段 221
7.2.1 單元測試 222
7.2.2 集成測試 222
7.2.3 系統測試 222
7.2.4 驗收測試 223
7.2.5 回歸測試 223
7.2.6 alpha測試 223
7.2.7 beta測試 223
7.3 測試種類 224
7.3.1 黑盒測試 224
7.3.2 白盒測試 224
第8章 檔案讀寫 225
8.1 c語言檔案訪問 225
8.2 c++語言檔案訪問 228
8.3 vc檔案訪問 229
8.4 win32檔案訪問 229
8.5 核心檔案訪問 230
第9章 多執行緒編程 233
9.1 同步機制 234
9.1.1 臨界區 234
9.1.2 互斥量 235
9.1.3 信號量 237
9.1.4 事件 239
9.2 核心同步 240
第10章 進程通信 242
10.1 共享記憶體 242
10.2 管道 244
10.3 信號量 246
10.4 已分享檔案 247
10.5 訊息機制 248
中篇 開發
第11章 網路編程 251
11.1 網路協定 251
11.1.1 協定模型 251
11.1.2 常用協定 253
11.1.3 系統堆疊 256
11.2 tcp編程 258
11.3 udp編程 261
第12章 資料庫編程 263
12.1 sql語言基礎 263
12.2 資料庫連線 265
12.2.1 oracle資料庫 265
12.2.2 sql server資料庫 266
12.2.3 db2資料庫 266
12.2.4 informix資料庫 267
12.2.5 sybase資料庫 267
12.2.6 mysql資料庫 268
12.2.7 postgresql資料庫 268
12.3 sql語句執行 269
12.4 建立索引 270
12.5 存儲過程 272
12.5.1 存儲過程書寫格式 272
12.5.2 存儲過程的優點 273
12.5.3 存儲過程的缺點 273
第13章 核心編程 274
13.1 windows核心編程 274
13.1.1 irp(i/o request packet)結構 275
13.1.2 應用程式與核心驅動緩衝交換 276
13.1.3 ioctl控制 277
13.1.4 代碼結構 278
13.1.5 安裝測試 282
13.2 linux核心編程 283
13.2.1 代碼結構 283
13.2.2 安裝測試 286
第14章 界面編程 287
14.1 mfc界面開發 287
14.2 gtk界面開發 312
14.3 qt界面開發 314
第15章 搜尋引擎 318
15.1 系統架構 318
15.2 網路蜘蛛 320
15.2.1 什麼是網路蜘蛛 320
15.2.2 網路蜘蛛如何抓取網頁 321
15.3 網頁排序 324
15.4 中文分詞 324
15.5 開源引擎 325
下篇 求職
第16章 求職環節 326
16.1 請勿錯過實習 326
16.2 簡歷製作 327
16.2.1 簡歷的內容 328
16.2.2 製作簡歷的原則 329
16.2.3 簡歷實例 330
16.3 簡歷投遞 333
16.4 筆試 334
16.5 面試 335
16.6 offer選擇 339
16.7 如何通過試用期 341
16.8 如何避免被裁員 345
16.9 如何更換工作 346
16.10 如何談薪水 348
第17章 面試實戰 350
17.1 p研究所 350
17.2 m公司 351
17.3 s公司 358
17.4 b公司 360
第18章 程式設計師軟實力 363
18.1 團隊協作 363
18.2 交流溝通 365
18.3 全局視野 365
18.4 學習思考 366
18.5 職業素養 368
第19章 職業規劃 370
19.1 職業發展路線 370
19.1.1 發展路線規劃 370
19.1.2 筆者的發展路線 372
19.2 創業之路 374
附錄 376
附錄a 如何提高編程能力 376
附錄b c代碼風格 380
附錄c 推薦讀物 389
附錄d 推薦網站 390
參考文獻 391