最新要闻
- 世界今热点:对建造清代故宫影响最大的工匠,原来是这一家人!
- 合资品牌的无奈!奥迪之后丰田挂牌:我们也有纯电动请往里进
- 苹果Mac OS被指碰瓷WinXP经典壁纸:还真不是玩笑
- 世界快资讯:年轻人压力较大 乘联会崔东树:中国车市还得指望中老年人
- 又一新能源车企被申请破产!曾被称为“四小龙”之一
- 珠碱商品报价动态(2023-06-17)
- 看点:只需4年 PCIe 7.0硬盘有望追上DDR5内存:性能狂飙
- 人不在学校却被抬到校长面前拨穗 全场欢呼鼓掌:不想让舍友留下遗憾
- 嫌榴莲太臭?可它这3个好处“香”到不行!
- 《闪电侠》豆瓣8分:超七成观众给出4星以上好评
- 生来上等命,前有贵人,后有靠山,注定好运不断的星座,日后必成大器
- 3999元起 蔚来天穹车尾帐发布:10分钟快速搭建“一室一厅”
- 腾讯、网易游戏公布端午未成年人限玩时间:高考后准大学生仍被限
- 天天快看:中国车第一次!领克03高性能特别版首发:原厂防滚架可上路
- 酷睿i9-13700H VS.锐龙9 7940H全面对比:AMD仍有很长的路要走
- 天天热推荐:布林肯冀访华改善中美沟通避免引发冲突 中方促美尊重核心关切
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
腾讯太狠:40亿QQ号, 给你1G内存,怎么去重?
文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版为您奉上珍贵的学习资源 :
免费赠送 :《尼恩Java面试宝典》持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备免费赠送 :《尼恩技术圣经+高并发系列PDF》,帮你 实现技术自由,完成职业升级, 薪酬猛涨!加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷1)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷2)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷3)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
免费赠送 资源宝库: Java 必备 百度网盘资源大合集 价值>10000元 加尼恩领取
(资料图片仅供参考)
腾讯太狠:40亿QQ号, 1G内存,怎么去重?
说在前面
在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如腾讯、美团、阿里、拼多多、极兔、有赞、希音的面试资格,遇到一几个很重要的面试题:
- 40亿QQ号如何设计算法去重,相同的QQ号码仅保留一个,内存限制为1个G?
- 40亿个QQ号,限制1G内存,如何去重?
与之类似的、其他小伙伴遇到过的问题还有:
- 60亿个URL,限制1G内存,如何去重?
- 文件中有40亿个QQ号码,请设计算法对QQ号码去重,相同的QQ号码仅保留一个,内存限制1G.
- 等等等等.....
这里尼恩给大家做一下系统化、体系化的梳理,使得大家可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”。
也一并把这个题目以及参考答案,收入咱们的 《尼恩Java面试宝典》V80版本,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。
最新《尼恩 架构笔记》《尼恩高并发三部曲 》《尼恩Java面试宝典》 的PDF文件,请关注本公众号【技术自由圈】获取,暗号:领电子书
本文目录
目录- 腾讯太狠:40亿QQ号, 1G内存,怎么去重?
- 说在前面
- 本文目录
- 问题场景分析
- 方式1: 使用BitMap进行海量数据去重
- 什么是BitMap?有什么用?
- 如何使用BitMap进行40亿个QQ号去重?
- BitMap位图的优势和不足
- 方式2: 使用布隆过滤器进行海量数据去重
- 什么是布隆过滤器,实现原理是什么?
- 什么是哈希冲突
- 布隆过滤器的工作过程
- 布隆过滤器举例
- 布隆过滤器应用场景
- 如何实现实现布隆过滤器
- Guava版本的布隆过滤器:
- Redisson版本的布隆过滤器
- Jedis版本的布隆过滤器
- 海量数据去重场景:布隆过滤器和位图如何选择
- 说在最后
- 参考文献:
- 技术自由的实现路径:
- 实现你的 响应式 自由:
- 实现你的 spring cloud 自由:
- 实现你的 linux 自由:
- 实现你的 网络 自由:
- 实现你的 分布式锁 自由:
- 实现你的 王者组件 自由:
- 实现你的 面试题 自由:
- 获取11个技术圣经PDF:
问题场景分析
分析一下QQ号码的数量:
腾讯的QQ号都是4字节正整数 32个bit位,所以QQ号码的个数是43亿左右,理论值2^32-1个,
又因为是无符号的,翻倍了一下,所以43亿左右。
回顾一下问题:40亿QQ号如何设计算法去重,相同的QQ号码仅保留一个,内存限制为1个G?
问题的本质: 这个就是一个海量数据去重的问题, 但是有一个受限条件, 内存限制为1个G。
解决方案有很多,但是主流的方案有两种:
- 方案1: 使用BitMap进行海量数据去重
- 方案2: 使用布隆过滤器进行海量数据去重
方式1: 使用BitMap进行海量数据去重
首先看看,什么是BitMap?BitMap的使用场景
什么是BitMap?有什么用?
所谓位图(BitMap)其实就是一个bit数组,即每一个位置都是一个bit,其中的取值可以是0或者1
位图(BitMap)思想:就是用一个bit来标记元素,bit是计算机中最小的单位,也就是我们常说的计算机中的0和1,这种就是用一个位来表示的。
像上面的这个位图,可以用来记录三个数:1,4,6。 为啥呢? 第1位、第4位、第6位 三个位置为 1。
如果不用位图的话,我们想要记录1,4,6 这三个整型的话,怎么办?
就需要用三个unsigned int,已知每个unsigned int占4个字节,那么就是3*4 = 12
个字节,一个字节有8 bit,那么就是 12*8 = 96
个bit。
结论是:位图最大的好处就是节省空间。这里节省了 12倍。
如何使用BitMap进行40亿个QQ号去重?
回到问题:40亿个QQ号,限制1G内存,如何去重?
前面分析过:一个qq号码,就是一个unsigned int。
40亿个QQ号,就是40亿个 unsigned int,一个 unsigned int占用4个字节。
假如,40亿个 unsigned int直接用内存存储的话,需要多少内存呢?
简单计算一下:
4000000000*4 /1024/1024/1024 = 14.9G
所以,如果直接把 40亿个QQ号放入内存,需要15个G,1G的空间也是不够用的。
那么,怎么办呢?
qq号是数字,刚好可以使用bitmap。
比如要把一个QQ号"12345678"放到Bitmap中,就需要找到第12345678这个位置,然后把他设置成1就可以了。
这样,把40亿个数字都放到Bitmap之后,位置上是1的表示存在,不为1的表示不存在。
相同的QQ号只需要设置一次1就可以了,那么,最终就把所有是1的数字遍历出来就行了。
使用位图的话,一个数字只需要占用1个bit,那么40亿个数字也就是:
4000000000 * 1 /8/1024/1024 = 476M
相比于之前的14.9G来说,大大的节省了很多空间。
大约节省了 30倍的空间。
BitMap位图的优势和不足
位图(BitMap),基本思想就是用一个bit来标记元素,bit是计算机中最小的单位,也就是我们常说的计算机中的0和1,这种就是用一个位来表示的。
BitMap位图的主要优势在于它可以非常高效地进行集合运算。具体来说,如果我们需要对一个集合进行多次交集、并集、差集等操作,使用 BitMap 可以将这些操作的时间复杂度降低到 O(1) 级别,而传统的集合实现则需要 O(n) 的时间复杂度,其中 n 是集合的大小。
此外,BitMap 还可以节省存储空间。对于一个只包含 0 和 1 的集合,我们可以使用一个比特位来表示一个元素是否在集合中,这样可以将集合的存储空间降低到原来的 1/8 左右。
所以,位图最大的好处就是节省空间。
位图有很多种用途,特别适合用在去重、排序等场景中,著名的布隆过滤器就是基于位图实现的。
但是位图也有着一定的限制,那就是他只能表示0和1,无法存储其他的数字。
所以BitMap只适合这种能表示ture or false的场景。
其次,BitMap 只适用于值域比较小的集合,因为如果值域过大,BitMap 的存储空间也会过大,这时候使用布隆过滤器可能更为合适。
最后,BitMap 不支持删除操作,因为删除一个元素需要将对应的比特位设置为 0,这可能会影响到其他元素的状态。
方式2: 使用布隆过滤器进行海量数据去重
如果 值域过大,BitMap 的存储空间也会过大,这个时候,需要使用布隆过滤器,进一步进行空间的压缩。
什么是布隆过滤器,实现原理是什么?
布隆过滤器是一种数据结构,用于快速检索一个元素是否可能存在于一个集合(bit 数组)中。
它的基本原理是利用多个哈希函数,将一个元素映射成多个位,然后将这些位设置为 1。
本质上:布隆过滤器内部包含一个bit数组和多个哈希函数,每个哈希函数都会生成一个index 索引值。
由两个部分组成:
- 一个bit数组, 存储数据
- 多个哈希函数, 计算key的 index 索引
如下图所示,里边有三个key: 尼恩Java面试宝典、史上最棒、八股文
问题:如何做 exist(key)这种存在性的判定呢?
答案:当查询一个元素时,如果这些位都被设置为 1,则认为元素可能存在于集合中,否则肯定不存在
比如说:
exist("尼恩Java面试宝典") 的结果为 true
但是: 布隆过滤器可以准确的判断一个元素是否一定不存在。注意,是判断一定不存在。
为啥呢? 因为哈希冲突的存在。
什么是哈希冲突
什么是 哈希冲突? 哈希冲突是指两个或多个不同的key 键值被映射到了同一个哈希值。
下面有个例子:
比如说,来了一个新的key "技术自由圈" ,现在要判是否存在?
exist("技术自由圈") 的结果为 true
结果是存在的。
为啥呢?
hash1("技术自由圈")=1,为啥呢? 这个之前被 hash1("史上最棒"), hash2("尼恩Java面试宝典")设置过了,设置两次1.
hash2("技术自由圈")=1,为啥呢? 这个之前被 hash2("史上最棒")设置过了1.
hash3("技术自由圈")=1,为啥呢? 这个之前被 hash1("尼恩Java面试宝典")设置过了1.
由于, hash1("技术自由圈")=1 、 hash2("技术自由圈")=1、 hash3("技术自由圈")=1,所以,exist("技术自由圈") 的结果为 true。
可以,key "技术自由圈" 之前真的没有设置过,是不存在的。
结论是:由于hash冲突,布隆过滤器没办法判断一个元素一定存在。只能判断可能存在。或者判不存在。
如何降低存在性误判的概率
想要降低这种存在性误判的概率,主要的办法就是降低哈希冲突的概率及引入更多的哈希算法。
布隆过滤器的工作过程
下面是布隆过滤器的工作过程:
1、初始化布隆过滤器
在初始化布隆过滤器时,需要指定集合的大小和误判率。
2、添加元素到布隆过滤器
要将一个元素添加到布隆过滤器中,首先需要将该元素通过多个哈希函数生成多个索引值,然后将这些索引值对应的位设置为 1。如果这些索引值已经被设置为 1,则不需要再次设置。
3、查询元素是否存在于布隆过滤器中
要查询一个元素是否存在于布隆过滤器中,需要将该元素通过多个哈希函数生成多个索引值,并判断这些索引值对应的位是否都被设置为 1。如果这些位都被设置为 1,则认为元素可能存在于集合中,否则肯定不存在。
布隆过滤器的主要优点是可以快速判断一个元素是否属于某个集合,并且可以在空间和时间上实现较高的效率。
但是,它也存在一些缺点,例如:
(1).布隆过滤器在判断元素是否存在时,有一定的误判率。、
(2).布隆过滤器删除元素比较困难,因为删除一个元素需要将其对应的多个位设置为 0,但这些位可能被其他元素共享。
布隆过滤器举例
1.布隆过滤器初始状态
布隆过滤器 也是用一个二进制数组进行数据存储。
一开始,二进制数组里是没有值的
2.存储操作
假设,存储一个数据数据hello
首先,对数据hello经过三次hash运算,分别得到三个值(假设1,3,5)。
然后,在对应的二进制数组里,将下标为1,3,5的值置为1。
3.查询操作
对于数据hello。对数据hello经过三次hash运算,分别得到三个值(假设1,3,5)。
在二进制数组里,将下标为1,3,5的值取出来,如果都为1,则表示该数据已经存在。
4.删除操作
布隆过滤器在使用的时候,不建议进行删除操作。
布隆过滤器里边的部分bit位,完全可能被复用。
假设两个 key: hello、world,如果hash2(hello)结果为3,hash2(world)结果也为3,那么如果删除了hello的hash2(hello)值,就意味着world的hash2(world)值也会被其删除。造成数据的误删。
5.误判率
假设保存两个值,hello和world。hello对应的三个 hash 计算后的index为1,3,5,world三个 hash 对应的index(也就是hash计算后的值)也为1,3,5 , 那么 exist(world) = true ,就是一种误判
布隆过滤器应用场景
布隆过滤器因为他的效率非常高,所以被广泛的使用,比较典型的场景有以下几个:
1、网页爬虫:爬虫程序可以使用布隆过滤器来过滤掉已经爬取过的网页,避免重复爬取和浪费资源。
2、缓存系统:缓存系统可以使用布隆过滤器来判断一个查询是否可能存在于缓存中,从而减少查询缓存的次数,提高查询效率。布隆过滤器也经常用来解决缓存穿透的问题。
3、分布式系统:在分布式系统中,可以使用布隆过滤器来判断一个元素是否存在于分布式缓存中,避免在所有节点上进行查询,减少网络负载。
4、垃圾邮件过滤:布隆过滤器可以用于判断一个邮件地址是否在垃圾邮件列表中,从而过滤掉垃圾邮件。
5、黑名单过滤:布隆过滤器可以用于判断一个IP地址或手机号码是否在黑名单中,从而阻止恶意请求。
如何实现实现布隆过滤器
Java中可以使用第三方库来实现布隆过滤器,常见的有Google Guava库和Apache Commons库以及Redis。
Guava版本的布隆过滤器:
尼恩特别说明: 这个版本的布隆过滤器,尼恩指导简历的时候,指导小伙伴用过。
Guava 20.0版本已经引入了布隆过滤器(BloomFilter)的实现。你可以使用以下步骤来使用Guava的布隆过滤器:
- 引入Guava依赖:
com.google.guava guava 20.0
- 创建布隆过滤器:
int expectedInsertions = 1000000;double fpp = 0.01;BloomFilter bloomFilter = BloomFilter.create(Funnels.stringFunnel(Charset.defaultCharset()), expectedInsertions, fpp);
其中,expectedInsertions
表示预期插入的元素数量,fpp
表示误判率(false positive probability),Funnels.stringFunnel(Charset.defaultCharset())
表示元素类型为String。
- 添加元素:
bloomFilter.put("hello");bloomFilter.put("world");
- 判断元素是否存在:
bloomFilter.mightContain("hello"); // truebloomFilter.mightContain("world"); // truebloomFilter.mightContain("test"); // false
注意,布隆过滤器判断元素是否存在,有一定的误判率。如果mightContain
返回false
,则可以确定该元素一定不存在;如果mightContain
返回true
,则该元素可能存在,需要进一步验证。
- 序列化和反序列化:
// 序列化FileOutputStream fos = new FileOutputStream("bloom_filter.bin");ObjectOutputStream oos = new ObjectOutputStream(fos);oos.writeObject(bloomFilter);oos.close();// 反序列化FileInputStream fis = new FileInputStream("bloom_filter.bin");ObjectInputStream ois = new ObjectInputStream(fis);BloomFilter bloomFilter2 = (BloomFilter) ois.readObject();ois.close();
注意,序列化和反序列化的过程中,需要将BloomFilter
类实现Serializable
接口。
Redisson版本的布隆过滤器
Redisson 是一个基于 Redis 的 Java 客户端,提供了丰富的分布式对象和服务,其中包括布隆过滤器。Redisson 的布隆过滤器实现了标准的布隆过滤器算法,并提供了一些额外的功能,如自动扩容和持久化等。
使用 Redisson 的布隆过滤器非常简单,只需要创建一个 RedissonClient 对象,然后通过该对象获取一个 RBloomFilter 对象即可。
RBloomFilter 提供了一系列的方法,包括添加元素、判断元素是否存在、清空过滤器等。
以下是一个简单的使用 Redisson 布隆过滤器的示例代码:
// 创建 Redisson 客户端Config config = new Config();config.useSingleServer().setAddress("redis://127.0.0.1:6379");RedissonClient redisson = Redisson.create(config);// 获取布隆过滤器对象RBloomFilter bloomFilter = redisson.getBloomFilter("bloom-filter");// 初始化布隆过滤器,设置预计元素数量和误判率bloomFilter.tryInit(10000, 0.03);// 添加元素bloomFilter.add("hello");bloomFilter.add("world");// 判断元素是否存在System.out.println(bloomFilter.contains("hello"));System.out.println(bloomFilter.contains("redis"));// 清空过滤器bloomFilter.delete();
需要注意的是,Redisson 的布隆过滤器并不支持动态修改预计元素数量和误判率,因此在初始化时需要仔细考虑这两个参数的取值。
Jedis版本的布隆过滤器
如果没有用Redisson, 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();
由于布隆过滤器存在一定的误判率,因此不能完全替代传统的数据结构,应该根据具体应用场景进行选择。
海量数据去重场景:布隆过滤器和位图如何选择
布隆过滤器和位图都是常用的数据结构,但它们的应用场景和实现方式不同。
布隆过滤器是一种概率型数据结构,用于判断一个元素是否存在于一个集合中。但有一定的误判概率。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。
位图是一种简单的数据结构,用于表示一个二进制序列。它通过一个比特位数组来表示一个集合,其中每个比特位表示一个元素是否存在于集合中。当需要判断一个元素是否存在于集合中时,只需要检查对应的比特位是否为 1 或 0 即可。
相比之下,布隆过滤器的空间效率更高,但存在一定的误判概率;而位图的空间效率较低,但不存在误判。因此,在实际应用中,需要根据具体的场景选择合适的数据结构。
说在最后
海量数据去重的的方案,是非常常见的面试题。
以上2大方案,如果大家能对答如流,如数家珍,基本上 面试官会被你 震惊到、吸引到。
最终,让面试官爱到 “不能自已、口水直流”。 offer, 也就来了。
学习过程中,如果有啥问题,大家可以来 找 40岁老架构师尼恩交流。
参考文献:
清华大学出版社 《尼恩 Java 高并发核心编程 卷2 加强版》PDF
4000页《尼恩 Java面试宝典》中 专题29 多线程 面试专题PDF
[1]. https://www.infoq.cn/article/1afyz3b6hnhprrg12833
[2].https://www.iamle.com/archives/2900.html
[3].https://blog.51cto.com/lianghecai/4755693
[4].https://qinyuanpei.github.io/posts/1333693167/
[5].https://github.com/alibaba/canal/wiki/ClientAdapter
技术自由的实现路径:
实现你的 响应式 自由:
《响应式圣经:10W字,实现Spring响应式编程自由》
这是老版本 《Flux、Mono、Reactor 实战(史上最全)》
实现你的 spring cloud 自由:
《Spring cloud Alibaba 学习圣经》 PDF
《分库分表 Sharding-JDBC 底层原理、核心实战(史上最全)》
《一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之间混乱关系(史上最全)》
实现你的 linux 自由:
《Linux命令大全:2W多字,一次实现Linux自由》
实现你的 网络 自由:
《TCP协议详解 (史上最全)》
《网络三张表:ARP表, MAC表, 路由表,实现你的网络自由!!》
实现你的 分布式锁 自由:
《Redis分布式锁(图解 - 秒懂 - 史上最全)》
《Zookeeper 分布式锁 - 图解 - 秒懂》
实现你的 王者组件 自由:
《队列之王: Disruptor 原理、架构、源码 一文穿透》
《缓存之王:Caffeine 源码、架构、原理(史上最全,10W字 超级长文)》
《缓存之王:Caffeine 的使用(史上最全)》
《Java Agent 探针、字节码增强 ByteBuddy(史上最全)》
实现你的 面试题 自由:
4000页《尼恩Java面试宝典 》 40个专题
获取11个技术圣经PDF:
关键词:
腾讯太狠:40亿QQ号, 给你1G内存,怎么去重?
天天热点评!ASP.NET Core MVC 从入门到精通之Identity入门
世界今热点:对建造清代故宫影响最大的工匠,原来是这一家人!
合资品牌的无奈!奥迪之后丰田挂牌:我们也有纯电动请往里进
苹果Mac OS被指碰瓷WinXP经典壁纸:还真不是玩笑
世界快资讯:年轻人压力较大 乘联会崔东树:中国车市还得指望中老年人
又一新能源车企被申请破产!曾被称为“四小龙”之一
珠碱商品报价动态(2023-06-17)
看点:只需4年 PCIe 7.0硬盘有望追上DDR5内存:性能狂飙
人不在学校却被抬到校长面前拨穗 全场欢呼鼓掌:不想让舍友留下遗憾
嫌榴莲太臭?可它这3个好处“香”到不行!
《闪电侠》豆瓣8分:超七成观众给出4星以上好评
生来上等命,前有贵人,后有靠山,注定好运不断的星座,日后必成大器
3999元起 蔚来天穹车尾帐发布:10分钟快速搭建“一室一厅”
腾讯、网易游戏公布端午未成年人限玩时间:高考后准大学生仍被限
天天快看:中国车第一次!领克03高性能特别版首发:原厂防滚架可上路
酷睿i9-13700H VS.锐龙9 7940H全面对比:AMD仍有很长的路要走
天天热推荐:布林肯冀访华改善中美沟通避免引发冲突 中方促美尊重核心关切
今日热门!分心驾驶致5人身亡 家属质疑10个气囊全未弹开 丰田销售:后方撞击不能触发
深圳邮局海关查获23只外来毒虫!内含秘鲁巨人蜈蚣 天天通讯
宣布对西安工厂投资43亿元:消息称美光也要向印度投资10亿美元
韩方曝出:福岛核污水超标2万倍
比小米便宜一半!TCL雷鸟Mini LED电视85英寸只要7599元 焦点简讯
理想L7/8/9魔毯空气悬挂2.0实测:防刹车点头来了 _环球滚动
GPT-4满分通过MIT本科数学考试!这套提示词火了
看热讯:10万出头续航505km 江淮钇为3上市:打的就是比亚迪海豚
不靠高精地图!小鹏汽车演示北京无图区智能辅助驾驶:稳如老司机_全球今亮点
Android-JNI开发概论-动态
鲍威尔_1937~_关于鲍威尔_1937~简述_消息
全球今日讯!华为NCA智能驾驶来了!余承东:超越特斯拉FSD 这15个城市率先体验
vivo X90s跑分出炉:165万安卓性能天花板!领先20万-全球实时
从泰山弃将到亚泰宠儿,莱昂纳多逆袭霸榜,机会总留给有准备的人-每日速递
软件开发人员必须阅读的20本书_每日速看
快资讯丨语音社交源码知识语音房间功能的实现
《安富莱嵌入式周报》第315期:开源USB高速分析仪,8GHz示波器开发, 600行C编写RISC-V内核,英特尔推出用于开发人员等宽字体,便携物联网监测器_
韩国出现地产危机房价暴跌近20%?可以“免费住”的全租房模式暗藏风险
网友吐槽“高考后还要被防沉迷” :腾讯游戏官方高情商回应
8粽+4咸蛋21元:五芳斋旗下端午礼盒大促
美司法部申请保护令动议,要求阻止特朗普公开机密文件
上周纯碱期价有所下跌
从《闪电侠》到《蝙蝠侠》
货车撞上奔驰反被奔驰车主请吃饭 对方生活不易:网友点赞
比亚迪杀进法拉利、兰博基尼老家:BYD ATTO 3、汉、海豚、海豹正式进军意大利|头条
村民深夜失足坠崖 酉阳民警紧急救援 环球头条
俄方称将重提“北溪”管道遭破坏事件调查话题
iOS 17淘汰iPhone 8、X等:苹果老机型贬值率激增-滚动
环球动态:张雪峰回应质疑:大学专业要选能吃上饭的 要为自己负责
【报资讯】6月16日基金净值:鹏华环保产业股票最新净值3.987,涨1.71%
每日聚焦:马云近况曝光:在东京教书 与大学生合影 与汪涵聚餐发福变胖
开始担心被“抢饭碗”了:越南打工人不加班逼急中国老板 不为钱放弃生活
焦点信息:1314玫瑰小镇魔法花园 1314玫瑰小镇登录
读数据压缩入门笔记06_上下文转换_速看
【环球新要闻】泡泡玛特4r出透卡什么意思 泡泡玛特几r出透什么意思
天天观热点:Polly简单使用
go语言list表
北京警方依法行政拘留冲入球场拥抱梅西的球迷
女子拆145个盲盒拒付款!父亲称其有精神病闹上法庭:结果出来了
每日观察!电影《消失的她》预售票房破千万:陈思诚监制 倪妮主演
广东暴雨积水成河:有人屋内钓鱼 有人"水上摩托"
每日播报!不再依赖进口 国产磁共振医疗装备重大突破:绰号“白胖子”
天天观点:未通过网络安全审查 禁止采购!美光宣布在中国投资超43亿元
6月16日基金净值:景顺长城远见成长混合A最新净值1.1679,涨2.43% 要闻速递
2023高考英语作文预测热门话题_2018热门话题新闻作文100字
每日看点!iso怎么转换为gho_怎样才能把ISO文件转换成GHO文件 1111
Kotlin协程-从理论到实战
常见WebShell的流量特征
今日报丨01. 组建知识星球服务体系
嵩山少林塔沟武校学费_嵩山少林塔沟武校
《云顶之弈》网页版云游戏上线:PC互通 手机点开就能玩
环球快资讯丨最美“小丑女”演女主!《芭比》真人电影国内定档:7月21日上映
环球今头条!玩家哭了!女子带100张《塞尔达传说:王国之泪》卡带入境被海关查获
一之濑拓实和小松奈奈第一次见面(一之濑拓实)_天天快消息
今日视点:美股盘初:Adobe涨约5%,维珍银河涨超45%
普通人也能太空旅行 我国将推出商业航天项目:最快5年后|全球要闻
世界时讯:阿里总裁谈马云近况:他在东京教书 很开心
资讯:奥运冠军苏翊鸣获得清华大学保送资格 发文感谢:18岁三个愿望都实现了
法官曼司亚:一起离婚案件她跟踪回访了12年
当前关注:聊聊Flink必知必会(四)
【世界快播报】Kotlin协程-从一到多
金科地产8.8亿元债券本息未按期偿付 持有人会议仍在表决中 新动态
向佐晒儿子周岁宴,现场紧搂郭碧婷秀恩爱,儿女露正脸都是高颜值_快资讯
江淮钇为3上市:最长续航600公里、8.99万元起_天天资讯
酷睿Ultra来了!Intel史上最混乱一代 还有马甲
谨慎下载 Win10 ISO镜像被黑客下马:攻击手法罕见_环球热消息
报道:博尔特4x100
LGV引理
【世界新要闻】Docsify on VPS,搭建最简个人博客
先正达集团IPO过会 沪市主板即将迎来全球农业龙头企业
今日热文:手握手的承诺 心贴心的服务_手握手
男孩玩氢气球砸到吹风机爆燃 妈妈被严重烧伤:画面触目惊心
美国能源部资助Intel 1220万元:开发2000W散热技术-天天热资讯
狂喝红牛能抗老?
不忘挖井人!奔驰Vision One-Eleven概念车首发:致敬经典实验车|天天速读
刷新纪录!41颗卫星共乘一枚火箭座位怎么排:全靠它了
精选!蜂蜜的种类
结案了!in到底用不用索引,啥时候能用啥时候不能用-天天新消息
lua中 . 和 : 的区别
港人北上消费升温 香港零售业对人流量持乐观态度_世界新消息
前沿资讯!欧盟机构:6月初全球平均气温创纪录
世界百事通!理想MPV设计手稿曝光 李想:设计灵感不是和谐号 而是鲸鱼