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