在美求职奇幻旅程,软体工程师来分享
2020-06-27
在美求职奇幻旅程,软体工程师来分享

编按:作者为 Kenji Chao,讲述他在美国拿到硕士学位之后,找寻软体工程师职位的经验,提供有志在硅谷工作的人,了解不同公司面试的过程和体验。

故事的开始

2016 年 8 月,结束了在华硕将近 3 年的研替,告别了在 Moska Studio 的创业伙伴们,来到美国加州就读 CMU 硅谷校区的 Master of Science in Software Engineering Program,开始了人生第一次长期待在国外的生活(如果出差不算),对我申请学校的过程有兴趣的人,可以参考去年我发在 PTT 的录取文:[录取] CS CMU/Cornell Tech/Columbia/UC Davis。

按照正常时程,这个 Program 要唸 4 个学期为期 16 个月,毕业规定是要修满 8 门课 96 学分,其中第 3 个学期是给同学们自行去找公司实习的,所以大部分跟我一样在 2016 Fall 入学的人都是预计 2017 年底毕业。但考量到我已经有 3 年以上的工作以及创业经验,加上当时想来美国的目的就是为了工作,学校对我来说最好最棒最大的优点就是给我合法留在美国的身分,于是在来之前我就决定要两个学期内修完 8 门课然后在今年 5 月毕业,并且同时找毕业后的全职工作。

在这样的时间压力下,同时要兼顾课业以及找工作绝对不是件轻鬆的事情,中间有好几个月不分週末,我除了吃饭睡觉以外,不是在学校刷题、投履历、準备面试、电话面试、写作业,就是在其他公司面试,经过了几个月的努力,从 10 月中开始的 5 个星期内面了 6 个 On-site Interview,拿到了其中 4 个 Full-Time Offer,这时开始心情就轻鬆了不少,学期一结束抽空回去台湾两个星期,中间去日本玩了几天然后回加州后又 Road Trip 去了 LA 玩了 5 天,1 月时把剩下的 3 个 On-site Interview 走完,当时抱着轻鬆的心情去面了一直以来最想去的公司── Square,整体面试体验很好,跟未来的主管及 Engineer 聊得很开心,最后顺利拿了 Offer,在 2 月初时签约,结束了美国找工作的奇幻旅程。在这过程中接受了很多朋友们的帮忙,也累积了很多心得,为了让记性不好的我在未来还是能够回忆这些心得,在这边记录下来,希望对大家有帮助!

各公司面试心得

面试结果:

Offer Get:Square、VMware、Indeed(Seattle Office)、MemSQL(旧金山 Startup)、Veritas

On-site 以后被拒:Google、WhatsApp(Facebook)、Coursera、Tubular Labs(Mountain View Startup)

电话面试后被拒:Uber(无声卡)、Palantir、Microsoft(On-campus)、DJI、Qualtrics

履历被拒或是无声卡:Facebook、Airbnb、Apple、Amazon、Lyft、Dropbox、Snapchat、Stripe、Zillow、Expedia、Yelp、Booking.com、Glassdoor、Quora、Twitch、Tesla、Cisco 等族繁不及备载。

其他:Twitter(OA 以后填完问卷无声卡)、Riot Games(跟人资聊完觉得不适合)、Playground(一间还在酝酿中的 Stealth Startup,聊完发现不适合)

Square在美求职奇幻旅程,软体工程师来分享

投履历方式:内推
面试流程:Recruiter 聊天→电话面试 2 关→On-site 面试 6 轮
结果:Offer Get

Square 这间公司一直是我最想去公司的前三名,我的前三名分别是 Airbnb、Facebook 跟 Square,原因是 Square 在 Android 开发者圈,提供了很多很好用 Open source 的 Library,连 Google 都会用,所以我几年前在写 Android 的时候就已经知道这间公司,觉得他们的 Android Team 真的很强很有心还把这些东西 Open source 回馈给开发者们,尤其是 Jake Wharton,应该是很多 Android 开发者心目中的神!

有别于其他公司採用白板面试,Square 的面试是用 Pair Programming,面试官会跟你一起坐在电脑前,挑选你想用的语言用你习惯的 IDE 来 coding,通常面试官一开始会提供 Starter code,接着你们会开始讨论这个问题以及可能的解法,确认想法没错以后就开始 coding 了,面试官会在 coding 的过程中适时协助你或是 code review,我真心觉得这样子的面试方式比较接近真实工作的样子,尤其对于白板字非常丑的我来说,能用 IDE 解题简直开心,Square 的面试问题比较生活化一点,他们会把相对枯燥的演算法问题包装成应用问题,面试官也都非常乐于沟通,让解题的过程变得满有趣的!

内推后先跟 Recruiter 聊天,接着是 2 关电话面试,因为我个人比较喜欢 On-site 可以直接跟面试官互动,所以这 2 轮电话面试我都主动改成了 On-site。我的第一个 Phone Interview 是我整个面试过程中表现最差的一轮,差一点就被刷掉了,面试前一天我去参加 Tech Inclusion Career Fair,然后入住旧金山一间满简陋品质很差的饭店,当晚睡不太好隔天的面试又被安排在早上 9 点半,面完的当下我自己觉得表现非常 marginal,被拒绝也不意外,幸好运气不错,还是有下一轮的机会,事后 Recruiter 通知我拿到 Offer 的时候,也说我让他非常印象深刻,因为他记得第一个面试我的 review 不到非常好,我肯定是下了很多努力才让后来的面试拿到 sharp review。

