雷锋网按:本文为雷锋字幕组编译的技术博客,原标题 What I learned from interviewing at multiple AI companies and start-ups,作者为 Aman Dalmia。
翻译 | 付腾 杜建忠 整理 | 凡江
在过去的 8 年里,我一直在招聘数据科学家,软件工程师或者研发工程师的各种公司(如:Google 的 DeepMind,Wadhwani Institute of AI,Microsoft,Ola,Fractal Analytics 等)进行面试。在这一过程中,我不仅可以有机会与许多伟大的思想者交流,也能够自我反思:面试官到底在寻找什么样的人才。我相信,如果我以前知道这些知识和经验,我可以更好地准备面试以避免很多错误。这是本文的初衷,即:帮助大家得到理想工作的 offer。
毕竟,如果我们一天要用 2/3 的时间工作,它最好值得我们付出这么多精力。
在本文的创作之前,我和我的一位手下探讨了一个现象:通过校园招聘得到 AI 行业的真正令人满意的工作机会非常少。并且,在本文的准备阶段,我发现人们在找工作的过程中使用了大量的资源,但是从我过去几个月的经验来看,对大部分 AI 类的工作,人们可以用少量的工作去准备,这一点我将在本文的最后谈到。本文将首先介绍如何在简历筛选中吸引注意,然后提供一些可以申请的公司和初创企业,接下来谈到如何在面试中获胜。结合我的经验,我增加一部分,来讨论什么样的公司才是我们的奋斗目标。最后,我给出了准备阶段需要使用的最低资源。
注:对那些坐等校园招聘的同学来说,我想附加两点建议:首先,除了本文的最后一点,本文的大部分内容可能对你的帮助不大;然而,第二点,正如我之前提到的,校园招聘的工作机会基本上都是软件工程师,与 AI 的关联很少。所以,本文的目标对象是那些希望从事 AI 类工作的申请者。此外,需要补充的是,我无法总结所有面试经验,但我认为本文包括了面试失利的本质问题,这正是最好的老师!我在此提到的并非都有用,但是这些都是我曾犯过的错误,我不知道还有其他方式可以使本文更加有说服力。
1. 如何在简历筛选中吸引注意
说实话,这是最重要的一步。社会招聘之所以艰难费力是因为你要让你的简历在一堆简历中脱颖而出。通过公司内部员工的引荐将会让这一步变得非常容易,然而一般来说,这一步可以分为三个关键的小步骤:
a)把常规性的准备工作做好。常规性的准备工作是指:LinkedIn 个人资料,Github 个人资料,作品在线展示的网页和一个润色好的简历。首先,你的简历应该真正的简洁精练。可以通过 Udacity 上的 Resume Revamp 课程美化你的简历。课程包括了所有我想表达的注意事项,我一直以此作为我的参考。至于简历的模板,Overleaf 上有一些内建的格式十分不错。个人的话,我使用 deedy-resume。下面是一个简历的预览:
如上所示,一页纸可以容纳很多内容。但是,如果您真的需要更多内容,那么直接使用上面链接的格式模板将不会有效。相反,您可以在 https://latexresu.me/ 找到一个修改后的多页面格式模板。接下来最重要的是你的 Github 个人资料。很多人低估了这一资料的潜在价值,这仅仅因为 Github 与 LinkedIn 不同,它没有「谁看过你的资料」这一选项。但是,招聘人员确实会查阅你的 Github 资料,因为这是他们验证你简历内容真实性的唯一方法,尤其是当下,人们会在他们的个人资料使用各种流行语,这会使招聘人员很难做出正确的判断。特别是对于数据科学而言,开源在大多数编程工具的使用,各种算法的程序实现,学习资源列表等方面都扮演着重要的角色。在早期帖子 https://medium.com/@amandalmia18/the-world-of-open-source-8f516c674647中,我讨论了参与开源的好处,以及如何从头开始学习它。综上所述,目前,准备的最低要求应该是:
如果您还没有 Github 帐户,请创建一个 Github 帐户。
为您已完成的每个项目创建一个存储库。
对如何运行项目中的代码增加清晰的解释文档
(可选)为每个文件添加解释文档,说明每个函数的作用,每个参数的含义,适当的运行格式(例如 Python 的 PEP8)以及用于自动执行上述步骤的脚本。
接下来,第三步,一个在线作品个人网页用来展示工作经验和个人项目经历,这是大多数人所缺少的。制作一个作品展示个人网页可以表明你希望从事此领域工作的认真态度,并可以为你的简历的真实性加很多分。另外,由于页数限制,你的简历往往会省略很多细节。只要你愿意,你可以通过在线作品个人网页深入探究相关细节,强烈建议个人网页能够通过某种方式实现可视化演示你的项目/想法。创建一个在线作品个人网页真的很容易,https://medium.com/@tristaljing/top-10-free-online-portfolio-websites-to-create-perfect-ux-ui-design-portfolios-7d99888ab9 列出了很多免费的平台。通过简单的拖放功能,制作个人网页的过程将变得非常轻松。我个人使用 Weebly。这是一个广泛使用的工具。一开始使用的时候最好参考相关经验。目前已经有很多很棒的攻略,在制作我的个人网页 http://amandalmia.weebly.com/时,我参考了 http://deshraj.xyz/。
最后要注意的是,现在很多招聘人员和初创公司开始使用 LinkedIn 作为他们的招聘平台。很多好工作都在那里贴了出来。除招聘人员外,那些在重要岗位上工作的人在 LinkedIn 也非常活跃。所以,如果你能吸引他们的注意力,你将有很好的机会得到一份理想的相关工作。除此之外,保持个人资料的简洁性对于有意与你建立联系的人们是必要的。LinkedIn 的一个重要功能是他们的搜索工具。为了让您可以被及时搜索到,您必须在您的个人资料中加入相关的关键字(https://www.job-hunt.org/linkedin-job-search/linkedin-keywords.shtml)。当时,我在更新并重新评估个人资料方面花了很多时间,才终于有一个得体有效的个人简历。此外,您一定要请求您的同事或领导在 LinkedIn 上正式认可您的技能,并谈论一下他们与您合作的经历。所有这些都会增加您在简历筛选中真正获得注意的机会。Udacity 的 https://career-resource-center.udacity.com/linkedin-github-profiles可以更详细帮助您配置 LinkedIn 和 Github 个人资料。
所有这些工作可能看起来很多,但请记住,您不需要在一天、一星期或一个月内完成。这是一个不断完善的过程。一开始设置好所有内容肯定会花费一些努力,但是这些内容一旦设置好,你只需要随着阅历的丰富而不断更新它。届时,你不仅会发现它很容易,而且你还可以随时随地介绍你自己,无需事先做好准备,因为您对自己非常了解。
b)做好自己:我发现很多人犯这种错误:为不同的工作使用不同的简历。在我看来,您在寻找工作机会之前,最好先决定真正感兴趣的工作是什么,你做什么事情会感到开心,而不是相反。AI 人才的需求量超过供应量,这使您不必盲目确定工作。在进行上述常规性准备时,您可以对自己有一个全面的了解,这会有助于您做出工作决定。此外,您不需要提前准备好在面试时可能被问到的所有问题。因为当你在谈论真正关心的事情时,大多数问题的答案会自己出现在你的脑子里。
c)社交网络:一旦你完成了步骤 a)和步骤 b),社交网络能真正帮助你找到好工作。如果你不和人交谈,你会错过很多你可以发挥很好的机会。每天都结识新人是非常重要的。如果不是面对面交流,那么在 LinkedIn 上也可以。这样坚持多天后,你就拥有了一个庞大而强大的社交网络。社交网络不是为了让你认识的人为你做内推。在我开始找工作的时候,我经常犯这种错误,直到我偶然看到马克梅隆(Mark Meloon)的这篇优秀文章(https://www.markmeloon.com/climbing-relationship-ladder-get-data-science-job/),他谈到:建立人与人之间真正的关系,首先主动帮助他人是十分重要的。社交网络中的另一个重要步骤是分享您的消息。例如,如果你擅长某事,就可以在 Facebook 和 LinkedIn 上分享相关博客的链接。这不仅可以帮助他人,还可以帮助你。一旦你有足够好的社交网络,你的影响力就会成倍增加。你永远不知道,社交网络中的某个人通过对你的帖子进行点赞或评论,可能会帮助你接触更广泛的受众群体,其中可能包括正在寻找符合你专业经验的招聘人员。
2. 可以申请的公司和初创企业名单
为避免误解,此列表按字母顺序。但是,我会在个人推荐的工作机会上加「*」符号。这样推荐是基于以下几个方面的考虑:工作任务,人员,同事间互动和学习范围。超过 1 个「*」完全是因为有第二个或者第三个推荐原因。
Adobe Research
*AllinCall—(由印度理工学院 Bombay 分校的校友创建)
*Amazon
Arya.ai
*Facebook AI Research:智能家居项目
*Fractal Analytics (also acquired:Cuddle.ai,**Qure.ai)
**Google (Brain / DeepMind / X):智能家居项目
Goldman Sachs
Haptik.ai
**HyperVerge—由印度理工学院 Madras 分校的校友创建,他们正致力于来自全球的客户的实际问题开发 AI 解决方案。创始人包括印度理工学院 Madras 分校著名的计算机视觉项目的创始人员。
IBM Research
*Intel AI labs (Reinforcement Learning)
**Jasmine.ai—创始人是印度理工学院 Madras 分校的校友,他获得了美国密歇根大学的博士学位。这家公司致力于语言智能,资金雄厚,诚邀英才尽快加入他们的 Bangalore 公司。
JP Morgan
*Microsoft Research:
- 在印度实验室 1 到 2 年的实习期
- 智能家居项目
MuSigma
Next Education
niki.ai
*Niramai—创始人之前在 Xerox Research 工作,目前致力于研究通过热成像实现对乳腺癌的早期发现。
Ola
*OpenAI
*PathAI
Predible Health
Qualcomm
*SalesForce
Samsung Research
*SigTuple
*Suki—为医生提供 AI 驱动的语音助手。最近,它也筹集到了大量资金,并可能即将在印度设立办事处。
*Swayatt Robotics—致力于为印度开发自动驾驶汽车。
**Wadhwani AI—受亿万富翁 Romesh Wadhwani 和 Sunil Wadhwani 资助, 他们的目标是成为第一个致力于 AI 社会福利的组织
*Uber AI Labs & Advanced Technologies Group: 智能家居项目
*Umbo CV—基于计算机视觉的信息安全
Uncanny Vision
Zendrive
注意:这些只是我所知道的公司,如有遗漏,请提醒我,我会更新这个列表。
附上一些其他的公司参考链接:
3. 如何在面试中崭露头角
你的面试从你走进房间的时候就开始了。到自我介绍之前就可能会发生很多事,诸如肢体语言,微笑和对面试官问候等等,都起着很大的作用。尤其是当你在面对初创公司的面试时,公司非常一点,那就是你是否和公司文化是否契合。有一点你也要理解,面试官对于你来说是陌生人,但对于他(她)来说,你也是陌生人。所以,就紧张程度来说,他们可能和你一样。
将把面试尽量作为你和面试官之间的对话是非常重要的。你们俩都在寻找双方的契合点,你在寻找一个优秀的公司,而面试官也在寻找一个优秀的同事(比如你)。所以,你要对自己有信心,同时保证双方的开场对话轻松愉快。我所知道的最简单有效的办法就是微笑。
面试主要有两种类型:第一种是面试官已经准备了一些列的问题来面试,这些问题都是必问的,与你的个人资料无关;另一种则是基于你的简历。我从第二种面试开始。
第二种面试通常是从「可以介绍你自己吗?」这个问题开始。在这一点上,有两个要注意的地方:第一,谈论你在大学的 GPA,第二,太过详细介绍自己的过往项目。好的回答应该在一两分钟之内,简明扼要的介绍你做过些什么,内容可以不限于学术。比如你的个人爱好,如读书、运动、冥想等等,主要是能帮别人对你有个大概印象。然后面试官会把你在自我介绍里的某些东西作为下一个问题的开头,进入技术方面的面试。这种面试的目的是检验简历的真实性:
一个真正解决过某个具体问题的人都能够回答关于这个问题的各个方方面面。他们能够深入问题的核心,不然问题不可能解决——Elon Musk
很多相关问题会被提及,尤其是关于可以采取的解决方法的选择,例如是否可以用 X 代替 Y,可能会出现何种情况等等。在这一点上,权衡很重要,一定要充分了解具体的实际情况。例如,面试官可能说使用更复杂的模型会获得更好的结果,那么你可以指出在实际情况下,因为获得的数据较少,反而会导致模型过拟合。在一次面试中,面试官让我做一个案例分析,具体内容是为一个实际场景设计算法。我注意到,如果我以下面的流程来展开讨论的话,面试官会非常喜欢:
问题是什么?> 1 至 2 个已有的解决方案 > 基于公司情况的解决方案 > 可能的结果 > 从直觉上可行性
另外一种面试只是为了测试基本知识。问题应该不会太难,但肯定会涉及必须掌握的基本知识。主要基于线性代数、概率、统计、优化、机器学习和深度学习。需要准备的背景知识 一节中提到的资源足够全面,但一定不要遗漏任何一点。这里要注意的是回答这些问题所花的时间。因为这些问题包含了基础知识,所以面试官希望你能够迅速给出答案。所以,根据自己的实际情况做好准备。
在整个问答过程中,一定要对你知道和不知道的知识保持自信和诚实,这很重要。对于确定不知道的问题,直接说不知道,不要故作思考。如果某个概念真的很重要,但是你觉得很难表达,这时候面试官通常会给你提示,或者一些指导,来让你找到正确的解决方案(取决于面试开始阶段你的表现)。正确理解面试官的提示并且找到正确的解决方案是一个很大的加分项。尽量不要紧张,而最佳方法也是 微笑。
现在来到面试结尾,通常来说,面试者会问你是否有什么问题。这时候你可能认为面试结束了,回答说没有问题。据我所知,很多人就是因为这最后一个问题被拒。之前提到过,你和面试官其实是在互相面试。你和公司双方都在寻找契合点。从这点来说,很明显,如果你真的想加入公司,你肯定想搞清楚诸如公司文化,或者公司对你的角色安排等等,甚至是面试官个人感到好奇。,一定要确保给面试官留下你对公司团队很感兴趣的印象,而且你乐于从身边的事物中学习新知识。一般来说,我对面试者提出的最后一个问题是:反馈意见,就是他们觉得我可以从那些方面得到提升。这些反馈意见给了我巨大的帮助,我仍然记得每一条反馈意见,而且我在日常工作中贯彻它们。(译者注:最后的问题不要太多,三个为限,最后的 feedback 很重要,一定要用心记下。)
结束了!根据我的经验,如果你足够坦诚,有能力胜任相关工作,能真正从面试公司的角度出发看问题,具备契合的思维模式,那么你应该在各项上都达标,很快就能收到 offer 了!?
4. 努力工作的源头是什么
我们身处一个充满机会的时代,有机会做任何自己想做的事情。只要你想努力成为某个领域最优秀的人,你就能找到走向巅峰的路。Gary Vaynerchuk 说过:别对自己讨厌的东西妥协。
这是一个对 AI 来说伟大的时代。如果你真的对 AI 充满激情,你可以做许许多多跟 AI 相关的工作。你可以给那些被低估的人以助力。不要一直抱怨身边的小事,因为从来没有一个时代像现在这样,能让我们这样普通人也可以做出真正的贡献,而不仅仅是抱怨。正如 Jeffrey Hammerbacher 的名言:
我们这一代人中的翘楚都在拼命思考如何吸引人点击广告。这太糟了。
我们可以利用 AI 做的事情远超我们的想象。有很多非常难的挑战,需要极有才华的人来脚踏实地的解决,比如你。你可以让许多人的生活变得更美好。放弃「酷」的,或者是「看起来不错」的事情,认真思考,谨慎抉择。
5. 必须知道的背景知识准备
关于数据科学面试中会出现的问题大部分都可以归类为以下四类:计算机科学,数学,统计学和机器学习。
计算机科学
算法和数据结构
- InterviewBit (Practise)
- 油管上NPTEL IIT Delhi 的 lectures
操作系统
- Operating System Concepts 这本书的第3,4,5,7章。
-GeeksForGeeks 的操作系统
面向对象编程:你肯定会被问及系统设计的问题,例如铁路售票系统。你首先要和面试者讨论他们的需求,需要哪些类型的类,每个类具体应该包含哪些变量/方法,如何使用类继承(如 Engineer 和 Scientist 类都是 Employee 类派生的)等等。实践出真知,你可以在这里找到一些基本术语的解释。
数学和统计
如果你对于深度学习背后的数学机理不是很清楚,那你可以考虑看看我之前的 blog 提供的资源,应该能帮助你理解。如果你对自己的数学有信心,那我觉得 Ian Goodfellow 大神的花书的第二,三和四章应该足够你应付一般面试中的理论性问题。我正在准备对花书的一些章节做总结,这些都是我曾经觉得比较难理解的概念,现在我试图对它们进行解释,希望这样对你有些帮助,让你事半功倍。如果你已经完成了概率论的课程,你应该也能回答一些相关的问题。关于统计,通读这些方面应该就够了。
机器学习
在这一部分,问题的范围则完全取决于具体面试的工作岗位。如果是传统的机器学习类的面试,那么机器学习的基础知识就是重点,那就需要完成下面的课程:
- Machine Learning by Andrew Ng — CS229
- Machine Learning course by Caltech Professor Yaser Abu-Mostafa
重要的领域包括:监督学习(分类、回归、支持向量机、决策树、随机森林、逻辑回归、多层感知机、参数估计、贝叶斯决策规则),无监督学习(K-means 聚类、高斯混合模型),降维(PCA)。(译者注:在每个大类中,最好能精通至少一个算法,推荐 SVM 和高斯混合模型,因为涉及了 kernel 和 EM 算法,能让你对 ML 有比较好的理解)
如果申请的职位比较高级,那很可能会被问到有关深度学习的知识。如果是这种情况,你需要非常了解卷积神经网络(CNNs)和循环神经网络(RNNs)及其变体。想要明白这些,你就要对对深度学习的基础知识有所了解,比如 CNNs/RNNs 是如何工作的,目前存在哪些主流架构,以及这些改进的架构的动机都是什么。
在这一方面,我们没有捷径。无论花多少时间,都要吃透这些知识。对于 CNNs,我推荐斯坦福大学的 CS231N 课程(http://www.mooc.ai/course/268),RNNs 我推荐 CS224N 课程(http://www.mooc.ai/course/494)。Hugo Larochelle 的神经网络课程(http://www.mooc.ai/course/300)很有启发,适合新手上路。现在你应该发现 Udacity 是一个很适合 ML 从业者的地方。在印度没有多少强化学习 RL 的应用场所,而我个人也不是对 RL 很在行。所以,我会找机会以后再加进来。
6. 结论
离开大学之后的职业生涯是一个自我实现的漫长过程。我知道这是一篇不短的博客,但是我再次非常感谢你能认同并且重视我的想法。希望这篇文章能给你带来一些启发,并帮助你以更好的方式为下一次数据科学面试做好准备。如果它真的帮助你拿到了 offer,我希望你能切实的思考一下我提到的:我们努力工作的源头是什么?
7. 鸣谢
我十分感谢来自 IIT Guwahati 的朋友,因为他们提供了有用的反馈,特别是 Ameya Godbole, Kothapalli Vignesh 和 Prabal Jain. 我提到的很多的技巧比如「视面试为交谈」和「从面试官那里获取反馈」等等都是我和 Prabal 多次讨论的结果,Prabal 也是经常对我提点让我能不停的提升我的面试技巧。
你想要的未来一定是你希望事情越来越好,而不是越来越糟。
—Elon Musk
找工作很多时候不是个让人愉快的过程,但是要相信自己,时刻准备着,不断的磨练自己,这个世界总有你的位置。
雷锋网雷锋网