Java面试题第二弹

1. 什么是序列化和反序列化?

解答

解答:

  • 序列化: 将 JVM 内存中的 Java 对象转换为字节数组,写入文件或通过网络传输。
  • 反序列化: 将文件或网络中的字节数组还原为 JVM 内存中的 Java 对象。

2. 如何让线程 A、B、C 按顺序执行?

解答

解答:

可以使用 join() 方法实现线程按顺序执行,示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static void main(String[] args) {
Thread threadA = new Thread(() -> System.out.println("线程 A 执行"));
Thread threadB = new Thread(() -> {
try {
threadA.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("线程 B 执行");
});
Thread threadC = new Thread(() -> {
try {
threadB.join();
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.println("线程 C 执行");
});

threadA.start();
threadB.start();
threadC.start();
}

上述代码中,join() 方法确保线程 A 完成后再执行线程 B,线程 B 完成后再执行线程 C。

3. OSI 网络参考模型与 TCP/IP 网络模型的对应关系?

解答

解答:

OSI 网络参考模型与 TCP/IP 网络模型的对应关系如下:

OSI 网络参考模型TCP/IP 网络模型各层对应
应用层应用层HTTP、FTP、SMTP… 应用程序
表示层应用层数据格式转换、加密解密等
会话层应用层会话管理
传输层传输层UDP、TCP… 选择传输协议
网络层网络层IP… 封装网络地址
数据链路层数据链路层帧传输、MAC 地址
物理层网络接口层比特流… 物理传输

4. TCP 和 UDP 的各自特点是什么 (传输层)?

解答

解答:

  • TCP 的特点:

    • 面向连接,通信前需要建立连接(三次握手)。
    • 提供可靠的数据传输,数据无丢失、无重复、按序到达。
    • 适合文件传输、邮件等对可靠性要求高的场景。
    • 开销较大,传输速度相对较慢。
  • UDP 的特点:

    • 面向无连接,通信前无需建立连接。
    • 提供不可靠的数据传输,可能丢包、乱序。
    • 适合实时视频、语音等对速度要求高但对可靠性要求低的场景。
    • 开销较小,传输速度快。

5. maven 的生命周期

解答

解答:

Maven 的生命周期分为三类,每类包含多个阶段:

  1. 清理生命周期 (clean):

    • clean: 执行实际的清理操作。
  2. 默认生命周期 (default):

    • compile: 编译项目的源代码。
    • test: 使用适当的单元测试框架运行测试。
    • package: 将编译后的代码打包成可分发的格式(如 JAR、WAR)。
    • install: 将包安装到本地仓库,以供其他项目使用。
  3. 站点生命周期 (site):

    • site: 生成项目的站点文档。

每个生命周期的阶段按顺序执行,用户可以根据需求调用特定阶段。

6. 事务有哪些特性?

解答

解答:

  • 原子性(Atomicity):事务是不可分割的最小单元,要么全部成功,要么全部失败。
  • 一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。
  • 隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。
  • 持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。