百度面試題:從海量日誌中提取訪問百度次數最多的IP
題目:
每一個ip訪問百度,其ip地址都會被記錄到後臺日誌檔案中,假設一天的訪問日誌有100G,求出一天中訪問百度次數最多的ip地址,可以使用的記憶體大小是1G。
分析
首先解決大檔案問題,也就是如何處理100G的一個大檔案,這個通常的解決方法就是將大檔案分解成許多小檔案。我們可以通過對IP地址求hash然後對1024取模將一個100G的大檔案分解成1024個小檔案(file0,file1......file1023),注意這裡的1024個檔案並不是平均分的,也就是每個檔案大小並不是(100G/1204)。當然我們考慮的時候可以假設檔案是平均分的,那麼每個檔案大小為100M,這樣一個100M的檔案是可以全部讀入大小為1G記憶體中。這樣就解決了第一個檔案太大不能一次讀入記憶體的問題。
考慮到ip地址是32位,那麼總共有232=4G種可能出現的ip地址,每個ip地址出現的次數不確定,這個具體是由100G大檔案決定的。對每個小檔案進行處理,我們知道前面每個檔案中的ip是通過hash(ip)%1024。這樣相當於將232=4G種ip地址進行了分段,每個檔案中可能出現的ip最大範圍是4G/1024=4M,並且每個檔案之間的ip不會出現相同情況。
建立一個hashmap,讀取小檔案中的每個ip地址,判斷hashmap中是否有這個ip,如果沒有,這往haspmap中插入一個<ip,1>的鍵值對,即hashmap.put(ip,1);如果haspmap中已經存在了這個ip,那麼求出這個ip所對應的值count=haspmap.get(ip),然後往修改這個ip所對應的value,使其數量增加1,即hashmap.set(ip,count+1)。
當我們求出每個檔案中出現次數最大的ip地址以後,我們在比較這1024個檔案中的那個ip出現次數最大。
hash(IP)%N get many small files
int max = 0;
String maxip = null;
for each file
Hashmap hashmap;
for each IP in file10 if(hashmap.has(IP)) {
int cnt = hashmap.get(IP);
hashmap.set(IP, cnt+1);
if(cnt+1 > max) {
max = cnt+1;
maxip = IP;
}
}
else hashmap.put(IP, 1);
相關文章
- 經典面試問題: Top K 之 —- 海量資料找出現次數最多或,不重複的。面試
- 經典面試問題: Top K 之 ---- 海量資料找出現次數最多或,不重複的。面試
- awk統計訪問nginx日誌次數Nginx
- 使用apache日誌進行訪問ip的排序Apache排序
- 在Linux中,如何統計ip訪問情況?分析 nginx 訪問日誌?如何找出訪問頁面數量在前十位的ip?LinuxNginx
- 百度面試題面試題
- 百度/數字馬力面試題分享面試題
- 百度js面試題JS面試題
- 一次難忘的百度面試經歷(附電話面試題)面試題
- MySQL中用通用查詢日誌找出查詢次數最多的語句的教程MySql
- 為啥用ip不可以訪問知乎,而百度卻可以?
- apache日誌統計 按小時,分鐘統計url訪問次數Apache
- mysql的日誌引數修改的問題.MySql
- Apche日誌系列(1):訪問日誌(轉)
- Android 面試題,百度,小米,阿里面試題Android面試題阿里
- 如何訪問Docker容器中的Spring Boot日誌DockerSpring Boot
- 百度小程式遇到的問題
- 【BAT(百度,阿里,騰迅)面試題】BAT阿里面試題
- 通過map reduce統計應用ip訪問次數
- 百度筆試題:繩子最多覆蓋多少個點筆試
- 域名訪問和ip訪問引起的http 403問題HTTP
- FeignClient配置日誌訪問client
- apache日誌中IP地址排序Apache排序
- 百度iOS面試iOS面試
- 使用百度地圖問題地圖
- 獲取字串中重複次數最多的字元字串字元
- nginx正向代理訪問百度地圖APINginx地圖API
- 記一次線上報錯日誌問題排查
- Tomcat訪問日誌淺析Tomcat
- 使用Fluentd + Elasticsearch收集訪問日誌Elasticsearch
- nginx自動切割訪問日誌Nginx
- Nginx 訪問日誌格式設定Nginx
- 【Algorithm】《劍指offer》面試題32----從1到n整數中1出現的次數Go面試題
- destoonphp中如何禁止IP訪問PHP
- IP頁面訪問域名介面問題
- 使用次數最多的Java API排行JavaAPI
- goroutine的次數問題Go
- 輸出字串中出現次數最多的字元和次數字串字元