当前位置: 首页 > 编程日记 > 正文

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

作者 | zhiachong

责编 | 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,因为它易于阅读,易于解释,并且还有一堆内置的数据结构。

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

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

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

推荐阅读
  • 高文、张钹、杨强隔空论道:AI精度与隐私的博弈

  • 90行Python代码,让张小龙的微信地球转起来

  • 独家揭秘!抖音爆款漫画变身特效的背后技术

  • 字节跳动 8 年,抖音、头条的技术能力开发者都可以用起来了!

  • 从微信「拍一拍」,我想到了那些神奇的一行代码功能

  • 4 张图读懂比特币矿商8年兴衰与变迁

你点的每个“在看”,我都认真当成了AI

相关文章:

Sco Unixware 7.1.3企业版服务器安装视频教程

Sco Unixware 7.1.3企业版服务器安装视频教程 UnixWare 7.1.3是最先进的工业标准Intel和AMD处理器系统运行平台。UnixWare 7.1.3是关键业务解决方案的可靠基础,具备可伸缩性、可靠性、安全性突出和物美价廉的特点。其中UnixWare 7.1.3企业版为中高端数据库服务器及应…

牛!Python 也能实现图像姿态识别溺水行为了!

作者 | 李秋键责编 | Carol封图 | CSDN 下载自视觉中国众所周知随着人工智能智能的发展,人工智能的落地项目也在变得越来越多,尤其是计算机视觉方面。所以今天我们也是做一个计算机视觉方面的训练,用python来判断用户溺水行为,结合…

Asp.net中多项目共享Session

1. 建立一个空白解决方案blank solution,如:d:/MyProject/MyProject.sln 2. 在d:/MyProject下建一个Web Application的根目录d:/MyProject/WebMis并设为http://localhost/WebMis的虚拟目录 3. 在WebMis目录下根据模块分别新建目录,如&#xf…

JQuery模板插件jquery.tmpl-动态ajax扩展

在上一篇JQuery模板插件-jquery.tmpl中介绍了这款插件。有时我们需要去动态的ajax去加载模板,或者数据,根据url参数或者其他信息加载不同的模板,数据。在我的某个项目中有这个需求,所以特地写成jquery工具函数,加入了本…

《JAVA-枚举》

2019独角兽企业重金招聘Python工程师标准>>> 枚举:枚举在C/C/c#/java中,是一个被命名的整型常数的集合,枚举在日常生活中很常见。 表示星期的SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,就是一个简单的例子 既然讲了枚…

在ASP.NET中使用WINDOWS模式登录SQL数据库

作者:未知 请作者速与本人联系经常发现有用户使用WINDOWS模式登录SQL SERVER,结果失败,提示: 用户 KEKC/ASPNET 登录失败。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有…

时髦而精巧的Iphone墙纸收集

Iphone5如此的流行,我觉得我们有必要为我们的读者收集一套时尚的iphone墙纸。 知道设计和开发社区是多么喜欢装饰他们的移动设备,我们收集了各大社区最好的iphone墙纸,帮助你更好的装饰你的iphone设备。 因为有如此多的墙纸设计,我…

谷歌排名第一的编程语言,死磕它这两点,小白也能学的会!不信你看!

谷歌排名第一的编程语言时什么?毫无疑问:肯定是 Python。也难怪,作为大数据时代和人工智能时代的必备语言,Python 的优点太多了,语言简洁、易学、开发效率高、可移植性强......另外,更牛的地方是目前最热门…

UVA11059 Maximum Product

问题链接:UVA11059 Maximum Product。基础级练习题,用C语言编写程序。 题意简述:输入n个整数序列,有正有负,求这个序列中最大连续累乘的子序列,其最大的值为多少。如果结果为负数,则输出0。 问题…

.NET代码的保护

1没有绝对的保护 加密和破解都相对的 2用vs2002/2003/开发的代码 删除.cs/.vb文件只留 .dll和.aspx可以达到加密若要加密.aspx 可以把.aspx代码写入.csvs2005 beta1可以连.aspx都打包 3但是 dll还可以被反编译 所以高级的是加入混淆器不过这样也不是绝对的还是可以反编译混淆…

走向DBA[MSSQL篇] 面试官最喜欢的问题 ----索引+C#面试题客串

对大量数据进行查询时,可以应用到索引技术。索引是一种特殊类型的数据库对象,它保存着数据表中一列或者多列的排序结果,有效地使用索引可以提高数据的查询效率。大家面试初级、中级或者高级程序员的时候应该大部分都会被问到这样一些问题,你了…

“编程能力差的程序员,90%会输在这点上”谷歌AI专家:其实都是瞎努力

最近几年,我看过市面上很多 Python和人工智能的教程和书籍,它们大都这样讲:先从 Python 人工智能的历史讲起开始,再介绍的基本语法规则,Python 的 list, dict, tuple 等数据结构,最后学习机器学习、深度学习…

查询表空间使用情况

2019独角兽企业重金招聘Python工程师标准>>> SELECT a.tablespace_name "表空间名", total "表空间大小", free "表空间剩余大小", (total - free) "表空间使用大小", total / (1024 * 1024 * 1024) "表空间大小(…

一只端午节鸭蛋粽子的背后:AI 与农业

作者 | 硬核云顶宫责编 | Carol封图 | CSDN 下载自视觉中国今年的端午节,食品界的营销鬼才五芳斋又发了最新广告——《朋友们蘸起来》,这则视频通过一种科幻大片的风格展示了农业与科技的完美结合,可以说在一只端午节粽子背后有AI的养猪、种的…

一些实用的 Javascript 代码

