腾讯面试:10 亿用户签到记一年,怎么算「连续 30 天」?
前段时间一位兄弟去腾讯面试回来跟我说他挂在了一道「签到题」上。面试官问10 亿用户签到记一年给你 1G 内存怎么判断某个用户是否「连续签到 30 天」他开口就是 Bitmap觉得自己答得不错。结果面试官继续追问三句之后他就接不住了。他缺的其实不是 Bitmap 怎么用而是对「这道题到底在考什么」的理解。一、先算一笔账为什么不能硬存10 亿用户每人 365 天如果把每次签到都当作 MySQL 里的一行10 亿 × 365 3650 亿 行按 20 字节 / 行估算3650 亿 × 20 ≈ 6.6 TB6.6 TB别说 1G普通单机都扛不住。但签到这个数据有个天然特性它只有「签了」和「没签」两种状态。一个 bit 就能表达不需要整行。365 天 365 bit 46 字节 / 人 / 年10 亿用户全量46 字节 × 10 亿 ≈ 43 GB43 GB 依然要分片但它已经从「做不了」变成了一道普通的容量题。二、第一个坑BITCOUNT 算不出「连续」很多人一听到 Bitmap马上想BITCOUNT 一下不就知道 30 天里签了多少天吗但 BITCOUNT 只能告诉你「总数」不能告诉你「连续」。假设 30 天里有 30 个 1但它们分别是月初 15 天、月末 15 天中间断了——BITCOUNT 会开心地返回 30但用户根本没连续签到。所以这道题的真正考点不是「会不会用 Bitmap」而是拿到 46 字节之后你怎么在本地判断连续性。三、第二个坑key 按哪个维度切同样是 43 GB两种存法查询能力天差地别。维度按「天」存按「用户」存key 示例sign:20260802sign:u10086:2026offset 含义uidday_of_year单个 key 大小10 亿 bit ≈ 119 MB365 bit ≈ 46 字节擅长的查询今天多少人签到小强连签 30 天了吗不擅长的查询某人连续 30 天签到 → 30 次网络往返今天总签到人数 → 遍历 10 亿 key面试官问「怎么算连续 30 天」其实是在问你的 key 按哪个维度切。答案是按用户存。因为「连续签到」天然是单人维度的查询一次 GET 就把一整年的 46 字节取回来。四、正确做法一次 GET本地扫描拿到 46 字节后最简单的方法就是本地扫一遍。365 次循环CPU 纳秒级完成。# Java 示例最长连续签到天数public int maxConsecutiveDays(byte[] bits) {int max 0, cur 0;for (int i 0; i 365; i) {int b (bits[i / 8] (i % 8)) 1;if (b 1) {cur;max Math.max(max, cur);} else {cur 0;}}return max;}如果只想判断「是否存在连续 30 天」可以用位运算技巧五次移位就能出结果x x 1;x x 2;x x 4;x x 8;x x 14;// 五步之后还非零就说明存在连续 30 个 1这五步的位移量不是各自独立生效而是累加的——每一步都在「上一步已确认的长度」基础上再往外扩。把累计值摊开看步骤本步位移累计位移能确认的连续111≥ 2223≥ 4347≥ 84815≥ 1651429≥ 30原理是每次把相邻的 1 压缩成一个「连续段标记」五步之后如果还有非零位就一定存在长度 ≥30 的连续 1。五、那按天存的 Bitmap 是不是就没用了不是。两种维度服务不同的查询按用户存查「某人连续签到多久」「某人哪天签了」——单人维度。按天存查「今天全站签到人数」「连续 N 天全勤的用户有哪些」——全站维度。大厂的真实答案通常是两份都存。按用户的版本放在缓存层支撑实时查询按天的版本用于运营统计、离线分析。有人问用 BITOP AND 把 30 个按天的 bitmap 做与运算不也能找出连续签到的人吗技术上可以但每个 key 119 MB30 个 key 就是 3.5 GBRedis 单线程会阻塞几百毫秒甚至秒级——线上不敢跑。六、Redis 里怎么落盘写入时只需要一行SETBIT sign:{uid}:{year} {day_of_year} 1读取时一次 GETGET sign:{uid}:{year}然后交给本地代码去判断连续性。Redis 只负责存取不做滑动窗口计算。跨年问题也好处理如果当前日期在 1 月初「最近 30 天」会跨到去年读两个 key 拼起来即可。七、常见翻车答案答案问题MySQL 一行一条签到记录6.6 TB查询和存储都扛不住Redis List / Set 存日期每人 365 条记录内存约 1.4 TBBITCOUNT 判断连续只能算总数不能判断连续性BITOP AND 在线执行3.5 GB 数据在单线程 Redis 上阻塞只按天存 Bitmap单人连续签到要 30 次网络往返八、面试官大概率会追问的变体1如果要看「累计签到次数」能不能继续用 Bitmap可以但 Bitmap 只能表达 0/1累计次数需要 HyperLogLog 或一个额外的计数器。2如果签到数据很稀疏99% 的人不活跃Bitmap 会不会浪费会。稀疏场景下 Roaring Bitmap 比普通 Bitmap 省得多这是工程上的进阶选项。3如果要发「连续签到 30 天」的奖励怎么保证幂等不能靠判断连续就发奖必须用另一个 key 记录「该用户是否已领取」否则重试会多发。4如果内存再砍一半只剩 256MB怎么办用哈希分桶 外部排序把 QQ 号或 uid 哈希到不同文件分桶去重/分桶统计。九、面试标准答案模板直接背诵上面八节是原理这一节是你能直接背进面试的话术。面试官问到「连续签到」照着这五步走第一步 · 选型签到只有「签了 / 没签」两种状态用 Bitmap。每人每年 365 bit 46 字节全量 43 GB比 MySQL 硬存的 6.6 TB 少了约 159 倍。这是存储层面的结论。第二步 · 定 key 维度这道题问的是「某个用户连续 30 天」所以按用户存sign:{uid}:{year}offset 用 day_of_year。一次 GET 取回 46 字节本地就能算单人连续。按天存适合全站统计不适合这道题。第三步 · 主动避坑BITCOUNT 只能算「总天数」算不出「连续」。所以我不靠 BITCOUNT 判断连续避免被追问时接不住。第四步 · 给具体算法GET 回来 46 字节后在本地扫一遍365 次循环纳秒级。如果只判断「是否存在连续 30 天」用五次移位x x1/2/4/8/14结果还非零就存在连续段。Redis 只负责存取不在线上做滑动窗口计算。第五步 · 补工程闭环线上通常两份都存按用户的做实时查询按天的做运营统计跨年就读两个 key 拼起来。奖励发放用独立 key 保证幂等避免重试多发。背这一套的价值它同时覆盖了「存储」「key 设计」「避坑」「算法」「工程闭环」五个层次面试官不管往哪个方向追你都有下一句接住。Bitmap 不是数据结构的高招而是「把业务语义压进 bit」的抽象能力。真正决定答案质量的不是你调用了哪个 Redis 命令而是你能否一眼看出这道题考的是 key 的维度选择。

