最新要闻
- 进入聊天室是什么意思(进入聊天室)
- 聚焦:谈何和何谈有什么区别(谈何的意思)
- 昔日国内最强播放器!快播正式宣告破产 王欣早已放下:技术永远无罪
- 刘慈欣:未来科幻作家会被AI代替 说人有灵魂不过是自我安慰
- 219元鼠标卷王!达摩鲨M3三模无线鼠标图赏-天天时快讯
- 世界热议:四川省阿坝藏族羌族自治州黑水县2023-05-30 15:53发布雷电黄色预警
- 2023新一线城市名单官宣!具体有哪些?最新排名介绍! 天天关注
- canon(450d)-世界今头条
- 世界头条:乘联会:2023年4月乘用车新四化指数为78.7
- 离谱!宠物鳄鱼从20多层高楼坠落摔成重伤 科普:高空坠物有多危险|天天快看
- 新显卡摆烂 英伟达营收却大涨 老黄这是要抛弃玩家? 每日焦点
- 【环球聚看点】7699元 Intel蝰蛇峡谷迷你主机618大促:I7-12700H+A770M独显
- 焦点速递!高速上小孩拉了一下手刹 驾驶证直接被扣了
- 韩国批准微软收购动视暴雪:份额太小没威胁 环球快播
- 日照假期2日游,轻轻松松拿捏到位,攻略篇 世界热门
- 全球今头条!辽宁男篮队员韩德君籍贯(韩德君真实身高)
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
腾讯二面:有 40 亿个 QQ 号,限制 1G 内存,问如何去重?被问懵了!
40亿个QQ号,限制1G内存,如何去重?
40亿个unsigned int,如果直接用内存存储的话,需要:
(资料图)
4*4000000000 /1024/1024/1024 = 14.9G
,考虑到其中有一些重复的话,那1G的空间也基本上是不够用的。
想要实现这个功能,可以借助位图。
使用位图的话,一个数字只需要占用1个bit,那么40亿个数字也就是:
4000000000 * 1 /8 /1024/1024 = 476M
相比于之前的14.9G来说,大大的节省了很多空间。
比如要把我的QQ号"907607222"放到Bitmap中,就需要找到第907607222这个位置,然后把他设置成1就可以了。
这样,把40亿个数字都放到Bitmap之后,所有位置上是1的表示存在,不为1的表示不存在,相同的QQ号只需要设置一次1就可以了,那么,最终就把所有是1的数字遍历出来就行了。
什么是BitMap?有什么用?
位图(BitMap),基本思想就是用一个bit来标记元素,bit是计算机中最小的单位,也就是我们常说的计算机中的0和1,这种就是用一个位来表示的。
所谓位图,其实就是一个bit数组,即每一个位置都是一个bit,其中的取值可以是0或者1
像上面的这个位图,可以用来表示1,4,6:
如果不用位图的话,我们想要记录1,4,6 这三个整型的话,就需要用三个unsigned int,已知每个unsigned int占4个字节,那么就是3*4 = 12
个字节,一个字节有8 bit,那么就是 12*8 = 96
个bit。
所以,位图最大的好处就是节省空间。
位图有很多种用途,特别适合用在去重、排序等场景中,著名的布隆过滤器就是基于位图实现的。
但是位图也有着一定的限制,那就是他只能表示0和1,无法存储其他的数字。所以他只适合这种能表示ture or false的场景。
推荐一个开源免费的 Spring Boot 实战项目:
https://github.com/javastacks/spring-boot-best-practice
什么是布隆过滤器,实现原理是什么?
布隆过滤器是一种数据结构,用于快速检索一个元素是否可能存在于一个集合(bit 数组)中。
它的基本原理是利用多个哈希函数,将一个元素映射成多个位,然后将这些位设置为 1。当查询一个元素时,如果这些位都被设置为 1,则认为元素可能存在于集合中,否则肯定不存在
所以,布隆过滤器可以准确的判断一个元素是否一定不存在,但是因为哈希冲突的存在,所以他没办法判断一个元素一定存在。只能判断可能存在。
所以,布隆过滤器是存在误判的可能的,也就是当一个不存在的Hero元素,经过hash1、hash2和hash3之后,刚好和其他的值的哈希结果冲突了。那么就会被误判为存在,但是其实他并不存在。
想要降低这种误判的概率,主要的办法就是降低哈希冲突的概率及引入更多的哈希算法。
下面是布隆过滤器的工作过程:
1、初始化布隆过滤器
在初始化布隆过滤器时,需要指定集合的大小和误判率。布隆过滤器内部包含一个bit数组和多个哈希函数,每个哈希函数都会生成一个索引值。
2、添加元素到布隆过滤器
要将一个元素添加到布隆过滤器中,首先需要将该元素通过多个哈希函数生成多个索引值,然后将这些索引值对应的位设置为 1。如果这些索引值已经被设置为 1,则不需要再次设置。
3、查询元素是否存在于布隆过滤器中
要查询一个元素是否存在于布隆过滤器中,需要将该元素通过多个哈希函数生成多个索引值,并判断这些索引值对应的位是否都被设置为 1。如果这些位都被设置为 1,则认为元素可能存在于集合中,否则肯定不存在。
布隆过滤器的主要优点是可以快速判断一个元素是否属于某个集合,并且可以在空间和时间上实现较高的效率。但是,它也存在一些缺点,例如:
- 布隆过滤器在判断元素是否存在时,有一定的误判率。、
- 布隆过滤器删除元素比较困难,因为删除一个元素需要将其对应的多个位设置为 0,但这些位可能被其他元素共享。
应用场景
布隆过滤器因为他的效率非常高,所以被广泛的使用,比较典型的场景有以下几个:
1、网页爬虫:爬虫程序可以使用布隆过滤器来过滤掉已经爬取过的网页,避免重复爬取和浪费资源。
2、缓存系统:缓存系统可以使用布隆过滤器来判断一个查询是否可能存在于缓存中,从而减少查询缓存的次数,提高查询效率。布隆过滤器也经常用来解决缓存穿透的问题。
3、分布式系统:在分布式系统中,可以使用布隆过滤器来判断一个元素是否存在于分布式缓存中,避免在所有节点上进行查询,减少网络负载。
4、垃圾邮件过滤:布隆过滤器可以用于判断一个邮件地址是否在垃圾邮件列表中,从而过滤掉垃圾邮件。
5、黑名单过滤:布隆过滤器可以用于判断一个IP地址或手机号码是否在黑名单中,从而阻止恶意请求。
如何使用
Java中可以使用第三方库来实现布隆过滤器,常见的有Google Guava库和Apache Commons库以及Redis。
如Guava:
import com.google.common.hash.BloomFilter;import com.google.common.hash.Funnels;public class BloomFilterExample { public static void main(String[] args) { // 创建布隆过滤器,预计插入100个元素,误判率为0.01 BloomFilter bloomFilter = BloomFilter.create(Funnels.stringFunnel(), 100, 0.01); // 插入元素 bloomFilter.put("Lynn"); bloomFilter.put("666"); bloomFilter.put("八股文"); // 判断元素是否存在 System.out.println(bloomFilter.mightContain("Lynn")); // true System.out.println(bloomFilter.mightContain("张三")); // false }}
Apache Commons:
import org.apache.commons.lang3.StringUtils;import org.apache.commons.collections4.BloomFilter;import org.apache.commons.collections4.functors.HashFunctionIdentity;public class BloomFilterExample { public static void main(String[] args) { // 创建布隆过滤器,预计插入100个元素,误判率为0.01 BloomFilter bloomFilter = new BloomFilter<>(HashFunctionIdentity.hashFunction(StringUtils::hashCode), 100, 0.01); // 插入元素 bloomFilter.put("Lynn"); bloomFilter.put("666"); bloomFilter.put("八股文"); // 判断元素是否存在 System.out.println(bloomFilter.mightContain("Lynn")); // true System.out.println(bloomFilter.mightContain("张三")); // false }}
Redis中可以通过Bloom模块来使用,使用Redisson可以:
Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379");RedissonClient redisson = Redisson.create(config);RBloomFilter bloomFilter = redisson.getBloomFilter("myfilter");bloomFilter.tryInit(100, 0.01);bloomFilter.add("Lynn");bloomFilter.add("666");bloomFilter.add("八股文");System.out.println(bloomFilter.contains("Lynn"));System.out.println(bloomFilter.contains("张三"));redisson.shutdown();
首先创建一个RedissonClient对象,然后通过该对象获取一个RBloomFilter对象,使用tryInit方法来初始化布隆过滤器,指定了最多能添加的元素数量为100,误判率为0.01。
然后,使用add方法将元素"犬小哈"、"666"和"八股文"添加到布隆过滤器中,使用contains方法来检查元素是否存在于布隆过滤器中。
或者Jedis也可以:
Jedis jedis = new Jedis("localhost");jedis.bfCreate("myfilter", 100, 0.01);jedis.bfAdd("myfilter", "Lynn");jedis.bfAdd("myfilter", "666");jedis.bfAdd("myfilter", "八股文");System.out.println(jedis.bfExists("myfilter", "Lynn"));System.out.println(jedis.bfExists("myfilter", "张三"));jedis.close();
版权声明:本文为CSDN博主「code.song」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/songmulin/article/details/130814507
近期热文推荐:
1.1,000+ 道 Java面试题及答案整理(2022最新版)
2.劲爆!Java 协程要来了。。。
3.Spring Boot 2.x 教程,太全了!
4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!
5.《Java开发手册(嵩山版)》最新发布,速速下载!
觉得不错,别忘了随手点赞+转发哦!
关键词:
-
腾讯二面:有 40 亿个 QQ 号,限制 1G 内存,问如何去重?被问懵了!
>40亿个QQ号,限制1G内存,如何去重?40亿个unsignedint,如果直接用内存存储的话,需要:`4*4000000000 10
来源: 腾讯二面:有 40 亿个 QQ 号,限制 1G 内存,问如何去重?被问懵了!
14)系统函数|环球快播
数据的新时代:可交互大屏展现数字孪生的奇妙效果
进入聊天室是什么意思(进入聊天室)
聚焦:谈何和何谈有什么区别(谈何的意思)
昔日国内最强播放器!快播正式宣告破产 王欣早已放下:技术永远无罪
刘慈欣:未来科幻作家会被AI代替 说人有灵魂不过是自我安慰
219元鼠标卷王!达摩鲨M3三模无线鼠标图赏-天天时快讯
世界热议:四川省阿坝藏族羌族自治州黑水县2023-05-30 15:53发布雷电黄色预警
2023新一线城市名单官宣!具体有哪些?最新排名介绍! 天天关注
倒计时7天!AIRIOT新品发布会,6月6日北京见。 环球要闻
焦点简讯:MySQL之DQL数据查询操作
【环球新要闻】Kali渗透Windows服务器
⌈力扣⌋删除字符串中的所有相邻重复项|当前快播
canon(450d)-世界今头条
世界头条:乘联会:2023年4月乘用车新四化指数为78.7
离谱!宠物鳄鱼从20多层高楼坠落摔成重伤 科普:高空坠物有多危险|天天快看
新显卡摆烂 英伟达营收却大涨 老黄这是要抛弃玩家? 每日焦点
【环球聚看点】7699元 Intel蝰蛇峡谷迷你主机618大促:I7-12700H+A770M独显
焦点速递!高速上小孩拉了一下手刹 驾驶证直接被扣了
韩国批准微软收购动视暴雪:份额太小没威胁 环球快播
日照假期2日游,轻轻松松拿捏到位,攻略篇 世界热门
Python 实现 m3u8 视频下载_全球消息
AIGC下的低代码赛道,你我皆是拓荒人
天天观点:【智能软件安全】上海道宁为您带来智能软件安全平台——Veracode,帮助您全面地保护您构建和管理地应用程序
全球即时:商品日报(5月30日):沪锡续涨近3% 纯碱反弹驱动不足再度转跌
全球今头条!辽宁男篮队员韩德君籍贯(韩德君真实身高)
总投入8700多万元 南安一家医院预计年底前投用-最新消息
40年传奇落幕:《夺宝奇兵:命运转盘》国内定档6月30日 环球热头条
618遇上毕业季:这三款高性价比的华硕无畏轻薄本 你值得拥有
全球百事通!2023新一线城市名单官宣: 北方仅4城上榜 有你的家乡吗?
神舟十六号与空间站完成交会对接:3名航天员即将进入天和核心舱|每日看点
猪场夜间电闸跳闸 高温致五千头猪死亡:损失上千万|每日快播
天天快报!刮腻子和刮完腻子有什么区别 刮大白和刮腻子区别
【Haxe】(一)VSCode 搭建 Haxe 开发环境
什么是SSCC码
详解RocketMQ 顺序消费机制 快看点
每日精选:当AI开始制药:研发周期可缩短一半,仍无任何新药面世
【报资讯】每日机构分析:5月30日
老司机注意!昆明警方紧盯酒驾醉驾等严重交通违法行为
6989元起 华硕灵耀13 2023深湖蓝配色上架:2.8K OLED屏
世界观热点:业务能力超强!两只边牧协同驱赶数百只羊:无一走散
笔记本为何还没充满就不再充电了?原因揭开|微动态
曾拒绝生产SUV 法拉利:并不在乎自动驾驶
一代回忆!快播公司破产注销
直播卖酒用“茅台酒厂”误导消费者,北京福气连连公司被罚30万_今日快讯
如何用ReadWriteLock实现一个通用的缓存中心?|环球今热点
速读:13)流程控制语句
一文详解 Sa-Token 中的 SaSession 对象-世界百事通
世界观察:第十二单元 常用API
持球还得练练!杰伦抢七战出现8失误 NBA历史第二多 即时
预算不够免签来凑!米兰开启免签大法,夏窗欲网罗多名自由球员
史莱克七怪神装公布,小舞二次发育,宁荣荣最美,小奥烟熏妆差评-当前热门
环球消息!演唱会门票秒罄!黄牛党捞钱术升级
速看:日本专家三年研究:中学生入学得到手机脑力直接停滞在小学
天天消息!网友评新一代LCD神机Redmi Note 12T Pro:卢伟冰焊门很准
第十一单元 面向对象三:继承与多态_世界热资讯
NTP网络校时服务器 (GPS+北斗+恒温晶振)双系统设计与研究|看点
焦点简讯:[javascript/html] HTML中Location对象详解
省“春蕾计划+我的书房”项目在盐城东台启动 热文
环球资讯:从华为离职创业的天才少年刚拿了百度投资:估值被曝已超独角兽
曾遭霸凌的解说YammerS离世 DOTA2官微回应:深感痛心_全球观天下
每日热议!兄妹四人同时查出肠道肿瘤:1/4肠癌患者受家族因素影响
天玑9300要绝杀:采用4+4全大核架构 性能狙击A17功耗大降
京西产业引导基金签约发布 规模10.1亿元|当前热门
注意防暑!多地高温已超40℃
诚意满满 微星发布7大类PC新品:美与性能兼备 世界速讯
续航128公里 雅迪联手保时捷推出电动摩托车:卖4.5万
世界动态:丰田带头抵触汽车全面电动化 多家日本公司站队支持:不环保、自欺欺人
一脚踏入软绵云朵:361° 游鲸飞标洞洞鞋103元3.69折抄底
热门:易基因:全基因组ChIP-seq分析揭示细菌转录因子PhoB的基因内结合位点|mBio
直播源码平台搭建技术分享之直播短信功能
文档在线预览(三)使用js前端实现word、excel、pdf、ppt 在线预览|世界报资讯
天天看点:用一杯星巴克的钱,训练自己私有化的ChatGPT
mysql设置字段的排序规则对大小写敏感_焦点精选
51分09秒跑5公里! 96岁老太打破年龄组世界纪录
上海一老人误将地铁扶手当售卖机:拿起手机扫码
全球热头条丨AMD定制处理器瞩目:华硕ROG Ally掌机内部结构首次公布
鲁大师久用流畅度测试排名出炉:OPPO Find X6 Pro第一 天天短讯
环球新消息丨飞机起飞前男子以照顾师傅为由滞留商务舱:称不需要对号入座
神舟十六发射成功!03 你还有七个学生没毕业:网友点赞导师到太空跑数据去了
新洁能:5月29日融券净卖出4.04万股,连续3日累计净卖出4.99万股
Java实现打包压缩文件或文件夹生成zip以实现多文件批量下载
大语言模型技术原理-环球视讯
MySQL之运算符大全|每日速讯
第八单元 数组与集合
(Java)记一次通过API递归分页“爬取”网页数据的开发经历
神舟十六号发射圆满成功:大红屏再次点亮 环球新资讯
全脂/低脂可选:特仑苏纯牛奶2.7元/盒大促(商超6元)
中科院院士:电动车主可以往外卖电 一年能卖4000元-焦点简讯
世界短讯!“十项全能”是怎样一种体验?华为Mate X3绝对是大屏折叠旗舰天花板
世界视点!小米MIX Fold 3曝光:屏下摄像头+潜望长焦 再无短板
每日热讯!电力板块异动拉升 世茂能源两连板
企业内训一体化解决方案,布道师教学实训云平台【开源版上线】|今日热闻
世界快报:JS中的事件监听
最野性的福特SUV!探险者昆仑巅峰版上市:售39.98万
新资讯:媒体评“剩菜盲盒”被疯抢 越来越多年轻人喜爱:便宜、杜绝浪费食品
荣耀赵明:MagicOS 8.0会有巨大进步 某些层面跟鸿蒙流畅性不相上下-环球快资讯
天天实时:给老外来点中国车 比亚迪ATTO 3成海外多国销冠:跻进全球前10
每日简讯:PS5国内白菜价:但PS5游戏盘开始涨价了