字节后端面经:异步任务恢复、规则系统与文件存储
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
国际化广告后端,9 月 15 日
- 能否做一下自我介绍?
- 是否了解 Nacos 的架构?
- 抽象类与接口有什么区别?
- 动态代理是什么,怎样实现?
- Lambda 表达式是什么,没有它时可以怎样实现相同功能?
- 函数式接口是什么,常用的有哪些?
- 怎样把主线程和线程池中的日志关联起来?
- Java 中有哪些实现异步执行的方式?
- Java 的异常体系是怎样的?
- Spring 常用注解有哪些,
@Value有哪些用法? - 想在 Bean 初始化前执行操作,可以在哪个扩展点实现?
- Spring Boot 的启动过程是怎样的,如何编写自己的 starter?
- MySQL 的 CHAR 与 VARCHAR 有什么区别,用 CHAR 存字符串“0”时怎样处理?
- 索引失效指什么,慢 SQL 怎样排查?
- 买卖股票的最佳时机这类问题怎样求解?
- 平时怎样学习,如何看待程序员使用智能编程工具?
TikTok 后端,9 月 10 日
- 超长视频等大体量内容如何分片和处理?
- 不同用户导入相同或相似内容时如何去重?
- 项目使用哪些效果指标,如何设计评估并提供数据支撑?
- 为什么选择 Celery,与其他任务队列方案怎样比较?
- 任务从分发到执行的完整流程是什么?
- Worker 中途失败或宕机时怎样恢复?
- 重试机制如何设计,怎样限制次数并避免无限重试?
后端开发,9 月 9 日
- 能否介绍个人背景,以及项目中最有挑战的问题?
- 了解哪些设计模式?
- 用过哪些中间件,Redis 在项目里怎样使用?
- 极大量数据中的 Top 100 怎样求解?
TikTok 后端,9 月 8 日
- 学校、专业及主攻方向是什么,什么时候能入职,可以实习多久,学校是否支持?
- 在采购管理模块主要负责哪些开发和维护工作?
- 为什么选择 QL Express 作为动态表达式方案,选型依据是什么?
- 当前发票校验规则怎样设计,规则从几十条增长到数千条甚至上万条时怎样调整架构?
- 怎样快速迭代规则,并控制对已有业务的影响?
- 如何抽象分类规则、提取共性和隔离变化点,降低耦合?
- PDF 合同目前怎样存取,对底层存储实现了解多少?
- 如果重新设计文件存储系统,会怎样组织数据和访问流程?
- 高可用分布式文件存储怎样设计,哈希路由与主从异步备份在极端故障下有什么数据风险?
- 独立开发的 CLI 编程 Agent 有哪些核心模块?
《参考解析》
任务恢复先回答“上一次做到哪了”
任务要有稳定标识,把执行阶段和结果保存在进程之外。Worker 退出后,接替者能判断任务尚未开始、已经完成,还是停在某个中间步骤。消息确认、超时及重新投递规则需要与任务框架的实际配置一起说明,不能只说队列会自动重试。
对外部系统产生副作用的步骤尤其需要幂等。例如已经上传文件却没来得及记录成功,再执行时应能识别已存在的结果。临时网络失败可以有限重试,参数错误应直接结束;退避间隔、总尝试次数和最终失败记录都要明确。
规则数量增长后,先拆执行依赖
把规则的输入字段、适用条件、输出结果和版本独立表示,再区分字段校验、跨字段校验与需要查询外部系统的校验。能共享的数据先统一获取,避免每条规则各查一次数据库。只有存在先后依赖的规则才按依赖顺序执行。
一次校验应绑定确定的规则版本,才能复现结果。发布前用历史样本比较新旧规则的差异,发现问题后切回已知版本。表达式引擎还要限制可访问对象、执行时间和资源消耗,不能把任意表达式直接当可信代码运行。
“内容相同”和“语义相似”分开处理
完全相同的文件可以计算内容哈希,建立内容标识与用户文件记录的映射。语义相似的视频或文档则需要特征提取和相似度判断,阈值要通过标注样本评估,不能把相似直接当成同一个文件。共享底层存储时,用户权限和删除语义仍然独立。
异步备份存在尚未复制的窗口
文件写入主节点后立即向用户返回成功,若副本尚未收到数据,主节点此时损坏就可能丢失这次写入。讨论“不丢失”前,应明确要承受的是单机故障、机房故障还是更多副本同时损坏,再选择确认写入所需的副本数与故障域。
元数据和文件本体也需要协调:避免元数据显示上传成功、文件却未完整落盘。可以先写临时对象,校验长度与哈希后再发布可见记录,并定期检查孤立对象和缺失副本。
股票题要先明确交易限制
原帖只有题名,没有给出允许交易次数、手续费或冷冻期。若只允许一次交易,可扫描价格,同时维护此前最低价和最佳利润;若允许多次交易,就需要按具体限制设计状态。面试中先确认这几个条件,再给算法和复杂度。