本文參考並對部分內容進行了整理
1、給定 a、b 兩個檔案,各存放 50 億個 url,每個 url 各佔 64 位元組,記憶體限制是 4g,讓你找出 a、b 檔案共同的 url?
1) 可以估計每個檔案安的大小為 50g×64=320g,遠遠大於記憶體限制的 4g。所以不可能將其完全載入到記憶體中處理。考慮採取 分而治之 的方法。
2) 遍歷檔案 a,對每個 url 求取 ,然後根據所取得的值將 url 分別儲存到 1000 個小檔案(記為 )中。這樣每個小檔案的大約為 300m。
3) 遍歷檔案 b,採取和 a 相同的方式將 url 分別儲存到 1000 個小檔案(記為 )。這樣處理後,所有可能相同的 url 都在對應的小檔案( )中,不對應的小檔案不可能有相同的 url。然後我們只要求出 1000 對小檔案中相同的 url 即可
4) 求每對小檔案中相同的 url 時,可以把其中乙個小檔案的 url 儲存到 hash_set 中。然後遍歷另乙個小檔案的每個 url,看其是否在剛才構建的 hash_set 中,如果是,那麼就是共同的 url,存到檔案裡面就可以了。
思考:如何保證a/b生成的小檔案根據url一一對應?如果不能保證,第4)步時,載入a生成的乙個小檔案到記憶體中,需要和b生成的所有的小檔案都做一次遍歷比較。
2、有 10 個檔案,每個檔案 1g,每個檔案的每一行存放的都是使用者的 query,每個檔案的 query 都可能重複。要求你按照 query 的頻度排序。
1)如果重覆記錄比較多,可以在記憶體中生成乙個hashmap,以query為key,然後依次讀取檔案記錄,將對應的key值的value +1計數,最後再根據value值排序即可。
2)如果重覆記錄較少,可以採用分而治之的方法。對原有的每個檔案分別排序(如果1g對於記憶體來講仍然偏大,可以繼續分割檔案),檔案內部排序後,再利用歸併排序,合成乙個大檔案,做到整體有序。
3、在 2.5 億個整數中找出不重複的整數,記憶體不足以容納這 2.5 億個整數。
方案 1:
採用 2-bitmap(每個數分配 2bit,00 表示不存在,01 表示出現一次,10 表示多次,11 無意義)進行,共需記憶體 記憶體,還可以接受。然後掃瞄這 2.5 億個整數,檢視 bitmap 中相對應位,如果是 00 變 01,01 變 10,10 保持不變。所描完事後,檢視 bitmap,把對應位是 01 的整數輸出即可。
方案 2:
也可採用上題類似的方法,進行劃分小檔案的方法。然後在小檔案中找出不重複的整數,並排序。然後再進行歸併,注意去除重複的元素
4、海量資料分布在 100 臺電腦中,想個辦法高校統計出這批資料的 top10。
1) 在每台電腦上求出 top10,可以採用包含 10 個元素的堆完成(top10 小,用最大堆,top10 大,用最小堆)。比如求 top10 大,我們首先取前 10 個元素調整成最小堆,如果發現,然後掃瞄後面的資料,並與堆頂元素比較,如果比堆頂元素大,那麼用該元素替換堆頂,然後再調整為最小堆。最後堆中的元素就是 top10 大。
2) 求出每台電腦上的 top10 後,然後把這 100 臺電腦上的 top10 組合起來,共 1000 個資料,再利用上面類似的方法求出 top10 就可以了。
5、1000 萬字串,其中有些是重複的,需要把重複的全部去掉,保留沒有重複的字串。請怎麼設計和實現?
內存放的下的話,直接在記憶體中使用hash_map即可進行去重。
記憶體放不下的話,先查分成小檔案排序,最後合成乙個有序的大檔案。對於有序的大檔案,可以每次讀取兩條記錄進行比較,依次讀完整個檔案即可去除重複。
6、最大間隙問題。
給定 n 個實數 ,求著 n 個實數在實軸上向量 2 個數之間的最大差值,要求線性的時間演算法。
使用位圖。第一遍掃瞄n個資料,將其對應的點陣圖中的位置,點陣圖的索引值等於對應的實數值。第二遍掃瞄,依次計算有值的點陣圖索引的差值,取最大的那個即可。
大資料面試題
海量資料面試題整理 1.給定a b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4g,讓你找出a b檔案共同的url?方案1 可以估計每個檔案安的大小為50g 64 320g,遠遠大於記憶體限制的4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。s 求每對小...
大資料面試題
1.列舉spark 比hadoop 快的原 因 以及現在存在的主要問題 2.描述下使用spark streaming 和 graphx實現實時計算的可行性,以及可能會遇到的問題 3.graphx的pregel api 只支援有向圖遍歷 如何實現無xiang 遍歷,描述思路 4.spark 通過yar...
大資料面試題
1 mapreduce的大致流程 2 列出正確的hadoop集群中hadoop都分別啟動那些程序,他們的作用分別是什麼,盡量詳細些。3 請列出你所知道的hadoop排程器,並簡要說明其工作方法。4.flume不採集nginx日誌,通過logger4j採集日誌,優缺點是什麼?在nginx採集日誌時無法...