如何面試程序員

    面試對於大多數開發人員來說是一項很基本的技能。一次失敗的招聘會造成很嚴重的長期的後果,二流的人會把三流的人帶進公司(一流人才僱一流人才,二流人才僱三流人才)。另一方面,把優秀的應聘者拒之門外更是一種傷害。



    一場技術面試至少包括三部分。首先驗證簡歷的真實性,然後評估應聘者的經驗價值,最後測試應聘者的技術能力。


1: 驗證簡歷

    簡歷上的任何東西都是假的,除非被證明。
    簡歷中實際有價值的兩個部分就是“技術特長”和“項目經驗”,所以驗證簡歷圍繞這兩個部分進行。應該重點關注哪些入職後會用得上的技術和經驗,其他項目用作對誠實度的考察,不過適當的“文學修飾”應該被當作自我營銷手段而接受,“熟練”和“精通”的區別是很難定義清楚的。
    
    關於技術特長:
    可以根據對方擅長的方向由淺入深循序漸進的詢問技術細節,以便考察應聘者的掌握程度。除非是精確的定向招聘,否則不要僅通過詢問你自己擅長的、只涉及某個狹窄領域、方向的技術細節來確定對方價值。有些人可以通過CPU針腳輸出各種電信號,但是卻無法在屏幕上打印”hello”。也有很多前端一直使用代碼佈局而從來不用可視化佈局工具。掌握這些技術對他們來說易如反掌,回答不上來你的問題只是因爲使用習慣不同而已。可以通過技術趨勢或技術社區等方向來考察一個人對某個技術的瞭解程度。這些問題並沒有正確的答案,但是通過交流可以瞭解到對方對此技術的關注程度。


        對這個技術的看法,這個技術的未來發展趨勢?
        與競爭技術對比有哪些優缺點?
        此技術(或開發環境)有哪些點可以吐槽?
        此技術的主要社區或blog有哪些?針對某一階段,有哪些書籍可以推薦?


    關於項目經驗:
    不要通過對方很久以前的項目技術細節來考察對方誠實度,1~2年以上的項目技術細節或架構是很難有完整記憶的。但是項目背景、應用領域、人員結構、開發中遇到的重大問題以及大的技術方向選擇對方應該十分清楚。


        項目背景,客戶羣體是怎樣的,爲什麼開發這個項目?
        項目人員組成,你負責哪部分?
        你負責的部分使用了那些技術,爲什麼不用其他(具體)技術?
        項目遇到過哪些重大問題(或有趣的事),怎麼解決的?


2: 經驗價值

    經驗不等於工作時間。
    除非你是真正的天才,否則永遠不要低估經驗的重要性。一個有經驗的優秀程序員僅憑直覺就可以預測出需求是否合理。經驗和工作年限並不完全成正比,一個人可能在一年的時間裏經歷從初級程序員到項目總監的變遷。也可能一生都投身於公司內部軟件中某個模塊的維護,學不到任何新東西。一個人可能僅利用業餘時間就開發出一款優質的產品。也可能集公司之力也僅寫了一些DEMO,業餘時間完全不關心技術。真正的經驗價值取決於個人經歷,可以通過對方的技術成長路程獲得大致的瞭解,比如(注意驗證真實性):


    什麼時間、什麼原因加入這個行業?
    學習過哪些技術、編程語言,具體應用在那些項目中?
    是否有個人項目,或業餘時間研究過哪些技術?
    是否做過主要開發者,在哪個項目中?
    是否有分享總結習慣,是否有技術blog?

3: 技術能力

    如果簡歷和經驗價值滿足招聘要求,但是對應聘者依然不放心,可以通過實際編碼來驗證一下對方的技術能力。不過想在很短的時間內瞭解一個人的技術深度是非常困難的,對於優秀的程序員,條件允許的情況下針對職務定製面試主題更爲適合,不要把重點放到某個函數/參數或用法,更不要一味的學習google/apple問一堆算法問題(取決於:你的項目是否需要程序員對算法有深入的研究),重點是對方對相關技術的理解程度。多考察一些原理和技術應用場景,在這些方面沒有捷徑也很難事先造假,在對方回答的過程中問一下答案綱要,可以防止浪費太多時間。一些基礎的問題方向可能包括:


    數據結構和算法。
    線程、進程。
    內存。
    設計模式。
    計算機原理。
    操作系統。



    以上做法主要針對有經驗的程序員。對於那些經驗有限但潛力十足的應聘者並不公平。而對於很多非常優秀的高級開發人員來說,招聘方應該把重點放在“怎麼吸引對方過來”的問題上。畢竟,能遇到優秀的人本身就是一種運氣。



轉載註明:http://blog.csdn.net/cuibo1123

個人觀點,如有建議,歡迎指正。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章