5.0 用户推荐指数
科技
类型
9.7
豆瓣评分
可以朗读
语音朗读
665千字
字数
2019-09-01
发行日期
展开全部
主编推荐语
189道知名科技公司编程面试真题及解答,数十万程序员求职成功的敲门砖。
内容简介
本书是原谷歌资深面试官的经验之作,层层紧扣程序员面试的每一个环节,全面而详尽地介绍了程序员应当如何应对面试,才能在面试中脱颖而出。
内容主要涉及面试流程解析,面试官的幕后决策及可能提出的问题,面试前的准备工作,对面试结果的处理,以及出自微软、苹果、谷歌等多家知名公司的189道编程面试题及详细解决方案。
第6版修订了上一版中一些题目的解法,为各章新增了介绍性内容,加入了更多的算法策略,并增添了对所有题目的提示信息。
目录
- 版权信息
- 中文版推荐序一
- 中文版推荐序二
- 序
- 前言
- 第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<T, E>
- A.2 TreeNode(二叉搜索树)
- A.3 LinkedListNode(链表)
- A.4 Trie和TrieNode
- 附录B 提示
展开全部
出版方
人民邮电出版社·图灵出品
图灵社区成立于2005年6月,由人民邮电出版社投资控股,以策划出版高质量的科技书籍为核心业务,主要出版领域包括计算机、电子电气、数学统计、科普等,通过引进国际高水平的教材、专著,以及发掘国内优秀原创作品等途径,为目标读者提供一流的内容。