前言

最近面试时,面试官问了我一个看起来很基础、但其实很考察知识体系的问题:
Java 中包含哪些基础知识点?说说你学了哪些java知识?

这个问题不是简单地背几个名词,而是在考察你对 Java 技术栈的整体理解。尤其是实习、校招、初级开发岗位,面试官通常希望你能说清楚 Java 的基础语法、面向对象、集合、多线程、JVM、异常、IO、泛型、反射等内容,并且能结合实际开发场景展开。
这篇文章我反思了自己当时为什么没答得好,遇到这种问题应该怎么答,把 Java 基础知识点系统梳理一遍,方便后续复习和面试时组织语言。

一、面试时可以先这样回答

如果面试官问:
Java 中包含哪些基础知识点?

可以先用一个总分结构回答:
Java 基础知识点可以从几个方面来理解。
第一是语法基础,比如数据类型、运算符、流程控制、数组和方法;
第二是面向对象,包括封装、继承、多态和抽象;
第三是常用类和集合框架,比如 String、ArrayList、HashMap;
第四是异常处理、泛型、反射和注解;
第五是多线程和并发基础;
第六是 IO、网络编程和 JVM 基础,比如类加载机制、内存区域和垃圾回收。实际开发中还会结合 JDBC、Spring、MyBatis 等框架继续扩展。

这样回答的好处是:先建立知识框架,再根据面试官追问展开。

二、Java 语法基础

Java 语法基础是所有内容的入口,主要包括:

  • 基本数据类型
  • 变量和常量
  • 运算符
  • 条件语句
  • 循环语句
  • 数组
  • 方法
  • 类和对象
  1. 基本数据类型
    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 是一门面向对象语言,核心思想包括:

  • 封装
  • 继承
  • 多态
  • 抽象
  1. 封装
    封装就是把对象的属性隐藏起来,通过方法对外提供访问。
public class User {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

封装的优点:

  • 提高代码安全性
  • 降低模块之间的耦合
  • 方便后期维护
  1. 继承
    继承使用 extends 关键字,可以让子类复用父类的属性和方法。
class Animal {
    public void eat() {
        System.out.println("动物吃东西");
    }
}

class Dog extends Animal {
}

注意:Java 只支持单继承,但支持多接口实现。
3. 多态
多态是指同一个父类引用,在运行时可以指向不同的子类对象。

Animal animal = new Dog();
animal.eat();

多态的前提:

  • 有继承或实现关系
  • 子类重写父类方法
  • 父类引用指向子类对象

面试常问:重载和重写有什么区别?
对比 重载 重写
发生位置 同一个类中 父子类之间
方法名 相同 相同
参数列表 必须不同 必须相同
返回值 可以不同 一般相同或为子类型
作用 提高方法使用灵活性 实现多态

四、常用类:String 相关

String 是 Java 面试高频知识点。

  1. String 为什么不可变?
    String 是不可变对象,一旦创建,内容不能被修改。
    不可变的好处:
    线程安全
    可以放入字符串常量池
    适合作为 HashMap 的 key
    方便缓存 hash 值
    避免字符串被恶意修改
  2. String、StringBuilder、StringBuffer 区别
    类型 是否可变 是否线程安全 使用场景
    String 不可变 安全 少量字符串操作
    StringBuilder 可变 不安全 单线程大量拼接
    StringBuffer 可变 安全 多线程字符串拼接

示例:

String s1 = "abc";
String s2 = new String("abc");

s1 指向字符串常量池中的对象,s2 会在堆中创建对象。

五、集合框架

Java 集合框架是面试重点,主要包括:
Collection
List
Set
Queue
Map

  1. List
    常见实现类:
    ArrayList
    LinkedList
    Vector
    ArrayList 底层是动态数组,查询快,增删相对慢。
    LinkedList 底层是双向链表,增删相对快,随机查询慢。
  2. Set
    常见实现类:
    HashSet
    LinkedHashSet
    TreeSet
    Set 的特点是不允许重复元素。
    其中 HashSet 底层基于 HashMap 实现。
  3. Map
    常见实现类:
    HashMap
    LinkedHashMap
    TreeMap
    Hashtable
    ConcurrentHashMap
  4. 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

  1. Error
    Error 表示严重错误,程序通常无法处理,比如:
    OutOfMemoryError
    StackOverflowError
  2. Exception
    Exception 表示程序异常,通常可以通过代码处理。
    异常又可以分为:
    编译时异常
    运行时异常
    常见运行时异常:
    NullPointerException
    ArrayIndexOutOfBoundsException
    ClassCastException
    ArithmeticException
  3. 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 使用类型擦除机制。泛型信息主要存在于编译阶段,编译之后会被擦除。

八、反射和注解

  1. 反射
    反射可以在运行时获取类的信息,并动态创建对象、调用方法、访问属性。
Class<?> clazz = Class.forName("com.example.User");
Object object = clazz.getDeclaredConstructor().newInstance();

反射常见应用:

