成都500强外企27届Java全栈实习面经
《面试题目》
一、一面(技术面):
- 死锁怎么排查解决?
- Redis怎么防止误删别人的锁?
- 缓存数据库一致性如何保证?
- SQL优化有哪些手段?
- Java三大特性分别是什么?
- MQ消息丢失、重复消费问题如何解决?
- List和Map的区别?
二、二面(主管面):
- 侧重于性格、稳定性及处事能力测试,无技术问题。
《参考解析》
- 死锁排查:使用jstack命令查看线程堆栈信息,查找Deadlock关键字;预防可通过按固定顺序加锁、设置超时时间及使用重入锁。
- Redis防止误删:在释放锁时校验锁的UUID,仅当当前线程ID与锁的持有者一致时才删除,防止因过期导致误删其他线程创建的锁。
- 缓存一致性:采用先更新数据库,再删除缓存的策略;可配合延时双删或订阅Binlog实现最终一致性。
- SQL优化:包括建立覆盖索引、避免全表扫描、减少使用SELECT *、优化SQL语句中的JOIN操作及分析执行计划(Explain)。
- MQ丢消息/重复消费:丢消息可通过生产者确认机制(Confirm)和持久化解决;重复消费通过消费端的幂等性控制,如使用Redis记录唯一流水号。