简历知识点
一、技术基础
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同步方案(一致性哈希)
三、扩展问题
- 系统设计:如何设计一个高并发秒杀系统(限流、削峰、异步扣库存)?
- 场景题:订单超时未支付如何实现?(Redis过期Key监听 vs 延迟队列)
- 故障排查:线上接口响应慢,如何定位问题?(链路追踪、慢SQL分析、线程Dump)
- 优化经验:项目中遇到的最大性能瓶颈是什么?如何解决的?
四、软技能
- 项目难点:用STAR法则描述一个技术挑战(如高并发下的超卖问题)。
- 团队协作:如何与前端/测试协作?代码冲突如何解决?
- 学习能力:最近学习的开源技术(如RocketMQ、Elasticsearch)。
五、高频问题示例
- JWT的优缺点:无状态 vs 无法主动失效(需结合Redis黑名单解决)。
- 为什么用Lua脚本:保证原子性(避免客户端多命令执行失败)。
- ThreadLocal内存泄漏:为什么用弱引用?如何避免(remove()清理)?
- Spring Boot自动配置:@EnableAutoConfiguration原理(spring.factories加载)。
准备建议:
• 技术细节:每个功能点至少能说出2种实现方案及其优缺点。
• 项目闭环:数据验证(如缓存命中率提升多少?超卖降低多少?)。
• 模拟面试:找朋友模拟技术深挖,尤其是项目中的技术选型逻辑。
祝面试顺利! 🚀