大資料面試題解決方案

2021-08-19 22:52:49 字數 3480 閱讀 3103

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

解決方法

將100g分成100份,將每個ip對映到相應檔案中 ip_if=ip%100

找出每個檔案中的出現次數最多的乙個ip

再將100份裡找出來的最多的乙個放入乙個雜湊表中進行比較找出最大值

2)與上題條件相同,如何找到top k的ip?如何直接⽤用linux系統命令實現?

解決方法

將100g分成100份,將每個ip對映到相應檔案中 ip_if=ip%100

找出每個檔案中的出現次數最多的k個ip

再將100份裡找出來的最多的k個放入乙個雜湊表中進行比較找出最大的k 個

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

將100億個數分拆成1000份檔案,再將每份檔案裡使用位圖,並用兩位bit表示數字出現的次數,00存出現0次的數,01存放出現1次的數,10存放出現多次的數,11捨棄,再將1000份中出現一次的數全部合併到乙個檔案裡存放即可

4)給兩個檔案,分別有100億個整數,我們只有1g記憶體,如何找到兩個檔案交集!

將第乙個檔案裡的數用雜湊對映到1000個檔案中,將第二個檔案用同樣的雜湊對映到另1000個檔案中,然後比較每個雜湊對映相同的檔案即可

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

將100億個數分拆成1000份檔案,再將每份檔案裡使用位圖,並用兩位bit表示數字出現的次數,00存出現0次的數,01存放出現1次的數,10存放出現2次的數,11捨棄,再將1000份中出現次數不超過二的數全部合併到乙個檔案裡存放即可

6)給兩個檔案,分別有100億個query,我們只有1g記憶體,如何找到兩個檔案交集?

演算法和近似演算法!

精確演算法:

將兩個檔案分別存入相同雜湊演算法的1000個雜湊桶(共兩千個)檔案,再在每個檔案找出相同的query

近似演算法:

利用布隆過濾器進行比較

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

將bloomfilter中每一位擴充套件成乙個技術為,例如00表示無,01表示1,當沒刪除乙個,計數器減1,直到減為0為止

8)如何擴充套件bloomfilter使得它支援計數操作?!

同上題思路

9)給上千個檔案,每個檔案大小為1k—100m。給n個詞,設計演算法對每個詞找到所有包含它的檔案,你只有100k記憶體!

對上千個檔案生成1000個布隆過濾器,並將1000個布隆過濾器存入乙個檔案中,將記憶體分為兩份,一分用來讀取布隆過濾器中的詞,一塊用來讀取檔案,知道將每個布隆過濾器讀完為止

10)有乙個詞典,包含n個英文單詞,現在任意給乙個字串,設計演算法找出包含這個字串的所有英文單詞!

?暫時不會

位圖[cpp] 

view plain

copy

"font-size:18px;"

>#pragma  once  

#include

#include

using

namespace

std;  

class

bitmap  

void

set(

size_t

x)  

void

reset(

size_t

x)  

bool

test(

size_t

x)  

~bitmap()  

{}  

protected

:  vector> _bitmap;  

};布隆過濾器

[cpp] 

view plain

copy

"font-size:18px;"

>#pragma  once  

#include 

#include 

#include 

#include "bitmap.h"

using

namespace

std;  

struct

__hashfunc1  

return

hash;    

}    

size_t

operator()(

const

string& str)  

};  

struct

__hashfunc2  

return

hash;    

}    

size_t

operator()(

const

string& str)  

};  

struct

__hashfunc3  

return

hash;    

}    

size_t

operator()(

const

string& str)  

};  

struct

__hashfunc4  

else

}    

return

hash;    

}    

size_t

operator()(

const

string& str)  

};  

struct

__hashfunc5  

return

hash;    

}    

size_t

operator()(

const

string& str)  

};  

template

<

class

k=string  

,class

hashfunc1=__hashfunc1  

,class

hashfunc2=__hashfunc2  

,class

hashfunc3=__hashfunc3  

,class

hashfunc4=__hashfunc4  

,class

hashfunc5=__hashfunc5>  

class

refbloomfilter  

void

set(

const

k& key)  

bool

reset(

const

k& key)  

bool

test(

const

k& key)  

coutfalse

;  }  

protected

:  bitmap _bitmap;  

size_t

_range;  

};  

void

test()  

大資料問題解決方案

宣告 本文中有兩個簡單的大資料問題,只給出了解決方案的大概描述。1.給定100億個整數,設計演算法找到只出現 次的整數?問題分析 整數的範圍總共有42億左右。如果按照最原始的方法,給每乙個整數分配乙個計數器的話,計數器設為整形,建立以 42億整數作為索引和對應的計數器當成元素的陣列,然後乙個個的遍歷...

大資料解決方案

原文 大資料解決方案 1 資料庫 垂直拆分 根據業務把錶放到不同的資料庫,解決表之間的io競爭 水平拆分 根據某種規則把單錶資料分成多張表儲存,解決單錶資料量大的問題 索引 根據業務場景建立合理的索引,如果資料量很小建議使用索引 300條以內 索引使用場景 動作描述 聚集索引 非聚集索引 主鍵列是 ...

大資料面試題

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