Java高频基础面试题
Java高频基础面试题
Java基础
-
Java的特点是什么?
- 面向对象
- 平台无关性(“一次编写,到处运行”)
- 支持多线程
- 自动内存管理(垃圾回收)
- 安全性
- 丰富的类库
-
JDK、JRE和JVM的区别
- JDK (Java Development Kit): Java开发工具包,包含JRE和开发工具
- JRE (Java Runtime Environment): Java运行时环境,包含JVM和核心类库
- JVM (Java Virtual Machine): Java虚拟机,执行字节码
-
==和equals()的区别
- == 比较基本数据类型的值或对象的引用地址
- equals() 比较对象的内容(可重写)
-
final、finally、finalize的区别
- final: 修饰类(不可继承)、方法(不可重写)、变量(常量)
- finally: 异常处理中无论是否发生异常都会执行的代码块
- finalize: Object类的方法,垃圾回收前调用的方法(不推荐使用)
面向对象
-
面向对象的三大特性
- 封装: 隐藏实现细节,提供公共访问方式
- 继承: 子类继承父类特征和行为
- 多态: 同一操作作用于不同对象产生不同行为
-
重载(Overload)和重写(Override)的区别
- 重载: 同一类中,方法名相同,参数列表不同(与返回值无关)
- 重写: 子类重写父类方法,方法名、参数列表、返回值类型必须相同
-
抽象类和接口的区别
特性 抽象类 接口 方法 可以有具体方法 Java 8前只能是抽象方法 变量 无限制 默认public static final 实现 单继承 多实现 构造器 有 无
集合框架
-
ArrayList和LinkedList的区别
- ArrayList: 基于动态数组,随机访问快,增删慢
- LinkedList: 基于双向链表,随机访问慢,增删快
-
HashMap的工作原理
- 基于哈希表(数组+链表/红黑树)
- 使用key的hashCode()计算存储位置
- 解决冲突: 链表法(Java 8后链表长度>8转为红黑树)
-
HashSet如何保证元素不重复
- 内部使用HashMap存储元素
- 添加元素时,先比较hashCode(),再比较equals()
多线程
-
创建线程的几种方式
- 继承Thread类
- 实现Runnable接口
- 实现Callable接口(可返回结果)
- 使用线程池
-
synchronized和ReentrantLock的区别
特性 synchronized ReentrantLock 实现 JVM层面 API层面 锁获取 自动获取释放 需要手动lock/unlock 公平锁 非公平 可选择公平/非公平 条件变量 有限 可创建多个Condition -
volatile关键字的作用
- 保证变量的可见性(直接读写主内存)
- 禁止指令重排序
- 不保证原子性
异常处理
-
Error和Exception的区别
- Error: 严重问题,程序无法处理(如OutOfMemoryError)
- Exception: 可捕获处理的异常
- 检查型异常(必须处理):IOException, SQLException
- 运行时异常(可不处理):NullPointerException, IndexOutOfBoundsException
-
try-catch-finally执行顺序
- try块正常执行 → finally块 → 后续代码
- try块异常 → catch块 → finally块 → 后续代码
- finally块中的return会覆盖try/catch中的return
JVM相关
-
Java内存区域划分
- 方法区(元空间): 类信息、常量、静态变量
- 堆: 对象实例
- 虚拟机栈: 方法调用、局部变量
- 本地方法栈: Native方法
- 程序计数器: 当前线程执行的字节码行号
-
垃圾回收算法
- 标记-清除: 产生内存碎片
- 复制算法: 空间利用率低
- 标记-整理: 适合老年代
- 分代收集: 新生代(复制)、老年代(标记-清除/整理)
-
类加载过程
- 加载: 读取class文件
- 验证: 确保class文件格式正确
- 准备: 为静态变量分配内存并初始化默认值
- 解析: 将符号引用转为直接引用
- 初始化: 执行静态代码块和静态变量赋值
新特性
-
Java 8新特性
- Lambda表达式
- Stream API
- 函数式接口
- 默认方法
- Optional类
- 新的日期时间API
-
Java 11新特性
- 局部变量类型推断(var)
- HTTP Client API标准化
- 单文件源代码程序直接运行
- String新增方法(isBlank, strip等)
这些题目涵盖了Java基础面试中最常见的问题,掌握它们可以帮助你在面试中表现出色。