正式 On-site 当天,Bart 因为有班列车没有动力,造成 System-Wide 停驶,在 Bart 站乾等了 30、40 分钟,最后面试时迟到约莫 15 分钟,当时也没太紧张,就跟 Recruiter 预告一下我会晚到,不至于让第一个面试官等太久,当天面完去跟我朋友聊的时候才发现我好像被当成了 Experienced Hire,因为 Square New grad 的 On-site 通常只有 2 轮的 Pair programming interview,但我当天总共面了 6 轮,3 轮 Pair programming,1 轮 System design,1 轮 Resume deep dive,最后一轮跟未来的 Manager 聊天,面完隔一个工作天通知拿到了 Offer,效率超高!

Google在美求职奇幻旅程,软体工程师来分享

投履历方式:内推
面试流程:OA 及问卷→On-site 面试 4 轮
结果:面试 Positive Feedback,被 Hiring Committee 拒绝

内推以后隔天收到 OA,题目是一般的演算法题不会太难,立马做完以后隔天收到 On-site 的邀请,但是 Recruiter 以为我是 CMU 总部的学生,所以信中说要帮我安排匹兹堡的 On-site,我跟她说我人在加州,提供了我可以的时间以后请她安排 Mountain View 的 On-site,结果过了一个多星期,收到正式的 On-site 通知,结果居然还是帮我安排在匹兹堡……再度问 Recruiter 能不能安排我在总部面试,「No problem, we are working on rescheduling you in our Mountain View Office.」但我原本指定的时间不行了,于是重新安排,过了一星期才搞定 On-site 的安排,觉得 Recruiter 有点不专业。

Google 面试(前)的过程可以说是最戏剧化的,面试当天,睡饱饱精神好,準备要出门前接到一通电话,对方声称来自加州 Police Department,说我犯了什幺罪要我配合进行调查,接着电话转到 FBI,说我犯了一个很严重的错误,要我核对一些资讯,当下其实满紧张的,不过对于我到底犯了什幺错,他说不上具体的原因,只回:「You have no idea what you have done!」当下只觉得 WTF,要调查我也说清楚原因麻,我跟他说我 30 分钟后有一个很重要的面试,可不可以晚点再讨论,对方回:「Mr. Chao, this is very important! You have to cancel your interview.」听了以后拳头都硬了,然后一直鬼打墙说要调查我但又不说为什幺,后来我实在受不了了,直接挂电话然后出门面试。

最后到 Google 的时候,距离面试开始还有 5 分钟,但没想到第一个面试官已经在 Lobby 等我了,没有时间去想刚刚的那通电话,迅速整理一下心情就上啰!Google 的面试官不太会针对履历问问题,流程大概就是先介绍自己 Team 在干幺,然后就开始解题,最后留个几分钟让我发问,这 4 轮里头只有 1 轮比较像是 LeetCode 的题目,其他比较像是平常工作上遇到的 Engineering Question,或是没办法在 45 分钟内写出最佳解的问题,所以我觉得更看重的是跟面试官的沟通以及面对难题的思考逻辑,这几轮面下来除了 1 轮我觉得还可以再更好以外,其他 3 轮解题都颇顺,虽然偶尔会犯一点小错,但都有及时修正整体聊天也聊得颇开心。

面完过了一星期,Recruiter 通知 Positive feedback,要我提供成绩单跟最新的履历,过两天要送 Hiring Committee 审核,这边补充一下 Google 的 Hiring Process,在 Google 面试你的面试官没有办法决定你会不会录取,面试完以后面试官会花点时间写对于这个人的面试评价,然后提交给 Recruiter,由 Recruiter 根据 Feedback 来决定要不要送审查委员会(Hiring Committee),审查委员会过了以后会在给更高权限的 SVP 审核,通过了才会发 Offer,最后 Recruiter 打电话通知 Hiring Committe 没审过,我礼貌性地问能不能给一些可能没过的原因提供我进步的机会,Recruiter 回说因为他们不能给任何的 Feedback,叫我一年后有兴趣可以再来一次 XD。

后记:面试完以后惊觉我应该赶紧处理早上的那通电话,回了学校问了同学才知道是诈骗,那一阵子很多人都收到类似的电话,还好当时没被骗,不然面试可能去不成了。

MemSQL在美求职奇幻旅程,软体工程师来分享

投履历方式:Stanford 就业博览会
面试流程:就业博览会解题→电话面试 3 关→On-site 面试 3 轮
结果:Offer Get

MemSQL 是一间旧金山的新创公司,CEO 跟 Founder 是 Facebook 的早期员工,做的是 In-Memory 的 SQL Database,面试的问题是我所有面试里头最难最有挑战性,却也让我觉得最有趣面试经验也最好的,拿到 Offer 以后我很认真考虑要去这间公司,对我来讲这间就是年轻版的 Square,公司内部很有活力,Engineering Team 大约 50 人,而且持续扩张中,大部分都是 Native Speaker,如果我真的接了 Offer,一定会是所有公司里让我有机会学习最多东西的。

MemSQL 这间公司真的让人印象深刻,在 Stanford 的招聘会上,其他公司跟你聊一聊以后收了履历往往都没下文,这间公司直接在摊位出了一道题目,要从一段 C code 里面,找出可能的 runtime error,我跟我朋友讨论以后,说服了他们的 Engineer 我们的答案是正确的以后,顺利地拿到了面试。

