作品简介

本书是程序员和IT从业人员的面试求职指南。本书遵从大多数面试参考图书的组织方式,结合实例,按照常见的数据结构、算法以及计算机基础知识进行章节划分。每一章的“知识要点”部分介绍章节涉及的相关知识点,回顾重要的基础知识点;“模式识别”部分给出一些例题,帮助大家总结解决相关问题的常见方法,并且通过分析问题中的关键信息,教授读者如何从题目中分析题型和解题方法。程序员面试是对于面试者计算机知识的全面检测,因此,本书设有专门的章节覆盖了网络、操作系统、编译器、算法和数据结构等各个领域的知识。

本书作者来自硅谷一线的IT公司,书中包含了作者亲身的经历和体验,书中收集的题目部分来自互联网上分享的面试经验、在线编程网站leetcode,以及一些著名的面试参考资料。本书适合想要从事正规的程序员、架构师以及相关IT公司的专业人士和学生参考,尤其适合那些以一线IT外企或互联网公司为求职目标的读者阅读。

逸超:竞赛保送国内Top2大学本科,毕业后前往加州大学攻读硕士学位,期间获得全额奖学金。毕业时获得十多个知名科技公司offer,现在在硅谷就职于顶尖科技公司,从事软件开发工作。擅长总结面试方法,乐于帮助朋友准备面试。

虾米:国内TOP2高校毕业,赴美硕士毕业后跨专业应聘程序员工作,有一套自己的面试方法学。现于硅谷市值最高的公司之一任软件工程师,业余时间开设面试讲座,在圈内小有名气。

笑笑:国内top2大学本科,UCSD计算机硕士。现苹果公司软件工程师。曾拿到多个硅谷顶级软件公司的offer,面试经验相当丰富。

董飞:本科南开大学,硕士杜克大学计算机系毕业。在攻读硕士期间,从事跟Hadoop大数据相关的研究项目,在VLDB,SOCC顶尖数据库大会发表过论文, 先后在创业公司酷迅,百度基础架构组,Amazon 云计算部门,Linkedin担任高级工程师,负责过垂直搜索引擎,百度云计算平台研发,广告系统和在线教育平台的架构。在大数据领域业界研究多年,涉及Hadoop调优,分布式框架,Data Pipeline, 实时系统。目前在线教育创业公司Coursera从事数据工程师工作。

在多年工作中,除了对技术的不懈追求,也积累了大量的面试经验,拿到北美热门公司10+ offer。在Linkedin期间,也积极参与面试过近200人,全公司前三的面试官,乐于分享并帮助很多人成功求职,实现目标。

作品目录

  • 前言
  • 我的故事,你的故事
  • 现状
  • 目的
  • 特色
  • 第1章 简历、面试和Offer
  • 1.1 简历
  • 1.1.1 格式
  • 1.1.2 内容安排
  • 1.1.3 描述技巧
  • 1.2 面试
  • 1.2.1 HR
  • 1.2.2 技术面试官
  • 1.2.3 老板
  • 1.3 Offer
  • 1.4 常见问题
  • 1.5 工具箱
  • 第2章 数组和字符串
  • 2.1 知识要点
  • 2.1.1 数组
  • 2.1.2 哈希表
  • 2.1.3 String
  • 2.2 模式识别
  • 2.2.1 使用哈希表
  • 2.2.2 利用哈希表实现动态规划的思想
  • 2.2.3 String相关问题的处理技巧
  • 2.3 工具箱
  • 第3章 链表
  • 3.1 知识要点
  • 3.2 模式识别
  • 3.2.1 链表的基本操作
  • 3.2.2 哑节点
  • 3.2.3 Runner和Chaser
  • 3.2.4 遍历并处理节点
  • 3.2.5 交换节点的问题
  • 3.2.6 同时操作两个链表
  • 3.2.7 倒序处理
  • 3.3 工具箱
  • 第4章 栈和队列
  • 4.1 知识要点
  • 4.1.1 栈
  • 4.1.2 队列
  • 4.2 模式识别
  • 4.2.1 通过栈实现特殊顺序的读取
  • 4.2.2 “Save for later”问题
  • 4.2.3 用栈解决自上而下结构的问题
  • 4.3 工具箱
  • 第5章 树和图
  • 5.1 知识要点
  • 5.1.1 树
  • 5.1.2 字典树
  • 5.1.3 堆与优先队列
  • 5.1.4 图
  • 5.1.5 图的遍历
  • 5.1.6 单源最短路径问题
  • 5.1.7 任意两点之间的最短距离
  • 5.2 模式识别
  • 5.2.1 利用分而治之(D&C)策略判断树、图的性质
  • 5.2.3 树和其他数据结构的相互转换
  • 5.2.4 寻找特定节点
  • 5.2.5 图的访问
  • 5.3 工具箱
  • 第6章 位操作
  • 6.1 知识要点
  • 6.2 模式识别
  • 6.2.1 基本的位操作
  • 6.2.2 位掩码
  • 6.3 工具箱
  • 第7章 面向对象的设计
  • 7.1 知识要点
  • 7.1.1 设计题解答要领
  • 7.1.2 模拟面试
  • 7.1.3 抽象、面向对象和解耦(Decoupling)
  • 7.1.4 继承/组合/参数化类型
  • 7.1.5 设计模式
  • 7.2 模式识别
  • 7.3 工具箱
  • 第8章 递归和动态规划
  • 8.1 知识要点
  • 8.1.1 构建从子问题到最终目标的方法
  • 8.1.2 递归的空间与时间成本
  • 8.1.3 自底向上与自顶向下
  • 8.1.4 算法策略
  • 8.2 模式识别
  • 8.2.1 用动态规划(自底向上)解决收敛结构问题
  • 8.2.2 最长子序列类型的问题
  • 8.2.3 用Memorization(自顶向下)解决收敛结构问题
  • 8.2.4 用回溯法(自上而下)解决发散结构问题
  • 8.2.5 用D&C策略解决独立子问题
  • 第9章 排序和搜索
  • 9.1 知识要点
  • 9.1.1 常见的内排序算法
  • 9.1.2 常见的外排序算法
  • 9.1.3 快速选择算法
  • 9.1.4 二分查找
  • 9.2 模式识别
  • 9.2.1 动态数据结构的维护
  • 9.2.2 对于有序/部分有序容器的搜索,用二分查找
  • 9.2.3 数据范围有限、离散的排序问题
  • 9.2.4 Scalability & Memory Limits 问题
  • 9.3 工具箱
  • 第10章 测试
  • 10.1 知识要点
  • 10.1.1 测试现实世界的物体、软件或函数
  • 10.1.2 故障排除
  • 10.2 模式识别
  • 10.3 工具箱
  • 第11章 网络
  • 11.1 知识要点
  • 11.1.1 网络分层
  • 11.1.2 路由
  • 11.1.3 常用网络统计指标
  • 11.1.4 TCP vs. UDP
  • 11.2 模式识别
  • 11.3 工具箱
  • 第12章 计算机底层知识
  • 12.1 知识要点
  • 12.1.1 进程vs.线程
  • 12.1.2 上下文切换
  • 12.1.3 系统调用
  • 12.1.4 Semaphore/Mutex
  • 12.1.5 死锁
  • 12.1.6 生产者消费者
  • 12.1.7 进程间通信
  • 12.1.8 逻辑地址/物理地址/虚拟内存
  • 12.1.9 文件系统
  • 12.1.10 实时vs.分时操作系统
  • 12.1.11 编译器
  • 看完了
展开全部