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接口。

高频面试题清单
  1. 如何自定义一个异常类?
    • 继承Exception(受检)或RuntimeException(非受检)。
  2. 为什么要有缓冲流?
    • 减少系统调用次数,提升大数据量读写效率。
  3. 序列化时哪些字段会被忽略?
    • static字段(属于类)和transient字段。

通过生活化类比与底层原理结合,能够清晰展示技术理解力与表达能力。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