崩溃了!字节跳动-你扛过几面?-抖音亿级评论系统的实时存储与热度排序设计

🔥 字节跳动2026年4月面试真题,二面/三面必刷,高级后端/架构师专属,难度直接拉满 ⭐⭐⭐⭐⭐

系统设计图-如图
https://uploadfiles.nowcoder.com/images/20260416/369475507_1776322994550/9FB54BF16CC07A4853DDBBF919D8252F

📌面试干货|直接上硬菜:

设计抖音的评论系统

要求:

1、支持单条视频百万级评论的实时发布与读取;
2、评论列表默认按热度(综合点赞、回复、时间等因素)排序,也需支持按时间正/倒序切换;
4、核心接口P99延迟<100ms。请给出数据存储、缓存、热度计算与更新、分页查询的完整设计方案,并解决高并发写和‘深分页’的性能问题。

💡 【解析】|划重点!

家人们谁懂啊!这道题看似常规,实则藏着字节的“小心机”——结合抖音亿级流量的极端场景,直接考察你能不能hold住高并发、复杂排序、缓存设计这些硬技能,是区分普通后端和高级后端的关键题!

🎯 核心设计思路|手把手拆解,小白也能看懂

1. 存储架构|百万级评论的“藏身之处”
核心目标:搞定单视频百万评论的存储,避免跨分片拖慢速度,主打一个高效!

💾 主存储选择:分库分表的MySQL / 分布式数据库(如TiDB),高并发读写稳得一批~

🔑 分片策略:以video_id为分片键,同一视频的评论全放一个分片,杜绝跨分片查询的坑!

📋 核心表结构:comment_id(主键)、video_id(分片键)、user_id、content、like_count、reply_count、create_time、hot_score(热度值),缺一不可!

2. 热度计算|热门评论怎么“选”出来?
避坑提醒:热度是动态变化的,实时计算必崩!最优解就是「异步计算+定期更新」,主打一个省资源、不卡顿~

热度计算公式|直接抄作业:hot_score = log10(like_count×2 + reply_count) + (create_time - 固定基点时间戳)/衰减因子

计算逻辑:由离线/近线任务批量算,定期把hot_score更回数据库,既不拖慢接口,又能实时跟上热度变化,完美!

3. 缓存与读取策略|P99<100ms的关键操作
多级缓存叠buff,延迟直接打下来!流程图一看就懂,建议收藏备用👇

https://uploadfiles.nowcoder.com/images/20260416/369475507_1776323096089/6E3CC017A8AC43BBAFDBFFAC33E48513

🖥️ 本地缓存:缓存顶级热门视频的前几页热评,TTL设10秒,减少Redis压力,快到飞起!

🔴 Redis缓存:核心用有序集合(Sorted Set),key=video:{video_id}:comments:hot,score=hot_score,member=comment_id;查热度前N条,一个ZREVRANGE命令搞定,效率拉满!

🔄 缓存更新机制:

    评论发布/删除:同步更新数据库,并异步发送消息到MQ。一个Worker消费消息,重新计算该视频评论列表的缓存(或仅更新受影响的有序集合成员)。

点赞/回复:这些行为会改变热度。通过消息队列异步触发对应评论hot_score的重算,并更新Redis有序集合中的分数。

4. 深分页问题|后端人的“噩梦”,这样破解!

🔥 热度排序分页
直接躺赢!Redis有序集合的ZREVRANGE key start end命令,天然支持高效分页,不用额外折腾,直接定位目标页码~

⏰ 时间排序分页
避坑!别用LIMIT M, N(会扫前M条无用数据),改用WHERE create_time < {上一页最后一条时间},精准定位,速度翻倍!

🌰 真实业务场景|抖音评论区背后的真相
家人们,这可不是纸上谈兵!咱们点开抖音任意热门视频,评论区能秒刷、实时更,背后就是这套架构在撑着~ 比如央视新闻发一条视频,几分钟涌入几十万条评论,系统既要扛住高并发写入,又要让所有人看到实时热门评论,体验丝滑不卡顿,全靠这些设计!

📚 【核心考点】|必背!面试直接套

✅ 关系型数据库与NoSQL的混合协同设计

✅ Redis高级数据结构(Sorted Set)的实战应用

✅ 复杂指标(热度)的异步计算模型

✅ 高并发写入下的最终一致性保证

✅ 数据库深分页的优化方案

⚠️ 避坑指南|这些坑别踩!踩了必挂
缓存击穿:热门视频空缓存Key,用分布式锁控制仅一个请求回源建缓存,其他请求等待,避免缓存雪崩!

