校招演算法崗麵筋

hemeinvyiqiluoben發表於2018-02-27
一更:
帖子發了之後,謝謝大家的熱情的點贊,有部分同學私信或者樓裡問了我一些關於找工作相關的問題。有些問題我在帖子裡談論的比較少,但是的確是很有意義的,我這裡在本文最下面專門對大家提出的問題進行了更新。部分同學的問題在下面更新裡回答了,沒專門回私信,也希望能理解。

鑑於我貼上過來加粗的都不顯示的,如果想看帶加粗標記的原文,連結如下:
http://note.youdao.com/noteshare?id=2611cfa49f62781f7315d59e1441b59e

-------------------------------------------------------------------------------------
原始正文部分

2017年即將過去,今年是忙碌的一年,從2月17還沒開學就來學校,到現在12月初,工作的事情終於塵埃落定,現將這一段經歷寫下來,希望能幫助來年找工作的學弟學妹,同時,對自己來說,也是一年的工作總結,總結經驗教訓,對自己一個提升。
簡單介紹一下,北郵本碩,要找的崗位主要是演算法工程師(機器學習方向)。演算法工程師找實習的時候,最終的結果是找到了四家:亞馬遜、京東、滴滴、騰訊地圖。找工作的時候,主要有百度sp、滴滴sp、美團sp、新浪sp、搜狗sp、小米(沒談薪資直接拒了)等。總體而言,今年找工作相對以往還是很順利的,各大公司都很缺人,各家開出的工資相對於去年都非常誘人,找工作的情況也出乎了我們很多人的意料。
年初的時候,大概2月28左右開學吧,我2月16就來了,開始準備找實習。簡單的說一下面試的情況,有些可能已經忘記,現在說個大概情況。
1. 滴滴,實習的是在論壇招人內推的,兩面,第一面是主要問了svm lr等原理,簡歷上的專案,svm怎麼用於多分類。第二面寫了一道演算法題,leetcode 63. Unique Paths II。問我是否會用spark,我說不會。然後就給我介紹了他們所做的專案。後來回來的路上我想了想,當時問我是否會不會spark,我應該說我雖然不會,但是可以學的,留個好印象。沒過多久,就發了實習offer。後來去了滴滴實習。實習轉正三面,每面半小時,所以還是相對容易了很多。轉正一面,主要問了在滴滴的實習,給我的柑橘是更偏重業務,對技術並不是太熱衷,做的專案的業務的主要應用是什麼,將來怎麼評價之類的。一道演算法題,leetcode上的,旋轉陣列,leetcode 59. Spiral Matrix II。轉正二面,也是問了問滴滴的實習,問了下gbdt的原理,xgboost與gbdt的區別,gbdt用於分類時,分類概率的梯度體現在哪裡。一道程式設計題,矩陣A與矩陣B相乘得到矩陣C,給定A和B,求C的秩。轉正三面,三面面試官是一個研究員,對數學推導有獨特的興趣。問了svm的推導,什麼是凸函式,為什麼拉格朗日對偶方程成立。滴滴的offer大約10月初發。
2. 美團。實習的時候貌似沒內推,走的校招。一面,上來讓寫了幾個演算法,一個是陣列全排列,一個是二叉樹的非遞迴先序遍歷,一個是反轉連結串列。然後問了過擬合問題,l1 l2正則區別之類的。然後進入二面,二面的時候面試官先問了一個二叉樹的垂直遍歷,LeetCode 314. Binary Tree Vertical Order Traversal(這個題是leetcode付費的題)。沒答上來,就掛了。校招時是找斜對門的美團實習的大佬內推的。共三面,一面面完告知通過接著二面,二面面完告知通過讓回去等三面,三面是電話面,晚上7點三面的,晚上12點就收到錄取意向書。做完筆試,過了幾天,晚上9點多美團打電話過來,說明天早上10點來某某酒店面試。第二天一面問了簡歷上的專案,程式設計題問了1到n的一個排好序的陣列,少了一個元素,怎麼找出來。我說二分查詢,時間效率logn(也可以用位運算,時間效率n)。二面問了專案,我簡歷上有k-means,就問了其他聚類的方法,距離有多少種,影響聚類的因素。問了程式設計題leetcode 198 House Robber(動態規劃)。三面電話面,問了專案,問了過擬合的問題產生、解決辦法,問了兩個程式設計題,leetcode 69 Sqrt(x),兩種方法解決,一種是二分查詢,一種是牛頓法。另一個程式設計題給忘了,想起再補充。  
3. 百度。內推實習的時候,去年畢業的師兄去了百度**組,我們就找他內推的。說實話,挺後悔的,我並不喜歡他這個方向,一方面我不擅長,另一方面過了我也不會去。不該圖省事找他推的。內推實習時,共二面,掛了。面試主要問的是**方面的,也沒什麼意思,答的也不好。問了leetcode 206 Reverse Linked List,讓自己定義連結串列,問指標,物件,指標是物件嗎,對C++的考察很多。到校招實習時,沒投簡歷。到校招開始時,我投的比較晚,所以錯過了內推機會,然後到了校招。校招共三面,都是技術面,當天狀態不太好,感冒了。主要問了二分類的標準有多少種,每種都是什麼。struct與class的區別。執行緒與程式的區別,io密集,計算密集使用多執行緒還是多程式。一個發生器,產生0的概率是p,產生1的概率是1-p,p!=0.5,怎麼使用這個產生0和1等概率的發生器(可以每次產生兩個數字,0 1判為0,1 0判為1,其他的捨棄重來)。k-means聚類相關問題,svm與lr的對比與區別。程式設計題問了多道,最小棧leetcode  155. Min Stack,還有幾道其他題目,忘了已經。
4. 騰訊。實習投的北京微信,校招投的廣州微信,然而都沒找我面試。找實習時,qq空間把我撈了起來邀請我面試,我拒絕了,後來騰訊地圖邀請我去面試,就去了。面試一下午,從1:40到5:20,共四面,前三個為技術面,第四個為leader面,leader也問了一些技術,未來的規劃,來這裡之後會幹什麼,反正就是泛泛的聊,還有就是你印象最深刻的一件事,最感動的,最難忘的一件事,哎,這些問題。先是40分鐘一套卷子,讓做題,5道程式設計題,3道問答題可以選擇做。我當時40分鐘把5道程式設計寫完就沒時間了。有一道是leetcode 300 Longest Increasing Subsequence,其他忘了,不過也不難。面試聊了專案,花了不少時間,也看了那5道程式設計題,怎麼處理POI中的名稱問題,就是說一個地點可能有很多備選的名字,怎麼確定哪個更合適。爬蟲相關技術。還聊了聊手頭的offer情況等。到後面校招內推時,投的廣州微信,但是廣州微信並不怎麼缺人,投的人又多,所以就沒給面試機會。qq音樂把我撈了起來,但我並不想去深圳,就拒絕了。再後來校招的時候,不知道騰訊哪個部門邀請我去面試開發崗。我想了想,我並不想做開發,就拒絕了。現在看起來,騰訊我還是有很多機會的,然而我都拒絕了。哎,現在仔細想一想,雖然房價高,但是深圳其他方面都挺好的,空氣質量好,各種生活還是很不錯的,四個面試機會,只面了一個,其他的都自己拒絕的,感覺還是非常可惜的。
5. 新浪。實習沒有投,校招投的內推,面了四面,兩面技術面,三面總監面,四面hr面。主要問了專案、gbdt與xgboost的區別、貝葉斯學派和統計學派的分歧,程式設計題問了反轉連結串列leetcode206,top k大的數(劍指offer題目,第一版30題)。
6. 搜狗。實習沒有投,校招內推面了兩面掛了,校招面了兩面,發了offer。校招內推時,也是為了省事,找的搜狗**組的大大大師兄推的,跟百度那個類似,我也不感興趣。面試問了專案,程式設計問了最小編輯距離leetcode 72 Edit Distance,劍指offer 31連續子陣列的最大和(找到起始位置和最大和)。校招兩面。主要是專案,二分類的評價標準有哪些、分別是什麼。程式設計有二叉樹的先序中序後續非遞迴遍歷。二面面完說去看看領導在不在,回來說領導不在,就讓回來了,說後面可能有hr面。我心想,這是委婉拒絕的套路吧,過了幾天hr讓我去公司面,問了下學歷,問考研還是保研,有哪些offer,然後發了offer。
7 小米。三面技術面。面試之後,發了意向書,直到前些日子才聯絡我。我說我已經交其他公司三方,校招結束了。程式設計題問了leetcode 228. Summary Ranges, 給一個二叉樹,找到最深的一個節點到最淺的一個節點之間的最小公共父節點,我的方法是層次遍歷,找到最淺的節點及最深的節點,然後使用 leetcode 236 Lowest Common Ancestor of a Binary Tree中的方法去解決問題,時間效率為o(n),空間效率為o(n),面試官給的方法是儲存所有路徑,然後去查詢。問了專案,兩個專案問的非常細,使用random forest計算特徵重要性,對該維特徵不進行permutation,刪除可以不可以。峰度、偏度的數學公式及意義。二分類中AUC的具體定義,各個分類評價方法。最後三面leader面的時候還問了兩個思考問題,金融違約率,可能要房貸很長時間才能知道是否違約,資料少,實驗樣本回收時間長所以對於這個問題怎麼處理。還有就是為何利用訓練集訓練,用來預測測試集可以用來預測。我說的是這是基於一個大的假設,訓練樣本和測試樣本是基於獨立同分布的,後來我想了想我覺得也可以從熵 資訊增益的角度思考。
8. 京東。 京東是實習過了,校招沒邀請我面試。 校招的時候,我找的京東的師兄內推的,後來也參加了校招,筆試的挺好的,就是沒邀請面試,也有一些同學跟我一樣的情況,可能簡歷掛了吧。京東實習面試是三面,兩面技術面,一面hr面。感覺比較坑的是京東的三面分別安排在了三天,為此我給我們老師請了三天假。京東用的較多的是Java,我自己是cpp Python較多。面試相對簡單,問了svm原理推導,兩個排好序的陣列怎麼合併成一個排好序的陣列,雙指標啊。問了一個業務題場景題,給你一些惡資料,讓你對顧客對一個新商品的退單率預測,如果能預測出退單率,則可以延遲或者不發貨,節約物流成本。hr面的時候問了幾個問題,現在厲害的很多都是博士,你怎麼看,有無讀博的打算?介紹一個你的專案。
9. 亞馬遜。 亞馬遜也是實習過了,校招沒邀請我。亞馬遜實習投的早,後來邀請去面試,共兩面技術面。第一面是一個美麗的北郵學姐(我不認識),主要問了簡歷的專案,lstm的原理,lstm為何能長時記憶。二面有兩位面試官同時面,主要是程式設計題,也問了專案。程式設計題相對都是比較容易的,主要是leetcode  1 Two Sum ,leetcode 15 3Sum,leetcode 16 3Sum Closest ,leetcode 18 4Sum。還問了一個業務場景預測題,亞馬遜要銷售很多商品,你如何去預測商品需要用到的貨倉的體積。如果能預測出貨倉體積,這樣子就很容易去租賃倉庫了。
後面的公司都是實習和校招都沒過的。有的是面試未通過,有的是沒有面試,也一併寫下來。
10. 360。實習三面掛,校招內推一面掛。實習面試,是我第一次去面試,面的實習,路上還想,如果360過了,實習就結束了,可惜想法是美好的,現實是殘酷。實習是三面,兩面技術,一面hr。上午10點面,40分鐘一場,等面完二面等下午1點半還是2點開始hr面。兩面技術面的的確挺不好的,那是第一次去面試,也沒看網上的面經,自己的技術也並不太好。技術主要問了,svm的原理,smo演算法,lstm有什麼好處,為何防止梯度爆炸和梯度消失,bp推導,程式設計題問了樹的深度,這個簡單,但是程式碼中竟然把==錯寫成了=,範了這樣的錯誤。還有問了找出二叉樹中和最大的一條路徑,不必經過根節點leetcode  124. Binary Tree Maximum Path Sum。 hr面的時候問了以前的實習經歷,考研還保研,我說考研,問考了多少分,有無物件,將來是打算在哪裡發展。校招的時候,內推去面,一掛面。問了簡歷專案,問了聚類演算法都有那些,演算法的比較,cnn的原理各個層的作用,程式設計題問了二分搜尋。感覺面的挺好的,然而還是掛了。很多同學都說360基本不缺人。的確實習還是校招,周圍過360的很少,包括很多大牛。
11. 阿里。 實習內推一面視訊面,後來的實習校招也是一面掛,校招也是視訊一面掛。實習面的時候,主要問了簡歷專案,問了svm的原理,svm的核函式的作用,lr能不能用核函式,為什麼。校招的時候,問了多元高斯函式的期望是什麼,怎麼推導?熵的定義是什麼?怎麼理解?程式設計題是劍指offer 30題,最小的k個數,也是leetcode 215 Kth Largest Element in an Array,寫程式碼並分析時間複雜度。阿里實習投的是阿里媽媽,校招投的是螞蟻金服。除了技術需要加強之外,視訊面試也表現出了兩個缺點,一個是表達溝通需要大大的加強,一個是要自信,同學在旁邊表示我的表達太快,太緊張了。還有一個非常重要的一點,我校招內推投的太晚了(8.8投的)以至於錯過了校招內推的時間點,沒人找我面試,直接到了校招了。我為什麼投這麼晚呢?可以記住一個時間點,大概6月底,7月初就開始網際網路的內推了。我們是7月開始放實習,7.4才開始去實習公司報到,那個時候想著,簡歷上沒有個像樣的實習,剛去實習的公司,什麼也不會呢,簡歷也不好寫。所以想稍微等一等,結果8.8再投的時候,差不多快結束了,我記得校招的內推是8.18左右。所以時間節點一定要把握好,千萬不要拖。
12. 網易。實習的時候是筆試掛了,校招內推也是筆試掛了,校招的時候申的深度學習工程師,校招時二面掛。第一面是一個美女姐姐,第二面試是兩位面試官一起面。主要問了專案,自己搭建網路的結構,CNN網路的結構,相關知名的cnn網路結構,程式設計就問了一道,一些座標點都是(x,y)形式的讓以x的大小排序,x一樣的按y排序,我說很簡單啊,使用sort函式寫個compare函式就可以了,不知道是要考察什麼,要考察現場寫排序演算法嗎?我當時應該問問的。其實我對深度學習的瞭解還是太少,需要更多的學習,目前更多的是工程使用上的東西,我當時應該申機器學習工程師的,或許面試就通過了。
13. 網易遊戲。 實習的時候簡歷掛了,校招的時候本來申的人工智慧工程師,結果給我轉成了遊戲研發工程師,還不能更改,我去面了,一面掛。首先可以說明一點,網易和網易遊戲是分開招聘的,兩家可以分別投。再有就是網易遊戲有兩塊,一塊是雷火盤古,一塊是互娛。我實習投的是雷火,找了互娛的同學內推了一下,最開始不知道他們內部互不承認,結果相當於沒有內推,簡歷就給我掛了。所以投雷火一定要找雷火的人推,投互娛一定要找互娛的人推,不然等於沒有推。還有就是網易遊戲實習開始的特別早,去年11月還是12月,就開始內推了,現在也是12月大家可以關注下訊息。今年2月份我剛過完年來學校,我同學跟我說他網易遊戲已經筆試過兩批了,我頓時覺得自己落後了很多,有種別人校招都結束了,你才剛來學校的feel,何況我比學校規定的開學時候早來了十多天,當時一頓慌張,趕緊問問師兄師姐到底什麼情況。再有就是校招面試,先是40分鐘讓寫道程式設計題,然後再去見面試官。因為他們給我調成了開發,我自己也確實沒什麼經驗,問的全是語言細節的,演算法工程師從來不怎麼問的,結果可想而知,就掛了。
14.  今日頭條。實習的時候一面掛,校招的時候也是一面掛。實習的時候問了簡歷,當時第一家面的360,掛了。貌似第二家面的頭條,也掛了,掛了很多家,心情還是挺鬱悶的當時。頭條實習一面的時候先讓寫程式設計題,類似於劍指offer第一版的第7章的7.2裡的題目,叫做多叉樹(沒有指向父節點指標)中兩個節點的最低公共祖先。然後問了專案,問了svm的推導,問的非常細,問距離到底如何定義的,不可分的svm中鬆弛變數怎麼理解,如果有個點特別異常,是否還能找到分割面,我自己當時水平也比較菜,他問一個我回答一個,我回答一個,他說一句靠(kao 四聲),我心裡一陣慌張。問了lr的公式推導。的確面的不好。校招的時候,找的內推,當時內推要內推碼,但是內推有內推碼也要筆試,但是內推碼有一種是內推白金碼,只有頭條技術員工有,且每人只有一個,有了內推白金碼,可以直接面試,免筆試,早面試。我就找人要了一個內推白金碼,是頭條的第一批面試,掛了。校招內推掛了,不能參加後續的校招,跟360一樣的。校招一面,主要問了簡歷,問了專案,問了一些倒排索引,詞向量及複雜度相關問題。程式設計是leetcode 57 Insert Interval,這是leetcode的hard題目,根據大家的反應,頭條程式設計題問的普遍相對難一些。程式設計題我沒答上來,掛了也是很正常的事情。
15. 海康威視。實習沒投,校招投了。共三面。先是電話一面,後是去公司面試二面和三面,而面試技術面2v1,三面是hr面。一面就是簡單的聊了聊,問了問。二面是聊聊平時用什麼技術,用什麼網路,業內(我的研究方向)主要用什麼方法,業內(我的研究方向)都在做什麼,對**瞭解多少,有無轉**方向的意願。也沒太多的問題,更多的是發散性的問題。hr面的時候,問了有多少offer了,因為已經很晚了,我就說我現在有7家公司發了sp offer。後來沒給我發offer,我覺得可能主要在於我對**方向瞭解甚少,我本來也不是研究那個方向,但是平時還是有很多與**方向學習的機會,我都不想去學。這給我一個提示,除了技術的深度,一定要提高的自己涉獵的廣度。
16.  微策略。 先是線下筆試,然後三面技術面。微策略是先去聽宣講會,然後再線上面試。筆試面試都是全英的。筆試一小時,題目還是不太難的。面試一面,13*16 = 244,問這事幾進位制,答:(1*x+3)*(x+6) = 2x^2 + 4x + 4 => x=7。證明:n(n^2-1) 對於任何n>=3的奇數都可以整除。答:可以數學歸納法,假定n=2k+1滿足條件,證明(2k+3)也滿足,最後得到[(2k+1)^3-(2k+1)] + 24k^2 + 48k + 24顯然成立。問一個字串的全排列,我以為是leetcode 46. Permutations,實際上是leetcode 47. Permutations II。我按照46的思路寫的程式碼,主要差別是47是有重複的。後來他提示是否有bug,我想到了47,然後改了重複的部分,但是竟然又忘了先sort下。所以這道題答的不好。這道題答的不好,我也反思過,自己不夠靈活,沒考慮那麼多,直接對上題號了,思想僵(jiang)化了,一定要與自己做過的題目對一起做對比,注意差別。二面。給一段程式碼,讓找出bug,裡面涉及了指標和malloc和strcpy這些,我沒找出bug。程式設計題1,一段連結串列,反轉前n個節點。類似於leetcode  92. Reverse Linked List II。程式設計題2,leetcode 25. Reverse Nodes in k-Group。 程式設計題3,single number問題leetcode  136. Single Number,程式設計題4,leetcode  137. Single Number II。三面。程式設計題1, 121. Best Time to Buy and Sell Stock,程式設計題2, leetcode  123. Best Time to Buy and Sell Stock III,程式設計題3,leetcode 122. Best Time to Buy and Sell Stock II,程式設計題4,397 Integer Replacement 。程式設計題 2寫了兩種方法,思考花了些時間。程式設計題4給了幾種解法,但遺憾的是沒有給出最優解。
17. 商湯。實習的時候筆試過了,邀請面試,我當時有三四家都要面試,還要交ppt,聽說比較難,就沒去面。校招的時候筆試掛了。 
18. face++,實習沒投,校招筆試掛。
19. 微軟。實習和校招都是筆試掛了。
20. 蘑菇街&美麗說。 實習投了沒理我。校招內推把我簡歷掛了,校招又投了一次,又掛了一次簡歷。 freewheel,第四正規化,hulu,快手等投了校招,沒訊息,應該是簡歷掛了。看周圍人都投了鏈家網的內推,我就投了鏈家網,結果鏈家的校招是線下筆試,我不知道,就錯過了。

