Hi 大家好~
先自我介绍一下,我的是国立台湾大学资讯工程学系(Computer Science)学士以及硕士,
研究领域为电脑视觉以及影像处理。从台大毕业后进入趋势科技当研发替代役的工程师
全职工程师经验约3年。主要擅长写C/C++。
役毕离职后决定开始行动追求以前的梦想:到美国软件业闯关,所以先跑来硅谷唸
UCSC extension的学程班当作一个跳板。
最近课程结束了求职也告了一段落,于是写了一些心得想分享给大家。
求职经历:
以我个人这9个月的CS求职经验来说,最重要的条件是有无在美国合法工作的身分,再来
是工作经验,再来则是学历。由于Certificate program是属于比较特殊的无学位学程,
所以我经常得跟人资们说明清楚我的情况,像是我已经有硕士学位也有工作经验,念这个
学程是为了合法身分等等,试图说服人资不要把我当作new grad看待。我在2015年9月到
美国时就开始尝试着投履历了,但绝大部分都是没下落的,然后会有一些猎人头和人力资
源公司的人联络,但这些人一开始就会先询问有无合法工作的身分,需不需要VISA
Sponsor,由于现在H1B竞争激烈,需要靠运气才能取得,所以这一点变成很多公司征才的
第一要件。愿意忽略身分问题而给面试机会的公司基本上都是跨国大公司如Google、
Amazon、Apple、Bloomberg之类的,所以相较之下没身分的人要拿到面试的机会非常的低
。我个人到美国的前半年只拿到了JP MORGAN和Google的面试机会而已。直到我快要取得
OPT前的三四个月,面试机会才开始增加。
我的求职策略是能请人帮忙内推就请人,没有的公司就海投,投个一两百家不为过。看到
有HR在FB社团发文就传讯息问,Hacker News上的职缺适合的就寄信,LinkedIn上职缺都
给他申请下去,总之就是免钱似的投履历就是了。不用想说这个职缺是否适合你,或你认
不认识这家公司,因为八九成的公司是连理都不会理你,所以不用想太多。这个策略主要
的目的其实是想办法拿到面试的练习机会而已,能够有越多的面试机会,才能让刚从美国
来、连英文都还不是很熟悉的人多一点练习的次数。不过即使是我这样的策略,我拿到非
内推的面试机会也是寥寥可数,内推的面试机会则是有50%左右。
此外LinkedIn上面的履历尽量更新的丰富一点,有时候会有一些Recruiter寄信来问,不
妨多跟一些HR聊聊,即使他们公司最后没打算给你机会也没关系,只要你有跟他加到好友
,那他的HR的朋友就可以从他那边看到你的履历,能见度还是会增加的。
美国CS虽然职缺也很多,但想应征的人更多,而且大多数公司都想找有合法工作身分的人
选。所以不要认为会写程式就可以轻松来硅谷找到工作,那是完全错误的。
面试心得:
硅谷大多数公司的面试流程都是
线上测验或电话面试(或两者皆有)
通过第一关后邀请On site面试,连续1 ON 1车轮战面试4~5关
通过On site interview的话,如果经理同意录用,则进入谈薪给offer
如果你过去对英文没有下过很大的苦心去练习,那来美国遇到的第一关电话面试就会让你
吃足苦头。在CS界遇到印度人面试官是家常便饭的事情,印度腔英文、电话通讯的品质以
及无法使用肢体语言的限制,会让电话面试成为初来美国求职的一大挫折。
以软件工程师的面试而言,刷leetcode练习是必要条件,但不是充分条件,绝对不是像乡
民说的leetcode刷完就一定找的到工作,面试中解出题目其实只是评分的一部份,你如何
跟面试官互动讨论,说明你的思考,如何测试你的程式等等都很重要。就算真的全都解出
来,也不一定会拿到Offer,还得看同时间的竞争者的程度如何。
练习leetcode可以熟悉一些面试常考的基础算法和资料结构,但如果只是单纯背题目的
话,一但遇到没遇过的题目就很容易慌,所以要练的是心法而非架式,要懂的是算法而
不是解题方法。除此之外,在面试前也可以多参考一下glassdoor、一亩三分地、
CareerCup上面的面试心得,会有一些最近该公司考的题目,可以稍微思考一下如果被问
到的是你,你会怎么做。
以下是我个人的面试经验
拿到offer: Nutanix, Microsoft
Onsite interview后被拒: Cisco, Facebook, Google, Two sigma, Youtube
Phone interview被拒: Apple, Yelp, JP Morgan, indeed
人资 screen后不符资格: linkedIn, dataminr, sportsvision ... 很多新创公司
履历直接被拒或无下文: twitter, uber, airbnb, oracle, mozilla... 太多了记不清
其中内部推荐的有Facebook, Google, Yelp, Cisco, Microsoft, Apple, Nutanix
以下为一些公司的面试心得:
Cisco: 我是透过朋友直接内推给部门主管而拿到面试的,所以流程比较不一样,我完全
没有接触到人资,从头到尾都直接跟用人主管接洽。一开始是先用webex来一场电话面试
,是一个印度小哥,问的问题很多很杂,从网络基础osi model, switch到资料结构演算
法的coding problem都有,面了约一小时才结束。过一个礼拜后联络主管而拿到onsite,
onsite共有五关,基本上全都是coding problem, 只有一关是偏system design。午餐是
由朋友带我去吃公司的cafe。寄信询问主管后主管说两个礼拜内会有决定,然后会通知我
,但后来就完全没有消息了,所以最后其实拿到的是无声卡XD。不过Refer我的朋友有跟
我说面试官们对于我的Coding能力都觉得不差,只是有一两位面试官觉得英文能力还得再
加强。同时那个职缺有另一个面试者因为还有QA的经验,所以当时比较倾向于录取那位有
QA经验的面试者。
Facebook:
Facebook在去年底我刚开始唸书的时候就连络我了,当时我跟他说我OPT隔年六月才生效
,不知道能不能先面试先抽H1b,人资说还是希望我OPT开始前几个月才来面试,并跟我约
隔年四月再连络。原本以为Facebook只是应付我一下,没想到隔年四月真的连络我了。面
试的流程一样是电话面试然后onsite面试,由于当时刚好拿到Nutanix的Offer,所以问看
看人资能不能加快面试流程。不得不说Facebook的标语move fast真不是盖的,效率极高
的结果就是将两个礼拜后的电话面试提早成两天后。电话面试完隔天就说要安排Onsite,
Onsite完隔两天就发Thank you letter。Facebook的办公室很宽敞,一整栋超大办公室连
在一起,而且全都是开放式空间,顶楼还有个花园可以逛。Onsite面试内容有两关是纯粹
考Coding problem,一关为culture fit和coding,由于我是以experienced role来应征
的,所以还有一关是专门考system design。收到感谢信后人资说虽然这次很抱歉没有录
取,但希望未来还是有机会能够继续合作。
Nutanix: 一家稳定成长的pre ipo 公司,由朋友帮忙内推而拿到面试。一开始电话面试
有两次,第一次是印度人主管,考两题跟binary tree有关的问题。第二次运气很好遇到
同学认识的中国同事,所以就用中文聊聊天就过了XD 接着就接到onsite的通知,公司位
于san jose 机场旁边的新创区,离downtown很近。这边onsite总共有五关,内容也是
coding problem居多,但有一关是考数学证明题,算是比较特别的问题。公司里面虽然没
有厨房,但公司会提供午餐,我那天的午餐是美国蛮有名的一家pizza,带我去吃饭的同事刚好是第二关电
话面试的中国人,就跟他到个谢聊个天后结束午餐。面试完后隔了一阵子都没消息,所以
寄信询问人资,人资收到信后就打电话一直问我对那个部门有兴趣之类的,却又不跟我说面试
结果如何。最后我跟他说如果我的面试回馈是偏正面的话我想要取消其他小公司的面试,
人资就联络我说要给我offer了。Nutanix是间很不错的公司,package也开的不差,可惜我
因为opt签证只有一年,选择新创公司在未来签证和身份取得的问题上会比较不方便。
YouTube: YouTube 是由Google 人资转介绍给我的,因为当初我跟他们说我对YouTube 比
较有兴趣。由于这时候我已经拿到微软的offer,所以跟他们说我希望可以加快面试流程
。结果对方就决定直接跳过电话面试直接邀请我onsite。公司本部在San Bruno ,办公室
区域不大,约只有三栋建筑物,但里面还挺开阔的。这边我总共有5关面试,而且题目类
型比较多变。虽然也都需要白板coding, 不是单纯的leetcode类型,而是system design
和讨论。面试完后人资会通知说要不要送hiring committee, 如果面试平均分数过低就
不会送,送的话才有机会进入下一步。我最后是在hiring committee 被刷掉,人资说虽
然被刷掉了,但觉得我很有潜力,所以希望未来我能再去面试看看。
Google: 在YouTube 结果通知之后,我原本已经打算就去西雅图微软了,结果隔天
YouTube 人资说Google 有另一个部门对我有兴趣,所以想问我要不要再试试看。于是我
又在面试地狱里多打滚了一个礼拜。这次人资只帮我安排了三场面试,遇到的题目就是很
标准的leetcode形式,面试官也不太废话,进来寒暄一下就开始写白板。这次我依然是挂
在hiring committee这关,人资说有一个面试官觉得我的程式能力很强很好,但另一个觉
得我没写出最佳解,所以hiring committee 觉得我的能力还不够稳定,于是决定不录用
。最后人资希望我能够再多练习一些题目,10个月后再跟她联系看看是否能够再度面试。
Microsoft: 微软这边的状况比较有趣一点,其实原本靠朋友内推都没有下文,自己在网
路上投履历也没下文。直到我在一个fb社团看到一位微软人资po文征才,我就私讯联络她
,然后经过一些履历的screen之后我拿到了第一关的线上测验题。线上测验总共有三题,
网页很简陋,就单纯文字描述的题目和一个textbox给你写答案。有两题是算法题,第
三题是system design题。由于当时已经先有了Nutanix offer, 所以我就很放轻松的去写
,第三题因为题目描述太简短,我直接回答说我看不懂题目XD,一小时的作答时间我只用
了20分钟就缴卷。不期不待的我就默默接到onsite的邀请... 微软的onsite面试公司会
直接帮忙订机票住宿租车等等,餐费则是事后报帐。我参加的是现在微软比较新的征才方
式,有点类似海选般的活动。所有获得onsite的候选人会在同一天一起到微软的面试
building,然后一人分配一间会议室等著面试官进来车轮战。我参加的是上午场总共四关
,从8点到12点连续面试。题目也是算法和资料结构居多,但最后一关考了题system
design, 而且很类似第一关线上测验的第三题那题我看不懂的问题... 有个有趣的点是上
午场总共十几位候选人,大概有1/3是从Amazon 来面试的。面试前人资跟我们说他们的
opening很多,不用担心其他人是竞争者,只要能力够就可以被录取。面试完后隔几天人资打来问说面试的感觉如何等等,然后说有
两个部门主管想跟我多互相了解一点,所以又多安排了两通跟主管聊天的电话。聊完后人
资请我选一个我比较喜欢的部门,最后获得该部门的offer。
Two Sigma: Two Sigma是唯一一个我没有靠Refer而拿到的on site,一开始是在
hackerrank网站上写该公司的线上测验题,通过之后对方人资打来安排电话面试。电话面
试问了不少问题,包含简答题以及coding题。之后人资寄信通知说邀请我去纽约曼哈顿
SOHO区的总部on site面试。面试为早上连续三关,中午吃完饭后会有早上的面试的回馈
,如果有通过的话下午会再三关。早上的前两关都是考system design相关的题目,第三
个则是直接给你一台Ubuntu系统的电脑写程式编译跑过一遍,我是利用vim+gcc写C++去实
作问题。吃完饭之后人资通知说不好意思没有适合的位置给你,所以下午我就去玩乐纽约
了。Two sigma虽然是做程式交易的公司,但内部环境跟硅谷新创公司的风气很像,也有
开放式空间、micro kitchen免费食物等等,网络上是说这家公司开的package非常的好,
所以要录取也是颇有难度。
Apple: 虽然我没有拿到Apple的onsite面试,但我觉得Apple这次给我的电话面试的方式
我还蛮喜欢的。Apple这次的面试跟其他公司不一样,不是考算法和资料结构,而是利
用线上偕同写作的网页来看我写project。面试官一开始就在网页上贴了一份小project的
程式码约300行,然后稍微跟我讲解一下这个project有哪些components,然后叫我编译执
行、debug、新增功能等等。这样的面试方式比较像是实际上在公司工作会遇到的事情,
也比较能看出面试者在工作时会遇到问题的思考方式和做法。这是我第一次也是唯一一次
在电话面试遇到这样的考法,所以做起来速度稍微慢了点。可能是完成的功能不够多所以
没有进入下一关。
通常每一关面试完后都会有一小段时间可以问面试官问题,这边建议是至少问个两三题,
让面试官觉得你对于该公司是有兴趣的,同时你也可以多了解一点公司的制度和风气。我
个人是有准备一些经典问题,当没有特别想问的时候就拿出经典问题来问。我最常问的是
工程师在贵公司的一天是怎么样度过的,或是问说贵公司怎么样衡量一个工程师的绩效、
贵公司对于刚进去的新人有没有什么帮助新人快速进入状况的模式。
由于我的Offer数量不多,而且刚好是两个不同地区的公司,所以要直接拿Offer去谈薪资
不太容易,而且过去在台湾的工作薪资在美国并无参考价值,所以我并没有跟公司讨价还
价,Package跟我上网查的平均差不多后我就接受了。
(更新)
有不少人问我关于system design到底会考什么呢? 这个问题其实很难回答,因为这类题
型范围太广,很难有办法将他们归类,不过还好还有一些脉络可循。我推荐可以到这个网
站HiredInTech(http://www.hiredintech.com/system-design/)看看,里面会有很多关
于面试问题的介绍以及练习方式。在美国现在软件公司的环境之下,我认为研究
distributed system的架构是CP值最高、最容易被考到的,因为火红的服务基本上都是几
亿几千万的使用者在用的,要怎么设计一个能够支援这么多使用者的架构非常重要,所以
看一下像是Instagram、Twitter、Facebook等等的系统设计的架构会让你对于这类的问题
有很好的想法可以跟面试官讨论。我个人面试的经验是一开始先跟面试官讨论Use case、
和User Scenario,然后先从大方向开始,例如有Front-End负责接收使用者资料,然后有
Back-End sever从Front-End收资料,收到资料后要做什么处理,要如何存放到Database
等等。先谱出一个架构后再来讨论可能会遇到的问题,像是
1. 使用者多的时候,服务器服务无法负荷要怎么办(增加服务器)
2. 服务器怎么增加?(Horizontal and vertical scaling)
3. 如何确保服务器运作正常? (Load balance, failure detection)
4. 资料量太大,Query数量过多导致服务response变慢怎么办? (使用Cache)
5. 要使用什么类型的Database? (SQL vs noSQL)
这类的面试大致上都不出这些范围,所以可以花点时间把这部分弄熟,即使真的被考到了
也能回答出一些不错的想法。
我的求职经历大约是如此,以上心得是从我的Github转来:
https://github.com/terry77228/UCSC-extension-for-Taiwanese/wiki
如果有人对于我念的学校有兴趣的话,欢迎参考一下我的Github内其他页面,如果有任何
意见、指教或想补充的也都欢迎大家来补完~
谢谢大家!