Java作为全球最受欢迎的编程语言之一,在各类招聘场景中——无论是校园招聘、社会招聘还是职场跳槽,面试官都会着重考察候选人对Java核心知识的掌握程度。 本文精心整理了2025年最新的Java面试题,内容全面覆盖Java基础、集合框架、多线程编程、JVM原理、Spring框架、数据库技术以及分布式系统等核心领域,并附带详尽解析,旨在帮助你高效备战面试,轻松应对各类考察!
一、基础概念
- 封装、继承和多态
- 封装:将对象的属性和行为封装起来,通过访问修饰符控制外部对其的访问,隐藏内部实现细节。例如,一个Person类将name和age设为私有,通过getter和setter方法访问和修改。
- 继承:子类继承父类的属性和方法,使代码复用,同时子类可以扩展或重写父类方法。比如Student类继承Person类,增加studentId属性和study()方法。
- 多态:同一方法调用在不同对象上有不同实现。例如,Animal类有makeSound()方法,Dog和Cat类继承后重写该方法,调用时呈现不同声音。
- Java 虚拟机(JVM):是运行 Java 字节码的虚拟计算机,负责将字节码翻译成机器码并执行。关键作用包括内存管理(如垃圾回收)、字节码验证、确保跨平台性等。
- 基本数据类型和引用数据类型
- 区别:基本数据类型存储值,变量直接指向值;引用数据类型存储对象的引用(地址),变量指向对象在内存中的位置。
- 基本数据类型:byte、short、int、long、float、double、char、boolean。
- 引用数据类型:类、接口、数组、枚举等。
- 值传递和引用传递:值传递是传递变量的副本,修改副本不影响原变量;引用传递是传递对象引用的副本,通过副本修改对象内容会影响原对象。Java 中只有值传递。
二、核心特性
- 异常处理机制
- 执行顺序:先执行try块,若发生异常则跳至匹配的catch块处理,无论是否发生异常,finally块都会执行(除非JVM退出)。
- throw:在方法内抛出具体异常对象。
- throws:在方法声明处表明该方法可能抛出的异常类型。
- throws:在方法声明处表明该方法可能抛出的异常类型。
- 泛型:限制集合或类操作的数据类型,提高代码安全性和复用性。
- 注解(Annotation):用于对代码进行标记和说明,可在编译、类加载、运行时被读取并处理。
- 常见内置注解:@Override(标识重写父类方法)、@Deprecated(标识方法已过时)、@SuppressWarnings(抑制编译器警告)。
- 自定义注解及使用:
- 反射机制:在运行时获取类的信息并操作类的属性和方法。
- 优点:灵活,可动态操作类;缺点:破坏封装性,性能较差。
- 枚举(Enum):一种特殊类,实例个数固定,用于表示有限集合。特点:不可继承,实例为常量,线程安全。
三、多线程
- 进程和线程的区别及创建线程方式
- 区别:进程是资源分配的基本单位,线程是调度和执行的基本单位;一个进程可包含多个线程,线程共享进程资源。
- 创建方式及优缺点:
- 继承Thread类:简单,但无法再继承其他类。
- 实现Runnable接口:可多实现,适合多线程共享资源,但不能直接返回结果。
- 实现Callable接口:可返回结果,可抛出异常,但使用较复杂,需配合Future。
- 线程安全及保证方法:线程安全指多线程访问时,程序能正确执行。方法有:
- synchronized关键字:同步方法或代码块,保证原子性、可见性和有序性。
- Lock接口:显式加锁解锁,更灵活。
- 原子类:如AtomicInteger,利用 CAS 机制保证原子操作。
- 锁机制
- synchronized:隐式锁,自动加锁解锁,可修饰方法和代码块,性能在 JDK1.6 后优化较好,适合简单场景。
- Lock:显式锁,需手动调用lock()和unlock(),可中断锁、超时获取锁等,适合复杂场景。
- 线程池:管理线程的容器,核心参数包括核心线程数、最大线程数、队列容量、拒绝策略等。使用线程池可减少线程创建销毁开销,提高响应速度。
篇幅限制下面就只能给大家展示小册部分内容了。整理了一份核心面试笔记包括了:Java 基础、进阶、字符串、集合、并发、JVM、[数据结构]、算法、MySQL、Redis、Mongo、Spring、SpringBoot、MyBatis、SpringCloud、Linux 以及各种[中间件](Dubbo、Nginx、Zookeeper、MQ、Kafka、ElasticSearch)等等...
需要全套面试笔记及答案可以在文末获取
四、集合框架
- 整体结构:主要接口有Collection(存储单元素)和Map(存储键值对)。Collection下有List(有序可重复)、Set(无序不可重复)等子接口;List实现类有ArrayList、LinkedList等,Set实现类有HashSet、TreeSet等;Map实现类有HashMap、TreeMap等。
- ArrayList 和 LinkedList
- 底层实现:ArrayList基于动态数组,LinkedList基于双向链表。
- 优缺点:ArrayList查询快、增删慢;LinkedList增删快(首尾)、查询慢。
- 适用场景:ArrayList适合频繁查询,LinkedList适合频繁增删首尾元素。
- HashMap 和 HashTable 的区别及 HashMap 底层实现(JDK1.8 及以后)
- 区别:HashMap线程不安全,允许null键值;HashTable线程安全,不允许null键值。
- 底层实现:数组 + 链表 + 红黑树。当链表长度超过 8 且数组容量≥64 时,链表转为红黑树;当长度小于 6 时,红黑树转回链表。
五、IO/NIO
- IO 流分类及字节流和字符流区别分类:按流向分为输入流和输出流;按操作单位分为字节流和字符流。
- 区别:字节流操作字节(8 位),可处理所有文件;字符流操作字符(16 位),适合处理文本文件。
- 字节流读写:
- 字符流读写:
- NIO:非阻塞 IO,基于通道和缓冲区,采用选择器实现多路复用。优势:非阻塞,高并发处理能力强。核心组件:通道(Channel)、缓冲区(Buffer)、选择器(Selector)。
六、JDK 新特性
Lambda 表达式:简化函数式接口的实现,语法为(参数) -> {代码},适用于替代匿名内部类。
Stream API:用于对集合进行高效操作,常用操作有过滤(filter)、映射(map)、排序(sorted)等。
更多大厂真实面经,春招热门面试题,Java、C++、python、Go、运维、测试、大数据 ……等更多面试题目和详细解析可以点击下方名片获取