Google(谷歌)中國的博客網志,走近我們的產品、技術和文化

Google (谷歌)中國的博客網志,走近我們的產品、技術和文化

如何準備軟件工程師的面試
2006年10月13日 上午 09:33:00

發表者:王忻,Google 工程師

(作者簡介: 王忻,Google 工程師。北京出生,五歲時跟隨父母移居美國。中學期間跳了三級,十五歲進入了加州理工大學,加入 Google 前曾在微軟等公司工作。)

六月份的時候,我曾經在黑板報上介紹過「如何寫一份好的工程師簡歷」, 今天想跟大家來談談如何準備軟件工程師的面試?假設,現在您的殺手簡歷 (killer resume)已經吸引了某大公司的注意並約你面試。那麼接下來該如何準備呢?

我在 Google(以前是微軟)工作期間面試了不下 300人,其中某些應聘者確實表現非凡,但有些卻顯得準備不足。當然許多面試準備不足的人最後依然獲得了錄用通知,因為他們本身確實才華出眾。但如果應聘者能提前準備妥當,那麼面試過程將更為保險和輕鬆。以下所列出的就是我根據多年經驗總結得出的建議:

1.使用相同的工具(如鉛筆和紙張)和時間限制(例如半個小時)模擬面試訓練

Google 和微軟都會讓應聘者在白板上手工解答編程問題,但通常大部分的應聘者都是習慣於在電腦上利用編程工具系統編寫程序。因此面試的時候,某些應聘者離開了熟悉的電腦光標,站在白板前感覺手足無措不知該如何起行。又或者他們不習慣在編程之時旁邊有人觀看,這會讓他們感到緊張而無法正常思考。

在現實生活中,如果你想要橫渡英吉利海峽,自然不能總是在室內游泳池練習。你必須投身於大海在波濤之中訓練,在準備面試的時候也是如此。:)

在面試開始之前你最好向招聘單位詢問面試形式和面試問題。如果招聘單位讓你在某個房間考試且僅提供沒有彙編程序的編輯器,那麼就應該在家中按照這種情景進行練習。如果招聘公司單位讓你在白板上回答問題並會安排考官在旁監督,那麼你就要找一位軟件工程師來扮演考官配合你練習。即使找來的考官經驗不如你也沒有關係,他們依然能幫助你消除在他人面前出錯所帶來的緊張感,這樣可以讓你適應有人在旁邊盯著看的面試氛圍。

如果你恰巧認識我並希望由我來幫你聯繫,那我的條件就是必須請我吃飯:如果你已經工作了就吃日本壽司大餐;如果你還是學生,那麼吃比薩餅也可以。:)

2.在面試過程中不要對細小錯誤耿耿於懷

我曾不止一次的在面試過程中碰到這種情況:當應聘者知道編程問題後,他馬上就想到了最佳的方案、確定了邊界條件,然後開始編寫程序。但在編寫過程中,應聘者犯了諸如首先檢查是不是操作順序錯誤或忘記設定某變量等無關大局的小錯誤,當我指出其錯誤之後,應聘者立刻變得十分緊張,這種焦慮情緒影響了他在後面環節的正常發揮。

其實這種恐懼心理完全不必要。一名優秀的程序員在編程過程中出現錯誤也是很正常的,就像是小提琴手在演奏高難度的巴赫交響樂時也會偶爾失誤。音樂會的聽眾可能會覺察到這些錯誤,但是聽眾絕對不會因為這種細小失誤就把出色的小提琴手看作是門外漢。

即便應聘者徹底搞砸了某個編程問題,面試考官也可能會提出不同的問題並會容忍應聘者在某個問題上的失誤。再退一步說,就算某次面試徹底失敗,你也有機會在其它面試上補救。

我的一位同事(一個項目的技術負責人)最近面試了一個人,在開始面試時他覺得面試者的交流方式存在問題,因此開始表現的相當不友好。但經過了整個面試過程後,面試者證明了自身的能力,而我的那位同事也成了那位面試者最堅定的支持者。在過去的一年中,我從未見過這位同事如此強烈的支持哪位面試者。

所以,因此就算面試進展不順,也務必堅持到底不要放棄。

3.在面試過程中不要失禮

這似乎是不用說的問題,但在面試過程中我確實碰到過影響很不好的失禮行為。曾有一位前來應聘軟件工程師的人看到我就說:「哇,我真不敢相信你這麼年輕!你看上去好小!!我覺得你才 18 歲!」

面試者的這種言行實在要不得。

面試者也要注意不要說出諸如此類的話:「哇,你真的就是考官嗎?你看上去好老!」「哇,你真的是來面試我的,你看上去好胖!」(相信應該不會有人說這樣的話)。

在我的另外一次面試中,應聘者的手機在面試開始 15 分鐘之後就響了,她沒有理會,手機連續響了 20 秒,這樣不免會對面試造成影響。5 分鐘之後,她的手機又響了,她依然沒有理會;5分鐘之後,手機第三次響起。最後她終於抓過手提包在裡面翻出了手機。我想:「是時候關掉手機了,她在進來之前就應該把手機關掉。」但是她在手提包中拿出手機之後卻旁若無人的打起電話來,而且就在面試過程中間!

