2017年初北美CS求职纪略

先大概介绍一下我的个人情况:CS-related方向的PhD毕业,工作快7年。先后就职过几家大中规模的公司。目前在一家startup担任tech lead的角色。

由于这家startup公司近半年来进入了极度不稳定的状态,我在2016年感恩节前下定决心跳槽,并开始着手准备。

准备工作

1. Coding & Algorithm

头两个月的时间基本花在了刷leetcode上。截至本次面试结束为止,leetcode上的algorithm的题目482道。我的进度是:

  • Solved: 463
  • Attempted: 9
  • Unsolved: 10

Attempted表示我的算法、或者我能找到的算法没能满足leetcode的time requirement。

Unsolved则是因为我认为这些题目过于复杂,没有必要耗费太多的时间。当然,在大牛们的眼中这大概只是懒惰的托词。。。

2. System Design

大概从1月中旬开始,我又花了一个月的时间准备system design。主要是梳理自己近几年的工作经验,加上在网上查询各种资料。

我认为比较有帮助的两个链接:

  • Hired in Tech: 非常好的system design入门教程
  • High Scalability: 有很多大公司分享的设计思路

面试阶段

我从1月中旬开始电话面试。先后拿到了11家公司的on-site机会。


零售A

两年前我拿到过他们家level 5的offer,但是没有接受。这次改面level 6的senior position。recruiter帮我免掉了phone-screen。

面试前,hiring manager和recruiter就反复告诉我:A家对于senior position卡得非常非常严、bar很高、blahblah~。

我对于这家公司的印象一直一般。这次把他们排在了所有onsite面试的第一个,是希望可以找找面试的感觉。要是能拿到senior position的话,也会是一个很不错的back up plan。

On-site

6轮,每轮一小时:

  1. 美国白哥们,已经在A家做了11年的senior engineer。

    先聊了大概30分钟的behavior question。

    然后是一个design question。

    总体感觉面得很顺。

  2. 快40岁的老印,也是senior engineer。

    面试前,recruiter发给了我所有面试官的个人资料。我也在LinkedIn上查了下每个人的情况。当时最担心会出问题的就是这个老印。他和我之前在同一家公司工作过,只不过他是印度分部的staff engineer,比我在美国分部的级别高出不少。这次我面试的职位和他平级,我担心他会因此感觉不爽。

    事实证明并非我多虑。

    面试刚一开始,这哥们就对于我们一同就职过的那家公司大加贬低,说什么很多技术在那家公司里面都得不到应用,比如Spark/goLang等等。我很想提醒他,他提到的那些技术我们在美国的组里都有用到,而且这些情况也在我的简历上面写得清清楚楚。

    然后他给我出了一道coding question。

    我给出了正常的图论解法。但是这哥们突然说这个算法还要能实现roll back功能。这就有点麻烦。如果要实现roll back的话,这个算法的复杂度就会增大不少。他要求算法要尽可能得快,所以他并不满意我给出的算法。随后我们就开始讨论,直到他指出了一个他认为可以快速解决这个问题的方法。可是我很快就发现他说的算法有一个漏洞,并不能完全满足他自己提的要求。

    这就让人有些尴尬了。。。

    最后他只能要求我实现不需要roll back的一个function。code我在规定时间内写出来了。可是我们已经没有时间进一步地交流。

    这一轮的体验非常不好。

  3. lunch

  4. Hiring manager

    一个小时的behavior questions。

  5. 一个白人大叔,Staff engineer。已经在A家工作了8年。

    同样是20多分钟的behavior questions。然后是一个OO design的问题。

    整个过程比较顺畅。他提出来的各种附加要求我都给出了相应的解决办法。最后的提问和交流过程也比较愉快。自己感觉这轮应该问题不太。

  6. 一个亚裔的manager,staff engineer。

    一个结合了初级ML和大数据处理的题目,挺有意思。最后的解法和function实现得到了面试官的肯定。

    然后就是behavior question和提问环节。

