如何准备在Facebook进行技术面试


自启动iOS面试计划以来,我有机会与许多有兴趣在Facebook工作的学生一起工作。 结果,我对他们的招聘过程产生了浓厚的兴趣。 与Google和Amazon类似,他们的采访“循环”以其冗长而详尽的经历而闻名。 我最近访问了他们在西雅图的新办公室,就他们如何建议候选人准备技术面试进行非正式讨论。 本文提供提示,注释和建议。

行为要点

参加Facebook的采访活动时,我的目标是掌握最新技术,并在指导他人时微调我的方法。 我很高兴学习他们的过程从三个方面进行评分。 行为阶段旨在了解候选人。 这包括优点,缺点和目标。 突出的是他们强调寻找能够证明自己如何从失败的项目或处于危险中的项目中恢复过来的人。 这些事件揭示了候选人的态度,行为和外貌,而不仅仅是提供标准的样板反应。 Facebook寻求能够表现出流行的快速失败心态并且不怕冒险的人。

最佳脚步向前

重点是看到他们的技术面试过程的现场演示,演示者/开发者在100多人的观众面前白板解决方案。 在Facebook实际的5到6个小时的采访中,大约一半的时间将花费在完成编码挑战上。 结果,强调了候选人利用时间发挥自己的最大作用。

挑战

在Facebook上,给候选人约45分钟的时间来解决每个编码问题。 考虑到时间限制,他们建议通过提出正确的问题来给人留下深刻的印象,然后在优化设计之前继续实施蛮力方法。 只要您能够详细说明它们的性能,就可以接受使用特定API或语言功能解决挑战的方法。 为了说明这一点,让我们重新讨论在创建算法以检测字符串中的唯一字符方面的代码挑战。 签名如下:

  //挑战:编写一个函数来确定输入的String(例如元素)是否包含所有唯一字符。 


功能 isStringUnique (元素: )-> 布尔 {
//代码在这里。
}

与大多数代码一样,有许多可能的方法。 在本文中,我回顾了如何通过应用蛮力方法解决该问题,然后继续优化代码,使其在线性时间(O(n)或更佳)下运行。 没有讨论的是纯粹使用本机Swift API或语言功能来解决它​​。 有趣的是,这种看似简洁的解决方案也满足了我们的要求:

 功能   isStringUnique (_ s:   )->  布尔   { 
返回s.count == (s).count
}

乍看之下,代码看起来很棒,但确实是最佳答案吗? 更重要的是,考虑到典型面试的压力,人们是否有能力证明或否认其效率? 现在的课程是-较少关注语法,而是通过证明您的方法来努力展示您的知识。

系统设计

在编码面试阶段之后,我惊喜地发现Facebook在系统设计方面如此重视。 建议候选人花一些时间来复习和研究软件开发的这一方面。 尽管良好的系统设计还需要大量的领域知识才能成功,但是受访者可以通过了解数据管理,安全性,硬件,可伸缩性,权衡,瓶颈等方面的需求来预先进行练习。 结果? 成功进行系统设计挑战需要与代码开发不同的技能集。 首先,能够通过使用图表来说明/交流您的想法。 因此,这极大地提醒了我们重新审视标准的统一建模语言(UML)标准,并可能扩展了iOS采访计划,以包括对常规图表绘制技术(如数据流和序列图)的审查。


喜欢这篇文章吗? 阅读并发现有关 Medium的 Swift算法书