自從被內推了阿里以後,一直在等待阿里的面試。我要面試的崗位是機器學習相關的算法project師,本身也一直在學習機器學習方面的知識和技術。事實上我比較喜歡數學和計算機科學結合的學科,機器學習正是要用到這兩個方面,只是有時候內心也想研發產品,內心仍是有點矛盾的,但是想一想就算了,我也可以應用機器學習到產品研發中。能作好同樣就很是不錯了。node
3月26號接到杭州打來的電話,告知我明天下午面試。呵呵,這個倒挺好的。還有提早通知。因此也有時間準備一下。27號就沒去實驗室了,中午吃完飯就呆在宿舍,把手機放在桌上,默默等待着電話的到來。內心有點小緊張。畢竟是第一次電話面試,不知道會是什麼狀況。也聽到別人有網上視頻面試的。還能直接在網上寫代碼,感受那樣更cool。linux
爲了緩解緊張的心情。就聽起了歌,看了看書籍。面試
事實上面試前感受最好對簡歷上的內容要至關熟悉。因此仍是要多看看簡歷。想一想面試官會問的一些問題。比方你認爲最有價值的項目是什麼,在這個項目過程當中遇到了哪些困難又是怎麼解決的。等到了5點鐘,才接到面試官打來的電話。算法
一面是一個男的面試官,聽聲音感受挺年輕的,面試開始就讓我先自我介紹,我就blabla說了一兩分鐘吧。呵呵,這個自我介紹倒沒怎麼準備。事實上不妨準備好的,而且說話要有條理和邏輯性。而後就問了我簡歷上的一個項目。事實上那是個比賽來的。就是給出移動用戶的通話、短信次數,部分用戶已標註爲學生或非學生用戶,要預測剩下的用戶中哪些爲學生用戶。我就講了咱們用的方法。大概過程是提取特徵用已標註數據訓練隨機森林,而後預測未知用戶。期間他問了好多關於這個可能會遇到的問題,問我有沒有考慮那些問題。事實上那些問題我曾經作時是遇到的。但那時候沒怎麼考慮就直接提取特徵,那時候對提取特徵還沒什麼經驗,也不太會作特徵選擇,現在看來這些都是很是重要的,假設不用圖模型或本身主動提取特徵的方法,特徵提取仍是很是重要的,機器學習裏也有句話說特徵決定了算法能達到的效果,這是蠻有道理的。在作阿里大數據比賽時也深深體驗到了業務特徵的重要性。之後本身會在這方面多下功夫。編程
因爲沒怎麼考慮那些實際問題,因此回答得不是很是好。在這個項目介紹上都花了好長時間,因爲用到了隨機森林算法,我也知道怎麼說了adaboost算法,我就跟他解釋了這兩個算法的流程。而後他問了這兩個算法哪一個比較easy過擬合。我曾經還真沒考慮這個問題。我就說了隨機森林中決策樹的深度那些會影響過擬合,adaboost算法每次都去擬合訓練數據也可能會過擬合等等。現在看來是adaboost比較easy過擬合,因爲adaboost每次都是在整個訓練數據中調整權重而後學習分類器。而隨機森林不太會過擬合,因爲它用到了bagging方法而且分裂節點時會隨機選特徵。這樣使得它的泛化偏差相對會比較小。但我看了相關論文說boosting早期實驗中出現訓練數據偏差接近0但是泛化偏差還在降低。這說明boosting不會過擬合!數組
boosting是一種提高方法。實際是採用加法模型和前向分步算法的,有分類樹和迴歸樹,現在仍是機器學習中性能最好的方法之中的一個。後面問了推薦系統的,我就從協同過濾講到了low rank和svd等等,而後他問了一個很是實際的問題,假設是高維數據該怎麼辦?比方用戶協同過濾,商品有很是多,計算用戶之間的類似度複雜度會很是高,我就說了學出用戶特徵以後就是低維了就不會有這種問題了。現在認爲假設用戶可能買了很是少的商品而且兩個用戶購買同樣的商品數會比較少。就是稀疏的話仍是easy計算的,也可以創建倒排索引。跟搜索引擎的相似。接着問了會不會用STL,這個卻是會,曾經寫過很多,也看過一點Effective STL,但是沒看完。。。就跟他說了用過vector、deque、list、map、set等等。網絡
他問了vector的內存分配方式、map的意義及實現方式。數據結構
還問了C++的繼承、statickeyword的使用方法等。貌似就這些。後面的也記不太清了。一面就這樣結束了,面了40多分鐘,他說過幾天會有二面。iphone
感受一面面試表現也還算可以,僅僅是對簡歷中的項目不夠熟悉,假設熟悉點就更好了,對boosting方法還不是很是之理解,還要研讀一下論文、研究下開源實現。而後本身實現才行。機器學習
過好幾天後就接到了北京阿里打來的電話。是個女的面試官。她說來個簡短的面試,我那時恰好走出宿舍樓去實驗室。靠近中心花園,因而天然而然朝那裏走去。
她問了我一些基本狀況,而後問了我本科畢設作的東西。主要是low rank矩陣恢復應用到鏈接預測的。我說了這些後還說了也可以應用到推薦系統。因而她問了我推薦系統的一些東西。而後問了一個狀況就是假設用戶買了iphone該怎樣可以推薦會買的手機,我就算了商品協同過濾和求出商品特徵後計算類似度的,她說仍是用類似性啊,囧。現在想一想認爲可以用LR的方法作。我是在阿里技術嘉年華那裏看到的。想一想也是。跟廣告點擊率預測也有相似的地方。只是要用訓練數據才行,比方訓練數據是用戶買了某個商品後看到那些推薦的商品也會再買,收集了訓練數據後可以提取特徵,比方買的商品的特徵、買了被推薦的商品的特徵、二者的關聯特徵、時間等等,用這些特徵訓練LR,這樣用戶新買了商品後,就可以推薦最大機率會購買的商品出來。也不知道業界是否這樣作的。以後也問了一下hadoop,我僅僅說了mapreduce的大概工做原理,其它的真沒研究。而後問了linux下移動一個文件到另一個地方背後發生了什麼事。我說到了inode的,忘了說清楚datablock的。
還問了STL相關的,問了map和hashmap的差異。時空複雜度等等。二面就這樣結束了,她說後面還有面試。
這樣等了很是久也沒來面試。後面又接到通知說24號到華工酒店面試。這期間還參加了騰訊筆試,經歷了兩輪面試。
我面試的是騰訊的基礎研究。
去到華工酒店,簽到後到了面試官所在房間,看到外面有個女生在等。她也是研究生,就跟她交流了一下各自的研究方向。
一面面試官是個男的。一開始也是自我介紹,而後讓我說一個項目,我說了阿里二面面試說過的那個項目。以後問了我知道的一些分類方法,我就算了感知機、SVM、樸素貝葉斯、神經網絡等等。而後他問我樸素貝葉斯的原理。我說到了垃圾郵件分類,只是他問了怎麼去掉沒用的詞,我說了停用詞而後說取頻率前多少的詞。他說假設要選出100個特徵呢。果真工業界都是考慮很是實際的問題。我竟然說了用深度學習從詞中學出這些特徵,後來跟同窗討論了下說可以用卡方檢驗,好吧。漲姿式了,對統計學方面、特徵選擇方面都不瞭解啊!
面試官也說是卡方檢驗。還問了怎麼找出互聯網中的新詞,這個也不會。他說了左右熵,說實話我僅僅知道交叉熵、相對熵,而後問了我熵的定義。接着也問了STL的。比方連續內存的有哪些,我一開始說了vector和deque,但後面他一反問我就醒悟說deque不是了,這個可以看看STL 源代碼剖析。後面讓我寫了道題。把一個整數數組的奇數放在偶數前面,這個比較easy。我花了幾分鐘就寫出來了,用的是快排中用到的找正確位置的方法。這樣一面就結束了。感受跟這個面試官談挺輕鬆的,有說有笑。
一面面完晚上就接到了二面的通知。二面是上午9點半面試,惋惜我竟然遲到了,走到了半路才發現忘了拿簡歷,僅僅好回去拿,去到已經遲到10多分鐘了,而且那時候面試官又打了電話過來問我。
真不應這樣啊。應該早點去的,之後必定要注意了。不管作不論什麼事都要早點作好準備。!
!
二面也是個男的面試官,應該是必定級別的吧。
仍是自我介紹,而後問了那個比賽,問爲何選擇隨機森林而不用knn啊,這個還真很差回答,對這些算法用得很少,經驗很少。事實上,用knn也是可以,僅僅是用了不一樣的算法而已,特徵還可以用原來的特徵。而後問了怎麼本身主動選擇特徵,我理解錯了,覺得本身主動從原始數據中得出特徵,這不是深度學習作的事嗎?事實上特徵選擇的話也有很是多方法。像前向搜索、後項搜索和一些計算特徵得分的方法,比方特徵對分類的互信息呀。這我也是後來才知道的。後面問了string的,而後讓作一道題,題目是改進一個處理string的函數的,我提到了const引用、異常、snprintf等等。
說完繼續作一道題,寫個簡單的樹的深搜。
就這樣,二面結束了。感受是主要特徵選擇和爲何用RF那個回答得很差,給個感受是僅僅會用一些算法,不知道假設去比較不一樣算法的適用場景,不會作一些特徵的處理等等。
接下來就是阿里24號終面了。簽到後在會議室等待。阿里還真不同,在桌子上放了一些零食,可是沒什麼心情吃。跟周圍幾個同窗瞭解了一下狀況,有面系統project、用戶體驗、算法和研發的。等了大概20分鐘就告知去面試了。
終面儘管不怎麼緊張。但是思惟很是堵塞啊。我也不知道怎麼回事。是個男的面試官,一開始讓我自我介紹,而後問我作的最有價值的項目,我就說了kaggle上星系識別的比賽。只是有些問題的細節也沒記住,說得不夠清晰。
因此面試前仍是要確保熟悉簡歷上的內容啊。
跟他解釋了CNN模型,預計他也不熟悉這一塊的或者時間問題打斷了我,說作一道題目。
題目是在一個平面中。給出很是多同樣大小的正方形,而後給出很是多點。要求查詢每個點落在多少正方形內。這種算法題以前沒怎麼碰過啊。想了一下就說了最簡單的全部掃描的方法,而後繼續想更優的方法,我說了一下kd樹,依據每一維來切分紅左右子樹,而後繼續切分下去,但是思惟很是堵塞啊。有點記不清kd樹的詳細構建流程,他還讓我寫kd樹的代碼。被虐了。僅僅寫了點和正方形結構體的定義。而後就卡住了,在想kd樹該怎麼來作,這個時候真的很是糾結啊,都不知道該怎麼作了,後面他看我寫不下去,就讓我看看是否還有其餘方法作。我說了一下二叉搜索樹的。但是該怎麼用上二維又該怎麼去統計仍是不肯定。以後討論了二叉搜索樹的構建過程。現在想一想,假設時間多一點或許會想出來的。但是本身的代碼實現能力仍是比較弱啊,這需要之後不斷增強啊,仍是要多實踐。後面讓寫strcat的實現,我又搞笑了,寫了分配了新的內存拷貝兩個字符串的。。。面到最後問他對我有什麼改進的意見。他說了阿里實習生的要求最主要是基礎要紮實。最後問了面試結果。被告知回去等通知。
實習面試就這樣結束了。
如下總結一下。但願之後有所改進,也但願對你們有所幫助。
1. 平時涉獵應該儘可能廣一點,但是更重要的仍是有所精通,特別是對於所應聘崗位所需要的,比方我面試的是機器學習相關的,就要對當中的一些算法很是熟練。而且需要實踐過。積累項目經驗。項目仍是很是重要的。面試都要講到項目,固然假設有論文就更好了。
2. 基礎很是重要。像C /C++、數據結構、算法之類的,固然不一樣崗位要求不同,總之編程能力要夠強。像面試時準確無誤寫出字符串處理、鏈表、樹之類的程序。
3. 面試前要好好熟悉簡歷上的內容,面試官問到時才幹侃侃而談。
4. 面試時要有自信,心態要好,要真誠。
5. 平時也要關注技術發展,關注所面試公司的市場、文化等狀況。這樣或許hr面時會用得上。
總之。經歷了這些面試,我也看清楚了將來學習和職業發展的一些方向。比方必定要多實踐啊,之後作這行就是要不斷寫代碼、算法或模型。要積累紮實的基礎,多看看論文開闊視野,也可以參與到一些開源項目中去。固然,要多看看科技發展的歷史,多思考一下軟件或互聯網市場的變化、發展等等。多思考。多實踐。多總結。且行且進步。