我没有看过一间公司的电话面试是需要 3 轮的,而且一开始面试的时候你也不会知道他们的面试流程,当我收到第三次电话面试的邀请时,我想说要是再有第四次电话面试我就不继续面了(还好没有),但后来我才理解到他们这 3 轮电话面试都是非常有针对性,第一轮要我从 Terminal ssh 登入他们的远端 server,里面有一个 C module,面试官简单跟我讲了怎幺 make and run 以后,就要我新增一个小功能,这种 C module 通常从获取 input 到最后执行运算都需要经过好几层,这个面试难的地方是考验你 trace code 的能力,能不能很快看懂 code,找到对的地方修改并新增功能,这时候就挺庆幸有以前在华硕 BSP team 的经验,培养了我应对这个面试的能力;第二轮是正常的演算法问题,但面试官的要求相当严格,除了 bug free 以外,要求我一直优化到最佳解,直到任何多余的东西都没有;第三轮面试官一打来,并没有要我写 code,直接要我用讲的把一题+两个 follow-up 用讲的全部把解法讲出来,这其实不简单,你不能打字不能画图只能纯粹用声音解释你的想法,经过了漫长的 3 轮电话面试以后,好不容易收到了 On-site 的邀约。

On-site 的前一天住在旧金山的 W Hotel,他们真的对应徵者非常有心让我能住高级饭店,On-site 虽然只有 3 轮,但每一轮都要 1 小时真的让我精疲力竭(正常一轮应该是 45 分钟),而且 On-site 以后不考演算法题,直接考 System design,弄得我不要不要的。面完以后自己觉得 3 轮的表现分别是 Neutral、No Hire、Strong Hire,是有机会被刷掉的,离开前跟正妹 Recruiter 抱了一下 say goodbye,在旧金山市区走跳了一下,隔一个工作天拿到了 Offer,当下真的超级惊喜的!新创公司动作就是这幺快!

WhatsApp(Facebook)在美求职奇幻旅程,软体工程师来分享

投履历方式:内推
面试流程:电话面试两关→On-site 面试 4 轮
结果:On-site 以后被拒

WhatsApp 在 2014 年被 Facebook 收购,我当时是先投了 Facebook 的 Mobile Engineer,但被通知他们招满了所以把我转到 WhatsApp,Facebook 要拿到面试真的是很困难呀,虽然台湾大部分人都不用 WhatsApp,功能也不如 LINE 有趣及全面,但他们全球用户超过 10 亿人,市佔率还是挺高,而且值得称讚的是他们全面支援 End-To-End encryption,对用户的安全隐私可说是相当重视(虽然这功能一般大众可能没那幺 care 啦)。

电话面试是一般的演算法题,然后 follow-up 会问 multi-threading 的优化,2 关过了以后顺利拿到 On-site,On-site 其中一轮是直接跟 CEO 对谈,他看了我的履历,稍微了解我以前做的事情后,就开始问网路层的问题了,他面试给人的感觉是由上对下而不是把面试者放在对等位置,问我知不知道 TCP、UDP 以及他们的区别是啥,我上次碰到网路层可能是大学上电网导的时候了,这方面的知识严重不足,我就坦承地跟他说网路层我不熟,但我会尽力回答,接着问我有没有很常用 WhatsApp,有什幺功能是 LINE 有 WhasApp 没有我觉得很值得一提的,虽然是闲聊但过程中他脸都有点臭语气也不太好,面完我大概就觉得没戏啰,其他 3 轮 2 轮面演算法,1 轮面 C 的 file system 相关的问题。

面试前我以为 WhatsApp 会像 Facebook 那样,是在 open space 工作然后大家讨论很热烈,实际去面试发现完全不是,面了一整天,办公室非常安静,大家都坐在自己的位置上各忙各的,面试官也略显严肃一些,整体的面试体验没有很好,明明都是在 Facebook 的 Menlo Park campus,气氛却完全不同,面完过几天收到拒信。

VMware在美求职奇幻旅程,软体工程师来分享

投履历方式:同学提供了 Recruiter Email 后主动寄信联络
面试流程:OA 及问卷→On-site 面试 3 轮
结果:Offer Get

我的 VMware 找工作经验成功展示了时机的重要性,某天我的同学告诉我 VMware 最近在招人,Recruiter 已经发给他 OA,但他太忙了还没有做,然后很好心地把 Email 给我,我当天主动联繫 Recruiter 说我对他们的 Program 很有兴趣,她跟我要了履历以后推荐了一个 new grad 的 Propel Program,并且发给我 OA 以及问卷,我当天晚上马上做完并且回覆 Recruiter,隔天收到了 On-site 邀请,我同学晚了我一天做 OA,结果 Recruiter 告知已经满了,限量是残酷的 QQ。

VMware 还算满有心的,On-site 前一天提供 Palo Alto Hilton 的住宿,晚上有 Happy Hour 解答我们对面试流程还有关于 VMware 的任何问题,面试当天搭接驳车到公司以后先进行导览,接着进行连续 3 轮面试,这是我第一个 On-site Interview,面试前略显紧张,但我是属于比赛选手,面试开始时紧张感就烟消云散了,3 轮都答得很顺,最后一个面试官,一进来就很帅气地问我:「1 到 10 分,你给自己的写程式能力几分?」他都这幺帅了,我就帅气地回答 9 分,接着他问我的两题,我在不到 20 分钟内都解出来了,接着他就说我们坐下来聊聊吧,结果坐下来的时候他的笔电弄倒了饮料让他的裤子湿了一片……我不好意思帮他清理,于是他自己清理完后跟我说:「我今天总共要选两个合格人选,在你之前面试的 8 个人里面,我只看到 1 个不错的,而你会是另外 1 个!」Oh yeah today is my day!最后我们提早其他人 15 分钟结束面试,VMware 动作比较慢,两个多星期以后才通知要发 Offer。

