先大概介紹一下我的個(gè)人情況:CS-related方向的PhD畢業(yè),工作快7年。先后就職過幾家大中規(guī)模的公司。目前在一家startup擔(dān)任tech lead的角色。
由于這家startup公司近半年來進(jìn)入了極度不穩(wěn)定的狀態(tài),我在2016年感恩節(jié)前下定決心跳槽,并開始著手準(zhǔn)備。
準(zhǔn)備工作
1. Coding & Algorithm
頭兩個(gè)月的時(shí)間基本花在了刷leetcode上。截至本次面試結(jié)束為止,leetcode上的algorithm的題目482道。我的進(jìn)度是:
- Solved: 463
- Attempted: 9
- Unsolved: 10
Attempted表示我的算法、或者我能找到的算法沒能滿足leetcode的time requirement。
Unsolved則是因?yàn)槲艺J(rèn)為這些題目過于復(fù)雜,沒有必要耗費(fèi)太多的時(shí)間。當(dāng)然,在大牛們的眼中這大概只是懶惰的托詞。。。
2. System Design
大概從1月中旬開始,我又花了一個(gè)月的時(shí)間準(zhǔn)備system design。主要是梳理自己近幾年的工作經(jīng)驗(yàn),加上在網(wǎng)上查詢各種資料。
我認(rèn)為比較有幫助的兩個(gè)鏈接:
- Hired in Tech: 非常好的system design入門教程
- High Scalability: 有很多大公司分享的設(shè)計(jì)思路
面試階段
我從1月中旬開始電話面試。先后拿到了11家公司的on-site機(jī)會(huì)。
零售A
兩年前我拿到過他們家level 5的offer,但是沒有接受。這次改面level 6的senior position。recruiter幫我免掉了phone-screen。
面試前,hiring manager和recruiter就反復(fù)告訴我:A家對于senior position卡得非常非常嚴(yán)、bar很高、blahblah~。
我對于這家公司的印象一直一般。這次把他們排在了所有onsite面試的第一個(gè),是希望可以找找面試的感覺。要是能拿到senior position的話,也會(huì)是一個(gè)很不錯(cuò)的back up plan。
On-site
6輪,每輪一小時(shí):
-
美國白哥們,已經(jīng)在A家做了11年的senior engineer。
先聊了大概30分鐘的behavior question。
然后是一個(gè)design question。
總體感覺面得很順。
-
快40歲的老印,也是senior engineer。
面試前,recruiter發(fā)給了我所有面試官的個(gè)人資料。我也在LinkedIn上查了下每個(gè)人的情況。當(dāng)時(shí)最擔(dān)心會(huì)出問題的就是這個(gè)老印。他和我之前在同一家公司工作過,只不過他是印度分部的staff engineer,比我在美國分部的級別高出不少。這次我面試的職位和他平級,我擔(dān)心他會(huì)因此感覺不爽。
事實(shí)證明并非我多慮。
面試剛一開始,這哥們就對于我們一同就職過的那家公司大加貶低,說什么很多技術(shù)在那家公司里面都得不到應(yīng)用,比如Spark/goLang等等。我很想提醒他,他提到的那些技術(shù)我們在美國的組里都有用到,而且這些情況也在我的簡歷上面寫得清清楚楚。
然后他給我出了一道coding question。
我給出了正常的圖論解法。但是這哥們突然說這個(gè)算法還要能實(shí)現(xiàn)roll back功能。這就有點(diǎn)麻煩。如果要實(shí)現(xiàn)roll back的話,這個(gè)算法的復(fù)雜度就會(huì)增大不少。他要求算法要盡可能得快,所以他并不滿意我給出的算法。隨后我們就開始討論,直到他指出了一個(gè)他認(rèn)為可以快速解決這個(gè)問題的方法??墒俏液芸炀桶l(fā)現(xiàn)他說的算法有一個(gè)漏洞,并不能完全滿足他自己提的要求。
這就讓人有些尷尬了。。。
最后他只能要求我實(shí)現(xiàn)不需要roll back的一個(gè)function。code我在規(guī)定時(shí)間內(nèi)寫出來了。可是我們已經(jīng)沒有時(shí)間進(jìn)一步地交流。
這一輪的體驗(yàn)非常不好。
lunch
-
Hiring manager
一個(gè)小時(shí)的behavior questions。
-
一個(gè)白人大叔,Staff engineer。已經(jīng)在A家工作了8年。
同樣是20多分鐘的behavior questions。然后是一個(gè)OO design的問題。
整個(gè)過程比較順暢。他提出來的各種附加要求我都給出了相應(yīng)的解決辦法。最后的提問和交流過程也比較愉快。自己感覺這輪應(yīng)該問題不太。
-
一個(gè)亞裔的manager,staff engineer。
一個(gè)結(jié)合了初級ML和大數(shù)據(jù)處理的題目,挺有意思。最后的解法和function實(shí)現(xiàn)得到了面試官的肯定。
然后就是behavior question和提問環(huán)節(jié)。
總結(jié)
從tech上來說,A家的面試并不難。behavior question的比重高得有點(diǎn)奇怪??赡苁且?yàn)檫@次面的是senior position吧,至少2年前面level 5的時(shí)候是沒有這么夸張的。
整個(gè)面試流程,包括和recruiter的交流都是很順暢和規(guī)范的,體驗(yàn)比以前好了很多。
最后A家沒有給我offer。打聽到的理由是:你的behavior question沒有問題,communication也很好,tech question也都答上來了。但是!我們A家senior position的bar就是特別高,你不但要答上來,還要答得特別optimal、特別迅速、特別周到。。。
好吧,A家的傲嬌我get到了。安靜地move on~~~
Grab
這是一家總部在新加坡,面向東南亞六國的mobile端打車服務(wù)公司。他們家的名氣可能并不大。但是這家公司在東南亞六國的市場地位類似于Didi打車之于中國市場。他們目前是市場的領(lǐng)先者,主要競爭對手是Uber。
他們家目前在印度、中國北京和西雅圖都設(shè)有分部。西雅圖辦公室的目標(biāo)主要是招聘有工作經(jīng)驗(yàn)的工程師來幫助他們解決一些核心技術(shù)問題。
面試的第一步是和西雅圖分部的經(jīng)理進(jìn)行一個(gè)小時(shí)的聊天。這個(gè)經(jīng)理以前是在微軟工作了20多年的distinguished engineer。從外貌看來似乎只有40歲上下,顯得令人驚訝得年輕。整個(gè)人充滿了激情,是那種性格很有感染力的人。
一個(gè)小時(shí)聊下來,他對我的技術(shù)背景比較認(rèn)可,就給我安排了on-site面試。
On-site
-
中國小哥,好像是在新加坡畢業(yè)后加入Grab,并調(diào)到西雅圖辦公室的。
一道coding題 + 一道design題
-
又是一個(gè)中國哥們。
一道coding題 + 一道design題
-
Director,應(yīng)該是bar raiser。
主要是一些關(guān)于我以前project細(xì)節(jié)的問題,以及一些design問題的深入討論。比如:為什么我會(huì)選擇某個(gè)技術(shù),而不是另外一個(gè),以及不同技術(shù)之間的pros & cons之類。
總結(jié)
總體來說,我對這家公司的印象非常好??赡芤?yàn)镚rab還是一家沒上市的小公司,他們家對于面試者非常重視,也非常友好。整個(gè)面試中你能感受到的是誠意和尊重。這種感覺在大部分大公司那里是體驗(yàn)不到的。
另外,雖然面試的輪數(shù)不多,但和我交流過的這幾個(gè)工程師、recruiter、以及西雅圖辦公室的經(jīng)理給我的感覺都很好,屬于比較務(wù)實(shí)和肯干型的團(tuán)隊(duì)。
Grab最后給了我offer。作為一家小公司,他們的package還是很有競爭力的。特別是cash部分,幾乎是我拿到的offer里最大方的一個(gè)。另外,各種benefits和保險(xiǎn)也都是行業(yè)內(nèi)頂級的。
我還沒有決定是否接受他們家的offer。不過這是我面試一圈下來,個(gè)人感覺最好的三家公司之一。對于渴望挑戰(zhàn)和機(jī)遇的朋友,我真心推薦大家考慮一下Grab。
Zillow
嚴(yán)格意義上來說,這不是一家IT企業(yè),更像是一家房地產(chǎn)公司。
On-site
非常有意思的一次經(jīng)歷。。。
-
美國白人小哥。他說他一開始是data scientist,后來越來越對工程感興趣,現(xiàn)在就專注在工程上面了。
問題是怎么樣設(shè)計(jì)一個(gè)training model?
因?yàn)槲乙郧白鲞^推薦算法,所以答得還算順暢。但心里多少有點(diǎn)奇怪:我面的是engineer position,為什么要問我如何建模?
-
印度哥們。
題目是OO design。
題目不難,基本上要做的就是實(shí)現(xiàn)幾個(gè)主要的class。其中可能會(huì)涉及到一些繼承和重載。
本來我的節(jié)奏是:先實(shí)現(xiàn)A class,再是B class,最后C class。
可是比較讓人無語的是,這個(gè)哥們一直在瞎指揮。A class還沒來得及寫完,就說:"let’s implement this function of B class first";B class寫了一半又讓我去實(shí)現(xiàn)C class的一部分功能;C class沒寫完又讓人回到A class。。。
總之是一通亂攪。
最后總算是寫完了,不過我嚴(yán)重懷疑這哥們平常做事邏輯混亂。
-
中國哥們。
題目我記不太清了。但是他也花了很長時(shí)間來跟我討論怎樣building training model。還問我了解多少commonly used training models。我忍不住問他為什么要問這種問題,他的回答是:Zillow的engineer team和data scientist team分工并不明確。他們希望每個(gè)engineer都有獨(dú)立建模和ML的能力,data scientist也應(yīng)該有實(shí)現(xiàn)production code的能力。
我只能說這個(gè)想法。。。嗯,非常宏偉。
-
印度美眉。
她花了很長時(shí)間問我關(guān)于Spark的一些基本概念。我平常工作用到Spark的地方很多,回答起來問題不大。coding題目很簡單。
-
Hiring manager。
主要是聊了些team的情況和公司文化,以及如果我加入的話會(huì)做些什么project。
總結(jié)
Zillow的辦公環(huán)境非常高大上,不愧是搞房地產(chǎn)的公司。
面試流程也算是順暢。
最后他們把我拒了。說實(shí)話,得知被拒的時(shí)候我多少有些吃驚??赡苁俏易晕腋杏X太良好了吧。不過recruiter給出據(jù)我的理由之后我就釋然了。因?yàn)槔碛芍挥幸粭l:
有些coding question,我過快地jump into implementation,沒有和面試官很好地溝通我的思路。
首先,我在寫code之前絕對有和面試官交流,直到他/她認(rèn)可以后我才會(huì)開始寫。我也面試過很多公司了,這種rookie mistake我是不會(huì)犯的。第二,如果因?yàn)槟承┨貏e的原因想要據(jù)我的話,直接說就可以了,沒必要整這些無聊的理由。
Quantcast
又是一家startup公司,總部在灣區(qū),西雅圖分部成立不久,目前的engineer數(shù)量還不足10個(gè)。
Phone-screen
- 4道coding題
On-site:
-
美國白人哥們。
題目不太記得了,應(yīng)該是leetcode原題。不是很難。coding以后又問了一些behavior question。
-
美國白人大姐。以前google的principal engineer。
Design問題
-
美國白人哥們。
coding題目
coding寫完以后又討論了一些我以前做過的project。
總結(jié)
整體面試的體驗(yàn)只能說是一般般。
感覺他們家自視甚高。會(huì)不停地向你強(qiáng)調(diào)自己家招到的engineer都是來自其他知名公司,比如google/uber/facebook等等。這種行為略微顯得有一些。。。有趣。
Quantcast最后給了我senior position的offer。還在考慮接不接受。
打車U
Phone-screen
- 一道coding題
On-site
-
coding & algorithm
一道coding題目,要求現(xiàn)場編譯。
-
coding & algorithm
一道coding題目,要求現(xiàn)場編譯。
Lunch
-
美國哥們。
System design
-
Hiring manager。
Behavior question + past projects discussion
總結(jié)
U家的辦事效率非常高。面完的第二天就收到了senior position的offer。
他們家面試的整體體驗(yàn)很好。面試中遇到的engineer的平均水平感覺也比較高。
能拿到他們家的offer我很滿意。
手機(jī)A
手機(jī)A家的業(yè)務(wù)以硬件為主。但是他們家的軟件業(yè)務(wù)這幾年也開展得有聲有色。我這次面試的是灣區(qū)的一個(gè)Applied ML組。選擇面試這個(gè)組,一是因?yàn)槟壳笆袌錾螹L相關(guān)的技術(shù)越來越火;二是因?yàn)槲覍τ贏家的ML究竟會(huì)專注于哪一塊有些好奇。
Phone-screen
和Hiring manager做的電話面試。原本計(jì)劃一個(gè)小時(shí)的面試硬是聊了快兩個(gè)小時(shí)。
畢竟是硬件公司,我被問到了很多關(guān)于底層硬件的問題。
又花了很長時(shí)間來討論幾個(gè)不同算法的優(yōu)劣,以及不同算法各自適用于哪種場景?
最后是三道coding題。
On-site
面試分為8輪,每輪45分鐘:
coding
projects & CS fundermental
Hiring manager talk
coding
coding
design
design
culture fit
總結(jié)
雖然面試已經(jīng)過去了兩周,還是請?jiān)试S我吐槽一下這次神奇的面試經(jīng)歷。
這可能是我有生以來最差的一次面試體驗(yàn),沒有之一!
面試之前,recruiter給出的時(shí)間表是這樣的:
- 10:00am:面試開始
- 01:30pm:面試結(jié)束
面試當(dāng)天:
暴雨。
我9點(diǎn)半到達(dá)面試的辦公樓。A家的人不讓我進(jìn)樓里面等,說只有面試官才可以把我領(lǐng)進(jìn)去。
我只好在樓外面的屋檐下避雨等待。
等到10點(diǎn)沒人來,打電話給recruiter,她說讓我打給operator催。
打給operator,operator直接把電話轉(zhuǎn)給第一輪面試我的人,沒人接電話。
再打給recruiter,她去催了半天,回電話說面試我的人馬上下樓。
又等了十幾分鐘,快10點(diǎn)半了,面試我的人才開車趕到,撒著拖鞋慢悠悠地從樓外面的停車場走過來。
然后一直面到1點(diǎn)多,沒人提管我吃午飯的事。
因?yàn)橹皉ecruiter說是面試到1點(diǎn)半結(jié)束,我以為我很快就可以走人去吃飯了。
結(jié)果又接連來了三個(gè)面試官,也都不提吃飯的事。。。
倒數(shù)第二輪面試的時(shí)候我腦子已經(jīng)不清楚了。那哥們問我有什么想問他的,我就問了兩個(gè)問題:
- 你是最后一輪了嗎?
- 你們A家面試的時(shí)候不管人午飯是嗎?
然后這些人才給我找了一個(gè)冷三明治,邊吃邊把最后一輪面了。
他們家最后給了我offer。不過還是要說:整個(gè)面試流程能混亂到這個(gè)地步也是沒誰了。
求職L
L家的面試是recruiter通過他們家自己的平臺(tái)聯(lián)系上我并安排的。從開始電面到完成on-site的效率很高。
Phone-screen
- 3道coding
On-site
7輪,每輪1小時(shí)。
Design
Hosting manager talk
Lunch
coding
design
algorithm
coding
總結(jié)
最讓人疲勞的on-site。早上10點(diǎn)開始,下午5點(diǎn)結(jié)束。面試完了回到酒店以后感覺整個(gè)人都不好了。
只要面試過程中能和面試官有比較多的交流,我就能對這個(gè)面試官的水平有個(gè)大概的把握。我覺得L家的工程師的整體水平還是很不錯(cuò)的。能感覺出來他們做了很多非常solid的work。聽說他們家這幾年流失了很多大牛,但看來技術(shù)積累的底子還在。另外,和我聊天的好幾個(gè)面試官都是open source project的active contributors。個(gè)人比較喜歡這樣的公司文化。
L家最后給了我offer,具體數(shù)字暫時(shí)不詳。
社交F
Phone-screen
- 一道coding
On-site
system design
coding
coding
lunch
culture fit
總結(jié)
F家的面試題并不是很難,也都是leetcode上的原題,或者是在原題的基礎(chǔ)上做了一些小的改動(dòng)。
第二輪,我解題的速度稍微慢了一點(diǎn)。面試結(jié)束后自己唯一感覺沒發(fā)揮好的也就是這一輪了。
比較有意思的是recruiter的表現(xiàn),值得說一說。
這個(gè)recruiter(姑且稱他為C吧)大概在16年11月主動(dòng)聯(lián)系過我。C希望我可以去面F家的一個(gè)data engineer的position。我對于data engineer完全沒有興趣,加上當(dāng)時(shí)我還沒有準(zhǔn)備好開始面試,就沒有明確地答復(fù)他。只是說如果以后有需要的話再和他聯(lián)系,并把自己的簡歷發(fā)給了他。
今年2月準(zhǔn)備開始面試前,我通過在F家的朋友把簡歷投了上去。結(jié)果等了足有兩周也沒有F家的recuriter聯(lián)系我。那時(shí)我才反應(yīng)過來:有可能是因?yàn)镃握有我的簡歷,其他rucruiter看到我的case已經(jīng)有人處理,就不再聯(lián)系我了。
我只好主動(dòng)找到C,說明我只想面SDE職位,希望他可以幫我安排general hire的面試。他當(dāng)時(shí)表示沒有問題,然后就有了上面提到的面試經(jīng)歷。
比較奇怪的是,面試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."。還說這個(gè)data engineer team做的東西很偏software engineer work,并且這個(gè)組幾個(gè)月后就會(huì)轉(zhuǎn)為software engineer team云云。
我的幾個(gè)想法:
首先,明明說好是general hire,為什么變成了"this team would not give you an offer"?
第二,繞了一大圈子又回到了data engineer position,很難不讓我覺得這個(gè)過程有些奇怪。
第三,“這個(gè)DE team很快就會(huì)轉(zhuǎn)為SE team”的這種鬼話還是拿去騙鬼吧。
最后,我和他挑明了態(tài)度:我已經(jīng)有了好幾家的offer,如果可以轉(zhuǎn)為SDE我就會(huì)很有興趣,不然的話就免談了。他表示無能為力,我也就發(fā)郵件表示了感謝結(jié)束。
我不敢很武斷地說這個(gè)recruiter一定有問題,也不想把面試的失敗歸咎于此。畢竟第二輪coding我完全可以表現(xiàn)得更好。只是想提醒一下對他們家感興趣的朋友,如果能通過內(nèi)部refer提交簡歷的話,盡量避免把簡歷發(fā)給一些隸屬關(guān)系不確定的recruiter或者sourcer。也許是我多心了,但是小心一點(diǎn)總不會(huì)有錯(cuò)。
拋開略顯奇怪的recruiter,F(xiàn)家的面試體驗(yàn)還是很不錯(cuò)的。面試的過程比較順利,聊過的工程師都比較友好,題目的難度也算合理。
我以前也面過F家,結(jié)果在所有tech interview rounds都拿到positive feedbacks的情況下因?yàn)橐粋€(gè)奇怪的原因被拒。這次也多少有些遺憾??赡茏约汉退麄兗揖壏植粔虬?:(
搜索G
通過朋友refer拿到面試,并且免掉了電面。
On-site
一共6輪:
coding
system design
lunch
coding
coding
coding & algo
總結(jié)
G家是我面試這么多家公司下來,唯一一個(gè)面試剛結(jié)束我就知道肯定沒戲了的公司,也是唯一一個(gè)我遇到了完全找不到解題思路的算法題的公司。
這可能就是G家的風(fēng)格吧。畢竟,這種規(guī)模的公司不需要太注重應(yīng)聘者的工作經(jīng)驗(yàn),除非你牛得驚天動(dòng)地。
一般情況下,無論你的背景和經(jīng)歷怎樣,都可以在G家里找到和自己的水平相匹配的職位。這樣一來,當(dāng)coding成為主要、甚至是唯一的評定標(biāo)準(zhǔn)的時(shí)候,碰到一些高難度的題目也算正常。
至于面試者喜不喜歡這種風(fēng)格,只能是因人而異吧。
最終結(jié)果果然不出所料。
社交S
2017年初整個(gè)北美IT界的明星。
以他們家目前的狀況,簡歷都是遞不上去的。多虧我的一個(gè)朋友是他們家的元老,才幫我爭取到了這次面試。
Phone-screen
- 一道coding題
On-site
coding
coding
Lunch
-
design:怎么設(shè)計(jì)S家的一個(gè)app功能。涉及到存儲(chǔ)、service layer等多個(gè)模塊。聊了很多S家產(chǎn)品的特殊性,以及這些特殊性所需要的獨(dú)特設(shè)計(jì)。很有意思的一輪design。
如果要說自己這一輪的表現(xiàn)有什么不足的話,大概就是對于幾個(gè)design的細(xì)節(jié),自己都是先從最常見的設(shè)計(jì)思路談起,而沒能一開始就考慮到S家產(chǎn)品的特殊性。雖然在面試官指出之后自己都給出了相應(yīng)的解決方案,但是可能會(huì)給面試官一種我不是特別熟悉他們家產(chǎn)品的印象。
coding
注:他們家的面試是需要現(xiàn)場編譯代碼,并運(yùn)行通過的。
總結(jié)
我面試完的第二天他們家就在紐約敲鐘了。恭喜內(nèi)推我的朋友financial free。
他們家的產(chǎn)品很有特點(diǎn),面試過程中也會(huì)針對這些特點(diǎn)聊到很多設(shè)計(jì)細(xì)節(jié)。所以面他們家的朋友最好在面試前多熟悉一下他們的app。
感覺不太好的地方是他們家recruiter的辦事效率。也許是因?yàn)樗麄兗艺幵贗PO期間,recruiter的效率著實(shí)感人:從電面完到通知on-site足足等了10天,這還是中間發(fā)郵件催過的結(jié)果。面試完的當(dāng)天,recruiter說第二天就給我feedback,最遲三天內(nèi)也會(huì)有結(jié)果。到今天已經(jīng)一周了,依然音信全無。因?yàn)槭稚掀渌鹢ffer有deadline,我只好發(fā)郵件再去催。recruiter回了個(gè)消息說晚上再打電話給我確定的答復(fù)?,F(xiàn)在8:50pm,依然沒有消息。
只好繼續(xù)等/繼續(xù)催了。。。
貼圖P
通過朋友內(nèi)部推薦拿到的機(jī)會(huì)。
開始聯(lián)系他們家的時(shí)候我已經(jīng)收到了其他家的幾個(gè)offer,為了趕上進(jìn)度,recruiter讓我直接on-site。
On-site
coding
coding
Lunch
design
algorithm
culture fit
注:他們家面試的coding題也是是需要現(xiàn)場編譯運(yùn)行的。
總結(jié)
他們家的面試今天下午才結(jié)束,具體結(jié)果還不清楚。自己感覺面得還算不錯(cuò)。等結(jié)果吧。