大佬演算法校招經驗總結(拼多多、小米、華為、百度等)

視學演算法發表於2020-04-06

點上方藍字視學演算法獲取更多幹貨

在右上方 ··· 設為星標 ,與你不見不散

轉載於 :工大菜雞,已獲授權
https://www.nowcoder.com/discuss/295287

我從今年7月15號投遞出我的第一份簡歷,到9月28號結束秋招,兩個多月的時間投遞了差不多70家網際網路/資訊科技公司,面試了30多家,可以說一路都是在筆試和麵試中成長的,老實說,有些面試官問的問題我至今還沒搞懂……慚愧慚愧。PS:我學的大都是經典機器學習演算法以及NLP領域的深度學習演算法,投的崗位也都是與之相關的。


我會挑選一些我認為印象深刻的面試經歷以及筆試經歷,記錄下來,給轉行或初學者做前車之鑑,大佬們看了也不要笑話我,懇請多多指正。


筆試或者面試過的公司大致如下:


  1. 牛客sp:順豐,ihandy,依圖,快手,滴滴,拼多多,等等

  2. 秋招牛客內推或直接網申:小米,騰訊,阿里,度小滿,商湯,美團,華為,招行信用卡,拼多多,等等

  3. 校招直接投簡歷:百度,位元大陸,oppo,遠景,中信銀行,中信信用卡,格力,58,平安健康險,沒錯又是拼多多,我連續投了三次,等等


剛開始真的是初生牛犢不怕虎,我把很多瞭解很淺的東西寫到了簡歷上去,導致我回答的也非常淺,常常被懟的生活不能自理,在此忠告各位,簡歷上的東西,一定要了解清楚再寫上去,要多清楚呢?

  • 1. 經典機器學習演算法,至少要能親手推到出來,如LR,SVM,樸素貝葉斯,xgboost,cbow等等,我提到的這幾個演算法可各個不簡單,尤其是LR和SVM,真別看它們簡單,也真的不要輕易說自己很懂,不然有可能會被問得很慘!

  • 2. 推薦大家在大致瞭解某一個演算法後,還是儘量去看看該演算法的paper原文,這樣能瞭解演算法的細節,以免面試官問一些刁鑽問題

  • 3. 深度學習部分,比如語言模型,簡單的,比如word2vec,fasttext,LSTM等要清楚的知道模型的細節,比如輸入輸出是什麼,思想是什麼,公式的推導等等;複雜些的模型,如BERT,ELMo,GPT等,需要知道網路的原理,網路提出的目的,每一層的作用是什麼,長什麼樣子的,這樣有什麼好處等等,也是推薦儘量去看看原paper

  • 4. 如果簡歷裡面有比賽或者專案用到上述演算法的,那就一定要弄到非常清楚

  • 5. 然後就是程式設計,先建議把劍指offer刷完,刷兩遍以上最好,寫的時候如果半小時想不出思路,就直接看答案,等劍指offer刷完了,再去刷leetcode或者lintcode啥的,這樣做的原因是首先劍指offer比較簡單,然後呢國內面試官很可能出劍指offer上的原題(當然leetcode原題也會出現)

  • 6. 然後就是基礎資料結構知識,推薦看網易雲課堂的《資料結構》這門課,由浙大老師免費傾情奉獻,講的簡單易懂,灰常贊,不過一定要用自己用的語言去寫一遍這些資料結構,有些面試官會鑽牛角尖問你


我挑幾個說說吧,寫到面經(涼經)的公司為:順豐,滴滴,快手,依圖,騰訊,遠景,百度,搜狗,oppo,58同城,華為


1. 順豐sp和ihandy牛客專場:


開篇就是吐槽,我為什麼寫這個?不是因為順豐面試有多難,而是順豐答應給我的二面,到現在都沒給。。。從8月1號順豐給了我人生中第一次公司面試到9月28號我結束秋招,在這期間順豐不斷推遲二面時間,現在又給我推到了10月中旬,不得不說,順豐的hr還真是佛系呢。ihandy這貨更狠,給我答應的一面到現在都沒兌現,每次打電話過去問hr,都是同一個回答:馬上幫您安排,然後我就繼續傻傻的等一兩個星期,迴圈往復。

順豐一面:


