这次分享一道新的 TikTok 风格面试题,背景是直播的实时字幕。字幕会反复修正,消息还会乱序到达。问题是怎么保证观众看到的始终是最新版本。
Design a live-caption update processor for a video stream. Each update contains
segmentId,revision,startMs,endMs,text, andisFinal. Updates may arrive out of order or be delivered more than once. For each segment, keep only the update with the highest revision and display segments ordered bystartMs, thensegmentId. A final segment can still be corrected by a higher revision. After every update, return the current visible captions. Explain how you handle duplicates, stale updates, and concurrent writers.
设计一个视频直播字幕更新处理器。每条更新包含字幕片段 ID、版本号、起止时间、文字和是否为最终版本。更新可能乱序或重复到达。每个片段只保留版本号最高的更新,展示时先按开始时间、再按片段 ID 排序。即使字幕已标为最终版本,仍可被更高版本修正。每收到一条更新,都返回当前可见字幕,并说明如何处理重复、过期更新及并发写入。
举个例子,某条字幕第 1 版是 “I love code”,第 3 版修正为 “I love coding”。如果第 2 版此时才到,就应该直接忽略,不能让屏幕上的字幕倒退。isFinal 也不是永远不能修改的意思,题目已经明确允许更高版本纠错。
实现时最直接的办法是用 segmentId 建一张哈希表,保存每段字幕当前的最高 revision。新消息来了先比较版本:更旧或重复的版本不更新,更高版本才替换。展示时再按 startMs 和 segmentId 排序。如果数据量很大,还可以维护有序索引,避免每次都重新排序。
真正值得讨论的是并发写入。两个线程同时更新同一段字幕时,版本比较和替换必须作为一次原子操作完成,否则旧版本可能覆盖新版本。还要注意字幕修正后开始时间发生变化,展示顺序也得跟着更新。
这题不需要写很多代码,重点就是把“乱序、去重、版本覆盖、排序和并发安全”讲清楚。看起来只是字幕更新,背后考的是实时数据处理里很常见的一致性问题。
CSOAHELP 持续整理真实科技公司面试题,也设计贴近业务场景的练习题,提供 Mock Interview、系统设计辅导和实时面试思路支持。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

