后端开发刷题 | 面试篇2

final、finally、finalize 的区别?

  1. final 用于修饰属性、类、方法,修饰的变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。
  2. finally 用于异常处理,只能⽤在 try/catch 中,finally 后的代码总会被执行。
  3. finalize 是 java.lang.Object 类中的⽅法,每⼀个对象都会继承这个方法,再垃圾回收机制执行的时候会被调用,允许回收未被使用的内存垃圾。

什么是序列化?什么是反序列化?

  • 序列化其实就是将对象转化成字节序列格式,使其可储存可传输。
  • 反序列化就是将字节序列格式转换成对象,是序列化的补集。

什么是不可变类?

不可变类是指实例的属性不能被修改的类。

一个不可变类的实例对象从被创建出来,它的成员变量就不能被修改。Java 平台的类库中包含许多的不可变类,比如 String、基本类型的包装类等。不可变类比一般的更加安全。


为什么 Java 中 String 是不可变类?

String 类中包含 char 数组 value、整形的 offset 和 count 三个属性,这三个属性都是 private 的,且没有提供方法修改数值,因此在初始化后无法从外部改变。
String 类中的这三个属性都是被 final 修饰的,无法从内部进行改变;
方法区有一块特殊存储区域 String Pool,当创建 String 时,如果在 String Pool 中找到相同的字符串值,则会返回一个已存在 String 的引用而不会新建一个对象。假设 String 是可变的,则会导致其他引用这个字符串值的 String 的值发生变化。


API 和 SPI 的区别:

API 和 SPI 都是制定接口传输数据。

API 是由实现方负责定义和实现,调用方只负责调用的 API。

而 SPI 是指由调用方制定的接口,这个接口由实现方针对接口进行不同的实现,再由调用方选择实现方。例如在 JDBC 连接数据库时,针对不同的数据库需要不同的驱动实现,JDBC 提供了驱动接口,由不同的实现方进行实现了这些不同的驱动,然后我们就可以在 JDK 中引入这些实现了的驱动包进行使用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值