超星集团java一面面经
面试题目
一、基础与中间件
- 线程池的参数一般怎么设置?依据是什么?
- G1 垃圾回收器的设计原理是什么?
- MySQL 可重复读(RR)下如何避免幻读?
- SQL 走了索引还是很慢,怎么优化?
- 如何保证缓存(Redis)和数据库的一致性?
- Redis 缓存雪崩怎么解决?
- Kafka 如何保证消息不丢失、不重复消费?
- Spring AOP 如何实现方法耗时统计?
二、项目与实习 9. 请讲一段你实习中做得比较关键的项目。 10. 项目中有用到事务吗?如何保证一致性?
三、AI 与开放设计 11. MCP 是什么? 12. 如果让你用 AI 优化教务系统,你会怎么做?
四、行为与规划 13. 你未来的职业规划是什么? 14. 你有什么想问我们的?
参考解析
- 线程池: IO密集型建议核心线程设为2N,CPU密集型为N+1。需依据任务等待时间与计算时间比例进行压测调整。
- G1: 核心在于Region分区回收,将堆内存划分为多个小区域,通过Remembered Set记录跨区引用,使用Mixed GC回收垃圾比例最高的Region。
- MySQL幻读: RR级别下,InnoDB使用Next-Key Lock(记录锁+间隙锁)锁定范围,防止其他事务在间隙插入数据。
- SQL优化: 先通过EXPLAIN分析执行计划;排查索引失效(隐式转换、函数操作);大数据量下考虑分库分表或ES检索;引入缓存降低DB压力。
- 一致性: 推荐“Cache-Aside”策略:更新DB后删除缓存。若追求强一致性需引入分布式锁或二次确认机制。
- 缓存雪崩: 设置随机过期时间分散压力;热点Key失效时采用互斥锁或逻辑过期,仅一个线程重建缓存。
- Kafka: 不丢消息需设置acks=all及重试机制;不重复消费需在消费端利用数据库唯一索引或Redis实现幂等处理。
- Spring AOP: 定义@Around增强,在ProceedingJoinPoint执行前后调用System.currentTimeMillis()计算差值即可统计。