天天看點

面試官:把通路P站次數最多的那個人才給我找出來?

有同學問了鴨哥這樣一個問題,如果我掌握了P站的所有通路日志資料(海量),我想找出某一天通路次數最多的那個IP,并看看到底是那個國家的小哥精力如此旺盛???

面試官:把通路P站次數最多的那個人才給我找出來?

對于這種問題,說到底,就是一個“分與合”的思想。

我們需要從通路P站日志中,把具體某一天的所有IP取出來,再逐個寫入到一個大檔案中。值得一提的是,IP是32位的,那麼就有2^32個IP,就算扣除特殊IP,在重複量小的情況下,一般來說,不能直接把這些資料放入到記憶體裡面。

這裡的話,我們需要采用hash映射的方法,比如取模1000,把這個大檔案分割成1000個小檔案,再去小檔案中找出出現頻率最大的IP,并記錄其出現頻次;最後,再從這1000個IP中找到出現頻次最大的IP,這樣便把一個看似不能解決的問題就給解決了。

面試官:把通路P站次數最多的那個人才給我找出來?

具體操作:

對IP位址進行hash(IP)%1000求值,再把海量IP日志分别存儲到1024個小檔案中;

分别對每一個小檔案,建構一個{k:IP ,v:頻次}的map,并記錄下目前小檔案頻次最多的IP;

對得到的這個1000個IP,進行正常排序,便能得到最大的IP。

1、構造資料

生成1億個IP位址,寫入檔案:

2、分割檔案

把這個大檔案分割成1000個小檔案,代碼如下:

3、統計IP

對每個小檔案裡面的ip進行統計,并擷取最大頻次的ip,代碼如下:

.

4、IP排序

把通過後的最大IP,進行排序。代碼如下:

其實,到這裡,也差不多完成了,不知道你有沒有發現,其實使用記憶體的多少與IP的重複率有關系?

面試官:把通路P站次數最多的那個人才給我找出來?

歡迎在留言處補充,鴨哥又碼字一篇了,是不是該給我點個贊,支援一下呢,各位老司機

面試官:把通路P站次數最多的那個人才給我找出來?
上一篇: vim入門(2)