以上就是詳細的面試部分,下面是一些自己參考別人的經驗及自身的經歷,總結的一些經驗教訓吧,希望對自己是一個總結,對學弟學妹們也希望能有所幫助吧。
1. 把握好時間實習、校招的時間表。實習分為內推階段和校招階段。眾所周知,網際網路找工作的時間越來越早。2017年今年的情況是大部分公司在2-5月(實習包含內推和校招兩階段)。先是內推,後面就是校招。也有特別早的,比如網易遊戲,去年12月左右就開始內推了。內推階段剛走完或者沒有走完就開始到了實習的校招階段了。校招也分兩個階段,內推階段和(正式)校招階段。時間在6月底左右-11月。很多公司在6月底7月初就開始了,比如京東、阿里、騰訊等。京東以往貌似都是比較早的,今年也是早早的面試,早早地發了offer。除了內推和校招階段,有的公司貌似還有提前批(京東貌似有)。
我自己的教訓就是,校招投的太晚,以至於錯過了很多面試機會。我為什麼投這麼晚呢?上面也分析過,有希望能把實習經歷寫上去,也有自己想好好複習好好準備的因素。實習的時候我投的就非常早,結果準備的不充分,遇到了很多被拒,也算是找實習遇到的小後遺症吧。投的太晚錯過了騰訊、阿里的校招內推階段,是非常可惜的。阿里的校招內推需要重新內推,騰訊的實習的簡歷會直接轉成校招內推的,不用再推,可以更新下自己投的部門資訊就行了。我自己也沒去更新簡歷。總之吧,自己的簡歷不夠好看,希望能重新整理下簡歷再投,以至於錯過了時間。還有亞馬遜,亞馬遜寫的校招開始時9.10,結果我投的晚,人家9.5就開始第2輪還是第3輪筆試了。挺可惜的錯過了。
2. 把握好內推和實習轉正機會。現在大家都招內推了,然後內推跟正式的也差不多了。無論從實習還是校招的結果來看,內推會吸收很大一批人,所以留給校招的名額並不多,並且所有人都參加校招,所以競爭是非常激烈的。所以大家一定要把握好內推的機會。尤其校招的時候,很多公司的實習生都轉正了,佔用了很多名額,所以校招的內推和校招階段競爭還是非常激烈的,學弟學妹們還是要加油。說是實習轉正,大家要千萬把握好機會。如果想在某個公司留下,我個人建議,優先去該公司實習。實習轉正,尤其是實習的本部門轉正是最容易的。想在哪個部門工作,實習是一個非常簡單又省事的途徑。
內推的時候最好要找熟人內推。可以幫忙檢視簡歷進度。騰訊的內部可以看到簡歷評價S級、A+、A、B、C等。也可以看到面試官的名稱等資訊。阿里的也可以看到面試官的名稱資訊,並依此判斷某些資訊。找熟人推,方便後續的聯絡。還有最好直接推到自己想去的部門。如果自己有明確的部門,可以直接推到相關部門,如果不寫部門,很多都是直接進公司簡歷池。如果寫了,相當於先在部門簡歷池,然後進公司簡歷池,相對而言,相當於多了一次機會。找熟人內推的另一個好處是,如果是投的他的部門,他可以直接把簡歷扔給他老大,邀請你去面試。
3. 寫好簡歷,講好專案。簡歷肯定是特別重要的,簡歷是面試官對你的第一印象,一定要好好寫,如實稍微修飾的寫。自己的會的能講清楚明白的都寫上去,自己含糊其辭的搞不太清楚容易被問懵的就不要寫了。經常更新自己的簡歷。我自己的簡歷面試完就會改一改,修一修,每次都總結一下面試,修繕一下簡歷。簡歷上的專案的細節之類的自己都要清楚地明白,一定不能給面試官問的答不出來,那面試官就很懷疑你的水平和專案是否你做的了。
4. 提高自己的程式設計水平。很多人都推薦劍指offer、leetcode。的確很不錯的,我看現在劍指offer都更新到第二版了。至於程式設計提高到什麼水平,劍指offer可以都看了,都搞明白了。我自己是刷了300道leetcode,刷了兩遍左右的。我看周圍的同學大都在100-200左右的樣子,也都找到的非常不錯的工作。我這裡的經驗是演算法工程師的,很多公司的(比如滴滴、美團、百度、阿里等)演算法工程崗位的面試,一場面試都是分三塊,專案介紹、機器學習相關知識、程式設計題。一場面試一般就一道程式設計題。程式設計寫不出來就基本掛了。當然面試也沒有非要按一定套路的,要看面試官的,面試官喜歡問什麼,我們就答什麼。有的公司非常注重程式設計,比如微軟,面試幾乎全是程式設計題,而且程式設計的要求比較高。頭條的程式設計題問的也很不容易。要是想找一般的網際網路公司,感覺看完劍指offer、刷leetcode 100-200道就差不多了。當然這是我自己的判斷,僅供參考,對此不負責任。還有建議是刷題的時候,要做一下筆記,經常回頭看一看,我刷題的時候,使用***筆記(電子筆記類產品,避免廣告嫌疑)記錄一下題目,標籤,解決思路與方法等。以後方便回顧。我自己就是經常看一看自己做的筆記,比每次都重頭刷,思路清晰多了。建議嘗試一下。 
5. 提高機器學習相關的技術水平。演算法工程師一定會問機器學習相關的知識,這一塊一定要好好的搞清楚明白了。我自己是看了李航老師的統計學習方法+部分prml+一些其他的學習。對這一塊內容的理解應該是決定是否發大offer的關鍵。一般程式設計題都能寫出來,寫不出來就掛了。你對機器學習相關的理解深入程度、好的實習經歷、好的論文、好的競賽都是面試中的亮點。如果你其他方面都不能閃光的話,就把對技術的理解深入作為切入點,好好的專研下去吧。

