这是一本影响了全球数百万程序员的求职面试宝典,amazon 超级畅销书,持续销售近10 年,好评如潮。它授人以鱼,全面讲解程序员面试时需要掌握的各种编程必备知识和技巧;同时也授人以渔,对来自全球顶尖it 企业的极具代表性的面试题给出了解答思路,并揭示了这些企业的面试过程,帮助求职者在面试中应付自如。
《程序员面试攻略(原书第3版)》深入阐释了程序员在求职过程所面临的求职沟通和程序设计技能两个方面的问题。在程序设计技能方面,本书介绍了作为一名程序员必须具备的一些基本功,包括链表、树和图、数组和字符串、递归、排序、并发、面向对象编程、设计模式、数据库、图形学与位操作等。强调沟通方法是本书的亮点,本书包括如何编写一份重点突出的个人简历,如何与猎头公司和人力资源代表打交道,在面试时如何与面试官进行沟通等内容。本书中的面试题除了有详细解析和答案外,还对相关知识点进行了扩展说明。通过对丰富的面试题目应用循序渐进的解答方法来模拟面试过程,以强化学到的技能,真正做到由点成线,举一反三,对读者从求职就业到提升计算机专业知识都有显著帮助。
《程序员面试攻略(原书第3版)》
译者序
前言
致谢
技术编辑简介
第0 章 引言 1
第1 章 求职之前 4
1.1 了解你自己 4
1.2 了解市场 6
1.2.1 基本的市场信息 6
1.2.2 外包怎么样 7
1.3 培养市场需要的技能 8
1.4 把事情做好 8
1.5 管理网上个人资料 9
1.6 本章小结 10
第2 章 求职过程 11
2.1 寻找公司并进行联系 11
2.1.1 寻找公司 11
2.1.2 获得推荐 12
2.1.3 与猎头打交道 12
.2.1.4 直接与公司联系 13
2.1.5 招聘会 13
2.2 面试过程 14
2.2.1 筛选面试 14
2.2.2 现场面试 14
2.2.3 衣着 15
2.3 招聘人员的角色 15
2.4 工作要约和协商 16
2.4.1 应对招聘人员的压力 16
2.4.2 薪资协商 17
2.4.3 接受要约与拒绝要约 18
2.5 本章小结 18
第3 章 编程问题的解答思路 19
3.1 面试过程 19
3.1.1 面试场景 19
3.1.2 面试问题 19
3.1.3 使用哪种编程语言 20
3.1.4 互动是关键 20
3.2 解决问题 21
3.2.1 基本步骤 21
3.2.2 当你被卡住时 23
3.3 分析解决方案 24
3.3.1 大o 分析法实战 24
3.3.2 大o 分析法为何有效 25
3.3.3 最好情况、平均情况和最坏情况 26
3.3.4 优化与大o 分析法 26
3.3.5 如何进行大o 分析法 27
3.3.6 哪个算法更好 27
3.3.7 内存占用分析 28
3.4 本章小结 28
第4 章 链表 30
4.1 为什么是链表 30
4.2 链表的种类 30
4.2.1 单链表 31
4.2.2 双向链表 32
4.2.3 循环链表 33
4.3 基本链表操作 33
4.3.1 追踪头元素 33
4.3.2 遍历一个链表 34
4.3.3 插入和删除元素 35
4.4 链表问题 36
4.4.1 栈的实现 37
4.4.2 维护链表尾指针 41
4.4.3 removehead 中的bug 46
4.4.4 链表中的倒数第m 个元素 47
4.4.5 链表展平 50
4.4.6 取消链表展平 53
4.4.7 null 或循环 55
4.5 本章小结 57
第5 章 树和图 58
5.1 树 58
5.1.1 二叉树 60
5.1.2 二叉搜索树 61
5.1.3 堆 63
5.1.4 常见搜索 63
5.1.5 遍历 64
5.2 图 64
5.3 树与图的问题 65
5.3.1 树的高 65
5.3.2 前序遍历 66
5.3.3 非递归前序遍历 67
5.3.4 最近共同祖先 69
5.3.5 二叉树转堆 71
5.3.6 非平衡二叉搜索树 73
5.3.7 凯文 培根的六度空间 74
5.4 本章小结 78
第6 章 数组和字符串 79
6.1 数组 79
6.1.1 c 和c++ 80
6.1.2 java 81
6.1.3 c# 81
6.1.4 javascript 81
6.2 字符串 82
6.2.1 c 83
6.2.2 c++ 83
6.2.3 java 83
6.2.4 c# 84
6.2.5 javascript 84
6.3 数组和字符串问题 85
6.3.1 找到第一个不重复的字符 85
6.3.2 删除指定的字符 88
6.3.3 反转单词 90
6.3.4 整数/ 字符串转换 94
6.4 本章小结 99
第7 章 递归 100
7.1 理解递归 100
7.2 递归问题 103
7.2.1 二分搜索 103
7.2.2 字符串的全排列 105
7.2.3 字符串的全组合 108
7.2.4 电话按键单词 110
7.3 本章小结 115
第8 章 排序 116
8.1 排序算法 116
8.1.1 选择排序 117
8.1.2 插入排序 118
8.1.3 快速排序 119
8.1.4 归并排序 120
8.2 排序问题 122
8.2.1 最好的排序算法 122
8.2.2 稳定的选择排序 125
8.2.3 多键排序 127
8.2.4 使一个排序稳定 128
8.2.5 最优化快速排序 129
8.2.6 煎饼排序 132
8.3 本章小结 134
第9 章 并发 135
9.1 线程的基本概念 135
9.1.1 线程 135
9.1.2 系统线程与用户线程 136
9.1.3 监视器与信号量 136
9.1.4 死锁 137
9.1.5 线程示例 137
9.2 并发问题 140
9.2.1 忙等待 140
9.2.2 生产者/ 消费者 142
9.3 哲学家就餐 144
9.4 本章小结 147
第10 章 面向对象编程 148
10.1 基础知识 148
10.1.1 类与对象 148
10.1.2 继承与多态 149
10.2 构造函数与析构函数 150
10.3 面向对象编程问题 151
10.3.1 接口与抽象类 151
10.3.2 虚方法 152
10.3.3 多重继承 154
10.4 本章小结 155
第11 章 设计模式 156
11.1 什么是设计模式 156
11.1.1 为什么使用设计模式 156
11.1.2 面试中的设计模式 157
11.2 常见的设计模式 157
11.2.1 创建型模式 157
11.2.2 行为型模式 160
11.2.3 结构型模式 160
11.3 设计模式问题 161
11.3.1 实现单例模式 161
11.3.2 装饰模式与继承 163
11.3.3 高效的观察者更新 164
11.4 本章小结 164
第12 章 数据库 165
12.1 数据库基础 165
12.1.1 关系数据库 165
12.1.2 sql 166
12.1.3 数据库事务 169
12.2 数据库问题 170
12.2.1 简单sql 170
12.2.2 公司和员工数据库 171
12.2.3 不使用汇总返回最大值 173
12.2.4 三值逻辑 174
12.3 本章小结 175
第13 章 图形学和位操作 176
13.1 图形学 176
13.2 位操作 177
13.2.1 二进制的补码表示 177
13.2.2 位操作 178
13.2.3 利用移位进行优化 179
13.3 图形学问题 179
13.3.1 八分之一圆 179
13.3.2 矩形重叠 181
13.4 位处理问题 184
13.4.1 大端序或小端序 184
13.4.2 1 的个数 186
13.5 本章小结 189
第14 章 计数、测量和排序难题 190
14.1 处理难题 190
14.1.1 解决正确的问题 191
14.1.2 不要被吓倒 192
14.1.3 当心简单的问题 192
14.1.4 估算问题 193
14.2 智力难题 193
14.2.1 统计打开的锁 193
14.2.2 三个开关 195
14.2.3 过桥 196
14.2.4 较重的弹珠 199
14.2.5 美国的加油站数量 202
14.3 本章小结 203
第15 章 图形和空间方面的难题 204
15.1 先画下来 204
15.2 图形和空间问题 205
15.2.1 船和码头 205
15.2.2 数立方体 207
15.2.3 狐狸与鸭子 210
15.2.4 燃烧导火索 212
15.2.5 躲避火车 213
15.3 本章小结 214
第16 章 知识问题 215
16.1 准备 215
16.2 问题 216
16.2.1 c++ 与java 217
16.2.2 友元类 217
16.2.3 参数传递 218
16.2.4 宏与内联函数 219
16.2.5 继承 220
16.2.6 垃圾收集 221
16.2.7 32 位与64 位应用程序 222
16.2.8 网络性能 223
16.2.9 网络应用程序安全 223
16.2.10 加密 225
16.2.11 散列表与二叉搜索树 226
16.3 本章小结 226
第17 章 非技术问题 227
17.1 为什么要问非技术问题 227
17.2 问题 228
17.2.1 你想从事哪方面的工作 228
17.2.2 你最喜欢哪一种编程语言 229
17.2.3 你的工作方式是怎样的 229
17.2.4 请谈一谈你的工作经历 230
17.2.5 你的职业目标是什么 230
17.2.6 你为什么要换工作 230
17.2.7 你希望拿多少报酬 231
17.2.8 你以前的薪酬是多少 233
17.2.9 我们为什么要雇你 233
17.2.10 你为什么想加入这家公司 234
17.2.11 你有什么问题想问我吗 234
17.3 本章小结 234
附录a 如何编写简历 235
结束语 255
BillFranks是Teradata公司全球合作伙伴计划的首席分析专家,他负责跟踪研究分析领域的前段趋势,帮助客户理解Teradata和其分析合
《我帮华与华改设计》内容简介:十年来,华与华一直邀请刘永清参加重大项目的设计修改,包括海底捞、得到、华莱士、老娘舅、奇安信
《全职妈妈指南》内容简介:目前全国至少有9400万城镇全职妈妈,这个数字还会随着二孩家庭的增多而不断变大。虽然全职妈妈对家庭贡
《庄子人性论》内容简介:本书收入了《开放的心灵与审美的心境——〈庄子〉内篇的心学》《心通道境:心灵的内修与审美空间的外移—
《四季糖水300例》内容简介:《四季糖水300例》向读者推荐了300例适合四季食用的糖水做法,从功效、材料、制作过程、健康指南四个方
《轻松学航拍》内容简介:通过阅读本书,你将学习到无人机摄影的入门知识,并结合基础摄影理论,为你打开无人机摄影的大门。这本书
《Access数据库实用教程习题与实验指导(第2版)》内容简介:本书是《Access数据库实用教程(第2版)》一书的配套教材,全书分为“
HeadFirstC#isacompletelearningexperienceforobject-orientedprogramming,C#,andtheV...
《无线通信与移动通信中信号处理研究的新进展》总结了近年来通信信号处理领域的最新研究成果,概括地讨论了通信信号处理中最具特
《能源互联网发展研究》内容简介:本书全面介绍了国内能源互联网的发展现状及进展,共分四篇,第1篇为战略篇,第2篇为技术篇,第3篇
本书是一本与众不同的Java入门好书。作者以独特的视角,向Java初学者讲述了如何才能真正理解和掌握Java语言。本书充分考虑了初学
基于Pro/E注塑模具CAD设计-(含光盘) 本书特色 《基于Pro/E注塑模具CAD设计/全国高职高专规划教材·机械设计制造系列》是在工作过程系统化理论的课程...
社交网络已经彻底改变了互联网文化,也改变了整个世界的社交方式。MySpace为什么惨败给Facebook?社交网络的未来又在哪儿?几年前
《无师自通1:铅笔素描石膏几何单体超精解析(修订版)》内容简介:素描是一切造型艺术的基础,有着独特的表现魅力,学习素描是通往
机器学习理论及应用 本书特色 《机器学习理论及应用》:当代科学技术基础理论与前沿问题研究丛书:中国科学技术大学校友文库。机器学习理论及应用 内容简介 机器学习新...
《使用GitOps实现Kubernetes的持续部署:模式、流程及工具》内容简介:本书提供了通过GitOps使用Kubernetes的实用教程,内容涵盖Gi
《赋权富民(全2册)》内容简介:本书为我国农村问题研究学者张英洪在2012—2016年撰写和发表的有关“三农”问题研究的文章自选集,
ShawnWelch编著的《iOSApp界面设计创意与实践》介绍如何将这些让人感到兴奋的创意原型,融入到真实的App之中。包括iOS入门、iOS用
《邓小平讲话实录:演讲卷》内容简介:《邓小平讲话实录》记述了邓小平从革命战争年代到社会主义建设中发挥的重要作用,他的历次讲
《游戏人间一孤鸿》内容简介:本书收录的是庐隐创作的经典散文和小说。这些作品有的反映青年人不甘醉生梦死的苦闷,有的反映知识女