首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
小白White_
门头沟学院 Java
发布于宁夏
关注
已关注
取消关注
@Java大湿兄:
场景题:海量数据如何判重?
在海量数据如何确定一个值是否存在?这是一道非常经典的面试场景题。那怎么回答这个问题呢?接下来咱们就详细的聊一聊。参考答案判断一个值是否存在?通常有以下两种解决方案:使用哈希表:可以将数据进行哈希操作,将数据存储在相应的桶中。查询时,根据哈希值定位到对应的桶,然后在桶内进行查找。这种方法的时间复杂度为 O(1),但需要额外的存储空间来存储哈希表。如果桶中存在数据,则说明此值已存在,否则说明未存在。使用布隆过滤器:布隆过滤器是一种概率型数据结构,用于判断一个元素是否在集合中。它利用多个哈希函数映射数据到一个位数组,并将对应位置置为 1。查询时,只需要对待查询的数据进行哈希,并判断对应的位是否都为 1。如果都为 1,则该数据可能存在;如果有一个位不为 1,则该数据一定不存在。布隆过滤器的查询时间复杂度为 O(k),其中 k 为哈希函数的个数。相同点和不同点它们两的相同点是:它们都存在误判的情况。例如,使用哈希表时,不同元素的哈希值可能相同,所以这样就产生误判了;而布隆过滤器的特征是,当布隆过滤器说,某个数据存在时,这个数据可能不存在;当布隆过滤器说,某个数据不存在时,那么这个数据一定不存在。它们两的区别主要有以下几点:存储机制:哈希表使用一个数组来存储键值对,通过哈希函数将键映射到数组的索引位置,然后将值存储在对应的位置上。而布隆过滤器则使用一个位数组(或位向量),通过多个哈希函数将元素映射到位数组的多个位上。查询操作:哈希表在进行查询时,通过计算哈希值来定位键值对的存储位置,然后直接获取对应的值。查询时间复杂度通常为 O(1)。布隆过滤器在进行查询时,也通过多个哈希函数计算多个位,然后判断对应的位是否都为 1 来确定元素是否存在。查询时间复杂度为 O(k),其中 k 为哈希函数的个数。内存占用:哈希表需要根据数据规模来动态调整数组的大小,以保证存储效率。而布隆过滤器在预先设置位数组的大小后,不会随数据规模的增加而增长。因此布隆过滤器更适用于海量数据。结论哈希表和布隆过滤器都能实现判重,但它们都会存在误判的情况,但布隆过滤器存储占用的空间更小,更适合海量数据的判重。布隆过滤器实现原理布隆过滤器的实现,主要依靠的是它数据结构中的一个位数组,每次存储键值的时候,不是直接把数据存储在数据结构中,因为这样太占空间了,它是利用几个不同的无偏哈希函数,把此元素的 hash 值均匀的存储在位数组中,也就是说,每次添加时会通过几个无偏哈希函数算出它的位置,把这些位置设置成 1 就完成了添加操作。当进行元素判断时,查询此元素的几个哈希位置上的值是否为 1,如果全部为 1,则表示此值存在,如果有一个值为 0,则表示不存在。因为此位置是通过 hash 计算得来的,所以即使这个位置是 1,并不能确定是那个元素把它标识为 1 的,因此布隆过滤器查询此值存在时,此值不一定存在,但查询此值不存在时,此值一定不存在。并且当位数组存储值比较稀疏的时候,查询的准确率越高,而当位数组存储的值越来越多时,误差也会增大。位数组和 key 之间的关系,如下图所示:如何实现布隆过滤器?布隆过滤器的实现通常有以下两种方案:通过程序实现(内存级别方案):使用 Google Guava 库和 Apache Commons 库实现布隆过滤器。通过中间件实现(支持数据持久化):使用 Redis 4.0 之后提供的布隆过滤插件来实现,它的好处是支持持久化,数据不会丢失。Guava 实现布隆过滤器使用 Google Guava 库实现布隆过滤器总共分为以下两步:引入 Guava 依赖使用 Guava API 操作布隆过滤器具体实现如下。① 引入 Guava 依赖<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId></dependency>② 使用 Guava APIimport com.google.common.hash.BloomFilter;import com.google.common.hash.Funnels;public class BloomFilterExample { public static void main(String[] args) { // 创建一个布隆过滤器,设置期望插入的数据量为10000,期望的误判率为0.01 BloomFilter<String> bloomFilter = BloomFilter.create(Funnels.unencodedCharsFunnel(), 10000, 0.01); // 向布隆过滤器中插入数据 bloomFilter.put("data1"); bloomFilter.put("data2"); bloomFilter.put("data3"); // 查询元素是否存在于布隆过滤器中 System.out.println(bloomFilter.mightContain("data1")); // true System.out.println(bloomFilter.mightContain("data4")); // false }}在上述示例中,我们通过 BloomFilter.create() 方法创建一个布隆过滤器,指定了元素序列化方式、期望插入的数据量和期望的误判率。然后,我们可以使用 put() 方法向布隆过滤器中插入数据,使用 mightContain() 方法来判断元素是否存在于布隆过滤器中。小结在海量数据如何确定一个值是否存在?通常有两种解决方案:哈希表和布隆过滤器,而它们两都存在误判的情况,但布隆过滤器更适合海量数据的判断,因为它占用的数据空间更小。布隆过滤器的特征是:当布隆过滤器说,某个数据存在时,这个数据可能不存在;当布隆过滤器说,某个数据不存在时,那么这个数据一定不存在。
点赞 2
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
昨天 22:26
北京邮电大学 Java
百度二面
8.5你简单做个自我介绍。你是下半年研二是吧?学校是三年的是吧?专硕还是学硕啊?实习的时间这块有预期没有?那个项目是你自己做的、为了学习搞的,还是实验室导师推动一起搞的?你的研究方向是啥?今天有准备好一些大模型相关的知识吗?有启动项目没?你在这个项目里面承担什么角色?通过技术手段解决了哪些核心问题?这个项目的理想态是啥?做成理想态应该要解决哪些技术难点?如果通过 AI(大模型)来解,能承担哪些模块的角色?你在抢票里面的核心做了哪些技术?抢票这块如果是高并发,这个项目最后有没有投入到线上被用户访问到?这个项目要做成什么样的状态?发布是放到哪一个公司里面去应用还是什么?有没有做过一些反爬技术?针对...
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
08-09 12:05
美团笔试
字符串模拟很简单,直接秒了。后面一道数学期望题,一道树题。还是太折磨了,期望题看样例就看了十分钟,还没骗到分。。。树题倒是硬跑暴力,拿了点保底
xike:
字符串模拟暴超时,我是真没想到。
投递美团等公司10个岗位
点赞
评论
收藏
分享
06-22 21:02
广东药科大学 Java
请问这是在招奴隶吗
这种公司就赶紧避雷吧,有bug半夜也要起来?还学习腾讯,自己几斤几两不清楚吗
Java大菜狗:
纯纯招黑奴,一天还不到两百那么多要求,还不迟到早退,以为啥啊,给一点工资做一堆活,还以不拖欠员工工资为荣,这是什么值得骄傲的事情吗,纯纯***公司
点赞
评论
收藏
分享
08-08 21:49
滴滴_地图事业部_客户端开发(实习员工)
呜呜呜,周五的安慰来自慢🦶🏻
收了我吧目前面试记录过13挂0。下周二面抖音,估计要喜提第一挂了🤣
客户端小将:
集邮哥释放早一点,给兄弟们留口汤喝
点赞
评论
收藏
分享
08-09 12:05
西安电子科技大学 嵌入式工程师
去网吧笔试
因为最近在外面旅游,所以只能找了个网吧包间笔试,还现买了手机支架搞双机位,没想到小美让我用AI答题.....我网页搜索用了豆包,一言难尽....有兄弟也用的豆包吗
牛客55456580...:
笑死我也是在外面旅游,网吧面试
美团秋招笔试
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
总结常用的拖offer的几种话术
2.8W
2
...
8月份面经整理的算法高频题集合
7007
3
...
美团二笔还没发邮件
6423
4
...
实习生不能抢红包吗?
4601
5
...
快手秋招-后端一面
3548
6
...
8.13快手秋招Java后端二面记录
3464
7
...
快手 秋招 一面
3411
8
...
家里人一直跟我说要给领导买点东西,搞好关系
3364
9
...
大家离职都怎么开口的啊?
3007
10
...
救救孩子吧
3007
创作者周榜
更多
正在热议
更多
#
给26届的秋招建议
#
29789次浏览
827人参与
#
应届生初入职场,求建议
#
239139次浏览
2683人参与
#
实习的内耗时刻
#
45515次浏览
529人参与
#
发工资后,你做的第一件事是什么
#
71782次浏览
241人参与
#
工作上你捅过哪些篓子?
#
18443次浏览
121人参与
#
在职场上,你最讨厌什么样的同事
#
27263次浏览
193人参与
#
秋招投递记录
#
26646次浏览
300人参与
#
我的秋招“寄”录
#
37690次浏览
485人参与
#
你最近一次加班是什么时候?
#
79518次浏览
422人参与
#
秋招,不懂就问
#
10417次浏览
112人参与
#
网易求职进展汇总
#
112779次浏览
1063人参与
#
查收我的offer竞争力报告
#
195614次浏览
1291人参与
#
我的国央企投递进展
#
51814次浏览
312人参与
#
我的AI电子员工
#
12739次浏览
103人参与
#
独居后,你的生活是更好了还是更差了?
#
12072次浏览
167人参与
#
如果校招重来我最想改变的是
#
278264次浏览
2896人参与
#
你上一次给父母打电话是什么时候
#
11741次浏览
111人参与
#
规定下班时间vs实际下班时间
#
19391次浏览
152人参与
#
运营每日一题
#
90494次浏览
798人参与
#
如果你有一天可以担任公司的CEO,你会做哪三件事?
#
32365次浏览
488人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务