杭州有赞Java一面面经

有赞 · Java开发工程师 · 一面 · 杭州 · 2026-04

《面试题目》

  1. 请你总结一下自己负责的工作,包括你在项目中承担的角色、对负责模块 / 整个系统的理解;给不了解系统的人,介绍下你做的产品 / 系统是什么、解决什么问题、核心架构是怎样的。
  2. 你做的分布式链路异步化改造,背景是什么?为什么要做?你是怎么落地的?
  3. 这次异步化改造后,提升了系统的扩展性与容错能力,容错能力主要体现在哪些方面?
  4. 失败重试 / MQ 重试,会不会导致多发券?你怎么保证不重发、不多发券?
  5. 你做的营销模块高并发优化,解决了什么核心问题?为什么要做这个优化?
  6. 你是怎么解决单用户优惠券超领问题的?
  7. 你是怎么解决高并发下优惠券库存超发为负数的问题的?
  8. 高并发场景下,用这个乐观锁方案会不会有性能问题?为什么?如果并发量持续上涨,如何优化?
  9. 你在项目中有没有遇到过性能瓶颈 / 做过压测与性能优化实践?具体是什么场景,遇到了什么问题,怎么解决的?
  10. 请分享一下你的 AI 相关实践,包括你对 AI 的使用、好用的工具 / 方法,怎么用 AI 能达到更好的效果?

《参考解析》

关于MQ重试与防幂等(第4题): 核心是实现接口幂等性。可采用“全局唯一ID+Redis记录”或“数据库唯一索引”方案。在发券前判断流水号是否存在,确保即便MQ重复投递,逻辑也只执行一次。

关于高并发库存超发(第7题): 常用方案包括:1. 数据库层面利用 UPDATE table SET stock = stock - 1 WHERE id = ? AND stock > 0 保证原子性;2. Redis原子递减(Lua脚本),将库存预热至Redis,抗住高并发流量。

关于乐观锁性能瓶颈(第8题): 乐观锁在高并发竞争激烈时会导致大量重试,CPU消耗高。优化方案:1. 分段锁(将库存拆分到多个记录);2. 引入限流降级措施;3. 将库存扣减逻辑由数据库同步转为Redis异步削峰填谷。

关于系统异步化改造(第2-3题): 核心是提升响应速度与解耦。容错性体现在:通过MQ实现失败重试和死信队列处理,避免因下游服务抖动导致主业务流程失败,增强了系统应对突发流量的稳定性。