Java面试必考:异常处理、IO与序列化全解析,Bootstrap 简介。
·
Java SE 面试核心:异常处理、IO与序列化技术解析
异常处理:程序世界的“应急预案”
核心机制
- try-catch-finally:代码执行流程监控,catch匹配异常类型,finally确保资源释放。
- throws/throw:方法声明可能抛出的异常(throws),或主动抛出异常对象(throw)。
生活案例
快递配送时,若收件人不在家(异常),快递员可选择联系物业代收(catch处理)或标记为再次配送(抛出异常)。
面试深度问题
- 受检与非受检异常区别:受检异常(如IOException)强制处理,代表外部不可控问题;非受检异常(如NullPointerException)通常反映代码逻辑错误。
- 异常吞没陷阱:catch块内未处理或打印异常,导致问题被隐藏。
IO操作:数据的“搬运工”
核心类与流类型
- 字节流:
InputStream/OutputStream(如文件复制),适合二进制数据。 - 字符流:
Reader/Writer(如文本文件读写),自动处理编码。 - 缓冲流:
BufferedInputStream等,减少磁盘IO次数,提升性能。
生活案例
从水库抽水到家里:水管直接连接(无缓冲)效率低,加入蓄水池(缓冲流)可稳定供水。
面试深度问题
- NIO与传统IO区别:NIO采用通道(Channel)和缓冲区(Buffer),支持非阻塞模式,适合高并发场景。
- 文件编码问题:读写文本时未指定编码(如UTF-8)可能导致乱码。
序列化:对象的“冷冻与解冻”
核心机制
- Serializable接口:标记可序列化,
transient关键字跳过敏感字段。 - ObjectOutputStream/ObjectInputStream:实现对象的持久化存储或网络传输。
生活案例
将乐高模型拆解成图纸(序列化),之后按图纸重建(反序列化)。
面试深度问题
- serialVersionUID作用:版本控制,未显式定义时,类结构变更可能导致反序列化失败。
- 安全风险:反序列化恶意数据可能触发远程代码执行(RCE),需校验数据来源。
综合实战代码示例
// 异常处理 + IO + 序列化结合案例
try (ObjectOutputStream oos = new ObjectOutputStream(
new BufferedOutputStream(new FileOutputStream("user.dat")))) {
User user = new User("Alice", 25);
oos.writeObject(user); // 序列化
} catch (IOException e) {
System.err.println("IO异常: " + e.getMessage());
}
关键点
try-with-resources自动关闭流,避免资源泄漏。- 序列化时确保
User类实现Serializable接口。
高频面试题清单
- 如何自定义一个异常类?
- 继承
Exception(受检)或RuntimeException(非受检)。
- 继承
- 为什么要有缓冲流?
- 减少系统调用次数,提升大数据量读写效率。
- 序列化时哪些字段会被忽略?
static字段(属于类)和transient字段。
通过生活化类比与底层原理结合,能够清晰展示技术理解力与表达能力。
更多推荐



所有评论(0)