程序员面试金典(第6版)

程序员面试金典(第6版)

查阅电子书
手机扫码
  • 微信扫一扫

    关注微信公众号

因版权原因待上架

编辑推荐

189道知名科技公司编程面试真题及解答,数十万程序员求职成功的敲门砖。

内容简介

本书是原谷歌资深面试官的经验之作,层层紧扣程序员面试的每一个环节,全面而详尽地介绍了程序员应当如何应对面试,才能在面试中脱颖而出。

内容主要涉及面试流程解析,面试官的幕后决策及可能提出的问题,面试前的准备工作,对面试结果的处理,以及出自微软、苹果、谷歌等多家知名公司的189道编程面试题及详细解决方案。

第6版修订了上一版中一些题目的解法,为各章新增了介绍性内容,加入了更多的算法策略,并增添了对所有题目的提示信息。

作者简介

作者盖尔·拉克曼·麦克道尔,CareerCup创始人兼CEO,是一位知名软件工程师,曾在微软、苹果与谷歌任职。早先,她自己是一位十分成功的求职者,通过了微软、谷歌、亚马逊、苹果、IBM、高盛等多家知名企业极其严苛的面试过程。工作以后,她又成为一位出色的面试官。在谷歌任职期间,她还是该公司有名的面试官及招聘委员会成员,其间阅人无数,积累了相当丰富的面试经验。除此书外,还著有《产品经理面试宝典》《金领简历:敲开苹果、微软、谷歌的大门》。

章节目录

版权信息

中文版推荐序一

中文版推荐序二

前言

第1章 面试流程

1.1 为什么

1.1.1 错过了优秀人才是可以的

1.1.2 解决问题的技能很宝贵

1.1.3 基础数据结构和算法知识很有用

1.1.4 白板让你专注于重要的事情

1.1.5 但这并不适用于每个人、每家公司和每种场合

1.2 面试问题的来源

1.3 一切都是相对的

1.4 常见问题

1.4.1 面试结束后没有立即收到回复,我是被拒了吗

1.4.2 被拒之后我还能重新申请吗

第2章 面试揭秘

2.1 微软面试

2.1.1 必备项

2.1.2 独特之处

2.2 亚马逊面试

2.2.1 必备项

2.2.2 独特之处

2.3 谷歌面试

2.3.1 必备项

2.3.2 独特之处

2.4 苹果面试

2.4.1 必备项

2.4.2 独特之处

2.5 Facebook面试

2.5.1 必备项

2.5.2 独特之处

2.6 Palantir面试

2.6.1 必备项

2.6.2 独特之处

第3章 特殊情况

3.1 有工作经验的求职者

3.2 测试人员和软件开发测试工程师

职业生涯建议

3.3 产品经理(项目经理)

3.4 开发主管与部门经理

3.5 创业公司

3.5.1 职位申请

3.5.2 签证与工作许可

3.5.3 简历筛选因素

3.5.4 面试流程

3.6 收购与“人才收购”

3.6.1 哪些创业公司需要进行并购面试,为什么

3.6.2 这些面试有多重要

3.6.3 哪些员工需要面试

3.6.4 如果面试表现不好会怎么样

3.6.5 最优秀和最差的员工或许会令你吃惊

3.6.6 被收购方的员工与一般求职者的标准一样吗

3.6.7 被收购员工对于收购、人才收购会如何反应

3.6.8 收购后的团队会经历什么

3.6.9 怎样为你的团队准备收购面试

3.7 面试官

3.7.1 不要问与本书完全相同的题目

3.7.2 问中等难题或者高难度题

3.7.3 使用多重障碍的题目

3.7.4 使用高难度题目,而不是艰深的基础知识

3.7.5 避免“吓人”的问题

3.7.6 提供正面鼓励

3.7.7 深究行为面试题

3.7.8 辅导求职者

3.7.9 如果求职者想保持安静,请满足

3.7.10 了解你的模式:完整性测试、质量测试、专业知识和代理知识

第4章 面试之前

4.1 积累相关经验

4.2 写好简历

4.2.1 简历篇幅长度适中

4.2.2 工作经历

4.2.3 项目经历

4.2.4 软件和编程语言

4.2.5 给母语为非英语的人及国际人士的建议

