新書推薦:
![最后的奈良(一部日本土葬风俗消亡史,堪称日本土葬资源抢救工程的“世纪奇书”)](http://103.6.6.66/upload/mall/productImages/24/31/9787220135194.jpg)
《
最后的奈良(一部日本土葬风俗消亡史,堪称日本土葬资源抢救工程的“世纪奇书”)
》
售價:HK$
98.9
![古籍目录版本校勘文选(平装)](http://103.6.6.66/upload/mall/productImages/24/31/9787211090211.jpg)
《
古籍目录版本校勘文选(平装)
》
售價:HK$
89.7
![巴比伦怪物:魏玛共和国犯罪鉴证实录(“火与风”丛书)](http://103.6.6.66/upload/mall/productImages/24/30/9787532796397.jpg)
《
巴比伦怪物:魏玛共和国犯罪鉴证实录(“火与风”丛书)
》
售價:HK$
101.2
![启功谈国画(启功著,中华书局出版)](http://103.6.6.66/upload/mall/productImages/24/31/9787101161021.jpg)
《
启功谈国画(启功著,中华书局出版)
》
售價:HK$
64.4
![中国书法的历程](http://103.6.6.66/upload/mall/productImages/24/30/9787523213803.jpg)
《
中国书法的历程
》
售價:HK$
89.7
![汉语修辞学(第四版)(中华当代学术著作辑要)](http://103.6.6.66/upload/mall/productImages/24/31/9787100234481.jpg)
《
汉语修辞学(第四版)(中华当代学术著作辑要)
》
售價:HK$
158.7
![中国近代画报大系·中国近代画报史稿](http://103.6.6.66/upload/mall/productImages/24/29/9787545823547.jpg)
《
中国近代画报大系·中国近代画报史稿
》
售價:HK$
181.7
![思想地震:柄谷行人演讲集1995-2015(艺文志·日本思想)](http://103.6.6.69/upload/mall/productImages/y24/8/9787532181827.jpg)
《
思想地震:柄谷行人演讲集1995-2015(艺文志·日本思想)
》
售價:HK$
66.7
|
編輯推薦: |
(1)内容权威:谷歌面试官和OPPO高级研究总监联手打造。作者基于亲身经验,有的放矢地解析数据结构、算法和系统设计3大核心技能面,筛选硅谷及国内科技巨头面试真题 (2)质量可靠:西北工业大学教授、美国乔治亚大学教授、华为专家、谷歌专家推荐。本书不仅透彻讲解常见的Python技术核心,还强调了重要而易被忽视的系统设计类题目, 用丰富实例打造硅谷科技企业的Python面试秘籍。 (3)收获切实:通过阅读本书,你将:1)了解硅谷高科技公司以及国内科技大厂面试的流程;2)利用真题训练来巩固面试所需的基本技能;3)更好地准备科技大厂的面试,从而争取更高的待遇条件。
|
內容簡介: |
本书是一本全面的Python技术及面试指南,旨在帮助读者深入理解Python编程语言的核心概念,并掌握在技术面试中取得成功的关键技巧。全书分为4个部分。 第*部分 面试流程。这一部分详细介绍了硅谷公司的面试流程,包括非技术电话面试、技术电话面试(包括闲谈、技术沟通和提问环节)以及现场面试的准备和策略,既为读者提供了面试前的全面准备指导,也帮助读者在面试中展现出良好状态。 第二部分 数据结构。从基础的列表、堆栈、队列、优先队列、字典和集合,到更复杂的链表、二叉树、其他树结构(如前缀树、线段树、二叉索引树)和图的表示与应用,每一章都通过丰富的实例来展示如何巧妙应用这些数据结构。 第三部分 算法。这一部分覆盖了二分搜索、双指针法、动态规划、深度优先搜索、回溯、广度优先搜索、并查集等核心算法。结合面试真题,通过逐步分析,引导读者掌握每种算法的思想及其在解决实际问题中的应用。 第四部分 系统设计。理论知识部分,从设计需求分析到高层构建,然后到具体组件设计,再到扩展设计,帮助读者理解如何构建可扩展、高效的系统架构。实战案例部分,包括分布式缓存系统、网络爬虫系统、TinyURL加密与解密、自动补全功能、新闻动态功能、社交媒体应用和出行应用的设计,涵盖系统设计的关键技术。此外,这一部分涵盖了多线程编程与设计机器学习系统的知识,既帮助读者理解并行处理的概念和应用,又扩展机器学习的重要知识和面试技巧,并提供设计搜索排名系统和推荐系统的实例。
|
關於作者: |
任建峰,分别于2005年和2009年获得西北工业大学博士学位和德州大学达拉斯分校博士学位。先后在美国高通、华为工作多年,从事计算机影像学/计算机视觉的芯片开发工作。目前在谷歌主要复杂计算影像方面的开发。发表论文30多篇,拥有30多项专利
|
目錄:
|
Contents 目 录 前 言 第一部分 面试流程 第1章 硅谷公司面试流程 2 1.1 非技术电话面试 2 1.2 技术电话面试 3 1.2.1 闲谈环节 3 1.2.2 技术沟通环节 3 1.2.3 提问环节 4 1.3 现场面试 4 1.3.1 准备好闲谈素材 5 1.3.2 保持积极沟通 6 第二部分 数据结构 第2章 列表 8 2.1 列表的基础知识 8 2.1.1 创建列表 8 2.1.2 向列表中添加元素 9 2.1.3 删除列表中的元素 11 2.2 实例1:最长连续1的个数 12 2.3 实例2:二进制相加 13 2.4 实例3:查询范围和 15 2.4.1 利用一维数组求解 16 2.4.2 利用二维数组求解 16 2.5 实例4:随机索引 18 2.6 实例5:下一个更大排列 19 2.7 实例6:验证有效数字 21 2.8 实例7:递归小数 23 第3章 堆栈 25 3.1 堆栈的基础知识 25 3.1.1 堆栈操作及时间复杂度 25 3.1.2 3种实现方式 26 3.1.3 堆栈的应用 29 3.2 实例1:通过最小移除操作 得到有效的括号 29 3.3 实例2:函数的专用时间 30 第4章 队列 33 4.1 队列的3种实现方式 33 4.2 实例1:设计循环队列 36 4.3 实例2:求和大于K的最短 非空连续子数组的长度 38 第5章 优先队列 40 5.1 优先队列的3种实现方式 40 5.2 实例1:雇用K个工人的最低 成本 42 5.3 实例2:判断数组是否可以 拆分为连续的子序列 43 第6章 字典 45 6.1 字典的基础知识 45 6.1.1 创建字典 45 6.1.2 向字典中添加元素 46 6.1.3 访问字典中的元素 48 6.1.4 从字典中删除元素 49 6.2 实例1:和等于K的连续子 数组的总数 50 6.3 实例2:标签中的最大值 51 6.4 实例3:以平均时间复杂度 O(1)实现插入、删除和获取 随机值 52 6.5 实例4:最近最少使用缓存 54 第7章 集合 57 7.1 集合的基础知识 57 7.2 集合的基本操作 58 7.2.1 添加元素 58 7.2.2 删除元素 59 7.2.3 并集 59 7.2.4 交集 60 第8章 链表 61 8.1 双指针技术 61 8.2 实例1:判断链表是否有循环 62 8.3 实例2:两个链表的交集 62 8.4 实例3:克隆随机链表 64 8.5 实例4:反转链表 65 第9章 二叉树 66 9.1 层次顺序遍历 66 9.1.1 前序遍历 66 9.1.2 中序遍历 67 9.1.3 后序遍历 68 9.1.4 层序遍历 69 9.2 递归方法用于树的遍历 69 9.2.1 自上而下的解决方案 70 9.2.2 自下而上的解决方案 70 9.3 实例1:二叉树的最低共同 祖先 72 9.4 实例2:序列化和反序列化 二叉树 73 9.5 实例3:求二叉树的最大 路径和 74 9.6 实例4:将二叉树转换为 双链表 75 第10章 其他树结构 77 10.1 前缀树 77 10.1.1 前缀树节点的数据结构 78 10.1.2 在前缀树中插入单词 78 10.1.3 在前缀树中搜索单词 80 10.2 线段树 82 10.3 二叉索引树 86 10.3.1 二叉索引树的表示 87 10.3.2 getSum操作 87 10.3.3 update操作 88 10.3.4 二叉索引树的工作原理 89 10.4 实例1:范围和的个数 90 10.4.1 利用线段树求解 90 10.4.2 利用二叉索引树求解 94 10.4.3 利用二分搜索求解 96 10.5 实例2:计算后面较小数字的 个数 97 10.5.1 二叉索引树解法 97 10.5.2 二分搜索解法 98 10.5.3 线段树解法 99 第11章 图 100 11.1 图的表示 100 11.1.1 邻接矩阵 100 11.1.2 邻接表 101 11.2 实例1:克隆图 103 11.3 实例2:图验证树 104 11.3.1 深度优先搜索解法 104 11.3.2 广度优先搜索解法 106 11.3.3 并查集解法 107 第三部分 算法 第12章 二分搜索 110 12.1 实例1:求平方根 110 12.2 实例2:在旋转排序数组中 搜索 111 12.3 案例3:会议室预订问题 112 12.3.1 问题1:如何优化 112 12.3.2 问题2:如何预订多个 房间 113 第13章 双指针法 114 13.1 实例1:稀疏向量的点积 114 13.2 实例2:最小窗口子字符串 115 13.3 实例3:间隔列表相交 116 13.4 实例4:最长连续1的个数 119 13.5 实例5:查找字符串中的所有 字母 121 第14章 动态规划 123 14.1 动态规划的基础知识 123 14.2 实例1:买卖股票的最佳 时间 124 14.3 实例2:硬币找零 124 14.4 实例3:计算解码方式 总数 125 第15章 深度优先搜索 127 15.1 深度优先搜索的应用 127 15.2 实例1:太平洋和大西洋的 水流问题 128 15.3 实例2:预测获胜者 129 15.4 实例3:表达式加运算符 130 第16章 回溯 132 16.1 实例1:数独求解 132 16.2 实例2:扫地机器人 135 第17章 广度优先搜索 137 17.1 广度优先搜索的应用 138 17.2 实例1:墙和门 139 17.3 实例2:课程表 141 17.4 实例3:公交路线 142 17.5 实例4:判断二分图 143 17.6 实例5:单词阶梯 145 第18章 并查集 147 18.1 并查集的基础知识 147 18.2 实例:朋友圈 150 18.2.1 广度优先搜索解法 150 18.2.2 深度优先搜索解法 151 18.2.3 并查集解法 152 第19章 数据结构与算法面试 真题实战 153 19.1 实例1:文件系统 153 19.1.1 关于数据结构的探讨 154 19.1.2 面试题考查点 156 19.1.3 完整代码 156 19.2 实例2:最长有效词 157 19.2.1 找到更快的解决方案 158 19.2.2 基于存储/缓存的解决 方案 159 19.2.3 面试题考查点 161 19.3 实例3:圆圈组 161 19.3.1 圆圈组的个数 163 19.3.2 最大的k个圆圈组 163 第四部分 系统设计 第20章 系统设计理论 166 20.1 设计步骤 166 20.1.1 描述使用场景、约束和 假设 166 20.1.2 构建高层设计 166 20.1.3 设计核心组件 167 20.1.4 扩展设计 169 20.2 域名系统 171 20.3 负载均衡器 172 20.4 分布式缓存系统 173 20.5 哈希一致性 176 第21章 系统设计实战 178 21.1 设计分布式缓存系统 178 21.1.1 缓存无效 178 21.1.2 缓存逐出策略 179 21.1.3 设计分布式键值缓存 系统 180 21.2 设计网络爬虫系统 181 21.2.1 架构设计 181 21.2.2 爬虫服务 181 21.2.3 处理重复链接 183 21.2.4 更新爬网结果 184 21.2.5 可扩展性设计 184 21.3 TinyURL的加密与解密 185 21.3.1 系统的要求和目标 185 21.3.2 容量估算和约束 185 21.3.3 系统API 186 21.3.4 核心算法设计 187 21.3.5 数据库设计 187 21.3.6 数据分区和复制 188 21.3.7 缓存 188 21.3.8 负载均衡器 189 21.4 设计自动补全功能 189 21.4.1 基本系统设计与算法 190 21.4.2 主数据结构 191 21.4.3 优化设计 192 21.5 设计新闻动态功能 195 21.6 设计X(Twitter)应用 198 21.7 设计Uber/Lyft应用 203 第22章 多线程编程 206 22.1 多线程面试问题 206 22.2 实例1:形成水分子 207 22.3 实例2:打印零、偶数、 奇数 208 第23章 设计机器学习系统 210 23.1 机器学习的基础知识 210 23.1.1 什么是机器学习 210 23.1.2 为什么使用机器学习 211 23.1.3 监督学习和无监督学习 212 23.1.4 分类模型和回归模型 213 23.1.5 转换问题 214 23.1.6 关键数据 214 23.1.7 机器学习工作流程 215 23.1.8 欠拟合和过拟合 216 23.1.9 偏差和方差 217 23.2 机器学习的进阶知识 220 23.2.1 处理不平衡的二进制 分类 220 23.2.2 高斯混合模型和K均值 的比较 221 23.2.3 梯度提升 221 23.2.4 决策树的约束 223 23.2.5 加权更新 223 23.2.6 随机梯度提升 223 23.2.7 惩罚性学习 224 23.3 机器学习面试 224 23.3.1 机器学习面试考查点 224 23.3.2 机器学习面试的思路 226 23.4 实例1:搜索排名系统 227 23.4.1 题目解读 227 23.4.2 指标分析 228 23.4.3 架构 229 23.4.4 结果选择 231 23.4.5 训练数据生成 237 23.4.6 排名 238 23.4.7 筛选结果 240 23.5 实例2:Netflix电影推荐 系统 242 23.5.1 题目解读 242 23.5.2 指标分析 244 23.5.3 架构 246 23.5.4 特征工程 247 23.5.5 候选电影的产生 250 23.5.6 训练数据生成 252 23.5.7 排名 253
|
內容試閱:
|
Preface?前 言 笔者目前就职于谷歌,担任软件工程师。与很多开发人员一样,笔者在面试前也进行了充分的准备,其中“刷题”似乎格外令人痛苦和感到疲惫。然而笔者发现,虽然刷题的过程很痛苦,但也有很多收获。首先,现在写出来的代码更加简洁,编程也更高效。其次,提升了自己的系统设计能力,在面对实际问题时更有思路。最后,因为准备充分、发挥平稳,最终拿到了比一般软件工程师更高的待遇。 在准备面试的过程中,笔者总结了一些经验,现在把自己的经验写出来,分享给广大 读者。 有一点需要说明:为什么本书使用Python语言呢?Python与C++相比更加简洁,可以方便地调用很多函数。使用Python“刷题”,可以不必纠结烦琐的细节。 本书分为四个部分,第一部分介绍硅谷公司面试流程,第二~四部分对应一般面试需要考查的三个基本技能。 数据结构:主要介绍关于列表、堆栈、队列、优先队列、字典、集合、链表,以及树和图的一些基本应用。 算法:主要介绍二分搜索、双指针法、动态规划、深度优先搜索、回溯、广度优先搜索等算法,并提供了面试真题的实战训练。 系统设计:包括系统设计理论和实战,介绍了多线程编程设计,也介绍了机器学习的系统设计案例,包括搜索排名系统和Netflix电影推荐系统等。 本书具有以下特色。 内容新颖:大多数案例都是目前大公司经常面试的实战题目。 免费代码:附有大量经过测试的代码。 经验总结:全面归纳和整理笔者积累的面试经验。 内容实用:结合大量实例进行讲解。 本书的完成离不开恩师蒋立源教授的鼓励,虽然他已经离开了这个世界,但是没有他,笔者不会产生写书的念头。谨以此书献给敬爱的蒋老师! 感谢师妹杜亚勤博士,她在百忙之中阅读了全书并做了修改。 任建峰 于美国圣地亚哥
|
|