上篇 技术 1
第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
中篇 开发 251
第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
下篇 求职 326
第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