责编 | Aholiab
头图 | CSDN 下载自视觉中国
出品 | CSDN(ID:CSDNnews)

外国小哥zhia是个有口试绝技的人,他只有三年的编程履历,并且没有任何名牌大学的光环,两年多以前,他同时得到了Facebook、谷歌、亚马逊、微软等浩瀚「硅谷豪门」的offer。不久前他以如何得到Twitter的offer为例,讲解了他从准备到口试的全部经由。
对付那些想要得到大厂offer的开拓者来说,他的经历和入职前的一些列准备、生理活动,都十分具有参考代价。
接下来我们就一起来看看他的经历吧(以下为原文)。
深夜,在这个每月租金600美元的地下室里,回荡着我手指「啪啪啪」猛敲键盘的声音。我从电脑屏幕上抬开始,瞥了一眼墙上的挂钟——凌晨2点。你或许会以为我熬到这么晚一定是在写软件或者处理主要事情。
但实在并没有。我是准备即将到来的技能编程口试。
在Twitter指定的技能测试网站leetcode上,我创造自己无法完成“大略”级别下的一个题:反转链表,一股挫败感随之而来。题目是这样的,感兴趣的小伙伴也可以自己考试测验一下:
那么我是如何得到这次口试机会的?我又是如何准备的?本篇文章就来逐一见告你。
3年全栈,得到Twitter口试机会
在这次口试之前,我曾在一家初创公司做了3年的全栈工程师,紧张卖力在AWS堆栈上构建微做事和API开拓,侧重于PHP、NodeJS、作为行列步队的AWS SQS、用于数据库的Postgres以及用于长期存储的AWS S3。
在此之前,我没有任何的事情履历或演习经历,这家初创公司的事情是我第一份真正意义上的软件工程师职位。
我本科就读于华盛顿州一所小型私立大学,4年的本科得到了打算机科学学士学位。现在回忆起来,我以为当时在大学的学习光阴是一段非常宝贵的经历,也学到了很多。我想说的是,我不建议想学技能的人去参加短期的编程演习营,如果再来一次的话,我还是会选择接管正规教诲,而不是参加编程演习营。
在投Twiter之前,我申请了30多家公司,口试了15家,收到了6个offer,包括Facebook、谷歌、亚马逊、微软等,并终极选择了Twitter。下面我就从Twitter的例子,讲讲我是如何得到这个offer的。
口试内容
起初我收到了一封Twitter 招聘职员发来的邮件,问我是否乐意和他们的工程师安排一次电话筛选。收到邮件后我既愉快又紧张,由于几年前我曾经申请过Twitter的一个软件工程职位,但没能成功。
招聘职员发了一张非常全面的准备表给我,上面有可供练习编程和算法技能的链接。个中就有leetcode(一个编程寻衅网站)的测试,所以为了准备接下来的技能口试,我在leetcode上花好了几个小时。
准备技能口试并非易事。对付我这样一个已经毕业很永劫光的人来说,要想通过技能编程口试的话,须要花大量的韶光来复习干系技能和根本知识。招聘职员曾明确强调,口试将侧重于技能根本,比如map、二叉树、链表、二叉搜索树、图表等等。
口试准备
口试前的准备,大略来说便是多做练习。把自己沉浸在办理详细的技能问题上面。
我把大部分韶光都花在了leetcode和一本名为《编程口试宝典》(Elements of Programming Interviews)的书上。我还花了约10%的韶光在Youtube上浏览了一些关于系统设计口试的视频。此外,我常用的另一个网站是DailyCodingProblem,它每天都会给我发一个编程干系的问题,这样我就能一贯打仗到新的问题。
我花了大约一个月的韶光进行持续练习。把稳,一定要制订不间断的持续操持。我过去常常间歇性发奋图强:花3个小时硬核编码,然后安歇一周。结果创造这完备是在做无用功,我也为此付出了沉重的代价,即这次做过的练习,下次常常接不上。
整体而言,事情日我每天花约3个小时进行准备,周末一样平常花4 - 6个小时。在这一个月里,我每周准备约20个小时。
这里还有一个大家非常关心的问题,即我是如何申请Twitter职位的?我是通过Twitter的“职业生涯”页面递交申请的。不过事后看来,直接从LinkedIn上找推举人或招聘职员可能会更好一些,由于这样大概率会加快申请过程。
申请的过程并不繁芜,提交简历和基本信息即可。但简历一定要精良。特殊是对付通过线上求职页面进行申请的求职者来说,如果简历不足亮眼,那么很大可能是无法得到口试机会的。
投完简历等待的过程,大约是几周的韶光。我的入职过程是从2月持续到6月的,从2月投简历到多轮口试,6月正式入职。详细韶光线如下:
2月 — 招聘职员主动安排TPS
3月— 初次TPS
4月初— 二次TPS
4月中— 现场面试
5月初 — 收到offer
5月尾— Twitter确认
6月 — 正式入职
口试过程
前两次电话口试紧张涉及对共享在线文档(例如Google Docs)进行编码的问题。我们磋商了几种不同的方法,光履行阶段就谈论了半个多小时。
两轮之后,我进入了下一轮现场面试。
招聘职员给我发了一个在线编码存储库的链接,让我进行代码审查,提出改进建议,并在口试现场与口试官进行谈论。
我花了约一天的韶光来检讨代码:把它打印在纸上(10pt字体,约5页),并且在纸上记下须要改进的地方。事实证明,这一步非常有用。
现场面试
现场面试统共进行了3轮,中间吃了一顿午餐:
一轮(广度),75 分钟
二轮(深度),75 分钟
午餐
三轮(顶级评级),90 分钟, 可选
须要把稳的是,Twitter的现场面试每轮都是2名口试官。刚开始的时候觉得有点吓人:被两名口试官盯着,自己的一举一动都被尽收眼底。但实际上,终极体验还不错,由于这种形式让我觉得更有团队感,大家可以互相交流想法。
第一轮:系统设计
第一轮口试内容较为广泛,紧张是理解你对“从零开始设计系统”知道多少。这样做是为了看看应聘者的知识广度极限在哪里。
核心问题是:从设置UI到通过HTTP API进行通信,再到构建后端做事,你是否能够构建一个停机韶光得当的可靠系统?
这些都是可能会被问到的题目类型。由于我总是喜好鼓捣各种不同的技能,以是我还挺喜好这次发言的。如果你喜好构建东西的话,该当也会喜好这一轮。口试官非常友善,一贯礼貌地勾引我进行回答。
末了,我们以一个编码问题结束了这场面试。诚笃说,我已经记不清问题详细是什么了,但该当也没什么特殊的,没有超纲。
第二轮:个人履历
第二轮口试更多地关注于我过去曾参与过的项目和专业知识。说实话,这轮口试会更激烈和更具寻衅性,由于口试官会深入理解我曾参与构建的项目的各方面问题,并对设计提出质疑。包括:你最近做了什么项目?为什么做这个项目?考虑过哪些备选方案?终极成功了吗?
鉴于我初创公司的事情背景,有很多东西都是须要我从零开始进行构建的,比如创建AWS集群,设置用于处理任务的SQS等。
只管我对这些项目都非常熟习,但这一轮还是让我有些筋疲力尽。我必须回顾过往履历,然后从自己的角度来讲述这个故事——为什么我们要用这种特定的办法来设计,我们有没有想过更好/更坏的方法。
这一轮没有任何编码问题。
第三轮:文化
第三轮,也是末了一轮,是和HR经理以及高层领导进行的90分钟口试。
我后来才创造,如果能成功进入这一轮,就表示你在技能上已经做得不错了,而他们是在探求双方的文化契合度——你能否能融入他们的企业文化,以及他们是否有适宜你的事情机会。
这一轮也没有编码问题。
回顾
Twitter的口试紧张侧重于打算机科学领域内的根本知识,以是要确保自己从上到下、从左到右全方位理解数据构造,以及你在CS课上学过的基本算法。
此外,还要理解如何权衡韶光繁芜度和空间繁芜度。如果能节制一种措辞的话会非常有帮助。我建议是像Python、Java或C++这样非常实用的措辞。我个人更喜好用Python,由于它易于阅读,易于阐明,并且还有一堆内置的数据构造。
一定要回顾一下自己简历上列出的那些项目。要理解自己卖力的端到端软件的全体设计,理解系统中所做的权衡,能够阐明为什么要以这种办法构建系统以及有什么替代方案。
在准备阶段要严格哀求自己。提前找出自己的不敷,并制订练习操持。坚持不懈、不间断练习非常主要。我一开始就做错了,真希望之前能早点意识到,这样就不用把韶光摧残浪费蹂躏在缺点的事情上了。
想想你每天与之交互的系统。弄明白权衡取舍、替代方案、利弊,以及如何构建更好的系统。这一技能将助你在软件工程这条路上走得更远。