面試中如何剔除“魚目混珠”程式設計師?

edithfang發表於2014-10-01
對於一個公司來說,執行招聘面試事宜是一個耗時耗錢的專案,從顧問公司和人才中介挑選出合適的簡歷之後,還要花更多的時間找出合適的候選人。有的時候這些機構會向你保證這些人都是 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 vs POST 使用限制、安全性等問題。這些問題完全足夠讓你明白眼前這個人對網際網路是否有真正的瞭解。



在 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 開發者的時候。
來自:CSDN
相關閱讀
評論(1)

相關文章