无实习经历、非名校出身的我,是如何拿到 Facebook Offer的?

先介绍下我的背景吧。国内211非985高校的CS毕业,在美国东部一所大学念研究生。由于是一年的项目,没有实习机会,只能一开始就找全职的工作,亚历山大!!

一、求职时间表

我的时间表大概是这样的:

九月份面了 Jane Street 和 Microsoft 的 first round. Jane Street 作为technical 第一面我当然是挂掉了的。 Microsoft 是on-campus 的。我在面Microsoft 之前已经上完九章算法班了,然后把算法班的Ladder 做了一半。Microsoft校招很简单。三十分钟过了一遍简历,问了check if a string is a palindrome。过了两周顺利被邀请到onsite.

面完微软,我就继续刷算法班的Ladder, 慢慢刷完。十月份的时候面了Apple 的Siri 组,Zillow, Square, 和 Morgan Stanley 的desk strats. 都跪了,所以我这里讲讲教训吧。首先,简历上一定不要写自己没有把握的 project。当时我的简历上写了个略水的Machine Learning independent study,然后Apple 二面的时候面试官正好是做Machine Learning 这方面的,就把这个project 挑出来问了很多很深的问题,我好多都打不出来。其次,如果电话面试,然后你想静静地想一下,一定要和面试官说”can I have one to two minutes to think about this?”, 不然对方被撂在那里很尴尬。

当时一周内连续被3个公司拒,已经有点灰心了,不过咬咬牙继续刷题,因为还有Microsoft onsite呢。我把LintCode 算法班的ladder 做完后,就开始在LC 上按公司刷题。当时有Facebook 的一面,所有就专门刷Facebook 和微软的题。说说Facebook吧。我先是参加了两轮 Skype 电面。电面过了2天,HR就通知我去 Onsite。Onsite 是一些LintCode上做过的算法题型,也有一些变型,但因为这个时候我已经刷了大概190道题了,所以基本都答出来了。结果,onsite 完一周,我就收到了 offer! 颈部惊喜!

二、Facebook 面试准备
在面试过程中,工程师和软件开发员需要经历多轮编码能力考验。所以,在面试 Facebook 软件工程师岗位之前,最好先准备:

1、基本数据结构和算法

包括列表、阵列、哈希表、协议栈、队列、堆阵、树形图、遍历(BFS, DFS)等等。这些是软件工程师面试的最基本知识储备,如果不能熟练掌握这些基本数据结构,那么面试通过就希望渺茫了。

2、工作经历和职业兴趣

充分熟悉简历,准备好如何谈论项目的细节、成果、影响等,想好未来工作期待、可能遇到的问题及问题解决方案等等。

3、Facebook 的企业文化

要成为顶级程序员,除了熟练数据结构和算法、有清晰职业规划,还需要了解 Facebook 的企业文化,成为一个符合 Facebook 企业目标和工作节奏的人。所以,在面试 Facebook 软件工程师岗位之前,请确认好你是喜欢马克·扎克伯格所创造的企业文化的。

做好以上准备之后,便可以开始进击 Facebook 软件工程师的面试流程啦。

三、HR电面

无论申请 Facebook 哪个岗位,面试第一步都是接受 HR 的电面。

准备建议

  • 选择安静环境接听电话:以对待扎克伯格的态度对待电话面试,找一个安静环境而不是星巴克,以确保电话畅通。
  • 提前在 LinkedIn 查看 HR 个人资料:了解 HR 的学校、工作经历和爱好等,这不仅是有礼貌的行为,而且有助建立融洽的关系。
  • 尝试询问 HR 对后续面试的建议:在恰当时机,可以询问 HR 是否愿意分享一些面试技巧和窍门。

工程师电面

这一阶段将会由一位 Facebook 工程师担任面试官,主要面试内容为 coding。

面试流程:

  • 自我介绍:面试官会要求你进行自我介绍,并说明想应聘的职位。
  • 职业期望:5-10 分钟,面试官针对你的工作经历和职业期望进行提问。
  • coding:30-35 分钟进行 coding,这是面试官了解你的解决问题方式的重要环节。
  • 提问面试官:最后 5 分钟提问时间,这是从内部角度了解 Facebook 软件工程师的好机会。

1. coding面试在一个你和面试官共享的在线编辑器上进行。

2. coding question有1个或者几个,问题长短适当,能在几分钟内解释好、10-30分钟解答完。

