當前位置:學問君>人在職場>如何面試>

面試中如何剔除魚目混珠的程序員

學問君 人氣:9.88K

對於一個公司來說,執行招聘面試事宜是一個耗時耗錢的項目,從顧問公司和人才中介挑選出合適的簡歷之後,還要花更多的時間找出合適的候選人。有的時候這些機構會向你保證這些人都是 Java 天才、SQL 專家、全棧開發者等等,但實際上如果你盲目的信任他們並邀請應聘人員參加面對面的面試的時候,你會很失望的。所以我覺得最快的甄別方法就是先電話面試,之後再根據他們的表現採取面對面的交流。

面試中如何剔除魚目混珠的程序員

爲了獲得更多的反饋資訊,提高自己的方法,在這裏先和大家分享一些自己工作以來使用的篩選出來的編程問題,從這些常見的編程技巧裏面選出兩個左右的問題,例如Java、SQL、XML、編程、編碼、OOPS、多線程和UNIX。和期待你說出對於同一技能的考察有什麼好的方法。

下面是我列出的如何過濾和篩選出不同編程技能的問題,這主要有兩個目的,一是爲了給面試者熱身,另外就是幫助主考官剔除不會編程的“程序員”,那些SQL 專家盡然不會編寫 JOIN 查詢。

在 SQL 方面,我的第一個篩選問題就是請他們描述一個 Left Outer Join。不需要說得多麼精準,我只是想看看他們有沒有做過除了 two table inner join 之外更多的東西。根據他們的回答我會問他們古典SQL查詢,以覈實他們是否知道這樣的原理以及如何應用這些知識。如果他們使用Inner join而不是left outer join 的話,估計就會錯過成爲正式員工的機會了。

在 Web 開發方面,首先提的問題是解釋一些一個 GET 和一個 POST之間的區別。這裏我至多就是想知道他在URL 裏面通常看到的GET 是什麼,以及在HTML Forms 裏POST 是什麼形式的。根據他們的回答,還可以繼續問一些關於GET vsPOST 使用限制、安全性等問題。這些問題完全足夠讓你明白眼前這個人對互聯網是否有真正的瞭解。

在 UNIX 方面,其中一個比較流行的篩選方法是相當簡單的:你是如何找到一個特定的程序並解決問題的?我期望他們能告訴我關於 ps、grep 和 kill 之類的命令。同時也想測試一下他們對ps options 的理解程度。第二個篩選問題就是在UNIX 系統裏找出大量的檔案。千萬別誤會,如果應聘者不能回答這些問題的話,那麼他很難在這個有大量程序和服務器連接的項目中完成任務。

在招聘 OOPS(Object Oriented Programming)方面,請他們講述一下 Class 和 Object 之間的區別。這樣的安排主要是想他能夠在描述定義的基礎上講一講構建項目的藍圖,關鍵是想測試回答問題的人如何理解概念,並且不會被概念所困擾。接下來就是請他舉個例子,根據他的例子來問他,在什麼地方創建這個對象,由誰來創建等等。

招聘程序設計人員,尤其是提到代碼,最流行的將魚目混珠的程序員剔除的問題是 “Fizz-Buzz” 測試。如果一個程序員無法在10-15分鐘之間寫出一個 Fizz-buzz,那他可能需要更多的鍛鍊,或許根本沒有準備好。另外一個方法就是讓他們寫 Fibonacci series(斐波納契數列),並請他們優化一下。大家都知道 Fibonacci 是非常常見的,但是你可能會很驚訝的看到這些程序員很難在之上寫出這些數列,即使是在 IDE 上也寫不出來。

在 XML 方面,我的問題是請他們說出 DTD 和 XML Schema 之間有什麼不同?有些人可能會說只用一個問題來判定某人的 XML 技能是不是有點太苛刻了,可我要說,這只是一個基礎問題。有很多程序員之前是從事 XML 工作的,現在也是可以從事 XML 工作的,但他們對這一基礎的瞭解完全不夠,所以說他們有責任區學習更多的基礎知識,光會工作是不夠的,你還要不斷地填充大腦裏面的空白。

在 Java 方面,我會讓他們說說 JDK、JRE 和 JVM 之間有哪些差異?這也是一個基礎性問題,我希望所有有Java 工作經驗的,或者是學習過Java 的'人都應該知道這三者之間的差異。還有就是我希望他們都能自主的提到有哪些JDK 工具,至少可以說出 Javac(Java 編譯器) 和所有Java程序裏都會用到的 JVM。另外一個問題就是 PATH 和 CLASSPATH 之間有什麼不同之處?如果你不知道這兩者之間的區別,那我真的很難有把握把你們調教成優秀員工,因爲你在創建項目過程中將會遇到很多噩夢般困難:特別是調試和修復 ClassNotFoundException 和 NoClassDefFoundError 的時候。

在招聘 Java 或其他語言方面的多線程開發人員方面,篩選問題是要求候選人編寫代碼來避免“僵局”的出現。問這個問題的時候可以提供一個特別的場景,或者問如何編寫代碼這樣“僵局”就不會出現了。如果你有足夠的面試經驗的話,你會很吃驚,因爲那些有着2-4年編程經驗的程序員通常沒辦法正確的回答這個問題。

在數據結構和算法方面,我問的第一個問題就是如何從連結表裏添加和刪除組件?因爲我相信作爲一個程序員就一定知道數組、連結表、集合、映射和文字列算法。

我知道,和應聘者拉家常談瑣事並不是發現程序員的好方法,但是你問出來的問題和應聘者的工作經歷是息息相關的,這可以幫助你區分誰有真才實學,誰只是虛張聲勢。最好的方法就是坐下來和他們面對面的交流,討論他們之前做過的項目,或者是和你結對編程來證明自己的實力。

詢問他們之前的工作中做值得他驕傲的是什麼,他們最想改變的是什麼,爲什麼要改變,怎麼改變。一旦問了這些問題,除了人格方面的,在編程方面的能力已經完全展示出來了。如果你有機會面試超過100個人的話,其實你不是在浪費時間和金錢,而是在組織時間和金錢。尤其是在通知他們去參加面對面面試的時候,一定要確保這個人值得你花時間去和他交流。

所以,我很迫切的想要知道你們是問什麼樣的篩選問題來面試這些程序員的,尤其是在招聘 C、C++、Ruby、Python 或者是 JavaScript 開發者的時候。