3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?

Wesley13
• 阅读 465

3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?

作者 | zhiachong

责编 | Aholiab

头图 | CSDN 下载自视觉中国

出品 | CSDN(ID:CSDNnews)

外国小哥zhia是个有面试绝技的人,他只有三年的编程经验,并且没有任何名牌大学的光环,两年多以前,他同时获得了Facebook、谷歌、亚马逊、微软等众多「硅谷豪门」的offer。不久前他以如何获得Twitter的offer为例,讲解了他从准备到面试的全部经过。

对于那些想要获得大厂offer的开发者来说,他的经历和入职前的一些列准备、心理活动,都十分具有参考价值。

3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?

接下来我们就一起来看看他的经历吧(以下为原文)。

深夜,在这个每月租金600美元的地下室里,回荡着我手指「啪啪啪」猛敲键盘的声音。我从电脑屏幕上抬起头,瞥了一眼墙上的挂钟——凌晨2点。你或许会以为我熬到这么晚一定是在写软件或者处理重要工作。

但其实并没有。我是准备即将到来的技术编程面试。

在Twitter指定的技术测试网站leetcode上,我发现自己无法完成“简单”级别下的一个题:反转链表,一股挫败感随之而来。题目是这样的,感兴趣的小伙伴也可以自己尝试一下:

3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?

那么我是如何得到这次面试机会的?我又是如何准备的?本篇文章就来一一告诉你。

3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?

3年全栈,得到Twitter面试机会

在这次面试之前,我曾在一家初创公司做了3年的全栈工程师,主要负责在AWS堆栈上构建微服务和API开发,侧重于PHP、NodeJS、作为消息队列的AWS SQS、用于数据库的Postgres以及用于长期存储的AWS S3。

在此之前,我没有任何的工作经验或实习经历,这家初创公司的工作是我第一份真正意义上的软件工程师职位。

我本科就读于华盛顿州一所小型私立大学,4年的本科获得了计算机科学学士学位。现在回想起来,我觉得当时在大学的学习时光是一段非常宝贵的经历,也学到了很多。我想说的是,我不建议想学技术的人去参加短期的编程训练营,如果再来一次的话,我还是会选择接受正规教育,而不是参加编程训练营。

在投Twiter之前,我申请了30多家公司,面试了15家,收到了6个offer,包括Facebook、谷歌、亚马逊、微软等,并最终选择了Twitter。下面我就从Twitter的例子,讲讲我是如何获得这个offer的。

3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?

面试内容

起先我收到了一封Twitter 招聘人员发来的邮件,问我是否愿意和他们的工程师安排一次电话筛选。收到邮件后我既兴奋又紧张,因为几年前我曾经申请过Twitter的一个软件工程职位,但没能成功。

招聘人员发了一张非常全面的准备表给我,上面有可供练习编程和算法技能的链接。其中就有leetcode(一个编程挑战网站)的测试,所以为了准备接下来的技术面试,我在leetcode上花好了几个小时。

准备技术面试并非易事。对于我这样一个已经毕业很长时间的人来说,要想通过技术编程面试的话,需要花大量的时间来复习相关技能和基础知识。招聘人员曾明确强调,面试将侧重于技术基础,比如map、二叉树、链表、二叉搜索树、图表等等

3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?

面试准备

面试前的准备,简单来说就是多做练习。把自己沉浸在解决具体的技术问题上面。

我把大部分时间都花在了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月 — 正式入职

3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?

面试过程

前两次电话面试主要涉及对共享在线文档(例如Google Docs)进行编码的问题。我们探讨了几种不同的方法,光实施阶段就讨论了半个多小时。

两轮之后,我进入了下一轮现场面试。

3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?

招聘人员给我发了一个在线编码存储库的链接,让我进行代码审查,提出改进建议,并在面试现场与面试官进行讨论。

我花了约一天的时间来检查代码:把它打印在纸上(10pt字体,约5页),并且在纸上记下需要改进的地方。事实证明,这一步非常有用。

现场面试

