1. 程式人生 > >url去重問題(百度Java後端面試一面第二題)

url去重問題(百度Java後端面試一面第二題)

問題:有10 億個 url,每個 url 大小小於 56B,要求去重,記憶體只給你4G

思路:

1.首先將給定的url呼叫hash方法計算出對應的hash的value,在10億的url中相同url必然有著相同的value。

2.將檔案的hash table 放到第value%n臺機器上。

3.value/n是機器上hash table的值。

分析:

將檔案的url進行hash,得到值value,相同的url的檔案具有相同的value,所以會被分配到同一臺機器v%n上。在同一臺機器上的重複的url檔案具有相同的value/n值,如果出現了衝突,不同的url在同一臺機器上也可能有相同的value/n值。在每個機器上將value/n值作為key,url值作為value構成hash表進行去重。最後將記憶體中去重後的hash表中的value值即url寫入磁碟。合併磁碟中的各部分url檔案,完成去重。