斩获Offer:IT名企面试策略与编程笔试精解

斩获Offer:IT名企面试策略与编程笔试精解
作 者: 约翰·摩根 诺亚·金德勒 埃里克·吉格尔
出版社: 清华大学出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  John Mongan是一位自学成才的程序员,担任多家软件公司和制药公司的顾问,具有专业经验。他在软件测试技术方面拥有三项专利,并拥有加州大学圣地亚哥分校的生物信息学硕士学位和博士学位,在学校的研究方向为蛋白质动力学的超级计算机模拟。目前是加州大学旧金山分校放射学和生物医学影像学院信息系的助理教授和副主席,研究重点是机器学习应用于放射学数据和计算机化临床决策支持。 Noah Kindler是安全技术公司Avira的技术副总裁。他领导多个产品的软件设计和开发团队,用户群超过1亿人。 Eric Giguère(很久以前)在Commodore VIC-20上开始BASIC编程,并且迷上了计算机编程。他拥有滑铁卢大学计算机科学的BMath和MMath学位,有着丰富的专业编程经验,并且出版了几本编程书籍。目前是Google的一名资深软件工程师。

内容简介

《斩获Offer:IT名企面试策略与编程笔试精解》是程序员准备技术面试的完美首。为反映不断变化的技术和趋势,本书已经更新到第4版,为当今程序员面临的职业面试提供深入指导。在线编程竞赛已被用于筛选成千上万的候选人,雇主甚至在GitHub上考量候选人的公共代码库——随着竞争越发激烈,程序员需要在面试之前将自己塑造成理想的候选人。 《斩获Offer:IT名企面试策略与编程笔试精解》将有助于: ● 了解面试官想要听到的内容,推进面试过程 ● 采用有效的方法与非技术招聘人员进行电话面试 ● 对常见的面试问题和测试进行专家级分析讲解 ● 在口头、竞赛以及GitHub等场合做好展示自己技能的准备 ● 在压力条件下展示自己的各项技能 ● 作为一项工作的佳候选人脱颖而出

图书目录

目 录

第1章 求职之前 1

1.1 了解自己 1

1.2 了解市场 3

1.2.1 基本的市场情况 3

1.2.2 关于外包 3

1.3 培养顺应市场的技能 4

1.4 完成任务 5

1.5 准备好网上个人资料 6

1.6 小结 7

第2章 求职过程 9

2.1 寻找和联系公司 9

2.1.1 寻找公司 9

2.1.2 获得推荐 10

2.1.3 与猎头合作 10

2.1.4 直接联系公司 11

2.1.5 招聘会 11

2.1.6 技术驱动的网站 12

2.2 面试过程 12

2.2.1 筛选面试 12

2.2.2 现场面试 13

2.2.3 着装 13

2.3 招聘人员的角色 13

2.4 录用和谈判 14

2.4.1 应对招聘人员的施压 15

2.4.2 商量薪资 15

2.4.3 接受和拒绝录用 16

2.5 小结 16

第3章 电话面试 19

3.1 了解电话面试 19

3.1.1 软件工程师主持的电话面试 19

3.1.2 非技术人员主持的电话面试 20

3.2 如何进行电话面试 21

3.3 电话面试问题样例 22

3.3.1 C中的内存分配 22

3.3.2 权衡递归的利弊 22

3.3.3 移动编程 22

3.3.4 FizzBuzz 23

3.3.5 字符串翻转 24

3.3.6 删除重复项 24

3.3.7 括号嵌套 25

3.4 小结 26

第4章 编程解题方法 27

4.1 面试过程 27

4.1.1 面试场景 27

4.1.2 面试问题 28

4.1.3 选用哪种编程语言 28

4.1.4 互动是关键 29

4.2 解决问题 29

4.2.1 基本步骤 30

4.2.2 被题目困住时 31

4.3 分析解决方案 32

4.3.1 大O分析法 32

4.3.2 大O分析的原理 33

4.3.3 好情况、平均情况和坏情况 34

4.3.4 优化和大O分析 35

4.3.5 如何进行大O分析 35