  • Spring IOC
  • MyBatis
  • 动态代理
  • 注解解析
  • 反射的缺点:
  • 性能比直接调用低
  • 破坏封装性
  • 代码可读性较差
  1. 注解
    注解是一种元数据机制,可以给类、方法、属性添加说明信息。
    常见注解:
  • @Override
    Spring 中常见注解:
  • @Component
  • @Service
  • @Controller
  • @Repository
  • @Autowired
  • @RequestMapping

九、多线程和并发基础

多线程是 Java 面试中的重点和难点。

  1. 创建线程的方式
    常见方式:
  • 继承 Thread 类
  • 实现 Runnable 接口
  • 实现 Callable 接口
  • 使用线程池
new Thread(() -> {
    System.out.println("线程执行");
}).start();
  1. synchronized
    synchronized 可以保证同一时刻只有一个线程访问同步代码。
    它可以修饰:
  • 实例方法
  • 静态方法
  • 代码块
  1. volatile
    volatile 的作用:
  • 保证可见性
  • 禁止指令重排序
    但是 volatile 不能保证复合操作的原子性,比如 i++。
  1. 线程池
    线程池的优点:
  • 降低线程创建和销毁成本
  • 提高响应速度
  • 方便统一管理线程资源
    线程池核心参数:
  • corePoolSize:核心线程数
  • maximumPoolSize:最大线程数
  • keepAliveTime:非核心线程空闲存活时间
  • workQueue:任务队列
  • threadFactory:线程工厂
  • handler:拒绝策略
    面试常问:
    为什么不建议直接使用 Executors 创建线程池?

因为 Executors 创建的部分线程池可能使用无界队列或无界线程数,极端情况下可能导致 OOM。实际开发中更推荐使用 ThreadPoolExecutor 明确配置参数。

十、IO流

Java IO 主要用于数据读写。
按照数据单位可以分为:

  • 字节流
  • 字符流
    按照方向可以分为:
  • 输入流
  • 输出流
    常见类:
    字节流
  • InputStream
  • OutputStream
    字符流
  • Reader
  • Writer
    转换流
    BufferedReader
    BufferedInputStream

十一、JVM 基础

JVM 是 Java 的核心,也是面试中的重点模块。

  1. JVM 运行时数据区
    JVM 运行时数据区主要包括:
  • 程序计数器
  • Java 虚拟机栈
  • 本地方法栈
  • 方法区
    其中堆和方法区是线程共享的,虚拟机栈、本地方法栈和程序计数器是线程私有的。
  1. 堆内存
    堆主要存放对象实例,是垃圾回收的主要区域。
    堆通常可以分为:
  • 新生代
  • 老年代
    新生代又可以分为:
  • Eden 区
  • Survivor From 区
  • Survivor To 区
  1. 类加载过程
    类加载过程包括:
    加载 -> 验证 -> 准备 -> 解析 -> 初始化
  2. 双亲委派模型
    双亲委派模型指的是:类加载器在加载类时,会先把请求交给父加载器,父加载器无法加载时,子加载器才会尝试加载。
    好处:
    避免类被重复加载
    保证 Java 核心类库安全
  3. 垃圾回收
    垃圾回收主要关注两个问题:
    哪些对象可以被回收?
    什么时候回收、如何回收?

十二、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

  1. JDBC
    JDBC 是 Java 操作数据库的基础 API。
    基本流程:
    加载驱动 -> 获取连接 -> 创建 SQL -> 执行 SQL -> 处理结果 -> 释放资源
  2. Spring Boot
    Spring Boot 简化了 Spring 项目配置,常用于快速开发后端接口。
    常见面试点:
    Spring Boot 自动配置原理
    IOC 和 AOP
    Bean 生命周期
    常用注解
    配置文件读取

十四、面试官可能继续追问什么?

当你回答 Java 基础知识点时,面试官可能会继续追问:

  1. 集合方向
    ArrayList 和 LinkedList 的区别?
    HashMap 的底层结构?
    HashMap 为什么线程不安全?
    ConcurrentHashMap 如何保证线程安全?
  2. 多线程方向
    synchronized 和 Lock 的区别?
    volatile 的作用?
    线程池的核心参数?
    线程有哪些状态?
  3. JVM 方向
    JVM 内存区域有哪些?
    堆和栈有什么区别?
    什么是双亲委派模型?
    垃圾回收算法有哪些?
  4. 面向对象方向
    什么是多态?
    抽象类和接口的区别?
    重载和重写的区别?
    final 关键字有什么作用?
  5. 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 和常用框架

准备这类问题时,不建议只背概念。更好的方式是:先说整体框架,再挑重点展开,最后结合项目经验说明自己在哪里用过。这样回答会更像是在表达理解,而不是单纯背八股文。

更多推荐