Java 中包含哪些知识点?一次面试后的系统复盘
前言
最近面试时,面试官问了我一个看起来很基础、但其实很考察知识体系的问题:
Java 中包含哪些基础知识点?说说你学了哪些java知识?
这个问题不是简单地背几个名词,而是在考察你对 Java 技术栈的整体理解。尤其是实习、校招、初级开发岗位,面试官通常希望你能说清楚 Java 的基础语法、面向对象、集合、多线程、JVM、异常、IO、泛型、反射等内容,并且能结合实际开发场景展开。
这篇文章我反思了自己当时为什么没答得好,遇到这种问题应该怎么答,把 Java 基础知识点系统梳理一遍,方便后续复习和面试时组织语言。
一、面试时可以先这样回答
如果面试官问:
Java 中包含哪些基础知识点?
可以先用一个总分结构回答:
Java 基础知识点可以从几个方面来理解。
第一是语法基础,比如数据类型、运算符、流程控制、数组和方法;
第二是面向对象,包括封装、继承、多态和抽象;
第三是常用类和集合框架,比如 String、ArrayList、HashMap;
第四是异常处理、泛型、反射和注解;
第五是多线程和并发基础;
第六是 IO、网络编程和 JVM 基础,比如类加载机制、内存区域和垃圾回收。实际开发中还会结合 JDBC、Spring、MyBatis 等框架继续扩展。
这样回答的好处是:先建立知识框架,再根据面试官追问展开。
二、Java 语法基础
Java 语法基础是所有内容的入口,主要包括:
- 基本数据类型
- 变量和常量
- 运算符
- 条件语句
- 循环语句
- 数组
- 方法
- 类和对象
- 基本数据类型
Java 有 8 种基本数据类型:
类型 大小 默认值 说明
byte 1 字节 0 整数类型
short 2 字节 0 整数类型
int 4 字节 0 常用整数类型
long 8 字节 0L 长整数类型
float 4 字节 0.0f 单精度浮点数
double 8 字节 0.0d 双精度浮点数
char 2 字节 ‘\u0000’ 字符类型
boolean JVM 未明确规定 false 布尔类型
面试常问:
int a = 10;
Integer b = 10;
int 是基本数据类型,Integer 是包装类。包装类可以用于集合和泛型,并且支持自动装箱和自动拆箱。
三、面向对象基础
Java 是一门面向对象语言,核心思想包括:
- 封装
- 继承
- 多态
- 抽象
- 封装
封装就是把对象的属性隐藏起来,通过方法对外提供访问。
public class User {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
封装的优点:
- 提高代码安全性
- 降低模块之间的耦合
- 方便后期维护
- 继承
继承使用 extends 关键字,可以让子类复用父类的属性和方法。
class Animal {
public void eat() {
System.out.println("动物吃东西");
}
}
class Dog extends Animal {
}
注意:Java 只支持单继承,但支持多接口实现。
3. 多态
多态是指同一个父类引用,在运行时可以指向不同的子类对象。
Animal animal = new Dog();
animal.eat();
多态的前提:
- 有继承或实现关系
- 子类重写父类方法
- 父类引用指向子类对象
面试常问:重载和重写有什么区别?
对比 重载 重写
发生位置 同一个类中 父子类之间
方法名 相同 相同
参数列表 必须不同 必须相同
返回值 可以不同 一般相同或为子类型
作用 提高方法使用灵活性 实现多态
四、常用类:String 相关
String 是 Java 面试高频知识点。
- String 为什么不可变?
String 是不可变对象,一旦创建,内容不能被修改。
不可变的好处:
线程安全
可以放入字符串常量池
适合作为 HashMap 的 key
方便缓存 hash 值
避免字符串被恶意修改 - String、StringBuilder、StringBuffer 区别
类型 是否可变 是否线程安全 使用场景
String 不可变 安全 少量字符串操作
StringBuilder 可变 不安全 单线程大量拼接
StringBuffer 可变 安全 多线程字符串拼接
示例:
String s1 = "abc";
String s2 = new String("abc");
s1 指向字符串常量池中的对象,s2 会在堆中创建对象。
五、集合框架
Java 集合框架是面试重点,主要包括:
Collection
List
Set
Queue
Map
- List
常见实现类:
ArrayList
LinkedList
Vector
ArrayList 底层是动态数组,查询快,增删相对慢。
LinkedList 底层是双向链表,增删相对快,随机查询慢。 - Set
常见实现类:
HashSet
LinkedHashSet
TreeSet
Set 的特点是不允许重复元素。
其中 HashSet 底层基于 HashMap 实现。 - Map
常见实现类:
HashMap
LinkedHashMap
TreeMap
Hashtable
ConcurrentHashMap - HashMap 重点
HashMap 是 Java 面试中非常高频的集合类。
JDK 1.7 中,HashMap 底层结构是:
数组 + 链表
JDK 1.8 之后,HashMap 底层结构是:
数组 + 链表 + 红黑树
当链表长度大于等于 8,并且数组长度达到 64 时,链表可能转换为红黑树。
HashMap 常见面试问题:
HashMap 的 put 流程是什么?
HashMap 为什么线程不安全?
HashMap 默认容量是多少?
负载因子为什么默认是 0.75?
HashMap 和 Hashtable 有什么区别?
HashMap 和 ConcurrentHashMap 有什么区别?
六、异常机制
Java 异常体系的顶层是 Throwable,下面主要分为:
Error
Exception
- Error
Error 表示严重错误,程序通常无法处理,比如:
OutOfMemoryError
StackOverflowError - Exception
Exception 表示程序异常,通常可以通过代码处理。
异常又可以分为:
编译时异常
运行时异常
常见运行时异常:
NullPointerException
ArrayIndexOutOfBoundsException
ClassCastException
ArithmeticException - try-catch-finally
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println(“发生算术异常”);
} finally {
System.out.println(“释放资源”);
}
finally 通常用于关闭资源,比如 IO 流、数据库连接等。
七、泛型
泛型可以让类型在编译期确定,减少强制类型转换。
List<String> list = new ArrayList<>();
list.add("Java");
String value = list.get(0);
泛型的优点:
提高类型安全
减少强制类型转换
提高代码复用性
面试常问:
Java 泛型是真泛型还是伪泛型?
Java 泛型是伪泛型,因为 Java 使用类型擦除机制。泛型信息主要存在于编译阶段,编译之后会被擦除。
八、反射和注解
- 反射
反射可以在运行时获取类的信息,并动态创建对象、调用方法、访问属性。
Class<?> clazz = Class.forName("com.example.User");
Object object = clazz.getDeclaredConstructor().newInstance();
反射常见应用:
- Spring IOC
- MyBatis
- 动态代理
- 注解解析
- 反射的缺点:
- 性能比直接调用低
- 破坏封装性
- 代码可读性较差
- 注解
注解是一种元数据机制,可以给类、方法、属性添加说明信息。
常见注解:
- @Override
Spring 中常见注解: - @Component
- @Service
- @Controller
- @Repository
- @Autowired
- @RequestMapping
九、多线程和并发基础
多线程是 Java 面试中的重点和难点。
- 创建线程的方式
常见方式:
- 继承 Thread 类
- 实现 Runnable 接口
- 实现 Callable 接口
- 使用线程池
new Thread(() -> {
System.out.println("线程执行");
}).start();
- synchronized
synchronized 可以保证同一时刻只有一个线程访问同步代码。
它可以修饰:
- 实例方法
- 静态方法
- 代码块
- volatile
volatile 的作用:
- 保证可见性
- 禁止指令重排序
但是 volatile 不能保证复合操作的原子性,比如 i++。
- 线程池
线程池的优点:
- 降低线程创建和销毁成本
- 提高响应速度
- 方便统一管理线程资源
线程池核心参数: - corePoolSize:核心线程数
- maximumPoolSize:最大线程数
- keepAliveTime:非核心线程空闲存活时间
- workQueue:任务队列
- threadFactory:线程工厂
- handler:拒绝策略
面试常问:
为什么不建议直接使用 Executors 创建线程池?
因为 Executors 创建的部分线程池可能使用无界队列或无界线程数,极端情况下可能导致 OOM。实际开发中更推荐使用 ThreadPoolExecutor 明确配置参数。
十、IO流
Java IO 主要用于数据读写。
按照数据单位可以分为:
- 字节流
- 字符流
按照方向可以分为: - 输入流
- 输出流
常见类:
字节流 - InputStream
- OutputStream
字符流 - Reader
- Writer
转换流
BufferedReader
BufferedInputStream
十一、JVM 基础
JVM 是 Java 的核心,也是面试中的重点模块。
- JVM 运行时数据区
JVM 运行时数据区主要包括:
- 程序计数器
- Java 虚拟机栈
- 本地方法栈
- 堆
- 方法区
其中堆和方法区是线程共享的,虚拟机栈、本地方法栈和程序计数器是线程私有的。
- 堆内存
堆主要存放对象实例,是垃圾回收的主要区域。
堆通常可以分为:
- 新生代
- 老年代
新生代又可以分为: - Eden 区
- Survivor From 区
- Survivor To 区
- 类加载过程
类加载过程包括:
加载 -> 验证 -> 准备 -> 解析 -> 初始化 - 双亲委派模型
双亲委派模型指的是:类加载器在加载类时,会先把请求交给父加载器,父加载器无法加载时,子加载器才会尝试加载。
好处:
避免类被重复加载
保证 Java 核心类库安全 - 垃圾回收
垃圾回收主要关注两个问题:
哪些对象可以被回收?
什么时候回收、如何回收?
十二、Java 8 常见知识点
Java 8 是现在很多项目仍然常用的版本,面试也很常问。
主要知识点:
- Lambda 表达式
- Stream API
- Optional
- 方法引用
- 接口默认方法
- 新日期时间 API
示例:
List<String> list = Arrays.asList("Java", "Spring", "MySQL");
list.stream()
.filter(item -> item.length() > 4)
.forEach(System.out::println);
Stream 常用于集合数据处理,比如过滤、映射、排序、分组、统计等。
十三、数据库和 Java Web 相关基础
如果面试的是 Java 后端或全栈实习岗位,只说 Java SE 还不够,最好补充一些 Java Web 和数据库相关知识。
常见内容:
JDBC
Servlet
HTTP
Cookie 和 Session
Spring
Spring MVC
Spring Boot
MyBatis
MySQL
Redis
- JDBC
JDBC 是 Java 操作数据库的基础 API。
基本流程:
加载驱动 -> 获取连接 -> 创建 SQL -> 执行 SQL -> 处理结果 -> 释放资源 - Spring Boot
Spring Boot 简化了 Spring 项目配置,常用于快速开发后端接口。
常见面试点:
Spring Boot 自动配置原理
IOC 和 AOP
Bean 生命周期
常用注解
配置文件读取
十四、面试官可能继续追问什么?
当你回答 Java 基础知识点时,面试官可能会继续追问:
- 集合方向
ArrayList 和 LinkedList 的区别?
HashMap 的底层结构?
HashMap 为什么线程不安全?
ConcurrentHashMap 如何保证线程安全? - 多线程方向
synchronized 和 Lock 的区别?
volatile 的作用?
线程池的核心参数?
线程有哪些状态? - JVM 方向
JVM 内存区域有哪些?
堆和栈有什么区别?
什么是双亲委派模型?
垃圾回收算法有哪些? - 面向对象方向
什么是多态?
抽象类和接口的区别?
重载和重写的区别?
final 关键字有什么作用? - Spring 方向
IOC 是什么?
AOP 是什么?
Spring Bean 的生命周期?
Spring Boot 自动配置原理?
十五、适合面试时背诵的 30 秒版本
如果面试官只是想听一个整体框架,可以这样回答:
我理解 Java 基础知识主要包括 Java 语法基础、面向对象、常用类、集合框架、异常处理、泛型、反射、注解、多线程、IO 和 JVM。语法基础是变量、数据类型、流程控制和方法;面向对象重点是封装、继承、多态和抽象;集合重点是 List、Set、Map,尤其是 ArrayList 和 HashMap;多线程重点是 Thread、Runnable、synchronized、volatile 和线程池;JVM 重点是内存区域、类加载机制和垃圾回收。实际项目中还会结合 Spring Boot、MyBatis、MySQL 等技术一起使用。
十六、适合面试时展开的 2 分钟版本
如果面试官希望你详细说,可以这样回答:
Java 的基础知识可以分为几个层次。第一层是语言基础,包括基本数据类型、运算符、流程控制、数组、方法、类和对象。第二层是面向对象思想,包括封装、继承、多态、抽象,以及接口和抽象类的使用。第三层是 Java 常用 API,比如 String、StringBuilder、包装类、日期时间类等。第四层是集合框架,包括 List、Set、Map,其中 HashMap、ArrayList、ConcurrentHashMap 是面试重点。第五层是异常、泛型、反射和注解,这些在框架底层用得很多。第六层是多线程和并发,比如 synchronized、volatile、Lock、线程池。第七层是 IO和网络编程。最后是 JVM,包括运行时内存区域、类加载机制、双亲委派模型和垃圾回收。对于后端开发来说,还需要把这些基础和 Spring Boot、MyBatis、MySQL、Redis 等项目技术结合起来理解。
总结
Java 基础知识点并不是孤立的,面试时最好按照体系来回答:
语法基础
-> 面向对象
-> 常用类
-> 集合框架
-> 异常、泛型、反射、注解
-> 多线程
-> IO
-> JVM
-> Java Web 和常用框架
准备这类问题时,不建议只背概念。更好的方式是:先说整体框架,再挑重点展开,最后结合项目经验说明自己在哪里用过。这样回答会更像是在表达理解,而不是单纯背八股文。
更多推荐

所有评论(0)