日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

url过滤怎么解除_腾讯面试官是这样来问布隆过滤器的?

發布時間:2024/7/23 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 url过滤怎么解除_腾讯面试官是这样来问布隆过滤器的? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作者:張振偉來源:https://zhangzw.com/20190521.html

假設遇到這樣一個問題:一個網站有 20 億 url 存在一個黑名單中,這個黑名單要怎么存?若此時隨便輸入一個 url,你如何快速判斷該 url 是否在這個黑名單中?并且需在給定內存空間(比如:500M)內快速判斷出。

可能很多人首先想到的會是使用 HashSet,因為 HashSet基于 HashMap,理論上時間復雜度為:O(1)。達到了快速的目的,但是空間復雜度呢?URL字符串通過Hash得到一個Integer的值,Integer占4個字節,那20億個URL理論上需要:20億*4/1024/1024/1024=7.45G的內存,不滿足空間復雜度的要求。

這里就引出本文要介紹的“布隆過濾器”。

# 何為布隆過濾器

百科上對布隆過濾器的介紹是這樣的:

布隆過濾器(Bloom Filter)是1970年由布隆提出的。它實際上是一個很長的二進制向量和一系列隨機映射函數。布隆過濾器可以用于檢索一個元素是否在一個集合中。它的優點是空間效率和查詢時間都比一般的算法要好的多,缺點是有一定的誤識別率和刪除困難。

是不是描述的比較抽象?那就直接了解其原理吧!

還是以上面的例子為例:

哈希算法得出的Integer的哈希值最大為:Integer.MAX_VALUE=2147483647,意思就是任何一個URL的哈希都會在0~2147483647之間。

那么可以定義一個2147483647長度的byte數組,用來存儲集合所有可能的值。為了存儲這個byte數組,系統只需要:2147483647/8/1024/1024=256M。

比如:某個URL(X)的哈希是2,那么落到這個byte數組在第二位上就是1,這個byte數組將是:000….00000010,重復的,將這20億個數全部哈希并落到byte數組中。

判斷邏輯

如果byte數組上的第二位是1,那么這個URL(X)可能存在。為什么是可能?因為有可能其它URL因哈希碰撞哈希出來的也是2,這就是誤判。

但是如果這個byte數組上的第二位是0,那么這個URL(X)就一定不存在集合中。

多次哈希

為了減少因哈希碰撞導致的誤判概率,可以對這個URL(X)用不同的哈希算法進行N次哈希,得出N個哈希值,落到這個byte數組上,如果這N個位置沒有都為1,那么這個URL(X)就一定不存在集合中。

# Guava的BloomFilter

Guava框架提供了布隆過濾器的具體實現:BloomFilter,使得開發不用再自己寫一套算法的實現。

# 創建BloomFilter

BloomFilter提供了幾個重載的靜態 create方法來創建實例:

最終還是調用:

BloomFilter里byte數組的空間大小由 expectedInsertions, fpp參數決定,見方法:

真正的byte數組維護在類:BitArray中。

# 使用:

最后通過:put和 mightContain方法,添加元素和判斷元素是否存在。

# 算法特點

1、因使用哈希判斷,時間效率很高??臻g效率也是其一大優勢。

2、有誤判的可能,需針對具體場景使用。

3、因為無法分辨哈希碰撞,所以不是很好做刪除操作。

# 使用場景

1、黑名單

2、URL去重

3、單詞拼寫檢查

4、Key-Value緩存系統的Key校驗

5、ID校驗,比如訂單系統查詢某個訂單ID是否存在,如果不存在就直接返回。

總結

以上是生活随笔為你收集整理的url过滤怎么解除_腾讯面试官是这样来问布隆过滤器的?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。