点击“小詹学Python”,“星标”或"置顶"

关键时刻,第一时间送达

本文转载自“机器之心

本文作者刚刚博士毕业,在 NIPS、ICML、ICLR 等各大深度学习顶会上都发表过论文,其论文引用量在 500~1500 之间。他花了半年的时间面试了许多大的跨国公司,而且多数都拿到了 offer。在这份「面经」中,他讲述了自己拿到高薪 offer 的秘诀:让给出 offer 的公司「竞标」……

面试必读

根据我的经验,几乎所有与面试软件工程职位相关的经验都适用于机器学习研究职位,因为这些职位都出自同样一批公司。在开始面试之前,我强烈推荐大家阅读以下几篇关于如何谈薪资的博客:

  • https://www.kalzumeus.com/2012/01/23/salary-negotiation/

  • https://medium.freecodecamp.org/ten-rules-for-negotiating-a-job-offer-ee17cccbdab6

  • https://medium.freecodecamp.org/how-not-to-bomb-your-offer-negotiation-c46bb9bc7dea

重要资料读三遍:面试前一遍;谈薪资前一遍;谈薪期间再读一遍。

公司

我只面试过全球大公司的产业研究实验室职位,没有面过初创企业或更小的公司。而且我面试的区域仅限于欧洲,其他地方的薪资、福利可能存在差别。

欧洲有很多大公司招聘 AI 科学家:亚马逊在柏林有一个深度学习研究实验室;苹果在巴黎有深度学习职位;谷歌大脑在阿姆斯特丹、柏林、巴黎、苏黎世都有实验室;Facebook AI 研究院和 DeepMind 在伦敦和巴黎都提供职位……微软、英伟达、Twitter、Uber 等公司在欧洲也有不少 ML 职位。

除此之外,应用领域也有很多有趣的职位,如自动驾驶(大众/奥迪在慕尼黑有实验室)、新药研发(生物科技「独角兽」Benevolent AI 位于伦敦,默克、强生、阿斯利康等公司也都在寻找 ML 人才)、金融(Citadel 和 Jane Street 等在伦敦都有办公室)。

参加学术会议时逛一下招聘区域也能发现一些大公司有趣的研究职位,如彭博社(伦敦)、博世(斯图加特)、迪士尼研究院(苏黎世)。

虽然有一些心仪的公司,但我还是尽可能多申请了几家:如果手里没有颇具竞争力的 offer,你在薪资谈判中就会处于严重的劣势。面试练习也的确给了我很大的帮助。

我第一次面试时的肾上腺素水平堪比在 3000 人注视下演讲,但最后一次就像是午餐时和同事聊天。当然,你的确会毁掉一些面试,你和面试官都有可能心情不好,或者你被问到自己的知识盲点,抑或那个职位不合你的胃口或者其他地方出什么严重问题。

比如,不知道什么原因,英伟达在约好的视频面试时间放了我鸽子,后来也没理会我发的那些邮件,弄得我一头雾水。所以,不要把鸡蛋放在一个篮子里。

然而,多面一些公司还是很有好处的:我了解的公司更多了。居然有那么多不错的工作我都没有考虑过!一些最有趣的职位(以及最好的 offer)来自我最初没有考虑过的公司。

事实证明,我的一些「安全选择」真的非常适合我。虽然大家的情况可能不太一样,但我还是建议多去和一些团队聊聊他们的项目和愿景,你会觉得深受启发。

上面列出的公司或欧洲实验室有一半是我投过简历的,研究科学家和研究工程师的职位都有,而且多数都给了我 offer。我找工作花了挺长时间(从投出第一份简历到接受 offer 大约有半年时间),但我也是精疲力尽:那几个月我基本都是在机场、酒店、面试间度过的,不断接电话、和 HR 谈薪资。

不要指望在这个时期做什么工作。正如一个同事所说:「你的头脑总是被那些招聘反馈占满,没有多余的精力去想 ICML。」但我也收获颇丰:我学到了很多东西,吸收了很多新的观点,也谈到了更高的薪水,如果我接受了第一份「心仪的工作」offer,我的薪水会比现在低得多。

