得物 Java 开发工程师一面面经
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 数据权限体系为什么要重构?硬编码 roleKey 有什么问题?
- AOP 和 MyBatis 动态 SQL 如何实现数据权限?
- 用户量大时如何降低权限查询的数据库压力?
- MySQL 四种事务隔离级别分别解决什么问题?
- RR 隔离级别下如何解决幻读?间隙锁是什么?
- 批量更新如何减少死锁?
- 常见索引失效场景有哪些?慢 SQL 怎么排查?
- 缓存穿透、击穿、雪崩分别如何解决?
- 分布式锁如何实现?Redisson WatchDog 的原理是什么?
- CPU 密集和 I/O 密集任务的线程数如何设置?
- 电商下单流程哪些操作应同步,哪些可以通过 MQ 异步?
- MQ 重复消费如何保证幂等?本地消息表和事务消息有什么作用?
《参考解析》
- 权限规则应从硬编码迁移到可配置的角色、资源和数据范围模型,由 AOP 注入上下文,再由 MyBatis 拦截器拼接安全条件;缓存权限时要有版本或失效策略。
- RR 通过一致性读快照和必要的 next-key lock 降低幻读风险;批量更新时按统一主键顺序分批提交、缩短事务并减少锁范围。
- 索引失效常见原因包括对列做函数或隐式类型转换、前导列缺失、低选择性条件和前置通配符。排查应结合慢日志、EXPLAIN、表统计信息和实际数据分布。
- 创建订单、扣库存和支付状态变更属于核心一致性步骤;短信、积分、购物车清理等可在事务提交后投递 MQ。消费者以订单号等业务键做幂等。
- Redisson WatchDog 会在锁仍由当前客户端持有时续租,避免业务执行期间过期;事务消息或本地消息表用于保证业务提交与消息投递最终一致。