根据北美Offer故事系列直播整理而成

点击回看视频

 

本文主要内容

1. 暑期实习申请时间线

2. 准备工作: 简历与面试

3. 面试: 进行时与后续工作

4. 拿到实习: 怎么做项目拿return offer

 

分享嘉宾

USC Computer Sicence 二年级在读博士,拥有 USC Computer Science Master 学位。现已获得Google Cloud Storage 和 Amazon AWS 实习Offer,曾以全职身份在AWS工作过一年。

大家好,我想和大家分享下两次找实习的经验及注意事项。因为自己开始找实习的时候走入过很多误区,希望大家在找实习的过程中能够避免这些问题,用更短的时间成功收获offer。

 

时间线问题

我在找实习的过程中有一个非常大的误区,刚开始不知道提早申请,一直不着急,等到春季才投简历,这样错过了很多非常好的机会。

秋季开学后,学校一般在9/10月份有Career Fair,会有很多公司来学校招聘,是非常好的申请时机,这时就要积极去投简历。很多大公司比如 Facebook,Google会到学校筛选一些比较好的简历,可能第二周就直接在学校里进行面试,这样会有非常大的机会直接拿到面试。

基本在12月份之前,申请大公司的简历就要全部都投出去了。但如果你没有在秋招时申请,等到11/12月,你会意识到自己错失了很多机会,看到有同学陆续晒offer,你却错过了申请的最佳时间,会感到非常大的压力。

 

 

申请前的准备

实际上,实习岗位比全职岗位要少很多。一般小公司每年招收实习生不固定,只有大公司每年会比较稳定地招实习生,比如Google,Facebook,Amazon这样非常大的公司,Uber每年招实习生的状况也不稳定。投简历首先要瞄准大公司,提高拿面试的概率。

一定要尽早提交申请。比如Google一年只招一百人,如果从9月份开始收集申请的简历并面试,当它发出一百个Offer,这一百人也接了Offer后,就不会再招人了。所以一定要把申请尽早投出去,这样不但更有机会拿到面试,而且拿Offer的可能性也更大。

要不停的练Coding技能。从申请开始,平时有时间一定多刷题,把题刷通。训练自己 Leetcode Medium题目读完之后,能在10分钟或15分钟之内把结果写出来,一般公司就问Medium难度的题目,如果你有时间,也要去刷更难的题目。当我们准备越充分,拿到Offer的机率会越大。

关于Leetcode刷题,由于题目非常多,很多同学学校课程负担比较重,所以没有必要一定把Leetcode全刷一遍。因为Leetcode有很多分类,比如DP问题,图的问题,树的问题,都有非常详细的分类。如果你时间不够,更好的方法是针对每一类型的题目,挑选大概十几题做,每个类型都覆盖到,这样就可以触类旁通,不至于当面试被问到一个题目,如果正好那个类型没有做过,会非常紧张。

 

 

聊聊简历准备

简历要非常简洁,一页纸必须涵盖最主要的信息,一般是你的教育背景,工作经历,学校做的项目。如果有工作经历,对拿实习面试会有非常大的帮助,没有工作经历也不用太过担心,毕竟大部分同学都没有工作经历,你可以突出在学校做的项目,项目用什么语言,重点是你做了什么,而不是简单陈述项目。在写简历时用比较强的动词开始,建议用总分的形式来写,要做到对简历上的项目的每一个点都非常熟悉。

自己写完简历后要让同学、朋友、前辈提建议。尽量做到擅长的技术栈、想投什么职位都能一目了然。我每次改了简历,会至少发给五个同学请他们看一遍,根据他们的建议再重新修改简历,因为每一个建议都很重要。

 

面试准备

面试之前看面经很重要。在Glassdoor或一亩三分地上找面试公司最近的面经,很多公司面试题的重复率会非常高,拿到面试官的题目,然后发现自己在之前准备过,那时候就完全不再慌张,会非常自信。

面试时一般公司都会指定在线写代码软件,比如谷歌用Google Doc,还有一些其他软件,公司都会给一个链接,让你提前测试面试时的Coding环境。因此在刷面经题目时,就尝试用它提供的软件 Coding,这样会使你在面试时更熟悉与放松。

面试一般有1-2轮 Phone Interview,从我的实习求职经验来看,大多数公司不会有Onsite面试,像Facebook,Linkedin大公司,可能也会有Onsite要求,但其实Onside和Phone Interview一样主要还是考察Coding能力。1-2轮Phone Interview通过后,如果没有Onsite,就可以直接收到Offer。

电话面试一般是45分钟,面试最多会有三道题,要做好心理准备。如果面试官问一道题目,你觉得非常简单,一定不要拖,要以最快的速度把那道题写出来。一般这种简单问题,如果不换题之后还会有followup,所以越快把题做出来越好。

第一类面试题是算法和数据结构题。我在谷歌实习面试时,第二轮问的题目是谷歌有很多server,计算一下每个server在过去1分钟,过去5分钟,过去60分钟,一共接收到了多少个请求。其实是让你设计一个数据结构,找到过去1分钟,5分钟,60分钟所有的请求。这些问题的本质都是算法和数据结构的问题,同时想考察一下你怎么把问题的本质抽象出来。