面试过程

所有公司的面试过程都非常相似,在收到简历后,公司会先邀请我做一个简单的筛选,看看我是不是一个合格的候选人。通常这种筛选会采用一两个电话面试,且每个面试大概一小时左右。

然后,我经常受邀进行现场面试,这一般是在公司办公室内,与多个专业人员进行一整天的面谈,这个时候我通常会介绍我的博士研究。

随后是每次约 1 小时的个人访谈,访谈的对象是我面试团队的其它成员,或者是其它团队的研究者或工程师。通常情况下,我在每次面试中都会遇到很多不同的人,因此基本上一天下来我能了解到该团队的大部分成员。

几乎所有的面试官都会抽时间询问职位、团队或公司的相关问题,我喜欢询问工作与生活的平衡、工作的难点或他们对工作不太喜欢的地方,大多数人都会诚实坦率地回答这些问题,这会展示未来工作一些尖锐的问题所在。

他们可能会告诉我「也许你在第二年或第三年才能将工作时长减少到 60h / week」、「办公室真的很棒,你会爱上这里」等等。

也有一些研究员对自己的研究成果非常兴奋,从而忘了问我相关的技术问题,他们会将目前的突破及相关概念一股脑地介绍给我。这些都是了解公司和职位的好机会,绝对值得花时间问一些好问题。

面试类型

我曾多次遇到几种不同类型的面试。其中一些面试(如编程或行为面试)准备起来很容易,而另一些则几乎无法提前准备。

所有公司都会有不同的组合面试:一些公司给我发 offer,却不曾核查我是否可以编程(不问编程问题),同时其他公司从不核查我是否了解期望值是什么(不问数学问题)。

一些公司会更多地问我理论问题,而另一些公司更多地问我实际问题;但大多数公司会同时询问理论和实际问题。一般来说,面试人员通常会在我感到困扰时给予提示。

我认为面试人员常常故意不具体说明一些问题,就是想要看看我的反应,并且愿意提供帮助或与我讨论细节。这种面试从不像是一种对抗过程,而更像是同事之间的讨论。

1.「谈谈你的研究」

很多面试只是要求我谈一下过去的论文。面试官通常会从简历中挑选一篇论文,然后让我就此谈一谈。他们有时也会让我选择一个自己愿意谈论的项目。

一些面试官仅仅会问一些浅显的问题,而另一些会深入了解(「你在定理 3 中假设了异方差性(heteroscedasticity),但通篇没有进行验证。你为什么认为这是一个有效假设,它的蕴含是什么呢?」)。

但是,我与面试官从未上升到「数学深度」的讨论:在与他人合著的论文中,有一两个微妙的论证,而这是我害怕提及的;但幸运的是,所有面试官像我一样害怕讨论这些内容。我通常被问及自己是第一作者的论文,但面试官也不介意我讨论与他人合著的论文。

2. 编程面试

谷歌或 Facebook 的典型软件工程面试非常有名:你需要想出实际的方案来解决有关算法性质的一些难题。通常使用你自己选择的编程语言,如 C++或 Python。

每个问题需要反复讨论:首先,你想出一个简单的解决方案并付诸实践,然后面试官提出一些附加限制或者要求你提供另一种更有效的解决方案。之后,面试官通常希望我讨论一下时间或内存复杂性,或者讨论实现中的潜在测试用例。

很多时候,面试官会与我就同一问题进入深度探讨阶段。然后,面试官承认他们自己也不知道如何解决最后一个问题,只是想看一看我是否可以想出一些解决方法,或者我如何就无法解决的问题做出回应。

我发现这些面试准备起来是最容易的:浏览一些诸如 Princton's Algorithms(第一、二部分)的内容以及在 leetcode.com 上做一些习题就足够了。

3. 机器学习面试

一些面试只测试机器学习常识。这些面试也会包含大学正规机器学习课程所讲的内容。这类面试通常分两部分进行。

