面试基本信息
| **面试公司** | 得物 |
| **面试岗位** | Java 开发工程师 |
| **面试时长** | 约 50 分钟 |
| **面试形式** | 项目深挖 + 八股 + 场景题,**无手撕环节** |
| **考察范围** | 项目深挖、MySQL、Redis、线程池、MQ 场景题 |
一、项目深挖・数据权限体系
1. 挑一个实习 / 项目中比较有挑战的事情详细讲
2. 数据权限体系为什么要重构?
3. 原来的 **roleKey 硬编码** 有什么问题?
4. **AOP + MyBatis 动态 SQL** 的数据权限具体怎么实现?
5. 系统用户量大概多少?
6. 权限这种敏感功能上线有没有**灰度 / 验证方案**?
7. **接口权限和数据权限**分别怎么做?
8. 每次请求都重新计算用户权限吗?
9. 如果用户量很大,每次查询角色和权限数据库压力比较大,怎么优化?
10. **权限和业务缓存**怎么设计?
二、学校项目・数据采集链路
1. 学校项目的数据是怎么采集的?
2. PC、手机端和传感器之间的**数据链路**是什么?
3. 前端 **Vue / uni-app** 能不能看、能不能写?
三、MySQL・事务与锁
1. MySQL 四种**事务隔离级别**,各自解决什么问题?
2. **RR(可重复读)下幻读怎么解决?**
3. **间隙锁**是什么?
4. **批量更新怎么减少死锁?**
四、MySQL・索引与慢 SQL
1. MySQL 有哪些**索引类型**?
2. 常见**索引失效**场景有哪些?
3. 慢 SQL 怎么排查?
4. **EXPLAIN 主要看哪些字段?**
五、报表场景・实时与离线
1. 报表查询是**实时还是离线**?
2. 为什么不用离线计算 / 大数据方案?**数据量继续增长怎么办?**
六、Redis・缓存与分布式锁
1. **缓存穿透、击穿、雪崩**及解决方案
2. 分布式锁怎么实现?
3. **Redisson** 了解吗?**WatchDog 原理**?
七、线程池
1. 线程池**七大参数**
2. 线程池**任务提交执行流程**
3. 四种**拒绝策略**
4. **CPU 密集 / IO 密集**线程数怎么设置?
八、MQ・电商下单场景题
1. MQ 了解吗?
2. 电商下单流程里哪些操作应该**同步**,哪些可以 **MQ 异步**?
3. **创建订单、扣库存、支付、删除购物车、发短信、积分**分别怎么处理?
4. **MQ 重复消费怎么保证幂等?**
5. **本地消息表 / 事务消息**了解吗?
6. **优惠券**在下单流程里应该同步还是异步?