小白也能秒懂的Linux零拷贝原理
|
.6.3 统计请求的算法
1.6.4 熔断的恢复算法
1.6.5 统计失败率的时间窗口 如何使得误报率最小,数学问题,求导就可以了。 4、使用场景 (1)google的guava包中有对Bloom Filter的实现 (2)通常使用布隆过滤器去解决redis中的缓存穿透,解决方案是redis中bitmap的实现, (3)钓鱼网站、垃圾邮件检测 大体就这些,可能还有很多!!! 二、代码实现布隆过滤器
上面只是给出了其原理,下面我们代码实现一下。 K,有一天网警查到了一个可疑的网站,想判断一下是否是XX网站,于是就开始检查了。通过同样的方法将XX网站通过哈希映射到32亿个比特位数组上的8个点。如果8个点的其中有一个点不为1,则可以判断该元素一定不存在集合中。 注意:现在你可能会发现一个问题,如果两个XX网站通过上面的步骤映射到了相同的8个点上,或者是有一部分点是重合的,这时候该怎么办?于是就出现了误报,也就是说A网站在12345678个点上全部置1,B网站通过同样的方式在23456789上全部置1,这时候B网站来了是不能确定是否包含的。这个逻辑相信各位都理解。这个是最基础的面试问题。 3、误报率 这一小节是稍微高级一点点,某中厂问到了一次,于是这一次就添加了进来。 通过上面的解释相信都大概了解的差不多了,其实就是hash函数映射,由于有hash冲突产生了误报率,误报率也就是判断失败的情况。 既然是由于hash冲突,那我把布隆过滤器的二进制向量调到很大,这样不就解决了嘛,但是由于数据量比较大,因此现在就要考虑一下误报率和存储效率之间选择一个折中值了。有一个计算公式如下:公式来源于github
假设位数组的长度为m,哈希函数的个数为k。检测某一元素是否在该集合中的误报率是: (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
