橫看成嶺側成峰,遠近高低各不同——從面試官的角度談面試


  最近有一本很紅的面試書叫《劍指Offer:名企面試官精講典型編程題》,作者是美國微軟總部資深軟件工程師何海濤,他在書中以面試官的角度分享了程序員面試的方方面面,並且還在書中停供了80余道面試題,大部分是與數據結構和算法有關。本文不會重點分析這些面試題目,而是歸納總結書中所提到的一些面試相關的編程技能和軟技能。

一、面試流程

1)面試的3種形式

  第一種是電話面試,應聘者在投出簡歷一到二周之內,不僅要保證手機電池能連續通話一小時,還要避免長時間待在嘈雜的地方。電話面試沒有了肢體語言、面部表情,應聘者表達自己想法的難度要比現場面試大很多,因此,應聘者盡可能用形象化的語言把細節說清楚。例如在電話面試中,如果想說一棵二叉樹,就需要把二叉樹中有哪些節點,每個節點的左子節點是什么、右子節點是什么都要說得很清楚,只有這樣面試官才能准確地理解應聘者的思路。當不確定面試官的問題的時候,應聘者一定要大膽地向面試官多提問,直到弄清楚面試官的意圖為止,切忌不懂裝懂、答非所問。

  第二種是共享桌面遠程面試,利用一些共享桌面的軟件,應聘者把自己電腦共享給遠程的面試官。這樣兩個人雖然沒有坐在一起,但是面試管卻能通過共享桌面觀看應聘者編程和調試的過程。這種形式的面試,面試關心的是應聘者的編程習慣和調試能力,通常面試官會認可應聘者下面幾種編程習慣:

1、思考清楚再開始編碼。

2、良好的代碼命名和縮進對齊習慣。

3、能夠進行單元測試。

  當應聘者運行代碼發現結果不對之后的表現,是面試官關注的重點,因為應聘者此時的反應、采取的措施都能體現出他的調試功底。如果應聘者能夠熟練地設置斷點、單步跟蹤、查看內存、分析調用棧,就能很快發現問題的根源並最終解決問題,那么面試官將會覺得他的開發經驗豐富,在寫面試報告的時候是不會吝嗇贊美之詞的。

  第三種是現場面試,在去公司參加現場面試之前,應聘者應該做好以下幾點准備:

1、規划好線路並估算出行時間。

2、准備好得體的衣服。

3、注意面試邀請函里的面試流程。

4、准備幾個問題。

  現場面試是整個面試流程中的重頭戲。由於是坐在面試官的對面,應聘者的一舉一動都看在面試官眼里。面試官通過應聘者的語言和行動考察他的溝通能力、學習能力、編程能力等綜合實力。

2)面試的3個環節

  首先是行為面試,面試開始的5~10分鍾通常是行為面試的時間。面試官在這段時間會注意應聘者的性格特點,深入了解簡歷中列舉的項目經歷。這是一個暖場的過程,應聘者可以利用這幾分鍾調整自己的情緒,進入面試狀態。不少面試官會讓應聘者做一個簡短的自我介紹,而自我介紹不用花很多時間,用30秒到1分鍾的時間介紹自己的主要學習、工作經歷即可。如果面試官對某一段經歷或者參與的某一個項目感興趣,那么他會有針對性的提幾個問題詳細了解。

1、應聘者的項目經驗建議用STAR模型描述,Situation:簡短的項目背景;Task:自己完成的任務;Action:為完成任務自己做了哪些工作,是怎么做的;Result:自己的貢獻。除此之外,面試官針對項目經驗最常問的問題包括以下幾個類型。

a)你在該項目中碰到的最大問題是什么,你是怎么解決的?

b)從這個項目中你學到了什么?

c)什么時候會和其他團隊成員有什么樣的沖突,你們是怎么解決沖突的?

2、應聘者掌握的技能,描述技能掌握程度時也要注意“了解”、“熟悉”和“精通”的區別。

a)了解是指對某項技能只是上過課或看過書,但沒有做過實際的項目。不建議在簡歷中列出只是膚淺地了解一點的技能。

b)熟悉是指在實際項目中使用某項技能已經有很長的時間,通過查閱相關的文檔可以獨立解決大部分問題。簡歷中技能的掌握大部分應該是熟悉。

c)精通是指對一項技術使用的得心應手,在項目開發過程中,有信心也有能力解決各種問題。除非自己能輕松回答這個領域里的絕大多數問題,否則不要在簡歷中使用精通。

3、回答“為什么跳槽”。面試官會通過這個問題來了解應聘者的性格,在回答時不要抱怨,也不要流露出負面情緒。應聘者盡量避免以下4個原因:

a)老板太苛刻。

b)同事太難相處。

c)加班太頻繁。

