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。當時怎麼想的忘記了,現在重新思考一下,檔案的大小上限...