第一部分是机器学习的常识问题:你如何正则化一个深度网络?随机森林训练中如何提高效率?当预测速度较准确率更重要时,两种合适的分类算法是什么?你如何根据内容对文档进行语义分组?你能谈一下高斯混合模型和 k-means 聚类算法的联系吗?

第二部分通常会包含「机器学习编码」,这时我必须实现一些标准机器学习算法。例如,我记得实现决策树的推理/剪枝、k-means 和 k-NN。面试官通常给我 30-45 分钟来实现这些(并再次讨论效率或者可能的测试用例)。

4.「我们有这个问题...」

在一些面试中,面试官只告诉我他们当前正在进行的项目,然后问我如何解决。

比如:「我们试图找出视频数据库中的重复视频」、「我们需要根据一些模糊指定的标准对数百万的实体进行排序,并以亚秒级(sub-second)延迟来实现」、「我们的标签数据很少,同时想要使用 GAN 来扩大数据集,哪种方法最好呢?」...

这类面试确实没有很好的方式去准备,但我认为面试官主要是想了解我的思维过程。所以,这类面试并不是想出完美的算法就可以了,更多地是进行头脑风暴或讨论权衡利弊,即使你连最初设想都没有。

5. 行为面试

每当我被告知将被某位 HR 面试时,随之而来的几乎总是行为面试(Behavioral Interview)。幸运的是,问题也几乎总是一样的,所以你可以提前做好准备。有个公司甚至给我发了一本关于他们公司价值观的小册子,并告诉我面试中会问我如何在生活中反映这些价值观。

只要用谷歌搜索一下「行为面试」,你就可以找到很多相关资源。总之,这种面试我遇到的不多,大概三四次。

6. 其它

有些公司的面试会出一些我在其它公司没有遇到过的题。比如数学谜题,或「论文讨论」面试——提前给我一篇论文让我阅读(通常是来自我不太熟悉的领域)。还有关于统计基本原理、概率和优化理论的几小时笔试。

薪资谈判

面试结束后,公司的招聘人员会联系我,然后告诉我「好消息」。我总是会直截了当地告诉招聘方我还在参加其他面试,而招聘人员一般都能够理解。

只有当我收到所有公司的回复后,我才会准备讨论下一步。然后开始了薪资谈判。关于这个话题,已经有很多人讨论过了。如果要了解更多相关信息,一定要查看文章开头给出的博客链接。

当然,不同的领域薪资水平不同。机器学习领域的薪资水平紧紧跟在软件工程师之后,所以 levels.fyi 和 GlassDoor 可以给你提供很好的薪资参考。Blind 网站上也有很多关于薪资和面试过程的信息。

但是,你在这些网站看到的薪资水平严重偏向硅谷和整个美国。我的确可以从这些网站上找到关于欧洲薪资水平的信息,但是不太好找。即使是在欧洲,不同国家之间的薪资水平也存在很大差异:比如,英国和瑞士提供的薪资水平要比其它国家高得多。

当面试公司问我对薪资的看法时,我总是告诉他们 10 万欧元是开始谈判的数字。即使在我面试之前,根据我在网上的研究、我之前的实习以及与朋友和同事的交谈中所了解到的情况,我也知道这个数字在现实中是一个薪资下限。

英国或瑞士肯定有公司愿意支付这么多,虽然这个数字对欧洲其他地区来说相当高。但是,我认为先提出一个较高的数字总比笨拙地回避这个问题要好。

多数公司最初给出的薪资为 8~12 万欧元/年。请注意,这通常是年薪总额,所以它包括了基本薪资、预期奖金以及任何股票期权或额外的养老保险。我把我收到的最高报价报给了所有招聘人员。

总的来说,我觉得美国公司(即总部在美国)都能接受我提出的薪资要求,愿意和我谈判,但大部分欧洲公司表示它们无法接受(顺便提一下,没有一家欧洲公司最终在整个过程中给出超过 10 万欧元的年薪)。

