个人背景
1. 美国本科毕业,学校排名前30,拿了计算机科学学位和一个无关的学位。
2. 在美国中部某个不知名的小创业公司工作了1年,公司做CRM相关的Web平台。
3. 没有实习经验。
跳槽结果
面试了五家公司,其中四家给了Offer,包括有Amazon,Hulu和另外两家小公司,没有拿到Offer的那家是硅谷独角兽大数据公司Palantir。
1. Amazon
底特律分部:基本工资95k + 签约奖金38k + 搬家费2.5k + 市值77k的股票(分四年给)
西雅图总部:基本工资115k + 签约奖金40k + 搬家费2.5k + 市值77k的股票(分四年给)
2. Hulu
加州圣莫妮卡总部:基本工资120k + 签约奖金25k + 搬家费10k + 公司奖金40k + 个人表现奖金0~24k
3. 硅谷某中小型公司
基本工资110k + 签约奖金25k + 搬家费2.5k + 市值40k的期权
4. 南加州某小型公司
基本工资95k + 签约奖金25k + 搬家费2.5k + 市值50k的股票(分四年给)
(这个公司比较有趣的地方是每周五不用干活,可以自己研究感兴趣的技术,不用出现在公司。)
注:不同地区的生活开销、税收的不同,开出的offer不好直接比较,亚马逊的HR不停的跟我说他们底特律的offer性价比多么高,95k的基本工资相当于加州150k的基本工资。同理,换算成人民币的意义也不大。。。
面试经验
先简单说一下面试流程:投简历或者内推->HR电话聊天->在线做题->电话面试->现场面试
这是一般的流程,有的公司没有网上做题这一轮,有的公司电话面试有2轮甚至3轮,或者不用电话,而是要求你用skype和面试官视频聊天等等,下面我把每个步骤都简单讲讲。
0. 投简历/内推
简历筛选的重点是学位和工作经验(包括实习)
内推通过筛选的概率远远高于自己投简历
1. HR电话聊天 (15分钟左右)
HR介绍公司概况,你未来的职责等等,你介绍自己的背景,怎么知道这家公司的,为什么要申请这家公司等等。这一轮一般纯粹聊天,不用在意,但也有极个别的公司会在聊天中考察一些特定方面决定要不要淘汰你,比如我这次还投了Riot Games(开发英雄联盟LOL的那家游戏公司), HR问了我好多关于这个游戏非常专业的问题,我虽然事先专门花时间玩了两盘,还是被HR发现我其实不是该游戏的忠实玩家然后直接拒绝了我,原来他们只招特别爱玩这款游戏的人加入。
2. 在线做题 (1-2小时)
题目可能有选择题和问答题,最常见的还是一道或者两道比较费时的编程题,语言不限,题目的范畴一般就是基础的数据结构和算法。如果面的是特定职位,题目也可能不同,比如如果是面前端或者全栈职位,可能要求必须用JavaScript,并且问很多Web相关的知识。
Tips: 在线做题这个环节一般有固定题库,且更新不频繁,有机会在网上搜到先前的面试者透漏的题目信息从而事先准备。
3. 电话、视频面试 (1小时)
我印象中多数的公司还是电话面试而不是视频面试,有的公司进行Skype视频面试并不只是为了和你面对面沟通,还为了模拟pair programming的情境,比如对方会选择分享他的桌面给你看,让你看到他机器的环境配置,让你给他意见,告诉他为什么编译失败,应该怎么改等等。电话面试最常见的还是1-2道编程题目加上简单问问简历上的项目,极少数的情况会在电话里问你很基础的选择题。
4. 现场面试 (半天到一天)
一般分成四轮左右,每轮一小时,分别和不同的面试官面对面沟通,在白板上写代码讲解题思路,每轮只有一个面试官,如果同时看到两个面试官,多半是其中一个在学习如何当面试官,不用去理会。面试官通常是未来的同事,在你所申请的职位的同一个组里。面试主要考察技术方面的问题,也会考behavioral question 也就是行为方面的问题,比如“当你和同事意见不同时你会怎么办”这种,很多公司有一轮是由经理来面试,那么就很可能这一整轮都是behavioral question...
技术方面主要考察的就是算法与数据结构+面向对象设计+系统设计,对于应届生以及工作时间短的新手,设计题考的比较少,另外设计题因为需要在白板上写写画画才讲的清楚,前面的电话面试中基本不会碰到。
我工作了一年有余,亚马逊和Hulu的现场面试都是两轮系统设计,一轮算法题; Palantir是一轮面向对象设计,一轮系统设计,一轮算法题;其他两家小公司则从头到尾没有考我设计题。
除了这些主要的题型外,我还碰到过模拟code review的题目,即给你一段代码,让你找找bug, 或者是问你怎样写可以更简洁高效等等。
按照我上面介绍的面试流程从投出简历到拿到offer经常是一个多月都过去了,所以一定要计划安排好时间,另外面试除了实力也有运气的成分,所以最好多面几家不要只看准某一家,这样多拿几个offer以后还可以让公司们互相竞价。
准备方法
1. 简历一定要准备到位,首先简历不行的话即便内推都没有办法拿到面试,其次简历上的内容是面试官很喜欢问的,他可能会抓住你某个项目的具体细节问的非常非常深入。
2. 行为问题,准备几个常见的,比如“当你和同事意见不同时你会怎么办?”。
3. 要你回忆过往项目的问题,如“讲讲你碰到最难做的项目”,“谈谈你最近做的最有趣的项目”。
4. 算法与数据结构,这个是面试技术考察部分的核心,花一些时间把Leetcode的题目都做了,如果第一遍自己没有做出来那自然是要理解后再做第二遍第三遍的,题目虽然很多,但真正的知识点也就十来个,做题的目的是把这些知识点彻底掌握好,这样碰到新题也能做出来。
5. 设计题不大好准备,我的建议是多读别人写的面试经验,互相讨论这个设计题应该怎么解比较好,还有就是多读读技术博客。
最后
我们的母语不是英语,而公司聘请外国人的代价也要更高,所以求职的困难肯定是不小的,但克服困难的乐趣亦无穷不是吗 :)