一、Java概述
1. Java语言的特点?
- 面向对象:封装、继承、多态。
- 跨平台:通过JVM实现“一次编写,到处运行”。
- 内存管理:自动垃圾回收(GC),避免手动内存管理。
- 多线程:内置多线程支持,通过
Thread
类和Runnable
接口实现。
2. JVM、JDK、JRE的区别?
组件 | 描述 | 包含内容 |
---|
JVM | Java虚拟机,负责执行字节码 | 解释器、即时编译器(JIT) |
JRE | Java运行时环境 | JVM + 核心类库(如java.lang ) |
JDK | Java开发工具包 | JRE + 编译器(javac )、调试工具等 |
二、基础语法
3. Java基本数据类型有哪些?
- 数值型:
byte
、short
、int
、long
(整数);float
、double
(浮点数)。 - 字符型:
char
。 - 布尔型:
boolean
。
4. 自动拆箱与装箱?
- 装箱:基本类型 → 包装类(如
int
→ Integer
)。 - 拆箱:包装类 → 基本类型(如
Integer
→ int
)。 - 缓存机制:
Integer
缓存范围为-128~127
,超出范围会创建新对象。
三、面向对象
5. 面向对象的三大特性?
- 封装:数据和方法绑定,通过访问修饰符(
public
、private
等)控制访问。 - 继承:子类复用父类属性和方法,使用
extends
关键字。 - 多态:父类引用指向子类对象,运行时动态决定调用的方法。
6. 抽象类与接口的区别?
特性 | 抽象类 | 接口 |
---|
实例化 | 不能直接实例化 | 不能直接实例化 |
方法 | 可包含抽象和非抽象方法 | 所有方法均为抽象方法 |
继承 | 单继承 | 多实现 |
四、字符串处理
7. String、StringBuilder、StringBuffer的区别?
特性 | String | StringBuilder | StringBuffer |
---|
不可变性 | 不可变(线程安全) | 可变(非线程安全) | 可变(线程安全) |
性能 | 拼接效率低(生成新对象) | 高(直接操作数组) | 高(线程安全但稍慢) |
场景 | 常量字符串 | 单线程下频繁拼接 | 多线程下频繁拼接 |
8. String的intern()方法作用?
- 将字符串对象放入字符串常量池。若池中已存在相同内容的字符串,则返回池中的引用;否则,将当前对象加入池中并返回。
9. String的不可变性有什么好处?
五、异常处理
10. 异常的分类?
- Error:JVM错误(如
OutOfMemoryError
),程序无法处理。 - Exception:
- 编译时异常(Checked):需显式处理(如
IOException
)。 - 运行时异常(Unchecked):无需显式处理(如
NullPointerException
)。
11. finally块的执行顺序?
try
中的return
语句会先暂存返回值,再执行finally
,最后返回暂存值。- 若
finally
中也有return
,会覆盖try
中的返回值。
六、IO与网络
12. BIO、NIO、AIO的区别?
模型 | 阻塞性 | 核心机制 | 适用场景 |
---|
BIO | 同步阻塞 | 线程 per 连接 | 连接数少且长连接 |
NIO | 同步非阻塞 | 通道 + 选择器 | 连接数多且短连接 |
AIO | 异步非阻塞 | 事件 + 回调 | 高并发、长连接 |
13. 序列化的作用?
- 将对象转换为字节流,用于存储或网络传输。需实现
Serializable
接口,transient
关键字可忽略某些字段。
14. 字节流和字符流的区别?
- 字节流(如FileInputStream)处理二进制数据,字符流(如FileReader)处理文本数据。
- 字符流内部通过字节流实现,自动处理编码转换。
七、多线程与并发
15. 线程的生命周期?
- 新建(New) → 就绪(Runnable) → 运行(Running) → 阻塞(Blocked/Waiting/Timed Waiting) → 终止(Terminated)。
16. wait()和sleep()的区别?
- wait():释放锁,需在synchronized块中调用。
- sleep():不释放锁,可在任意位置调用。
八、 反射与注解
17. 什么是反射?反射的应用场景有哪些?
- 反射允许在运行时动态获取类信息、调用方法、访问字段。
- 应用场景:框架开发(如Spring)、单元测试、动态代理。
18. 常见的Java注解有哪些?
- 内置注解:@Override(重写方法)、@Deprecated(过时)、@SuppressWarnings(抑制警告)。
- 元注解:@Retention(生命周期)、@Target(作用目标)。
- 框架注解:@Component(Spring)、@Autowired(依赖注入)。
九、其他高频问题
19. ==和equals的区别?
- ==:比较引用地址(基本类型比较值)。
- equals():默认比较引用地址,常被重写为比较内容(如
String
)。
20. 为什么重写equals必须重写hashCode?
- 哈希表(如
HashMap
)通过hashCode
定位存储位置,若equals
相等但hashCode
不等,会导致数据不一致。
21. 泛型的作用?
- 类型安全:编译期检查类型错误。
- 代码复用:减少强制类型转换,提高可读性。
十、代码实战
22. 以下代码输出什么?
Integer a = 127;
Integer b = 127;
Integer c = 128;
Integer d = 128;
System.out.println(a == b);
System.out.println(c == d);
23. finally块中的return会覆盖try中的return吗?
public static int test() {try {return 1;} finally {return 2; }
}
总结:以上题目覆盖Java基础核心知识点,建议结合实际项目经验,重点掌握String特性、异常处理、多态、IO模型等模块。面试时需结合代码示例说明原理,展示对底层机制的理解。