1.只用2gb內存在20億個整數中找到出現次數最多的數
有乙個包含20億個全是32位整數的大檔案,在其中找到出現次數最多的數
32位整數 = 4b
用hash表來存,一條記錄就是乙個key, 乙個value, 都用無符號整數儲存, 需要8b記憶體。
記住10^9 = 1g
2億個整數,2*10^8 * 8 = 1.6g
20億個數最極端的情況需要16g記憶體。
將2億個整數分程16個檔案,每次處理1個檔案,然後找出最多的數,再16個比較一次即可。
40億個非負整數中找到未出現的數
32位無符號整數的範圍是0~4294967295, 現在有40億個無符號整數,所以在整個無符號中必然有未出現的數,最多可以使用1g記憶體,怎麼找到未出現過的數
假設全部hash, 40*4 = 160*10^8 = 16gb記憶體
這裡使用bit map的方法,申請乙個長度為4294967295長度的bit型別的陣列,bitarray上每一位只表示0或1
8個bit = 1b
所以只需要500mb的空間。
遍歷一遍資料,將出現過的bitarray設為1,為0的就是沒出現過的。
大資料問題最基礎的就是計算資料規模
記住10^9 = 1gb = 10億
10^6 = 1mb = 百萬
大資料面試總結
1 給出乙個超過100g的log file,log中存著ip位址,設計演算法找到出現次數最多的ip位址?採用雜湊切割將ip相同的檔案都對映到同乙個檔案中,在一次統計每個檔案ip的個數,求出最多的,如果乙個ip出現的次數特別多,切割之後還是無法載入到記憶體中,我們可在對這個檔案進行切割 普通切割 分成...
經典大資料求職面試題目
首先看到100g的日誌檔案,我們的第一反應肯定是太大了,根本載入不到記憶體,更別說設計演算法了,那麼怎麼辦呢?既然裝不下,我們是不是可以將其切分開來,一小部分一小部分輪流進入記憶體呢,答案當然是肯定的。在這裡要記住一點 但凡是大資料的問題,都可通過切分來解決它。粗略算一下 如果我們將其分成1000個...
大資料面試題總結
1.spark執行原理 啟動乙個driver程序 用於控制整個流程 當任務提交,首先會去向資源管理器 yarn,申請executor資源,根據sparkcontext獲取執行環境,然後driver會從程式倒著構建成dag圖,在將按照寬窄依賴減dag圖分解成stage,然後將taskset傳送給tas...