面試題 大資料處理

2021-08-18 09:57:55 字數 1262 閱讀 2726

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

我們先考慮一下,100g大小的檔案,一般是無法存到普通的計算機中的,我們的硬碟根本沒這麼大;

(2)用檔案的前k個數建小堆

(3)用k+1個數和堆頂相比,大的話替換,調整堆

3、給定100億個整數,設計演算法找到只出現一次的整數 

我們有幾種方法:

(1)遍歷:記憶體足夠的情況,常規的演算法是將這個100億個整數放到記憶體中然後用查詢 ,時間複雜度o(n^2)

(2)排序:對資料排序,尋找出現一次的數,時間複雜度o(nlog2n+n)

(3)如上,雜湊切割

(4)分組:根據數的二進位制表示分組,從最高位位依次往下。

(5)用位圖,位圖一般表示一種狀態。所以需要擴充套件: 

我們可以分為三種狀態:不存在 、存在一次 、存在多次

用位圖的擴充套件:

2個位表示一種狀態,00表示不存在,01表示存在1次,10表示多次 。

有以下考慮方式:

將乙個檔案切割成1000份,分別將每乙份載入到記憶體中,然後用第二個檔案中的資料到每乙份中查詢,時間複雜度為(o(n^2))。

(2)雜湊切分。通過乙個雜湊函式,將相同的數對映到同乙個檔案中,並對檔案進行編號。如果兩個檔案存在交集,一定會在編號相同的檔案中產生交集,這時候只需要將他們編號相同的檔案比較即可,時間複雜度為(o(n))。

如下圖:

(3)位圖。將乙個檔案中的資料對映到位圖中,然後再用第二個檔案中的資料到位圖中查詢。時間複雜度為(o(n))。

可以發現和第四題很像:

(1)

(1)乙個檔案info 準備用來儲存n個詞和包含其的檔案資訊。

(2)首先把n個詞分成x份。對每乙份用生成乙個布隆過濾器(因為對n個詞只生成乙個布隆過濾器,記憶體可能不夠用)。把生成的所有布隆過濾器存入外存的乙個檔案filter中。

(3)將記憶體分為兩塊緩衝區,一塊用於每次讀入乙個布隆過濾器,乙個用於讀檔案(讀檔案這個緩衝區使用相當於有界生產者消費者問題模型來實現同步),大檔案可以分為更小的檔案,但需要儲存大檔案的標示資訊(如這個小檔案是哪個大檔案的)。

(4)對讀入的每乙個單詞用記憶體中的布隆過濾器來判斷是否包含這個值,如果不包含,從filter檔案中讀取下乙個布隆過濾器到記憶體,直到包含或遍歷完所有布隆過濾器。如果包含,更新info 檔案。直到處理完所有資料。刪除filter檔案。

大資料處理面試題

首先看看資料重複率,若重複率很高,可以直接在記憶體中將資料存進hashmap,然後利用最大堆求出出現次數最多的k個資料。將大檔案用hash劃分為多個小檔案,如果小檔案還超出了所需記憶體怎麼辦?沒事,再對其進行hash,將其分為更多的小檔案。如果多次hash檔案大小仍然超出記憶體,就不用管它了,因為這...

大資料處理面試題

題目 解決方法 ip位址最多有232 2 32 232種取值情況,所以不能完全載入到記憶體中處理 可以考慮採用 分治 的思想,按照ip位址的hash ip 1024值,將海量ip日誌分別儲存到1024個小檔案中。這樣,每個小檔案最多包含4mb個ip位址 對於每個小檔案,可以構建乙個ip為key,出現...

海量資料處理面試題

海量資料處理思路分析題 1.給乙個超過100g大小的log file,log中存著ip位址,設計演算法找到出現次數最多的ip位址?解決方法 雜湊切割topk。將100g的大檔案分成1000份,根據同乙個雜湊函式hashfunc將ip對映到向對應的檔案 每個檔案的大小可以在記憶體中處理 中,相同的ip...