排序稳定性:热度公式要AB测试调参,既要给新评论曝光机会,又要留住高质量老评论,不然用户体验拉胯~

评论计数:video的comment_count在Redis用INCR异步更,再同步回DB,别让计数拖慢整个系统!

🚨 趋势押题预测|2026必考!命中率85%
    此处省略一万字......!!!!

💡 最后提醒:这道题+押题,建议关注、收藏反复看,字节二面/三面很大概率碰到,别等面试慌了才临时抱佛脚!
                     ~加好友工具搜索:【页页谈说说】,获取最新全集+押题集

#面试问题记录##大厂##面经##AI时代还有必要刷leetcode吗?#
全部评论
蹲个offer
1 回复 分享
发布于 04-16 15:30 广东

相关推荐

04-13 12:02
门头沟学院 Java
屯大软件一面Q1:&nbsp;先简单自我介绍一下。Q2:&nbsp;你是什么时候开始接触&nbsp;Java&nbsp;开发的?Q3:&nbsp;学习过程是完全自学的吗?学校有相关课程吗?二、&nbsp;Java&nbsp;基础能力Q4:&nbsp;Java&nbsp;里面的基本数据类型有哪些?Q5:&nbsp;Java&nbsp;的集合类型分为哪几大块?常用的有哪些?Q6:&nbsp;ArrayList&nbsp;和&nbsp;LinkedList&nbsp;的底层实现有什么区别?Q7:&nbsp;在查找和插入操作上,ArrayList&nbsp;和&nbsp;LinkedList&nbsp;哪个更快?为什么?Q8:&nbsp;接口(Interface)跟抽象类(Abstract&nbsp;Class)有什么区别?Q9:&nbsp;在实际应用或实习中,你是如何区分使用接口和抽象类的?Q10:&nbsp;方法的重载(Overload)跟重写(Override)有什么区别?Q11:&nbsp;谈谈&nbsp;Java&nbsp;中的装箱跟拆箱,它们的原理是什么?Q12:&nbsp;static&nbsp;关键字有哪些作用?可以修饰哪些地方?Q13:&nbsp;Java&nbsp;的异常体系是怎样的?Error&nbsp;和&nbsp;Exception&nbsp;有什么区别?Q14:&nbsp;遇到异常通常有哪些解决方法?三、&nbsp;并发与多线程Q15:&nbsp;在&nbsp;Java&nbsp;中创建多线程有哪几种方法?Q16:&nbsp;线程的生命周期分为哪几个阶段?Q17:&nbsp;什么是公平锁?什么是非公平锁?它们有什么区别?Q18:&nbsp;你知道哪些典型的锁是公平的或非公平的?四、&nbsp;框架底层与原理Q19:&nbsp;Spring&nbsp;的两大核心思想是什么?Q20:&nbsp;Spring&nbsp;声明式事务(@Transactional)的底层实现原理是什么?Q21:&nbsp;Spring&nbsp;Boot&nbsp;的自动配置(Auto-Configuration)原理你了解吗?五、&nbsp;数据库与中间件Q22:&nbsp;MySQL&nbsp;事务的四大特性(ACID)分别指什么?Q23:&nbsp;MySQL&nbsp;常见的索引类型有哪些?Q24:&nbsp;谈谈数据库索引底层&nbsp;B+&nbsp;树的实现原理。Q25:&nbsp;Redis&nbsp;常用的数据类型有哪些?Q26:&nbsp;什么是分布式锁?在&nbsp;Redis&nbsp;中通常怎么实现?Q27:&nbsp;消息队列(MQ)主要用来解决什么问题?Q28:&nbsp;能结合你的实习项目讲讲&nbsp;MQ&nbsp;“削峰填谷”的具体应用吗?六、&nbsp;工程实践与岗位匹配Q29:&nbsp;Linux&nbsp;操作系统的基础命令了解吗?Q30:&nbsp;在项目中有没有配置过&nbsp;Nginx?负载均衡有哪些常用算法?Q31:&nbsp;对前端了解深吗?有没有做过联调以外的前端工作?Q32:&nbsp;如果实习岗位需要做一些“全栈”的工作,你可以接受吗?Q33:&nbsp;你平时会用到哪些&nbsp;AI&nbsp;开发工具来辅助编程?Q34:&nbsp;你现在大三,最长可以实习多久?Q35:&nbsp;你有什么想问我的吗(反问环节)?
点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务