第0章 背景知识 1
0.1 基础知识 2
0.2 开发环境 3
第1章 从双向链表学习设计 5
1.1 走近专业程序员 6
1.2 谁动了你的隐私 9
1.3 Write once,run anywhere(WORA) 12
1.4 拥抱变化 15
1.5 Don't Repeat Yourself(DRY) 17
1.6 你的数据放在哪里 20
第2章 写得又快又好的秘诀 27
2.1 好与快的关系 28
2.2 代码阅读法 31
2.3 避免常见错误 33
2.4 自动测试 42
2.5 Save your work 47
第3章 从动态数组学习设计 51
3.1 动态数组与双向链表 52
3.2 排序 55
3.3 有序数组的两个应用 61
第4章 并发与同步 65
4.1 并发 66
4.2 同步 71
4.3 嵌套锁与装饰模式 76
4.4 读写锁 78
4.5 无锁数据结构 82
第5章 组合的威力 89
5.1 队列 90
5.2 栈 92
5.3 散列表 95
第6章 算法与容器 101
6.1 容器 102
6.2 迭代器 106
6.3 动态绑定 111
第7章 工程管理 117
7.1 Hello World 118
7.2 函数库 122
7.3 应用程序 128
第8章 内存管理 133
8.1 共享内存 134
8.2 线程局部存储(TLS) 137
8.3 内存管理器 138
8.4 惯用手法 146
8.5 调试手段及原理 149
第9章 从计算机的角度思考问题 157
9.1 变参函数的实现原理 158
9.2 谁在call我——backtrace的实现原理 161
9.3 Hello World不能不说的十大秘密 167
第10章 文本处理 181
10.1 状态机 182
10.2 Builder模式 204
10.3 管道过滤器模式 219
第11章 分离用户界面与内部实现 229
11.1 分层设计 231
11.2 MVC架构 241
11.3 外壳模式 246
第12章 撰写设计文档 253
附录 C语言中接口定义的不同形式 267