求职刷题神器

funit.cn

讨论区 > 求职面经 > Facebook面经全披露,我是怎么拿到机器学习工程师offer的?

Facebook面经全披露,我是怎么拿到机器学习工程师offer的?

一袍清酒付
发布于2021-01-21 14:34:44 53浏览

前言


去年八月,我正在接受面试。那时,我已经分别接受Google India和Amazon India的机器学习和数据科学职位面试。然后我的上级建议我申请Facebook伦敦的职位。最后我成功了。我与LinkedIn上的一名招聘人员联系,后者向我介绍了另一位招聘人员,几天后我就开始担任机器学习工程师的工作。

现在,在招聘机器学习工程师方面,Facebook的流程大为不同。他们进行编码回合,系统设计和机器学习设计面试,以选择未来的员工。现在,就我作为数据科学家的经验而言,对机器学习设计面试感觉还不错,但其它面试仍然让我感到恐惧。最近,我刚在第一轮考试中未能通过Google的机器学习软件工程师面试,因为我没有准备好应对数据结构问题。

后来,当我准备Facebook编程岗位面试时,我意识到我对此已经有所了解,并且根本没有为编程面试做准备。

在这篇文章中,我将概述我对所有这些不同采访的方法,以及对于像Facebook这样的大型公司中的机器学习工程师角色感兴趣的人,如何逐步进行整个过程。 因此,一旦我与招聘人员取得联系,下一步便是电话面试。 


电话面试


这是一次非常基本的数据结构面试,是一种基本的常规面试。我想Facebook只是想给你更多的时间为下次面试做准备,还要看看是否值得致电你参加现场面试。对我来说,这次采访通过视频通话进行了45分钟。面试官首先向我介绍了他在Facebook上的个人信息,然后在前10分钟左右询问了我的个人信息。

然后,给了我2个非常基本的数组和基于字典的问题让我解决。面试者共享了一个coderpad链接,我必须在该链接上以我选择的任何语言(不是Pseudocode)来解决这些问题,并且没有任何代码格式选项。这些问题也被问及基于时间的约束和基于空间的约束。面试的过程中我遇到了O(n³)等糟糕的运行时间,面试官问我是否可以做得更好,并在需要时给出提示。

因为不允许我分享确切的问题,所以我只想为你分享一些难度相当但不相同的公共Leetcode问题,以便你可以理解难度级别并相应地进行练习。

单调数组:如果数组是单调递增或单调递减的,则为单调数组。当且仅当给定数组A为单调时,才返回true。

有效回文:给定一个字符串,仅考虑字母数字字符并忽略大小写,确定它是否是回文。

  我这次面试的安排? 

这只是我进行的第二次数据结构面试,我希望第一次面试之后先不完全展露自己。因此,我首先使用Gayle Laakmann McDowell撰写的《Cracking the Coding Interview》一书来理解数据结构的基础。

该书还包含许多准备技巧,因此你应该认真阅读。我喜欢这本书的最好的地方是,它与Thomas Cormen算法简介不同,非常简洁,并且为面试编码提供了适当的背景知识。 在2-3页中非常简洁地说明了每个数据结构,围绕该特定主题解决了一些问题,然后给出了一些实践问题。本书还以仅具有最常问到的数据结构的方式对其进行了限制。例如,红黑AVL树和树保留在高级部分中,而不是在树和图形章中,因为在有时间限制的采访设置中经常不经常询问它们。 

我通过创建需要准备的主题列表来开始准备工作。可以准备更多主题,但这是这些面试的最低要求。 数据结构:数组,集合,堆栈/队列,哈希图/字典,树/二叉树,堆,图。 算法:分而治之,DP /存储,递归,二进制搜索,BFS / DFS,树遍历。 

然后,我开始使用《破解编码面试书》来阅读有关它们的信息,并为他们解决了许多关于Leetcode的简单级别的问题和一些中等级别的问题。也有其他平台可以在线练习,但是我喜欢Leetcode,因为它设计合理,没有广告,并且解决方案基于类的编程结构。它还提供了一种搜索各种主题以及难度的好方法。我还进行了许多关于Leetcode的模拟面试,只是为了练习。我做了大约一两个星期,每天花费大约3-4个小时。

我也开始在这段时间里审核UCSanDiego在Coursera上的Algorithms Specialization,这为我提供了一个关于本科大学教授的用于处理编码面试的内容的想法。

太长的可以不用看,只需记下你必须准备的主题,并针对每个主题练习许多简单的问题即可。也许还有一些中等程度的。

