JAVA面试题大全(四)

一、什么是反射?

java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性,这种动态获取的信息以及动态调用对象的方法的功能成为java的反射机制。

二、什么是 java 序列化?什么情况下需要序列化?

Java序列化是指将Java对象转换为字节序列的过程,这样对象就可以在网络上传输或保存在本地文件中。而反序列化则是将字节序列恢复为Java对象的过程。

以下是可能需要Java序列化的几种情况:

  1. 远程调用:当需要将对象从一个系统或进程传输到另一个系统或进程进行远程调用时,可以将对象序列化后通过网络传输。
  2. 缓存对象:为了提高对象读取速度,可以将对象序列化后持久化到磁盘或数据库中。
  3. 传递消息:在分布式系统中,可以通过将对象序列化后以消息的形式传递到消息队列或异步任务中,实现消息的传递。
  4. 多线程共享:在多线程环境中,可能需要将对象序列化后共享对象数据。

需要注意的是,Java序列化需要序列化的对象必须实现java.io.Serializable这个接口。如果某个字段不希望被序列化,可以将其标记为transient。另外,由于Java序列化格式是Java特定的二进制格式,因此当Java版本不同时,反序列化可能会出现兼容性问题,需要进行兼容性测试和处理。

三、动态代理是什么?有哪些应用?

在运行时,创建一个新的类,即创建动态代理,可以调用和扩展目标类的方法。动态代理的类是自动生成的。

应用:Spring的AOP,加事务,加权限,加日志

四、怎么实现动态代理?

基于jdk,需要实现InvocationHandler接口,重写invoke方法。

基于cglib,需要jar包依赖;

基于javassist

五、为什么要使用克隆?

如果直接使用=给对象赋值的话,那么两个对象其实指向的是同一个地址,其中一个值改变时,另一个也会随之改变。

六、如何实现对象克隆?

  1. 实现Coloneable接口并重写Object类中的clone()方法;
  2. 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。

七、深克隆和浅克隆区别是什么? 

在Java中,深克隆(Deep Clone)和浅克隆(Shallow Clone)是两种对象复制技术,它们在处理对象及其引用的其他对象时存在明显的区别。

  1. 复制的深度

    • 浅克隆:只复制对象本身,而不复制对象引用的其他对象。也就是说,如果对象包含对其他对象的引用,那么浅克隆只会复制这些引用的地址,而不是引用的实际对象。因此,原始对象和克隆对象将共享这些被引用的对象。
    • 深克隆:则将对象及其引用的其他对象都复制一份。这意味着深克隆会创建一个全新的对象,并且复制该对象的所有属性,包括对其他对象的引用。这些被引用的对象也会被深克隆,形成一个与原始对象完全独立的新对象树。
  2. 对引用类型字段的处理

    • 浅克隆:对于引用类型字段,浅克隆只会复制引用,而不会复制引用指向的对象。因此,原始对象和克隆对象中的引用类型字段将指向同一个对象。
    • 深克隆:对于引用类型字段,深克隆会递归地复制引用类型字段指向的所有对象。这意味着原始对象和克隆对象中的引用类型字段将指向不同的对象。
  3. 对修改的影响

    • 浅克隆:由于原始对象和克隆对象共享被引用的对象,因此对通过克隆对象对被引用的对象所做的修改将影响原始对象中的对应对象。
    • 深克隆:由于原始对象和克隆对象是完全独立的,因此对其中一个对象的修改不会影响到另一个对象。
  4. 实现方式

    • 在Java中,要实现对象的浅克隆和深克隆,可以让你的类实现Cloneable接口,并重写Object类中的clone方法。对于浅克隆,直接调用super.clone()方法即可;而对于深克隆,则需要手动编写代码来递归地复制对象的所有属性及其引用的对象。

总的来说,深克隆和浅克隆的主要区别在于它们复制的深度和对引用类型字段的处理方式。选择使用哪种克隆方式取决于你的具体需求和应用场景。

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值