航旅纵横java春招后端一面面经
《面试题目》
一面纯实习拷打,聚焦线上问题事故处理与系统设计 40min
- 线程池参数有哪些?如何根据任务类型来配置线程池参数?线程池的使用有什么规范吗?
- 线上线程池如何进行动态监控?如果线上线程池出现告警,你会怎么做,如何定位线程池告警的原因?线程池的拒绝策略如何去设计?
- 线上机器频繁出现内存溢出,你一般是如何处理的?如何基于MAT通过dump文件定位问题代码?如何及时止损?dump文件如何去看?有哪些东西是GC Root?
- 用mysql来设计一个分布式锁
- 多级缓存(3级及以上)如何确保数据的最终一致性?
- 线上出现慢查询你一般是如何去处理的?explain关键字如何使用?
- 请你设计一个能够高效给CSV中的10w条用户数据,发送SMS邮件的系统,整个后端你会怎么设计?
- CAS原理,G1垃圾回收器,CMS垃圾回收器,他们各自垃圾回收的过程,如何理解整个垃圾回收?
- AI coding的提示词怎么去写?skills在整个项目的开发周期当中如何去使用?你平时是怎么利用ai coding的?
《参考解析》
- 线程池配置:核心参数为corePoolSize, maxPoolSize, keepAliveTime等。CPU密集型配置N+1,IO密集型配置2N。规范包括严禁Executors静态工厂创建,必须使用ThreadPoolExecutor自定义。
- 内存溢出处理:及时止损需重启或扩容,通过jmap导出dump,使用MAT分析Leak Suspects。GC Roots包括虚拟机栈中引用的对象、方法区中类静态属性引用的对象等。
- MySQL分布式锁:利用唯一索引行锁(INSERT)或通过
GET_LOCK()函数实现,需注意锁超时、持有者自动释放及集群主从切换带来的锁失效问题。 - 多级缓存一致性:核心采用“先更新库,后删缓存”策略,配合延迟双删、订阅Binlog(如Canal)进行异步同步,保证数据的最终一致性。
- 慢查询优化:通过Explain分析执行计划,关注type、key、rows。处理方式包括添加索引、覆盖索引优化、调整SQL结构、拆分长事务。