有夢想的程序須知的硅谷面試經(jīng)驗
筆者之前在LinkedIn做技術(shù)工作同時,也花了不少時間在招聘上,成為了當(dāng)時LinkedIn前三的面試官,包括挖掘候選人,參與校園招聘,草擬面試題,電話面試,Onsite面試,填寫反饋,和***決定是否發(fā)放Offer,都有完整的流程和經(jīng)歷,我就按問答形式給大家借鑒。
問題:硅谷公司的招人的渠道有哪些,跟國內(nèi)有何不同?
一般公司都有自己的Refer和面試系統(tǒng),HR人員尋找候選人,在LinkedIn上就有豐富全面的簡歷庫,通過對畢業(yè)學(xué)校,就職公司的過濾去挖掘潛在員工。還有一些高水平的學(xué)術(shù)會議,工業(yè)界愿意支持和參與,像SIGMOD,VLDB***數(shù)據(jù)庫大會;也喜歡舉辦公開技術(shù)講座,邀請敏感詞各界參加,注冊時留下聯(lián)系方式。或者寫一些技術(shù)博客,開源產(chǎn)品,通過他們做的有意思的項目來間接吸引人才。有時也舉辦一些hackathon比賽,24小時做出一個小產(chǎn)品原型,歡迎各類技術(shù)人才挑戰(zhàn)。當(dāng)時我也參加LinkedIn的編程馬拉松,每人發(fā)一件T-shirt,寫著Eat, Code, No Sleep。我記得內(nèi)部統(tǒng)計表示,2/3的人都是通過內(nèi)部推薦進來的。
其實國內(nèi)的思路更厲害,比如最近雅虎北京一裁員,忙壞了各路IT公司,某創(chuàng)業(yè)公司也湊熱鬧一起去搶人,派出2個高級工程師去面試,結(jié)果,負(fù)責(zé)面試的2個員工都被人挖走。還有一些無節(jié)操HR,偽裝成下面這個,我接觸過的妹子不多,你們不要騙我。
問題:硅谷公司招聘流程是什么,跟國內(nèi)有和不同?
國內(nèi):如果是在校生,一般都要有個筆試,通過率也不高,可能就百分之幾,然后在校園里面試3輪左右,分別對技術(shù),基本功,價值觀的考察。然后就會大規(guī)模發(fā)offer,一些大公司如百度,阿里一年招上千人是很常見的。
硅谷公司:一般是沒有筆試。如果HR發(fā)現(xiàn)簡歷的一些關(guān)鍵字和背景符合職位需求,簡單介紹公司,安排1,2輪電面,如果通過,邀請onsite面試,里面會有4-7輪,里面涉及到不少白板編程,雖然很多人爭議,參見附錄,但目前為止還是有些無奈的選拔手段。
LinkedIn會花很大代價去組織,包括報銷來回機票,吃穿住行,贈送小禮物,給候選人一種非常受尊重的感覺。比如附帶禮物中有一個inMap,把你在LinkedIn上面的聯(lián)系人聚類可視化呈現(xiàn)出來。非???。
這里面成功率非常低,真的是千里挑一,雖然代價很大,但很多公司都是強調(diào)人才是***位的,在宣傳企業(yè)文化和價值上也是起到積極作用。然后就是收集反饋,一般是2個面試官backto back同時給出評價,按1-4打分,***取平均分,Yes = 3.0 ; Very Yes = 3.5; No = 2.5 招聘委員會通過投票和辯論來確定是否發(fā)放Offer。
我記得印象深刻的面試:面試者歲數(shù)大些,當(dāng)時我面的時候也沒出眾,我準(zhǔn)備給他一個一般的分,但他回去馬上給我寫了一篇長信,解釋當(dāng)時我問的問題,給出詳細(xì)參考,我對他的回答非常佩服,至少態(tài)度很積極,也許是當(dāng)場沒有發(fā)揮好,我立馬改變了印象,給他很高評價,但其中有個初級面試官居然給他1分,什么概念(ifyou hire him, I will go),這樣就把他平均分給拉下來,我覺得這樣不公正,就在招聘會議上為他說話,***他也拿到Offer順利來到公司,事實證明這是一個挺優(yōu)秀的技術(shù)人員。
問題:硅谷公司是如何選拔技術(shù)人才的?
硅谷公司對基礎(chǔ)架構(gòu)很重視,注重基本功,員工素質(zhì)和價值觀認(rèn)可。技術(shù)人員還是需要關(guān)注生產(chǎn)力的,其實也很難短時間考察,公司也考慮過是否通過一些做小項目,直接上機模擬真實環(huán)境來評價。但真正實施又難度很大,LinkedIn有個專門負(fù)責(zé)招聘的員工寫過文章闡述面試?yán)砟睿篒nterviews are not Exams 主要是想保持自然,一起應(yīng)對一天工作中場景。
我總結(jié)成3C (Culture, Communication,Curiosity),下面也展開一些重點。
技術(shù):平常扎實的技術(shù)積累,包括系統(tǒng)知識點,不同編程語言,開源工具,團隊合作工具,比如,Restful架構(gòu)有哪些特點,動態(tài)語言的優(yōu)劣。我在知乎上也給出了硅谷跳槽工具箱指南
基本功:代碼簡潔優(yōu)美沒有bug,常見算法的應(yīng)用,優(yōu)化技巧,比如如何把一個O(n^2)的算法優(yōu)化成線性。好的編程習(xí)慣一定要堅持,格式:縮進可以良好排版,括號要對齊,變量名起的有意義。邊界檢查,參數(shù)檢查,異常處理,單元測試。主動寫出合理的Testcase,一些常見的null檢查。不管你之前做過多少年,只要申請工程師職位都要經(jīng)歷過編程的基本考核。
交流:實技術(shù)人員用到的英文都比較淺顯,聽和讀應(yīng)該問題不大,但***在說和寫方面下大功夫,這能突破一些天花板,更多融入團隊交流。
系統(tǒng)設(shè)計:包括設(shè)計大型系統(tǒng)的架構(gòu)選型,各種不同組件的tradeoff,數(shù)據(jù)庫系統(tǒng),網(wǎng)絡(luò)系統(tǒng),分布式系統(tǒng)。比如什么時候適合用NoSQL,如何做一個推送系統(tǒng),緩存系統(tǒng)如何搭建。
問題:您在面試中會重點考察面試者除了技能之外的哪些點?面試者身上哪些特點往往會是各公司認(rèn)為不能接受的?
首先,看背景是否符合職位的需求,比如做分布式計算的工程師,對系統(tǒng)底層,大數(shù)據(jù)架構(gòu)就要有一些涉獵。
第二,聰明,如果我交流的時候發(fā)現(xiàn)他們能很快意識到我說的意思甚至補充我心里想的,這種人非常討喜。如思路異與常人,很快給出***解,能挑戰(zhàn)一些難度大的問題。
第三,好奇和熱情,如果面試者說不清為啥要申請,或者沒啥主動提問的,我會覺得對公司興趣不大,沒有好好做功課,態(tài)度上不夠積極,而就算***技術(shù)很出色,在評價上也是要打折扣。另外如果他技術(shù)面很狹隘,技術(shù)興趣不廣泛,可能也要考慮是否能勝任創(chuàng)業(yè)公司不斷變化的環(huán)境。
不能接受的:
不愿意學(xué)習(xí),對他說的或者寫的很自大,但卻不虛心接受其他人指出的問題和建議。
企業(yè)文化不合,對公司的使命和價值觀有一些偏差,這個比技術(shù)功底更致命,主要是找志同道合的。
問題:從面試官的角度給出一些系統(tǒng)設(shè)計上的考量標(biāo)準(zhǔn)是什么?
我先給一個內(nèi)部培訓(xùn)面試官的方法,大致說了考量環(huán)節(jié)。根據(jù)我的經(jīng)驗,也列出一些關(guān)注點
Adapt to the changing requirements (適應(yīng)變化的需求)
Produce a system that is clean, elegant, well thought (設(shè)計干凈,優(yōu)美,考慮周到的系統(tǒng))
Explain why you choose this implementation (解釋為何這么實現(xiàn))
Be familiar with your experience level to make decisions (對自己的能力水平很熟練)
Answer in high level of scale and complexity (在一些高層結(jié)構(gòu)和復(fù)雜性方面有設(shè)計)
其實大家大可不必追求***,在真正的面試中,沒有人能對答如流,往往面試官也會給出善意的提示。就算你沒回答某個子問題,在面試后的評價中也會綜合衡量,跟其他的面試者比較,最終打出一個分?jǐn)?shù)。很多人在2到3分左右,目標(biāo)是盡量在3分以上。
問題:我不是算法大牛,不是ACM隊員,聽說Google,F(xiàn)acebook有很多牛人才能進,那我怎么能拿到好Offer?
首先要是要有信心,算法不是想象那么難。
***:因為面試常見的算法就那么幾種。只有你努力去總結(jié)歸類相似題目,才能只做很少的題就可以會很多的題。不要盲目關(guān)注數(shù)字。做題質(zhì)量非常重要。標(biāo)準(zhǔn)是:你做過的題目,讓你再做一次,你就能“***解決”。
第二:即使你知道一題的解法,你未必能寫好。因為你可能每次寫出來的程序都很隨性,這樣會漏洞百出。程序員是一個非常講究嚴(yán)謹(jǐn)性的職業(yè),如果你在總結(jié)題目的時候能夠找到這些題目的模板,你把模板提煉好,碰到類似的題目,可以一邊寫模板,一邊想想怎么在模板上做一點簡單的改動。這樣節(jié)省時間又保證不會出錯。
問題:如果本科不是學(xué)計算機的,又想轉(zhuǎn)行該怎么準(zhǔn)備?
1.讓自己更Professional。比如你的簡歷只能放和計算機有關(guān)的東西,其他東西再牛也不能發(fā)揮用處(比如學(xué)生會主席)如果Resume還是很空,就多去做項目。在Github上面多去follow項目,然后參與到感興趣的當(dāng)中。
2.在某一方面達(dá)到工程師實力。臨時轉(zhuǎn)行時間短,找一個容易入手的準(zhǔn)備,如果你以前做的事情跟數(shù)據(jù)有關(guān),就申請DataAnalyst。本來就會一些基本技術(shù)的,可以做前端,JavaScript, HTML,CSS,去真正做一個自己博客。如果對產(chǎn)品感興趣,就玩Django,ROR這樣的網(wǎng)站框架,了解一個網(wǎng)站是怎么搭建起來的。如果對Mobile感興趣,就用IOS或者Android寫2個APP。這樣做的好處是,簡歷不空,如果問到,可以駕輕就熟。如果不相關(guān),坦誠相見,說由于我是轉(zhuǎn)行的我這方面不熟悉,可以嘗試猜猜看。也可以直接告訴面試官,我是轉(zhuǎn)行的,我對計算機很感興趣,做了這么這么幾個項目。于是面試官不會問你難題。結(jié)果你早就準(zhǔn)備好了,超出面試官預(yù)期,就是一個高分!
問題:面試時候如何表現(xiàn)自己體現(xiàn)溝通能力?
首先你要站在面試官的角度,面試官招你進去當(dāng)同事,他希望同事怎么樣的人就決定了他的立場。學(xué)會換位思考。
讓面試官時刻明白你的意圖,不要閉著眼睛不停寫。對于面試官來說,他根本不知道你的解題進行到哪一步了。你可以反復(fù)和面試官交流自己的想法,得到面試官認(rèn)可以后再動手寫。可以講講你怎樣想到這個思路的。記住,你并不是要說服他接受你的想法,而是要把你的想法解釋給他聽。面試官提出質(zhì)疑的時候,***,不要覺得面試官什么都不懂,怎么這都不知道(其實他只是看一下你是否真的懂),第二,面試官比你經(jīng)驗豐富得多,很有可能就是你犯錯了,趕緊想想是不是真的有問題。
問題:面試中出了Bug怎么辦?
BUGFree很重要,這個需要我們平時不斷的練習(xí),按照我們方法的準(zhǔn)備,還是可以避免一些坑。但碰巧你可能不在狀態(tài),寫出了BUG被面試官指出,是不是就掛了呢?
別擔(dān)心,出BUG很正常,也許面試官來面你之前正在DEBUG:(衡量一個程序員能力的標(biāo)準(zhǔn),并不是他能想出多牛的算法(那為什么還要面算法題?)而是當(dāng)遇到問題的時候,程序員去分析和解決問題的能力。而出BUG的時候,正是展現(xiàn)你是否是一個合格程序員的時候。
DEBUG流程:
1. 通過TEST CASE定位BUG所在位置
2. 不要立即修改代碼,重新梳理邏輯。因為很有可能還有其他BUG。
3. 走完所有邏輯之后,心里有數(shù)怎么改了,再動手開始改
4. 用TEST CASE再走一次新的代碼。
5. 在整個過程中,不停的告訴面試官你在干嘛(在不影響正常寫程序的情況下)
這樣,成功排解BUG,不但不會減分,還會因為你優(yōu)秀的DEBUG能力和與此同時展現(xiàn)出來的溝通能力而加分。
***希望大家在找工作方面能有所收獲,不用多久,就會升職加薪,當(dāng)上總經(jīng)理,出任CEO,迎娶白富美,走上人生***~想想還有點小激動呢,嘿嘿~~同學(xué),夢醒了么,該去搬磚了。