现场面试总共进行了3轮,中间吃了一顿午餐:

  • 一轮(广度),75 分钟

  • 二轮(深度),75 分钟

  • 午餐

  • 三轮(顶级评级),90 分钟, 可选

需要注意的是,Twitter的现场面试每轮都是2名面试官。刚开始的时候感觉有点吓人:被两名面试官盯着,自己的一举一动都被尽收眼底。但实际上,最终体验还不错,因为这种形式让我感觉更有团队感,大家可以互相交流想法。

一轮:****系统设计

第一轮面试内容较为广泛,主要是了解你对“从零开始设计系统”知道多少。这样做是为了看看应聘者的知识广度极限在哪里。

核心问题是:__从设置UI到通过HTTP API进行通信,再到构建后端服务,你是否能够构建一个停机时间合适的可靠系统?

这些都是可能会被问到的题目类型。因为我总是喜欢鼓捣各种不同的技术,所以我还挺喜欢这次谈话的。如果你喜欢构建东西的话,应该也会喜欢这一轮。面试官非常友善,一直礼貌地引导我进行回答。

最后,我们以一个编码问题结束了这场面试。老实说,我已经记不清问题具体是什么了,但应该也没什么特别的,没有超纲。

第****二轮:个人履历

第二轮面试更多地关注于我过去曾参与过的项目和专业知识。说实话,这轮面试会更激烈和更具挑战性,因为面试官会深入了解我曾参与构建的项目的各方面问题,并对设计提出质疑。包括:你最近做了什么项目?为什么做这个项目?考虑过哪些备选方案?最终成功了吗?

鉴于我初创公司的工作背景,有很多东西都是需要我从零开始进行构建的,比如创建AWS集群,设置用于处理任务的SQS等。

尽管我对这些项目都非常熟悉,但这一轮还是让我有些筋疲力尽。我必须回顾过往经验,然后从自己的角度来讲述这个故事——为什么我们要用这种特定的方式来设计,我们有没有想过更好/更坏的方法。

这一轮没有任何编码问题。

第****三轮:文化

第三轮,也是最后一轮,是和HR经理以及高层领导进行的90分钟面试。

我后来才发现,如果能成功进入这一轮,就表示你在技术上已经做得不错了,而他们是在寻找双方的文化契合度——你能否能融入他们的企业文化,以及他们是否有适合你的工作机会。

这一轮也没有编码问题。

3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?

回顾

Twitter的面试主要侧重于计算机科学领域内的基础知识,所以要确保自己从上到下、从左到右全方位了解数据结构,以及你在CS课上学过的基本算法。

此外,还要理解如何权衡时间复杂度和空间复杂度。如果能掌握一种语言的话会非常有帮助。我建议是像Python、Java或C++这样非常实用的语言。我个人更喜欢用Python,因为它易于阅读,易于解释,并且还有一堆内置的数据结构。

一定要回顾一下自己简历上列出的那些项目。要理解自己负责的端到端软件的整个设计,了解系统中所做的权衡,能够解释为什么要以这种方式构建系统以及有什么替代方案。

在准备阶段要严格要求自己。提前找出自己的不足,并制定练习计划。坚持不懈、不间断练习非常重要。我一开始就做错了,真希望之前能早点意识到,这样就不用把时间浪费在错误的事情上了。

想想你每天与之交互的系统。弄明白权衡取舍、替代方案、利弊,以及如何构建更好的系统。这一技能将助你在软件工程这条路上走得更远。

3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?

3年编程经验无名校背景,全栈小哥是如何拿下Twitter Offer的?

更多精彩推荐
☞时隔 15 年,苹果的自研 ARM 芯片为何能取代 Intel 处理器?
☞从微信「拍一拍」,我想到了那些神奇的一行代码功能
☞AI 又进阶!除了鉴别 PS 图片,还能一键卸妆!
☞无代码开发到底是不是伪需求?
☞程序员端午炫富指南~
☞Spring 从入门到入土——AOP 就这么简单!| 原力计划
☞硬核!国外开发者用 25 美元做了个区块链警佩相机!
你点的每个“在看”,我都认真当成了喜欢
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这