接下来,我选择了一些值得接着往上谈的公司。有些公司在面试过程中给我留下了很差的印象,而另一些公司则是我不需要再考虑的「保底」公司。我会感谢他们抽出时间,然后告诉他们我没兴趣了。

最后只留下了一小部分让我感兴趣的公司:我愿意接受其中任何一家公司的 offer!我手里的谈判筹码现在非常强大:我可以要求这些公司开出比当前出价最高的公司更高的薪水,而不必担心吓走任何一家。即使有公司撤回其 offer(或不愿意满足我的要求),我仍然有其它很好的选择。

事情发展到最后:每家公司都报出了比别人更高的价,最后把我的年薪提高到了我做梦也没想到的高度。这是一种非常超现实的感觉。

我在所有公司之间来回做了两轮比较。这期间,我感觉那些招聘人员快要按捺不住了。他们邀请我去他们的城市度周末(包全程所有费用),给我邮寄惊喜的礼物篮、给我开出高额的薪资等等。

在他们都失去耐心之前,我觉得是时候做决定了。值得一提的是,尽管这些公司确实提供了更高的安家费和签约奖金,但它们在提供额外的非货币福利方面不够灵活。例如,没有公司愿意多给假期(这主要由地区标准决定,每年休假 25 至 45 天不等)。

最终,通过这种利用竞争报价的方式,我让最终签约的公司把薪资提高了一倍。我的最终年薪在 16~24 万欧元之间(不包括签约奖金和安家费)。

关于招聘人员

我从没有见过像招聘人员这样将胡萝卜加大棒的把戏玩得如此炉火纯青的一群人。

他们会告诉你「这是我们能给的最高待遇」(一周后就变了),还会跟你强调「他们会为你破例,因为你是一个非常优秀的求职者」(而实际上提供给你的东西和别人相差无几)。

他们还会凭空捏造出严格的 deadline(五分钟之后就会告诉你他们完全接受延期),他们还会告诉你,他们不会重新谈判(但只要你拿出更有竞争力的 offer,他们还是会重新跟你谈),还会说他们在过去两个月内在面试其他候选人(但他们绝对不会放弃跟你谈)。

感觉招聘人员总是想确定我是不是真的想选择另一份 offer 而不是他们的,还是只是利用他们与另一家公司重新谈判。我想这一切都在意料之中,而我最好的建议是始终保持礼貌、耐心和执着。

在我有限的经验中,只要你收到了多份 offer(并且愿意放弃其中任何一个),你就掌握了主动权。所以,努力谈判吧。

  • 原文地址:https://generalizederror.github.io/My-Machine-Learning-Research-Jobhunt/

  • 讨论地址:https://www.reddit.com/r/MachineLearning/comments/bb9umg/d_my_machine_learning_research_job_interview/

推荐阅读

面试宝典之深度学习面试题(上)

