前兩天的時候有一個同學在評論里問我,如果你是面試官,你會問什么問題呢?
不得不說這是一個很好的問題,一千個人眼里有一千個哈姆雷特,同樣,一千個面試官里面也有一千個面試標准和面試風格。首先說明,本文的內容只代表我個人的觀點,大家辯證吸收。
無論是我之前作為面試官進行的面試,還是以后我將要進行的面試,我個人的面試流程主要分成三個部分。分別是算法題、機器學習基礎以及理解題。實際上也不只是我,業內很多面試官基本上也都是這個流程。
算法題
算法題指的是算法數據結構這一塊內容,這塊能考察的東西非常多,即使排除掉競賽當中的內容,也可以玩出花樣來。業內的面試官在這個部分一般有兩種風格,第一種是朴素風,也就是問的都是基礎當中比較難的內容。比如讓你手寫歸並排序、快速排序。
歸並排序和快速排序雖然都是本科算法課當中有的東西,但難度還是比較大的,有能力在面試的時候用白板寫出來並且基本上沒有bug的都是牛人。如果此人還沒有acm之類的算法競賽的背景的話,那么可以肯定他的基礎一定非常扎實,或者是進行了充分的面試准備。
第二種風格是思維題,比如選擇一道LeetCode或者是codeforces當中的問題進行考察。一般面試官喜歡解法多樣,既存在簡單朴素方法,又存在需要縝密思考才能得到進階解法的問題。候選人能答出什么樣的解法,就說明了他處在什么樣的檔次。這種問題的解法一般也都是一些基礎算法,比如two pointers或者是遞歸,你想不到一定不是因為你不知道這個算法,而是你理解不夠深刻,或者是思維能力不夠。
我個人在面試的時候一般會從易到難准備三道問題,根據最簡單問題的回答情況來判斷是否要給出最難的問題。比如一道裸題,一道基礎題,和一道思維題。有時候為了防止候選人押題,我也會准備一道原創題。因為經常會遇到面試的時候候選人偷偷百度的情況。
機器學習基礎
基礎題主要指的是機器學習方面的基礎,這一塊問問題的風格也很多。有些人會喜歡由淺入深,你每回答出來一個問題,就繼續追問你一個更深入的問題,直到你全部回答出來或者是回答不上來為止。還有些人會直接問你某一個領域的細節查看你的理解情況。
我個人喜歡兩種方法聯合起來使用,比如我可能會問你在機器學習領域你比較熟悉的模型有哪些。當候選人回答之后,我會讓他自己選擇一個他拿手的模型進行介紹。比如之前有一個哥們選了Kmeans,他把Kmeans說出來的時候就在我心里已經扣了點分了。說明他對於他當時提到的其他模型一定都不是非常自信,不然為啥選擇最簡單的Kmeans?
接着,他介紹Kmeans的原理倒是沒有太多的問題,但是當我問他如何解決Kmeans效率較低的問題,有沒有想法的時候,他直接告訴我沒有想法。這說明了什么?說明他對於這些模型的原理只是淺嘗輒止而已,並沒有深入其中思考。就連最簡單的Kmeans尚且如此,其他的模型更加就不用說了。
如果這一環節他答得不錯的話,我可能會選擇一些比較有挑戰的問題追問一下。比如追問一下GBDT或者是XGboost模型的原理或者是一些細節。如果追問的內容也可以答出來,那么機器學習基礎這一關就算是過了。
一般來說不會問太多深度學習相關的內容,可能會挑一些比較基礎的問。比如解釋一下神經網絡梯度爆炸的原因以及解決的辦法,以及候選人在這個領域做過的模型和事情等等。如果候選人之前沒做過相關領域的話,問不出太多的東西來。比如如果他之前做的是NLP或者是CV,那么基本上沒有相關性,可能只能挑一些有些感興趣或者了解的問問了。
理解題
理解題問的理解是對行業或者是場景的理解,比如既然是推薦算法,那么肯定會問一問對方對推薦的理解。推薦算法究竟解決了什么問題,推薦算法的痛點是什么?我們怎么樣來設計特征,在線學習怎么做?這一塊內容更多地是交流而不是提問,聽聽對方的想法,看看他的理解有多深刻,有沒有一些好的點子。
這一塊屬於開放性問題,相對比較機動,在面試當中的重要性占比也比較低,基本上可以理解成加分項。如果對方實在沒什么想法或者是沒什么經驗的話,也可以不問,或者是問一些對方簡歷當中的內容來替代。
關於候選人簡歷當中的內容,如果比較相關的可能會多問一些,如果不怎么相關可能就大概了解一下,或者就不問了也可能。比如他之前有做過哪塊內容比較讓我感興趣,或者是我們剛好做過或者即將要做,都會深入聊聊看。一方面了解一下對方的想法以及做法,一方面也可以從側面看得出這個人的品質以及能力。
最后再聊下我的標准,算法題和機器學習這兩塊能夠達到60分,沒有其他扣分項的話,基本上我就會給過了。兩項都能80分,我就會給A,如果其中還有一項能超過90分的話,我就會給A+。當然這個是校招以及社招普通工程師的標准,因為我實力有限,也只面過這個標准,對於更高level的面試會問什么,暫時了解還不多。如果有同學了解的話,歡迎在下方給我留言。
今天的文章就到這里,衷心祝願大家每天都有所收獲。如果還喜歡今天的內容的話,請來一個三連支持吧~(點贊、關注、轉發)