面灵AI

得物 Java 开发工程师一面面经

时间
2026-09
来源
牛客网

《面试题目》

  1. 数据权限体系为什么要重构?硬编码 roleKey 有什么问题?
  2. AOP 和 MyBatis 动态 SQL 如何实现数据权限?
  3. 用户量大时如何降低权限查询的数据库压力?
  4. MySQL 四种事务隔离级别分别解决什么问题?
  5. RR 隔离级别下如何解决幻读?间隙锁是什么?
  6. 批量更新如何减少死锁?
  7. 常见索引失效场景有哪些?慢 SQL 怎么排查?
  8. 缓存穿透、击穿、雪崩分别如何解决?
  9. 分布式锁如何实现?Redisson WatchDog 的原理是什么?
  10. CPU 密集和 I/O 密集任务的线程数如何设置?
  11. 电商下单流程哪些操作应同步,哪些可以通过 MQ 异步?
  12. MQ 重复消费如何保证幂等?本地消息表和事务消息有什么作用?

《参考解析》

  1. 权限规则应从硬编码迁移到可配置的角色、资源和数据范围模型,由 AOP 注入上下文,再由 MyBatis 拦截器拼接安全条件;缓存权限时要有版本或失效策略。
  2. RR 通过一致性读快照和必要的 next-key lock 降低幻读风险;批量更新时按统一主键顺序分批提交、缩短事务并减少锁范围。
  3. 索引失效常见原因包括对列做函数或隐式类型转换、前导列缺失、低选择性条件和前置通配符。排查应结合慢日志、EXPLAIN、表统计信息和实际数据分布。
  4. 创建订单、扣库存和支付状态变更属于核心一致性步骤;短信、积分、购物车清理等可在事务提交后投递 MQ。消费者以订单号等业务键做幂等。
  5. Redisson WatchDog 会在锁仍由当前客户端持有时续租,避免业务执行期间过期;事务消息或本地消息表用于保证业务提交与消息投递最终一致。