本貼的目的在於對自己一年工作的總結與思考,同時希望能對學弟學妹們有所幫助歡迎討論,如有不當,望指出。最後祝學弟學妹們都能有好的實習,收割大量的offer!
如需轉載,註明出處。

--------------------------------------------------------------
相關問題及我的想法:

1.可以簡單介紹一下你簡歷上有幾個專案(我看文章裡說是2個),以及專案的大致工作嗎?
我自己寫簡歷的時候也是蠻尷尬的,專案的確非常少。我自己只有一段小公司的實習經歷,而且跟演算法關係不大。除此之外,因為導師嚴格不讓實習,就沒有實習經歷了。相對比較好的是,我們實驗室都是做演算法相關的,所以我把本科畢設寫了進去。研究生期間導師也沒有專案,所以我把我的研究方向(就是我自己研究方向做的實驗,也是研究生畢設)寫了進去。之前還有參加了一個小型的競賽,所以這樣子就湊夠了四個專案。一般簡歷上大家寫3-4個就夠了,寫太多也沒太多意義。其中我的那個小公司實習面試的時候幾乎沒人問,所以在面實習的時候主要是問研究生相關的那個專案,那個小競賽,還有本科畢設。後來校招的時候就把那個小公司實習給換成了滴滴的實習,把小公司實習給刪了。找工作的時候大家都會問你的實習經歷。
當時的本科畢設做的的確比較水,又加上本科時水平菜,做的的確就那樣。研究生的畢設做的還是挺認真的,還是有進步的空間。如果重新走的話,我這些都會更認真的做,找實習找工作還是非常有有用的。研一暑假是去實習的好機會,那時我們是按校歷放假的,又有時間,我沒有抓住。

