82 第 2 組百度面試題

2021-06-26 11:51:30 字數 2025 閱讀 9186

1.給出兩個集合 a  和 b,其中集合 a=,

集合 b=,

要求:問題 1、根據集合 a  中的 name  查詢出集合 b  中對應的屬性資訊; 

問題 2、根據集合 b  中的屬性資訊(單個屬性,如 age<20  等),查詢出集合 a  中對應的

name。

2.給出乙個檔案,裡面包含兩個字段,即 url  為**,size  為對應**訪問的次

數要求:

問題 1、利用 linux shell  命令或自己設計演算法,查詢出 url  字串中包含「baidu」子字元

串對應的 size  字段值;

問題 2、根據問題 1  的查詢結果,對其按照 size  由大到小的排列。

(說明:url  資料量很大,100  億級以上)

**:

/*

問題1:

方法1、直接利用hashtable的來做對映,即利用key記錄集合a中的name屬性,

利用value記錄集合b中的屬性向量,然後直接key來查詢value值

方法2、使用c++的容器類map進行一對多的對映(其實應該是multimap)

方法3、自定義對映關係,大體思路是index+vector模式,vector可以利用struct結構體做,

index主要對name建立索引,提高查詢效率這題的的核心解決思想,

其實就是如何建立起一對多的對映關係,以及如何高效的進行查詢匹配

問題2:

一時我沒有非常完整、高效的解決方案,但是我給面試官gg講了我思考的大體思路:

第一種方案,集合a和集合b,逐行讀取並按屬性字段判斷,如age<20則列印出name,

否則直接讀取下一行。但gg指出這樣做的缺點是需要遍歷整個檔案,效率較低

第二種方案,於是提高效率,我借鑑了倒排索引的思想,提出把關鍵字段建立索引,

進行「全文」搜尋(其實就是集合a中的name),但是gg提出建立索引會占用額外儲存空間,不是最優的方案

第三種方案,為了不占用額外儲存空間,我再想借鑑資料庫的group+order方法,

對集合b關鍵字段先分組然後排序,這樣既不占用額外儲存空間,也比方案一提高了效率,

但gg說這不是最優方案,在頭腦中快速搜尋我曾經還遇到過哪些能夠既不佔額外儲存空間,

又能提高效率的方法或借鑑思想。火花一冒,對呀,最近炒得很熱的框計算、雲計算,

它們的設計思想或許可以一用,於是我接著想分布儲存計算,

對,利用分布式的思想來提高效率。可gg說似乎不行,這仍然不是解決問題2的最佳解決方案。

不過還好的是,gg沒有在這個問題上繼續損殺我的腦細胞和自信心,

而是循於轉入下一道題目(gg不死摳面試者最薄弱的環節,而是適時直接轉入下一環節,

gg提問的技巧和哲學,給了面試者足夠的自信和勇氣,贊)

第二道,利用linux shell查詢檔案中的子字串,需要用grep命令進行內容查詢;

分離顯示檔案的url和size兩欄位,似乎需要用到awk命令(沒用過,不太熟悉),

二者通過管道|傳值。不過當時我沒用shell命令(不敢在gg高手面前show,

否則出了問題可不太好ban滴 呵呵 面試回來後,我在man sort檢視詳細引數後,

於是我採用了自己設計演算法解決的,分解成三步

(1、字元匹配:位元組流逐行讀取,進行子字串匹配kmp演算法,查出所有包含「baidu」的url;

2、列印滿足1對應的size結果;

3、根據2的結果,先把字段size字段值的字元型轉換成整型,然後再用排序演算法進行排序)

當時說了三種排序演算法:二分法、快排、堆排序

這裡面還有乙個小插曲, gg讓我簡單寫寫排序演算法的**,

我開始選擇採用二分法,複雜度o(nlog2n) 不過這次我在下筆寫**之前,

先吸取了一面時jj說我**不規範的建議,

於是我便從void quicksort(int sizearray, int low, int high)、

int i, j, tmp; ... 最基本格式寫起,雖然感覺比較麻煩,

耗費了寶貴的面試時間,但畢竟吃一塹、長一智嘛——*/

百度面試題

有一根27厘公尺的細木桿,在第3厘公尺 7厘公尺 11厘公尺 17厘公尺 23厘公尺這五個位置上各有乙隻螞蟻。木桿很細,不能同時通過乙隻螞蟻。開始時,螞蟻的頭朝左還是朝右是任意的,它們只會朝前走或調頭,但不會後退。當任意兩隻螞蟻碰頭時,兩隻螞蟻會同時調頭朝反方向走。假設螞蟻們每秒鐘可以走一厘公尺的距...

百度面試題

一 選擇題 15分 共10題 1.任何乙個基於 比較 的內部排序的演算法,若對6個元素進行排序,則在最壞情況下所需的比較次數至少為 a 10 b 11 c 21 d 36 2.關係模型有三類完整性約束,定義外來鍵實現的是 完整性.a.實體完整性 b.參照完整性 c.使用者定義的完整性 d.實體完整性...

百度面試題

1.乙個int陣列,裡面資料無任何限制,要求求出所有這樣的數a i 其左邊的數都小於等於它,右邊的數都大於等於它。能否只用乙個額外陣列和少量其它空間實現。2.乙個檔案,內含一千萬行字串,每個字串在1k以內,要求找出所有相反的串對,如abc和cba。當時怎麼想的忘記了,現在重新思考一下,檔案的大小上限...