4.2.6 提防(潜在的)污名

4.3 准备流程图

第5章 行为面试题

5.1 面试准备清单

5.1.1 你有哪些缺点

5.1.2 你应该问面试官哪些问题

5.2 掌握项目所用的技术

5.3 如何应对

5.3.1 力求具体,切忌自大

5.3.2 省略细枝末节

5.3.3 多谈自己

5.3.4 回答条理清晰

5.3.5 行动是关键

5.3.6 故事的意义

5.4 自我介绍

5.4.1 结构

5.4.2 兴趣爱好

5.4.3 展示成功的点点滴滴

第6章 大O

6.1 打个比方

6.2 时间复杂度

6.2.1 大O、大θ和大Ω

6.2.2 最优、最坏和期望情况

6.3 空间复杂度

6.4 删除常量

6.5 丢弃不重要的项

6.6 多项式算法:加与乘

6.7 分摊时间

6.8 Log N运行时间

6.9 递归的运行时间

6.10 示例和习题

第7章 技术面试题

7.1 准备事项

7.2 必备的基础知识

7.2.1 核心数据结构、算法及概念

7.2.2 2的幂表

7.3 解题步骤

面试期待

7.4 优化和解题技巧 1:寻找BUD

7.4.1 瓶颈

7.4.2 无用功

7.4.3 重复性工作

7.5 优化和解题技巧 2:亲力亲为

7.6 优化和解题技巧 3:化繁为简

7.7 优化和解题技巧 4:由浅入深

7.8 优化和解题技巧 5:数据结构头脑风暴法

7.9 可想象的极限运行时间

举例说明BCR的用法

7.10 处理错误答案

7.11 做过的面试题

7.12 面试的“完美”语言

7.12.1 流行度

7.12.2 语言可读性

7.12.3 潜在问题

7.12.4 冗长

7.12.5 易用性

7.13 好代码的标准

7.13.1 多多使用数据结构

7.13.2 适当代码复用

7.13.3 模块化

7.13.4 灵活性和通用性

7.13.5 错误检查

7.14 不要轻言放弃

第8章 录用通知及其他注意事项

8.1 如何处理录用与被拒的情况

8.1.1 回复期限与延长期限

8.1.2 如何拒绝录用通知

8.1.3 如何处理被拒

8.2 如何评估录用待遇

8.2.1 薪酬待遇的考量

8.2.2 职业发展

8.2.3 公司稳定性

8.2.4 幸福指数

8.3 录用谈判

8.4 入职须知

8.4.1 制定时间表

8.4.2 打造坚实的人际网络

8.4.3 向经理寻求帮助

8.4.4 保持面试状态

第9章 面试题目

9.1 数组与字符串

9.1.1 散列表

9.1.2 ArrayList与可变长度数组

9.1.3 StringBuilder

9.2 链表

9.2.1 创建链表

9.2.2 删除单向链表中的节点

9.2.3 “快行指针”技巧

9.2.4 递归问题

9.3 栈与队列

9.3.1 实现一个栈

9.3.2 实现一个队列

9.4 树与图

9.4.1 树的类型

9.4.2 二叉树的遍历

9.4.3 二叉堆(小顶堆与大顶堆)

9.4.4 单词查找树(前序树)

9.4.5 图

9.4.6 图的搜索

9.5 位操作

9.5.1 手工位操作

9.5.2 位操作原理与技巧

9.5.3 二进制补码与负数

9.5.4 算术右移与逻辑右移

9.5.5 常见位操作:获取与设置数位

9.6 数学与逻辑题

9.6.1 素数

9.6.2 概率

9.6.3 大声说出你的思路

9.6.4 总结规律和模式

9.6.5 略作变通

9.6.6 触类旁通

9.7 面向对象设计

9.7.1 如何解答

9.7.2 设计模式

9.8 递归与动态规划

9.8.1 解题思路

9.8.2 递归与迭代

9.8.3 动态规划及记忆法

9.9 系统设计与可扩展性

9.9.1 处理问题

9.9.2 循环渐进的设计

9.9.3 逐步构建的方法:循序渐进

9.9.4 关键概念

9.9.5 系统设计要考虑的因素

9.9.6 人无完人,系统亦然

9.9.7 实例演示

