https://github.com/ghostrong/leetcode/blob/master/interview_summary.md
https://www.douban.com/people/summertracy/notes
计算机专业的校招基本结束了,距离自己的最后一个面试已经过了一个多月。大致记录一下从找暑期实习到确定offer 这个过程,算是做个总结,也希望能对后来的师弟师妹们有个帮助。
注: 我从年初开始渐渐建立了找北美工作的目标,所以准备工作大体上是围绕这个目标准备的。当时没有很大的把握,所以对国内IT公司的面试也或多或少做了些准备。另外,国内国外投的都是互联网公司。对于和我找工作目标相似的同学,本文应该更有借鉴意义。
前期准备
IT公司的校招基本是每年的8月到12月。国内公司在3月后可能还有一次春季校招,但规模相对较小。我大概从年初开始刷leetcode,当然也只是偶尔去刷几道。之前没有ACM竞赛基础,第一遍做leetcode时,有些题目花挺长时间才想出来,但基本上没有看其他人的答案。
3月份开始投暑期实习(其实已经不算早了,比如Google北京实习生在上一年年末就招满了)。因为目标是北美公司,所以除Google 外另一个比较好的选择就是微软。在大公司实习的好处是简历会好看一下,起码HR一看能知道这个公司。当时觉得投不那么偏学术的STC(互联网技术中心)更有利于之后的转正(后来知道,实际上在亚研院实习同样可以参加微软美国的转正面试)。
微软招聘好像不怎么看内推,当时找师兄内推了也没有HR理我,还是和其他人一样走校招流程。不过当时刚好有一个STC的团队招数据挖掘方向的实习生,比较对口。后来通过部门招聘比较快地进入微软实习。
对于找实习,部门招聘一般会比统一校招更快、更容易些,当然要求专业要基本对口。不过暑期实习也有优势。比如转正可能更“优惠”一些,流程更标准一些。而且部门招聘一般要求实习更长时间。
暑期实习的意义:一是在实习公司一般都有转正面试,对于国内公司,甚至表现好基本就可以直接拿校招offer了。二是校招是简历会充实些。实际上,如果之前有过比较好的实习经历或拿得出手的项目经历,暑期实习也不是必须的,拿这段时间刷刷题看看书也不错。
准备工作
对于中国学生来说,有机会的北美互联网公司基本就是三家:Google, Facebook, Microsoft。虽然也有人直接拿到过Linkedin 这样的offer,但毕竟是极少数,参考价值不大。这三家巨头最近几年都会直接从中国往北美招人,相对来说google 招人会更多一些(不代表简单), fb最少。当然,过几年是什么节奏还不一定。
今年的情况:谷歌和fb 从六月份就开始接受校招简历和内推,谷歌从8月份开始安排面试,fb是投简历后开始约时间电面,通过的话9月末统一在北京onsite 面试。微软比较晚,暑期实习结束后,9月底才开始国内的转正面,北美职位统一在10月20几号面试,但比较给力的是面试当天就会给结果。
开始暑期实习后,很难集中大量时间来刷题看书。我大概从8月份开始花较多时间准备面试。前一个月主要在刷题,还是leetcode 为主,Cracking-Coding-Interview(cc150)也看看。同时重点看看怎么用英文来解释一道题,这个看cc150 和leetcode 上的一些文章比较好。其他的,比如编程之美、剑指offer,也翻过,但没有详细看。
北美公司最注重三点:算法、编程、沟通,面试以算法题为主。也可能问到设计题,这个不一定,而且不太好准备,如果没有相关经验,除了网上搜罗一些文章看看,也没有太好的方法。谷歌和fb都不怎么问项目工作,微软问项目比较细。
国内公司面试比较杂,就我的体验,算法、编程在现场面试中反而考查得不多,基本做leetcode 就够了。国内公司会问各方面的知识,当然也会重点考虑简历内容,而且尤其注重实习和项目经历。比如我最常被问到的:“介绍你的一个项目”,然后开始一通问细节;大数据处理技术;机器学习算法;内存管理;开放型设计题;等等。笔试还经常会考C++(或java)细节、数据结构、概率论,等等。
开始面试后,为了应付国内公司的面试也做了一些准备。大概复习下C++语法(网上搜cplusplus tutorial), 看了Thinking in C++第一卷(看得不细),其他知识主要是看面经查漏补缺。同时,以前做过的项目要回顾下,至少选一个项目认真准备下,做到既能high-level 地介绍也能深入细节。
面试
按时间顺序概括一下我参加的面试,由于保密原则,不会涉及具体面试题目,只说一下面试流程和个人体验。仅代表个人观点。
阿里: 败得最惨的就是阿里面试。阿里比较看项目经历、是否做得深入,看你和面试官的团队是否match、能否很快上手,还要看他们是否“喜欢”你:) 校招前找人内推了杭州支付宝,接到阿里电话后本以为是随便聊聊约面试时间,后来才知道已经开始电面了,整得比较懵。问的东西很杂。然后正式校招时前面面得还好,都是聊天为主,最后一面有点儿聊不来。感觉风格不是很搭。
结果:看了下校招状态,没有offer也没有“不通过”,貌似还是备胎?
百度: 面试体验比较好。暑假期间面过NLP组的实习,只有一轮面试,问了些项目、大数据处理和NLP的知识,当时由于时间原因没有去实习。校招前有提前批面试,我直接联系了NLP部门经理。由于时间比较紧,只电面了半小时+HR面。主要问一下大数据处理和基础算法问题。
结果:offer
搜狗: 找同学内推,可以选两个志愿。后来有三个部门联系我去面试,本来我第一志愿是“网页搜索”,但是这个部门联系我时已经面过两个职位,实在不想折腾就放弃了。一般情况下,一开始有个笔试,紧接着是两个面试官同时面试,过后再约终面。但不同部门也会有区别。主要问项目、机器学习算法、编程,还有关于内存的题目。后来两个部门都给offer 了。
结果:offer
搜狐: HR在BBS发帖,于是直接找HR内推的。这个实在没什么好讲,第一面全程都是我在讲项目,面试官也没怎么问细节。第二面就聊聊他们要做的方向。
结果:offer
HULU: 找同学内推。HULU基本是之前国内最想去的公司,面试难度也比其他公司高(可能是紧张原因)。面试安排很规范,虽然onsite时略有压力。一轮电面,做了两道算法题,需要在线编程。三轮onsite,从早9点一直到中午12:30。三面都问了项目,简历相关的知识点,算法题,写代码。最后有一轮总监面,问算法题(偏智力题)和其他一些小问题(比如看了什么书)。
结果:offer
爱奇艺: bbs找人内推。三轮onsite面试,总体体验较好,除了等了较长时间。第二轮面试官态度较冷淡,另外两个都比较nice。问了项目细节,机器学习算法,写代码,数学题等。
结果:offer
Freewheel: bbs找人推过,但一样参加了宣讲会、笔试、面试,流程上没有差异。freewheel 校招十月中下旬才开始,由于已经拿到hulu offer,本来面试的动力已经不足。但结果证明fw 几乎是我面过的国内最有诚意的公司。比如宣讲会就拿到充电宝、森海耳机两个奖品:) 统一在清华笔试,考查内容还比较多:网络,概率,sql,数据结构,多线程,编程,算法,设计题等。面试反而比较easy,一共三面,最后一面是副总裁。面试官和hr 都很nice,还蹭了面试期间唯一的一顿免费午餐。面试都是在问项目,此外就是一些设计题、开放题。最后给的待遇也不错。
结果:offer
雅虎日本: 通过AHPR投的。投简历后有一个AHPR hr 的群面,就是聊一些行为学问题。然后是一个远程视频面,除了英文自我介绍,说中文即可,对方说日语,中国这边有翻译官。对方有两个人:技术+人事。人事主要问“为神马去日本”、“家人是否反对”、“未来规划”之类的,技术主要问项目,不算太深入。之后是日本面试官来北京onsite,一共两面,但是基本没有问技术。。。每轮还是技术+人事两个面试官,都集中在行为学问题,技术也只是简单问问项目、介绍他们做的方向。过几天后才会具体介绍福利待遇,从今年的形势看不是很给力,和国内对比吸引力不大(因为日元贬值太厉害)。总之,被问得最多的是“为什么去日本”。
结果:offer (在日本那边最终确认前已经拒了)
雅虎北研: 找师兄内推。投错岗位了,我比较偏工程,但投了个研究岗,招人很少且以博士为主。onsite 有三面,问了做过的项目、算法编程、数学题、机器学习算法、内存管理等等,问得都比较细。面完过了很久HR问我找工作进展,我说决定去谷歌美国了,然后就收到拒信了。 Update: 后来又联系我说可以提交到美国审批,之前是因为流程太长所以发了信。囧
结果:unknown (审批之前已经签别家了)
Facebook: 找师兄内推。两轮电面,时差原因,一般是早上7点或凌晨1点,还是比较有压力的。问的题目不难,但是由于开始得比较早,准备不充分,加上全程英语略紧张,第二轮电面发挥很差。电面题目leetcode 难度,一般问两道。可能要自我介绍、问一个项目。
结果:fail
微软美国: 实习转正。9月底有一个电面,主要像是考查知识面,问到了递归、多线程/多进程、编程语言、测试等,但都不深入,一共只有半小时。实习生转正只要两轮onsite(其他可能是3轮)。问项目+做题。可能因为和面试官方向不匹配,加上我的英文口语不那么溜,项目讲得不好,拖了较长时间,估计减分不少。每面都做了一道题,我都答出来了,但面试官可能不那么满意。(要练练用英文讲项目,表达时high level 些)
结果:fail
Google MTV: 找师兄内推。一轮电面,北美工程师。电面做了三道题,两道写代码,第二道没有写出最优解法。5轮onsite 面试(有一轮加面)。Google的onsite面试是平行的,没有递进关系,而且一般只有一面是英文面。我的第一面表现是最差的,紧张+准备不充分,题没做出来。第二面问了两道题,都比较简单,答得还算顺利。后来才知道前两面有一面表现好就可以进下一轮,有惊无险。第三面是老外英文面,英文沟通基本OK,题目问得不难但属于不熟悉的类型,后面的扩展没答好。第四面是自我感觉最好的,算法思路、代码和扩展都答得不错。后来加了一面,问得不难。整个过程没有碰到真正意义上的设计题。Google 重点看面试中有没有闪光点,所以光把题目做出来不一定就是表现好。
结果:offer
小结: 虽然有很多不足,但结果还算满意,拿到了国外国内最想去的offer。最后决定去Google美国。
推荐资源
这里推荐一些相关资源,有些不光对面试有帮助,对提高自己算法、编程水平也很有意义。有一些我可能忘记了,想起来再加上。也欢迎其他人补充。
- LeetCode : 必刷,建议做熟并总结归纳,不要依赖IDE。欢迎参考我的Solution
- Cracking the Coding Interview(cc150):网上有电子版,看第四版或第五版,建议熟悉每章习题,顺便学习用英文解释算法题。
- GeeksForGeeks 学习基础、高级数据结构,根据需要看相关题目和文章。
- HireIntech 关于算法、系统设计的讲解,不是很深入,随便读读
- C++ tutorial 复习C++ 基础语法和STL用法,也可作为文档查看
- Thinking in C++ : 了解C++语言知识,如虚函数、template。看英文原版,老外的书讲解很清楚。
- CareerCup cc150作者建的网站,有大量北美公司的面试题。
- 面经:看看总是好的,去网上找吧。
这些是我重点看的,如果时间充裕,还有很多很好的其他资源,有空我会再整理下。
结语
总的来看,外企的面试安排会更规范,体验比较好。国内的比较参差不齐,也有不错的。由于最后拿到了Google offer,所以对自己的整个过程和结果还比较满意。但其中也有很多不足之处:
- 准备过程断断续续
- 算法上还有漏洞
- 一些预期看的书没有看
- 准备、面试过程心态不稳
- 应该少花时间胡思乱想,不要老在网上逛、搜集一堆东西,沉下心来学习才是硬道理
最后,希望本文对准备找工作的朋友能有帮助,也给自己攒人品,希望后面的H1B抽签能顺利。 祝找工作的朋友们都能如愿。
欢迎关注这个关于找工作的github-repo,我会不定时更新。
欢迎提问。请ACM大牛们勿喷。
随意转载,请注明出处。