想去Google做AI?先看完这套面试指南(附面试题)

2024-04-12 20:08

本文主要是介绍想去Google做AI?先看完这套面试指南(附面试题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

640?wx_fmt=gif&wxfrom=5&wx_lazy=1

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1


作者 | 阿司匹林

出品 | 人工智能头条(公众号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 文章数量最多的三个领域为:


机器智能:

https://research.google.com/pubs/MachineIntelligence.html


机器感知:

https://research.google.com/pubs/MachinePerception.html


自然语言处理:

https://research.google.com/pubs/NaturalLanguageProcessing.html


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


TensorFlow:一个大规模机器学习系统

https://arxiv.org/pdf/1605.08695v2.pdf


Google 使用的 AI 工具

https://ai.google/tools/


非官方的 Google 数据科学博客

http://www.unofficialgoogledatascience.com/


在对 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://careers.google.com

640?wx_fmt=jpeg

640?wx_fmt=gif

640?wx_fmt=jpeg


点击下方“阅读原文”了解【人工智能实验平台】 ↓↓↓

这篇关于想去Google做AI?先看完这套面试指南(附面试题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/898109

相关文章

SpringBoot整合OpenFeign的完整指南

《SpringBoot整合OpenFeign的完整指南》OpenFeign是由Netflix开发的一个声明式Web服务客户端,它使得编写HTTP客户端变得更加简单,本文为大家介绍了SpringBoot... 目录什么是OpenFeign环境准备创建 Spring Boot 项目添加依赖启用 OpenFeig

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

CentOS7更改默认SSH端口与配置指南

《CentOS7更改默认SSH端口与配置指南》SSH是Linux服务器远程管理的核心工具,其默认监听端口为22,由于端口22众所周知,这也使得服务器容易受到自动化扫描和暴力破解攻击,本文将系统性地介绍... 目录引言为什么要更改 SSH 默认端口?步骤详解:如何更改 Centos 7 的 SSH 默认端口1

SpringBoot多数据源配置完整指南

《SpringBoot多数据源配置完整指南》在复杂的企业应用中,经常需要连接多个数据库,SpringBoot提供了灵活的多数据源配置方式,以下是详细的实现方案,需要的朋友可以参考下... 目录一、基础多数据源配置1. 添加依赖2. 配置多个数据源3. 配置数据源Bean二、JPA多数据源配置1. 配置主数据

python中各种常见文件的读写操作与类型转换详细指南

《python中各种常见文件的读写操作与类型转换详细指南》这篇文章主要为大家详细介绍了python中各种常见文件(txt,xls,csv,sql,二进制文件)的读写操作与类型转换,感兴趣的小伙伴可以跟... 目录1.文件txt读写标准用法1.1写入文件1.2读取文件2. 二进制文件读取3. 大文件读取3.1

SpringBoot中配置Redis连接池的完整指南

《SpringBoot中配置Redis连接池的完整指南》这篇文章主要为大家详细介绍了SpringBoot中配置Redis连接池的完整指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以... 目录一、添加依赖二、配置 Redis 连接池三、测试 Redis 操作四、完整示例代码(一)pom.

Linux内核参数配置与验证详细指南

《Linux内核参数配置与验证详细指南》在Linux系统运维和性能优化中,内核参数(sysctl)的配置至关重要,本文主要来聊聊如何配置与验证这些Linux内核参数,希望对大家有一定的帮助... 目录1. 引言2. 内核参数的作用3. 如何设置内核参数3.1 临时设置(重启失效)3.2 永久设置(重启仍生效

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

Python列表去重的4种核心方法与实战指南详解

《Python列表去重的4种核心方法与实战指南详解》在Python开发中,处理列表数据时经常需要去除重复元素,本文将详细介绍4种最实用的列表去重方法,有需要的小伙伴可以根据自己的需要进行选择... 目录方法1:集合(set)去重法(最快速)方法2:顺序遍历法(保持顺序)方法3:副本删除法(原地修改)方法4:

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