Coursera在美求职奇幻旅程,软体工程师来分享

投履历方式:网上海投
面试流程:OA 2 轮→电话面试 1 轮→On-site 面试 5 轮
结果:On-site 以后被拒

Coursera 算是大家比较熟知的公司,但近几年状况好像没很好,课程的质感感觉比不上 Udacity 呀!Coursera 拿到面试还是相对容易的,他们广发 OA,OA 2 稍微难一些,然后电话面试主要是针对 OA 2 的内容优化以及问一些 Follow-up question,On-site 相对艰难,第一轮要面 2 个小时,带着自己的电脑用他提供的 API 写一个 coding project 来实作某个游戏的 AI,评分的标準是看 coding style 还有游戏的成功率,这题的难度如果没有先準备过,根本不可能拿到高成功率,我表现没很好成功率只有 35%;接下来两轮分别跟 Engineering Manager 还有 Recruiter 聊,说是闲聊,但听起来像是在问 Behavior question 以及履历上的问题,然后接下来一轮是 Pair Programming,最后一轮是白板跟面试官讨论 high level 的 Engineering question 不写 code。

Coursera 整体给我的面试体验还是满好的,里面的人大多是 Stanford 毕业,人也挺 Nice 的,但是面 Coursera 前心态没有準备好,这是我第二个 On-site,当时太想拿到这间公司的 Offer,导致临场表现没有很好,加上题目难度也比较高,最后被拒绝了。

Indeed在美求职奇幻旅程,软体工程师来分享

投履历方式:Indeed Prime
面试流程:Indeed Prime OA→Recruiter 聊天→电话面试 1 轮→On-site 面试 4 轮
结果:Offer Get

Indeed Prime 是类似 Hired 的一个找工作平台,先做完 OA,如果有过标準会有一个 Recruiter 来 Review 你的履历,确认你现在找工作的状态,一个星期后会让你的档案上线,其他公司对你的履历有兴趣的话,会透过 Indeed Prime 跟你联络,我同学跟我同一天做 OA,总共考 4 题,我全对但他最后一题有一个测资没过,隔天我就被 Recruiter 联络而他那边都没消息。

档案上线以后,陆陆续续有一些公司来联络,但大部分不是找 Contractor 就是要能马上上工的,后来收到 Indeed 的邀请,他们是来找 New grad 的,电话面试的时候,当时网路状况不是很好,整体答题状况也普普,没想到还是收到了 On-site 邀请,当时知道 Indeed 总部在德州时,还在纠结到底要不要去 On-site,后来想说藉由这个机会去奥斯汀玩,顺便趁感恩节时去纽约玩一趟,就答应冲了!

实际去了奥斯汀一趟,真庆幸我有来,比我想像中的德州繁华许多,市区高级饭店林立,不过缺点是 Indeed 安排饭店居然是两个人一间,跟不认识的人住实在是有些不太习惯,前一天晚上安排我们到一间餐厅一起吃饭,Indeed 人资以及工程师会跟我们聊聊回答我们一些疑问,正式面试当天,总共有约莫 20 个人,一起吃了公司内的早餐,然后一起听了他们的长官简报介绍 Indeed,接着就分成两组,一组上午先做 90 分钟的 OA,下午进行 3 轮面试,另一组则反过来,我上午先做 OA,难度颇高,像是模拟 Indeed 公司内部实际工作会遇到的问题,测资也相当棘手,90 分钟后 20 个测资我只过了 11 个,接着就进入午饭时间,Indeed 给我的感觉就像是德州的 Google,办公室大又华丽,人也不少又有 Free Food 也不错吃,想必是德州软体工程师的第一志愿。

接着下午是连续 3 轮的 Coding Interview,我遇到的其中 2 轮都是 2 个人面我,另一轮则是 1 个人,Indeed 的面试是在一间没有白板的会议室,所以是用白板笔直接在玻璃的墙面上解题,所以这边要慎选白板笔的颜色,不然面试官可能看不太清楚 XD。这 3 轮整体的面试体验非常好,感觉上 Indeed 的工程师好像都满喜欢自己公司,其中一个工程师跟我聊到他在这边快 5 年了,第二、第三年的时候感觉遇到瓶颈想要换公司了,后来公司为了留住他,让他转到公司内部其他有兴趣的产品,让他相当感激,目前也是做得颇开心。这 3 轮除了有 1 轮遇到的问题颇难,让我写到最后一刻才完成,其他 2 轮只有一个字:顺!某一轮面到面试官问到了第三个 follow-up 的时候,面试官说:「这个答不出来没有关係,因为这是我第一次在面试别人的时候问到这里!」结束最后一个面试的时候,面试官还带我去喝咖啡,最后送回人资集合处,拿了一些礼物告别了 Indeed,他们还让我在奥斯汀多住一天,隔天才离开德州!

星期五面完,隔个星期一人资就通知要给我 Offer,有西雅图跟德州的 Office 可以选!有西雅图可以选真的让人很惊喜!他们给西雅图的整体 package 其实很好,我一度真的已经要去了,但最后 Square 的出现让我跟 Indeed 说再见了!

Uber在美求职奇幻旅程,软体工程师来分享

投履历方式:内推+Woo.io
面试流程:Recruiter 聊天→电话面试 1 轮
结果:内推履历被拒,Woo.io 拿到电话面试以后无声卡

