作者:魏小亮(Facebook 移動技術總監)
現在有不少的矽谷公司直接招聘國內的軟體工程師到美國工作,這些公司主要是大的網際網路企業和中型創業公司(太小的創業公司沒有資源申請H-1B簽證)。有很多的朋友對此有興趣並且問我需要準備和注意的地方。 我覺得大部分的技術能力都是靠一定時間的學習和積累的,基本上不能準備;但假設你的技術和經驗都很好,面試當場的表現的確可以在短時間內準備和提高。
我每次在面試現場都儘量跟每個應聘的朋友分享一些面試的技巧,讓他們放鬆並且充分準備。現在把這些想法總結一下,我想這些經驗主要對創業文化比較強的公司有幫助 (如果招聘的公司是傳統文化的大公司,有些建議可能適得其反)。
最最關鍵的一點: 不要把面試當成學校的考試。這樣的場景很常見:面試者走進面試的房間;坐下;被問到任何一個問題,就用一兩句話儘量精確的回答;拿到一個實際的問題就儘快寫出程式,交給面試官“評審”…… 整個過程跟考試一樣,極少的互動。面試結果非常隨機:如果你對問題的理解正好是面試官想問的,並且如果你的回答正好是他想要的,並且如果他正好能看懂你的程式,那你就被錄取了;以上幾個“如果”的任何一個出現任何的偏差,你的面試就失敗了。
上面的過程是有不少可以改進的地方的:
1、保持自信:走進面試房間之前,檢查一下自己的手心是不是溼的(緊張的時候手心容易出汗),如果是,擦乾了再走進去,握手的時候就不會讓面試官覺得你非常緊張。 深吸一口氣,默默的告訴自己沒問題(這樣的自我暗示還是挺有用的)。走進房間,主動給面試官打個招呼,給一個有力的握手,留下一個自信的第一印象;
2、保證交流表達的順暢:不少的朋友覺得自己的英文說得不準確,怕說錯,所以很小聲;同時緊張起來往往越說越快。對方聽起來聲音很小、口音不一樣、加上語速太快,就很難聽明白。所以,說話的時候聲音一定要足夠大,讓對方能聽得很清楚(包括的你念錯的詞也要能聽清楚)。同時,你可以主動放慢自己的語速,並且要求對方適當放慢他們的語速,不要害羞擔心別人覺得你的英語不夠好。在國際範圍招聘工程師的公司,東歐和亞洲的非英語工程師都很多,裡面的員工是能夠理解並且願意減慢語速的。如果語言交流還有障礙,可以用白板(或者黑板)寫下關鍵的問題和術語;
3、確認雙方對問題的理解一致:矽谷的公司面試往往是使用工作裡面碰到的實際問題,做一定的簡化,改成可以在30分鐘之內解決的問題。問題往往不是教科書上看過的;或者,更危險的情況是問題看起來跟教科書上看過的類似,但實際上有本質不同。如果你沒有跟面試的同事確認你們倆對問題的理解是一樣的,那很容易發生的情況是你按照自己的理解花30分鐘寫出程式,然後面試官說“這不是我要的答案啊”。 比較穩妥的方法是你主動針對問題提出一些討論,比如用幾個簡單而有代表性例子把問題的輸入和期待輸出都描述清楚,雙方都同意這一組輸入輸出,然後再動手解決;這也自動的給你一組測試例子了;
4、確認對方理解你的解決方案:我見過不少的例子是面試者用很複雜的演算法(往往需要一片論文來證明正確性)來得到一定的演算法複雜度優化。大部分的工程師並沒有那麼專注於學術,面試官很可能看不明白。而面試者本人也很難在10分鐘內把一片論文的正確性證明說清楚。這樣的結果是別人不可能很快的同意你的解決方案(在實際工作裡面,就是你的程式很難通過Code Review),而在45分鐘的面試裡面,面試官就不能贊成錄取你。我給面試者的建議是:如果一個演算法不能在5分鐘之內用英文解釋清楚,就不要在45分鐘的面試裡面用這個演算法。
5、最後,最重要的“tip”是把面試官當成你的同事,而不是監考老師。整個面試的過程,技術題目解答(程式)的優劣大概只佔一半的權重,同樣重要的是你能否從頭到尾解決一個實際問題。這是一個過程:理解問題的本質、約束條件、時間和空間的取捨、你們deadline(30~45分鐘)和工作量的取捨(複雜的好演算法還是簡單的“能用的”演算法)、 最後你的程式寫好了還要能讓你的同事看懂並且同意你的解決方案。
我看到過的最優秀的面試者往往把自己沉浸於跟面試官共同工作的狀態,主動分析問題,甚至對問題提出異議,一起討論,就解決方案達成一致,然後挽起袖子寫出一個漂亮的程式,再主動根據討論的例子對程式進行測試,最後提出自己對自己的解決方案的批評和下一步可改進的地方。 這樣走下來,即便寫出來的程式不是最優的,你在整個過程裡面表現出來的經驗和技術能力都會讓人刮目相看。