一、Java基础篇
1. Java基本数据类型
Java的8种基本数据类型包括:
- 整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)
- 浮点型:float(4字节)、double(8字节)
- 字符型:char(2字节)
- 布尔型:boolean(1位)
面试重点:自动装箱与拆箱、Integer缓存机制(-128~127)、BigDecimal精度问题
2. 面向对象特性
- 封装:隐藏实现细节,提供公共访问方式
- 继承:extends关键字,单继承但可多重实现接口
- 多态:编译时多态(重载)和运行时多态(重写)
- 抽象:abstract类和接口的区别
3. String相关
- String、StringBuilder、StringBuffer区别
- String不可变性的好处(安全性、缓存hash、字符串常量池)
- intern()方法的作用
二、Java集合框架
1. Collection体系
- List:ArrayList(数组)、li
- Set:HashSet(哈希表)、TreeSet(红黑树)、li
- Queue:PriorityQueue、ArrayDeque
2. Map体系
- HashMap:JDK1.8后数组+链表+红黑树,负载因子0.75
- ConcurrentHashMap:分段锁+CAS,1.8后改为synchronized+CAS
- TreeMap:基于红黑树的有序Map
- li
面试重点:HashMap扩容机制、哈希冲突解决、ConcurrentHashMap线程安全实现
三、JVM与内存管理
1. 内存区域划分
- 程序计数器
- 虚拟机栈(栈帧、局部变量表、操作数栈)
- 本地方法栈
- 堆(新生代Eden/S0/S1 + 老年代)
- 方法区(元空间)
2. GC算法与收集器
- 标记-清除、标记-整理、复制算法
- Serial/Parallel/CMS/G1收集器特点
- 三色标记法与SATB
3. 类加载机制
- 加载→验证→准备→解析→初始化
- 双亲委派模型及破坏场景(SPI、OSGi)
- 类加载器:Bootstrap、Extension、Application
四、多线程与并发
1. 线程基础
- 线程状态:NEW、RUNNABLE、BLOCKED、WAITING、TIMED_WAITING、TERMINATED
- 创建方式:继承Thread、实现Runnable、Callable+FutureTask
2. 线程安全
- synchronized原理(对象头MarkWord)
- volatile可见性、禁止指令重排
- CAS原理及ABA问题
- AQS框架(ReentrantLock、CountDownLatch等)
3. 线程池
- 核心参数:corePoolSize、maximumPoolSize、keepAliveTime、workQueue
- 拒绝策略:Abort、CallerRuns、Discard、DiscardOldest
- 工作流程
五、Spring框架
1. IOC与DI
- Bean生命周期
- 循环依赖解决(三级缓存)
- @Autowired与@Resource区别
2. AOP实现
- 动态代理(JDK与CGLIB)
- 切点表达式
- 通知类型(@Before、@After等)
3. Spring事务
- 传播机制(PROPAGATION_REQUIRED等)
- 隔离级别
- @Transactional失效场景
六、数据库与ORM
1. MySQL索引
- B+树结构
- 聚簇索引与非聚簇索引
- 最左前缀原则
- 索引失效场景
2. 事务隔离
- 读未提交、读已提交、可重复读、串行化
- MVCC实现原理
- 幻读问题及解决
3. MyBatis
- {}与${}区别
- 一级缓存与二级缓存
- 分页实现原理
七、分布式与微服务
1. CAP理论
- 一致性、可用性、分区容错性取舍
- ba
2. 服务治理
- 服务注册发现(Eureka、Nacos)
- 负载均衡策略
- 熔断降级(Hystrix、Sentinel)
3. 分布式事务
- 2PC、3PC
- TCC模式
- 本地消息表
- Seata框架
八、系统设计与优化
1. 缓存策略
- 缓存穿透(布隆过滤器)
- 缓存击穿(互斥锁)
- 缓存雪崩(随机过期时间)
2. 消息队列
- Kafka高吞吐原理
- RocketMQ事务消息
- 消息重复消费问题
3. 设计模式
- 单例模式(DCL、枚举)
- 工厂模式应用场景
- 观察者模式实现
面试技巧
1. STAR法则:情境(Situation)、任务(Task)、行动(Action)、结果(Result)
2. 项目深挖:准备2-3个技术难点及解决方案
3. 算法准备:LeetCode中等难度高频题
4. 反问环节:团队技术栈、业务方向、成长路径
掌握这些Java面试八股文核心知识点,结合项目实践经验,相信你能在面试中展现出扎实的技术功底。记住,理解原理比死记硬背更重要,面试官更看重的是你解决问题的思路和能力。