得物Java开发一面面经
《面试题目》
1. 项目与场景题
- 自我介绍及项目经历介绍
- 针对项目经历的场景化设计提问
2. 八股文考察
- Redis:缓存穿透、缓存击穿、缓存雪崩及其解决方案
- Java并发:Lock与tryLock的区别、看门狗机制、线程池7大参数、IO密集型与CPU密集型任务处理
- MySQL:执行计划(Explain)包含的属性、索引失效场景、索引类型、MySQL四种隔离级别
《参考解析》
- 缓存穿透、击穿、雪崩:穿透指查询不存在数据,用布隆过滤器或缓存空对象解决;击穿指热点Key过期,用互斥锁或逻辑过期解决;雪崩指大量Key同时过期,用过期时间随机化或集群高可用解决。
- Lock与tryLock:Lock会阻塞等待获取锁,tryLock尝试获取,若失败立即返回false,不会一直阻塞,适用于避免死锁场景。
- 线程池7大参数:corePoolSize核心线程数、maximumPoolSize最大线程数、keepAliveTime空闲时间、unit单位、workQueue工作队列、threadFactory线程工厂、handler拒绝策略。
- 索引失效场景:如使用SELECT *、对索引列进行函数计算、使用不等于(!=/<>)、or连接非索引列、模糊查询以%开头等。
- MySQL隔离级别:读未提交、读已提交(RC)、可重复读(RR,MySQL默认)、串行化。主要通过MVCC机制和锁机制实现以解决脏读、不可重复读和幻读问题。