d)工資太低。

  其次是技術面試,一輪一小時的面試,通常計算面試會占據40~50分鍾,對面試的結果起決定性作用。總體來說,面試官都會關注應聘者的5種素質:

1、扎實的基礎知識,包括編程語言、數據結構和算法。

2、能寫出正確的、完整的、魯棒(健壯)的高質量的代碼,面試官會格外關注邊界條件、特殊輸入等看似細枝末節但至關重要的地方。

3、分析問題時思路清晰,面試官不喜歡應聘者草率地開始寫代碼,這樣的代碼容易邏輯混亂、錯誤百出。應聘者可以用幾個簡單的方法幫助自己形成清晰的思路。

a)舉幾個簡單的例子讓自己理解問題,舉例能使抽象問題具體化。

b)用圖形表示抽象的數據結構,圖形能使抽象的問題具體化、形象化。

c)把復雜的問題分解成若干個簡單的子問題,然后逐個擊破。

4、能優化時間效率和空間效率,需要熟知各種數據結構的優缺點,並且熟練掌握常用的算法。

5、學習、溝通等各方面的能力。

a)面試官會觀察應聘者在介紹項目經驗或算法思路時是否觀點明確、邏輯清晰,並以此判斷其溝通能力的強弱。有意向加入外企的應聘者注意提高自己英語交流的能力。

b)面試官也會從應聘者說話的神態和語氣來判斷他是否有團隊合作的意識。

c)面試官通過詢問應聘者最近在看什么書、從中學到了哪些技術來了解應聘者的學習願望和學習能力。

d)面試官拋出一個新概念,觀察應聘者能否在短時間內理解新概念,期待他們通過思考、提問、再思考的過程,理解並最終解決相關問題。

e)建議應聘者在面試過程中遇到不明白的地方多提問,這樣面試官會覺得你態度積極、求知欲強烈,會給面試結果加分。

f)知識遷移能力是一種特殊的學習能力,通俗的說法是舉一反三,如果能夠把已經掌握的知識遷移到其它領域,那么學習新技術或者解決新問題會變得容易。

g)不少面試官從日常生活中提煉出問題,考查應聘者的抽象建模能力和發散思維能力。

  最后是應聘者提問,在結束面試前的5~10分鍾,面試官會給應聘者機會問幾個問題,應聘者的問題質量對面試的結果也有一定的影響。首先,不要問和自己的職位沒有關系的問題,例如公司未來五年的發展戰略是什么;其次,不要問薪水;再次,不要打聽面試結果;最后,推薦問與應聘的職位或項目相關的問題。要問好這類問題可以從兩方面去了解:一是面試前做足功課,到網上搜索一些相關的信息,做到對公司成立時間、主要業務、職位要求等都了然於胸;二是面試過程中留心面試官說過的話,他的話中可能會包含其它渠道無法得到的信息,例如項目進展情況等。

二、高質量的代碼

1)代碼的規范性

  如果應聘者代碼寫得不夠規范,影響面試官閱讀代碼的興致,那么面試官就會默默地減去幾分。書寫、布局和命名都決定着代碼的規范性。

  首先,規范的代碼書寫清晰,在白板或白紙上寫代碼,要減慢寫字的速度,盡量把每個字母寫清楚,不要擔心時間不夠。其次,規范的代碼布局清晰,離開了工具手寫代碼,格外要注意布局問題。最后,規范的代碼命名合理,用完整的英文單詞組合命名變量和函數。

2)代碼的完整性

  面試官會非常關注應聘者考慮問題是否周全。通過檢查代碼是否完整來考察應聘者的思維是否全面。

1、從功能測試、邊界測試和負面測試3個方面確保代碼的完整性。

a)功能測試保證寫出的代碼能夠完成面試官要求的基本功能。

b)邊界測試用於檢查循環的邊界條件是否正確,遞歸終止的邊界值是否正確等。

c)負面測試需要考慮各種可能的錯誤輸入,對其做出合理的錯誤處理。

2、通常有3種方式把錯誤信息傳遞給函數的調用者:

a)用返回值告知調用者是否出錯。

b)當錯誤發生時設置一個全局變量。

c)當函數運行出錯的時候,就拋出一個異常,根據不同出錯原因定義不同的異常類型。

3)代碼的魯棒性

  魯棒性也稱為健壯性,是指程序能夠判斷輸入是否合乎規范要求,並對不符合要求的輸入予以合理的處理。容錯性是魯棒性的一個重要提現。提高代碼魯棒性的有效途徑是進行防御性編程。防御性編程是一種編程習慣,是指預見在什么地方可能會出現問題,並為這些可能出現的問題制定處理方式。在面試時,最簡單也是最實用的防御性編程就是在函數入口添加代碼以驗證用戶輸入是否符合要求。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM