1. 首頁
  2. 面試

怎麼做好準備軟體工程師的面試

怎麼做好準備軟體工程師的面試

六月份的時候,我曾經在黑板報上介紹過“如何寫一份好的工程師簡歷”, 今天想跟大家來談談如何準備軟體工程師的面試?假設,現在您的殺手簡歷 (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 分鐘的時間用紙巾來清理現場(雖然我的書本自那天之後都粘頁了,而牆壁也不再是乾淨的了)。

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

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