οncοntextmenu"window.event.returnvaluefalse" 将彻底屏蔽鼠标右键<table border οncοntextmenureturn(false)><td>no</table> 可用于Table <body onselectstart"return false"> 取消选取、防止复制 οnpaste"return fa…

围观文件穿越操作

1. 打开文件用IoCreateFile&#xff0c;其他比较好发irp的&#xff08;比如删除操作&#xff09;走FSD irp 删除文件部分处理了删除正在运行的exe镜像部分&#xff0c;做法是方法是IAT Hook MmFlushImageSection 但是这样对于独占文件依旧不能处理&#xff0c;只好等到关机…

图论 - 欧拉回路

Description 欧拉回路是指不令笔离开纸面&#xff0c;可画过图中每条边仅一次&#xff0c;且可以回到起点的一条回路。现给定一个图&#xff0c;问是否存在欧拉回路&#xff1f;Input 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数&#xff0c;分别是节点数N (…

学习 Linux,101: 引导系统

2019独角兽企业重金招聘Python工程师标准>>> 系列文章&#xff1a; http://www.ibm.com/developerworks/cn/views/linux/libraryview.jsp?search_by%E5%AD%A6%E4%B9%A0linux101 从 BIOS 到运行 Linux 系统 引导顺序 在我们深入了解启动加载程序&#xff08;比如 LI…

用Enter键取代tab键

1. this.TextBox1.Attributes.Add("OnKeyPress","<script>if keycode13 keycode9; return false;</script>");2. <input typetext οnkeydοwn"if (event.keyCode 13) event.keyCode 9;">

程序员:我受够了!不想再在小厂里干Java了!

你是否熟悉这样的情形&#xff1a;每天10点到公司&#xff0c;打开电脑&#xff1a;10个小时的增删改查&#xff0c;搬砖写代码的一天就这样开始了。刚毕业时候的你踌躇满志&#xff0c;按照自己的原定计划&#xff0c;这时候应该混到了阿里P6。可现在在小厂苦苦挣扎&#xff0…

iOS中UISearchBar(搜索框)使用总结

2019独角兽企业重金招聘Python工程师标准>>> iOS中UISearchBar(搜索框)使用总结 初始化&#xff1a;UISearchBar继承于UIView&#xff0c;我们可以像创建View那样创建searchBar UISearchBar * bar [[UISearchBar alloc]initWithFrame:CGRectMake(20, 100, 250, 40)…

Linux常用性能检测命令

一、uptime Uptime命令的显示结果包括服务器已经运行了多长时间&#xff0c;有多少登陆用户和对服务器性能的总体评估&#xff08;load average&#xff09;。load average值分别记录了上个1分钟&#xff0c;5分钟和15分钟间隔的负载情况&#xff0c;load average不是一个百…

怎样把DataGrid存放在ViewState中的无用数据卡掉

作者&#xff1a;无间道的博客http://www.cnblogs.com/wangsaokui/articles/10031.html 怎样把 DataGrid 存放在 ViewState 中的无用数据(有时候确实如此)卡掉&#xff0c;大家知道&#xff0c;一般而言DataGrid在ViewState中会存放表格中的所有数据&#xff0c;这样会导致View…

深度学习先驱 Yann LeCun 被骂到封推!AI 偏见真该甩锅数据集?

整理 | 夕颜出品 | CSDN&#xff08;ID:CSDNnews&#xff09;最近&#xff0c;人工智能领域又发生了一次热热闹闹的争论&#xff0c;随后演变成一场偏离轨道的争吵&#xff0c;目前以 Yann 道歉封推暂告一段落......争论来龙去脉这次争论的主角是图灵奖得主、人工智能标杆性人物…

JS加强学习-DOM学习01

JavaScript由三个部分组成&#xff1a;ECMAScript、DOM、BOM。前面已经学习了ECMAScript中的基础内容&#xff0c;现在可以开始学习DOM部分了&#xff0c;在DOM中更多的是实际效果的展现。 1. DOM定义 DOM&#xff1a;document object model 文档对象模型 它是将整个页面文档封…

android 游戏引擎libgdx demo cuboc分析

开始学习android游戏开发也有一段时间了,挑选libgdx这个游戏引擎来进行学习和开发。Libgdx是一款支持2D与3D游戏开发的游戏类库,并且它是夸平台的。例如你可以在windos下开发&#xff0c;同样的代码也可以运行在android上。 刚开始学习这个游戏引擎可能会感觉无从下手&#…

倒计时1天 | 张钹院士领衔,AI开发者大会20大论坛全攻略!

2020年7月3—4日&#xff0c;由 CSDN 主办的第三届 AI 开发者大会&#xff08;AI ProCon 2020&#xff09;&#xff08;大会官网&#xff1a;https://aiprocon.csdn.net/&#xff09;将以线上直播的形式与大家相见。本次大会历时2天&#xff0c;一次性设立6大主题、20大精彩分论…

在页面中导入文件

1. <% Response.WriteFile ("Yourfile.inc") %> 2. Server.Execute("Yourfile.inc")

How Tomcat works — 四、tomcat启动(3)

上一节说到StandardService负责启动其子组件&#xff1a;container和connector&#xff0c;不过注意&#xff0c;是有先后顺序的&#xff0c;先启动container&#xff0c;再启动connector&#xff0c;这一节先来看看container。 目录 Pipeline和VavleStandardEngine类和Standar…

DataList分页

<% Page Language"C#" %> <% Import Namespace"System.Data" %> <% Import Namespace"System.Data.OleDb" %> <Script Language"C#" Runat"Server"> /* Create By 飞刀 http://www.aspcn.com 20…