4.3.6 哪种算法更好 35

4.3.7 内存占用分析 36

4.4 小结 37

第5章 链表 39

5.1 为什么考链表 39

5.2 各种链表 40

5.2.1 单链表 40

5.2.2 双向链表 42

5.2.3 循环链表 42

5.3 基本链表操作 42

5.3.1 跟踪头元素 42

5.3.2 遍历链表 43

5.3.3 插入和删除元素 44

5.4 有关链表的面试问题 46

5.4.1 栈实现 46

5.4.2 维护链表尾指针 51

5.4.3 removeHead中的错误 57

5.4.4 链表的倒数第m个元素 58

5.4.5 链表展平 61

5.4.6 链表还原 64

5.4.7 空或循环 66

5.5 小结 69

第6章 树和图 71

6.1 树 71

6.1.1 二叉树 73

6.1.2 二叉搜索树 74

6.1.3 堆 76

6.1.4 常见搜索 76

6.1.5 遍历 77

6.2 图 77

6.3 与树和图有关的面试问题 78

6.3.1 树的高度 78

6.3.2 先序遍历 79

6.3.3 先序遍历(不使用递归) 80

6.3.4 近的共同祖先 82

6.3.5 从二叉树到堆 83

6.3.6 不平衡二叉搜索树 86

6.3.7 Kevin Bacon的六度 87

6.4 小结 91

第7章 数组和字符串 93

7.1 数组 93

7.1.1 C和C 94

7.1.2 Java 95

7.1.3 C# 95

7.1.4 JavaScript 96

7.2 字符串 96

7.2.1 C 97

7.2.2 C 97

7.2.3 Java 98

7.2.4 C# 99

7.2.5 JavaScript 99

7.3 有关数组和字符串的面试问题 99

7.3.1 找到个不重复的字符 99

7.3.2 删除指定的字符 102

7.3.3 反转单词 105

7.3.4 整数/字符串转换 108

7.3.5 UTF-8字符串验证 113

7.4 小结 116

第8章 递归 117

8.1 理解递归 117

8.2 与递归有关的面试问题 120

8.2.1 二分搜索 120

8.2.2 字符串的排列 122

8.2.3 字符串的组合 125

8.2.4 电话单词 127

8.3 小结 132

第9章 排序 133

9.1 排序算法 133

9.1.1 选择排序 134

9.1.2 插入排序 135

9.1.3 快速排序 136

9.1.4 归并排序 137

9.2 与排序有关的面试问题 139

9.2.1 排序算法 139

9.2.2 稳定的选择排序 142

9.2.3 多键排序 145

9.2.4 使排序稳定 146

9.2.5 经过优化的快速排序 147

9.2.6 煎饼排序 150

9.3 小结 152

第10章 并发 153

10.1 基本线程的概念 153

10.1.1 线程 153

10.1.2 系统线程与用户线程 154

10.1.3 监视器和信号量 154

10.1.4 死锁 155

10.1.5 线程示例 155

10.2 与并发有关的面试问题 158

10.2.1 忙等 158

10.2.2 生产者/消费者 160

10.2.3 哲学家进餐 162

10.3 小结 166

第11章 面向对象编程 167

11.1 基础知识 167

11.1.1 类与对象 167

11.1.2 构造与析构 168

11.1.3 继承与多态 169

11.2 有关面向对象的编程 问题 170

11.2.1 接口和抽象类 170

11.2.2 虚方法 172

11.2.3 多重继承 173

11.2.4 资源管理 174

11.3 小结 176

第12章 设计模式 177

12.1 设计模式是什么 177

12.1.1 为何使用设计模式 177

12.1.2 面试中的设计模式 178

12.2 常见的设计模式 178

12.2.1 单例模式 178

12.2.2 构建器模式 179

12.2.3 迭代器模式 180

12.2.4 观察者模式 180

12.2.5 装饰器模式 181

12.3 关于设计模式的面试 问题 181

12.3.1 实现单例模式 181

12.3.2 装饰器模式与继承 184

12.3.3 高效的观察者更新 185

12.4 小结 185

第13章 数据库 187