总结

从tech上来说,A家的面试并不难。behavior question的比重高得有点奇怪。可能是因为这次面的是senior position吧,至少2年前面level 5的时候是没有这么夸张的。

整个面试流程,包括和recruiter的交流都是很顺畅和规范的,体验比以前好了很多。

最后A家没有给我offer。打听到的理由是:你的behavior question没有问题,communication也很好,tech question也都答上来了。但是!我们A家senior position的bar就是特别高,你不但要答上来,还要答得特别optimal、特别迅速、特别周到。。。

好吧,A家的傲娇我get到了。安静地move on~~~


Grab

这是一家总部在新加坡,面向东南亚六国的mobile端打车服务公司。他们家的名气可能并不大。但是这家公司在东南亚六国的市场地位类似于Didi打车之于中国市场。他们目前是市场的领先者,主要竞争对手是Uber。

他们家目前在印度、中国北京和西雅图都设有分部。西雅图办公室的目标主要是招聘有工作经验的工程师来帮助他们解决一些核心技术问题。

面试的第一步是和西雅图分部的经理进行一个小时的聊天。这个经理以前是在微软工作了20多年的distinguished engineer。从外貌看来似乎只有40岁上下,显得令人惊讶得年轻。整个人充满了激情,是那种性格很有感染力的人。

一个小时聊下来,他对我的技术背景比较认可,就给我安排了on-site面试。

On-site

  1. 中国小哥,好像是在新加坡毕业后加入Grab,并调到西雅图办公室的。

    一道coding题 + 一道design题

  2. 又是一个中国哥们。

    一道coding题 + 一道design题

  3. Director,应该是bar raiser。

    主要是一些关于我以前project细节的问题,以及一些design问题的深入讨论。比如:为什么我会选择某个技术,而不是另外一个,以及不同技术之间的pros & cons之类。

总结

总体来说,我对这家公司的印象非常好。可能因为Grab还是一家没上市的小公司,他们家对于面试者非常重视,也非常友好。整个面试中你能感受到的是诚意和尊重。这种感觉在大部分大公司那里是体验不到的。

另外,虽然面试的轮数不多,但和我交流过的这几个工程师、recruiter、以及西雅图办公室的经理给我的感觉都很好,属于比较务实和肯干型的团队。

Grab最后给了我offer。作为一家小公司,他们的package还是很有竞争力的。特别是cash部分,几乎是我拿到的offer里最大方的一个。另外,各种benefits和保险也都是行业内顶级的。

我还没有决定是否接受他们家的offer。不过这是我面试一圈下来,个人感觉最好的三家公司之一。对于渴望挑战和机遇的朋友,我真心推荐大家考虑一下Grab。


Zillow

严格意义上来说,这不是一家IT企业,更像是一家房地产公司。

On-site

非常有意思的一次经历。。。

  1. 美国白人小哥。他说他一开始是data scientist,后来越来越对工程感兴趣,现在就专注在工程上面了。

    问题是怎么样设计一个training model?

    因为我以前做过推荐算法,所以答得还算顺畅。但心里多少有点奇怪:我面的是engineer position,为什么要问我如何建模?

  2. 印度哥们。

    题目是OO design。

    题目不难,基本上要做的就是实现几个主要的class。其中可能会涉及到一些继承和重载。

    本来我的节奏是:先实现A class,再是B class,最后C class。

    可是比较让人无语的是,这个哥们一直在瞎指挥。A class还没来得及写完,就说:"let’s implement this function of B class first";B class写了一半又让我去实现C class的一部分功能;C class没写完又让人回到A class。。。

    总之是一通乱搅。

    最后总算是写完了,不过我严重怀疑这哥们平常做事逻辑混乱。

  3. 中国哥们。

    题目我记不太清了。但是他也花了很长时间来跟我讨论怎样building training model。还问我了解多少commonly used training models。我忍不住问他为什么要问这种问题,他的回答是:Zillow的engineer team和data scientist team分工并不明确。他们希望每个engineer都有独立建模和ML的能力,data scientist也应该有实现production code的能力。

    我只能说这个想法。。。嗯,非常宏伟。

  4. 印度美眉。

    她花了很长时间问我关于Spark的一些基本概念。我平常工作用到Spark的地方很多,回答起来问题不大。coding题目很简单。

  5. Hiring manager。

    主要是聊了些team的情况和公司文化,以及如果我加入的话会做些什么project。

