[0:00] 你做到了 [0:02] 成功获得了谷歌现场面试的机会 [0:04] 祝贺你! [0:05] 我和其他谷歌的同事 [0:07] 希望分享一些 有关面试准备的技巧和建议 [0:09] 在这个视频中,我们将讲到 [0:10] 沟通、设计大型数据应用 [0:13] 具体和定量的解决方案 如何合理地权衡取舍 [0:18] 以及整体最佳实践 [0:20] 在介绍面试的重点之前 [0:23] 有几点提示 [0:24] 这个面试中不会有编程环节 [0:26] 有严格的时间限制 [0:29] 我们希望你能在前20分钟内 [0:31] 归纳需求并制定初步的解决方案 [0:34] 请一定要合理利用时间 [0:37] 沟通在谷歌的日常工作中非常重要 [0:41] 因为这是我们开发和构建产品的关键流程 [0:45] 在面试时,你需要展现出这些品质 [0:48] 理解问题和设计解决方案 [0:51] 都是面试流程中的重要部分 [0:53] 我们希望你能说出自己的思考过程 [0:55] 而不是只看到最终的解决方案 [0:58] 我们希望知道你是如何 一步步得到这个结果的 [1:00] 谷歌是个注重合作的地方 [1:01] 项目都是由不同的团队共同计划和执行 [1:04] 这些团队的使命就是协同合作 [1:06] 解决重要且往往不够明确的问题 [1:09] 那些问题通常有许多不同的解决方案 [1:12] 请告诉我们你计划如何解决这些问题 [1:14] 而且一定要问问题 [1:16] 记住,答案不是固定的 [1:19] 你在面试中需要解决的问题并不明确 [1:22] 我们是有意这样设计的 [1:23] 我们希望提出一些开放式的问题 [1:25] 因为现实中的问题往往 需要你自己去进一步挖掘 [1:28] 你需要通过提问理清问题 [1:31] 在谷歌,我们需要每天处理 全球范围的海量数据 [1:34] 并维护超大规模的计算系统 [1:35] 我们的应用服务于全球用户 [1:38] 确定解决方案仅仅是个开始 [1:41] 解决方案必须具有可扩展性 可以覆盖广泛的受众 [1:44] 具有很高的可靠性 可以满足用户的需求 [1:47] 还应该能够高效利用我们的资源 [1:50] 在这个面试中,我们会评估 [1:51] 你设计大型数据应用的能力 [1:55] 你需要牢记于心的问题包括 [1:57] 如何判断系统是否在正常运行? [1:59] 设计中是否存在瓶颈? [2:01] 如果有多个组件,有哪些API? [2:04] 它们如何协同运行? [2:06] 如何为全球用户提供出色的服务? [2:09] 一台机器就可以 实现所有功能的时代 [2:12] 早就一去不复返了 [2:14] 我们可能会给你一个大型数据集 [2:17] 要求你说明 [2:18] 如何在多个工作器之间 对数据集进行分片 [2:21] 或者,我们可能会给出一个请求 [2:23] 你可以用众多机器中的任何一台来响应 [2:26] 但你需要确定速度最快的那台 [2:29] 放弃其他的 [2:30] 你还应该准备好 讨论系统组件的属性 [2:33] 如延迟时间、吞吐量和存储容量 [2:37] 我们希望看到这些属性的估算数值 [2:39] 例如系统每秒能处理多少请求 [2:43] 你可能还需要清晰合理地说明 [2:44] 设计方案如何保证系统能实现这些属性 [2:49] 我们的系统影响着全球的用户 [2:52] 我们希望工程师能够以 具体、量化的方式解决现实问题 [2:57] 所以在设计时,你一定要 考虑现实和物理定律 [3:01] 你还要大致了解各种操作的 成本和延迟时间 [3:06] 比如从磁盘读取数据、从内存读取数据 [3:10] 局域网往返和跨洲网络 [3:15] 在面试中,我们会提供白板 [3:18] 你可以使用白板 估算运行系统所需的资源 [3:22] 或绘制设计方案图 [3:24] 你应该知道行业解决方案的模式 [3:26] 例如数据分片、数据冗余的类型、预写式日志 [3:31] 数据分离和元数据存储 [3:33] 以及几种基本的负载分配方式 [3:38] 作为谷歌的系统设计师 [3:40] 你要学会权衡取舍 [3:43] 在面试中,我们会要求你 找出系统性的缺陷 [3:47] 并阐明系统如何应对各种故障情况 [3:50] 我们希望你能列出 你所做的权衡取舍 [3:54] 并解释你的理由 [3:55] 你是将数据存储在旋转磁盘上 [3:57] 以延迟时间增加为代价 节省存储成本? [4:01] 还是把数据放在闪存盘上 [4:04] 用更高的成本换取更快的检索速度? [4:07] 这些都是你面试时 可能会遇到的问题 [4:10] 我们希望系统设计师能够 考虑多种解决方案 [4:13] 选定一种,然后反复改进 [4:17] 了解了各项重点后 [4:20] 接下来介绍一些 [4:21] 适合面试当天的实用要点 [4:25] 我们希望了解你是如何思考的 [4:27] 因此在面试过程中 解释你的思考过程很重要 [4:30] 我们不仅会评估你的技术能力 [4:33] 还会评估你是如何解决问题的 [4:35] 很多问题都是故意设计成开放式的 [4:38] 就是想了解你解决技术问题的方式 [4:41] 我们欢迎应聘者要求我们做澄清解释 [4:43] 众所周知,第一个版本的 解决方案可能不是最优的 [4:47] 因此,你在想出一个问题答案后 [4:49] 要思考如何去改进它 [4:52] 并告诉面试官你的想法 [4:54] 最后,在草稿纸或白板上练习 [4:57] 在面试期间,你可能 无法使用平常所用的资源 [5:02] 以上就是我们针对谷歌 系统设计面试提供的一些建议 [5:07] 如果对即将参加的面试有任何疑问 [5:10] 欢迎随时联系招聘专员 [5:12] 我们非常乐于提供帮助 [5:13] 期待在不久的将来 能在谷歌与你相见 [5:17] [为所有人而创造] [5:18] [为所有人而设计] [5:19] [为所有人而编程] [5:21] [为所有人而打造]