Uber 感觉也是面试很难拿的公司,10 月的时候请朋友内推,过了 3 个多月直接收到拒信。中间无聊注册了 Woo.io,这是一个匿名找工作平台,填完你的资料上传完履历以后,其他公司会看到 3 年 Android 工程师、2 年后端工程师以及你会的 skill set 的资讯,不会揭露你的个人资讯,公司对你有兴趣以后你可以选择要不要公开你的履历让他们看到,他们如果有兴趣的话就会安排后续面试,我 Uber 的面试就是透过这个平台拿到的,面的是 Senior Software Engineer 职缺,当时跟 Recruiter 聊的时候,他说 Uber 过去这一年成长很快,从 3,000 人成长到 9,000 人,所以现在正面临 Growing Pain,Entry Level 的人太多,能带人的 Senior Engineer 太少,跟他聊得还不错,所以他说虽然我还在学校,愿意给我一次机会试试看,直接安排两天后电话面试。

面试我的是一个女性工程师,当时 Uber 还没有像过去这一、两个月发生这幺多风风雨雨,而我当时也不知道 Uber 女性工程师比例是非常低的,面试的题目其实不算非常难,只是要当场在 CoderPad 上 Compile 跟跑测资,当天脑袋有点打结,虽然有写出解法但中间很卡,对方很有耐心地跟我解释,但我疯狂鬼打墙不晓得她要我干嘛,问了她好几次到后来才搞清楚她要我优化的方向,面完以后知道自己机会不大,到现在也是无声卡,结束这回合。

Palantir在美求职奇幻旅程,软体工程师来分享

投履历方式:网上海投
面试流程:OA 1 轮→电话面试 1 轮
结果:电话面试以后被拒

Palantir 也是一间我觉得很酷的公司,以大数据分析出名,主要客户为政府机构和金融机构,里面的工程师感觉除了 Coding 能力以外,英文也要很好要能够直接面对客户,里面员工大部分也都是 Native Speaker。透过网投拿到了 OA,难度比一般公司的 OA 高,问题类型是 data cleaning and processing,OA 过了以后拿到了电话面试,我敢说那天的发挥绝对是我所有电话面试表现数一数二好的,我手写我口,边讲边 coding 相当顺,但是面完两天后就收到了拒信,我自己觉得可能是闲聊的时候英文讲得没有很顺,有的时候人生就是这样,难免会自我感觉良好,但是败在自己疏忽的其他地方。

其他

碍于篇幅限制,我并没有把所有公司的面试流程及心得都写出来,面多了会发现各公司的面试流程其实大同小异,对我投的其他公司有兴趣的人,可以参考底下的「找工作详细时程表」。

美国软体工程师找工作指南美国软体工程师面试流程

美国找工作流程相对于台湾複杂许多,每一家公司的流程也不见得一样,有些会省略一两个步骤,大致上流程如下:

投履历→跟人资聊天→Online Assessment(OA)线上程式测验 1~2 关→电话面试 1~3 关→Onsite Interview 一天 3~6 轮→发 Offer

整个面试流程其实相当长,其中最难的部分是在投履历那关,过去几个月我投了 100~200 间公司,最后拿到的面试机会不到 20 间,拿到面试可以说是比面试本身还要难。

关于面试最重要的 3 件事

经历了大大小小的面试,有成功的有失败的,找工作的过程中也参考了各种人的面试心得,学习成功的心得,失败的心得我也引以为戒,我归纳出面试过程中最重要的 3 件事:心态、沟通以及解题,其中心态 > 沟通 >> 解题,很多人会以为解题是重点,有些人除了解题以外也会注意沟通的重要性,但大多数人忽略了拥有良好的心态,或者说是心理素质,才是决定面试成败的重要关键。

心态

这边的心态不单单指面试的时候,而是指整个找工作的过程,找工作绝对是很艰难的,尤其在还没有拿到第一个 Offer 之前,这就像是你在跑一场没有固定终点的马拉松,你永远不知道终点在哪里,但如果你拥有良好的心态以及心理素质,会帮助你更快到达终点。举个例子来说,很多人在收到公司的面试邀请时,总会觉得自己还没準备好,然后习惯性地把 OA、电话面试或是 On-site 面试往后延,让自己有更充足的时间準备该公司的面试,这乍看之下没什幺问题,但是你很有可能:

1. 错过了最佳的时机:从公司的角度来看,绝对不会只发给你一个人面试的邀请,所以同一封信一定也发给了跟你同样合乎标準的人,公司招人也一定是 First come first serve,有合格的人就会依序发 Offer,时间拖越久,公司的 headcount 只会越来越少,录取的标準可能也会随之变高,虽然说我们并不会知道每一间公司投履历或是面试的最佳时机,但是我们只能把握我们的部分,早点开始总比晚点好。举例来说,VMware Propel Program,我同学比我晚了一天写完 OA,就因此没拿到面试,Indeed 跟 Snapchat 也在今年 1 月的时候,通知他们 2017 年的 New grad 已经招完了,而以往全年都在招人的 Google,也在 3 月初的时候,取消所有 New grad 的电话面试以及 On-site Interview,这在往年是从来没听说过的,虽然我在 1 月底的时候要面 Google,但其实那个时候也已经晚了,要是再早一点面说不定更有机会。

