美的 Java 秋招一面:RT 升高、Kafka 堆积与分布式锁设计
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
面试 24 届,无手撕,全部围绕八股与项目场景追问。
- 查询数据库的接口 RT 越来越高,怎么处理?
- 能不能匹配到联合索引?底层数据结构是什么?
- Kafka 消息堆积怎么办?
- 幂等是怎么设计的?
- 分布式锁是怎么设计的?SET NX EX 为什么要原子执行?
- Redisson 的看门狗机制是怎么做的?
- 流量控制是怎么做的?
- AI 智能客服的幻觉怎么产生的?怎么解决?
- Transformer 架构由哪些组件构成,各自的功能是什么?
- 跨域问题怎么解决?
- AI coding 的题目你是怎么做的?
《参考解析》
接口 RT 升高先定位再优化
按链路分段量化:网关、应用、SQL、下游 RPC、序列化各占多少。数据库侧先看慢查询日志和执行计划,确认是全表扫描、回表过多、还是索引选择性差;应用侧看连接池等待、GC 停顿、线程池排队。没有分段数据就动手加缓存,通常只是把问题推后。
联合索引能不能用上
联合索引遵循最左前缀:条件里跳过最左列、或在列上套函数与隐式类型转换,都会让后续列失去索引能力。范围查询之后的列一般也只能过滤、不能继续用于定位。判断依据是执行计划里的 key 与 key_len,不是猜。
Kafka 堆积
先区分是短时流量尖峰还是消费能力长期不足。消费者侧看单条处理耗时、是否有同步阻塞的下游调用,能并发就提高分区数与消费者并发;消费逻辑里的批量写、慢 SQL、同步 HTTP 是最常见的瓶颈。长期方案是削峰、批处理与背压,而不是无限加机器。
幂等与分布式锁
幂等要落到唯一键上:业务单号加唯一索引,插入冲突即视为重复;或者状态机加乐观锁版本号,保证同一条记录只被推进一次。Redis 锁用 SET key value NX PX ttl 一条命令完成「判断 + 占位 + 过期」,拆成 SETNX 再 EXPIRE 会在两步之间宕机留下永不过期的死锁。value 放请求标识,释放时用 Lua 比对后再删,避免误删别人的锁。Redisson 的看门狗在未显式指定过期时间时按固定周期续期,进程崩掉后锁自然过期。
AI 客服幻觉
幻觉来自模型在缺乏依据时仍然生成流畅文本。工程上的收敛手段:检索增强把回答限制在知识库片段内,找不到依据就转人工;约束输出结构并做后置校验,金额、时效、政策这类字段走规则或数据库回填;上线前用真实问题集回归,重点盯高频问题的错误率。