作為面試官,在面試程序員時,都會關(guān)注哪些問題?而程序員應該從哪些方面做好面試的準備?本期話題相信對面試官和程序員都會有所啟示。
劉秋偉 深圳市萬興軟件有限公司研發(fā)總監(jiān)
與其他崗位相比,程序員相對來說會內(nèi)向一些,思維也會更嚴謹、更有個性。企業(yè)招聘程序員就是要求他能和團隊一起完成既定的開發(fā)任務(wù),所以重點從技能水平、學習能力、團隊合作及工作心態(tài)等幾個方面考察程序員。
技術(shù)水平是對程序員最基本的要求,很多企業(yè)會通過筆試來輔助考察。技能的考察主要看面試者技能匹配度、對技術(shù)發(fā)展趨勢的了解以及自己的職業(yè)規(guī)劃。
1. 你認為自己最擅長的技術(shù)是什么?
2. 談?wù)勀銓X行業(yè)/技術(shù)發(fā)展趨勢的看法?對最近XX技術(shù)問題發(fā)表下你的看法?
3. 在五年的時間內(nèi),你有什么樣的職業(yè)發(fā)展規(guī)劃?
技術(shù)快速更替,員工的求知欲和學習能力比他現(xiàn)在的技能更為重要。寧愿招聘一個學習能力很強的員工,也不要一個靠吃老本、不愿學習的員工。
1. 你最近有看哪些書或參加過什么樣的培訓?有灌技術(shù)論壇的習慣嗎?
2. 今年有什么學習計劃?今年有什么目標?
3. 研究過開源項目嗎?有什么收獲?
在現(xiàn)在的軟件開發(fā)中,已經(jīng)沒有所謂的“孤膽英雄”,項目主要靠團隊合作來完成,而團隊合作能力可以通過考察以往項目,來了解面試者對團隊的理解、遇到問題的解決思路等。
1. 你做過哪些項目?最成功的是哪個?為什么?
2. 辛辛苦苦工作半年的項目失敗了,你怎么辦?
3. 評價下你過去的團隊?你喜歡在什么樣的團隊中工作?
4. 你的業(yè)余愛好是什么?
招聘新員工,需要了解面試者對工作的心態(tài)和價值取向,并且與他溝通公司的企業(yè)文 化。如果你所在企業(yè)需要快速發(fā)展,有高強度的研發(fā)任務(wù),而他想找一份輕松的工作,可能就不是很合適了。
1. 為什么選擇離開上一家公司?
2. 有了解過我們公司的產(chǎn)品/服務(wù)嗎?
3. 你對加班的看法?你家人或朋友抱怨你加班怎么辦?
4. 如果在試用期發(fā)現(xiàn)你技能不符合要求,該怎么辦?
最后,技術(shù)人員的有效溝通能力也非常關(guān)鍵,特別是對問題的分析和說明,所以在整個面試過程中你要觀察面試者的分析思路,對問題重點的把握以及表達。經(jīng)常有一些滔滔不絕、 但不知所云的面試者,讓人非常頭疼!
蔣建華 北方躍龍項目經(jīng)理,微軟最有價值專家(C#MVP)
程序員的能力分為兩種:技術(shù)能力和非技術(shù)能力。技術(shù)能力包括編碼能力、系統(tǒng)分析與設(shè)計能力;非技術(shù)能力包括寫作能力、溝通與協(xié)作能力、組織與管理能力等。而根據(jù)程序員的能力水平,可以將程序員分成初級、中級、高級三個級別。因此,在面試過程中我會針對初級、中級、高級程序員三個級別來提出不同的問題。
在技術(shù)能力方面,重點考查初級程序員的編程能力、中級程序員編程能力并兼顧系統(tǒng)分析的能力、高級程序員的系統(tǒng)分析與設(shè)計能力。在非技術(shù)能力方面,重點考查初級程序員的溝通與協(xié)作能力、中級程序員的寫作能力(主要指編寫技術(shù)文檔,如需求分析文檔、用戶手冊、部署手冊等)、高級程序員的組織與管理能力(如指導、協(xié)助中級程序員進行問題分析和開發(fā))。
在面試時,程序員首先要將自己的技術(shù)能力展現(xiàn)出來,以一種交流的心態(tài)去面對,不要緊張,要有自信,即使面試失敗自己也要下去總結(jié)失敗的原因,找到技術(shù)弱點加以彌補;其次,面試中遇到不會的問題要講明自己的思路,因為有些問題不是考你的編程能力,而是邏輯思維的能力;最后,對照程序員能力模型進行自我分析與評價,做好職業(yè)規(guī)劃,不斷學習,提高自己的編程能力和抽象思維能力。
以SQL Server為例,我來分享一下面試時常問的一些技術(shù)問題。
1. 聚集索引和非聚集索引有何區(qū)別?應該怎樣使用?
2. SQL的一張表中有一個自增的ID字段,但是現(xiàn)在不連續(xù),寫一條SQL語句取出某個位置到另一位置(如50~60)之間的數(shù)據(jù)。
3. 如何判斷和防止SQL注入?
4. 如何對海量數(shù)據(jù)進行處理?
第1題考查基礎(chǔ)知識;第2題考查SQL語句的編寫能力和技巧,屬于初級程序員的問題;第3題考查SQLServer的安全性,屬于中級程序員的問題;第4題考查SQLServer的性能,屬于高級程序員的問題。通過這幾個問題可以判斷出應聘程序員的數(shù)據(jù)庫水平。
毛穎 放過CAPS公司銷售工程師
從個人經(jīng)歷來說,我會對以下五個問題比較感興趣。
1. 請說出3個你覺得至今都沒有算法可以解決的問題。
這是一個開放式問題。從回答中我們可以了解到被面試者的思維方式和思維敏捷度,而這兩點是一名優(yōu)秀程序員不可或缺的。我預料一般有兩類回答:第一,學術(shù)類,比如有人會說一些關(guān)于尋找質(zhì)數(shù)之類的現(xiàn)在還無法解決的問題;第二,生活類,我比較期待這一類有意思的回答,如果被面試者可以結(jié)合一些現(xiàn)在的社會現(xiàn)象作出回答,也可以從另一個角度反射出其社會屬性。
2. 請從技術(shù)角度談一下《黑客帝國》的觀后感。
同樣又是一個開放式問題,完全沒有所謂的標準答案?!逗诳偷蹏肥浅绦騿T的必看“教材”,整個故事最精彩的莫過于構(gòu)思。我覺得能具備這樣的構(gòu)思能力是程序員的最高境界。那么從技術(shù)角度,對于這個構(gòu)思的框架搭建以及實現(xiàn)等,我想聽聽程序員的不同理解和實現(xiàn)方法,從側(cè)面了解他們的潛在創(chuàng)造能力和對身邊事物的建模能力。
3. 你比較偏向于把程序員比作翻譯、建筑師還是設(shè)計師?
問這個問題的目的是看你怎樣理解程序員這個職業(yè)。一個人對自己職業(yè)的認識以及定位將直接決定其在這個職位上的積極性和創(chuàng)造能力。我的答案是程序員既是翻譯,又是建筑師,更應該是設(shè)計師。并且隨著這三個職業(yè)的排序,正是我認為的程序員職業(yè)能力升華臺階。
4. 請設(shè)計至少兩個不同的算法解決將一個蛋糕平均分為6份的問題。
比較實際的專業(yè)能力題。這是一個既簡單又綜合的考驗。除了對程序員這個職位的正確認識之外,實際操作能力畢竟是影響今后實際工作的第一要素。這道操作題,考察應聘者對問題的思考,以及分析能力和解決問題的動手能力。
5. 比較一下這兩個算法,你覺得哪個更好,依據(jù)是什么?
比較算法,還是考察的專業(yè)能力,目的是看你怎樣判斷一個算法的好壞。對這道題,沒有接受過專業(yè)訓練的應聘者應該無法給出全面且科學的分析。并且請他們評論自己設(shè)計的算法,也是對自我認識的一種衡量。
李顏杉 某外資人力資源顧問公司獵頭顧問
程序員的概念有點寬泛,為更有針對性,我主要分享對“網(wǎng)絡(luò)程序員”的觀點。簡言之,我們主要關(guān)注面試者的硬條件、軟條件兩個方面。
硬條件是指學歷、技術(shù)經(jīng)驗、語言等能直接呈現(xiàn)的能力。技術(shù)是實在的東西,有就有,沒有就沒有,由不得半點浮夸。
我們比較感興趣的問題如下。
1. 做過什么:是寫代碼、設(shè)計還是架構(gòu)?
2. 做成功過什么:是大型的平臺嗎?其特質(zhì)如可擴展、高并發(fā)、交互式。
3. 擅長做什么:使用的編程語言是哪種?使用經(jīng)驗有幾年?
4. Debug的經(jīng)驗,遭遇什么復雜的問題(需例證其復雜性)?
技術(shù)面試的后續(xù)往往是筆試或上機,比如,在所有你使用過的DesignPattern中,請解釋對比其中兩種,如CommandPattern和VisitorPattern(可以文字回答,也可以畫圖)?DOMparser與SAXparser的區(qū)別在哪兒?什么情況下采用DOMparser而不是SAXparser?大家在面試之前可以Google一下類似的題目。
如果面試外資公司,需要英文達到流利讀寫的水平。因為項目的完成往往需要協(xié)同全球多個國家的同事,如果缺乏英文技能,在外企的發(fā)展是比較受限的。計劃今后進入外資公司的朋友,一定要加強練習。
軟條件是指性格、興趣、職業(yè)規(guī)劃等非直接呈現(xiàn)的能力。公司對于程序員一般會看重兩種性格特質(zhì):愛技術(shù)、樂分享。
“愛技術(shù)”的人才會自發(fā)的鉆研,不浮躁,也才會在這一行做得長久。對于這點,面試官可能希望了解你工作之外喜歡做什么。我聽到過很多分享:經(jīng)營自己的博客或者技術(shù)論壇;嘗試新技術(shù)、新設(shè)備,學習新技術(shù)是一種樂趣而不是負擔;當然,下次你可以說你平時喜歡閱讀《程序員》。
“樂分享”的人才能帶動團隊整體進步。對于這點,面試官可能希望了解你在團隊中是什么角色。有的人可能講我是Mentor,我們遇到技術(shù)問題時要內(nèi)部討論,我往往是能給出solution的人,所有人都解決不了,我們會求助于互聯(lián)網(wǎng)——說明你不只愿意分享,而且有東西可以分享。
以前曾在面試中聽說,程序員是青春飯,3~5年之后一定要轉(zhuǎn)做Manager。我覺得職業(yè)發(fā)展一定要切合自己的性格,并不是每個人都很享受并善于處理人事管理。有的資深開發(fā)人員轉(zhuǎn)成Manager幾年之后,又轉(zhuǎn)回純技術(shù)(IndividualContributor)。而資深技術(shù)人員對于公司是非常寶貴的財富,不管從受重視程度、薪資福利待遇都是非常有吸引力的。