2.專案在面試過程中的重要性是1/3左右嗎?如果給專案、機器學習知識以及程式設計排序,應該是怎麼樣的?有沒有專案經歷不足,但用基礎知識去平衡的情況?
很多同學都會問專案相關問題。面試中的確會問專案,一般一個小時一場面試,常規的是20分鐘聊專案,20分鐘聊機器學習相關知識,最後20分鐘程式設計並白紙演算法。時間20分鐘只是估計,只能說是大概。一般一面都是技術,二面可能技術也可能會隨便聊。
如上文所述,我也沒有特別好看的專案。都是本科畢設,研究生畢設,小競賽這樣子的。大家也可以發揮聰明的腦子想想怎麼寫簡歷。至於重要性,都是非常重要的。有的面試官喜歡全程聊專案,聊著專案穿插著機器學習相關知識的提問。之前找實習的時候,很多人阿里的一面就是拿著簡歷聊專案及相關知識。
這也涉及一個很大的問題,就是面試到底要面什麼?分解起來就是要面什麼內容,想考察什麼能力呢?或者說一個演算法工程師對這些的要求是什麼呢?
很直白的,很基本的就是程式設計,演算法的理解,工程實踐能力,還會考察數學知識,腦筋急轉彎等,甚至更加深入的會考察你的知識的廣度,深度,還有隨機應變的能力。
對於程式設計,我認為最低要求是別讓程式設計拖你的後腿,一般來說,每場面試都會有一個程式設計題,一般套路是先講思路,再寫程式碼。程式碼最好bug-free。即使沒有bug-free,經過提醒想明白也是可以的。大部分都會讓分析下你的演算法時間複雜度,空間複雜度,並能說明為什麼是這個時間複雜度。很多都會追求最優解,所以這也給刷題一個提示,刷題不是ac就可以了,而是要追求最優解。程式設計這塊可以自己把握,千萬不要只追求程式設計,不管其他的。這多個方面要平衡下時間和精力。我之前有一段時間整天刷題,有段時間整天看演算法,感覺都不是很好。最好能平衡下來,不讓任何一方面去拉後腿。很多公司來說,程式設計會考察,但是通過的大家都給出最優解,差別也沒那麼大,所以多多掌握機器學習相關的演算法吧,目前我是這麼看的。
關於工程實踐,也就專案。做的專案,都是工程實現的一部分,如果什麼專案都沒做過,我們是面試官,我們也會對這樣的面試者不放心的。像很好的實習經歷,很多實驗室或導師不放實習的情況下,實習經歷很多同學都沒有。如果有實習機會,一定要把握住。比如研一下的暑假,那個假期如果放假時間比較長的話,可以找個短期的實習,體驗一下。有些如ACM大神,可能很多人是到不了這個層次的。對於多數同學來說,的確沒有太好的實習經歷。解決辦法是如果條件允許,就去找一段實習。如果條件不允許,可以在學校好好的學好相關的機器學習理論,做好自己的課題。有些同學參加一些競賽,也是可以的。至於排名,肯定是越靠前越好。我自己做的那個小競賽也沒拿到太好的名次。根據我的面試來看,面試官或者hr可能會問面試排名,也可能不問。但是排名並不是重點,重點是你能講清楚你的專案中,你做了什麼工作,思考出了哪些思路,都用了哪些方法,具體的工作及收穫是什麼。他們看到你的專案,重點還是想通過你的專案,看清楚你的能力和實力。至於這些競賽能不能寫到簡歷上,當然完全是可以的。
機器學習演算法相關的理解。很多人說,演算法工程師日常工作是調參,調模型。調參和呼叫模型還是要理解其中的原理,才能向正確的方向走。對演算法的考察,重點會考察你基本功的理解,比如svm lr的基本原理,各種分類的評價準則,l1 l2的區別等。再擴充的就是對演算法廣度的理解,最基本的就是對常用的一些演算法有深入的理解就夠了。
其他相關的,演算法工程師要掌握的很多,數學相關的知識用到的很多,比如矩陣,概率論相關的。比如滴滴之前問的求A和B的乘得到的矩陣C的秩,面試官聊完告訴我,這道題的重點就是考察一下數學相關的知識,因為演算法工程師日常會用到很多數學知識。再比如,美團內推面試一面的時候,還問了一個概率題,我忘了寫了,是這樣的。一個村子特別熱愛男孩,最初村子裡男女平衡,但是夫妻生孩子時,如果生到女兒就會一直生,直到生到男孩為止,問,多年後,男女比例是多少?還問了兩個人輪流投硬幣,直到有人投到正面為贏。問先手和後手贏的概率多少。兩個題很類似。
到最後,無論是聊專案,還是機器學習相關演算法,都是要考察你的整個的思維能力,基本功的能力。如果沒有很好的專案,就從實習、競賽、自己的實驗室專案、自己的研究課題等方面找找靈感。重點還是自己對這些知識的掌握程度還有程式設計的能力。