总结

Zillow的办公环境非常高大上,不愧是搞房地产的公司。

面试流程也算是顺畅。

最后他们把我拒了。说实话,得知被拒的时候我多少有些吃惊。可能是我自我感觉太良好了吧。不过recruiter给出据我的理由之后我就释然了。因为理由只有一条:

有些coding question,我过快地jump into implementation,没有和面试官很好地沟通我的思路。

首先,我在写code之前绝对有和面试官交流,直到他/她认可以后我才会开始写。我也面试过很多公司了,这种rookie mistake我是不会犯的。第二,如果因为某些特别的原因想要据我的话,直接说就可以了,没必要整这些无聊的理由。


Quantcast

又是一家startup公司,总部在湾区,西雅图分部成立不久,目前的engineer数量还不足10个。

Phone-screen

  • 4道coding题

On-site

  1. 美国白人哥们。

    题目不太记得了,应该是leetcode原题。不是很难。coding以后又问了一些behavior question。

  2. 美国白人大姐。以前google的principal engineer。

    Design问题

  3. 美国白人哥们。

    coding题目

    coding写完以后又讨论了一些我以前做过的project。

总结

整体面试的体验只能说是一般般。

感觉他们家自视甚高。会不停地向你强调自己家招到的engineer都是来自其他知名公司,比如google/uber/facebook等等。这种行为略微显得有一些。。。有趣。

Quantcast最后给了我senior position的offer。还在考虑接不接受。


打车U

Phone-screen

  • 一道coding题

On-site

  1. coding & algorithm

    一道coding题目,要求现场编译。

  2. coding & algorithm

    一道coding题目,要求现场编译。

  3. Lunch

  4. 美国哥们。

    System design

  5. Hiring manager。

    Behavior question + past projects discussion

总结

U家的办事效率非常高。面完的第二天就收到了senior position的offer。

他们家面试的整体体验很好。面试中遇到的engineer的平均水平感觉也比较高。

能拿到他们家的offer我很满意。


手机A

手机A家的业务以硬件为主。但是他们家的软件业务这几年也开展得有声有色。我这次面试的是湾区的一个Applied ML组。选择面试这个组,一是因为目前市场上ML相关的技术越来越火;二是因为我对于A家的ML究竟会专注于哪一块有些好奇。

Phone-screen

和Hiring manager做的电话面试。原本计划一个小时的面试硬是聊了快两个小时。

毕竟是硬件公司,我被问到了很多关于底层硬件的问题。

又花了很长时间来讨论几个不同算法的优劣,以及不同算法各自适用于哪种场景?

最后是三道coding题。

On-site

面试分为8轮,每轮45分钟:

  1. coding

  2. projects & CS fundermental

  3. Hiring manager talk

  4. coding

  5. coding

  6. design

  7. design

  8. culture fit

总结

虽然面试已经过去了两周,还是请允许我吐槽一下这次神奇的面试经历。

这可能是我有生以来最差的一次面试体验,没有之一!

面试之前,recruiter给出的时间表是这样的:

  • 10:00am:面试开始
  • 01:30pm:面试结束

面试当天:

