Java项目场景压力面看你能撑到第几轮
我看你简历里写了做过千万级用户的类似抖音的短视频社交平台,那我问下,你们平台用户刷首页推荐视频时,视频加载速度一般要求是比较高的,你们是怎么做到的?后台提前加载马上要推荐的几个视频。那视频推荐列表是实时计算的还是预生成的?用了缓存的话,缓存的是整个列表还是单条视频数据?如果某个视频被下架,怎么快速从推荐列表中移除?视频详情页要展示点赞数、评论数、分享数,这些数据是实时查数据库吗?高并发下会不会有性能问题?你们用了Redis的计数器吗?Redis 的 incr 命令如果遇到网络波动,导致计数重复累加怎么办?怎么保证Redis计数和数据库的一致性?评论系统支持用户回复和点赞,评论数据量很大,你们怎么存储的?分库分表。那分表的策略是什么?热门视频的评论有几万条,分页查询时是怎么优化的?如果用户跳页查询,这种场景怎么处理?用户上传视频后,需要经过转码、审核才能发布,这个流程是同步还是异步的?用了任务队列吗?如果转码任务失败了,怎么重试?重试次数有限制吗?大量失败任务堆积在队列里,怎么避免影响正常任务的执行?
平台有用户画像和兴趣标签,用于精准推荐,这些标签是怎么生成的?通过用户实时操作时做一些埋点数据给到后台做实时计算生成。那实时埋点数据怎么处理了?用了 Flink 或者 Kafka Streams 吗?如果用户行为数据突增(比如某热点事件),实时计算流处理任务怎么防止 OOM?
我看你项目里写为了降低数据库压力,做了多级缓存,那本地缓存和分布式缓存Redis是怎么配合使用的?本地缓存的失效策略是什么?如果分布式缓存更新了,怎么通知所有服务节点更新本地缓存?
视频内容有冷热之分,老视频访问量低但不能删,你们怎么存储这些冷数据?用了对象存储(比如 OSS)还是归档数据库?冷数据如果突然被大量访问(比如老视频因热点事件爆火),怎么避免缓存穿透和数据库压力激增?