國(guó)內(nèi)IT碩士北美求職記
最近簽掉了 offer,找工作的事情算是告一段落。在這里寫一點(diǎn)面試體驗(yàn)和心得,希望對(duì)有興趣去北美工作的朋友有所幫助。
先簡(jiǎn)單介紹下自己,國(guó)內(nèi)碩士在讀,明年畢業(yè),沒有牛 paper,也沒參加過 ACM-ICPC 競(jìng)賽。在實(shí)驗(yàn)室做過內(nèi)核、虛擬機(jī)和 Android 底層相關(guān)的研究工作,接過一些網(wǎng)頁和移動(dòng)開發(fā)的外包,2011 年開始在字節(jié)社兼職負(fù)責(zé)后臺(tái)開發(fā)。另外也經(jīng)常上 Stackoverflow 和 GitHub。
這次決定直接申請(qǐng)美國(guó)的職位后,由于心里沒底,不知道國(guó)外公司招聘的難度,所以一開始投了很多公司。幾個(gè)大公司都找人內(nèi)推或者直接投了,小公司也投了不少,比如 Foursquare、Path、Pinterest 和 Square 等都試了。當(dāng)時(shí)甚至在手機(jī)上找了一圈應(yīng)用,把可能涉及后端開發(fā)的應(yīng)用都投了一遍。不過大多數(shù)公司都沒給我安排面試,只有 Microsoft、Google、Facebook、Twitter 和 Hulu 這五家公司愿意給我面試機(jī)會(huì)。
一般來說,國(guó)內(nèi)畢業(yè)后直接投國(guó)外公司,會(huì)比出國(guó)留學(xué)畢業(yè)后找工作的難度大一些。除了語言因素之外,我了解到的主要原因在于工作簽證,出國(guó)留學(xué)畢業(yè)后可以通過 OPT 簽證入職,之后再過渡到 H-1B 簽證。而國(guó)內(nèi)畢業(yè)的學(xué)生只能通過 H-1B,這意味著要等到第二年的十月份才能入職。好在 Google、Facebook 等公司不太介意這個(gè)問題,還是會(huì)歡迎國(guó)內(nèi)的應(yīng)屆生申請(qǐng)。
校招的 HR 一般會(huì)有各自的職責(zé)。比如 technical sourcer 負(fù)責(zé)發(fā)現(xiàn)有希望進(jìn)入自己公司的應(yīng)屆生;recruiter coordinator 會(huì)幫助 recruiter 安排面試者的面試時(shí)間、面試官,以及 onsite 面試時(shí)幫助面試者訂機(jī)票和酒店;staffing consultant 則負(fù)責(zé)發(fā) offer 以及介紹公司的具體福利制度,并解釋面試者相關(guān)的問題。不同公司的 HR 職責(zé)的分法自然也不一樣,我在 Facebook 的面試過程中只和兩位 HR 聯(lián)系過,而在微軟的面試過程中則聯(lián)系過五六位 HR。
在面試流程方面,相比我了解到的國(guó)內(nèi)公司的面試,國(guó)外公司的面試安排上會(huì)更人性化一些。例如安排面試時(shí)間時(shí),HR 一般會(huì)先讓你給出幾個(gè)空閑的時(shí)間點(diǎn),然后他們?cè)購(gòu)倪@些時(shí)間中給你安排面試。此外在為你安排 onsite 的住宿時(shí),也會(huì)詢問你有沒有相關(guān)的要求。
關(guān)于面試題目,大多數(shù)公司都比較側(cè)重面試者對(duì)基本的數(shù)據(jù)結(jié)構(gòu)和算法的掌握程度,以及把這些內(nèi)容實(shí)現(xiàn)為實(shí)際代碼的能力(一般會(huì)要求你選一個(gè)語言實(shí)現(xiàn),而不允許用偽代碼)。越是規(guī)模大的公司越注重這些基本功,而小公司除此之外還會(huì)考察你的開發(fā)經(jīng)驗(yàn),例如對(duì)某個(gè)框架的了解和性能優(yōu)化方面的技巧。關(guān)于這一點(diǎn)區(qū)別我的理解是大公司里面會(huì)有自己的框架和開發(fā)工具,面試者的基本功好就能比較快的上手;而小公司一般用社區(qū)現(xiàn)有的工具,所以已有的開發(fā)經(jīng)驗(yàn)可以直接用在將來的工作中。
下面是這幾個(gè)公司的面試細(xì)節(jié),有些公司因?yàn)樵?onsite 面試的時(shí)候簽了 NDA,所以沒法透露具體的面試題,還請(qǐng)見諒。
Microsoft
微軟是我最早投的公司之一,托了在微軟總部工作的一位學(xué)長(zhǎng)幫忙內(nèi)推。面試包括一輪 HR 面和四輪 onsite 面。
申請(qǐng)了一個(gè)多月后一直都沒有反應(yīng),直到微軟國(guó)內(nèi)招聘的前一天,北京的 HR 打電話問我是不是投過微軟的職位,要我參加第二天上海站的筆試。
筆試過后,又過了一個(gè)多月,收到了微軟一位招聘人員的郵件,問我是不是對(duì)微軟北美的職位有興趣,要我填一份基本情況的問卷,里面有問到其他公司的面試進(jìn)度。我當(dāng)時(shí)已經(jīng)收到了 Google 和 Facebook 的面試邀請(qǐng),就如實(shí)填寫了。回復(fù)第二天后就收到了郵件通知,告訴我會(huì)有 HR 進(jìn)一步跟進(jìn)。第三天有一位 HR 聯(lián)系我和我約電面的時(shí)間。微軟約電面的方式和其他公司不大一樣,HR 會(huì)給出很多個(gè)選項(xiàng),讓你在里面選擇幾個(gè)空閑的時(shí)間。另外值得一提的是這些時(shí)間都轉(zhuǎn)成北京時(shí)間了,這也是微軟在安排面試時(shí)比較人性化的一個(gè)地方。
第一輪面試是 HR 面。HR 先問了一些技術(shù)無關(guān)的問題,比如喜歡做什么,工作地點(diǎn)的偏好,什么時(shí)候開始學(xué)的編程,為什么投了微軟等等。接著是一些智力題,比如 9 個(gè)小球,8 個(gè)質(zhì)量相等,另一個(gè)比其他的重,如何用天平稱兩次把它找出來;公司開發(fā)了一種新鍵盤,有哪些測(cè)試它的方法;在會(huì)議室內(nèi)怎么估計(jì)室外的溫度。都是些更像是考驗(yàn)英語水平而不是技術(shù)能力的問題。
面完第二天收到了 onsite 的通知。雖然是北美的職位,onsite 面試地點(diǎn)卻是在上海。我參加的是周日的面試,和我一起參加面試的還有一位學(xué)生,他之前在微軟實(shí)習(xí),了解到這次有去北美工作的機(jī)會(huì)后也想嘗試下。面試官是從總部飛過來的工程師,一共有四位,其中三位都已經(jīng)是 principal 級(jí)的了。HR 提到一般技術(shù)面試要五輪,因?yàn)槲覀冎皡⒓舆^一輪筆試,所以只需要面四輪。
onsite 面每一輪的過程都差不多,都是面試官自我介紹,接著我介紹自己和做過的一些項(xiàng)目,然后開始技術(shù)問題,最后是我提問的環(huán)節(jié)。微軟的面試問題會(huì)考察面試者編碼、設(shè)計(jì)和測(cè)試三方面的能力。
coding 環(huán)節(jié)要求直接在白板上寫代碼,我被問到兩個(gè) coding 問題。一是如何檢查一棵二叉搜索樹是否正確,二是寫一個(gè)解數(shù)獨(dú)的程序。第一個(gè)問題寫起來很快,第二個(gè)問題因?yàn)闀r(shí)間有限,我先寫了一個(gè)沒啥剪枝的暴力搜索的版本,寫完后和面試官分析了可以在此之上做的優(yōu)化。
設(shè)計(jì)方面的問題有兩個(gè)。第一個(gè)問題是設(shè)計(jì)一個(gè)分布式的數(shù)據(jù)管理系統(tǒng)。使用場(chǎng)景可以是一個(gè)連鎖店信息的記錄系統(tǒng),每個(gè)分店都有可能更新自己的信息,并把這些改動(dòng)傳播到整個(gè)系統(tǒng)中。在設(shè)計(jì)這一系統(tǒng)的同時(shí)要考慮性能、容錯(cuò)、一致性等要求。我一開始想了一個(gè)基于 push 的機(jī)制,在面試官指點(diǎn)下逐步優(yōu)化,最后還是有不少問題。于是干脆重新設(shè)計(jì)了一個(gè)基于 poll 的系統(tǒng),優(yōu)化改進(jìn)之后面試官滿意了。
另一個(gè)設(shè)計(jì)問題和類的設(shè)計(jì)有關(guān),要求設(shè)計(jì)一個(gè)包含圖形界面的棋盤游戲。因?yàn)橹白鲞^不少相關(guān)的開發(fā),所以這一部分我還挺擅長(zhǎng)的。按照 Single Responsibility 的原則設(shè)計(jì)了幾個(gè)分工明確的類,另外把網(wǎng)絡(luò)對(duì)戰(zhàn)和 AI 接口都考慮進(jìn)去了。設(shè)計(jì)完成后面試官要求我從用戶鼠標(biāo)單擊這一事件開始介紹整個(gè)控制流程,在某些類中還會(huì)問及這么設(shè)計(jì)的原因,以及和其他設(shè)計(jì)方案相比的優(yōu)缺點(diǎn)。
測(cè)試部分的問題也有兩個(gè)。第一個(gè)問題是如何測(cè)試一個(gè)隨機(jī)函數(shù)。第二個(gè)問題和分布式系統(tǒng)有關(guān),面試官先向我介紹了一個(gè)分布式系統(tǒng),包括它的使用場(chǎng)景和基本的架構(gòu),然后問我其中某一個(gè)部件應(yīng)該如何測(cè)試。提到正確性、可伸縮性、一致性和容錯(cuò)性后再給出相應(yīng)的測(cè)試方法應(yīng)該差不多了。
onsite 面試后的第二天后就收到了 HR 的郵件,祝賀我拿到了 offer,并和我約時(shí)間談具體的 offer 細(xì)節(jié)。雖然微軟一開始拖了兩個(gè)多月才開始安排面試,但是一旦開始面試后他家的效率非常高,是這次面試的幾家公司里效率最高的了。
Google 面試也是托學(xué)長(zhǎng)推薦了。HR 說我的簡(jiǎn)歷看起來很不錯(cuò),先給我安排了兩輪電面。
電面都和 coding 有關(guān),面試官會(huì)給你一個(gè) Google Docs 鏈接,在電話里描述題目后要求你在 Google Docs 上寫程序。題目的難度不高,兩輪一共四題,都是對(duì)基本數(shù)據(jù)結(jié)構(gòu)的操作,例如給在一個(gè)未排序的數(shù)組中去掉重復(fù)的數(shù)字,還有把一個(gè)有序數(shù)組轉(zhuǎn)成一個(gè)平衡二叉搜索樹,在一個(gè)已排序但有重復(fù)數(shù)字的數(shù)組中查找元素等。
第一輪電面聊天的時(shí)候還發(fā)現(xiàn)第一輪的面試官是在 ITA Software 做的。正好前幾天用他們的產(chǎn)品 Matrix Airfare Search 訂到了低價(jià)的去土耳其的機(jī)票,過了一星期神奇的在面試的時(shí)候碰到了這個(gè)團(tuán)隊(duì)的工程師。當(dāng)時(shí)一下子就興奮起來,聊了不少和 Matrix 的有關(guān)的話題。這位面試官聽說中國(guó)的機(jī)票也能用他們的平臺(tái)查詢,還挺吃驚的。他還提到他們?cè)鞠氚延?jì)算任務(wù)放到 Google 內(nèi)部的計(jì)算框架上,但是由于和合作方的合同的限制,沒法把一些商業(yè)數(shù)據(jù)放到 Google 的平臺(tái)里,只能繼續(xù)用原有的計(jì)算引擎。
第二輪電面的面試官是位印度人,雖然我很難聽懂他的口音,但是他很耐心,會(huì)和我重復(fù)描述問題,所以題目做下來也沒啥困難。在和他的聊天中得知他除了正業(yè)(Youtube)外還在閑余時(shí)間研究機(jī)器人。
電面結(jié)束后第二天收到了 HR 的郵件,邀請(qǐng)我去總部面試。由于當(dāng)時(shí)已經(jīng)是九月底了,而我十月初打算去土耳其玩兩星期,于是只能從土耳其回來后開始準(zhǔn)備簽證了。Google 的 HR 非常熱情,每次回郵件都很及時(shí),經(jīng)常能在加州時(shí)間晚上十一點(diǎn)左右收到她的郵件。她幫我弄來了 Google 的面試邀請(qǐng)信,順利的過了簽證面試。之后另一位 HR 還幫我訂好了從上海往返 San Jose 機(jī)場(chǎng)的機(jī)票,以及三晚的住宿(因?yàn)榭紤]到我需要倒時(shí)差,多了一晚住宿,這一點(diǎn)也很體貼)。
Google 給我安排的住宿是 Wild Palms Hotel,在 Sunnyvale。不愧是硅谷的旅館,每天早上起來吃旅館的早飯,都能聽到有人討論 Java。在 Sunnyvale 的第二天我坐公共汽車到處逛了逛,考慮到接下來要在加州玩一圈,就辦了張 T-mobile 的一個(gè)月電話卡(60 美元,包括不限量的短信、通話和 3G 流量,但是這家的信號(hào)非常差)。這家旅館和蘋果總部也很近,出門有公交車直達(dá),作為半個(gè)果粉自然不會(huì)浪費(fèi)這個(gè)機(jī)會(huì)。
第三天在 Google 工作的學(xué)長(zhǎng)開車帶我去了公司。Google 的園區(qū)里有不少免費(fèi)自行車,沒有鎖,直接就可以騎。我在 Google 商店買了點(diǎn)禮品,在園區(qū)騎車轉(zhuǎn)了一會(huì)兒后就開始面試了。
面試一共有四輪,每輪 45-55 分鐘,中間有 5 分鐘的休息時(shí)間。中午會(huì)有 Google 工程師帶你吃飯。帶我吃飯的 Google 工程師也是中國(guó)人,了解到這點(diǎn)后我們就知道用中文聊天了。吃飯時(shí)間里了解了不少在 Google 工作的優(yōu)缺點(diǎn),也一定程度影響了我之后做的決定。
由于簽了 NDA,沒法在這里透露具體的面試題目。面試主要都是算法題,比電面難一點(diǎn)。除了算法題外我還被問到一個(gè)分布式系統(tǒng)的設(shè)計(jì)題,以及一個(gè)多線程相關(guān)的 coding 題,后者用信號(hào)量很容易解決。其實(shí)如果能和面試官好好交流,這些題目做出來應(yīng)該是沒啥問題的。
面完第二周 HR 通知我拿到 offer 了,打電話告之了 offer 的具體細(xì)節(jié)。Google offer 的郵件附件還包括一份各項(xiàng)福利的介紹,著實(shí)吸引人。我還記得 HR 打電話來的時(shí)候我正好在三藩 Exploratorium 邊上的小湖旁,在湖邊美景中聽到這樣的好消息自然分外興奮。HR 還告訴我沒有限制我的簽約時(shí)間,可以在任意長(zhǎng)的時(shí)間后再做出決定,也算是 Google 非常體貼的地方。另外具體的職位會(huì)在入職前一段時(shí)間決定,HR 的說法是可以根據(jù)自己的喜好在一些項(xiàng)目之中選擇。
我在今年三月份投過一次 Facebook 的暑期實(shí)習(xí),被告之已經(jīng)招滿了,接下來校招時(shí)會(huì)再聯(lián)系我。七月份的時(shí)候我又在網(wǎng)站上投了一次開發(fā)職位,還麻煩一位在里面實(shí)習(xí)的學(xué)長(zhǎng)幫我內(nèi)推了。八月一位 HR 聯(lián)系我安排第一輪面試,電面安排在了九月。
Facebook 的 HR 也很負(fù)責(zé),她在電面前幾天打電話和我聊天,介紹 Facebook 的基本情況,以及面試流程。第一輪電面結(jié)束后的情況分三種,如果面試表現(xiàn)很不錯(cuò),那就直接獲得了 onsite 的機(jī)會(huì);如果面試表現(xiàn)一般,面試官不確定要不要,就會(huì)再加面一輪;如果面試表現(xiàn)不好,就可能直接被刷了。除此之外 Facebook 的 HR 比較體貼的一點(diǎn)在于給中國(guó)人安排的第一輪面試官很有可能也是個(gè)中國(guó)人,降低了語言上出現(xiàn)問題的.可能。
HR 的電話里還提到 Facebook 入職后有六星期的 bootcamp,可以熟悉各個(gè)項(xiàng)目和團(tuán)隊(duì),具體的項(xiàng)目是 bootcamp 結(jié)束后自己選的。問了一下在那工作的朋友,做出的選擇一般都會(huì)被滿足,因?yàn)?bootcamper 的選擇分布還算比較平均的。
Facebook 電面和 Google 差不多,是在 collabedit 上進(jìn)行的。也是面試官在電話中口述題目,我在網(wǎng)站上寫代碼。老實(shí)說這個(gè)網(wǎng)站的體驗(yàn)不怎么樣,面試過程中出現(xiàn)過幾次我這邊寫的代碼沒在面試官那里出現(xiàn)的情況。好在面試官比較有經(jīng)驗(yàn),一發(fā)現(xiàn)有問題就會(huì)提醒我刷新頁面。
第一輪電面我做了三個(gè) coding 題,題目都不難,但是要求 bug free。電面的面試官抓 bug 的能力著實(shí)厲害,找出了兩個(gè)我一開始沒發(fā)現(xiàn)的 bug。好在他提示說有 bug 但沒指出的情況下,我把它們都修正了。面試題目難度和 Google 的電面難度差不多,都是對(duì)數(shù)組、二叉樹和字符串的基本操作。第一題是把一個(gè)字符串中的 %20 都轉(zhuǎn)成空格,第二題是按層打印一棵二叉樹,第三題是找出兩個(gè)有序數(shù)組里不同的數(shù)字(類似求集合的異或)。程序正確后面試官還會(huì)問一些優(yōu)化方面的問題,例如在不同的情形下應(yīng)該使用哪一種算法。
面完后第二天收到 recruiter 的消息說我拿到 onsite 的資格了,具體的時(shí)間會(huì)在十一月通知我。
Facebook 給我安排的酒店是 Palo Alto 的 Sheraton。酒店門口停著不少出租車,面試那天的出租車司機(jī)還是用 Square 收的錢。我的面試正好趕上了他們的 University Day。這一天的安排是上午三輪面試,中午吃飯,下午逛一圈公司以及三場(chǎng)講座。我的第三輪面試還出了點(diǎn)茬子,面試官一直沒出現(xiàn),HR 只能先帶我去吃中飯。中飯結(jié)束后 HR 帶著別人邊逛公司邊介紹,我只能繼續(xù)我的第三輪面試了。
Facebook 校招時(shí)本科生和碩士生是統(tǒng)一級(jí)別的,面試只包括算法題,不會(huì)有設(shè)計(jì)題;而博士生則高一級(jí),面試的時(shí)候還會(huì)有設(shè)計(jì)題。三輪 onsite 面試包括一輪 jedi 和兩輪 ninja。jedi 面主要是讓面試者介紹自己的項(xiàng)目經(jīng)歷,了解面試者的技術(shù)專長(zhǎng)和偏好,不過面試官也讓我做了一個(gè)簡(jiǎn)單的 coding 題。ninja 面各有兩個(gè) coding 題,題目難度都不大,和電面差不多。但是與電面不同的是,面試官會(huì)深入問一些細(xì)節(jié)的問題,例如代碼里生成了多少個(gè)新的對(duì)象,有沒有辦法優(yōu)化等,有一個(gè)問題還要求我用一種算法實(shí)現(xiàn)后,再用另一種完全不同的思路實(shí)現(xiàn)一次。(onsite 面試是簽了 NDA 的,這里就不方便透露具體的題目了)
面試完之后有三個(gè)講座,第一個(gè)講座介紹了 Facebook 總體的工作環(huán)境。第二個(gè)分產(chǎn)品和后臺(tái)兩個(gè)講座,同時(shí)進(jìn)行所以只能選一個(gè)。我一開始選擇了后臺(tái)開發(fā),不過當(dāng)時(shí)突然對(duì)產(chǎn)品有了興趣,就去聽了產(chǎn)品的講座。一位負(fù)責(zé) Events 開發(fā)的工程師結(jié)合這個(gè)產(chǎn)品介紹了下 Facebook 內(nèi)部產(chǎn)品開發(fā)的流程,例如新特性是怎么出來的,如何測(cè)試等。最后一個(gè)環(huán)節(jié)是幾位剛從 bootcamp 畢業(yè)的員工和我們分享他們?cè)?Facebook 中工作的感受。
University Day 結(jié)束后,參加活動(dòng)的每位學(xué)生還收到一個(gè)包裝精致的禮物。拆開來后是一塊兩面分別刻著「Move fast and break things」和「Proceed and be bold」的玻璃磚。我還是很喜歡這個(gè)禮物的,這也一定程度上影響了我最后的選擇。
面試完第二天 HR 從我這里要了三位 reference,包括他們的職稱和聯(lián)系方式,接下來 HR 會(huì)聯(lián)系他們?cè)儐栁业那闆r。Facebook 的動(dòng)作也很快,第二周就給我發(fā)了 offer。有意思的是,offer 郵件的 welcome package 最后一頁建議面試者在入職前熟悉一下 Unix,還推薦了幾篇文章和兩本書。
Google 和 Facebook 的 onsite 是在同一星期面的,前后只隔了一天,收到 offer 的時(shí)間也只差了一天。package 方面, Facebook 比 Google 的要好不少,但是 Google 的 HR 說可以 match Facebook 的 offer。去之前我想過如果兩個(gè) offer 都拿到,那就去 Google。但是到了這兩個(gè)公司,和幾位面試官以及在里面工作的朋友深入聊天后,最終還是選擇了 Facebook,因?yàn)樗?guī)模更小,應(yīng)該能有更多的鍛煉機(jī)會(huì)。
另外我了解到的 Google 和 Facebook 的面試流程都是先由各位面試官給你打分,例如分 strong hire / hire / weak no hire / strong no hire 四檔(不一定完全一致,比如可能會(huì)多一檔 neutral)。同時(shí)要寫下關(guān)于你的面試情況的報(bào)告。再接著由 hiring committee 討論要不要給你 offer,以及 package 如何。有亮點(diǎn)(某位面試官的 strong hire)很重要,一個(gè) strong hire 和幾個(gè) weak no hire 會(huì)比平庸的清一色的 weak hire 好。
Hulu
Hulu 是這幾個(gè)公司里唯一一個(gè)我沒有找人內(nèi)推而拿到面試機(jī)會(huì)的,也是面試體驗(yàn)最好的一個(gè)公司。Hulu 和 Twitter、Zynga、Foursquare 等公司一樣,用了 jobvite 接受和追蹤職位申請(qǐng)。因?yàn)槭巧暾?qǐng)的第一家公司,我在申請(qǐng) Hulu 時(shí)的 cover letter 寫得很詳細(xì),針對(duì)職位需求上的每一條都寫了我的相關(guān)工作經(jīng)驗(yàn),這也許是最后能拿到面試機(jī)會(huì)的原因吧。其他公司的 cover letter 都寫得很簡(jiǎn)單,短短兩段就結(jié)束了。
Hulu 的第一輪電面和其他公司的有些不同。45 分鐘里要做四個(gè)題。面試官提前十分鐘發(fā)了一封郵件給我,上面有兩段代碼。第一段代碼是一個(gè)檢查兩個(gè)字符串是否是 anagram 的程序,寫得很繞而且性能很差。面試官先問我這段代碼的用途,然后問有什么方法優(yōu)化,并要求我把代碼寫在 titanpad 上。接著他問了我第二段代碼是做什么的。第二段代碼也寫得有點(diǎn)復(fù)雜,不過可以看出是一個(gè)檢查有向圖里面是否存在環(huán)的程序。
然后是設(shè)計(jì)題,要求設(shè)計(jì)一個(gè) LRU Cache,只要說出接口、用到的數(shù)據(jù)結(jié)構(gòu)和大致的算法就可以了,我想了個(gè)用一個(gè) LinkedList 和一個(gè) HashMap 的方案。
第四題還是代碼題,寫一個(gè)合并兩個(gè)有序鏈表的程序。
面完后還有點(diǎn)時(shí)間,我們就聊了聊。面試官是在 Hulu 做支付的,主要用的語言是 Scala(Hulu 里面各個(gè)團(tuán)隊(duì)用的技術(shù)都很自由,可以選擇自己喜歡的語言開發(fā),Python Ruby C# Java 都有)。我當(dāng)時(shí)正好在字節(jié)社做 iOS 上的應(yīng)用內(nèi)購(gòu)驗(yàn)證,就問了他有沒有處理黑卡壞賬方面的經(jīng)驗(yàn)。可惜 Hulu 在 iOS 上只有訂閱方式的支付途徑,沒有 non-consumable product 的相關(guān)經(jīng)驗(yàn)。
面完后 HR 給我安排了第二輪電面。面試官來自法國(guó)人,是 FFmpeg 的維護(hù)者之一。面試官看我簡(jiǎn)歷上有星際比賽的獎(jiǎng)項(xiàng),還當(dāng)過校隊(duì)的隊(duì)長(zhǎng),就和我聊起了星際2的平衡性。接著說到最近的蟲群之心 beta,他覺得改動(dòng)沒有當(dāng)年母巢之戰(zhàn)的有意思,因?yàn)榍捌诘母膭?dòng)不大。
聊了二十分鐘的星際2后才切入正題,coding 題很簡(jiǎn)單,就是在一個(gè)數(shù)組里找出兩個(gè)數(shù),使得他們和為給定的數(shù)。寫完這個(gè)最基本的版本后還有些別的變化,比如如果所有的數(shù)都是一定范圍內(nèi)的正整數(shù),這時(shí)可以用一個(gè)數(shù)組統(tǒng)計(jì)每個(gè)數(shù)字的出現(xiàn)頻率。
二面結(jié)束后等了三星期還沒有消息,不知道是默拒了還是 HR 忘了。三星期后我又寫了封信詢問我的二面結(jié)果,HR 回信說歡迎我去他們公司 onsite 面,之前校招忙把我忘了。
Hulu 的總部在洛杉磯,Santa Monica 附近,離海灘只有幾公里的路程。一進(jìn)面試的會(huì)議室就看到白板上寫著「Welcome Yuanxuan to Hulu」,一下子對(duì)這個(gè)公司充滿了好感。
Hulu 的 onsite 面試題是面過的幾家公司里最難的,一共有四輪。前三輪由來自內(nèi)容團(tuán)隊(duì)、API 團(tuán)隊(duì)和架構(gòu)團(tuán)隊(duì)的工程師面試,最后一輪的面試是 CTO 親自面的。題目也是涵蓋了算法、設(shè)計(jì)和實(shí)際的編碼,有一輪的問題從設(shè)計(jì)一個(gè)分布式系統(tǒng)開始,討論了這個(gè)系統(tǒng)的身份驗(yàn)證、數(shù)據(jù)分片、原子性、容錯(cuò)等問題的設(shè)計(jì),考察了很多細(xì)節(jié)的地方,最后還讓我寫了 SQL,以及如何優(yōu)化這些查詢指令。不過我對(duì) SQL 很不熟悉,每次用都要查手冊(cè),當(dāng)時(shí)用了 ActiveRecord 的查詢接口代替。
CTO 面完后 HR 進(jìn)來問了我有沒有其他公司的 offer,接著帶我逛了一圈 Hulu 的工作場(chǎng)所。Hulu 總部只有 40 位左右的工程師,大家相互之間都很熟,氣氛非常好,也比較自由。逛完后 CTO 帶我出去買了杯咖啡,在回來的路上給我發(fā)了 offer。Hulu 的 package 和 Facebook 的在數(shù)額上差不多,但是因?yàn)楣拘再|(zhì)的問題沒法發(fā)股票給我,只能用相近的獎(jiǎng)金代替。
回到公司后,CTO 問我對(duì)哪個(gè)團(tuán)隊(duì)比較有興趣,我說如果我最后簽了 Hulu 的話應(yīng)該會(huì)想去做后端。HR 就安排了這個(gè)團(tuán)隊(duì)的工程師和我一起出去吃晚飯,還給了我兩張 voucher 用于支付回去的出租車。當(dāng)時(shí)因?yàn)橛X得去 Hulu 可能性不大,覺得對(duì)方這么熱情實(shí)在不好意思,可是還是推脫不掉,只得跟著他們?nèi)チ烁浇患也蛷d。因?yàn)?Hulu 主要內(nèi)容是美劇和電影的,飯桌上討論的主題也是各種電視劇,還提到接下來 Hulu 可能會(huì)搬到附近另一個(gè)辦公樓。
最后還是沒有接受 Hulu 的 offer,雖然對(duì)他家印象非常好。一方面我更希望在灣區(qū)工作,另一方面小公司吸引人的一個(gè)點(diǎn)在于初期的股票,由于 Hulu 沒法發(fā)股票所以這個(gè)優(yōu)勢(shì)也就沒了。
Twitter 用的也是 jobvite 的招聘系統(tǒng),我麻煩了一位在里面工作的學(xué)姐幫忙內(nèi)推。據(jù)說 Twitter 相比其他互聯(lián)網(wǎng)公司 work-life balance 是比較好的,工作會(huì)相對(duì)輕松。而在給我安排面試時(shí) HR 給出的可以約的最晚的時(shí)間點(diǎn),也是幾個(gè)公司里最早的,于是我只能很早起床等待面試官的電話。
第一面是一位負(fù)責(zé)移動(dòng)端網(wǎng)頁前端開發(fā)的工程師面的。他說我的簡(jiǎn)歷上工作經(jīng)歷很豐富,就不讓我做 coding 題了,讓我談?wù)勛鲞^的這些項(xiàng)目。談完項(xiàng)目后又進(jìn)入了聊天時(shí)間,我提到喜歡 Twitter 的一個(gè)原因在于他有很多好用的開源項(xiàng)目。比如我平時(shí)寫一些小型的 web 應(yīng)用都會(huì)用 bootstrap,省時(shí)省力;而我之前實(shí)習(xí)的時(shí)候做的一個(gè)分布式的內(nèi)容下載系統(tǒng),也參考了 murder 的實(shí)現(xiàn)。另外因?yàn)楫?dāng)時(shí)我在實(shí)現(xiàn)字節(jié)社 iPhone 和 iPad 的 web 界面時(shí)碰到了之前修復(fù)的 bug 后來再次出現(xiàn),忘了測(cè)試的情況,就問了他 Twitter 是怎么做移動(dòng)端 web 界面的測(cè)試的。結(jié)果面試官說他們也基本上是買一堆設(shè)備然后人工測(cè)的,倒是桌面端可以用 Selenium。
愉快的結(jié)束第一面后,就開始了略有點(diǎn)無語的二面。我的二面前三次都沒面成,第一次被放鴿子了;第二次面試官是 iOS 團(tuán)隊(duì)的,聽我介紹完自己想做后端時(shí),說他面我不合適,會(huì)讓 HR 再幫我重新安排一輪;第三次再次被放鴿子,面試官那天很忙,抽不出身。每次面試失敗后都要再等一星期才能收到 HR 的消息,所以光二面就拖了一個(gè)月。
第四次二面終于面成了。我聽面試官介紹應(yīng)該是來自平臺(tái)相關(guān)的團(tuán)隊(duì),不過面試官接著問我是喜歡寫代碼還是喜歡倒騰環(huán)境的時(shí)候,我說喜歡寫代碼,結(jié)果面試官說他的團(tuán)隊(duì)主要是做運(yùn)維的,開發(fā)的工作量很小。估計(jì)是考慮到之前已經(jīng)放過一次鴿子了,這次面試官還是繼續(xù)面下去了。
雖然運(yùn)維團(tuán)隊(duì)本身不是我喜歡的,但是面試官的問題相當(dāng)對(duì)我胃口。一上來就是一連串的幾個(gè)關(guān)于僵尸進(jìn)程的問題:什么是僵尸進(jìn)程?如何列出所有的僵尸進(jìn)程?如何獲得這些僵尸進(jìn)程的 PID?如何把它們終止?我用 ps grep awk xargs 配合管道把這幾個(gè)問題用一行命令行解決了,他很滿意。
第二問是統(tǒng)計(jì)一個(gè) httpd 的訪問日志中,訪問量最大的前五個(gè) IP。我用 Ruby 寫了一個(gè),六行代碼就能搞定。
接著面試官了解 DNS 嗎,如果瀏覽器沒法上網(wǎng)一般怎么診斷?我的回答是先 dig 看 DNS 解析是否正確,然后用 ping 判斷 IP 是否可以訪問,再用 curl 看是不是瀏覽器設(shè)置的問題。最后還可以用類似 www.websitedown.info 的服務(wù)檢查。
第四個(gè)問題是怎么把一個(gè)文件復(fù)制到多個(gè)機(jī)器上?我說可以先用 ssh-copy-id 把公鑰拷過去,然后再用 scp 拷文件。面試官說這樣機(jī)器多就麻煩了。我解釋到可以用 expect 寫腳本自動(dòng)輸入密碼,還加了句當(dāng)然也可以用 Twitter 的開源工具 murder 分布式部署。
第五問是文件系統(tǒng)中 soft link 和 hard link 的區(qū)別。我的解釋是 soft link 是一種特殊的文件,它的內(nèi)容是被指向的文件的路徑,而 hard link 是直接指向 inode 的。所以 soft link 可以用于目錄,但是 hard link 不可以。
文件系統(tǒng)中 inode 和 path 的區(qū)別。我回答是 inode 是文件系統(tǒng)的一個(gè)數(shù)據(jù)結(jié)構(gòu),指向某個(gè)磁盤上的文件;而 path 是由多個(gè) struct dentry 組成的,每個(gè) dentry 描述了 inode 的父子關(guān)系。
最后一問是如何修改 DNS 服務(wù)器?我說可以修改 /etc/resolve.conf。
感覺 Twitter 的電面題會(huì)包含不少概念題,當(dāng)然也有可能是運(yùn)維團(tuán)隊(duì)的特點(diǎn)。幾天后我收到 HR 的郵件,告訴我兩位二面面試官都表示我對(duì)他們的團(tuán)隊(duì)不怎么感興趣,而除了這兩個(gè)團(tuán)隊(duì)外目前還沒有其他團(tuán)隊(duì)可以給我安排面試。估計(jì)從此就進(jìn)入等待列表了,沒能去總部 onsite 面試,我在簽掉 Facebook 后就聯(lián)系 HR 把招聘進(jìn)程終止了。
后記
最后簽了 Facebook,等著下一步關(guān)于工作簽證手續(xù)的通知。mm 也表示愿意和我一起去美國(guó),她應(yīng)該會(huì)先在那里讀個(gè)碩士再找工作。
希望接下來的簽證手續(xù)等事情都一切順利了。
【國(guó)內(nèi)IT碩士北美求職記】相關(guān)文章:
北美求職簡(jiǎn)歷十“不要”02-07
國(guó)內(nèi)大學(xué)直申新西蘭碩士條件01-24
海歸碩士求職簡(jiǎn)歷03-08
北美與美國(guó)教學(xué)設(shè)計(jì)02-07
碩士生求職簡(jiǎn)歷04-20
外科碩士個(gè)人求職簡(jiǎn)歷05-22
碩士學(xué)生的求職信08-13
碩士英文求職信07-11