为什么要使用克隆?
想对一个对象进行处理,又想保留原有的数据进行接下来的操作,就需要克隆了。 克隆分浅克隆和深克隆,浅克隆后的对象中非基本对象和原对象指向同一块内存,因此对这些非基本对象的修改会同时更改克隆前后的对象。
如何实现对象克隆?
实现Cloneable接口并重写Object类中的clone()方法。
实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆
深拷贝和浅拷贝的区别是什么?
浅拷贝;当对象被复制时只复制它本身和其中包含的值类型的成员变量,而引用类型的成员对象并没有复制。
深克隆:除了对象本身被复制外,对象包含的所有成员变量也将复制。
反射的概念:通过class字节码文件对象,操作获取成员信息
获取class字节码文件对象的方式
1.Class.forName()
2.类名.class()
3.对象.getClass()
私有成员如何通过反射访问?
constructor.setAccessible(true); //暴力破解
method.setAccessible(true); //暴力破解
field.setAccessible(true); //暴力破解
反射的作用和应用场景
可以通过配置文件来动态配置和加载类,以实现软件工程理论里所提及的类与类,模块与模块之间的解耦,反射最经典的应用是Spring框架
优点:提高了java程序的灵活性和扩展性,降低耦合性,提高自适应能力
允许程序创建和控制任何类的对象。
应用很广,测试工具,框架都用到了反射
缺点:性能问题:反射是一种解释操作,远慢于直接代码,
模糊程序内部逻辑:反射绕过了源代码
增大了复杂性:反射代码比同等功能的直接代码更复杂。
序列化和反序列化
序列化就是将java对象转换为二进制流的方法流通或存储
反序列化就是将二进制流转换为Java对象
BIO 、NIO 、AIO 的区别和使用场景?
BIO:同步并阻塞,一个请求分配一个线程,造成线程开销过大,资源浪费。
NIO:同步非阻塞,请求会发送到多路复用器,会轮询请求线程处理
AIO:异步非阻塞,先经过操作系统处理后,再通知服务器应用去启动线程进行处理。
使用场景:
BIO:适合连接数小且固定的架构,较小架构,对服务器要求高,且局限于idk1.4,程序易懂
NIO:适合连接数多且连接时间短的架构,聊天服务器,编程复杂,jdk1.4开始支持
AIO:适合连接数比较多且连接时间长的架构,相册服务器,充分调用 OS 参与并发操作,编程复杂,jdk7开始