2. 延后了自己成长学习的时间:面试準备再久,还不如一次正式上战场来得学习得多,我个人非常提倡 「Fail fast, fail often, and learn more.」的概念,害怕失败是不会成长,你要经常失败、拥抱失败并且从错误中不断让自己成长,不要纠结于短期的成败,才是长期来说来自己持续成长的不二法门,我几乎一拿到 OA 就是马上做完,一有后续的面试邀约就会马上安排,一方面让公司觉得你很积极,一方面让自己快速地从面试中学习成长,为再下一次的面试做準备,我的哲学是「如果你要花 120% 的时间準备,面试时要发挥 120% 的能力才能拿到 Offer,那代表你现在的能力还不够,那没拿到 Offer 也没什幺好埋怨的」,诚实面对自己的能力,把握每一次面试机会,好好享受面试的过程,随时随地都在一个可以面试的状态,虽然还没準备好,但其实也準备好了!

另外,要学会平常心面对每一个面试,不要太看重你想去公司的面试,也不要随意地去面你没那幺想去的公司,这就跟男女交往一样,很多人为了追求异性,太过在意对方,失去了自己的形状,患得患失导致表现不好,而有些公司,或许之前比较没听过,对你来说没那幺大的兴趣,但是去了以后才发现整体面试体验、公司文化很好你很喜欢,所以请放宽心胸去了解每一间公司,说不定会有意外的收穫。面试被拒也不要太难过,这只是代表现阶段你们不适合而已,未来还是有机会的;拿到 Offer 我们可以开心,但是开心一天就好了,这代表你过去的努力有的回报,明天继续努力,準备接下来的面试!

沟通

这是面试过程中相当重要的一环,换位思考一下,如果你是面试官,有两个来面试的人都写出了最佳解,一个人能够很清楚的釐清问题、举一反三,解释他的思考过程给你听,另一个则是相对木讷,只等到你问问题的时候才解释,你会录取谁呢?面试过程中除了考验专业能力以外,也是在考验这个人未来是不是一个适合的同事,我会建议不要把面试当成考试,也不要把面试官当成是由上而下出题目给你的老师,而是要想像你们现在是一起解决一个问题,把他当成同学或同事,尽量把你的思考流程解释给他听,不要觉得面试官什幺都知道了。另外,在面试时请忘掉你过去所做的题,即便是类似的题目,也会有不同的条件,面试官考查的重点也会不一样,不要一听到好像以前听过的题目,就预设面试官一定是要问什幺,稍微釐清一下面试官的问题,完整了解他想问的问题,再开始解题,如果遇到你写过的题目,建议跟面试官坦承你看过这题,这时面试官可能会要你讲一下解法换下一题,或是他觉得没关係就让你继续做题。当然,不是每一个面试官都很好沟通的,有一些面试官可能会摆臭脸,或是讲的英文很难懂,但没关係我们就做好我们能做的,面试官要是真的态度这幺差,也是未来你考虑要不要进这间公司的因素之一。

解题

由于近几年 CS 太火热了,软体工程师的竞争者越来越多,导致题目一年比一年多,一年比一年难,在时间内解出题目已经不够,还必须要写出最佳解,我準备的方法不免俗的还是刷 LeetCode,但 LeetCode 已经从几年前的 150 题成长到 500 多题了,我自己是觉得不可能全部刷完,切记题目无限,但是观念有限,不要太在意刷的题数,我的建议是:相同类型的题目一起刷,今天做 LinkedList,明天做 Stack / Queue,后天做 Graph 以此类推,这样相同观念集中做吸收效率比较好,时间充裕的话,做题时先自己尝试写出一个可以通过的解法,这个按照题目难度可能短则 5 分钟,长的话花好几个小时都有可能,写出一个解法后再去看讨论区的最佳解,理解过后再自己写一遍,把自己的 code 改到最好这题才算做完;但刷题到后期可能时间越来越紧迫,没有那幺多时间可以让你慢慢写,这时候可以尝试写 15~30 分钟,如果 30 分钟内写不出来,那代表实际在面试时遇到你可能也没办法解出来,这时候去看讨论区的前三最佳解,找一个适合自己的解法,理解解法背后的原理以后,再自己写一遍。LeetCode 毕竟比较死板,所以我自己也尝试找了很多线上 Coding 的网站如 HackerRank、InterviewBit 等等,详细资料可参考底下的「参考资料」。

拿到 Offer 之后:谈薪水

很多人在拿到理想公司的 Offer 以后,就觉得好开心找工作结束了,然后就接受了这个 Offer。我个人认为拿到 Offer 以后,下半场才开始!不管公司开给你多高的 package,我的建议是:Always Negotiate!这点真的跟台湾公司很不一样,我们先来看看这则报导:How one Silicon Valley engineer negotiated a starting salary from $120,000 to $250,000 in just a few weeks。Haseeb Qureshi 在找工作的过程中,一开始拿到 Yelp 的 Offer 年薪 12 万,后来接连拿到 Google、Uber、Stripe、Twitch 的 Offer,最后在他要接受 Google Offer 前(年薪 16.2 万),他拿到 Airbnb 年薪 22 万的 Offer,最后在 Google 跟 Airbnb 之间 Negotiate 到 Airbnb 给他年薪 25 万的 Job Offer。这听起来有点难以置信,但仔细想想,公司利用资讯不对称,发给 10 个合格的面试者一样的 Offer,这个 Offer 可能是根据这个职位给出的公定价,如果今天有一个面试者,表现非常好,公司内部的人非常想要他,他的价值其实远高于这个薪水,他如果没有谈薪水就接受了这个 Offer,对公司来讲绝对是赚到!Haseeb Qureshi 也在他的部落格,写了这两篇文章 Ten Rules for Negotiating a Job Offer / How Not to Bomb Your Offer Negotiation 教大家怎幺谈薪水,个人觉得有些地方参考就好,毕竟一样的方法并不一定适用每一个人。