暴雨。
我9点半到达面试的办公楼。A家的人不让我进楼里面等,说只有面试官才可以把我领进去。
我只好在楼外面的屋檐下避雨等待。
等到10点没人来,打电话给recruiter,她说让我打给operator催。
打给operator,operator直接把电话转给第一轮面试我的人,没人接电话。
再打给recruiter,她去催了半天,回电话说面试我的人马上下楼。
又等了十几分钟,快10点半了,面试我的人才开车赶到,撒着拖鞋慢悠悠地从楼外面的停车场走过来。
然后一直面到1点多,没人提管我吃午饭的事。
因为之前recruiter说是面试到1点半结束,我以为我很快就可以走人去吃饭了。
结果又接连来了三个面试官,也都不提吃饭的事。。。
倒数第二轮面试的时候我脑子已经不清楚了。那哥们问我有什么想问他的,我就问了两个问题:

  1. 你是最后一轮了吗?
  2. 你们A家面试的时候不管人午饭是吗?
    然后这些人才给我找了一个冷三明治,边吃边把最后一轮面了。

他们家最后给了我offer。不过还是要说:整个面试流程能混乱到这个地步也是没谁了。


求职L

L家的面试是recruiter通过他们家自己的平台联系上我并安排的。从开始电面到完成on-site的效率很高。

Phone-screen

  • 3道coding

On-site

7轮,每轮1小时。

  1. Design

  2. Hosting manager talk

  3. Lunch

  4. coding

  5. design

  6. algorithm

  7. coding

总结

最让人疲劳的on-site。早上10点开始,下午5点结束。面试完了回到酒店以后感觉整个人都不好了。

只要面试过程中能和面试官有比较多的交流,我就能对这个面试官的水平有个大概的把握。我觉得L家的工程师的整体水平还是很不错的。能感觉出来他们做了很多非常solid的work。听说他们家这几年流失了很多大牛,但看来技术积累的底子还在。另外,和我聊天的好几个面试官都是open source project的active contributors。个人比较喜欢这样的公司文化。

L家最后给了我offer,具体数字暂时不详。


社交F

Phone-screen

  • 一道coding

On-site

  1. system design

  2. coding

  3. coding

  4. lunch

  5. culture fit

总结

F家的面试题并不是很难,也都是leetcode上的原题,或者是在原题的基础上做了一些小的改动。

第二轮,我解题的速度稍微慢了一点。面试结束后自己唯一感觉没发挥好的也就是这一轮了。

比较有意思的是recruiter的表现,值得说一说。

这个recruiter(姑且称他为C吧)大概在16年11月主动联系过我。C希望我可以去面F家的一个data engineer的position。我对于data engineer完全没有兴趣,加上当时我还没有准备好开始面试,就没有明确地答复他。只是说如果以后有需要的话再和他联系,并把自己的简历发给了他。

今年2月准备开始面试前,我通过在F家的朋友把简历投了上去。结果等了足有两周也没有F家的recuriter联系我。那时我才反应过来:有可能是因为C握有我的简历,其他rucruiter看到我的case已经有人处理,就不再联系我了。

我只好主动找到C,说明我只想面SDE职位,希望他可以帮我安排general hire的面试。他当时表示没有问题,然后就有了上面提到的面试经历。

比较奇怪的是,面试3天后,C打电话告诉我说:"Since in one round of the interview, you did not provide the optimal solution quickly enough, this team would not give you an offer as an SDE, but would like to provide you a data engineer position."。还说这个data engineer team做的东西很偏software engineer work,并且这个组几个月后就会转为software engineer team云云。

我的几个想法:

  • 首先,明明说好是general hire,为什么变成了"this team would not give you an offer"?

  • 第二,绕了一大圈子又回到了data engineer position,很难不让我觉得这个过程有些奇怪。

  • 第三,“这个DE team很快就会转为SE team”的这种鬼话还是拿去骗鬼吧。

最后,我和他挑明了态度:我已经有了好几家的offer,如果可以转为SDE我就会很有兴趣,不然的话就免谈了。他表示无能为力,我也就发邮件表示了感谢结束。

