给你一组20亿个手机号,如何判断某个手机号是否在这组数中?

面试题简述

手上有20亿个手机号,现在需要支持高频查询:给定一个手机号,快速判断它是否在集合中。请设计方案。

考虑内存、查询速度、误判率、可扩展性,给出具体数据结构、内存估算、以及如何做到分布式处理。

面试官想听的

1、是否掌握大规模集合存在性检测常用方法。

2、是否能做内存、精读、延迟之间的权衡。

3、是否能给出可落地的方案。

面试示例回答

给20亿个手机号,我们先明确目标:是否允许少量误判?是否允许误报但不能漏报?查询QPS环境如何?

常用可选方案有三种主流路径:布隆过滤器 + 后备精确存储、磁盘索引、可压缩位图/哈希分桶。下面我说明下我设计的方案:

1、首先方案:Blloom Filter + 精确回查

2、Cuckoo Filter 或者 Quotient Filter

3、磁盘索引方案

4、可压缩位图方案

详细内容可跳转该链接查看详情:http://xhslink.com/o/6RwedX7ayDx

由浅入深分析

1、初级:知道 Bloom Filter 概念,即:以空间换时间且有一定的误报率。

2、中级:能做内存估算并解释误报率与位数关系;

3、高级:能简单说明不用方案的应用场景。

面试加分点

1、给出具体的内存估算(像上面24GB的数字),并说明如何分片部署。

2、说明两阶段查验流程和为什么这样能降低IO。

3、提出删除/更新场景的替代方案(Cuckoo、周期重建、增量日志)。

4、提到监控指标(布隆命中率、后端回查QPS、误判率)和如何自动调整(动态调整误判率)。

#大厂##面试##面经##春招##实习#
2025场景题复盘 文章被收录于专栏

带你复盘2025年大厂场景题面试,拆解面试官到底想听啥

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务