我自己个人的经验是只跟我自己会想去的公司谈薪水,不要玩弄其他公司的感情 XD。我总共跟 3 间公司谈过薪水,他们全部都帮我加薪了,当然不会像上面的文章那幺扯,谈薪水当然也不是跟 A 公司说,嘿我有 B 公司的 Offer,你们能帮我加薪吗?这样子显得太随便不负责任了,要求加薪是一件很慎重的事情,我的做法是写一封文情并茂的 E-mail,告诉对方我真的很喜欢你们公司,但是我现在真的没有办法做决定,接着讲述几个你值得对方为你加薪的理由,这个每个人状况不一样,但是记住这些理由一定要诚恳,最后再度表达很想去这间公司,期望对方开出更高的价码来让你更容易做出决定。

如何选择公司

这也是大多数人常忽略的一个问题,很多人会直接根据公司的名气或是钱的多寡来决定自己的下一份工作,这虽然满实际的,但也失去了探索自己到底要什幺的机会,好的公司会有烂缺,烂的公司也会有好缺,烂缺也会有好的地方,好缺也会有鸟的点,况且公司是你清醒的时段里,会花超过一半以上时间待的地方,所以我真心建议大家选公司的时候,问问自己想要在什幺环境跟什幺样的人工作,想要学什幺技术,5 年后的自己会是怎幺样子的,做出最适合自己的选择!

我在台湾第一份工作是去了华硕,当时找研替没想太多,只是想留在台北,对自己未来要进的 Team 也没好好研究,糊里糊涂就进去了,但只能说我强运,工作上让我学到很多,Work Life Balance 也很好不太会加班,又让我在 2015 年有出差到美国 Google 3 个月的机会,真的是不能再好了。

有了第一份工作的经验,这次我在选择公司时,相对慎重许多,简单来说选择好的部门比好的公司重要,我自己则是考虑三个点,第一,公司的文化以及产品我认不认同/喜不喜欢,第二,我能不能在一个让我持续成长的环境工作,跟一群聪明而且愿意分享知识的工程师们一起工作,打造有意义的产品,第三则是考量薪水以及地点,我做决定时尽量会去考虑前两项,但因为前两项比较难量化,所以或多或少还是会受到第三点的影响。当时在我接到 Google Recruiter 通知说要送 Hiring Committee 审查我的资料时,我有想过万一拿到 Google Offer 我要怎幺在 Square 跟 Google 之间选,当时的想法是不管结果我都会去 Square,差别只在如果有 Google Offer 的话会更有本钱跟 Square 谈薪水,原因是因为 Square 面试时有一关就是跟我未来的 Manager 聊,我觉得他是个有想法也很有热忱的人,我预期在他底下做事我会有发挥的空间,再加上 Square 的 Android Team 一直让我很嚮往,里面的工程师感觉也都很乐于沟通,另外就是 Google 对 New grad 是先给 Offer 再选组,所以你在决定 Offer 的时候是不知道你未来会在哪个 Team,这点确实让我很却步。

美国工作好找吗?

先讲结论:New grad 找工作真的越来越艰难了,大部分的公司还是缺有经验的!

不管你在台湾有没有工作经验,如果你没有在美国工作的经历或是你目前是学生身分,基本上你就会被当成 New grad,即便我们会争论说,在台湾的工作经验是真的有用很扎实,但对公司来讲,他没有必要冒险或是花时间在没有美国工作经验的人身上,所以为了方便起见就会被当成 New grad,换句话说,很多时候跟你竞争的人也是有好几年工作经验,要找到工作真的是一年比一年难。人在美国,常常会听到哪间公司在裁员,哪间公司最近缩招了,有的时候被裁员的甚至就是自己的同学,真的会明显感觉到近几年景气真的没有之前好。听过一些人,直到毕业前都没找到工作,甚至是直到毕业后快半年,已经决定要回台湾了,才好不容易拿到 Offer;另外我有个同学,觉得他能力很好,表达能力好、英文也比我好很多,但因为他是台湾大学毕业后直接过来念硕班,所以没有什幺公司给他面试的机会,他总共只拿到两间公司的 On-site 邀请,最后都拿到 Offer 了。每次看到这些故事,都会明白其实没有身分的外国人在这边找工作,压力确实都很大,我们最后会看到的大部分都是成功的例子,但更多的却是还在找工作或是失败或是相当相当艰难的故事,所以不要存有美国就是机会很多找工作就相对容易的幻想,每个机会背后有着是更多的竞争以及更多的努力。

结语

感谢有耐心的读者终于看到最后,我花了很多时间回忆并且把这些心得记录下来,我讲的不见得都是对的,很多时候只是我个人的心得,毕竟这些心得很有可能只是倖存者偏差,适用我的不见得适用另外一个人,不适用我的也不见得对你没用。但是有一些经验是通用的:永远要诚实面对自己的能力,不断让自己能力进步往更好的方向走,不要被短期结果影响,要记住人生是长期累积的结果也是一个连续的过程,找到工作也只是个开始,开始工作以后会有大大小小的挑战需要去面对!最后,希望这篇文章能够对你有帮助,真的希望能够在世界的舞台看到更多台湾人,让更多人知道台湾,让我们以身为台湾人骄傲,大家加油!

参考资料:书单

