字节跳动 Java / 后端怎么准备
字节跳动后端面试,公开讨论里常把基础题嵌进推荐、中台或效率工具的量级里。只背集合类不够,要能把方案说到流量和失败路径。
本页五道题分别对应缓存热点、异步超时、GC 排障、计数一致性和协作冲突。用你自己的项目数字替换参考答案里的量级。
字节怎么面Java后端
- 常见是编码或基础之后进入项目深挖,再给一个带流量约束的设计题。
- 面试官会追问「量级再涨十倍怎么办」,准备好限流、降级和数据核对。
- 业务 sense:你的方案如何服务推荐或中台的产品目标,而不只是组件罗列。
面试阶段与知识点
第一批不把每个阶段拆成独立 URL,避免程序化重复页。阶段对应下面的题,练完再用模拟面试串起来。
- 运行时与并发:GC、线程模型和锁,要能连到一次真实超时。
- 高流量设计:热点、异步和一致性,用推荐或中台场景说话。
- 项目深挖:讲你做过的峰值、回滚和核对,而不是功能清单。
- 协作:排期冲突和线上事故,用事实而不是态度评价。
值得开口练的题
每题给考察点、思路、结构化参考答案和追问。参考答案用来组织语言,面试时必须换成你自己的项目事实。
推荐流里某个热点 Key 把 Redis 打穿,你会怎么处理?
考察点
- 本地缓存与单一热点
- 互斥重建与过期策略
- 对下游存储的保护
回答思路
先承认这是读多写少的热点,而不是普通缓存击穿。按「挡住打穿 → 降低回源 → 可观测」说。
结构化参考答案
- 先用实例级短 TTL 本地缓存挡住同一 Key 的瞬时并发,避免所有线程同时回源。
- 回源用单飞或分布式锁,只允许一个请求重建;失败要有空值短缓存,避免雪崩。
- 热点可打散:按用户分片、或把计数类改成近似结构,权衡绝对准确和可用性。
- 加熔断和限流保护 DB;看板看 QPS、命中率和重建耗时,而不是只看 CPU。
面试官可能追问
- 本地缓存造成多实例数据不一致,你能接受多久?
- 如果是写热点而不是读热点,方案怎么变?
- 如何证明改完之后不会把延迟抖动藏起来?
订单超时未支付要用延迟队列,怎么避免重复关单?
考察点
- 消息延迟与重试
- 状态机幂等
- 对账兜底
回答思路
不要一上来只报中间件名字。先画状态:待支付、已支付、已关闭,再谈投递语义。
结构化参考答案
- 关单必须带版本或状态条件更新:只有待支付才能关闭,已支付直接忽略消息。
- 延迟消息允许重复,消费者做幂等键(订单号+动作),重复投递返回成功。
- 支付回调和关单是竞争条件,要用同一行的条件更新或事务消息,避免关了还能付。
- 最终靠对账扫单补漏,延迟队列不是唯一真源。
面试官可能追问
- 如果支付成功通知晚到十分钟,你怎么处理已关闭订单?
- 为什么不直接用定时扫表?
- 死信之后谁负责人工?
午高峰接口超时,日志里出现 Full GC,你怎么定位?
考察点
- 停顿与请求超时的因果关系
- 分配来源
- 临时缓解和根治
回答思路
把现象连起来:GC 停顿 → 线程阻塞 → 上游超时。再说你如何证明不是偶发网络。
结构化参考答案
- 对齐时间线:GC 日志停顿、接口 P99、线程栈,确认超时是否落在停顿窗口。
- 看分配:大对象、缓存无限增长、正则或 JSON 解析是否在热路径。
- 临时:扩容、缩短超时、限制单次查询大小;根治:改数据结构、对象复用、分代/分区选择要有依据。
- 上线后用同一套看板验证 P99 和 GC 次数一起下降。
面试官可能追问
- CMS 和 G1 在这种场景你怎么选?
- 如果是内存泄漏而不是年轻代抖动,证据是什么?
- 能不能在不调 GC 参数的情况下先降低分配?
评论点赞数缓存和数据库对不上,你怎么设计?
考察点
- 计数场景的精度
- 异步回写
- 用户感知
回答思路
先问产品能接受的误差。推荐场景往往允许短暂不准,但不能永久漂移。
结构化参考答案
- 写路径:先落明细或 WAL,再异步聚合,避免每次点赞都打主库行锁。
- 读路径:缓存作加速,定期用明细重算覆盖,防止长期漂移。
- 个人主页上的「我刚点的赞」可用用户维短缓存保证感知,和全局面值分开。
- 对账任务按内容 ID 扫描,异常进入修复队列而不是默默覆盖。
面试官可能追问
- 如果要做反作弊延迟入账,计数何时可见?
- 缓存击穿时是否允许显示旧值?
- 明细表会不会比计数更先成为瓶颈?
产品要把高风险改动提前上线,你作为后端怎么谈?
考察点
- 风险量化
- 灰度与回滚
- 不情绪化
回答思路
用 STAR 讲清楚:冲突点是风险而不是脾气。先对齐业务目标,再给出可执行的灰度与回滚折中,而不是简单否决。
结构化参考答案
- 情境:大促前产品要把未完成的降级开关直接全量上线,窗口极短且影响面大。
- 任务:在不挡业务目标的前提下,把不可逆风险挡住,并给出可验证的放量路径。
- 行动:列出最坏影响、提出小流量灰度、准备一键回滚和核对指标,明确谁值班谁拍板。
- 结果:按灰度放量,问题在 1% 流量暴露并快速回滚,全量推迟到修复后再开。
面试官可能追问
- 如果对方以业务损失施压,你还坚持什么?
- 这次之后流程上你会改什么?
- 你如何避免被看成「只会说不」?
和岗位、模拟面试一起用
资料管理里保存目标岗位 JD,模拟面试会按简历出题。点题目下的按钮会把本题带进模拟开场,仍需先绑定简历与岗位。