一分鐘先生: 程式設計師面試真經

發表於2011-03-23

作為面試官,在面試程式設計師時,都會關注哪些問題?而程式設計師應該從哪些方面做好面試的準備?本期話題相信對面試官和程式設計師都會有所啟示。

劉秋偉 深圳市萬興軟體有限公司研發總監

與其他崗位相比,程式設計師相對來說會內向一些,思維也會更嚴謹、更有個性。企業招聘程式設計師就是要求他能和團隊一起完成既定的開發任務,所以重點從技能水平、學習能力、團隊合作及工作心態等幾個方面考察程式設計師。

技術水平是對程式設計師最基本的要求,很多企業會通過筆試來輔助考察。技能的考察主要看面試者技能匹配度、對技術發展趨勢的瞭解以及自己的職業規劃。

1. 你認為自己最擅長的技術是什麼?

2. 談談你對XX行業/技術發展趨勢的看法?對最近XX技術問題發表下你的看法?

3. 在五年的時間內,你有什麼樣的職業發展規劃?

技術快速更替,員工的求知慾和學習能力比他現在的技能更為重要。寧願招聘一個學習能力很強的員工,也不要一個靠吃老本、不願學習的員工。

1. 你最近有看哪些書或參加過什麼樣的培訓?有灌技術論壇的習慣嗎?

2. 今年有什麼學習計劃?今年有什麼目標?

3. 研究過開源專案嗎?有什麼收穫?

在現在的軟體開發中,已經沒有所謂的“孤膽英雄”,專案主要靠團隊合作來完成,而團隊合作能力可以通過考察以往專案,來了解面試者對團隊的理解、遇到問題的解決思路等。

1. 你做過哪些專案?最成功的是哪個?為什麼?

2. 辛辛苦苦工作半年的專案失敗了,你怎麼辦?

3. 評價下你過去的團隊?你喜歡在什麼樣的團隊中工作?

4. 你的業餘愛好是什麼?

招聘新員工,需要了解面試者對工作的心態和價值取向,並且與他溝通公司的企業文化。如果你所在企業需要快速發展,有高強度的研發任務,而他想找一份輕鬆的工作,可能就不是很合適了。

1. 為什麼選擇離開上一家公司?

2. 有了解過我們公司的產品/服務嗎?

3. 你對加班的看法?你家人或朋友抱怨你加班怎麼辦?

4. 如果在試用期發現你技能不符合要求,該怎麼辦?

最後,技術人員的有效溝通能力也非常關鍵,特別是對問題的分析和說明,所以在整個面試過程中你要觀察面試者的分析思路,對問題重點的把握以及表達。經常有一些滔滔不絕、但不知所云的面試者,讓人非常頭疼!