第二类面试题是Leetcode典型问题。我有很多同学都被问到Unique path,这也是非常典型的Dynamic programming问题。所以每一类Leetcode典型题都要准备好,因为面试官选题的时候,也会选择他比较熟悉的题目,所以你被面到典型题目的概率也会比非典型题的概率大很多。

第三类问题主要是DFS(Depth First Search)问题。问你从这个点到另外一个点有没有路径或者一些变种问题,这种DFS,BFS问题要非常熟练,用5分钟或10分钟就能写出来。如果这类算法问题没有办法很快写出来,那面试结果也不会特别的理想。

面试进行时

做好这些充足准备之后,面试时就要自信一点,不要过于紧张。面试的时候要注意:

 

一、解题思路非常重要

二、写代码的速度非常重要

三、交流能力非常重要

 

这三点都不能忽视。有些问题比较难,可能没办法一下把代码写出来,这时候你的思路非常重要,一定要不停的主动跟面试官交流,交流你的思考过程。因为毕竟是电话面试,面试官不知道你在做什么,只能通过声音来判断,如果你在屏幕上一个字不敲,面试官甚至可能认为你掉线了。

面试官根据不同题目对你的期待也是不一样的,对简单的题目他会希望你可以非常快的完成,但出了比较难的题目时,会重点考察你的思维能力。有些题目期待你在45分钟之内做出来,当然有些时候题目本身不是特别清楚,这时你不能盲目下手,一定要跟面试官交流,把题目的意思完全弄清之后,再开始Coding,不要一看题目,想都不想就直接开始写,写了一半,发现写不下去。所以在下笔之前一定要弄清楚题目到底是什么意思,主动的不停跟面试官交流,在平时Code或刷面经时也要锻炼自己说出思考过程。

当你明确题目意思后,要告诉面试官你解决问题的方案是什么。首先告诉面试官解决方案的时间和空间复杂度,问面试官这个复杂度是否合适。你想出了一个O(n)算法,但其实面试官期待Log n,这时你如果继续用O(n)就浪费了时间。

接下来描述算法的大概思路,当面试官给你提示或问题时,也要立刻反应过来,他在问什么,然后针对他的问题做出回应。

面试结束后

面试结束后,最好礼貌地感谢Recuriter给的面试机会并请他评价一下面试过程。

如果你还没有拿到实习offer,也不要灰心。多总结经验,面试多了自然而然就会熟悉流程,以后也能越来越轻松应对。每次在面试后总结一下,面试Coding速度或者跟面试官的交流过程,及时发现问题完善自己。

即使面试失败,也不要灰心。如果你表现得非常好,也有可能因为公司或其他原因导致被拒。很多事情我们无法控制,但如果你很优秀,即使实习被拒,他们也会有记录,当你再去投这个公司Full-time,他们会非常欢迎你。即使拿不到offer,在学校做RA或者回国实习也是不错的选择。

 

拿到实习后注意事项

拿到offer之后,首先需要做一些流程性的工作。关于Relocation,有的公司会直接给一笔钱,让你自己到那边租房,有的公司还可以帮忙找房。像Amazon给找的房子就很豪华,并且在公司附近。还要去办理Social Security Card手续。

拿到Intern后,如果干得好会给return offer。这样当第二年找Fulltime时候,压力会小很多。所以实习期间表现一定要好。

建议尽量去大公司实习,因为大公司流程已经非常规范和成熟了。比如我第一次实习在Amazon,它们Infrusture非常成熟,可以看到很多设计文档,根据设计文件就大概知道自己的Project对整个公司,对整个组的影响有多大,并且能够学到很多在学校学不到的知识。一般进组后,都会有一个Mentor/Host带你,需要你独立完成一个Project。然后他来评估你的能力或贡献。

 

 

当你拿到项目之后,第一件事情要了解清楚Scope。因为大公司有些Project如果想做可以做得非常大,你只有两三个月时间是做不完的。定好Scope之后你能每周都有进度,并在实习结束时做出一个presentation,描述你的项目到底做了什么,让别人一目了然。

 

写代码要非常标准成熟。因为实习不再像学生一样,写了Code没人看,上传好就行。大公司的代码是你走了之后别人仍需要看或修改,所以要写注释,让你的Code非常清晰。其实我在第一次实习时非常忽视这方面,第一次就直接交了两三千行代码让我的Host去看,他看到两三千行代码都不知道从何读起。应该逐渐提交代码,尽量不要一下把整个框架全部提交上去,要把不同分类,功能都抽出来单独提交。这样Host看代码时候也会非常清晰,而你提交速度也会越来越快,重新修改起来更方便。

 

在实习时间一定要把安排的Project完成。即使不能做完全部,90%的主要功能也要完成。因为即使你跟Host关系特别好,Code能力也很好,但最后项目做不完,就一定拿不到return offer。所以需要在一开始把时间规划好,保证你在两三个月之内可以把项目完成。如果速度快,你还可以开发更多的东西,或者自己去读更多公司的文档资料。

 

对项目有自己的思考。给你的项目可能只是个简单的想法,其实很多具体的东西都要靠自己去想。不要只干活而没有任何想法和改进。千万不要以为给你的项目看起来好像非常简单,就是直接实现一个小功能,当你把这个小功能和他们系统整合起来时,会需要注意非常多的东西。

 

在整个实习过程中和Host交流非常重要,处理好同组及公司同事的关系,为自己return offer争取更多机会。