第1章 简历、面试和Offer 1
1.1简历 1
1.1.1格式 2
1.1.2内容安排 2
1.1.3描述技巧 5
1.2面试 6
1.2.1 HR 7
1.2.2技术面试官 8
1.2.3老板 10
1.3 Offer 10
1.4常见问题 12
1.5工具箱 19
第2章 数组和字符串 27
2.1知识要点 27
2.1.1数组 27
2.1.2哈希表 29
2.1.3 String 31
2.2模式识别 31
2.2.1使用哈希表 31
2.2.2利用哈希表实现动态规划的思想 35
2.2.3 String相关问题的处理技巧 39
2.3工具箱 41
第3章 链表 49
3.1知识要点 49
3.2模式识别 50
3.2.1链表的基本操作 50
3.2.2哑节点 50
3.2.3 Runner和Chaser 52
3.2.4遍历并处理节点 56
3.2.5交换节点的问题 57
3.2.6同时操作两个链表 59
3.2.7倒序处理 60
3.3工具箱 64
第4章 栈和队列 67
4.1知识要点 67
4.1.1栈 67
4.1.2队列 68
4.2模式识别 68
4.2.1通过栈实现特殊顺序的读取 68
4.2.2 “Save for later”问题 72
4.2.3用栈解决自上而下结构的问题 74
4.3工具箱 79
第5章 树和图 83
5.1知识要点 83
5.1.1树 83
5.1.2字典树 86
5.1.3堆与优先队列 88
5.1.4图 89
5.1.5图的遍历 90
5.1.6单源最短路径问题 92
5.1.7任意两点之间的最短距离 93
5.2模式识别 93
5.2.1利用分而治之(D&C)策略判断树、图的性质 93
5.2.2树的路径问题 100
5.2.3树和其他数据结构的相互转换 104
5.2.4寻找特定节点 108
5.2.5图的访问 113
5.3工具箱 116
第6章 位操作 121
6.1知识要点 121
6.2模式识别 122
6.2.1基本的位操作 122
6.2.2位掩码 125
6.3工具箱 127
第7章 面向对象设计 129
7.1知识要点 129
7.1.1 设计题解答要领 129
7.1.2模拟面试 131
7.1.3抽象、面向对象和解耦(Decoupling) 134
7.1.4继承/组合/参数化类型 137
7.1.5设计模式 139
7.2模式识别 144
7.3工具箱 159
第8章 递归和动态规划 167
8.1知识要点 167
8.1.1构建从子问题到最终目标的方法 167
8.1.2递归的空间与时间成本 168
8.1.3自底向上与自顶向下 169
8.1.4算法策略 171
8.2模式识别 172
8.2.1用动态规划(自底向上)解决收敛结构问题 172
8.2.2最长子序列类型的问题 181
8.2.3用Memorization(自顶向下)解决收敛结构问题 190
8.2.4用回溯法(自上而下)解决发散结构问题 193
8.2.5用D&C策略解决独立子问题 201
第9章 排序和搜索 203
9.1知识要点 203
9.1.1常见的内排序算法 203
9.1.2常见的外排序算法 209
9.1.3快速选择算法 210
9.1.4二分查找 211
9.2模式识别 212
9.2.1动态数据结构的维护 212
9.2.2对于有序/部分有序容器的搜索,用二分查找 216
9.2.3数据范围有限、离散的排序问题 228
9.2.4 Scalability & Memory Limits问题 230
9.3工具箱 233
第10章 测试 235
10.1知识要点 235
10.1.1测试现实世界的物体、软件或函数 235
10.1.2故障排除 236
10.2模式识别 238
10.3工具箱 242
第11章 网络 245
11.1知识要点 245
11.1.1网络分层 246
11.1.2路由 246
11.1.3常用网络统计指标 247
11.1.4 TCP vs.UDP 248
11.2模式识别 251
11.3工具箱 254
第12章 计算机底层知识 257
12.1知识要点 257
12.1.1进程vs.线程 257
12.1.2上下文切换 259
12.1.3系统调用 259
12.1.4 Semaphore/Mutex 259
12.1.5死锁 260
12.1.6生产者消费者 260
12.1.7进程间通信 261
12.1.8逻辑地址/物理地址/虚拟内存 261
12.1.9文件系统 263
12.1.10实时vs.分时操作系统 263
12.1.11编译器 264