蔣建華 北方躍龍專案經理,微軟最有價值專家(C#MVP)

程式設計師的能力分為兩種:技術能力和非技術能力。技術能力包括編碼能力、系統分析與設計能力;非技術能力包括寫作能力、溝通與協作能力、組織與管理能力等。而根據程式設計師的能力水平,可以將程式設計師分成初級、中級、高階三個級別。因此,在面試過程中我會針對初級、中級、高階程式設計師三個級別來提出不同的問題。

在技術能力方面,重點考查初級程式設計師的程式設計能力、中級程式設計師程式設計能力併兼顧系統分析的能力、高階程式設計師的系統分析與設計能力。在非技術能力方面,重點考查初級程式設計師的溝通與協作能力、中級程式設計師的寫作能力(主要指編寫技術文件,如需求分析文件、使用者手冊、部署手冊等)、高階程式設計師的組織與管理能力(如指導、協助中級程式設計師進行問題分析和開發)。

在面試時,程式設計師首先要將自己的技術能力展現出來,以一種交流的心態去面對,不要緊張,要有自信,即使面試失敗自己也要下去總結失敗的原因,找到技術弱點加以彌補;其次,面試中遇到不會的問題要講明自己的思路,因為有些問題不是考你的程式設計能力,而是邏輯思維的能力;最後,對照程式設計師能力模型進行自我分析與評價,做好職業規劃,不斷學習,提高自己的程式設計能力和抽象思維能力。

以SQL Server為例,我來分享一下面試時常問的一些技術問題。

1. 聚集索引和非聚集索引有何區別?應該怎樣使用?

2. SQL的一張表中有一個自增的ID欄位,但是現在不連續,寫一條SQL語句取出某個位置到另一位置(如50~60)之間的資料。

3. 如何判斷和防止SQL隱碼攻擊?

4. 如何對海量資料進行處理?

第1題考查基礎知識;第2題考查SQL語句的編寫能力和技巧,屬於初級程式設計師的問題;第3題考查SQLServer的安全性,屬於中級程式設計師的問題;第4題考查SQLServer的效能,屬於高階程式設計師的問題。通過這幾個問題可以判斷出應聘程式設計師的資料庫水平。

毛穎 放過CAPS公司銷售工程師

從個人經歷來說,我會對以下五個問題比較感興趣。

1. 請說出3個你覺得至今都沒有演算法可以解決的問題。

這是一個開放式問題。從回答中我們可以瞭解到被面試者的思維方式和思維敏捷度,而這兩點是一名優秀程式設計師不可或缺的。我預料一般有兩類回答:第一,學術類,比如有人會說一些關於尋找質數之類的現在還無法解決的問題;第二,生活類,我比較期待這一類有意思的回答,如果被面試者可以結合一些現在的社會現象作出回答,也可以從另一個角度反射出其社會屬性。

2. 請從技術角度談一下《黑客帝國》的觀後感。

同樣又是一個開放式問題,完全沒有所謂的標準答案。《黑客帝國》是程式設計師的必看“教材”,整個故事最精彩的莫過於構思。我覺得能具備這樣的構思能力是程式設計師的最高境界。那麼從技術角度,對於這個構思的框架搭建以及實現等,我想聽聽程式設計師的不同理解和實現方法,從側面瞭解他們的潛在創造能力和對身邊事物的建模能力。

3. 你比較偏向於把程式設計師比作翻譯、建築師還是設計師?

問這個問題的目的是看你怎樣理解程式設計師這個職業。一個人對自己職業的認識以及定位將直接決定其在這個職位上的積極性和創造能力。我的答案是程式設計師既是翻譯,又是建築師,更應該是設計師。並且隨著這三個職業的排序,正是我認為的程式設計師職業能力昇華臺階。

4. 請設計至少兩個不同的演算法解決將一個蛋糕平均分為6份的問題。

比較實際的專業能力題。這是一個既簡單又綜合的考驗。除了對程式設計師這個職位的正確認識之外,實際操作能力畢竟是影響今後實際工作的第一要素。這道操作題,考察應聘者對問題的思考,以及分析能力和解決問題的動手能力。

5. 比較一下這兩個演算法,你覺得哪個更好,依據是什麼?

比較演算法,還是考察的專業能力,目的是看你怎樣判斷一個演算法的好壞。對這道題,沒有接受過專業訓練的應聘者應該無法給出全面且科學的分析。並且請他們評論自己設計的演算法,也是對自我認識的一種衡量。

李顏杉 某外資人力資源顧問公司獵頭顧問

程式設計師的概念有點寬泛,為更有針對性,我主要分享對“網路程式設計師”的觀點。簡言之,我們主要關注面試者的硬條件、軟條件兩個方面。

硬條件是指學歷、技術經驗、語言等能直接呈現的能力。技術是實在的東西,有就有,沒有就沒有,由不得半點浮誇。

我們比較感興趣的問題如下。

1. 做過什麼:是寫程式碼、設計還是架構?

2. 做成功過什麼:是大型的平臺嗎?其特質如可擴充套件、高併發、互動式。

3. 擅長做什麼:使用的程式語言是哪種?使用經驗有幾年?

4. Debug的經驗,遭遇什麼複雜的問題(需例證其複雜性)?

技術面試的後續往往是筆試或上機,比如,在所有你使用過的DesignPattern中,請解釋對比其中兩種,如CommandPattern 和VisitorPattern(可以文字回答,也可以畫圖)?DOMparser與SAXparser的區別在哪兒?什麼情況下采用DOMparser 而不是SAXparser?大家在面試之前可以Google一下類似的題目。

如果面試外資公司,需要英文達到流利讀寫的水平。因為專案的完成往往需要協同全球多個國家的同事,如果缺乏英文技能,在外企的發展是比較受限的。計劃今後進入外資公司的朋友,一定要加強練習。

軟條件是指性格、興趣、職業規劃等非直接呈現的能力。公司對於程式設計師一般會看重兩種性格特質:愛技術、樂分享。

“愛技術”的人才會自發的鑽研,不浮躁,也才會在這一行做得長久。對於這點,面試官可能希望瞭解你工作之外喜歡做什麼。我聽到過很多分享:經營自己的部落格或者技術論壇;嘗試新技術、新裝置,學習新技術是一種樂趣而不是負擔;當然,下次你可以說你平時喜歡閱讀《程式設計師》。

“樂分享”的人才能帶動團隊整體進步。對於這點,面試官可能希望瞭解你在團隊中是什麼角色。有的人可能講我是Mentor,我們遇到技術問題時要內部討論,我往往是能給出solution的人,所有人都解決不了,我們會求助於網際網路——說明你不只願意分享,而且有東西可以分享。

以前曾在面試中聽說,程式設計師是青春飯,3~5年之後一定要轉做Manager。我覺得職業發展一定要切合自己的性格,並不是每個人都很享受並善於處理人事管理。有的資深開發人員轉成Manager幾年之後,又轉回純技術(IndividualContributor)。而資深技術人員對於公司是非常寶貴的財富,不管從受重視程度、薪資福利待遇都是非常有吸引力的。

相關文章