1. JDK, JRE, JVM分别是什么?有什么区别?
答题思路: 分别回答三者的概念。解释三者之间的关系。
-
JDK是 java 开发工具包,包含了编写、编译、调试和运行 java 程序的所有工具和组件。JDK包含 JRE,还包含编译器(javac),javaAPI,文档注释工具(javadoc)等一系列的开发工具。
-
JRE是 java 运行时环境,包含了 java 虚拟机(JVM)和基础类库。
-
JVM是 java 虚拟机,是 java 程序运行的环境,其作用是运行 java 字节码,将 字节码解释或编译为机器码。字节码和不同系统的 JVM 实现,是 java 实现【一次编译,随处运行】的关键。
-
三者关系图:
2. 什么是字节码?采用字节码的最大好处是什么?
答题思路:
解释字节码;
理解 java 程序变为机器代码的过程;
从 java 程序变为机器代码的过程出发,理解采用字节码的好处。
-
字节码
- 字节码是 java 程序通过编译器(javac)编译后的中间代码,是一种可移植的二进制代码(即扩展名为 .class 的文件),可以在任何支持 java 虚拟机 (JVM)的平台上运行。
- 字节码不面向任何特定的处理器(CPU),只面向 java 虚拟机。
-
java 程序转变为机器代码的过程
① java 程序通过编译器 javac 编译生成 .class 字节码文件;
② .class 字节码文件转化为机器码是在 JVM 中完成的。JVM 类加载器加载字节码文件,通过解释器逐行解释执行,这种方式的执行速度较慢。
③ 有些方法和代码块是经常被调用的(即热点代码),引进 JIT(Just in time compilation)编译器,JIT 属于运行时编译。当 JIT 编译器完成首次编译后,会将字节码对应的机器码保存下来,下次可以直接使用。机器码的运行效率高于 java 解释器。
④ 因此,java 是解释和编译共存的语言。
-
采用字节码的好处
① 可移植性:字节码是中间代码,可以在任何支持 JVM 的平台上运行,使 java 程序有很好的可移植性,这也是 java 跨平台的重要特性之一。
② 安全性:字节码在 JVM 中运行,所以 JVM 可以对字节码进行安全检查,以确保程序不会对系统造成威胁。
③ 性能:字节码是一种紧凑的二进制格式,相比于直接编译为机器码,可以更快地加载和传输,同时可以在运行时进行动态优化 (JIT),提高程序的执行效率。
④ 可读性:相比于直接编译为机器码,字节码作为中间代码具有更好的可读性,可以方便地进行反汇编和调试。
3. 什么是数据库事务?讲一下事务的ACID特性。
- 数据库事务是指数据库管理系统(DBMS)中的一个操作序列,这些操作必须作为一个不可分割的单元执行,即要么全部执行成功,要么全部失败回滚。事务通常涉及到对数据库中的数据进行读写操作。
- 事务的 ACID 特性指四个关键特征:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
- 原子性(Atomicity):事务是一个原子操作,要么全部提交,要么全部回滚。当一个事务执行期间发生故障,操作系统会自动将其回滚到事务执行之前的状态,保证数据的一致性。
- 一致性(Consistency):事务执行结束后,数据必须保持一致性状态。在事务执行期间,数据库中的数据可以处于中间状态,但在事务完成时必须保证数据的一致性。
- 隔离性(Isolation):数据库系统必须保证事务之间相互隔离,不会互相干扰。隔离级别不同,会影响到事务的并发性和数据一致性,比如出现脏读、不可重复读、幻读等问题。
- 持久性(Durability):一旦事务提交,其所做的修改必须永久保存到数据库中。即使系统发生故障或宕机,数据也能够保持不变。
- ACID 特性是保证事务正确性和数据一致性的重要手段。在设计数据库应用程序时,应该根据具体的业务需求和数据安全性要求,选择合适的隔离级别和事务提交策略,保证事务的可靠性和数据的一致性。