百度實習面試總結——百度大搜,機器學習實習生
簡歷是內推的,找到了川大的一位學姐,然后內推了簡歷。
過了幾天,HR的電話打過來協商面試時間。一開始說的是下午兩點,我想了想,好像有一節選修課,於是想調整再晚一點,於是調到了四點,不過這時間不還是在上課嗎……
於是果斷上課上到一半,然后翹了出來,溜回寢室。在室友玩守望先鋒的背景音樂下,進行了一面(微笑臉
一面
其實這時候,我並不知道我面的是什么崗位的……
一面和小米一樣,都是在一個代碼分享平台上面寫,就是面試官看得見你寫的代碼,你也看得見面試官寫的是啥。
先讓我自我介紹,然后我blablabla。
然后進入正題:
第一題:給你n個數,要求找到所有的三元集<i,j,k>,滿足a[i]+a[j]+a[k]=S,要求復雜度n^2
我做這道題的時候,一開始給了一堆亂七八糟的方法。(FFT什么的其實都想說出來,但是忍住了……
然后面試官提示了一下兩個數的情況,發現好像可以直接O(n)的Two pointers就好了。
然后我腦補了一下,於是給了個和two pointers毫無關系的n^2方法(暴力枚舉+hash)……
然后在面試官的提示下,做出了n^2的two pointers。
這時候感覺好像要go die了……
第二題:給25匹馬,你有五個賽道,問你最少需要比賽多少場,才能得到前三的馬。
我一開始沒啥想法,於是答了個上限,(25-3)/2=11場,因為每場比賽可以淘汰兩只馬。
然后面試官提示了一下楊氏矩陣,然后看我好像還是不太懂的樣子,就給我講了正解:
你建一個5*5矩陣,每一行,從左到右,從大到小排序。第一列,從大到小排序。
那么說構成我要求的這個矩陣,就需要6次比賽。
然后就可以淘汰掉第四列和第五列,第四行和第五行。
第一排只會剩下3匹馬,第二排只會剩下2匹馬,第三排只會剩下1匹馬。
由於第一行第一列的馬兒必須選,所以剩下五匹馬比賽選出前二就完了。
所以最少比賽七次。
這時候,感覺自己已經go die了。
第三題:給你一堆二維點,讓你找到一個點,使得其他點到這個點的距離和最小。
這道題我終於會了,於是在面試官說完之前 ,就完成了搶答。
這道題是某年的校賽初賽題,把X軸和Y軸分開之后,分別取中點就完了。
第四題:
問:如何檢測兩篇新聞是一樣的呀?
答:把新聞拿出來字符串匹配就好了嘛。
問:但是其中可能存在個別字符不一樣,其他的都一樣的情況怎么辦呀?
答:那就把新聞拆分成句子,摳下來,然后進行匹配吧。
問:有些句子,實際上是代表着這個網站的特征的句子,如何把這些句子分辯出來呢?
答:翻一下之前這個網站的新聞,機器學習一下,看看那些句子出現的頻次高。
問:哦,你會機器學習嗎?
答:了解過,我知道K近鄰。
問:解釋一下。
答:KNN就是把一些作為樣本,然后拿現在要檢測的和那些樣本做距離,取距離最小的那幾個,然后里面啥最多,那么檢測的這個就是啥。我之前做過那個數字識別,就是用這個搞的。
問:你說的好像不太清楚,我忘了,我回去查一查。
GG。
然后一面就說,你准備一下,趕緊面對二面吧。
這時,我室友正在歡樂的在守望先鋒1600分魚塘掙扎中。
二面
開頭還是讓我自我介紹,然后我把一面的自我介紹重復了一遍(x
然后進入正題:
第一題:
問:給你一個前綴,再給你一堆字符串,問你有多少個字符串包括這個前綴。
答:hash。
問:假設要求動態的多次詢問是否存在這個前綴呢?
答:把所有的字符串拿去建字典樹,然后每次有前綴的時候,爬一爬就好了。
問:如果不是前綴呢,是問你是否存在這個子串呢?
答:hash?
問:這個好像不太行呀,你可以有充分的預處理時間哦?
答:那就把所有的字符串摳出來,比如把abc變成abc,bc,c三個字符串,然后做字典樹?
問:好像可以?
答:恩,好像可以。
第二題:給你一個矩陣,從左導右是遞增的,從上到下是遞增的,讓你找到里面是否存在一個k。
曾經曾某拿這道題考過我,然后我被他羞辱過,然后我就記住了這道題……
我誠實的答了我曾經做過這道題,然后證明了一下結論的正確性。
正解就是從右上角開始跑,如果k大於當前格子的數,就往下走,否則往左走,證明略。
第三題:
問:給你一個二叉樹,求從根開始的最長路徑。
答:好像dfs一下就好了?順便記錄一下路徑長度。
問:要求輸出路徑。
答:第二次再dfs一下,如果到葉子節點的時候,是最長的話,就輸出?
問:只用一次dfs。
答:好像不遍歷完整棵樹,是無法確定最長路的?我感覺得兩次呀。
問:你能不能開個數組記錄一下路徑,然后更新呢?
答:好像可以呀。
GG
第四題:
問:給你一個隨機數生成器,有p的概率輸出0,(1-p)的概率輸出1,p未知。要求用這個隨機生成器做成50%輸出0,50%輸出1的生成器。
答:我在紙上畫了畫,好像讓這個隨機數生成器一開始正常輸出,然后第二個周期1-rand()輸出,這樣就是一個平均的了。
問:你這個假設周期是1,那么輸出了兩個數,如果我只取第一個數,那么第一個數是否是50%概率輸出的呢?
答:好像從兩個數的角度來看,這兩個數輸出1的期望和輸出0的期望個數相同,我覺得好像是一樣的。如果只看第一個數的話,他就不是。我感覺這好像是個邏輯問題,我覺得我邏輯好像不太好……
問:我想讓你實現一個函數,然后這個函數的功能是50%概率輸出0和1,你再想一想。
摳了一下腦袋,然后想了10min……
答:輸出四個數做,01和10的概率不一樣,01+10不等於11+00。00和11都是p(1-p),01是pp 10是(1-p)(1-p),然后00x11=01x10,根據這一,我們可以乘法找對稱關系。一共十六對,都能找到。
問:我懂了你的意思,你這樣太麻煩了,假設你可以跳過一些東西呢?沒必要全部用。
答:那就11輸出1,00輸出0?01和10都跳過?
問:對。
然后面試官讓我准備三面了。
三面
讓我自我介紹一下,於是我又重復了一遍( x
你有什么優點?
blablabla
你有什么缺點?
blablabla
你知道我們干什么的嗎?
不知道。
你知道你要干什么嗎?
不知道。
那我給你講一下,我們是干blablabla……
而你會做blablablabla……
我覺得你這種一張白紙的競賽選手,還是比較適合這里的。
然后三面就結束了。
后續
然后我就以實習生的身份,混進百度之星出題組了。(x
我一定會好好出題的!大家記得去參加百度之星呀!
至於offer這邊,就杳無音訊了,我以為我被拒絕了,但是!
過了十幾天,三面面試官打電話給我說了下百度現在HC不足的問題,你要來就只能四月之后來。
而我正好有校賽要去打,本來就打算最早也只能四月份之后過去。
於是達成共識。
於是愉快的就決定了四月份再去思考這件事兒去了。
於是我又開始在學校躺屍,過着給小朋友教書的快樂日子。