9.10 排序与查找

9.10.1 常见的排序算法

9.10.2 查找算法

9.11 测试

9.11.1 面试官想考查什么

9.11.2 测试现实生活中的事物

9.11.3 测试一套软件

9.11.4 测试一个函数

9.11.5 调试与故障排除

9.12 C和C++

9.12.1 类和继承

9.12.2 构造函数和析构函数

9.12.3 虚函数

9.12.4 虚析构函数

9.12.5 默认值

9.12.6 操作符重载

9.12.7 指针和引用

9.12.8 模板

9.13 Java

9.13.1 如何处理

9.13.2 重载与重写

9.13.3 集合框架

9.14 数据库

9.14.1 SQL语法及各类变体

9.14.2 规范化数据库和反规范化数据库

9.14.3 SQL语句

9.14.4 小型数据库设计

9.14.5 大型数据库设计

9.15 线程与锁

9.15.1 Java线程

9.15.2 同步和锁

9.15.3 死锁及死锁的预防

9.16 中等难题

9.17 高难度题

第10章 题目解法

10.1 数组与字符串

10.2 链表

10.3 栈与队列

10.4 树与图

10.5 位操作

10.6 数学与逻辑题

10.7 面向对象设计

10.8 递归与动态规划

10.9 系统设计与可扩展性

10.10 排序与查找

10.11 测试

10.12 C和C++

10.13 Java

10.14 数据库

10.15 线程与锁

10.16 中等难题

10.17 高难度题

第11章 进阶话题

11.1 实用数学

11.1.1 整数1至N的和

11.1.2 2的幂的和

11.1.3 对数的底

11.1.4 排列

11.1.5 组合

11.1.6 归纳证明

11.2 拓扑排序

11.3 Dijkstra算法

优先队列和运行时间

11.4 散列表冲突解决方案

11.4.1 使用链表连接数据

11.4.2 使用二叉搜索树连接数据

11.4.3 使用线性探测进行开放寻址

11.4.4 平方探测和双重散列

11.5 Rabin-Karp子串查找

11.6 AVL树

11.6.1 性质

11.6.2 插入操作

11.7 红黑树

11.7.1 性质

11.7.2 为什么这样的树是平衡的

11.7.3 插入操作

11.8 MapReduce

11.9 补充学习内容

附录A 代码库

A.1 HashMapList

A.2 TreeNode(二叉搜索树)

A.3 LinkedListNode(链表)

A.4 Trie和TrieNode

附录B 提示

程序员面试金典(第6版)是2019年由人民邮电出版社出版,作者[美]盖尔·拉克曼·麦克道尔(Gayle。

得书感谢您对《程序员面试金典(第6版)》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。

购买这本书

你可能喜欢
Go语言趣学指南 电子书
Go是谷歌公司为了解决重大问题而设计的一种小型编程语言。完成大型项目需要大型团队,而大型团队中团队成员的经验水平往往各不相同。Go是一种小巧却功能强大的语言,它能够被任何人理解和使用,无论其经验如何。 快速、现代的编程语言能让业余爱好者、初学者和专业人员都受益。你需要的正是这样的语言。本书针对Go语言基础知识提供了实操性的指导,使你能够掌握Go语法,使用类型和函数,探索状态和并发等更重要的概念,并通过大量练习来巩固学到的知识。 本书包括以下内容: ●切片、接口、指针和并发等重要语言概念; ●地鼠太空航行、火星探测器、文本加密以及人类繁衍模拟等7个单元实验; ●无须安装即可在Go Playground中运行的示例。 本书面向所有熟悉计算机编程以及渴望获得这一技能的人。
深入浅出Spring Boot 2.x 电子书
本书章节编排合理,深入浅出地阐述了Spring Boot 2.x的原理与应用,以及当今较为流行的微服务系统经常用到的技术及原理,内容通俗易懂。
大数据技术原理与应用(第2版) 电子书
国内高校大数据课程知名教师倾心之作,带你“零基础”学习大数据。
计算机网络技术(第4版) 电子书
12章详解计算机网络、技术、安全与应用
代码精进之路:从码农到工匠 电子书
对于很多一直“低头拉车”的程序员来说,这本书能够让你不必"抬头"就能看到未来的出路。