java面试题Day1

1. 什么是字节码?采用字节码的最大好处是什么?

字节码是 Java 程序编译后的中间代码,是一种可移植的二进制代码,可以在任何支持 Java 虚拟机(JVM)的平台上运行。字节码通过将 Java 源代码编译为字节码指令序列,使得 Java 程序可以跨平台运行,即使是在不同的操作系统和硬件平台上也可以运行。

字节码采用中间代码的形式,相比于直接将程序编译为特定平台上的机器码,有以下几个好处:

  1. 可移植性:由于字节码是中间代码,所以可以在任何支持 JVM 的平台上运行,使得 Java 程序具有很好的可移植性。这也是 Java 跨平台的重要特性之一。

  2. 安全性:由于字节码需要在 JVM 中运行,所以可以对字节码进行安全检查,以确保程序不会对系统造成威胁。

  3. 性能:由于字节码是一种紧凑的二进制格式,相比于直接编译为机器码,可以更快地加载和传输,同时也可以在运行时进行动态优化,提高程序的执行效率。

  4. 可读性:相比于直接编译为机器码,字节码具有更好的可读性,可以方便地进行反汇编和调试。

因此,采用字节码作为中间代码的最大好处是提高了 Java 程序的可移植性、安全性、性能和可读性。这也是 Java 跨平台和安全性等特性的基础。

2. 什么是数据库事务?讲一下事务的 ACID 特性?

所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。(执行单个逻辑功能的一组指令或操作称为事务)

ACID特性:

数据库管理系统中事务(transaction)的四个特性(分析时根据首字母缩写依次解释):原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

1.原子性

原子性是指事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。可采用“A向B转账”这个例子来说明解释。

在DBMS中,默认情况下一条SQL就是一个单独事务,事务是自动提交的。只有显式的使用start transaction开启一个事务,才能将一个代码块放在事务中执行。

2. 一致性

一致性是指在事务开始之前和事务结束以后数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性

如A给B转账,不论转账的事务操作是否成功,其两者的存款总额不变(这是业务逻辑的一致性,至于数据库关系约束的完整性就更好理解了)。

3. 隔离性

多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。

在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据

事务最复杂问题都是由事务隔离性引起的。完全的隔离性是不现实的,完全的隔离性要求数据库同一时间只执行一条事务,这样会严重影响性能。

有四种隔离级别:

1. Read uncommitted(读未提交): 解决了更新丢失,但还是可能会出现脏读

2. Read committed(读提交): 解决了更新丢失和脏读问题

3. Repeatable read(可重复读取): 解决了更新丢失、脏读、不可重复读、但是还会出现幻读

4. Serializable(可序化): 解决了更新丢失、脏读、不可重复读、幻读(虚读)

4. 持久性

这是最好理解的一个特性:持久性,意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。(完成的事务是系统永久的部分,对系统的影响是永久性的,该修改即使出现致命的系统故障也将一直保持)

InnoDB中:

  • 通过 undo log 支持事务回滚、当前读(多版本查询)

  • 通过 redo log 实现持久性

  • 通过两阶段提交实现一致性

  • 通过当前读、锁实现隔离性

3. JDK 和 JRE 和 JVM 分别是什么,有什么区别?

  1. JDK(Java Development Kit):JDK 是 Java 开发工具包,包含了编写、编译、调试和运行 Java 程序所需的所有工具和组件,比如编译器(javac)、Java API、调试工具等。JDK 是针对 Java 开发人员的,它包含了 JRE,还有编译器和其他工具,可以用来编写和调试 Java 程序。

  2. JRE(Java Runtime Environment):JRE 是 Java 运行时环境,包括了 Java 虚拟机(JVM)和 Java 标准类库(Java API)。JRE 是针对 Java 应用程序的,它提供了在计算机上运行 Java 应用程序所需的最小环境

  3. JVM(Java Virtual Machine):JVM 是 Java 虚拟机,是 Java 程序运行的环境。JVM 负责将 Java 代码解释或编译为本地机器代码,并在运行时提供必要的环境支持,比如内存管理、垃圾回收、安全性等。JVM 的主要作用是将 Java 代码转换为可以在计算机上运行的机器码,并负责程序的执行。

综上所述,JDK、JRE 和 JVM 之间的区别可以总结如下:

  • JDK 是 Java 开发工具包,包括了编译器、Java API、调试工具等,用于开发 Java 应用程序。

  • JRE 是 Java 运行时环境,包括了 Java 虚拟机和 Java 标准类库,用于在计算机上运行 Java 应用程序。

  • JVM 是 Java 虚拟机,是 Java 程序运行的环境,负责将 Java 代码转换为可以在计算机上运行的机器码,并提供必要的环境支持。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值