13.1 数据库基础知识 187

13.1.1 关系数据库 187

13.1.2 SQL 188

13.1.3 NoSQL 192

13.1.4 对象数据库 192

13.1.5 混合键-值/列数据库 192

13.1.6 数据库事务 193

13.1.7 分布式数据库 194

13.2 有关数据库的面试问题 195

13.2.1 简单的SQL 195

13.2.2 公司和员工数据库 195

13.2.3 不采用聚合求值 198

13.2.4 三值逻辑 199

13.2.5 课程学习模式 200

13.3 小结 204

第14章 图形和位操作 205

14.1 图形 205

14.2 位操作 206

14.2.1 二进制补码表示法 206

14.2.2 位运算符 207

14.2.3 通过移位实现优化 208

14.3 与图形有关的面试问题 208

14.3.1 八分之一圆 208

14.3.2 矩形重叠 210

14.4 与位操作有关的面试 问题 213

14.4.1 高位优先或低位优先 213

14.4.2 1的个数 215

14.5 小结 218

第15章 数据科学、随机数和统计学 219

15.1 概率和统计 220

15.1.1 描述性统计和推断性统计 221

15.1.2 置信区间 221

15.1.3 统计检验 222

15.2 人工智能与机器学习 223

15.3 随机数生成器 224

15.4 与数据科学、随机数和统计学有关的面试问题 225

15.4.1 不可重复的结果 226

15.4.2 学得越多,懂得越少 227

15.4.3 掷骰子 229

15.4.4 计算π 232

15.5 小结 236

第16章 计数、测量和排序难题 237

16.1 解决脑筋急转弯问题 237

16.1.1 注意假设 238

16.1.2 不要被吓倒 239

16.1.3 小心简单的问题 239

16.1.4 估算问题 240

16.2 脑筋急转弯问题 240

16.2.1 数一数打开的储物柜 240

16.2.2 三个开关 242

16.2.3 过桥 243

16.2.4 重弹珠 246

16.2.5 美国加油站数量 250

16.3 小结 251

第17章 图形和空间难题 253

17.1 先画出来 253

17.2 有关图形和空间的问题 254

17.2.1 船和码头 254

17.2.2 数立方体 256

17.2.3 狐狸和鸭子 259

17.2.4 燃烧保险丝 261

17.2.5 躲开火车 262

17.3 小结 263

第18章 知识方面的问题 265

18.1 相关准备 265

18.2 面试问题举例 266

18.2.1 C 与Java 266

18.2.2 友元类 267

18.2.3 参数传递 268

18.2.4 宏和内联函数 269

18.2.5 继承 270

18.2.6 垃圾收集 271

18.2.7 32位应用与64位应用 272

18.2.8 网络性能 272

18.2.9 Web应用安全 273

18.2.10 密码技术 275

18.2.11 哈希表与二叉

搜索树 275

18.2.12 MapReduce 276

18.3 小结 276

第19章 非技术问题 277

19.1 为何要出非技术问题 277

19.2 面试问题举例 278

19.2.1 你想做什么工作 278

19.2.2 你喜欢的编程语言是什么 279

19.2.3 你的工作风格是什么 279

19.2.4 你能告诉我你有什么经验吗 280

19.2.5 你的职业目标是什么 280

19.2.6 你为什么要换工作 280

19.2.7 你希望的薪水是多少 281

19.2.8 你过去的薪水是多少 283

19.2.9 我们为什么应该录用你 284

19.2.10 你为什么想为这家公司工作 284

19.2.11 有什么问题要问我吗 284

19.3 小结 284

附录A 简历 285

A.1 技术简历 285

A.1.1 糟糕的示例 285

A.1.2 推销自己 288

A.1.3 保持简短 288

A.1.4 列出正确的信息 289

A.1.5 简明清晰 290

A.1.6 仅限相关信息 291

A.1.7 使用反向时间顺序排序 292

A.1.8 保持校对的习惯 293

A.1.9 改进后的示例 293

A.1.10 经理和高级开发人员 294

A.1.11 针对职位裁剪简历 299

A.2 简历样本 299