面试题
不安全网页的黑名单包含 100亿个黑名单网页, 每个网页的URL最多占64字节,现在想要实现一种网页过滤系统,可以根据网页的URL判断该网页是否在黑名单上, 请设计该系统。 要求该系统允许有万分之一一下的判断失误率,并且使用的额外控件不要超过30G。
分析:一般思路基本就是 将黑名单存入 哈希表 或者 数据库。但是显然与题设是不符合的。假设最差的情况, 每个URL占64个字节。
64字节(byte) * 100 亿 = 6400 亿 (byte) ≈ 640G 空间
很明显,容量远远超过了我们的要求。So, 当我们碰到下列的几种情况的时候:
- 网页黑名单系统
- 垃圾邮件过滤系统
- 爬虫的网址判断重复系统
- 容忍一定程度的失误率
- 对空间比较严格
面试官希望得到的答案往往是: 布隆过滤器。