根据北美Offer故事系列直播整理而成,回看视频

 

人物介绍

D同学,BitTiger后端直通车学员;国内EE本科,美国排名100开外大学EE硕士,项目背景比较弱,在BitTiger结课后1个月拿到硅谷科技公司SDE Offer。

本期内容

  1. 后端工程师学习之路:刷题,项目,基础知识
  2. 后端工程师求职之路:面试经验教训分享
大家好,先跟大家分享下我的求职时间线:我从今年1月开始认真刷题,因为去年忙着Master答辩,所以年初才开始刷题。当刷到3月底觉着差不多想找工作时,发现自己已经错过了春招,投的简历都没有什么消息,当时就比较着急。5月份毕业后,专心做项目准备秋招。从8月底开始投简历,最终用了2个月时间,大概在10月初拿到了硅谷公司的offer。

 

 

时间点在找工作过程中是非常重要的,特别是对于new grad。虽然码农的工作一年四季都有,但主要针对有工作经验的人在职跳槽,对于new grad,尤其是转专业的同学,肯定需要抓住春招和秋招两次机会。春招时间在1-3月,秋招时间在8-10月。明确时间后才能在关键时段投出简历,并且以此来制定学习计划,包括刷题和准备项目等。 

如何准备刷题

刷题语言用Java或Python都可以, 主要根据自己未来想做的方向进行选择。我选择的是Java,因为之前本科时有一点Java经验,所以学起来比较简单。Java主要做后端使用;Python现在比较火,适合全栈/大数据处理/AI方向; JavaScript主要是前端和全栈,比如Angular,Node.js类;其他语言也可以根据个人具体情况去选择。

我刷题主要用Leetcode,因为转专业所以Data Structure和Algorithms基础比较差,按类型刷先学习对应的基础知识,再刷相关的题目。先做Easy练手,Medium重点做,Hard看情况挑着做。

 

我在刷题初期情况

当时Easy难度可以做出来,Medium难度几乎都靠看答案,Hard难度不敢碰。有的题带着test case知道怎么解,但就是写不出code,这是一个困扰我很长时间的问题。有的Medium算法看了答案也不是很懂 ,这种情况下我会继续看youtube讲解视频,有些会讲的很详细,我觉着这个帮助还是很大的。

因为经常一大早上起来刷题,很多题做不好,连续几道做不出来时就很急躁,状态特别不好。有一段时间就怀疑自己是不是很笨,觉得自己或许不适合CS这行,那段时间特别受打击。

之后找周围有求职经验的朋友寻求帮助,问他们怎么刷题,我在网上也搜一些刷题的心得,发现非常重要的一点:如果遇到不会的题不要死磕。 可以先想5分钟,如果有方向就继续往下;如果10-15分钟后还没有思路,就直接看答案,不要浪费时间。看看别人的思路,理清解题思路之后再自己写Code。当然也在网上找了很多鸡汤,因为大家在找工作的时候都比较苦,然后不断激励自己,一直坚持下来。

 

我在刷题中期情况

躲过了最开始大概100道题的难关,之后刷题更顺了。后来每道题都当做自己在面试,先搞清楚Assumption,分析整体情况,理清楚思路,然后写Code,写完以后再去检查Corner Case,进一步分析时间,空间复杂度。一套题先解出来,然后再想有没有办法优化。因为实际面试大概都是这样的思路,如果你在平时解题练习时按照面试过程来,慢慢就会形成一个习惯性的处理,真正面试时不管新题还是老题,都不会慌。

当遇到Corner Case特别多的情况,我会把他们记下来。尤其刷第二遍时,会把相似的题目总结一下,比如DP类,动态规划类等。多总结多思考就会发现一些规律,当拿到新题时就可以朝那个方向去想。

我刷题用了3个月时间,大概300道做了2遍。主要是一些常考的题,比较难的题目因为时间比较紧张就没有刷。

 

如何判断自己的刷题程度呢?

因为Leetcode上的题目每周都会增加,可以去做一些新题。Easy难度的题可以15-20min做出来没有bug,Medium难度在10-15min有思路,30-40min写出来Code,,即使有一两个错误也可以。另外一亩三分地上经常有人分享面经,可以去做一做面经题,如果做的好可以增加自己的信心,如果做不出来也可以查漏补缺,弥补自己的不足。

 

补充项目与知识积累

我到投简历的时候,才发现自己的简历项目太简单,行内人一眼就能看出来没有技术含量。我尝试过自己做项目,也用了很多方法。

在Linkedin上看CS学生的简历,看他们简历中都放了什么项目,然后想根据他们的项目找思路,最后发现自己完全看不懂,因为有些要相关背景才能做,项目的描述其实也不是特别清楚。另外可以在网上找开源项目做,但开源项目一般都比较大,短时间比较难以入手,如果之前没有项目经验做起来确实也很困难。还有一种是从网上找Tutorial做项目,我之前简历上的1-2个项目都是在网上找Tutorial做的,比较简单并且技术比较老。我对自己该做什么,哪些技术比较火也不太清楚,就这样浪费了一个月时间,项目也没做出来。

 

 

