想去Google作AI?先读此文!


虽然 Google 在几年前就已经退出了中国大陆市场,可是在北京、上海等国内城市依然保留着办公地点,并且一直在对外发布招聘需求。特别是去年末,Google 宣布在北京成立 AI 中心,更是为中国的 AI 人才提供了又一个好去处。面试

为此,咱们整理一份 Google 面试指南,并搜集了 20 道 Google AI 的面试问题,但愿对感兴趣的读者能有所助益。算法

固然,若是你想申请国外的 Google 岗位,这份资料也一样适用。编程


▌Google 面试方式

首先,Google 为求职者提供两种面试方式,一种是电话面试或者经过 Google Hangout 进行面试,一种是现场面试,面试方式视状况而定。api

电话面试数组

在电话面试或者 Google Hangout 面试中,面试官将会是你潜在的同事或者经理。数据结构

若是你面试的是软件工程岗位,那么面试时间将持续 30~60 分钟。在回答编程问题时,你须要一边在 Google Doc 里面写代码,一边告诉面试官你的思考过程。咱们建议你使用免提耳机或者扬声器,以便腾出手来打字。app

电话面试的内容包含数据结构和算法,你须要作好准备,用你最擅长的语言编写 20~30 行代码。机器学习

面试官会提一个开放式的问题,你可让面试官将问题解释清楚。数据结构和算法

你须要用算法来解释它。编程语言

用代码来实现算法(提示:不要担忧不够完美,由于时间有限。先将你想到的写下来,而后再完善,确保考虑到了 corner case 和 edge case)。

优化代码,用案例来测试代码,而后找出全部的 bug。

若是你申请的是其余职位,那么电话面试时间大约为 30~45 分钟。

面采

面试官一般有 4 位,包括潜在的同事以及一些跨职能的员工,每位面试官拥有 30~45 分钟的时间。做为求职者,你有机会表现你在如下四个不一样领域的优点:

通常认知能力:咱们会问一些开放式的问题来了解你是如何处理和解决问题的。这些问题没有固定的正确答案,咱们更看重解释思考过程的能力以及使用数据来指导决策的能力。

领导力:说明你是如何使用本身的沟通和决策技巧来调动他人的。好比,你是如何在某个组织中晋升到领导职位的?或者在不是正式领导的状况下,你是如何帮助团队取得成功的?

与职位相关的知识:咱们感兴趣的是,你如何将你的我的优点与经验相结合,从而发挥影响力的。咱们关注的不只仅是你如今能作些什么,而是你将来在不一样岗位上的发展潜力。

“谷歌范儿”(Googleyness):你在单独工做或者团队协做时的工做方式?你是如何帮助他人的?你是如何驾驭不肯定性状况的?又如何走出温馨区,让本身成长的?

对于软件工程师候选人,咱们但愿了解你的编程技能和技术领域专业知识,包括编程工具、编程语言、以及数据结构和算法基本知识。在面试过程当中免不了会有一些讨论,由于咱们喜欢互相推进,学习不一样的方法。所以,请你作好要深刻讨论你提出的解决方案的准备。打破本身的边界,找到最优答案。

Google 的技术面采从来用的是白板,但为了节省时间,同时提供更加真实的编程环境,咱们已经开始在一些站点提供 Chromebook,用于编程面试。这些电脑上安装了一个面试程序,你能够选择本身偏好的语言。

在整个面试过程当中,你能够随时让面试官做出解释,确保本身彻底理解面试官的问题。此外,你也能够“采访”咱们,问一些与工做、团队、文化等相关的问题,帮助你决定这份工做是否适合本身。


▌Google 软件工程和技术职位面试

