1. 程式人生 > >【面試】2017滴滴機器學習演算法工程師面試

【面試】2017滴滴機器學習演算法工程師面試

一面:

先自我介紹,然後看著簡歷問我,有用過哪些機器學習的演算法做專案。比如說決策樹用它做過什麼專案沒有?CNN用它做過什麼專案沒有? 我回答沒有,因為現場編我也編不出來。就跟老師說我自己學習的。然後考官就讓我介紹一下決策樹。我就自己介紹(感覺自己介紹的很不專業),介紹之後就問了一句。決策樹的類似有哪些?介紹了一下在天池參加比賽使用到的xgboost。具體介紹了一下這個比賽,以及自己是怎麼做的。
面試官提問:
1,訓練集有多大規模? 2,怎麼度量模型的好壞? 3,最後的結果是怎麼打分的?
————————————–演算法沒問太多東西,就問了15分鐘。

然後進入寫程式碼環節:
1,尋找字串中是否含有某個子串,有的話返回所在位置,沒有的話返回NULL,不能呼叫庫函式。
(哎,這個去之前特意準備了的,結果。。。。還是做的不好。因為面試官給的陣列是用指標來操作的,而不是熟悉的字串和陣列。PS:自己寫了十分鐘吧,還出了一點小錯誤,在考官的提示下改正了過來)

2,實現字串的比較函式cmp(還是指標操作,犯了一個錯誤以為字串出界之後是指向空的。。。)。

3,有一個檔案,檔案有三列,若想把中間的那一列拿出了放到其他的檔案中,那麼用python應該怎麼做(這個真的是不會,不能用pandas庫)?
這個回來之後特地查了一下,其實很簡單,用python幾行程式碼就能搞定的事,只是平時使用慣了pandas庫才臨時沒想起來怎麼使用。

二面:兩個小時

面試官很客氣,首先跟我解釋了上一個面試官為什麼問我關於演算法原理的東西特別的少,其實主要原因還是由於對於社招生來說,主要還是考察專案的情況,而我的專案中並沒有涉及機器學習的方面。

然後讓我找一個工作中做過的一個專案,深入的說一下。然後我就自己找了一個專案說。是一個數據挖掘的專案,酒店使用者資料資訊挖掘。不得不說這個面試官很厲害,思維很清晰,我能感覺到他並不知道我所以的資料探勘的演算法,但是他卻能夠通過我對演算法的描述來抓住那個演算法的重點,然後反推我對演算法的應用不夠正確。並且跟我一起就我所應用的業務場景進行分析,然後糾正我演算法的使用過程中思想上的不正確(~

~~)。總之通過探討我自己也覺得受益良多(一個專案講了半小時)。

接著進入了寫程式碼的時間了。
1,反轉單鏈表:我自己用頭插法的思想寫了一個,空間複雜度是O(1)。然後面試官讓只在原連結串列上操作,比較仁慈的是面試官告訴的演算法思想,讓我自己實現,(演算法我實現了,但是實現的演算法略顯臃腫不夠美觀)。
2,問了我hash表的情況,有100萬的資料,如何使用hash表儲存?表述一下hash表的作用是什麼,好處是什麼?
3,問我會不會使用Linux?linux的grep會用嗎? 我說不會。。。。。
4,分散式的東西會嗎?spark,MapReduce? 我還是說不會。。。。
5,SQL語言。一張std表含有學生的資訊,包括:id,name,weight,grade; 現在希望求出每個年級中體重最重的學生的資訊。(忘記了max函式是怎麼使用的了,沒做出來。。。)
6,現在有一個文字,使用裡面儲存的是剛才std表的資訊,每一行的資訊使用‘\t’來分割資訊。不能使用pandas如何獲得所有學生的體重資訊(沒寫出來,不用pandas就不會了~~~)。
7,思維訓練題目:有25匹馬,只有五條賽道因此每次賽馬只有五匹馬能跑。但是跑的時候不能計時。現在要知道前三匹跑的最快的馬的編號,問最少的比賽多少場次?(這個我做出來了,看了我思維還可以啊。不過後來在面試官的提示下,題做的更快,更省力)

在面試即將結束的時候出了一個小插曲。面試官讓寫一下貝葉斯公式,然後我滿懷信心的寫下了如下公式:

寫完之後正在心中竊喜自己之前有好好看周志華老師的機器學習書的時候,面試官大人跟我說,這公式是你背的吧,你看看有沒有哪裡寫錯?當時真的是一臉懵逼啊,心想周老師書上就是這麼寫的啊,而且後面還說了為了防止連乘的時候出現一個因子為0,結果全為0的情況而進行了正則化。
然後就說,沒有錯啊,面試大人指著那個連乘符號說這個是連乘嗎?應該改成連加!
看著大人斬釘截鐵的態度和不容置疑的口吻,我動搖了自己對周老師堅定的信念,默默點頭肯定了面試官大人的說法。最後在面試官大人教育我對演算法的認識要深入的,對程式設計的掌握要熟練的氛圍中結束了今天的面試。
(回來之後我特意翻看了一下西瓜書和李航的統計學習方法,對於樸素貝葉斯分子的部分確實是應該是連乘的。而分的部分是通過全概率公式的連加來獲取的。或許我倆講的不是一個東西才會有那個插曲,當然也側面反映我對演算法的掌握不透徹)

面試官給的結果是待定。然後總結說,我對演算法的掌握還不牢靠,並沒有真正理解演算法的精髓,要加強。因此在後面面試中著重瞭解我的程式碼編寫能力,程式碼編寫能力有一定的基本功,但是程式碼編寫的不熟練。所以無論是看書還好還是做專案還好,加強演算法的理解和應用(最後面試官給我安利了吳恩達老師在斯坦福的課)。

自我總結:這次面試總體來說收穫還是很大,知道了自己有哪方面的不足,另一方面面試的感覺其實是強過自己的預期的,這增加了自己對以後面試的自信。自己對於演算法的掌握大多停留在理論理解方面,這對於一個社招生是不夠的,所以應該想辦法把演算法應用到實戰中去。演算法和程式碼的熟練程度都有進一步加強。另外Linux和spark、mapreduce也要有所掌握。

後記:快兩週了還沒收到訊息,肯定是掛了,雖然在意料之中,但是心中還是不免有些可惜。倒不是覺得錯過了滴滴而是覺得錯過了一個很好的leader。真心覺得第二個面試官很nice,很會循循善誘,而且難得的是與之溝通很順暢。

我本將心向明月,奈何明月照溝渠。還是怪自己水平不夠、實力太弱啊,繼續加油吧~
2017.09.24