展开全部

主编推荐语

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 提示
展开全部

评分及书评

5.0
5个评分
  • 用户头像
    给这本书评了
    5.0

    如果你想去的成功,你就必须做好受苦的准备,如果你一直想享受人生,你现在就必须去努力,以后才有更多的机会去享受人生,如果你只想享受人生,不想去努力,那除非你家里是非常富有,可以让你一直享受下去,不然你没有理由不去努力,要么你就一直呆在你自己认为的享受离里,其实你只不过是在苦中作乐,你连自己想要的东西都得不到,连自己的一点点要求都满足不了,你虽然现在很舒服,但你永远不知道有多少苦难在等着你,因为你永远不知道是明天先到来还是灾难先到来,本来用钱就可以轻松解决的问题,你才发现自己根本解决不了,因为自己没有。

      转发
      评论
      用户头像
      给这本书评了
      5.0
      面试必备

      国外技术面试必备书,比《剑指 Offer》要好。

        转发
        评论

      出版方

      人民邮电出版社·图灵出品

      图灵社区成立于2005年6月,由人民邮电出版社投资控股,以策划出版高质量的科技书籍为核心业务,主要出版领域包括计算机、电子电气、数学统计、科普等,通过引进国际高水平的教材、专著,以及发掘国内优秀原创作品等途径,为目标读者提供一流的内容。