2026-01-10 03:45:06
以下为Java面试必刷基础知识点及常见面试题总结,涵盖核心概念与高频考点,帮助高效备考大厂面试:
一、Java基础语法与核心特性面向对象特性
封装:通过访问修饰符(private/protected/public)控制成员可见性,提供getter/setter方法。
继承:单继承机制,子类继承父类非私有成员,通过super调用父类方法。
多态:编译时多态(方法重载)与运行时多态(方法重写),依赖父类引用指向子类对象。
抽象与接口:抽象类定义通用逻辑,接口定义行为规范(Java 8后支持默认方法)。
数据类型与运算符
基本类型:8种(int/double/boolean等),占固定内存空间,直接存储值。
引用类型:包括类、接口、数组等,存储对象地址,通过new实例化。
自动装箱/拆箱:基本类型与包装类(如Integer)的自动转换,需注意缓存机制(如-128~127的Integer缓存)。
流程控制与异常处理
异常体系:Throwable为根类,Error(系统错误)与Exception(程序异常)分支,检查异常(需捕获或声明)与非检查异常(RuntimeException)。
try-catch-finally:finally块无论是否发生异常均执行,常用于资源释放。
自定义异常:继承Exception或RuntimeException,提供有意义的错误信息。
核心集合接口
List:有序可重复集合,实现类包括ArrayList(动态数组)、LinkedList(双向链表)、Vector(线程安全)。
Set:无序不可重复集合,实现类包括HashSet(哈希表)、TreeSet(红黑树)、LinkedHashSet(哈希表+链表)。
Map:键值对集合,实现类包括HashMap(哈希表)、TreeMap(红黑树)、LinkedHashMap(哈希表+链表)、Hashtable(线程安全)。
HashMap实现原理
数据结构:JDK 1.8后采用数组+链表+红黑树,链表长度超过8且数组长度≥64时转为红黑树。
扩容机制:默认容量16,负载因子0.75,扩容时容量翻倍,重新计算哈希并分配位置。
线程安全:非线程安全,多线程环境下需使用ConcurrentHashMap或Collections.synchronizedMap。
泛型机制
类型擦除:编译时检查类型,运行时擦除为Object,通过桥方法保证多态。
通配符:?表示未知类型,? extends T(上界通配符)与? super T(下界通配符)用于限制类型范围。
线程创建与生命周期
实现方式:继承Thread类、实现Runnable接口、实现Callable接口(配合FutureTask获取返回值)。
生命周期:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、死亡(Terminated)。
线程同步与通信
synchronized:修饰方法或代码块,通过对象锁或类锁实现互斥,依赖monitor机制。
Lock接口:如ReentrantLock,提供更灵活的锁操作(如尝试获取锁、公平锁)。
条件变量:Object的wait()/notify()与Condition的await()/signal(),用于线程间协调。
线程池与并发工具
ThreadPoolExecutor:核心参数包括corePoolSize、maximumPoolSize、keepAliveTime、workQueue,通过ExecutorService接口管理线程。
并发集合:如ConcurrentHashMap、CopyOnWriteArrayList,通过分段锁或写时复制提高并发性能。
原子类:如AtomicInteger,基于CAS(Compare-And-Swap)实现无锁并发。

JVM内存模型
线程私有:程序计数器(记录指令位置)、虚拟机栈(存储局部变量表等)、本地方法栈(Native方法调用)。
线程共享:堆(对象实例分配)、方法区(类元数据、常量池)、运行时常量池(字符串常量等)。
垃圾回收机制
回收算法:标记-清除(产生碎片)、复制(存活对象少时高效)、标记-整理(无碎片)、分代收集(新生代用复制,老年代用标记-整理)。
垃圾收集器:Serial(单线程)、Parallel Scavenge/Old(多线程并行)、CMS(并发标记清除)、G1(面向服务端,分区管理)。
类加载机制
加载阶段:通过全限定名获取类二进制流,生成Class对象。
链接阶段:验证(文件格式、元数据等)、准备(为静态变量分配内存并赋默认值)、解析(将符号引用转为直接引用)。
初始化阶段:执行类构造器<clinit>,按代码顺序初始化静态变量与静态代码块。

基础语法类
Q:==与equals()的区别?A:==比较地址(基本类型比较值),equals()默认比较地址,可重写为比较内容(如String)。
Q:String、StringBuilder、StringBuffer的区别?A:String不可变,StringBuilder非线程安全,StringBuffer线程安全(通过synchronized修饰方法)。
集合框架类
Q:HashMap如何解决哈希冲突?A:JDK 1.8前用链表,JDK 1.8后链表长度超过8且数组长度≥64时转为红黑树。
Q:ArrayList与LinkedList的增删效率?A:ArrayList基于数组,随机访问快但中间插入慢;LinkedList基于链表,中间插入快但随机访问慢。
多线程类
Q:volatile关键字的作用?A:保证可见性(修改后立即刷新到主内存)与有序性(禁止指令重排序),但不保证原子性。
Q:死锁的必要条件及如何避免?A:必要条件包括互斥、占有且等待、非抢占、循环等待;避免方法如破坏循环等待(按顺序申请锁)。
JVM类
Q:如何判断对象是否存活?A:引用计数法(无法处理循环引用)与可达性分析(从GC Roots对象出发,不可达则回收)。
Q:Minor GC与Full GC的区别?A:Minor GC回收新生代(Eden+Survivor),Full GC回收整个堆(新生代+老年代)。

总结:Java面试基础考点涵盖语言特性、集合、多线程、JVM等模块,需结合理论理解与代码实践。建议通过刷题巩固知识点,并深入分析底层原理(如HashMap扩容、JVM类加载过程),以应对大厂面试中的深度追问。