相关新闻

3步搞定!Android Studio中文界面终极指南:告别英文开发困扰

3步搞定!Android Studio中文界面终极指南:告别英文开发困扰

3步搞定!Android Studio中文界面终极指南:告别英文开发困扰 【免费下载链接】AndroidStudioChineseLanguagePack AndroidStudio中文插件(官方修改版本) 项目地址: https://gitcode.com/gh_mirrors/an/AndroidStudioChineseLanguagePack …

2026/8/4 23:44:38 阅读更多 →
微信QQ消息防撤回终极指南:告别“对方已撤回“的遗憾时刻

微信QQ消息防撤回终极指南:告别“对方已撤回“的遗憾时刻

微信QQ消息防撤回终极指南:告别"对方已撤回"的遗憾时刻 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: https:/…

2026/8/4 23:44:38 阅读更多 →
2026年天津统招专升本,究竟适合哪些专科专业?一文揭秘!

2026年天津统招专升本,究竟适合哪些专科专业?一文揭秘!

2026年天津统招专升本,究竟适合哪些专科专业?一文揭秘!在2026年,天津统招专升本为众多专科生提供了学历提升的宝贵机会。并非所有专科专业都适合走专升本这条路,津诚育才培训学校凭借多年在天津专升本教育领域的深耕&a…

