一、基础语法与核心特性
1.1 数据类型与内存分配
Java数据类型分为基本类型(byte/short/int/long/float/double/char/boolean)和引用类型。基本类型存储在栈内存,引用类型在堆内存分配对象,栈中存储对象地址。例如:
int a = 10; // 栈内存存储值String s = "Hello"; // 堆内存存储对象,栈存储引用
面试常考自动装箱/拆箱的陷阱,如Integer i1 = 100; Integer i2 = 100;(缓存范围-128~127内相等)与Integer i3 = 128; Integer i4 = 128;(超出缓存范围不等)的区别。
1.2 流程控制与异常处理
try-catch-finally的执行顺序是核心考点。finally块总会执行,即使try或catch中有return语句。例如:
public int test() {try {return 1;} finally {System.out.println("Finally");return 2; // 覆盖try的返回值}}// 输出"Finally",返回2
二、面向对象编程(OOP)
2.1 封装、继承与多态
封装通过访问修饰符(private/default/protected/public)控制成员可见性。继承中子类构造方法必须调用父类构造方法(显式或隐式)。多态的实现依赖方法重写(Override)和动态绑定,例如:
class Animal {public void sound() { System.out.println("Animal sound"); }}class Dog extends Animal {@Overridepublic void sound() { System.out.println("Bark"); }}Animal a = new Dog(); a.sound(); // 输出"Bark"
2.2 抽象类与接口
抽象类可包含具体方法和成员变量,接口只能有抽象方法(Java 8后支持default方法)。设计时优先使用接口实现多继承,抽象类用于共享代码。典型问题:何时用接口?何时用抽象类?
- 接口:定义行为规范(如Comparable接口)
- 抽象类:提供通用实现(如模板方法模式)
三、集合框架与数据结构
3.1 List/Set/Map实现类
- ArrayList vs LinkedList:ArrayList基于动态数组,随机访问快;LinkedList基于双向链表,插入删除快。
- HashSet vs TreeSet:HashSet无序,依赖hashCode()和equals();TreeSet有序,需实现Comparable接口。
- HashMap原理:1.8后采用数组+链表+红黑树结构,当链表长度>8且数组长度>64时转为红黑树。
3.2 并发集合类
ConcurrentHashMap通过分段锁(1.7)或CAS+synchronized(1.8)实现高并发。CopyOnWriteArrayList适用于读多写少场景,写时复制新数组。
四、JVM与内存管理
4.1 运行时数据区
- 程序计数器:线程私有,记录字节码指令地址
- 虚拟机栈:存储局部变量表、操作数栈等
- 堆:所有线程共享,存放对象实例
- 方法区:存储类信息、常量池等(1.8后元空间取代永久代)
4.2 GC算法与调优
- 标记-清除:产生内存碎片
- 复制算法:内存利用率低
- 标记-整理:适合老年代
调优参数示例:-Xms512m -Xmx1024m -XX:SurvivorRatio=8 -XX:+UseG1GC
五、多线程与并发编程
5.1 线程创建方式
- 继承Thread类
- 实现Runnable接口(推荐,避免单继承限制)
- 实现Callable接口(支持返回值)
5.2 同步机制
- synchronized:修饰方法或代码块,依赖对象锁
- ReentrantLock:可中断、可公平锁、可尝试获取锁
- 条件变量:wait()/notify()与Condition的await()/signal()对比
5.3 线程池
核心参数:corePoolSize、maximumPoolSize、keepAliveTime、workQueue。拒绝策略包括AbortPolicy(默认)、CallerRunsPolicy等。示例:
ExecutorService executor = new ThreadPoolExecutor(2, 5, 60, TimeUnit.SECONDS,new LinkedBlockingQueue<>(10),new ThreadPoolExecutor.AbortPolicy());
六、IO与NIO
6.1 传统IO模型
- 字节流:InputStream/OutputStream
- 字符流:Reader/Writer
- 装饰器模式:BufferedReader、DataOutputStream等
6.2 NIO核心组件
- Channel:双向数据传输
- Buffer:数据容器,支持flip()/clear()操作
- Selector:多路复用,单线程管理多个Channel
示例:NIO文件复制try (FileChannel in = FileChannel.open(Paths.get("in.txt"));FileChannel out = FileChannel.open(Paths.get("out.txt"),StandardOpenOption.WRITE, StandardOpenOption.CREATE)) {in.transferTo(0, in.size(), out);}
七、设计模式与框架原理
7.1 常用设计模式
- 单例模式:双重检查锁(DCL)实现
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;}}
- 工厂模式:Spring IOC容器本质是大型工厂
- 代理模式:JDK动态代理与CGLIB对比
7.2 Spring核心机制
- IOC:控制反转,通过XML或注解配置Bean
- AOP:面向切面编程,基于动态代理实现
- 事务管理:声明式事务(@Transactional)底层依赖AOP
八、实战建议与避坑指南
- 算法题准备:重点练习链表反转、二叉树遍历、动态规划等经典问题
- 系统设计题:掌握分层架构、高并发设计、分布式事务解决方案
- 源码阅读:深入理解HashMap、ConcurrentHashMap、AQS等核心类实现
- 项目经验提炼:用STAR法则(Situation-Task-Action-Result)描述技术难点与解决方案
示例面试问题:
- Q:HashMap在JDK1.8中做了哪些优化?
- A:引入红黑树处理哈希冲突,优化扩容机制,采用尾插法避免链表环化。
通过系统梳理知识体系、结合源码分析、强化实战演练,开发者可显著提升面试通过率。建议每日刷题30分钟,保持技术敏感度,同时注重底层原理的理解而非机械记忆。