一、技术基础

1. Java核心

集合:HashMap底层结构(数组+链表/红黑树)、ConcurrentHashMap分段锁机制、ArrayList vs LinkedList
并发:synchronized锁升级过程、ReentrantLock的AQS实现、线程池参数(核心/最大线程数、队列类型)
JVM:内存分区(堆、栈、方法区)、GC算法(CMS/G1区别)、OOM排查工具(jstat、MAT)

2. 数据库

事务:ACID特性、脏读/不可重复读/幻读场景、MVCC实现原理
索引:B+树结构、最左前缀原则、覆盖索引优化、索引失效场景(如LIKE “%xx”)
:行锁 vs 表锁、死锁检测(SHOW ENGINE INNODB STATUS)

3. Spring框架

IOC:Bean生命周期、依赖注入方式(构造器 vs @Autowired)
AOP:动态代理(JDK/CGLIB)、切面执行顺序(@Order)、事务传播机制

4. Redis

缓存穿透/雪崩/击穿:解决方案(布隆过滤器、随机过期时间、互斥锁)
数据结构:String/Hash适用场景、ZSet跳表实现、持久化机制(RDB/AOF)
分布式锁:Redisson看门狗机制、与ZooKeeper对比

5. 设计模式

单例:双重检查锁、静态内部类实现
工厂模式:Spring BeanFactory vs FactoryBean
代理模式:动态代理在Spring AOP中的应用


二、项目亮点

1. JWT身份验证

技术点:Token结构(Header/Payload/Signature)、如何防篡改(签名算法)
优化:ThreadLocal保存用户上下文、拦截器链的执行顺序

2. 分布式锁(Redis + Lua)

关键逻辑:Lua脚本保证原子性、锁续期问题(需说明未实现续期的潜在风险)
对比方案:Redisson的看门狗机制、ZooKeeper临时有序节点

3. Redis缓存设计

淘汰策略:LRU vs LFU、缓存预热/降级方案
一致性:双写一致性方案(先更新库还是先删缓存?)

4. WebSocket长连接

对比HTTP轮询:减少无效请求、如何解决断线重连
性能优化:心跳机制、连接数管理(Netty的ChannelGroup)

5. Spring Task定时任务

缺点:单机任务阻塞问题、集群环境下任务重复执行
替代方案:分布式任务框架(XXL-JOB、Quartz)

6. 分布式Session

Hash vs String:内存节省原理(Hash字段独立存储)、部分更新优势
扩展问题:Redis集群下Session同步方案(一致性哈希)


三、扩展问题

  1. 系统设计:如何设计一个高并发秒杀系统(限流、削峰、异步扣库存)?
  2. 场景题:订单超时未支付如何实现?(Redis过期Key监听 vs 延迟队列)
  3. 故障排查:线上接口响应慢,如何定位问题?(链路追踪、慢SQL分析、线程Dump)
  4. 优化经验:项目中遇到的最大性能瓶颈是什么?如何解决的?

四、软技能

  1. 项目难点:用STAR法则描述一个技术挑战(如高并发下的超卖问题)。
  2. 团队协作:如何与前端/测试协作?代码冲突如何解决?
  3. 学习能力:最近学习的开源技术(如RocketMQ、Elasticsearch)。

五、高频问题示例

  1. JWT的优缺点:无状态 vs 无法主动失效(需结合Redis黑名单解决)。
  2. 为什么用Lua脚本:保证原子性(避免客户端多命令执行失败)。
  3. ThreadLocal内存泄漏:为什么用弱引用?如何避免(remove()清理)?
  4. Spring Boot自动配置:@EnableAutoConfiguration原理(spring.factories加载)。

准备建议
技术细节:每个功能点至少能说出2种实现方案及其优缺点。
项目闭环:数据验证(如缓存命中率提升多少?超卖降低多少?)。
模拟面试:找朋友模拟技术深挖,尤其是项目中的技术选型逻辑。

祝面试顺利! 🚀