標籤:

談談Google的面試

去年做了不少面試(據說自己的面試次數在Google全球都是排在前列的,有點兒不敢相信),也參加了好幾次校園招聘之類的活動,體會總或多或少有一些。也許可以給大家分享一些不涉及公司秘密的東西,一來讓大家了解Google為什麼聚集了這麼多出色的技術人才,二來也可以讓那些投簡歷的朋友在心理上準備得更充分一些——說實話,的確有些應聘者是因為對Google招聘流程,還有面試要求不太適應,而沒有展現出自己應有的水平的。毫無疑問,Google在最近幾年裡一直是世界頂尖技術人才的聚集地。遠的不說,在Google中國,我們身邊就有ACM世界冠軍,奧賽金牌得主,以及若干知名技術公司的前CTO。但這並不是說Google招的全都是那些擁有偌大的名頭或來歷的牛人,我覺得,只要有真本事,進Google並不像想像中那麼難。關於招聘流程,其實開復在《與未來同行》那本書的第185頁已經講得非常清楚了,不外乎是下面幾個主要的步驟:1. 篩選簡歷2. 電話面試或筆試3. 若干輪面試4. 「招聘小組」討論5. 「副總裁小組」最後複核6. 發錄用通知,簽合同篩選簡歷似乎和其他公司沒有什麼本質的不同。我經常會在內部系統中收到招聘團隊轉來的,要我幫忙看一看並給出建議的簡歷。在國內,大多數人的簡歷都會有中英文兩份。只要有中文簡歷,我一般就只看中文內容了。但許多從美國來的同事就會優先看英文簡歷。所以,投簡歷時中英文簡歷要盡量一致。看應屆畢業生的簡歷和看有工作經驗的應聘者的簡歷是大不相同的。對於前者,說心裡話,有區分度的信息通常不會很多,不外乎學習成績、論文或著述(如果有的話)、實踐項目(如果有的話)、競賽成績(如果有的話)等少數幾項,至於自己說自己精通某某,熟悉某某,這個東西水分多少很難講,反正我一般是權當參考的。所以,對應屆畢業生更常見的做法是在學校或公司舉行筆試,看筆試情況來決定誰可以進入下面的流程。但對於有工作經驗的人,簡歷就非常非常重要了,因為你可以很容易地利用各種信息,從兩份簡歷中比較出應聘者的實力差異(當然不是絕對準確的,因為還要考慮某些人更善於包裝自己的因素)。在寫簡歷的時候,大家其實可以設身處地地想一想,如果你在審閱一份這樣的簡歷:應聘者聲稱自己精通某某平台,某某技術或某某語言,但又舉不出足夠有說服力的證據;聲稱自己在前公司做過項目經理、研發部經理等關鍵職位,但又無法清楚地描述自己在關鍵職位上有什麼樣的表現;聲稱自己做過N多項目,但又舉不出一個有技術含量,或是可以體現自己價值的……你會給他或她進入後續流程的機會嗎?電話面試是一件很有趣也很容易惹來爭議的事情。至少我自己覺得,雖然電話面試可以省些時間,但的確比較難於全面了解一個人,不像面對面的面試那樣有現場感,也沒有直接交流時的各種便利——比如,可以從對方眼神、表情中發現他的許多特點。具體到技術面試上來說,電話面試讓對方寫代碼是比較難的,據我所知,有的面試官的確會讓對方寫一段簡短的代碼,然後在電話中念出來。這個方法是不是真的有效,的確很難講。但同時,我個人認為,電話面試有一個最大的優點,就是可以更容易地考察對方的語言交流能力:因為電話上的溝通不如面對面那麼方便,在電話面試中你可以很容易地看到對方是如何利用這個「有限信道」來向你傳遞信息的。能夠在電話面試中清楚、明白地展示自身優勢的人,至少在語言交流方面都不會有什麼問題。——順便強調一下,交流和溝通能力對於現代軟體開發來說,實在是太重要了。筆試主要是在招聘應屆畢業生或實習生的時候使用,去年Google在好幾所高校都做過比較大規模的筆試。那些筆試題目中,有一小部分是我出的,所以了解一些情況。和有些公司強調思維靈活性的智力題不一樣,Google的筆試題最最重視的學生在CS專業上的基本功和靈活運用基礎知識解決問題的能力。去年用在校園招聘的筆試題有許多套,大多都分為選擇題和編碼或演算法題兩個部分。做過這些題目的同學應該比較清楚:選擇題考察的不外是對CS基礎課、專業課的掌握情況,可能會涉及數學、邏輯、計算機原理、數據結構、演算法、編譯原理、操作系統等方面;而編碼或演算法題考察的則是編程的基本功力(比如對語法要素的正確使用,代碼的可讀性等等)和靈活運用演算法知識解決具體問題的能力(比如演算法的選擇,演算法的優化程度等等)。其實,出筆試題是一件苦差事。要想得到邏輯上沒有漏洞,適於CS或相關專業的學生解答,易於上手,又有一定區分度的題目,實在是太難太難了。每套筆試題都要花費工程師許多精力,出完了題目,還要更多工程師來把關,看有沒有漏洞。即便如此,去年用在高校的筆試題里還是存在少數表達含混或者邏輯上有漏洞的情況——在提高筆試題質量方面,我們還得繼續努力。若干輪的現場面試是應聘者必須經歷的,最有挑戰性的,也最能影響面試結果的環節。Google對人才的要求向來都很高,這種要求也主要體現在現場面試的環節中。一個應聘者在若干輪的現場面試中,可能要面對的是有不同技術背景或技術特長的面試官,每個面試官所考察的重點也可能各有側重,每個面試官也都有自己喜歡的提問方法和面試題目。達不到標準的人要想在Google的若干輪面試中「矇混過關」,概率應該是接近於零的吧。許多人都想知道Google在面試中最看重的是應聘者哪方面的能力。我記得在去年在校園宣講中曾反覆強調過:僅從專業角度上說,Google會要求一個應聘者既具有紮實的CS基本功,也擁有靈活的思維方式和解決新問題的能力。當然,專業以外的東西,比如真誠、坦率,比如交流能力,對職業的正確態度等等,有時比專業能力更重要。因為每個面試官有每個面試官的特點,不大好介紹和評價其他同事的面試方法。我自己在面試時,一般喜歡先考察一個偏重基本功的題目,然後再考察一個偏重思維靈活性的問題。我還有一個傾向,可能也是某些應聘者比較擔心的,就是邊聊邊問,根據應聘者的自我介紹,提最有針對性的問題。比方說,對方講,自己有五年的C語言編程經驗,精通(老實說,面試多了,對「精通」這個詞就非常敏感,總覺得這個詞背後是有無數玄機的)C語言,那我多半就會立即考察一下對方對C語言指針或函數調用的掌握程度;如果對方說自己精通的其實是JavaScript語言,那我自然會渴望知道,對方是不是真的清楚,JavaScript作為一種動態語言或腳本語言有哪些與眾不同的語法特點;如果對方說自己對J2EE平台和流行的框架非常熟悉,那我一般會先從最基本的面向對象設計以及最基本Java對象模型開始問起;如果對方說自己有豐富的軟體設計經驗,那我這裡有好幾個並不一定真正存在的軟體需求,需要對方畫出系統架構的設計圖來。面試時現場寫代碼或現場設計演算法幾乎是一定會發生的事情。拿我來說,對方寫代碼時直接敲在電腦上或是寫在紙上,選用什麼樣的語言,或者使用什麼樣的代碼風格,其實都是無所謂的。我最最關心的是應聘者對編程序這件再普通不過的事情的理解程度。一般說來,只要時間允許,我都會和應聘者一起,逐行討論他剛寫出的代碼,比如函數介面設計是否合理,有沒有其他的設計方式,變數類型的選擇是否合適,代碼運行時的時間或空間開銷是否太大,代碼中兩個看上去相似的片段是否可以合併,等等等等。如果是現場設計演算法,那我一般會要求對方在紙上用最直觀的圖示把他的演算法思路表現出來——這多半是因為我的腦子比較慢,如果對方不能描述得非常清楚的話,我很難判斷他的答案究竟是不是正確。一般說來,Google經常使用的面試題目都可以從不同的角度入手來解答,出色的應聘者還經常能想出面試官從未見過,又完全正確的新答案來。所以,做面試官也要開動腦筋,判斷對方的答案哪一步正確,哪一步有問題。幾場面試下來,面試官也要消耗許多腦力和體力的。面試結束後,面試官要寫面試報告,而且要用英文來寫。寫報告會佔用不少時間,我自己的英文並不熟練,一個45分鐘左右的面試結束後,就多半要花20到30分鐘來寫報告。不過一年下來,寫面試報告倒成了自己提高英文寫作能力的一個重要練習項目,也算是對付出的這許多時間的一種回報吧。正如開復在書中所介紹的那樣,所有面試報告都要送到「招聘小組」和「副總裁」小組評審。一個應聘者是否能加入Google,就要看這兩次評審的結果了。先大概介紹到這裡吧,其他相關的感想以後再續。對了,忘了提一點,Google中國招聘的技術職位並非只有軟體工程師一種(參見http://www.google.cn/jobs/),上面講的不少要求是針對軟體工程師的。其他技術職位在對應聘者能力的要求方面各有差異,面試時的側重點也不盡相同。比如下面兩個特定領域的研發職位(順便在這裡貼一下廣告,呵呵):移動和無線應用工程師:http://www.google.cn/support/jobs/bin/answer.py?answer=57922Linux/開源軟體研發工程師:http://www.google.cn/support/jobs/bin/answer.py?answer=55003

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1525835


推薦閱讀:

如何評價新浪微博將推出的「定向發布功能」?
想在家吃牛排?讓「鍋中大黑牛」鑄鐵煎鍋幫你(附做法)
走遍美國中英字幕 - Google 搜索
Chrome 是怎麼過濾反射型 XSS 的呢?
社交電視已死

TAG:面試 | Google |