這種情況唯一可接受的理由就是他有什麼非常緊急的事,但是即便情況如此,那麼他也應該在面試開始之時就講清楚,讓面試官有所準備。

4.不要在面試中喧賓奪主

我曾經面試過幾個應聘者,他們好像鐵了心腸一定要告訴我他們最近的「超級項目」。當我開始發話他們就立刻打斷:「我想讓你瞭解我們近期處理的超級項目,10年之前當這個項目開始之時還默默無聞……」,然後接下來的5分鐘時間都在那裡滔滔不絕唾沫橫飛。

有時應聘者好像打定主意要給每個考官詳細描述其引以為豪的項目,然後一整天都在那裡翻來覆去的說這個項目。

記住:面試官在面試過程中有具體的問題需要詢問。但是如果應聘者喧賓奪主,那麼考官就可能無法獲得充分的信息來做出判斷,同時這種行為也會讓考官覺得應聘者很難共事。

如果你確實想談論自己的項目,那麼就應詢問面試官:「我覺得最近的某某項目能充分體現我的能力,我能不能用 10分鐘的時間來描述一下具體情況?」這樣就會給面試官空間來調整面試過程,由此也避免毫無徵兆就讓面試離題萬里。

5.在回答需要具體答案的問題之時,記得首先要有總括性的發言

有時我會問一個答案可以很簡練的問題,例如:「在你的那個成功項目中總共有多少人參與?」但應聘者往往會就此打開話匣:「嗯,張三參與了這個項目,他負責UI部分,當然我也會給他一些指導。李四也在項目中,她在賓州遠程工作,負責後端服務器。兩年之後我們又有新人王五加入……」

在應聘者滔滔不絕的講了三分鐘之後,我還是不知道這個項目到底有多少人參與。

因此首先要簡練的回答問題,然後再展開描述:「在我接手項目時有三個人,但當我離開項目時人數已經增加到12人。」

當然如果能簡練的回答問題,然後徵詢意見之後再展開論述那就更好了:「在我接手項目時有三個人,但當我離開項目時人數已經增加到 12 人。我可以講一下各人在項目中的具體分工嗎?」

6.(不是特別重要)在面試中要衣著得體,舒適的商務便裝是最佳的選擇

人們有時候會為衣著犯愁。但是最重要的是要讓自己感覺舒適。如果需要具體的建議,那麼我建議穿襯衫甚至T恤衫。對於某些公司(例如 Google),西裝革履顯然是太隆重了。

這條建議不必太看中,因為面試官不會管應聘者穿什麼。最好應該詢問人事招聘部門穿什麼合適,因為不同國家有不同習俗,就算美國東海岸和西海岸的公司著裝文化也會有差別。像 Google 這樣的公司在著裝方面更加隨意,因此如果你穿著「三件套」的經典西服去 Google 面試,考官可能會有異樣的感覺。因此如果你真的具備軟件工程的本領,穿什麼其實並不重要。某個應聘者曾經穿著皺巴巴髒兮兮的T恤就跑來面試,他的T恤衫上還有著許多破洞。但最後他還是拿到了錄取通知(當然我絕不建議如此穿著)。

最後的一個小故事

最後我想講一場極為尷尬的面試。在看完之後,我希望你能這樣想:無論你的面試如何糟糕,你至少要比這位應聘者幸運。

以前我還在微軟的時候,我們通常會為應聘者準備一些飲料,某位暫稱其為 Jeff 的應聘者要了一聽百事可樂。我們走進面試房間後,他就在桌前坐下了。接下來我們簡要的談了談他的工作經歷,然後他開始在白板上解答編程問題,此時他還沒有打開他的可樂。

我們倆站在白板前,然後傑夫開始在上面寫程序。在寫程序之時他沉浸在對整體構架的思考中,下意識的退了一步來查看整個白板。在後退時他不小心碰到了桌子,放在桌上的百事可樂掉到了地上。

因為可樂還沒有打開,因此當可樂罐落地的時候,可樂罐炸開了。

可樂罐在地上打轉,泡沫噴的到處都是。你可以想像當時的場景,可樂噴到了牆上、書架還有我電腦的鍵盤上。我倆楞在那裡,手都半伸著(根本來不及抓到可樂罐),眼睜睜的看著可樂弄得到處都是。

我們花了 5 分鐘的時間用紙巾來清理現場(雖然我的書本自那天之後都粘頁了,而牆壁也不再是乾淨的了)。

隨後我們重新開始白板測試。傑夫此時已非常緊張(換了誰都會緊張吧?)。他寫了幾行程序,然後擦掉,然後再寫。他是用自己的手擦拭白板而不是用板刷。他急得額頭冒汗,然後他又用剛剛擦過白板的手擦汗。在面試過程結束之時,他的臉上佈滿了紅色、綠色和藍色的顏料。

我說:「你的手上粘了很多顏料,我帶你去衛生間洗洗吧,」然後我把他領到洗手間讓他從鏡中看到了自己的尊容。

發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料