一、JAVA基础语法与核心特性
1.1 面向对象三大特性
- 封装:通过访问修饰符(private/protected/public)控制成员可见性,结合getter/setter方法实现数据安全。例如:
public class User {private String name;public String getName() { return name; }public void setName(String name) { this.name = name; }}
- 继承:单继承机制通过
extends实现代码复用,需注意方法重写(@Override)与多态的关联。 - 多态:编译时类型与运行时类型分离,依赖接口或抽象类实现灵活扩展。典型问题:重载(Overload)与重写(Override)的区别?
1.2 关键语法细节
- 自动拆箱/装箱:
Integer i = 100;涉及Integer.valueOf()与缓存机制(-128~127)。 - 字符串处理:
String不可变性导致+操作符在循环中的性能问题,推荐使用StringBuilder。 - 异常体系:
Error与Exception的分类,Checked Exception(如IOException)必须处理,RuntimeException(如NullPointerException)可通过防御性编程避免。
二、JVM与内存管理
2.1 内存区域划分
- 程序计数器:线程私有,记录字节码指令地址。
- 虚拟机栈:存储局部变量表、操作数栈等,栈溢出(
StackOverflowError)常见于递归过深。 - 堆:对象实例分配区,分代收集(新生代/老年代)依赖
-Xms/-Xmx参数配置。 - 方法区:存储类元数据,JDK8后迁移至元空间(Metaspace)。
2.2 垃圾回收机制
- 标记-清除算法:产生内存碎片,需配合压缩操作。
- 分代收集理论:新生代(复制算法)与老年代(标记-整理)采用不同策略。
- CMS与G1对比:CMS减少停顿时间但可能产生浮动垃圾,G1通过Region划分实现可预测停顿。
三、并发编程与多线程
3.1 线程生命周期
- NEW/RUNNABLE/BLOCKED/WAITING/TIMED_WAITING/TERMINATED六种状态转换,需通过
Thread.getState()方法判断。 - 线程中断机制:
interrupt()方法设置中断标志,配合InterruptedException处理。
3.2 同步工具类
- CountDownLatch:倒计时门闩,适用于并发任务完成后触发主线程。
CountDownLatch latch = new CountDownLatch(3);new Thread(() -> { latch.countDown(); }).start();latch.await(); // 阻塞直到计数归零
- CyclicBarrier:循环屏障,支持重复使用,常用于多阶段任务同步。
- Semaphore:信号量控制资源访问,如限制数据库连接池并发数。
四、集合框架与数据结构
4.1 List实现对比
- ArrayList:基于动态数组,随机访问快(O(1)),插入删除慢(O(n))。
- LinkedList:双向链表结构,头尾插入快(O(1)),查询需遍历(O(n))。
- Vector:线程安全但性能较差,推荐使用
Collections.synchronizedList()替代。
4.2 Map高级特性
- HashMap:1.8后引入红黑树优化冲突,扩容时
rehash计算新索引。 - ConcurrentHashMap:分段锁(JDK7)→CAS+synchronized(JDK8),保证高并发下的线程安全。
- LinkedHashMap:维护插入顺序或访问顺序,可用于实现LRU缓存。
五、设计模式与架构思想
5.1 创建型模式
- 单例模式:双重检查锁(DCL)实现线程安全,需注意
volatile防止指令重排序。public class Singleton {private static volatile Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) instance = new Singleton();}}return instance;}}
- 工厂模式:简单工厂(静态方法)、工厂方法(接口抽象)、抽象工厂(产品族)。
5.2 结构型模式
- 适配器模式:类适配器(继承)与对象适配器(组合),如
InputStreamReader转换字节流为字符流。 - 装饰器模式:动态扩展功能,如
BufferedReader包装FileReader。
六、框架与中间件应用
6.1 Spring核心机制
- IoC容器:通过
BeanFactory和ApplicationContext管理Bean生命周期。 - AOP实现:基于动态代理(JDK/CGLIB),
@AspectJ注解简化切面编程。 - 事务传播行为:REQUIRED/SUPPORTS/MANDATORY等七种类型,需结合
@Transactional使用。
6.2 Spring Boot自动配置
@SpringBootApplication:组合@Configuration、@EnableAutoConfiguration、@ComponentScan。- 条件注解:
@ConditionalOnProperty、@ConditionalOnClass等实现环境适配。
七、数据库与SQL优化
7.1 事务隔离级别
- READ UNCOMMITTED:脏读、不可重复读、幻读均可能发生。
- READ COMMITTED:解决脏读,Oracle默认级别。
- REPEATABLE READ:MySQL默认,通过MVCC解决不可重复读。
- SERIALIZABLE:完全串行化,性能最低。
7.2 SQL执行计划分析
- EXPLAIN命令查看索引使用情况,关注
type(ALL/index/range/ref)和extra(Using filesort/Using temporary)。 - 索引优化:避免在索引列上使用函数,如
WHERE DATE(create_time) = '2023-01-01'会导致索引失效。
八、性能调优与问题排查
8.1 JVM调优参数
-Xms/-Xmx:设置堆初始与最大值,避免频繁扩容。-XX:MetaspaceSize:控制元空间大小,防止类元数据溢出。-XX:+PrintGCDetails:输出GC日志,辅助分析停顿原因。
8.2 线程Dump分析
jstack <pid>:获取线程状态快照,定位死锁或阻塞问题。jstat -gcutil <pid>:监控GC频率与耗时,判断是否需要调整分代比例。
实战建议
- 模拟面试环境:使用LeetCode、牛客网等平台进行限时训练。
- 代码手写练习:重点掌握单例模式、快速排序、二叉树遍历等高频手写题。
- 项目经验提炼:准备3个核心项目,突出技术难点与解决方案。
- 持续学习路径:关注OpenJDK更新、Spring官方文档、设计模式六大原则深化。
通过系统梳理知识体系与针对性练习,开发者可显著提升面试通过率。建议每日投入1-2小时进行专题突破,结合实际项目验证理论,形成”知识-实践-反馈”的闭环学习模式。