有一次,我完成了电话面试,招聘人员在短短的1天之内回复电话,解释现场面试的过程。现场面试将在伦敦进行,我对前往伦敦的前景感到非常兴奋,并且全程旅行报销。大约还有5轮,接下来我将要讨论。我花了两个月的时间进行面试,以便有时间做准备。无论如何,签证和整个过程所花费的时间要多得多。

到达伦敦后,我于面试当天9点左右从他们提供的酒店到达Facebook办公室。因为我很着急,所以通常在原定时间前一小时进行,我通常会尝试在时间上或之前进行面试(在我进行面试时更是如此)。我事先知道了当天的整个行程,因为我的招聘人员与我分享了行程。我也知道哪个采访会在什么时候发生,谁会接受。事实上,这是我宁愿拥有的最有条理的面试经历。


第一轮现场编程


我已经在数据科学领域工作了很长时间,以至于我将DS读为数据科学而不是数据结构。这次面试本质上是我的痛点。这是我在2个月的时间内学到的东西,而不是自己的全部经验。在这里,我将根据我的经验而不是我的全部经验和数据科学背景来进行评估。但是,正如招聘人员告诉我的那样,他们的流程非常固定,我必须经过这些面试才能获得机器学习工程师职位,所以我加入。 

至于面试,它是按时开始的,和以前一样,面试者介绍了自己,然后很短时间进入我的个人介绍,然后直接跳入面试问题。 这次,问题变得有点困难,并且花了很多时间来制定解决方案以及解决方案的时空复杂性。我被问到一个我可以很快解决的中等字符串问题,以及一个我花费了大部分时间的中级二进制搜索问题,但最终我得以解决。Leetcode的简要介绍中的一些可比较的问题(不是相同的问题): 

复数乘法:给定两个表示两个复数的字符串。需要返回一个表示其乘法的字符串。

排序矩阵中的第K个最小元素:给定一个n x n矩阵,其中每个行和列均按升序排序,请在矩阵中找到第k个最小元素。 

面试官还给了我选择在我自己携带的笔记本电脑上编程的选项,因为招聘人员已经告诉我有关在白板/笔记本电脑上编程的选项。但是请记住,它们不允许使用任何代码格式和IDE。我只有一个基本的编辑器来编写代码。 

  我的编程面试计划? 与电话面试计划相同,但是更广泛的Leetcoding。我记得我在一天的3-4小时左右的这些编码回合中连续30天做了Leetcode。我过去常常花很少的时间来解决中级问题,而只花很少的时间来解决硬性问题。


第2轮现场编码


直到这次,我仍处于数据结构阶段,准备好面试官要扔给我的一切。我的心态是-“可能发生的最糟糕的情况是什么?”,所以我继续坚持下去。Facebook的人真的很好,因为他们在每次面试之前和之后都准备茶点,并注意不要过度延长面试时间。很多事实都表明,每次采访都在恰好需要的时间开始,每次采访之间有15分钟的休息时间。 

再有一些可比较的(不是相同的)难于解决的问题,以及来自Leetcode的简短描述:

基于API的问题基于时间的键值存储:创建一个键值存储类,该类支持两种操作-设置和获取。

合并k个排序列表:给您一个由k个链表列表组成的数组,每个链表以升序排序。将所有链表合并到一个排序的链表中并返回它。

我在此编程面试中的目标是能够解决面试官在40分钟内提出的两个问题。但是,这是一次艰难的面试,而我大部分时间都花在了第二个难题上。虽然面试官只给出了一些提示,但可以引导我朝着正确的数据结构和算法发展。最后,我能够完全解决问题1和问题2大部分内容。

给面试者的提示是调出你拥有的所有解决方案以及所涉及的时间复杂性,并且只有在双方都同意一个好的解决方案后才开始编写代码。

另外,通过这两次面试我发现,面试时与面试官交谈并解释你的方法确实很有帮助。他们有时会提供提示,有时会阻止你进入错误的思维方式。当你告诉面试官你遇到的难题,你就可以向面试官会发出你正在思考的方向的信号,这也使整个面试更具协作性,我认为这是面试官找到合适人选的方式。

到此为止,我对所有的白板编码和一般的面试压力都感到有些疲惫,并且由于它是在午餐时间左右,所以我与指定的同事或好友一起去了Facebook自助餐厅。你可以询问公司,这不涉及面试中的评分,因此你可以很开放地询问有关Facebook生活等方面的问题,你可以在Facebook自助餐厅享用各种美食。

 

 

本文首次发布于趣IT ,转载请注明出处,谢谢合作

Facebook面经全披露,我是怎么拿到机器学习工程师offer的?

全部评论0

成为第一个评论的人

还可以上传7

表情
热帖排行
热门话题
  1. 531人参与
  2. 243人参与
  3. 153人参与
  4. 98人参与
  5. 25人参与
  • 微信扫码加好友进群