如何把薪资谈高一倍?请看大厂offer拿到手软的ML大神自述相关推荐

  1. 2023届互联网大厂校招薪资曝光,如何拿到大厂offer?

    说起年轻人的理想公司,互联网大厂一定榜上有名!如今,2023年春招已经正式打响,陆续各大厂的校招薪资都出炉了.今天就带大家逐一看看,各个大厂的2023届校招薪资究竟是多少? 腾讯: 技术岗(含算法岗. ...

  2. Java面试必知必会八股文210题,看完offer拿到手软

    不积跬步无以至千里,下面的内容是对网上原有的Java面试题集及答案进行了全面修订之后给出的负责任的题目和答案,原来的题目中有很多重复题目和无价值的题目,还有不少的参考答案也是错不积跬步无以至千里,下面 ...

  3. android go 刷机教程,所有安卓手机详细 线刷 卡刷教程!看完小白变大神!

    安卓手机通病 越用越卡 !刷机成为了唯一解决办法!今天教大家刷机 就算你没用过别的品牌手机 看玩基本也就会了!大神勿喷! 卡刷: 首先进入re模式 方法:上下电源键选择 电源键或者home键确定 小米 ...

  4. 面试薪资谈好1万,邮件却写着“底薪3000+绩效7000”,合理吗?

    昨天一个妹子后台私信问:我刚跟对方公司谈好工资1万,但对方邮件却写着"底薪3000+绩效7000",这样的offer可以签吗? 为了更加清楚的了解有多少对此有疑惑,笔者又上知乎逛了 ...

  5. 转自程先的专栏:如果是初学C语言请看完 一些成功人士的心得

    如果是初学C语言请看完 一些成功人士的心得 转自程先的专栏     今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了所有 ...

  6. 孪生网络图像相似度_生成对抗网络的进步多大,请看此文

    全文共4175字,预计学习时长8分钟 最近,多项研究采用了生成对抗网络(Generative Adversarial Networks, 简称GANs)这一技术来生成分辨率为1024x1024的高清图 ...

  7. 扬尼斯定律:程序员的开发效率每6年提高一倍

    我不断的听到各种关于"软件危机"的警言,以及关于软件开发缺少过程规范的批评.我做编程工作超过15年,我认为这些言论基本上都是错的:我确信我能在很短的时间里用如今的开发工具复制出15 ...

  8. 2018下半年计算机学科竞赛,2018年度下半年五大学科竞赛,其他赛事时间预告高一高二请收好,不要错过报名.doc...

    .\ 2018年下半年五大学科竞赛.其他赛事时间预告!高一高二请收好,不要错过报名 随着2018年自主招生录取工作的结束, 2019年自主招生五大学科竞赛.其它竞赛准备工作已经已经紧锣密鼓的开始了,高 ...

  9. 分享一个神器!16倍速看视频,闪瞎了我的狗眼!

    声明:本文首发微信公众号[菜鸟要飞],如有转载,请标明出处! 最近菜鸟君在学习小程序,教程的废话比较多,一节课40分钟,有25分钟都是废话,从经验来看,网上大多数分享的教程都有这问题.想快进又怕遗漏知 ...

最新文章

  1. Handler 实现的一个循环操作
  2. Vue删除数据成功后如何刷新表格数据
  3. 边缘计算大热 AI芯片站上风口
  4. tensorflow import 没找到cudnn库问题解决
  5. miui11未升级android版本,MIUI 11稳定版正式推送,升级前你需要了解
  6. 时间序列模式识别_空气质量传感器数据的时间序列模式识别
  7. Linux升级glibc版本汉字乱码,Linux CentOS6升级glibc库过程
  8. IOCP编程之基本原理
  9. EMC CTO:IT进化到“以数据为核心”的阶段
  10. mysql常用的存储过程_MySQL存储过程的基本函数
  11. 典型关联分析(CCA)原理总结
  12. 9x9九宫格java_9x9九宫格数字填写规律
  13. html小游戏——看你有多色
  14. 可见性得以保障,并不意味着_更少的数据并不意味着更少的体验
  15. 计算机控制系统中a d是什么,计算机控制系统中,()代表模拟量输出。A、AIB、AOC、DID、DO - 试题答案网问答...
  16. matlab实现iou计算,python实现IOU计算案例
  17. 力扣解法汇总553-最优除法
  18. quartz不正常执行.执行一段时间后无故停止
  19. 支付宝沙箱开启以及配置
  20. android 生成 QR_CODE 码 PFD_417码 CODE_36码

热门文章

  1. 反思拖延症:持续告诉自己立即做立即做;面对困难时要持续坚持;面对困顿时要转变方法
  2. 微信小程序点击button按钮后重置输入框等表单内容
  3. Apache的配置详解
  4. java注解和python装饰器_Java 的注解 和 Python 的装饰器 是一回事吗?
  5. linux无盘windows系统,Linux无盘启动Win2000终端
  6. php迭代什么意思,PHP中迭代变量的坑
  7. 手机号验证_谷歌修改密码时遇到手机号验证的解决办法
  8. python mysqldb_python学习-使用MySQLdb操作mysql数据库
  9. springboot处理参数再转发请求_SpringBoot是如何解析HTTP参数的
  10. python 爬虫爬不出来_爬虫爬不进下一页了,怎么办