我不敢很武断地说这个recruiter一定有问题,也不想把面试的失败归咎于此。毕竟第二轮coding我完全可以表现得更好。只是想提醒一下对他们家感兴趣的朋友,如果能通过内部refer提交简历的话,尽量避免把简历发给一些隶属关系不确定的recruiter或者sourcer。也许是我多心了,但是小心一点总不会有错。

抛开略显奇怪的recruiter,F家的面试体验还是很不错的。面试的过程比较顺利,聊过的工程师都比较友好,题目的难度也算合理。

我以前也面过F家,结果在所有tech interview rounds都拿到positive feedbacks的情况下因为一个奇怪的原因被拒。这次也多少有些遗憾。可能自己和他们家缘分不够吧 :(


搜索G

通过朋友refer拿到面试,并且免掉了电面。

On-site

一共6轮:

  1. coding

  2. system design

  3. lunch

  4. coding

  5. coding

  6. coding & algo

总结

G家是我面试这么多家公司下来,唯一一个面试刚结束我就知道肯定没戏了的公司,也是唯一一个我遇到了完全找不到解题思路的算法题的公司。

这可能就是G家的风格吧。毕竟,这种规模的公司不需要太注重应聘者的工作经验,除非你牛得惊天动地。

一般情况下,无论你的背景和经历怎样,都可以在G家里找到和自己的水平相匹配的职位。这样一来,当coding成为主要、甚至是唯一的评定标准的时候,碰到一些高难度的题目也算正常。

至于面试者喜不喜欢这种风格,只能是因人而异吧。

最终结果果然不出所料。


社交S

2017年初整个北美IT界的明星。

以他们家目前的状况,简历都是递不上去的。多亏我的一个朋友是他们家的元老,才帮我争取到了这次面试。

Phone-screen

  • 一道coding题

On-site

  1. coding

  2. coding

  3. Lunch

  4. design:怎么设计S家的一个app功能。涉及到存储、service layer等多个模块。聊了很多S家产品的特殊性,以及这些特殊性所需要的独特设计。很有意思的一轮design。

    如果要说自己这一轮的表现有什么不足的话,大概就是对于几个design的细节,自己都是先从最常见的设计思路谈起,而没能一开始就考虑到S家产品的特殊性。虽然在面试官指出之后自己都给出了相应的解决方案,但是可能会给面试官一种我不是特别熟悉他们家产品的印象。

  5. coding

注:他们家的面试是需要现场编译代码,并运行通过的。

总结

我面试完的第二天他们家就在纽约敲钟了。恭喜内推我的朋友financial free。

他们家的产品很有特点,面试过程中也会针对这些特点聊到很多设计细节。所以面他们家的朋友最好在面试前多熟悉一下他们的app。

感觉不太好的地方是他们家recruiter的办事效率。也许是因为他们家正处在IPO期间,recruiter的效率着实感人:从电面完到通知on-site足足等了10天,这还是中间发邮件催过的结果。面试完的当天,recruiter说第二天就给我feedback,最迟三天内也会有结果。到今天已经一周了,依然音信全无。因为手上其他offer有deadline,我只好发邮件再去催。recruiter回了个消息说晚上再打电话给我确定的答复。现在8:50pm,依然没有消息。

只好继续等/继续催了。。。


贴图P

通过朋友内部推荐拿到的机会。

开始联系他们家的时候我已经收到了其他家的几个offer,为了赶上进度,recruiter让我直接on-site。

On-site

  1. coding

  2. coding

  3. Lunch

  4. design

  5. algorithm

  6. culture fit

注:他们家面试的coding题也是是需要现场编译运行的。

总结

他们家的面试今天下午才结束,具体结果还不清楚。自己感觉面得还算不错。等结果吧。

你可能感兴趣的:(2017年初北美CS求职纪略)