海量資料處理面試題

2021-08-27 18:33:19 字數 2233 閱讀 2885

海量資料處理思路分析題

1.給乙個超過100g大小的log file,log中存著ip位址,設計演算法找到出現次數最多的ip位址?

解決方法:雜湊切割topk。將100g的大檔案分成1000份,根據同乙個雜湊函式hashfunc將ip對映到向對應的檔案(每個檔案的大小可以在記憶體中處理)中,相同的ip一定會被放在同乙個檔案中。然後處理每乙個檔案,找出出現次數最多的ip,每個檔案中最大的value對應的key既為出現次數最多的ip。最後在比較1000個檔案中的max,確定最終的出現次數最多的ip。如果需要找出topk,則需要以每個小檔案中出現次數最多的ip建成乙個最小堆,從而確定topk

注意:為什麼要分成1000份,而不是100份呢?因為如果分成100份,雜湊切割不均勻,有的檔案很小,但是有的檔案依然很大,依舊放不到記憶體去處理它們。

2.給定100億整數,設計演算法找到只出現一次的整數?

100億整數需要多少記憶體呢?乙個整數4個位元組,100億個整數400億個位元組,1g是10^9個位元組,那麼400億個位元組就是大約40g的記憶體,我們根本沒有這麼大的記憶體,所以只能另想辦法了。

解決方法一:解決方法二:借助位**決。在前邊的點陣圖實現中,只有兩個狀態0(不存在)、1(存在)。要解決找出只出現一次的數字,我們可以增加狀態,用兩個位元位作為雜湊對映的位址,我們可以讓00(不存在)、01(只出現一次)、11(出現兩次)、10(出現兩次以上)

3. 給兩個檔案,分別有100億整數,我們只有1g記憶體,如何找到兩個檔案的交集?

解決方法一:

解決方法二:雜湊切割。

解決方法三:位圖

4.1個檔案有100億個int,1g記憶體,設計演算法找到出現次數不超過2次的所有整數?

解決方法:借助位**決。要解決找出只出現次數不超過2次的數字,我們可以增加位圖狀態,用兩個位元位作為雜湊對映的位址,我們可以讓00(不存在)、01(只出現一次)、11(出現兩次)、10(出現兩次以上)

5.給兩個檔案,分別有100億個query,我們只有1g記憶體,如何找到兩個檔案交集?分別給出精確演算法和近似演算法?

精確演算法:雜湊切分。和第三題雜湊切割的方法是一樣的,只需要將hashfunc變為處理字串的即可。(query查詢)

近似演算法:布隆過濾器。將乙個檔案的query放在布隆過濾器中,然後在用另乙個檔案中的query去查布隆過濾器中存不存在。布隆過濾器查詢存在是不精確的。

6.如何擴充套件bloomfilter使得它支援刪除元素的操作?

解決方法:因為乙個布隆過濾器的key對應多個位,衝突的概率比較大,所以不支援刪除,因為刪除有可能影響到其他元素。如果要對其元素進行刪除,就不得不對每乙個位進行引用計數。將bloomfilter中的每一位擴充套件為乙個計數器,記錄有多少個hash函式對映到這一位;刪除的時候,只有當引用計數變為0時,才真正將該位置為0否則減1即可。

7.如何擴充套件bloomfilter使得它支援引用計數操作?

解決方法:將bloomfilter中的每一位擴充套件為乙個計數器,每個輸入元素都要把對應位置加1,從而支援計數操作。但是有乙個問題,1個位元位只能是兩個狀態0和1,我們只能把點陣圖擴大成1位元組或者更多,1個位元組僅僅能存放計數256,但代價依舊是浪費記憶體。

海量資料處理面試題

什麼是海量資料處理?所謂海量資料處理,無非就是基於海量資料上的儲存 處理 操作。何謂海量,就是資料量太大,所以導致要麼是無法在較短時間內迅速解決,要麼是資料太大,導致無法一次性裝入記憶體。那解決辦法呢?針對時間,我們可以採用巧妙的演算法搭配合適的資料結構,如bloom filter hash bit...

海量資料處理之面試題

給定a b兩個檔案,各存放50億個url,每個url各佔64位元組,記憶體限制是4g,讓你找出a b檔案共同的url?方案1 可以估計每個檔案安的大小為50g 64 320g,遠遠大於記憶體限制的4g。所以不可能將其完全載入到記憶體中處理。考慮採取分而治之的方法。遍歷檔案a,對每個url求取,然後根...

面試題 海量資料處理題

問題一 給你a,b兩個檔案,各存放50億條url,每條url占用64位元組,記憶體限制是4g,讓你找出a,b檔案共同的url。如果是三個乃至n個檔案呢?方案 先算一下4g有多少位 bit 4g 2 32 8 bit 320億 bit,n才50億,可以用位圖法。將其中乙個檔案中的url使用bloom ...