若是你选择的是软件工程相关的岗位,在面试前你最好先掌握如下几个方面的知识:

  • 编程实践:你能够在 CodeLab、Quora、Stack Overflow 等网站上找到一些编程示例。Cracking the Coding Interview 这本书也是一个不错的资源。在某些站点,你能够选择在 Chromebook 或者白板上编程(提早询问招聘人员,这样你能够先行练习)。必定要测试代码,确保代码易于阅读,并且没有 bug。不用过度关注细微的句法错误,好比在给定方法(start, end or start, length)时应该使用哪一种 substring,选择一个,告诉你的面试官便可。

  • 编程:你应该熟练掌握至少一门编程语言,最好是 C++、Java、Python、Go 或者 C。你须要知道 API,面向对象的设计和编程,如何测试代码,以及 corner case 和 edge case。注意,咱们关注的是你对概念的理解而不是记忆。

  • 算法:同时用自下而上的算法和自上而下的算法来处理问题。你须要了解算法的复杂性以及如何改进算法。Google 里经常使用的包括排序算法(加上搜索和二分法检索)、分治算法、动态编程/记忆、贪心算法、递归算法、连接到特定数据结构的算法。了解大 O 符号(Big O notation,好比运行时),并作好讨论 Dijkstra 和 A* 等复杂算法的准备。咱们建议你在写代码以前讨论或概述你所想到的算法。

  • 排序:熟悉经常使用的排序函数以及了解它们对哪些输入数据有效。从运行时(runtime)和内存占用的角度思考效率问题。例如,在特殊状况下,插入排序(insertion-sort)或基数排序(radix-sort )比通常的快速排序/合并排序/堆排序(QuickSort/MergeSort/HeapSort)答案好得多。

  • 数据结构:你应该研究尽量多的数据结构。最经常使用的数据结构有数组、链表、堆栈、队列、哈希集、哈希映射、哈希表、字典、树和二叉树、堆和图( arrays, linked lists, stacks, queues, hash-sets, hash-maps, hash-tables, dictionary, trees and binary trees, heaps and graphs)。你须要完全了解数据结构,以及不一样算法对不一样数据结构的偏好。

  • 数学:有些面试官会问一些基本的离散数学问题,由于咱们常常碰到各类计算问题、几率问题、以及其余的 Discrete Math 101 问题。面试前,你能够花时间复习下(或者自学)基本几率论和组合数学的基本知识。你须要熟悉 n-choose-k 等同类型的问题。

  • 图算法:考虑一个问题是否能够应用图算法,如距离,搜索,链接,循环检测等(distance, search, connectivity, cycle-detection)。熟悉三种基本方法——对象和指针,矩阵和邻接表——的利弊。了解基本的图遍历算法、广度优先搜索和深度优先搜索,以及它们的计算复杂性、优缺点、实现方法。

  • 递归:许多编码问题都涉及递归思考,并且可能还要对递归解决方案进行编码。针对那些可以用迭代解决的问题,你须要找到更简练、更优雅的递归方法。

▌Google AI 职位面试

若是你应聘的是 AI 相关的职位,那么你最好先对 Google 的 AI 有一个全面的了解。

首先,Google AI 文章数量最多的三个领域为:

机器智能 
机器感知 
天然语言处理

其次,下面的内容须要你重点阅读:

TensorFlow:一个大规模机器学习系统 
Google 使用的 AI 工具 
非官方的 Google 数据科学博客

在对 Google AI 有了比较全面的了解后,你就能够看一下这份由众多求职者分享的 Google AI 相关的面试问题了。

  1. 1/x 的导数是什么?
  2. 绘制 log(x+10) 函数的曲线。
  3. 如何设计一个 针对客户满意度的调查?
  4. 投掷一枚硬币 10 次,8次正面和 2 次反面。如何分析掷硬币的公平性?什么是 p-value?
  5. 你有 10 枚硬币,每枚硬币掷 10 次(共 100次),并观察结果,你会修改算法来测试硬掷硬币是否公平吗?
  6. 解释一个非正态分布以及如何应用它?
  7. 为何要使用特征选择?若是两个预测因子高度相关,那么对逻辑回归中的系数有什么影响? 系数的置信区间是多少?
  8. K-Means算法和高斯混合模型:K-Means 算法和 EM 算法之间有什么区别?
  9. 高斯混合模型适用于什么状况?(正态分布)
  10. 若是标签在聚类项目中是已知的,那么如何评估模型的性能?
  11. 对一个 Google 应用程序作了更改以后,如何测试某个指标是提升了仍是下降了?
  12. 描述数据分析的过程。
  13. 为何不使用逻辑回归算法?为何选择 GBM 算法?
  14. 推导 GMM 方程?
  15. 如何衡量用户对视频的喜爱程度?
  16. 模拟一个二元正态分布?
  17. 推导一个分布的方差?
  18. 每一年有多少人申请 Google 帐户?
  19. 如何构建中位数的估计量?
  20. 若是回归模型中的两个系数估计值都具备统计显著性,那么你是否定为二者的测试依然重要?
  21. ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------