3.如果沒有好看的專案,簡歷上如何形成專案呢?或者是在目前這個緊急的階段,可以臨時做一些什麼事情補救?
類似問題:你做的專案是實驗室的專案嗎?實驗室本身不是研究機器學習方向的,沒有專案怎麼辦呢?
這個問題,跟前面的有些類似。就從實習、競賽、自己的實驗室專案、研究課題等方面找靈感。我一同學,他也是通訊相關方向,轉nlp。就先找了一個小一點的公司實習,然後校招去了tmd中的一家。
專案不是越多越好,我之前見有人簡歷上寫了7個專案,寫滿了。然而這也沒太多意義。簡歷上除了專案,可以寫一下個人技能之類的,突出下自己的優點。我自己也是專案不夠多,湊的。
或許其他學長學姐有獨特的專案技巧,我不太知道。

4.我最近參加了一個XX的比賽,但最後的名次可能不太好(猜測前10%吧,比賽沒結束,最近瘋狂被超,但感覺自己已經沒有思路了),這種經歷可以往簡歷上寫嗎?
當然可以了。
如前文所述,專案競賽之類的寫上簡歷,如果有好看的名次,肯定是好的,沒有也沒關係。前10%已經很不錯了。我以為,面試官更看重的還是通過這個競賽,體現了你對哪些知識的運用,自己提供這個競賽的解決方案和思路是什麼。重點還是考察你的能力和水準在哪裡。如果一個競賽,你拿到了特別靠前的名次,但面試的時候,什麼也講不出來,都是靠隨便調參得來的,沒有東西可以講,還是非常尷尬的。