2026/8/4 23:44:38 阅读更多 →

最新新闻

外贸新模式实战课程-更新5月,账号搭建+截流技术+AI矩阵+独家方法实现自动化获客

外贸新模式实战课程-更新5月,账号搭建+截流技术+AI矩阵+独家方法实现自动化获客

# 外贸新模式实战:从账号搭建到AI矩阵,解锁自动化获客新路径## 引言2024年,外贸行业的获客成本持续走高,传统的展会平台模式红利见顶。尤其是在5月这个外贸传统旺季节点,大量中小外贸企业面临一个尴尬共识:…

2026/8/5 0:29:07 阅读更多 →
Ark-Pets桌宠完整指南:三步召唤你的明日方舟干员伙伴

Ark-Pets桌宠完整指南:三步召唤你的明日方舟干员伙伴

Ark-Pets桌宠完整指南:三步召唤你的明日方舟干员伙伴 【免费下载链接】Ark-Pets Arknights Desktop Pets | 明日方舟桌宠 (ArkPets) 项目地址: https://gitcode.com/gh_mirrors/ar/Ark-Pets Ark-Pets是一款免费开源的明日方舟桌宠软件,让你心爱的…

2026/8/5 0:27:06 阅读更多 →
鸿蒙6.1 arkui.componentSnapshot组件截图坑:返回PixelMap不是dataURL

鸿蒙6.1 arkui.componentSnapshot组件截图坑:返回PixelMap不是dataURL

本文是「鸿蒙 6.1 API 23 开发坑系列」第 2 篇(ArkUI 桶第 2 篇)。本篇讲 ohos.arkui.componentSnapshot namespace(API 10,鸿蒙 6.1 API 23 基座)——组件截图三个方法 get/getSync/createFromBuilder。鸿蒙坑根因&am…

2026/8/5 0:25:05 阅读更多 →
FDE:AI时代的“宝藏岗位”,小白也能入局,速收藏!

FDE:AI时代的“宝藏岗位”,小白也能入局,速收藏!

FDE(前线部署工程师)是AI领域的热门岗位,需求量激增。该岗位需要工程师懂业务、会沟通、能落地,结合技术、产品思维和行业认知,将AI模型转化为企业生产力。适合有ToB经验、懂产品思维或能驻场沟通的工程师和产品经理转…

2026/8/5 0:24:05 阅读更多 →
支付宝体验技术部拆分!前端转型Agent全栈,小白程序员必收藏

支付宝体验技术部拆分!前端转型Agent全栈,小白程序员必收藏

支付宝体验技术部拆分,前端工程师转型Agent开发全栈。玉伯等专家主导的团队,曾开发Ant Design、AntV等知名开源项目,影响行业。AI技术推动智能Agent兴起,打破前端边界,需掌握大模型、智能体逻辑等能力。组织调整旨在灵…

2026/8/5 0:24:05 阅读更多 →
20个P0级大模型本体概念,产品经理必看,收藏这份学习资料!

20个P0级大模型本体概念,产品经理必看,收藏这份学习资料!

文章介绍了20个大模型本体概念,帮助产品经理在AI产品决策时,不再依赖模糊判断,而是基于精准认知。内容涵盖了模型分类、开源与闭源模型、本地与云端部署、基础模型与对话模型、推理模型、Token、上下文窗口、幻觉、温度参数、系统提示词、思维…

2026/8/5 0:24:05 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →