最新要闻
- 长沙霸占车位车主致歉 栏杆拆除:双方均再次道歉 从没想会被网暴-环球今亮点
- 众望所归!马斯克宣布卸任推特CEO:神秘女子将接班
- 狗狗失踪7年后回家 主人煮饺子庆团圆:网友感慨万物皆有灵
- IGN 10分新神作!《塞尔达传说:王国之泪》港服日服已正式解锁
- 热消息:刘强东真兄弟!20年投入员工福利近500亿、建设公寓2.5万套
- 【天天播资讯】百度的“New Bing”终于来了!但别高兴得太早
- 全球看热讯:苹果年度跳水王!M2版Mac mini降到3399元了:不用领券
- 中芯国际人事再变动 刘训峰担任副董事长:基本年薪334万元 世界信息
- 性能逼近PS5 ROG掌机正式发布:首发锐龙Z1处理器 畅玩3A大作-天天观速讯
- 两个妈妈!英国首批三亲婴儿诞生:体内有三个人的DNA
- 5月26日上映!迪士尼《小美人鱼》内地版配唱阵容官宣:黄绮珊领衔 短讯
- 环球今亮点!任天堂《塞尔达传说:王国之泪》获超低评分:太复杂玩不进去
- 司机400升油箱加到430升仍没加满:费用近3000元 已向多部门举报|看热讯
- 曝APP停摆、发不出工资 爱驰汽车再渡劫-每日短讯
- 当前快播:兆易创新首发Arm Cortex-M7内核MCU:600MHz超高频率!性能暴涨40%
- 《塞尔达传说:王国之泪》评分公布!IGN无悬念打出10分满分-新资讯
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
焦点热议:1000W用户1Wqps高并发签到系统的架构和实操
文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录 博客园版为您奉上珍贵的学习资源 :
(资料图)
免费赠送 :《尼恩Java面试宝典》持续更新+ 史上最全 + 面试必备 2000页+ 面试必备 + 大厂必备 +涨薪必备免费赠送 :《尼恩技术圣经+高并发系列PDF》,帮你 实现技术自由,完成职业升级, 薪酬猛涨!加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷1)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷2)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领免费赠送 经典图书:《Java高并发核心编程(卷3)加强版》面试必备 + 大厂必备 +涨薪必备 加尼恩免费领
免费赠送 资源宝库: Java 必备 百度网盘资源大合集 价值>10000元 加尼恩领取
说在前面
在尼恩的(50+)读者社群中,经常有小伙伴面试的时候,遇到一个一个高并发 架构方面的问题,比如:
(1) 高并发秒杀系统如何架构?
(2) 高并发签到系统如何架构?
(3) 等等等等......
刚刚,在尼恩的社群(50+)中,有小伙伴又问了这个问题。尼恩作为技术中台的架构师, 高并发架构是尼恩架构的重点, 所以,一直想带大家从 架构到实操, 这里,带大家完成一个1000W用户1Wqps+ 签到系统的架构和实操。
本文也一并收入咱们的 《尼恩Java面试宝典》V64版本PDF,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。
当然,作为一篇文章,仅仅是抛砖引玉,后面有机会,带大家做一下这个高质量的实操,并且指导大家写入简历。
注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请从公众号 【技术自由圈】获取
本文目录
目录- 说在前面
- 本文目录
- 签到场景业务需求分析
- 1000W级用户场景的签到优化
- 优化1:利用Bitmap实现用户签到存储优化
- 优化2:利用Redis Bitmap实现用户签到的性能优化
- 优化3:利用Nginx +lus 实现更进一步的用户签到的性能优化
- 基础知识:什么是Bitmap
- Bitmap的使用场景
- Redis 中Bitmap的相关命令
- 客户端连接 redis
- 指定key中的offset位设置为value
- 获取指定 key 中的offset位的值
- 统计指定key中值为1的位的数量。
- 对多个Bitmap进行位运算,并将结果保存到destkey中。
- 查找指定key中第一个值为bit(0或1)的位的位置
- BITFIELD:在位图中存储整数值
- 根据偏移量对区域进行设置
- 参数1:offset参数用于指定设置的起始偏移量。
- 参数2:type参数用于指定等待设置的值类型,
- 参数3:value参数用于指定被设置的整数值
- 设置的结果
- 批量操作:一次调用中执行多个子命令
- 获取区域存储的值
- 执行加法操作或减法操作
- 处理溢出
- 其他命令
- 尼恩建议,优先使用位图存储整数
- 使用SpringCloud+Redis BitMap 用户场景的签到实操
- 实操包括以下的操作:
- 用户签到实操
- 用户签到查询
- 查询 获取本月签到信息 签到
- 本文的版本计划和基础学习资料
- 技术自由的实现路径:
- 实现你的 架构自由:
- 实现你的 响应式 自由:
- 实现你的 spring cloud 自由:
- 实现你的 linux 自由:
- 实现你的 网络 自由:
- 实现你的 分布式锁 自由:
- 实现你的 王者组件 自由:
- 实现你的 面试题 自由:
- 免费获取11个技术圣经PDF:
签到场景业务需求分析
一般像微博,各种社交软件,游戏等APP,都会有一个签到功能,连续签到多少天,送什么东西,比如:
- 签到1天送10积分,连续签到2天送20积分,3天送30积分,4天以上均送50积分等
- 如果连续签到中断,则重置计数,每月初重置计数
- 显示用户某个月的签到次数
1000W级用户场景的签到优化
优化1:利用Bitmap实现用户签到存储优化
为了实现用户的签到功能,通过mysql来完成,
为了实现签到的存储, 可以设计一个类似下面的表
假如有1000万用户,平均每人每年签到次数为10次,一年下来,则这张表数据量为多少呢?
数据比较吓人: 1亿条
每签到一次需要使用(8 + 8 + 1 + 1 + 3 + 1)共22 字节的内存,一个月则最多需要600多字节
我们如何能够简化一点呢?
其实可以考虑小时候一个挺常见的方案,就是小时候,咱们准备一张小小的卡片,你只要签到就打上一个勾,我最后判断你是否签到,其实只需要到小卡片上看一看就知道了。
我们可以采用类似这样的方案来实现我们的签到需求。
我们按月来统计用户签到信息,签到记录为1,未签到则记录为0。
把每一个bit位对应当月的每一天,形成了映射关系。用0和1标示业务状态,这种思路就称为位图(BitMap)。
这样我们就用极小的空间,来实现了大量数据的表示。
那么,一个月的签到数据,可以使用一个无符号整数来存储
之前一个月要 600个字节,现在保存一个人一个月的签到数据, 只要 24个字节 ,一下就提升了 25倍
注意:是存储空间,节约了25倍哈
优化2:利用Redis Bitmap实现用户签到的性能优化
刚好redis 有Bitmap结构。
可以利用Redis Bitmap实现用户签到的性能优化,将当前用户当天签到信息保存到Redis中。
具体的架构如下:
redis的吞吐量为 2Wqps以上, 完全可以满足 1000W用户签到的需求。
但是 SpringCloud 微服务够呛,怎么办呢?
优化3:利用Nginx +lus 实现更进一步的用户签到的性能优化
SpringCloud 微服务够呛,但是nginx可以,
nignx的吞吐量为 2Wqps以上, 完全可以满足 1000W用户签到的需求。
具体的架构如下:
架构介绍完了,接下来就开始实操。
但是,在开始实操之前,咱们得补一下基础知识。
基础知识:什么是Bitmap
Bitmap是一种位图数据结构,它用来表示一个集合中每个元素是否出现。
在Bitmap中,每个元素都与一个位(bit)相对应,如果元素出现,则对应位的值为1,否则为0。
Bitmap可以用来进行快速的集合运算,如并集、交集、差集等操作。
Bitmap的优点在于它的空间利用率非常高,通常只需要占用一个二进制位来表示一个元素是否出现,因此对于稀疏的数据集合,Bitmap可以显著减少存储空间的使用。
此外,由于Bitmap的位运算操作非常高效,因此它也能够快速地进行集合运算操作。
Redis中是利用string类型数据结构实现BitMap,因此最大上限是512M,转换为bit则是 2^32个bit位。
Bitmap的使用场景
Bitmap可以应用于许多场景,主要包括以下几个方面:
去重:
可以使用Bitmap去重,将出现的元素映射到Bitmap中,若Bitmap中对应的位置已经被标记为1,即表示该元素已经出现过,可以避免重复。
排序:
可以使用Bitmap实现排序,将元素映射到Bitmap中,遍历Bitmap中的所有位,对于值为1的位,输出对应元素。
数据库查询:
在数据库中,可以使用Bitmap对记录进行索引,
例如,在一个表中记录用户的性别,可以使用Bitmap将每个用户的性别映射到Bitmap中,然后通过位运算来查询特定性别的用户。
网络流量分析:
在网络流量分析中,可以使用Bitmap来记录每个IP地址的访问情况,然后通过位运算进行流量统计和分析。
压缩编码:
可以使用Bitmap进行数据压缩编码,将数据压缩为一系列0和1的位序列,通过位运算进行解码。
总的来说,Bitmap具有高效、灵活、易用等优点,在许多数据处理和分析的场景中都有广泛的应用。
Redis 中Bitmap的相关命令
客户端连接 redis
docker exec -it redis-standalone redis-cli auth 123456
Redis提供了一系列Bitmap相关的指令,包括以下几个:
指定key中的offset位设置为value
将指定key中的offset位设置为value(0或1),若key不存在,则会自动创建一个新的空Bitmap。
SETBIT key offset value
例:SETBIT mybitmap 1001 1 将mybitmap的第1001位设置为1。
127.0.0.1:6379> setbit mybitmap 1001 1(integer) 0
获取指定 key 中的offset位的值
获取指定key中的offset位的值(0或1),若key不存在或offset超出范围,则返回0。
GETBIT key offset
例如:GETBIT mybitmap 1001将返回mybitmap的第1001位的值。
127.0.0.1:6379> getbit mybitmap 1001(integer) 1
统计指定key中值为1的位的数量。
BITCOUNT key [start end]
可以通过可选参数start和end指定统计的范围(单位是位),若不指定,则默认统计整个Bitmap。
例如:BITCOUNT mybitmap 100 1000 将统计mybitmap中第100位到第1000位值为1的位的数量。
127.0.0.1:6379> bitcount mybitmap 100 1000(integer) 1
对多个Bitmap进行位运算,并将结果保存到destkey中。
BITOP operation destkey key [key ...]
operation可以是AND、OR、XOR和NOT中的一个,表示进行与、或、异或和非运算。
例如:BITOP AND mybitmap1 mybitmap2 mybitmap3将mybitmap2和mybitmap3进行与运算,并将结果保存到mybitmap1中。
127.0.0.1:6379> bitop and mybitmap1 mybitmap2 mybitmap3(integer) 0
查找指定key中第一个值为bit(0或1)的位的位置
查找指定key中第一个值为bit(0或1)的位的位置,并返回其索引(单位是位)。
BITPOS key bit [start] [end]
可以通过可选参数start和end指定查找的范围。若bit不存在于指定范围内,则返回-1。
例如:BITPOS mybitmap 1 100 1000将在mybitmap的第100位到第1000位中查找值为1的位的位置。
127.0.0.1:6379> bitpos mybitmap 1 100 1000(integer) 1001
BITFIELD:在位图中存储整数值
BITFIELD命令允许用户在位图中的任意区域(field)存储指定长度的整数值,并对这些整数值执行加法或减法操作。
BITFIELD命令支持SET、GET、INCRBY、OVERFLOW这4个子命令,接下来将分别介绍这些子命令。
语法:
官方文档
BITFIELD key [GET encoding offset | [OVERFLOW ] [GET encoding offset | [OVERFLOW ] ...]]
根据偏移量对区域进行设置
除了根据偏移量对位图进行设置之外,SET子命令还允许用户根据给定类型的位长度,对位图在指定索引上存储的整数值进行设置。
通过使用BITFIELD命令的SET子命令,用户可以在位图的指定偏移量offset上设置一个type类型的整数值value,
来一个列子,从第0位开始,设置 sign:1880000000::202305 的 值为 198 :
BITFIELD sign:1880000000::202306 set u8 0 198
主要的参数如下:
- offset操作的偏移量
- type操作的值的数值类型
- value要操作的值
对于参数的介绍如下:
参数1:offset参数用于指定设置的起始偏移量。
这个偏移量从0开始计算,偏移量为0表示设置从位图的第1个二进制位开始。
如果被设置的值长度不止一位,那么设置将自动延伸至之后的二进制位。
参数2:type参数用于指定等待设置的值类型,
type参数的值需要以i或者u为前缀,后跟被设置值的位长度,
其中i表示被设置的值为有符号整数,而u则表示被设置的值为无符号整数。
比如i8表示被设置的值为有符号8位整数,
而u16则表示被设置的值为无符号16位整数,诸如此类。
BITFIELD的各个子命令目前最大能够对64位长的有符号整数(i64)和63位长的无符号整数(u63)进行操作。
参数3:value参数用于指定被设置的整数值
这个值的类型应该和type参数指定的类型一致。
如果给定值的长度超过了type参数指定的类型,那么SET命令将根据type参数指定的类型截断给定值。
比如,如果用户尝试将整数123(二进制表示为01111011)存储到一个u4类型的区域中,那么命令会先将该值截断为4位长的二进制数字1011(即十进制数字11),然后再进行设置。
设置的结果
设置 sign:1880000000::202305 的 值为 198 :
BITFIELD sign:1880000000::202306 set u8 0 198
通过命令,我们可以从偏移量0开始,设置一个8位长的无符号整数值198(二进制表示为11000110):
从子命令返回的结果可以看出,该区域被设置之前存储的整数值为0。下图展示了执行设置命令之后的位图:
批量操作:一次调用中执行多个子命令
尼恩提示:高并发场景,为了减少io 次数,一般都是建议 批量操作。
BITFIELD命令允许用户在一次调用中执行多个子命令,比如,通过在一次BITFIELD调用中使用多个SET子命令,我们可以同时对位图的多个区域进行设置:
BITFIELD sign:1880000000::202306 SET u8 0 123 SET i32 20 10086
- 第1个子命令
SET u8 0 123
从偏移量0开始,设置一个8位长无符号整数值123。 - 第2个子命令
SET i32 20 10086
从偏移量20开始,设置一个32位长有符号整数值10086。
对于这2个子命令,BITFIELD命令返回了一个包含2个元素的数组作为命令的执行结果,
这2个元素分别代表2个指定区域被设置之前存储的整数值,比如第一个子命令返回的结果就是我们之前为该区域设置的值123。
下图展示了这个BITFIELD命令创建出的位图以及被设置的3个整数值在位图中所处的位偏移量。
上图也展示了SET子命令的两个特点:
设置可以在位图的任意偏移量上进行,被设置区域之间不必是连续的,也不需要进行对齐(align)。
各个区域之间可以有空洞,即未被设置的二进制位,这些二进制位会自动被初始化为0。
在同一个位图中可以存储多个不同类型和不同长度的整数。
虽然这两个特点可以带来很大的灵活性,但是从节约内存、避免发生错误等情况考虑,我们一般还是应该:
以对齐的方式使用位图,并且让位图尽可能地紧凑,避免包含过多空洞。
每个位图只存储同一种类型的整数,并使用int-8bit、unsigned-16bit这样的键名前缀来标识位图中存储的整数类型。
获取区域存储的值
通过使用BITFIELD命令的GET子命令,用户可以从给定的偏移量或者索引中取出指定类型的整数值:
GET子命令各个参数的意义与SET子命令中同名参数的意义完全一样。
执行加法操作或减法操作
除了设置和获取整数值之外,BITFIELD命令还可以对位图存储的整数值执行加法操作或者减法操作,
这两个操作都可以通过INCRBY子命令实现。
语法:
BITFIELD命令并没有提供与INCRBY子命令相对应的DECRBY子命令,但是用户可以通过向INCRBY子命令传入负数增量来达到执行减法操作的效果。
INCRBY子命令在执行完相应的操作之后会返回整数的当前值作为结果。例子如下:
处理溢出
BITFIELD命令除了可以使用INCRBY子命令来执行加法操作和减法操作之外,还可以使用OVERFLOW子命令去控制INCRBY子命令在发生计算溢出时的行为。
语法:
OVERFLOW子命令的参数可以是WRAP、SAT或者FAIL中的一个:
- WRAP表示使用回绕(wrap around)方式处理溢出,这也是C语言默认的溢出处理方式。在这一模式下,向上溢出的整数值将从类型的最小值开始重新计算,而向下溢出的整数值则会从类型的最大值开始重新计算。
- SAT表示使用饱和运算(saturation arithmetic)方式处理溢出,在这一模式下,向上溢出的整数值将被设置为类型的最大值,而向下溢出的整数值则会被设置为类型的最小值。
- FAIL表示让INCRBY子命令在检测到计算会引发溢出时拒绝执行计算,并返回空值表示计算失败。
OVERFLOW子命令在执行时将不产生任何回复。此外,如果用户在执行BITFIELD命令时没有指定具体的溢出处理方式,那么INCRBY子命令默认使用WRAP方式处理计算溢出。
需要注意的是,因为OVERFLOW子命令只会对同一个BITFIELD调用中排在它之后的那些INCRBY子命令产生效果,所以用户必须把OVERFLOW子命令放到它想要影响的INCRBY子命令之前。
其他命令
除此之外,还有其他一些Bitmap相关的指令,如BITMAP等,可以根据实际需求进行选择。
redis bitmap 常用命令:
#向指定位置(offset)存入0或1SETBIT key offset value #获取指定位置(offset)的bit值GETBIT key offset #统计bitmap中(从start到end,如果不写起始位置,就统计整个key)值为1的bit数量BITCOUNT key [start end] #操作(查询,修改,自增)Bitmap中指定的位置(offset)的值BITFIELD key [GET type offset] [SET type offset value] [INCRBY type offset increment] [OVERFLOW WRAP|SAT|FAIL] #获取Bitmap中的bit数组,并以十进制返回BITFIELD_RO
在线练习工具:https://try.redis.io/查看更多命令:https://redis.io/commands
尼恩建议,优先使用位图存储整数
尼恩建议,在redis中,优先使用 位图存储整数, 而不是使用 String 存储整数
为啥呢?
在一般情况下,当用户使用字符串或者散列去存储整数的时候,Redis都会为被存储的整数分配一个long类型的值(通常为32位长或者64位长),并使用对象去包裹这个值,然后再把对象关联到数据库或者散列中。
与此相反,BITFIELD命令允许用户自行指定被存储整数的类型,并且不会使用对象去包裹这些整数,因此当我们想要存储长度比long类型短的整数,并且希望尽可能地减少对象包裹带来的内存消耗时,就可以考虑使用位图来存储整数。
使用SpringCloud+Redis BitMap 用户场景的签到实操
实操包括以下的操作:
- 用户签到实操
- 用户签到查询
- 查询 获取本月签到信息 签到
用户签到实操
代码如下:
测试如下:
用户签到查询
代码如下:
测试如下:
查询 获取本月签到信息 签到
代码如下:
测试如下:
本文的版本计划和基础学习资料
尼恩作为技术中台、数据中台的架构师, 高并发是尼恩架构的重点, 所以,后面会大家从 架构到实操, 多个维度、多种场景的高并发实操。
而且尼恩指导简历的过程中,也指导过小伙伴写过 10Wqps 超高并发 网关、超高并发秒杀、超高并发物联网等等简历,里边涉及到大量的设计模式,
经过尼恩的指导之后,很多 小伙伴的简历,里边立马金光闪闪,并且顺利走上了架构师之路。
后面有机会,带大家做一下这个高质量的实操,并且指导大家写入简历。
所以,这个材料后面也会进行持续迭代,大家可以找尼恩来获取最新版本和技术交流。
尼恩编著的400页PDF电子书 《SpringCloud Alibaba 技术圣经》
尼恩编著的500页 PDF电子书 《Java高并发核心编程 卷3 加强版》,清华大学出版社出版
pdf领取方式,请参见公众号: 技术自由圈
技术自由的实现路径:
实现你的 架构自由:
《吃透8图1模板,人人可以做架构》
《10Wqps评论中台,如何架构?B站是这么做的!!!》
《阿里二面:千万级、亿级数据,如何性能优化? 教科书级 答案来了》
《峰值21WQps、亿级DAU,小游戏《羊了个羊》是怎么架构的?》
《100亿级订单怎么调度,来一个大厂的极品方案》
《2个大厂 100亿级 超大流量 红包 架构方案》
… 更多架构文章,正在添加中
实现你的 响应式 自由:
《响应式圣经: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:
关键词:
焦点热议:1000W用户1Wqps高并发签到系统的架构和实操
学系统集成项目管理工程师(中项)系列21a_整体管理(上)
长沙霸占车位车主致歉 栏杆拆除:双方均再次道歉 从没想会被网暴-环球今亮点
众望所归!马斯克宣布卸任推特CEO:神秘女子将接班
狗狗失踪7年后回家 主人煮饺子庆团圆:网友感慨万物皆有灵
IGN 10分新神作!《塞尔达传说:王国之泪》港服日服已正式解锁
热消息:刘强东真兄弟!20年投入员工福利近500亿、建设公寓2.5万套
【天天播资讯】百度的“New Bing”终于来了!但别高兴得太早
全球看热讯:苹果年度跳水王!M2版Mac mini降到3399元了:不用领券
当前动态:Python学习之二:不同数据库相同表是否相同的比较方法
中芯国际人事再变动 刘训峰担任副董事长:基本年薪334万元 世界信息
性能逼近PS5 ROG掌机正式发布:首发锐龙Z1处理器 畅玩3A大作-天天观速讯
两个妈妈!英国首批三亲婴儿诞生:体内有三个人的DNA
[Linux] 如何查看Centos用户登陆记录?[转载]_全球即时
今日热讯:【财经分析】REITs二级市场止跌回稳 机构看好高速板块后续表现
5月26日上映!迪士尼《小美人鱼》内地版配唱阵容官宣:黄绮珊领衔 短讯
环球今亮点!任天堂《塞尔达传说:王国之泪》获超低评分:太复杂玩不进去
司机400升油箱加到430升仍没加满:费用近3000元 已向多部门举报|看热讯
打开PDB报错ORA-30013
曝APP停摆、发不出工资 爱驰汽车再渡劫-每日短讯
当前快播:兆易创新首发Arm Cortex-M7内核MCU:600MHz超高频率!性能暴涨40%
《塞尔达传说:王国之泪》评分公布!IGN无悬念打出10分满分-新资讯
视点!高叶祝张颂文福如东海寿比南山:晒吃面照庆生
中芯国际发布Q1财报:利润下滑44% 尚未看到市场回暖 焦点日报
S5PV210 | 微处理器启动流程
P3723 [AH2017/HNOI2017]礼物(FFT)
益科正润:美国债务违约倒计时,“去美元化”正当时
【财经分析】土总统埃尔多安寻求连任面临挑战_环球新消息
难怪叶二娘要勾引虚竹的父亲,你看幕后黑手是谁?叶二娘喊他哥哥_前沿资讯
当前热讯:一颗巨型小行星正飞速靠近地球 网友:赶紧来撞我
今天开始 谷歌搜索大变样了:AI接管 焕然一新_环球视讯
同程酒店订单“订后即焚”功能引热议 网友:这是要防谁?
前方畅通日产轩逸频刹车减速 本田飞度看不下去:右侧也要超过去
农村母女嫌路边冷藏车太吵 要求关掉制冷机未果 一砖砸碎车玻璃-当前热文
ChatGPT 再遭禁用 | 人工智能时代下数据安全如何保障
Spring MVC官方文档学习笔记(一)之Web入门
当前报道:python 多进程jieba分词,高效分词,multiprocessing
277米!华为WATCH Ultimate非凡大师助力 潜水员韩颋再创亚洲洞穴潜水记录
不想做“四眼仔”!怎样科学使用电子产品?这4点学起来
环球速看:“男生减速带”视频为什么能爆红?抖音科普
海信手机天猫旗舰店停运:页面显示“店铺终止经营公告”-世界看点
沙特准备进军国际传媒业:钱不是问题要的是影响力
机构调研团走进集泰股份 天天热文
每日热闻!记录--Vue3+TS(uniapp)手撸一个聊天页面
世界时讯:ios打包ipa的四种实用方法(.app转.ipa)
全球热消息:定了!AIRIOT新品发布会,6月6日北京见。
商品日报(5月11日):沪镍跌超5%创逾一个月新低 棕榈油跌超3% 环球新视野
当前速看:六安市裕安区:大抓基层,带动乡村“跑”起来
比三星更稳、比致态便宜!西部数据SN770 2TB固态硬盘只要789元
NVIDIA业绩不给力 黄仁勋年收入锐减!仅员工中位值的94倍 视焦点讯
世界微动态丨LG推出新款超宽带鱼屏:Nano IPS面板 配有雷电4
买菜车也疯狂!丰田卡罗拉Nightshade特别版官图发布:很酷炫
今日热讯:27岁未婚女子入职前被要求做孕检:她当场拒绝了
播报:飘飘遇仙全集狼太郎txt无删减 飘飘遇仙全集狼太郎txt
构建万物互联,华为云IoT+鸿蒙重燃物体感知-全球热点评
JavaScript全解析——this指向|环球今日报
实现高并发秒杀的 7 种方式,写的太好了,建议收藏!!
译:从分布式微服务到单体
谷歌全线反击!PaLM 2部分性能已经超越GPT-4-全球今亮点
【财经分析】两只转债接连进入“下线倒计时” 市场如何接纳退市常态化? 要闻
在街头弹钢琴的他,登上了音乐厅! 热头条
一口一个更好吃:德芙84g袋装小巧粒7.8元/袋大促(原价18元)
环球观焦点:跑步直追!比亚迪高阶智驾第三季度上车:名为DNP、汉将首搭
被指滥用应用市场主导地位:苹果再次遭遇反垄断调查 焦点速看
全球观点:华为WATCH 4星球系列上演宇宙级浪漫 健康领域华为或将迎来重大突破
天舟六号货运飞船与空间站组合体完成交会对接
环球热头条丨用Python实现艺术绘画,人生苦短,代码赛高
【新华500】新华500指数(989001)11日收跌0.18%-世界微动态
世界头条:美联储高利率风险仍存在 黄金期货能否延续涨势
学生点外卖:因围墙太高 小哥摇树报送餐位置
每日快讯!来自“公路王者”的检验!蔚来ES6被两大货车夹击:框架完好人员安全
小米电视A55/A65竞技版开售:1799就能有4K/120Hz高刷大屏|天天通讯
iQOO Neo8 Pro上架:首发天玑9200+ CPU性能比骁龙8 Gen2更猛 实时焦点
微型电动车战火再起!长安Lumin周年庆至高优惠1万硬刚五菱
环球热议:如何为漆面准备金属
天天快看:有文化的网名情侣(有文化的网名)
Python工具箱系列(三十一)
天天视点!可变参数的格式化输出
利用kali破解WiFi密码_全球热消息
天天观焦点:重庆市高级人民法院依法公开宣判张波、叶诚尘故意杀人案
李想说出大实话:理想L8最大竞争对手其实是这台车
号称“不泄密” 微信键盘1.0.6发布:加入2项新功能
起售价或低于25万 凯迪拉克GT4实车曝光:家族最便宜SUV来了|世界今热点
长沙被占车位成为网红打卡地:有人两百公里外赶来直播 环球快看
省级校本教研基地工作总结(精选26篇)|世界观点
6000+字讲透ElasticSearch 索引设计
Linux系统上创建.NET6项目(通过命令行(CTL)方式)
15日起内地赴港澳签注办理更便捷 端午赴港澳机票较五一降三成|环球视点
索尼最强旗舰!Xperia 1 V发布:8999元起
4月SUV销量排名:比亚迪双星无敌!燃油车苦苦挣扎
当前视点!Linux重启Java的.sh脚本shell
stm32 boot0硬件接法导致的概率性启动失败问题总结和反思
k3s 证书过期修改
《种地吧》下期精彩:后陡门篮球赛主打团结 种地团直面成长阵痛-当前资讯
孟羽童视频回应离职格力:下一步将申请读研|环球观点
2999元!佳能发布掌上Vlog机PowerShot V10 比手机还小巧
焦点热讯:索尼放大招 Xperia 1 V用上双层晶体管传感器:画质媲美全画幅相机
天玑9200+正式发布!解决旗舰用户三大痛点 带来顶级游戏性能体验 世界新消息
黑寡妇毒杀亲夫
【天天热闻】手动挡正确停止和关闭发动机 以及关闭发动机钥匙的步骤