宗和玉 发表于 2025-6-1 21:24:17

场景题:10亿QQ用户,如何统计在线人数?

现在卷的环境下,面试除了八股文+算法+项目外,场景题也是问的越来越多了。一方面是就业市场竞争者较多所带来的必然结果;另一方面是公司对于应聘者的技术要求也越来越高了。
今天继续介绍Java面试常见的场景题:在线人数统计
现在用户数量是亿级,如何统计在线人数有多少?
场景分析

QQ用户就是亿级的场景,我们如果使用常规的数据库解决方案是不能满足要求的。例如:在数据库中给每个QQ用户添加一个状态,上线为1,下线为0,然后统计状态为1的数据总量,就能获取在线人数了。
但是,大规模用户频繁上、下线操作,频繁读写数据库,带来巨大 IO 压力,数据库并不能满足性能要求。
解决方案

使用Bitmap(位数组)来存储QQ用户的在线状态,这里还是简单介绍下Bitmap的数据结构


[*]维护一个位数组,每一位只能是1或0
[*]每个下标表示具体的数字,该下标位置的数字为1时,表示用户在线。如数组索引下标2333的值为1,表示QQ号2333的用户在线。反之,值为0表示下线
[*]统计在线人数,只需要统计1的个数即可
内存占用分析

10亿QQ号,位数组的空间位是10亿,占用内存大小为:10亿 * 1bit / 8 / 1024 / 1024 = 119.2MB,分析得出占用的内存非常小
具体实现

上一篇写了java的BitMap结构,这一篇换换口味,我们用Redis提供的Bitmap命令来实现
命令功能示例SETBIT key offset 1用户上线(设置对应位为1)SETBIT online_users 10086 1GETBIT key offset判断用户是否在线GETBIT online_users 10086 → 返回1BITCOUNT key统计在线总人数BITCOUNT online_users → 返回当前在线数小结

类似的面试场景题还有很多,最近准备收集一波做成专栏,敬请期待吧~

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

兑谓 发表于 2025-10-12 00:42:01

热心回复!

赘暨逢 发表于 2025-11-4 21:32:18

喜欢鼓捣这些软件,现在用得少,谢谢分享!

荏牌 发表于 2025-11-5 16:58:12

懂技术并乐意极积无私分享的人越来越少。珍惜

垢峒 发表于 2025-11-8 05:50:50

感谢,下载保存了

忙贬 发表于 2025-11-13 09:00:35

谢谢分享,辛苦了

嫁蝇 发表于 2025-12-4 19:22:32

感谢,下载保存了

厌外 发表于 2025-12-15 03:17:09

懂技术并乐意极积无私分享的人越来越少。珍惜

唐茗 发表于 2026-1-4 03:51:47

前排留名,哈哈哈

祉遛吾 发表于 2026-1-7 11:45:26

感谢发布原创作品,程序园因你更精彩

劳暄美 发表于 2026-1-14 06:52:01

喜欢鼓捣这些软件,现在用得少,谢谢分享!

矛赓宁 发表于 2026-1-15 03:53:56

感谢分享,学习下。

疝镜泛 发表于 2026-1-15 14:13:48

新版吗?好像是停更了吧。

劳暄美 发表于 2026-1-19 06:17:45

不错,里面软件多更新就更好了

癖艺泣 发表于 2026-1-20 14:39:51

喜欢鼓捣这些软件,现在用得少,谢谢分享!

盛天欣 发表于 2026-1-21 02:22:17

这个有用。

姚梨素 发表于 2026-1-24 08:21:12

感谢发布原创作品,程序园因你更精彩

鞠古香 发表于 2026-1-25 10:53:58

喜欢鼓捣这些软件,现在用得少,谢谢分享!

湛恶 发表于 2026-1-26 09:54:22

感谢发布原创作品,程序园因你更精彩

副我 发表于 2026-1-27 02:51:17

喜欢鼓捣这些软件,现在用得少,谢谢分享!
页: [1] 2 3
查看完整版本: 场景题:10亿QQ用户,如何统计在线人数?