1.自我介紹,為什麼轉行,你原來實驗室乾的什麼?:因為喜歡算(qian)法(duo),原來實驗室乾的導航制導與控制;
2.介紹比賽,做了哪些資料的清洗,資料增強的處理?作了哪些特徵?怎樣提取特徵的,為什麼會想到這個特徵呢?:balabala如實說,還說目前進入了複賽,正在複賽準備階段XXXXX啥的;
3.我看你比賽用到了xgboost和lightGBM,那說下XGboost原理吧:額……不會;
4.那說下LightGBM吧:咳咳,也不會;
4.額那說下GBDT總行了吧:額……還是不會;
5.那你會啥?我:LR。(面試官快哭了T.T);
6.那好吧那你說說LR吧:balabala;
7.你聽過CATboost嗎?我:沒。(面試官再一次哭了);
8.說說LSTM的原理:balabala還口述了輸入門,更新門,輸出門的公式;
9.你有什麼想了解順豐的嗎?我:X$Y*&^%(&%@1!2¥……;
我知道我答的很菜,但我還是厚著臉皮問了面試官我的表現咋樣,能否就我的面試情況和簡歷提點建議?後面每一次我視訊面試我都會向面試官問這個問題,他們也都會熱心的給我提出建議,幫我修改簡歷,收穫很多。
結果:沒想到一面給我過了,但是二面遲遲不到。


2. 滴滴牛客sp專場(二面掛):


慚愧,當時在面試的時候還以為滴滴是小公司,問面試官問題的時候,我居然問了滴滴的業務存活情況……

滴滴一面:

1.自我介紹,轉行之類的問題;
2.瞭解那種演算法挑一種介紹下:我說了LR,剛說到交叉熵這兒,面試官打斷:那你說說LR為什麼用交叉熵作為loss函式。我:因為lr從概率密度函式推匯出來的對數極大似然函式就是交叉熵函式。面試官說:不全對,其實mse是萬能的loss函式,每個模型都可以用mse作為loss函式的,那為什麼lr不用mse呢?我:不幾道。面試完了才想明白,mse的導數裡面有sigmoid函式的導數,而交叉熵導數裡面沒有sigmoid函式的導數,sigmoid的導數的最大值為0.25,更新資料時太慢了;
3.說說XGB:在上次順豐面完後,我仔細學習了一遍xgb,這一次大致回答上了面試官的問題,我說了GBDT,再從XGB是如何改進GBDT的角度引入了XGB的一些概念,比如預排序什麼的,引入正則項和二階泰勒展開什麼的;
4.介紹比賽,介紹如何分工的,如何構建特徵的,如何選擇這些特徵的;
5.說下常見的處理過擬合手段有哪些?我說了l1,l2,神經網路裡的dropout,增加資料量等等,面試官問還有嗎?我:不知道了。其實後來才知道bagging和boosting也是降低過擬合的手段,以前還以為僅僅是種特殊的模型。
同樣向面試官問了我的表現情況以及如何改進,面試官也熱心的提出了建議。

滴滴二面:

1.自我介紹,大致介紹專案。
2.聊比賽,聊人生。。。。。大概聊了30多分鐘。
3.問你會不會什麼作業系統,資料庫啥的,c++會不會。答:都不會
二面很自然的就掛了,從滴滴的面試可以看出,其實國內的很多公司都挺看中開發能力的,只會python和跑跑模型應該達不到絕大多數公司的要求。


3.快手牛客sp專場(二面掛)


快手一面:

1.基礎問題都是老生常談,問題和回答略了
2.演算法題:求最長迴文子串,leetcode原題,動態規劃求解最好,但我當時不會,用的是中心展開法,勉強做了出來。

快手二面

1.上來一道leetcode上的hard演算法題:求最小編輯距離。不會,直接gg
2.其他閒聊,聊人生
大概等了10多天,官網上給我掛了


4.依圖(一面掛)


依圖

是我最慘的一次面試,面試官笑眯眯的,也沒讓我自我介紹,上來四到演算法題,一道一道來的那種,題目都忘了,只記得每道都把我摁在地上摩擦,差不多情況就是這樣:
面試官:出道演算法題吧,第一道:XXXX。
我思索10分鐘:不會;
面試官:那我們做第二道吧:XXXX。
我又思索10分鐘:不會……;
面試官:那再來一道:XXXX。
我尋思我都這麼慘了放過我讓我走吧求你了,於是思索了兩分鐘說:還是不會……;
面試官:那再來一道:XXXX。
我:gun!
後來視訊面試結束的時候,我專門去查了這幾道題目,他們都有一個統一的解法,那就是動態規劃,抱歉我之前真沒聽過動態規劃啊啊啊啊啊,我從此下定決心,進行dp的專項練習。


5.騰訊(一面掛,好後悔沒有抓住唯一一次進鵝廠的機會)


騰訊

其實面試官問的問題都很簡單,但是當時比賽剛做完,非常疲憊,不想學習,沒有學習新的東西,也沒複習舊的東西,就這樣躺屍了兩天,然後騰訊的技術面試官晚上打來電話面試:
1.自我介紹,介紹比賽
2.看你用到了樸素貝葉斯,說下原理吧。我心想這還不簡單,剛要張嘴,才發現壞了,啥叫樸素貝葉斯來著?我給忘了!我就支支吾吾的說:用了貝葉斯公式,然後加上了觀測獨立假設,面試官無語……
3.說下xgb,lgb和gbdt吧。這個我會,由於前面問了很多了,不用複習也能張口就來。
4.我看你的另一個比賽用了bert和CRF,說說CRF的原理吧。我:……不會(後悔沒看)
5.那說下bert的原理吧。我:……還是不會(好後悔啊,太懶了,還是沒看)
後面balabala的問了一堆,我都回答上了,但是前面這幾個沒回答上的太傷了,一面掛


6.遠景(四面掛,boss面掛的,真是掛的莫名其妙……)


一面,二面,三面(都超級水):

都是隨便介紹專案,問一些基礎的問題,沒啥難的,印象深刻的是二面面試官問到最後突然讓我用英文介紹下比賽裡面是如何選擇特徵的,我用我的工地散裝英語一頓亂說,結束時面試官說嗯很不錯,我內心:靠,你壓根就沒聽吧!

四面(boss面):

四面是boss面,現場面的,聊人生,跟我聊了一個半小時,全程也穿插問些問題,我都回答上了,跟boss聊得非常好,然後就給我莫名其妙的掛了……,我想原因應該是boss臨走前給我說了一句:你需要多注重工程能力。他可能嫌我工程專案很少吧。


7.百度(一面掛)


1.百度筆試:

百度的筆試就令人印象深刻:
選擇題啥都考,很雜,作業系統,資料庫,c++,python,機器學習,深度學習啥都考
兩道問答題,其中有一問印象深刻:說說針對中文,BERT有什麼可以改進的地方。我心想:你丫不就是想吹自己的ERNIE嘛,我就寫了ERNIE針對BERT做出的改進,基於知識的mask訓練方式,基於知識圖譜的改進等等
一道設計題,讓你設計一個系統:可以寫出春聯,必須滿足他的要求,平仄音節都要對上,我直接BERT+CRF+GPT一頓亂寫。
程式設計題:RGB括號,我猜應該是道dp題吧,連結:https://www.nowcoder.com/discuss/254095
想看的童鞋可以看一看,無視我的答案就好,我到現在都不知道我的答案對不對。

2.百度一面:被瘋狂摩擦,問的非常細:

1.紅黑樹的幾個特點。只答上兩個,其實我根本不會
2.python的裝飾器@的用法。不會
3.程式設計,寫一個函式,實現python的繼承,資料的交換,類中的全域性變數等等。寫上了一半。
4.快排(不能用簡單粗暴的那種,要空間複雜度最低的)和堆排序(必須用最小堆實現)。不是讓你寫程式碼,而是給你一個陣列,直接讓你用快排和堆排的思想直接一個元素一個元素的演示給他看,這個我答上了,幸好之前自己實現過弄懂了。
5.演算法題dp兩道:最長公共子串,最長公共子列,都是dp題,幸好專門看了九章演算法,專項學習了dp,簡單或者中等的dp題還是可以一戰的,這兩道也是lintcode上的原題,有興趣的童鞋可以查查。
6.介紹xgb,我說到“xgb的預排序是相對於暴力求解的加速”這兒,面試官打斷了我,反問我:那具體是為什麼加速了呢?一個特徵下的資料,沒有預排序和預排序了,不都得遍歷一遍才能求解出最優分裂點嗎?
這個問題給我幹蒙了,其實這個問題我之前思考過,但是太懶了,心裡不斷麻醉自己面試官不會問得這麼細,就直接忽略了,沒再去想。百度面試完以後我看了原論文的虛擬碼才明白為什麼。所以再次建議儘量能讀一讀原paper。
7.介紹下xgb是如何調參的,哪一個先調,哪一個後調,為什麼?哪幾個單獨調,哪幾個放在一組調,為什麼?哪些是處理過擬合的,哪些是增加模型複雜程度的,為什麼?我尋思你十萬個為什麼呢?總之就是被為什麼問的頭昏腦漲,出了門我就知道肯定掛了。


8.搜狗(面試流程結束)


1.搜狗一面(一個半小時摩擦系列):

1.lr為什麼用sigmoid函式作為概率函式。我:lr是基於伯努利分佈為假設的,伯努利分佈的指數形式就是sigmoid函式,而且sigmoid函式可以將資料壓縮到0-1內,以便表示概率。
2.介紹下word2vec,說說word2vec和fasttext的區別。我:balabalabala,說的貌似還行,面試官點頭
3.印象深刻的推導:
推導下word2vec裡面的一個模型CBOW吧。後悔沒看,哭了,我說不會。
那推導下SVM吧。這個我會,推出來了,但是到對偶條件這裡,面試官問為什麼能用對偶條件,我沒答上來,還是太菜。
那再推下lr吧。這次順利的推了出來,面試官問的問題也回答了上來。順利通過了。
4.演算法題:求最長迴文子串,沒錯,和前面快手一面問的筆試題一樣,答上了。
5.概率題,嚴格來說,這道題不是我遇見的,是我同學面搜狗的時候被問到的,我覺得很有意思,而且我們都不知道答案,請大佬解答:


一共54張撲克牌,我抽了幾張牌(大於2張),有兩種場景:
1.我說我有小王;
2.我說我有大王;
這兩種情況,哪種有雙王的概率更高?

這題我是一臉懵逼的,求各位大佬解答!

2.搜狗二面:

1.xgb的loss函式的推導(mse以及非mse形式),以及求解推導。
推出來了;
2.求最大連續子列和,要求時間空間複雜度最小。
很簡單;
3.xgb是如何實現並行的。
儲存預排序的block,用程式間的通訊並行尋找最優分裂點。
4.lgb的直方圖優化演算法說說。
隨便說了說,面試官也沒深問。
5.講比賽,講專案。
balabalabal總之二面持續了差不多一小時

3.搜狗hr面:

沒啥好講的,聊人生,聊轉行,hr說需要綜合各地的資訊來篩選,讓我回去等訊息。


9.OPPO(offer)


我整個秋招所經歷的所有面試官裡面,一共面了三個非常有水平的面試官(我個人覺得):一個是遠景的那個boss,微軟亞研院呆了四年,百度呆了六年,google呆了六年。和我聊現在的行業形勢以及各種模型的應用,很多問題都會直擊要害,一語中的。和我的聊天中看出了我工程能力不足,跟我聊了一個半小時,為我未來提出了一些建議和規劃,我很感謝那位大叔;第二個是百度的一面面試官,他好像就是住在我肚子裡的蛔蟲一樣,總能在我的回答中揪出我不會的致命知識點,給我痛擊,真的是怕啥他考啥,他的基礎非常紮實,而且反應和判斷非常迅速;第三個就是這個oppo的一面面試官,根本不問固定知識點,就問一些模型、手段、措施背後的本質並且舉例說明,在你運用的實際場景中有沒有見過。

1.OPPO一面:

剛開始都沒讓我自我介紹,直接讓我說比賽。我:balabala,我介紹到CRF的時候,面試官打斷我說:“你說CRF說了一大堆,那他它本質是個啥東西,我不要聽那些定義,你給我說本質”。我:……支支吾吾……,說它應該是個函式,balabalaba一頓編。
然後他也沒說對錯,繼續問:說下attention吧,我:又是一頓balabala,講到注意力那兒的時候他問:你能舉個case嗎,用了attention和沒用attention時候的對應的隱狀態在哪些地方有區別你有去觀察過嗎?我:又是一頓瞎bala,他又沒說對還是錯。
又問我看你這裡用到bilstm它和lstm的區別在哪?舉例說明,用了和沒用的效果。我心想:哎呦終於有個會的了,結果回答完他還是那副樣子,又是啥也沒說,我心想對還是錯你倒是給個準信啊。
又問到了ELMo,讓我說明ELMo是如何做到動態詞向量的。我:把每個詞輸入模型,得到的隱狀態相加就能得到不同的詞向量;
面試官:那說下ELMo的缺點。我說:第一就是多層bilstm天生的缺點:“自己看到自己”的現象,然後舉了個例子,balabala……。第二就是無法並行訓練,以上兩個毛病都可以用bert去改進它;
他又問其實我們可以用加入位置嵌入的方式來改進這個無法並行的問題那為什麼非得用bert呢?我一想確實facebook貌似在之前就提出了位置嵌入+textcnn的方式來並行訓練。完了,給自己挖坑了。於是乎我就扯了一堆bert裡面self-attention的優點,哈哈哈我真是機智。
然後他依舊啥也沒說,又讓我介紹bert,並且問了multi-head的好處,又問我它的實際物理意義是什麼?為什麼能這麼想?舉個case說明下。我用盡了我畢生瞎編的本事,憑藉著我自己的一點理解硬是說了10分鐘,然後結束了是對是錯他還是啥也沒說……………………
又讓我寫LSTM的公式,勉強寫上了
又問了我一個實際場景問題:用一個模型去分類一堆資料,在training階段就無法收斂,反覆震盪,有可能是什麼原因,你有沒有在實際場景中遇見過?
我:可能資料是標註錯誤的或者是隨機資料,面試官補刀:假設資料沒問題,那是什麼原因?
我:那就是模型無法擬合這個資料或者不適合做這類資料的分類,面試官再補刀:假設模型也沒問題,足夠複雜。
我:那有可能是優化過程陷入了區域性最優,而且一直無法跳出,面試官再次補刀:假如優化過程沒問題。
我:那就是正負樣本極其不均,網路沒法學習到東西?面試官:我沒說一定是神經網路模型,而且那再假如樣本正負分佈是均勻的……
我:……那我真沒遇見過這樣的……
面試官當時貌似不太滿意,跟我聊完居然把我的簡歷給對摺了起來!我第一次見這種場面……,心想:哎呦我去涼了,可能一出門面試官就會把我的簡歷扔垃圾桶裡了吧……。面試官讓我回去等,晚上如果收到訊息就是過了,沒收到就是掛了。晚上感覺想哭,畢竟OPPO是我蠻喜歡的一個公司,結果快睡著了突然來了一個簡訊提醒,說我OPPO面試過了……,得,這下倒好,睡不著了……

2.OPPO二面(主管面):

1.聊專案比賽,一路下來沒問啥知識點,沒啥大問題
2.畫出ESIM這個模型的結構,並作介紹
3.面試官看我航天二院的專案跟導彈攔截有關係,是用GRNN預報彈道的,就讓我介紹下GRNN的網路結構以及原理,還問預報精度怎麼樣。我說這個題目現在是我的畢設,還沒做完呢……
面試官:哦……那你給我說說你要攔截的這個HTV-2是個啥?
我說:是一種美國的臨近空間高超聲速飛行器,可用於導彈上,對我國國防安全造成威脅,balabalabala……
面試官好像突然來了興趣,一直問我導彈的事,跟個好奇寶寶一樣:這個HTV-2很厲害嗎?
我:點頭,嗯嗯嗯
面試官:這個HTV-2有啥特點?你們用經典的方法一般是咋攔截的?balabala……
我:額……這些都是保密的……
面試官:哦,那沒事了。
4.聊到後面問我有沒有了解過一些其他的搜尋排序演算法,比如list-wise的,pair-wise的,然後給你一堆非常大的大資料,如何實現全資料的搜尋排序,我憑藉我的理解大致回答了一些,面試官說還不錯,讓我等下一面

3.hr面:

我拿起我的oppo find x給hr一頓瞎BB,意向書成功到手,雖然是白菜價,但是OPPO是我很想去的一家公司,尤其是近幾年開始搞些奇奇怪怪的手機出來以後越想去了- . -。
我原以為一面二面回答的不太好的情況下OPPO也願意要我,而且hr說今年OPPO機器學習投遞的簡歷,光篩選後的985計算機科班碩士的就多的嚇人,所以我感覺OPPO今年應該在機器學習這個崗位上招人需求有很多。沒想到簽約會時候問hr才得知整個哈爾濱加吉林地區,機器學習的offer只有兩個……,瞬間脊背發涼……


10.58同城(口頭意向,拒了)


其實能面試58我是非常意外的,因為58的筆試程式設計題我一道都沒做出來,選擇題差不多一半都是瞎猜的,甚至面試的時候,面試官還把我做錯的選擇題拿出來又問了我一遍,並且我還是答錯了……囧,而且三個面試官都問了我:為什麼程式設計題一道都沒做?………好尷尬,太奇怪了!58怎麼會給我面試呢?不過面試時我表現的還不錯,最後也拿到了口頭意向,但已經簽了OPPO就給拒了。

1.58一面:

1.還是各種介紹,自我介紹,比賽,專案,為什麼轉行啥的。
2.我看你用了ESIM這個模型,把模型結構畫一下,並且告訴我為什麼有用。很簡單。
3.演算法題:一個陣列中和為k的所有二元組,要求時間複雜度為O(n)。這個也很簡單。
4.介紹下BERT以及CRF。老生常談了,他也沒深問。
5.演算法題:最小編輯距離,沒錯又一次被問到了,dp常規思路,只不過需要多考慮邊界條件。完美解決。
6.演算法題:一塊錢一瓶水,三個瓶蓋能換一瓶水,問20塊最多能買多少瓶水?(用程式設計方法解決。)面試官午飯沒吃,餓的等不及了,我剛想了一分鐘還沒寫出來,面試官說一面就到這兒吧,我以為他要把我掛了,趕快急急地說了思路,面試官說沒事你一面過了,走去吃飯吧,噗.......
2.58二面:
二面大多數時候都是我在問面試官,一時間搞不清楚誰才是真面試官……問了些58的業務,以及業務中需要的模型,演算法等等的。聊得很開心,當然也有些坑,面試官會穿插著問些技術問題,比在談到58的軟體內搜尋業務的時候,面試官問如何在少量資料的情況下對使用者的輸入進行快速的意圖識別。我說了幾條:可以用資訊熵來確定使用者輸入主體,用聚類來做些簡單的意圖識別等等。
3.58hr面:
一個很漂亮的大姐,很親和,又是聊人生,結束後告訴我回去等通知。


11.華為(offer,拒了)


我申請的是華為消費者bg軟體部的人工智慧工程師,自然語言處理/語音處理方向。我聽說今年很難進華為,想進消費者更是難上加難,但是我仍然沒感覺到有多難進……可能華為比較看重課業成績和學歷吧,因為我感覺我只有這個優勢……

1.華為一面:

上來兩到演算法題,不過都是很簡單的leetcode原題,題目我給忘了,但是都答上了。但是我感覺面試難度看臉,有同學就被甩了兩道dp題沒答上來一面就掛了。
問的問題都很基礎,知識點都是前面的那些,沒有什麼印象深刻的問題。

2.華為二面

演算法題:求一個陣列中和為k的最長連續陣列,暴力法解決的,面試官說沒有複雜度要求。
問了槽位的概念,這個我之前真沒聽過,哎,還是太菜了。
問了些其他的基礎問題

3.華為三面

聊人生,聊規劃,圓滿結束,offer到手,簽約會的時候,hr說給我安排到北京了,我不太想去北京,而且薪資也不高(我聽到的消費者的同學都一個均價,什麼硬體研究院、智慧車、無線的均價都比消費者高),而且最重要的是,他把我安排到了消費者軟體部下的智慧城市這個三級部門,大概率是語音方向的,我不是特別喜歡,就給拒了。
對此大家有何收穫?歡迎留言分享探討

640?wx_fmt=png

宣告:本內容來源工大菜雞

圖片來源網路,不代表本公眾號立場。如有侵權,聯絡刪除


- END -
如果看到這裡,說明你喜歡這篇文章,請轉發、點贊。微信搜尋「perfect_iscas」,關注後回覆「進群」或者掃描下方二維碼即可進入無廣告技術交流群。
掃描二維碼進群↓

640?wx_fmt=jpeg


640

640?wx_fmt=gif

在看 640?wx_fmt=jpeg

相關文章