1、給出乙個超過100g的log file,log中存著ip位址,設計演算法找到出現次數最多的ip位址?
採用雜湊切割將ip相同的檔案都對映到同乙個檔案中,在一次統計每個檔案ip的個數,求出最多的,如果乙個ip出現的次數特別多,切割之後還是無法載入到記憶體中,我們可在對這個檔案進行切割(普通切割)分成若干個小檔案,最後將小檔案的結果彙總,求出出現次數最多的。
2、給出乙個超過100g的log file,log中存著ip位址,如何找到top k的ip?
與上一題思想相同,將檔案切割成小檔案,採用小堆求出每個檔案的top k ip,再將結果彙總,利用小堆求出top k ip。
3、給定100億個整數,設計演算法找到只出現一次的整數?
方法一:100億個整數載入到記憶體需要大約40g的空間,一次性載入到記憶體中是不現實的,採用bitmap,由於要記錄出現的次數,乙個位元位是無法做到的,我們可以採用2個位元位,00 :表示沒有出現,01:表示出現一次,10:出現多次,11:捨棄。而整數大約能表示42億9千萬,100億整數中有很多重複出現的整數,如果採用bitmap,用兩個位元位表示的話大概1g就可以將資料儲存下來,由於整數中有負數,我們可以將負數對映到位圖的後半部分,並當作無符號數看待。
方法二:整數有32位,我們按照最高位為0和1依次將資料劃分成兩個部分,存入不同的檔案,然後那要查詢的資料的最高位比較看去哪個檔案中去尋找,最多進行32次劃分就能知道這個數在不在100億資料中。
4、給定兩個檔案,分別有100億個整數,只提供1g記憶體,如何找出兩檔案交集?
方法一:雜湊切割
先對第乙個檔案進行切分,採用乙個雜湊函式將相同的數都切分到同乙個檔案中,並對檔案進行編號,在對第二個檔案也採用同乙個雜湊函式,並對檔案進行編號,如果兩個檔案有交集一定在編號相同的檔案裡。這時候只需要把編號相同的檔案進行比較就可以了。
方法二:位圖
將第乙個檔案的資料對映到位圖中,大約需要500m的記憶體,在用第二個檔案中的資料進行尋找。
5、給定兩個檔案,分別有100億個query,我們只有1g記憶體,如何找到兩個檔案的交集?分別給出精確演算法和近似演算法?
精確演算法:雜湊切分
先對第乙個檔案進行切分,採用乙個雜湊函式將相同的數都切分到同乙個檔案中,並對檔案進行編號,在對第二個檔案也採用同乙個雜湊函式,並對檔案進行編號,如果兩個檔案有交集一定在編號相同的檔案裡。這時候只需要把編號相同的檔案進行比較就可以了。
近似演算法:布隆過濾器:
將乙個檔案的內容對映到位圖中,再用另乙個檔案進行尋找。但是布隆過濾器是有誤差的。
6、如何擴充套件bloomfilter使得它支援刪除操作?如何擴充套件bloomfilter使得它支援計數操作?
因為布隆過濾器乙個位元位可能對應多個元素,所以刪除乙個元素時不能直接刪除,否則會影響其他的元素,這時候我們可以採用引用計數的方式來實現刪除操作,為了記錄元素出現的次數,我們不能用乙個位元位來表示元素了,而是採用無符號整型來表示,具體的實現是用乙個vector將集合的元素通過幾個雜湊函式對映到多個位置,而每個位置的值表示有幾個元素對映到這個位置上,刪除的時候只需要將對應位置的值-1就可以了。
7、5億個整數找它們的中位數,只有1g記憶體。
5億個整數大概需要2g的記憶體才可以儲存,我們可以將整數劃分成若干個區間,為每個區間建立乙個檔案,將5億個整數按照大小放到對應的檔案中,然後統計們個檔案元素的個數就可以找到中位數的位置了。
總結:對於大資料問題解決方法就是切分,再利用資料結構進行求解,常用的資料結構有bitmap、bloomfilter、trie樹等。
面試大資料題目總結
1.只用2gb內存在20億個整數中找到出現次數最多的數 有乙個包含20億個全是32位整數的大檔案,在其中找到出現次數最多的數 32位整數 4b 用hash表來存,一條記錄就是乙個key,乙個value,都用無符號整數儲存,需要8b記憶體。記住10 9 1g 2億個整數,2 10 8 8 1.6g 2...
大資料面試題總結
1.spark執行原理 啟動乙個driver程序 用於控制整個流程 當任務提交,首先會去向資源管理器 yarn,申請executor資源,根據sparkcontext獲取執行環境,然後driver會從程式倒著構建成dag圖,在將按照寬窄依賴減dag圖分解成stage,然後將taskset傳送給tas...
大資料面試題總結
1.關於zookeeper zookeeper 是乙個用來進行分布式協調的服務,這些服務包括配置服務,維護元資訊和命名空間服務。zookeeper是如何選取主leader的?當leader崩潰或者leader失去大多數的follower,這時候zk進入恢復模式,恢復模式需要重新選舉出乙個新的lead...