后来5月份决定上BitTiger后端直通车专门做项目,三个月我85%以上的时间在做项目,因为想把项目了解的特别清楚,而不只是简单地写在简历上,同时也可以在Github上新加入很多东西。我最后的简历中一共放了5个项目,其中3个项目都是在BitTiger学习时做的。平时老师会讲到很多技术,对所有提到的技术,我都会把它记下来去查清楚这是什么,怎么用,关键问题是知道为什么用它,因为解决一个问题有很多技术可以用,但清楚每个技术的优缺点,什么时候用,为什么用,是非常重要的。因为之后自己做项目的时候,同样需要去做决策,去选择用什么样的Database,什么样的Architecture等。

另外有时间我就在LinkedIn上找一些Job description,去看这些工作需要哪些技术,然后去了解学习。

 

总结一下后端知识

  • Database
  • SQL: MySQL, Oracle, etc.
  • NoSQL: MongoDB, Redis, Cassandra
  • Frameworks: Spring (Java), Django/Flask (Python)
  • System Architecture: SOA, Microservices
  • Message Queue: RabbitMQ, Kafka, ActiveMQ, etc.
  • RESTful APIs: develop & consume
  • Cloud platform: AWS, Azure
  • Testing: Unit Testing, Postman
  • Production Support: KPIs

如何准备面试

接下来分享下自己从投简历到面试再到拿offer的过程:

我投简历主要是海投,选择和自己背景比较匹配的职位,如果不太匹配,即使门槛比较低我也不会去投。如果职位要求的50%以上我可以达到,不论公司大小与是否全职,我都会去投。因为当时想转专业第一份工作总是比较艰难,入门之后就会好很多。

找人内推比较少,找了两三个朋友帮忙,朋友内推比较靠谱。还有微信求职群里的内推信息,尝试了大概10多个,但可能因为自己的学校太差又不是CS背景,所以别人也不愿意内推我。也在Linkedin上找Recruiter进行自荐,尝试了一些效果不是很好。

我前前后后投了100份简历,投的比较少。刚投出去两周来了第一次面试,当时开始忙着准备面试,想着好不容易来了机会,不能错过,所以就一心准备面试,投简历也少了。

 

 

我的面试经历

当收到邮件后说有Phone Interview,需要做以下这些工作:

  • 熟悉自己的简历
  • 查Job Description中提及的技术
  • 了解公司文化,产品等
  • 准备自我介绍,简短的项目描述,做项目中遇到的问题及如何解决的
  • 准备问面试官的问题(所有面试中都有让提问)

 

下面是我的一次Phone Interview面试经历:

这次Phone interview没有考Coding,全是项目,让我描述了自己的项目,然后主要问了其中一个在BitTiger Capstone时做的基于Microservices的项目,问了我很多关于Microservices的知识,每个Service怎么工作,遇到的Challenge是什么,怎么解决的。面试官根据我的描述再继续问,很多实际问题该如何解决。我有一个Service是给用户发送邮件,他当时问我是怎么做,我回答用了Gmail做代理,他接着就问,如果每天发几百万封邮件,你的Server能处理吗?该怎么解决?我当时回答因为用的是微服务架构,比较容易升级,如果需求量比较大,可以多开几个去分担压力。然后他又问如果你发几百万封邮件,Gmail会不会block你?要怎么解决呢?我当时一下有点懵,大概想了想,然后回答说因为是微服务架构,可以用不同的账号,可以选择有些用Gmail,有些用Hotmail;或者可以减少给用户发送Email的频率,直接减少Workload。

整个面试过程中面试官会根据你的项目问各种各样的问题,这种在面试前很难完全准备好,还是考察对知识的灵活运用的程度。

 

 

也是这次电面之后,原本需要先Coding  Exercise再Onsite Interview,我当时比较着急,催了下面试进程,然后Recruiter告诉我不用Coding了,可以直接Onsite。我内心非常惊喜,Recruiter告诉我因为Hire Manager和Team Lead看了我的Github,觉着我写的挺好,所以就把这一环节给省了。当时我刷题所有的思路和Code都会放在Github上,跟着BitTiger做项目也会把设计思路放上去,还会写To Do List,细致完善地从设计到完成项目的整个过程都放进Github了。大公司面试比较中规中矩,因为网上有很多面经分享,思路和建议。小公司更需要自己去准备。我面试过一些小公司,个人感觉他们的算法题不会太难,Leetcode刷300道就可以,难度也不会超过Medium。面试时会非常详细地问项目和设计,怎么解决这样的问题,考察Problem Solving的能力。所以一定要非常熟悉自己的项目,简历上写到的技术可以灵活运用各种知识点。

面试过程特别注意的事情

  • 自信和放松,特别重要
  • 遇到之前没有做过的题,沉着冷静,可以先试着说一些思路
  • 沟通很重要,多跟面试官互动
  • 不懂的一定要问面试官,千万不要不懂装懂

总结自己犯过的错误和建议

错误一:没搞清楚求职季时间线,就知道闷头刷题,导致题刷好了,机会也错过了。

建议一:一定要明确Timeline,尽早做时间规划和投简历。

错误二:没及时找人看简历,自我感觉良好,准备投简历时才发现项目太弱。

建议二:找行内人帮忙看简历,及时发现问题,项目薄弱就边刷题边补项目。

错误三:对于如何Negotiate Offer一窍不通,谈Offer时完全不知道说什么。

建议三:提前了解技巧,做好准备。