《Cracking the Coding Interview: 189 Programming Questions and Solutions》
《Elements of Programming Interviews: The Insiders’ Guide》

面试準备

LeetCode
HackerRank
InterviewBit
Google Code Jam
GeeksforGeeks
Hired In Tech
演算法笔记
我的 System Design 总结

投履历

Indeed Prime
Woo.io
AngelList
Grace Hopper 2016 Resume Database
LinkedIn
HandShake
Triplebyte
Who’s Hiring Me
Hired
Career Fair
内推
各公司 Career Page

公司评价、薪资及数据

Paysa
Glassdoor
Crunchbase
CrunchBase Unicorn Leaderboards
The Billion Dollar Startup Club
一亩三分地

找工作详细时程表拿到 Offer 的

Square
9/23 内推
9/29 跟 Recruiter 电话聊天
10/28 Phone Interview 第一关(自愿改成 Onsite)
12/5 Phone Interview 第二关(自愿改成 Onsite),当天通知 Onsite
1/6 Onsite Interview
1/9 通知 Positive Feedback,之后给了正式 Offer
2/3 正式签约

Indeed
9/18 注册 Indeed Prime
9/21 写 OA
9/23 跟 Indeed Prime 电话聊天
9/26 Indeed 主动联络我
10/12 Phone Interview
10/17 通知 Onsite
11/18 Onsite Interview
11/21 给 Offer

MemSQL
10/4 Stanford Career Fair 当场解题,投履历
10/7 Phone Interview 第一关
10/14 Phone Interview 第二关
10/20 Phone Interview 第三关
10/21 通知 Onsite
10/28 跟 recruiter 聊天 @ MemSQL
11/11 Onsite Interview
11/14 给 Offer

VMware
9/28 寄信给 Recruiter,收到即时回覆,填妥相关资料并寄履历,拿到 OA 之后当天写完回覆 recruiter
9/29 通知 Onsite
10/17 Onsite Interview
11/4 给 Offer

Veritas
10/6 收到系统信将在 Grace Hopper Conference @德州进行面试,我主动回覆希望能让我在 Mountain View 的 Headquarters 面试
10/7 拒绝我
10/11 又说可以考虑安排面试,发给我 OA 我当天写完
10/12 通知 Onsite
11/4 Onsite Interview
11/22 给 Offer

Onsite 后被拒

Google
12/5 内推
12/6 做完 OA 以及问卷调查
12/7 通知 Onsite
1/20 Onsite Interview
1/27 跟我要成绩单,通知要送 Hiring Committee 审核
1/29 Hiring Committee 审核不过

WhatsApp(Facebook)
8/30 内推 Facebook Intern
10/1 通知要求选组,我傻傻地选了 Front-End 作为第一志愿
10/7 跟 Facebook recruiter 电话聊天,被问了一堆 javascript 的问题,答得不是很好谢谢再联络
11/13 内推 Facebook Mobile Engineer
11/17 被告知职缺满了,履历被转到 WhatsApp 安排面试
12/7 Phone Interview 第一关
1/5 Phone Interview 第二关
1/31 Onsite Interview
2/2 收到拒信

Coursera
9/10 收到 OA1 并且做完
9/12 收到 OA2
9/17 做完 OA2
9/20 收到通知安排面试
9/26 Phone Interview
9/28 通知 On-site
10/24 Onsite Interview
10/27 收到拒信

Tubular Labs
9/22 海投
9/30 跟 recruiter 电话聊天
10/4 收到 Take Home Coding Challenge
10/6 做完 Take Home Coding Challenge
10/17 通知电话面试
10/26 Phone Interview
11/9 Onsite Interview
11/16 Recruiter 打电话来拒绝

放弃 Onsite

Location Labs
9/22 海投
9/25 做完 OA
10/17 通知电话面试
10/21 Phone Interview 第一关
11/3 Phone Interview 第二关
11/7 收到 On-site 邀请,我拒绝

Phone Interview 被拒或无声卡

Uber
10/15 内推
1/20 收到拒信
12/19 注册 Woo.io
1/10 Uber 透过 Woo.io 对我表示兴趣
1/15 开放 Uber 取得我的完整履历
1/24 跟 Recruiter 聊天
1/27 Phone Interview

Palantir
9/22 海投
10/13 收到 OA 并且做完
10/14 Recruiter 联络安排 Phone Interview
11/2 Phone Interview
11/4 收到拒信

Microsoft
9/27 Microsoft Campus Day @CMU-SV 投履历
11/2 On Campus Interview
12/12 收到非常有礼貌的拒信

DJI
10/31 跟 recruiter 电话聊天
11/7 Phone Interview
11/15 收到拒信

Qualtrics
11/26 海投
11/29 安排电话面试
12/13 Phone Interview
12/21 收到拒信

Twitter
10/25 海投并收到 OA
10/28 做完 OA
12/21 收到罐头信说会在 3/31 以前做出决定

聊完天发现不适合

Riot Games
10/12 跟 recruiter 电话聊天

Playground
8/24 跟 recruiter 电话聊天
8/31 跟 VP of Software 聊天 @Playground

履历被拒或是无声卡

Facebook、Airbnb、Apple、Amazon、Lyft、Dropbox、Snapchat、Stripe、Zillow、Expedia、Yelp、Booking.com、Glassdoor、Quora、Twitch、Tesla、Cisco 等等族繁不及备载

Career Fair

Stanford Career Fair
10/4 Stanford

Tech Inclusion Career Fair
10/27 San Francisco

Apple Day
11/1 Apple

Microsoft Day
9/27 CMU-SV