5. 刷題上,筆記也做了分析也做了,但沒幾天前面的就感覺一點兒也想不起來了
類似:很擔心程式設計題啊。雖然在刷題,但是感覺現場還是不一定能bug-free啊,刷題好難啊
程式設計很多考察的還在easy,偏medium的水準。當然也看公司看部門,有些公司就是看中程式設計,比如微軟,那你想去就好好搞好程式設計就好了。對於很多公司來說,程式設計知識考察的一部分,一般都是medium水準。也有部分公司或部門考察hard的。
刷題的時候,多做筆記,經常回顧,多找同學討論。一道題,多多的思考,多多的去討論。思路這個東西,有時候同學的理解和見識能很大的幫助你的成長。的確會忘記,但是你可以把一類題目總結下方法,或者看別人總結的方法。這個要多練習,多總結,多交流。我也確實沒特別好的方法。但是我覺得經常回顧與思考,經常練習,肯定會對程式設計有所提升的。
我自己看了cpp primer的一半和演算法導論的一半左右,基本都看了算是兩邊多一點吧。劍指offer倒是看了四五遍。leetcode我做的題也基本在兩遍以上吧。
面試的時候,除了程式設計,有時候也會考察cpp的基本知識(如果你用cpp的話),比如虛擬函式的概念,struct與class的區別,指標,static等。

