面試中如何剔除魚目混珠的程序員
對(duì)于一個(gè)公司來說,執(zhí)行招聘面試事宜是一個(gè)耗時(shí)耗錢的項(xiàng)目,從顧問公司和人才中介挑選出合適的簡歷之后,還要花更多的時(shí)間找出合適的候選人。有的時(shí)候這些機(jī)構(gòu)會(huì)向你保證這些人都是 Java 天才、SQL 專家、全棧開發(fā)者等等,但實(shí)際上如果你盲目的信任他們并邀請(qǐng)應(yīng)聘人員參加面對(duì)面的面試的時(shí)候,你會(huì)很失望的。所以我覺得最快的甄別方法就是先電話面試,之后再根據(jù)他們的表現(xiàn)采取面對(duì)面的交流。
為了獲得更多的反饋信息,提高自己的方法,在這里先和大家分享一些自己工作以來使用的篩選出來的編程問題,從這些常見的編程技巧里面選出兩個(gè)左右的問題,例如Java、SQL、XML、編程、編碼、OOPS、多線程和UNIX。和期待你說出對(duì)于同一技能的考察有什么好的方法。
下面是我列出的如何過濾和篩選出不同編程技能的問題,這主要有兩個(gè)目的,一是為了給面試者熱身,另外就是幫助主考官剔除不會(huì)編程的“程序員”,那些SQL 專家盡然不會(huì)編寫 JOIN 查詢。
在 SQL 方面,我的第一個(gè)篩選問題就是請(qǐng)他們描述一個(gè) Left Outer Join。不需要說得多么精準(zhǔn),我只是想看看他們有沒有做過除了 two table inner join 之外更多的東西。根據(jù)他們的回答我會(huì)問他們古典SQL查詢,以核實(shí)他們是否知道這樣的原理以及如何應(yīng)用這些知識(shí)。如果他們使用Inner join而不是left outer join 的話,估計(jì)就會(huì)錯(cuò)過成為正式員工的機(jī)會(huì)了。
在 Web 開發(fā)方面,首先提的問題是解釋一些一個(gè) GET 和一個(gè) POST之間的區(qū)別。這里我至多就是想知道他在URL 里面通常看到的GET 是什么,以及在HTML Forms 里POST 是什么形式的。根據(jù)他們的回答,還可以繼續(xù)問一些關(guān)于GET vsPOST 使用限制、安全性等問題。這些問題完全足夠讓你明白眼前這個(gè)人對(duì)互聯(lián)網(wǎng)是否有真正的了解。
在 UNIX 方面,其中一個(gè)比較流行的篩選方法是相當(dāng)簡單的:你是如何找到一個(gè)特定的程序并解決問題的?我期望他們能告訴我關(guān)于 ps、grep 和 kill 之類的命令。同時(shí)也想測(cè)試一下他們對(duì)ps options 的理解程度。第二個(gè)篩選問題就是在UNIX 系統(tǒng)里找出大量的文件。千萬別誤會(huì),如果應(yīng)聘者不能回答這些問題的話,那么他很難在這個(gè)有大量程序和服務(wù)器連接的項(xiàng)目中完成任務(wù)。
在招聘 OOPS(Object Oriented Programming)方面,請(qǐng)他們講述一下 Class 和 Object 之間的區(qū)別。這樣的安排主要是想他能夠在描述定義的基礎(chǔ)上講一講構(gòu)建項(xiàng)目的藍(lán)圖,關(guān)鍵是想測(cè)試回答問題的人如何理解概念,并且不會(huì)被概念所困擾。接下來就是請(qǐng)他舉個(gè)例子,根據(jù)他的例子來問他,在什么地方創(chuàng)建這個(gè)對(duì)象,由誰來創(chuàng)建等等。
招聘程序設(shè)計(jì)人員,尤其是提到代碼,最流行的將魚目混珠的程序員剔除的問題是 “Fizz-Buzz” 測(cè)試。如果一個(gè)程序員無法在10-15分鐘之間寫出一個(gè) Fizz-buzz,那他可能需要更多的鍛煉,或許根本沒有準(zhǔn)備好。另外一個(gè)方法就是讓他們寫 Fibonacci series(斐波納契數(shù)列),并請(qǐng)他們優(yōu)化一下。大家都知道 Fibonacci 是非常常見的,但是你可能會(huì)很驚訝的看到這些程序員很難在之上寫出這些數(shù)列,即使是在 IDE 上也寫不出來。
在 XML 方面,我的問題是請(qǐng)他們說出 DTD 和 XML Schema 之間有什么不同?有些人可能會(huì)說只用一個(gè)問題來判定某人的 XML 技能是不是有點(diǎn)太苛刻了,可我要說,這只是一個(gè)基礎(chǔ)問題。有很多程序員之前是從事 XML 工作的,現(xiàn)在也是可以從事 XML 工作的,但他們對(duì)這一基礎(chǔ)的了解完全不夠,所以說他們有責(zé)任區(qū)學(xué)習(xí)更多的基礎(chǔ)知識(shí),光會(huì)工作是不夠的.,你還要不斷地填充大腦里面的空白。
在 Java 方面,我會(huì)讓他們說說 JDK、JRE 和 JVM 之間有哪些差異?這也是一個(gè)基礎(chǔ)性問題,我希望所有有Java 工作經(jīng)驗(yàn)的,或者是學(xué)習(xí)過Java 的人都應(yīng)該知道這三者之間的差異。還有就是我希望他們都能自主的提到有哪些JDK 工具,至少可以說出 Javac(Java 編譯器) 和所有Java程序里都會(huì)用到的 JVM。另外一個(gè)問題就是 PATH 和 CLASSPATH 之間有什么不同之處?如果你不知道這兩者之間的區(qū)別,那我真的很難有把握把你們調(diào)教成優(yōu)秀員工,因?yàn)槟阍趧?chuàng)建項(xiàng)目過程中將會(huì)遇到很多噩夢(mèng)般困難:特別是調(diào)試和修復(fù) ClassNotFoundException 和 NoClassDefFoundError 的時(shí)候。
在招聘 Java 或其他語言方面的多線程開發(fā)人員方面,篩選問題是要求候選人編寫代碼來避免“僵局”的出現(xiàn)。問這個(gè)問題的時(shí)候可以提供一個(gè)特別的場景,或者問如何編寫代碼這樣“僵局”就不會(huì)出現(xiàn)了。如果你有足夠的面試經(jīng)驗(yàn)的話,你會(huì)很吃驚,因?yàn)槟切┯兄?-4年編程經(jīng)驗(yàn)的程序員通常沒辦法正確的回答這個(gè)問題。
在數(shù)據(jù)結(jié)構(gòu)和算法方面,我問的第一個(gè)問題就是如何從鏈接表里添加和刪除組件?因?yàn)槲蚁嘈抛鳛橐粋(gè)程序員就一定知道數(shù)組、鏈接表、集合、映射和文字列算法。
我知道,和應(yīng)聘者拉家常談瑣事并不是發(fā)現(xiàn)程序員的好方法,但是你問出來的問題和應(yīng)聘者的工作經(jīng)歷是息息相關(guān)的,這可以幫助你區(qū)分誰有真才實(shí)學(xué),誰只是虛張聲勢(shì)。最好的方法就是坐下來和他們面對(duì)面的交流,討論他們之前做過的項(xiàng)目,或者是和你結(jié)對(duì)編程來證明自己的實(shí)力。
詢問他們之前的工作中做值得他驕傲的是什么,他們最想改變的是什么,為什么要改變,怎么改變。一旦問了這些問題,除了人格方面的,在編程方面的能力已經(jīng)完全展示出來了。如果你有機(jī)會(huì)面試超過100個(gè)人的話,其實(shí)你不是在浪費(fèi)時(shí)間和金錢,而是在組織時(shí)間和金錢。尤其是在通知他們?nèi)⒓用鎸?duì)面面試的時(shí)候,一定要確保這個(gè)人值得你花時(shí)間去和他交流。
所以,我很迫切的想要知道你們是問什么樣的篩選問題來面試這些程序員的,尤其是在招聘 C、C++、Ruby、Python 或者是 JavaScript 開發(fā)者的時(shí)候。
【面試中如何剔除魚目混珠的程序員】相關(guān)文章:
HR如何面試程序員01-16
ios程序員該如何面試09-30
面試中的焦慮如何緩解09-06
面試中如何識(shí)別謊言12-04
魚目混珠的成語故事01-01
如何在你的面試中添磚加瓦08-28
如何克服面試中的緊張情緒09-18