字节跳动 Java / 后端怎么准备

更新于 2026-09-02 · 面试易

字节跳动后端面试,公开讨论里常把基础题嵌进推荐、中台或效率工具的量级里。只背集合类不够,要能把方案说到流量和失败路径。

本页五道题分别对应缓存热点、异步超时、GC 排障、计数一致性和协作冲突。用你自己的项目数字替换参考答案里的量级。

字节怎么面Java后端

面试阶段与知识点

第一批不把每个阶段拆成独立 URL,避免程序化重复页。阶段对应下面的题,练完再用模拟面试串起来。

值得开口练的题

每题给考察点、思路、结构化参考答案和追问。参考答案用来组织语言,面试时必须换成你自己的项目事实。

推荐流里某个热点 Key 把 Redis 打穿,你会怎么处理?

难度 困难 · 出现频率 高 · 系统设计

考察点

  • 本地缓存与单一热点
  • 互斥重建与过期策略
  • 对下游存储的保护

回答思路

先承认这是读多写少的热点,而不是普通缓存击穿。按「挡住打穿 → 降低回源 → 可观测」说。

结构化参考答案

  1. 先用实例级短 TTL 本地缓存挡住同一 Key 的瞬时并发,避免所有线程同时回源。
  2. 回源用单飞或分布式锁,只允许一个请求重建;失败要有空值短缓存,避免雪崩。
  3. 热点可打散:按用户分片、或把计数类改成近似结构,权衡绝对准确和可用性。
  4. 加熔断和限流保护 DB;看板看 QPS、命中率和重建耗时,而不是只看 CPU。

面试官可能追问

  • 本地缓存造成多实例数据不一致,你能接受多久?
  • 如果是写热点而不是读热点,方案怎么变?
  • 如何证明改完之后不会把延迟抖动藏起来?

用这道题开始模拟面试

订单超时未支付要用延迟队列,怎么避免重复关单?

难度 中等 · 出现频率 高 · 系统设计

考察点

  • 消息延迟与重试
  • 状态机幂等
  • 对账兜底

回答思路

不要一上来只报中间件名字。先画状态:待支付、已支付、已关闭,再谈投递语义。

结构化参考答案

  1. 关单必须带版本或状态条件更新:只有待支付才能关闭,已支付直接忽略消息。
  2. 延迟消息允许重复,消费者做幂等键(订单号+动作),重复投递返回成功。
  3. 支付回调和关单是竞争条件,要用同一行的条件更新或事务消息,避免关了还能付。
  4. 最终靠对账扫单补漏,延迟队列不是唯一真源。

面试官可能追问

  • 如果支付成功通知晚到十分钟,你怎么处理已关闭订单?
  • 为什么不直接用定时扫表?
  • 死信之后谁负责人工?

用这道题开始模拟面试

午高峰接口超时,日志里出现 Full GC,你怎么定位?

难度 中等 · 出现频率 高 · 基础知识

考察点

  • 停顿与请求超时的因果关系
  • 分配来源
  • 临时缓解和根治

回答思路

把现象连起来:GC 停顿 → 线程阻塞 → 上游超时。再说你如何证明不是偶发网络。

结构化参考答案

  1. 对齐时间线:GC 日志停顿、接口 P99、线程栈,确认超时是否落在停顿窗口。
  2. 看分配:大对象、缓存无限增长、正则或 JSON 解析是否在热路径。
  3. 临时:扩容、缩短超时、限制单次查询大小;根治:改数据结构、对象复用、分代/分区选择要有依据。
  4. 上线后用同一套看板验证 P99 和 GC 次数一起下降。

面试官可能追问

  • CMS 和 G1 在这种场景你怎么选?
  • 如果是内存泄漏而不是年轻代抖动,证据是什么?
  • 能不能在不调 GC 参数的情况下先降低分配?

用这道题开始模拟面试

评论点赞数缓存和数据库对不上,你怎么设计?

难度 中等 · 出现频率 中 · 项目深挖

考察点

  • 计数场景的精度
  • 异步回写
  • 用户感知

回答思路

先问产品能接受的误差。推荐场景往往允许短暂不准,但不能永久漂移。

结构化参考答案

  1. 写路径:先落明细或 WAL,再异步聚合,避免每次点赞都打主库行锁。
  2. 读路径:缓存作加速,定期用明细重算覆盖,防止长期漂移。
  3. 个人主页上的「我刚点的赞」可用用户维短缓存保证感知,和全局面值分开。
  4. 对账任务按内容 ID 扫描,异常进入修复队列而不是默默覆盖。

面试官可能追问

  • 如果要做反作弊延迟入账,计数何时可见?
  • 缓存击穿时是否允许显示旧值?
  • 明细表会不会比计数更先成为瓶颈?

用这道题开始模拟面试

产品要把高风险改动提前上线,你作为后端怎么谈?

难度 入门 · 出现频率 中 · 行为与协作

考察点

  • 风险量化
  • 灰度与回滚
  • 不情绪化

回答思路

用 STAR 讲清楚:冲突点是风险而不是脾气。先对齐业务目标,再给出可执行的灰度与回滚折中,而不是简单否决。

结构化参考答案

  1. 情境:大促前产品要把未完成的降级开关直接全量上线,窗口极短且影响面大。
  2. 任务:在不挡业务目标的前提下,把不可逆风险挡住,并给出可验证的放量路径。
  3. 行动:列出最坏影响、提出小流量灰度、准备一键回滚和核对指标,明确谁值班谁拍板。
  4. 结果:按灰度放量,问题在 1% 流量暴露并快速回滚,全量推迟到修复后再开。

面试官可能追问

  • 如果对方以业务损失施压,你还坚持什么?
  • 这次之后流程上你会改什么?
  • 你如何避免被看成「只会说不」?

用这道题开始模拟面试

和岗位、模拟面试一起用

资料管理里保存目标岗位 JD,模拟面试会按简历出题。点题目下的按钮会把本题带进模拟开场,仍需先绑定简历与岗位。

用模拟面试练字节Java后端