感谢博客:https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/79901364
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/60ca1ab3de1af957a6165d13dddd8cca.png)
作者 | 阿司匹林
出品 | 人工智能头条(公众号ID:AI_Thinker)
凭借强大的技术实力和良好的工作氛围,Google 对求职者一直有着强大吸引力。
虽然 Google 在几年前就已经退出了中国大陆市场,但是在北京、上海等国内城市依然保留着办公地点,而且一直在对外发布招聘需求。特别是去年底,Google 宣布在北京成立 AI 中心,更是为中国的 AI 人才提供了又一个好去处。
为此,我们整理一份 Google 面试指南,并搜集了 20 道 Google AI 的面试问题,希望对感兴趣的读者能有所助益。
当然,如果你想申请国外的 Google 岗位,这份资料也同样适用。
▌Google 面试方式
首先,Google 为求职者提供两种面试方式,一种是电话面试或者通过 Google Hangout 进行面试,一种是现场面试,面试方式视情况而定。
电话面试
在电话面试或者 Google Hangout 面试中,面试官将会是你潜在的同事或者经理。
如果你面试的是软件工程岗位,那么面试时间将持续 30~60 分钟。在回答编程问题时,你需要一边在 Google Doc 里面写代码,一边告诉面试官你的思考过程。我们建议你使用免提耳机或者扬声器,以便腾出手来打字。
电话面试的内容包含数据结构和算法,你需要做好准备,用你最擅长的语言编写 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/x 的导数是什么?
- 绘制 log(x+10) 函数的曲线。
- 如何设计一个 针对客户满意度的调查?
- 投掷一枚硬币 10 次,8次正面和 2 次反面。如何分析掷硬币的公平性?什么是 p-value?
- 你有 10 枚硬币,每枚硬币掷 10 次(共 100次),并观察结果,你会修改算法来测试硬掷硬币是否公平吗?
- 解释一个非正态分布以及如何应用它?
- 为什么要使用特征选择?如果两个预测因子高度相关,那么对逻辑回归中的系数有什么影响? 系数的置信区间是多少?
- K-Means算法和高斯混合模型:K-Means 算法和 EM 算法之间有什么区别?
- 高斯混合模型适用于什么情况?(正态分布)
- 如果标签在聚类项目中是已知的,那么如何评估模型的性能?
- 对一个 Google 应用程序做了更改之后,如何测试某个指标是提高了还是降低了?
- 描述数据分析的过程。
- 为什么不使用逻辑回归算法?为什么选择 GBM 算法?
- 推导 GMM 方程?
- 如何衡量用户对视频的喜好程度?
- 模拟一个二元正态分布?
- 推导一个分布的方差?
- 每年有多少人申请 Google 账户?
- 如何构建中位数的估计量?
- 如果回归模型中的两个系数估计值都具有统计显著性,那么你是否认为两者的测试依然重要?
最后,欢迎大家在评论区分享自己的答案以及面试经验。
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/60ca1ab3de1af957a6165d13dddd8cca.png)
作者 | 阿司匹林
出品 | 人工智能头条(公众号ID:AI_Thinker)
凭借强大的技术实力和良好的工作氛围,Google 对求职者一直有着强大吸引力。
虽然 Google 在几年前就已经退出了中国大陆市场,但是在北京、上海等国内城市依然保留着办公地点,而且一直在对外发布招聘需求。特别是去年底,Google 宣布在北京成立 AI 中心,更是为中国的 AI 人才提供了又一个好去处。
为此,我们整理一份 Google 面试指南,并搜集了 20 道 Google AI 的面试问题,希望对感兴趣的读者能有所助益。
当然,如果你想申请国外的 Google 岗位,这份资料也同样适用。
▌Google 面试方式
首先,Google 为求职者提供两种面试方式,一种是电话面试或者通过 Google Hangout 进行面试,一种是现场面试,面试方式视情况而定。
电话面试
在电话面试或者 Google Hangout 面试中,面试官将会是你潜在的同事或者经理。
如果你面试的是软件工程岗位,那么面试时间将持续 30~60 分钟。在回答编程问题时,你需要一边在 Google Doc 里面写代码,一边告诉面试官你的思考过程。我们建议你使用免提耳机或者扬声器,以便腾出手来打字。
电话面试的内容包含数据结构和算法,你需要做好准备,用你最擅长的语言编写 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/x 的导数是什么?
- 绘制 log(x+10) 函数的曲线。
- 如何设计一个 针对客户满意度的调查?
- 投掷一枚硬币 10 次,8次正面和 2 次反面。如何分析掷硬币的公平性?什么是 p-value?
- 你有 10 枚硬币,每枚硬币掷 10 次(共 100次),并观察结果,你会修改算法来测试硬掷硬币是否公平吗?
- 解释一个非正态分布以及如何应用它?
- 为什么要使用特征选择?如果两个预测因子高度相关,那么对逻辑回归中的系数有什么影响? 系数的置信区间是多少?
- K-Means算法和高斯混合模型:K-Means 算法和 EM 算法之间有什么区别?
- 高斯混合模型适用于什么情况?(正态分布)
- 如果标签在聚类项目中是已知的,那么如何评估模型的性能?
- 对一个 Google 应用程序做了更改之后,如何测试某个指标是提高了还是降低了?
- 描述数据分析的过程。
- 为什么不使用逻辑回归算法?为什么选择 GBM 算法?
- 推导 GMM 方程?
- 如何衡量用户对视频的喜好程度?
- 模拟一个二元正态分布?
- 推导一个分布的方差?
- 每年有多少人申请 Google 账户?
- 如何构建中位数的估计量?
- 如果回归模型中的两个系数估计值都具有统计显著性,那么你是否认为两者的测试依然重要?
最后,欢迎大家在评论区分享自己的答案以及面试经验。