1. 程式人生 > >記第一次百度電話面試

記第一次百度電話面試

今天下午兩點到三點,進行了生平第一次電話面試。為時59分鐘,純技術面。

直入正題,就開始了演算法的考察。總共問了兩個,大約40分鐘,第一個在提示下勉強答上了,第二個是真沒答出來。

然後是跟專案相關的一些問題,尤其是資訊抽取的那個模組,做完以後又問我一些特殊情況的一些想法之類的,唉……被問的沒啥想法了都。。

之前一點兒準備都沒有,還在忙專案上的事情,本來一些演算法就不太瞭解,這次更加悲劇了……

以下是具體內容:

第一個演算法題:有一個數組,設其為N1,如何取出前N2大個數。後來又加上限定條件,假設數字都是0-10000之間的。

才開始見到這個題目,想到了堆排序。因為之前有見到過,非常大的一個數組,取前幾個大的數字的話,用最小堆。取前N小的數的話,用最大堆。結果問我具體實現過程,毫無印象- -!根本就忘記了最大最小堆怎麼回事兒了。。。囧死,翻開這篇兒繼續看

面試官說談談你的想法吧,不管別人怎麼實現的。我說可以考慮先進行簡單的排序,然後取前N2個就OK。他問複雜度多少(他很喜歡問複雜度,你說的想法要是能實現的話,就問你複雜度,全程下來,我大約得算了10個左右的複雜度),我說簡單的氣泡排序之類的話,應該是N方。他說還有沒有簡單的方法,我說快速排序的話,應該是NlogN。然後又讓我講了以下快速排序,這個貌似勉強講明白了- -!

接下來一直沒什麼繼續下去的進展,面試官提示了一下,這個條件是特定的,數字都是0-10000之間的。你看可不可以統計10000有多少個,9999有多少個之類的。然後……很光榮的,我又跑偏了(- -!真不知道咋想的,都提示到這個程度了)我說可以折半找,5000-10000的有多少,然後不夠的話,2500-5000有多少。問最後複雜度多少,我算了下,貌似還是NlogN。。- -!

接下來又經過思考好歹算是給出了答案,算是結束了第一題!

回來跟同學討論的時候,普遍都想到了可以用基數排序嘛……跟面試官提示的解答思路差不多

第二個演算法題:有兩個有序陣列N1和N2,如何找出其中位數。

有了第一題的教訓,先從簡單的來吧,就說可以先歸併排序,然後取中位數。面試官問,那麼這兩個個有序陣列的排序的複雜度是多少。。我再次華麗麗的2B了!!才開始說的min{N1,N2}吧,後來又經過思考,肯定的回答是max{N1,N2}.然後面試官問為什麼,然後各種解釋。。最後面試官說,先不管是max{N1,N2}還是N1+N2了,我們繼續往下看。我瞬間有想抽自己的衝動,尼瑪,是N1+N2啊- -!

繼續往下看的意思就是,有沒有再簡單的方法。我絞盡膽汁啊,毫無思路……(怎麼就這麼笨!)然後,面試官再次提示:如果給你一箇中位數大小的數,如何插入呢?瞬間想到了折半插入,分別從中間找起。然後問複雜度,答曰logN1+logN2。然後就繼續了,這基本就是提示了用折半的方法了。但是苦苦思索良久,還是沒有給出最終的解決辦法。。唉,無奈進入下一環節- -!

專案經驗考察:

先是第一個:metasearch,就讓我簡單講了講。然後問我負責哪些部分,我說全是我做的。貌似人家不太感興趣,就進行到下面一個了。

第二個是資訊抽取方面的,詳細問了我的實現思路。然後提了若干問題,最後就是針對一些視訊網站,正文特別少的,有沒有什麼思路?我再次絞盡膽汁,說針對大型的網站可以做基於規則的抽取。。面試的哥哥問,那一些小眾的網站呢,還是一點兒想法沒有- -!

接下來時間就差不多了,下面的文字分類、hadoop、mpi的都沒有問到就該結束了,然後問我有沒有什麼要問他的。我就問他結合這次面試表現,給點兒建議神馬的。他回覆說,基本的演算法和資料結構要理解深入,不能停留在表面,要多思考,有自己的想法才行。

好吧,我的第一次就這麼華麗麗的結束了,慘不忍睹- -!