作者
zhiachong
责编
Aholiab
头图
CSDN下载自视觉中国
外国小哥zhia是个有面试绝技的人,他只有三年的编程经验,并且没有任何名牌大学的光环,两年多以前,他同时获得了Facebook、谷歌、亚马逊、微软等众多「硅谷豪门」的offer。不久前他以如何获得Twitter的offer为例,讲解了他从准备到面试的全部经过。
对于那些想要获得大厂offer的开发者来说,他的经历和入职前的一些列准备、心理活动,都十分具有参考价值。
接下来我们就一起来看看他的经历吧(以下为原文)。
深夜,在这个每月租金美元的地下室里,回荡着我手指「啪啪啪」猛敲键盘的声音。我从电脑屏幕上抬起头,瞥了一眼墙上的挂钟——凌晨2点。你或许会以为我熬到这么晚一定是在写软件或者处理重要工作。
但其实并没有。我是准备即将到来的技术编程面试。
在Twitter指定的技术测试网站leetcode上,我发现自己无法完成“简单”级别下的一个题:反转链表,一股挫败感随之而来。题目是这样的,感兴趣的小伙伴也可以自己尝试一下:
那么我是如何得到这次面试机会的?我又是如何准备的?本篇文章就来一一告诉你。
3年全栈,得到Twitter面试机会
在这次面试之前,我曾在一家初创公司做了3年的全栈工程师,主要负责在AWS堆栈上构建微服务和API开发,侧重于PHP、NodeJS、作为消息队列的AWSSQS、用于数据库的Postgres以及用于长期存储的AWSS3。
在此之前,我没有任何的工作经验或实习经历,这家初创公司的工作是我第一份真正意义上的软件工程师职位。
我本科就读于华盛顿州一所小型私立大学,4年的本科获得了计算机科学学士学位。现在回想起来,我觉得当时在大学的学习时光是一段非常宝贵的经历,也学到了很多。我想说的是,我不建议想学技术的人去参加短期的编程训练营,如果再来一次的话,我还是会选择接受正规教育,而不是参加编程训练营。
在投Twiter之前,我申请了30多家公司,面试了15家,收到了6个offer,包括Facebook、谷歌、亚马逊、微软等,并最终选择了Twitter。下面我就从Twitter的例子,讲讲我是如何获得这个offer的。
面试内容
起先我收到了一封Twitter招聘人员发来的邮件,问我是否愿意和他们的工程师安排一次电话筛选。收到邮件后我既兴奋又紧张,因为几年前我曾经申请过Twitter的一个软件工程职位,但没能成功。
招聘人员发了一张非常全面的准备表给我,上面有可供练习编程和算法技能的链接。其中就有leetcode(一个编程挑战网站)的测试,所以为了准备接下来的技术面试,我在leetcode上花好了几个小时。
准备技术面试并非易事。对于我这样一个已经毕业很长时间的人来说,要想通过技术编程面试的话,需要花大量的时间来复习相关技能和基础知识。招聘人员曾明确强调,面试将侧重于技术基础,比如map、二叉树、链表、二叉搜索树、图表等等。
面试准备
面试前的准备,简单来说就是多做练习。把自己沉浸在解决具体的技术问题上面。
我把大部分时间都花在了leetcode和一本名为《编程面试宝典》(ElementsofProgrammingInterviews)的书上。我还花了约10%的时间在Youtube上浏览了一些关于系统设计面试的视频。此外,我常用的另一个网站是DailyCodingProblem,它每天都会给我发一个编程相关的问题,这样我就能一直接触到新的问题。
我花了大约一个月的时间进行持续练习。注意,一定要制定不间断的持续计划。我过去常常间歇性发奋图强:花3个小时硬核编码,然后休息一周。结果发现这完全是在做无用功,我也为此付出了沉重的代价,即这次做过的练习,下次经常接不上。
整体而言,工作日我每天花约3个小时进行准备,周末一般花4-6个小时。在这一个月里,我每周准备约20个小时。
这里还有一个大家非常关心的问题,即我是如何申请Twitter职位的?我是通过Twitter的“职业生涯”页面递交申请的。不过事后看来,直接从LinkedIn上找推荐人或招聘人员可能会更好一些,因为这样大概率会加快申请过程。
申请的过程并不复杂,提交简历和基本信息即可。但简历一定要优秀。特别是对于通过线上求职页面进行申请的求职者来说,如果简历不够亮眼,那么很大可能是无法得到面试机会的。
投完简历等待的过程,大约是几周的时间。我的入职过程是从2月持续到6月的,从2月投简历到多轮面试,6月正式入职。具体时间线如下:
2月—招聘人员主动安排TPS3月—初次TPS4月初—二次TPS4月中—现场面试5月初—收到offer5月底—Twitter确认6月—正式入职
面试过程
前两次电话面试主要涉及对共享在线文档(例如GoogleDocs)进行编码的问题。我们探讨了几种不同的方法,光实施阶段就讨论了半个多小时。
两轮之后,我进入了下一轮现场面试。
招聘人员给我发了一个在线编码存储库的链接,让我进行代码审查,提出改进建议,并在面试现场与面试官进行讨论。
我花了约一天的时间来检查代码:把它打印在纸上(10pt字体,约5页),并且在纸上记下需要改进的地方。事实证明,这一步非常有用。
现场面试
现场面试总共进行了3轮,中间吃了一顿午餐:
一轮(广度),75分钟二轮(深度),75分钟午餐三轮(顶级评级),90分钟,可选 需要注意的是,Twitter的现场面试每轮都是2名面试官。刚开始的时候感觉有点吓人:被两名面试官盯着,自己的一举一动都被尽收眼底。但实际上,最终体验还不错,因为这种形式让我感觉更有团队感,大家可以互相交流想法。
第一轮:系统设计
第一轮面试内容较为广泛,主要是了解你对“从零开始设计系统”知道多少。这样做是为了看看应聘者的知识广度极限在哪里。
核心问题是:从设置UI到通过HTTPAPI进行通信,再到构建后端服务,你是否能够构建一个停机时间合适的可靠系统?
这些都是可能会被问到的题目类型。因为我总是喜欢鼓捣各种不同的技术,所以我还挺喜欢这次谈话的。如果你喜欢构建东西的话,应该也会喜欢这一轮。面试官非常友善,一直礼貌地引导我进行回答。
最后,我们以一个编码问题结束了这场面试。老实说,我已经记不清问题具体是什么了,但应该也没什么特别的,没有超纲。
第二轮:个人履历
第二轮面试更多地