3.一般不问技巧或估算问题,例如,面试官并不关心海里能塞下多少个乒乓球。

4. 可自行选择解题方式,但面试官可能添加进一步的限制或要求。

coding 面试准备建议:

  • 刷题:用一种最有效率、bug free 的方式练习解答算法问题,可以在 Lintcode 上刷题。
  • 采用简单编辑器编码:面试可能使用没有语法加亮和自动填充的工具编码(比如 CoderPad)。
  • 计时练习:coding 面试的解题时间有限,按时完成至关重要。可以和朋友一起模拟面试。
  • 思考 2-5 年内的职业期望:面试官可能问及你的兴趣和作为工程师的优势。
  • 准备 1-2 个问面试官的问题:最后 5 分钟是提问面试官时间,所以要准备好 1-2 个有助增强面试官好感度的问题。

四、现场面试

面试 Facebook 软件工程师岗位,你在一天内会经历 4-5 轮面试,这些面试分为 3 种类型:

  • Coding 面试:解决一些基本的代码问题
  • 设计面试:展示设计能力,设计问题依据你的背景而定
  • 行为面试:问及工作经验和求职动机,以及其他 behavioral questions

除了很早/很晚参加面试的人,其他人会由HR或工程部职员带着吃午饭,这会是向面试官以外的职员提问的好机会。

coding面试:

这次coding面试比工程师电面时难:面试官的提问更难,评估标准更严格。面试时间约为 45 分钟。

面试流程

  • 自我介绍:5 分钟自我介绍时间,可能简单加问一下你的背景。
  • coding:30 分钟,有 1 个或多个 coding question,大部分是算法面试题。
  • 提问面试官:最后 5 分钟提问面试官时间,这是从内部工程师角度更多了解 Facebook 和你感兴趣的事情的好机会。

准备建议:

  • 工程师电面部分提及的 coding 面试准备建议
  • 练习手写代码:coding 面试将在白板上完成,准备时可以用白板/纸和笔练习解题。

设计面试(Design interview)

设计面试有两种类型:系统设计和产品设计。设计面试的目的是评估应聘者解决重要工程设计问题的能力。设计面试时长 45 分钟,整个面试你一般都在说或者写,面试官会问一个非常广泛的设计问题并要求提出、评价你的方案。正如所有面试一样,最后 5 分钟是提问面试官的时间。

准备建议:

(1)系统设计

  • 模拟系统设计面试:请一个工程师进行模拟面试,让他提一个系统设计问题,如果正好是他正在做的项目那就再好不过了。
  • 深挖开源系统的运行特点:例如,可以看看 levelDB,然后读读执行命令,了解如何在硬盘中存储数据,如何将数据压缩成不同的层?再多多思考哪种数据和大小是最优的?什么情况下会降低读写速度?

(2)产品设计

  • 反思自己的项目:思考做过的项目中,哪些是容易部分/困难部分?
  • 面试官可能问:“你会如何设计一个电子邮件服务器?”
可以考虑这些问题:当系统扩大到一台机器装不下时,如何储存邮件?如何处理有大量收件人的邮件列表?如何处理人们滥用垃圾邮件系统?面对潜在的系统故障,如何保证系统是可靠的?
  • 面试官还可能问:“你会如何设计一个用来构建丰富文档编辑器的客户端-服务器API?”
思考好这些问题: 客户端如何从服务器请求文档数据?尤其是文档大到我们不想在单一请求中下载它的时候?如何在API响应中显示文档中粗体和斜体这样的元素?在不破坏原有客户端的情况下,想要给服务器添加新特性,应该如何设计系统?

行为面试(Behavioral interview)

实际上,行为面试包括一部分行为面试和一部分 coding 面试。行为部分考察应聘者的性格、工作经历和工作动机。行为面试的目的是评估应聘者能否适应 Facebook 的工程师文化。

准备建议:

  • 了解自己:花时间回顾简历,面试官很可能提问你的工作经历中的重要事情,例如,讲述一次有人反对你的主张,但你仍然坚持推进项目的经历?
  • 梳理求职动机:想清楚你的求职动机是什么?为什么选择 Facebook?为什么要做软件工程师?
  • 思考如何与同事相处:弄清楚你会如何与同事合作?你会如何化解矛盾?你喜欢如何给予和接收反馈?


推荐阅读:

欢迎关注我的微信公众号:九章算法(ninechapter)。

精英程序员交流社区,定期发布面试题、面试技巧、求职信息等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值