6. 從你的經歷來看,無論是基礎的機器學習知識還是程式設計題(從我刷leetcode和劍指offer來看,感覺都是medium和hard的題目)的掌握來看,感覺師兄很歷害,也拿到了很多sp的offer。但是在阿里的面試僅僅是因為投的較晚的原因導致的嗎?是否還有其他的因素和注意的點。因為想去杭州,所以對阿里格外的關注。
不僅僅是因為投的晚。我想說的是投的晚是非常重要的一個影響因素。我投的時候,我周圍的同學都已經面過二面或者三面了,也就是說基本都已經結束了。所以錯過內推階段,加上內推消耗很多名額,轉正也消耗了很多名額,最後留給激烈的校招的名額不多。最根本的還是自己的簡歷和自己的能力不夠優秀或者說不足。如果能力非常強,什麼時候都有機會嘛。但是對於很多人,包括我認識一些非常牛的的大神來說,還是要把握好機會,能事半功倍。我這裡的建議是把握時間和機會,提前好好準備,不要猶豫。我校招投的螞蟻金服,螞蟻金服相對阿里其他部門來說是非常難進的部門,今年螞蟻金服的實習貌似容易一些,我沒投螞蟻實習,校招也不容易吧。
想去杭州的話,將來實習可以直接申請阿里杭州的實習,轉正直接轉本部門就好了。這樣的一個壞處就是將來校招的時候,你可能在杭州實習,如果來北京面試其他公司,可能會不會太方便。但是你有了那邊的offer,麻煩點也就那麼回事。雖然有的公司內部也可以轉到杭州,我覺得還是直接轉會好一點。
阿里的面試,根據其他同學的反饋,除了簡歷、專案、程式設計外,也會問一些數學或腦筋急轉彎的問題。關於數學概率論的簡單的一道題,兩個隨機變數X Y都符合均勻分佈,那X+Y符合什麼分佈呢?看你想去哪個部門,多跟那裡的學長學姐交流,可以針對性的準備下。

7. 關於專案的問題。從你分享的內容來看,感覺專案佔的不是很多,這一塊是否佔的比例比較小。因為我在實驗室沒做什麼專案,只是學了一些相關的大資料處理工具,所以專案這一塊很缺,最近打了一些比賽,這個用來充實專案是否夠。
關於專案,基本每場面試都會問吧。有的我可能沒寫要問專案。70%的面試都會先問問專案,很多都會一個或者兩個。也有的會簡單的問,有的深入的問。看面試官的風格。
競賽可以充實專案。只要你的競賽跟你要找的崗位匹配的上。

8. 你覺得公司對 資料探勘比賽 看重的程度怎樣?
除非很好很知名的比賽你拿到特別好的名詞,一般來說,更注重要考察的是你的知識的理解,全域性把控,提出的解決方案等相關的能力。
因為我自己的競賽比較小,所以都是談論技術相關的。其他大神的nb競賽我也不知道怎麼樣的。

相關文章