什么是序列化?什么是反序列化?
如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。
序列化: 将数据结构或对象转换成二进制字节流的过程
反序列化:将在序列化过程中所生成的二进制字节流的过程转换成数据结构或者对象的过程
BIO,NIO,AIO 有什么区别?
BIO:同步阻塞,数据的读取写⼊必须阻塞在⼀个线程内等待其完成,它的特点是模式简单使用方便,也不⽤过多考虑系统的过载、限流等问题。对于连接数不是特别高的情况下,这种模型还是比较不错的。但是该模型并发处理能力较低,每当有一个客户端向服务器发起请求时,服务器都要启动一个线程,当⾯对⼗万甚⾄百万级连接的时候就无能为力了。
NIO:同步非阻塞,是B IO 的升级,它⽀持⾯向缓冲的,基于 Channel(通道)的I/O操作,实现了多路复用。NIO⽀持阻塞和⾮阻塞两种模式。阻塞模式使⽤就像传统中的⽀持⼀样,比较简单,但是性能和可靠性都不好;⾮阻塞模式正好与之相反。对于低负载、低并发的应⽤程序,可以使⽤同步阻塞 I/O 来提升开发速率和更好的维护性;对于⾼负载、⾼并发的(⽹络)应⽤,应使⽤ NIO 的⾮阻塞模式来开发
AIO:异步非阻塞,是 NIO 的升级,也叫 NIO2,异步 IO 是基于事件和回调机制实现的,也就是应⽤操作之后会直接返回,不会堵塞在那⾥,当后台处理完成,操作系统会通知相应的线程进⾏后续的操作。客户端发送的请求先交给操作系统处理,OS 处理后再通知线程。
深拷贝 vs 浅拷贝
浅拷贝:对基本数据类型直接复制数据的值,对与引⽤数据类型进⾏则复制对象的引用地址,新旧对象指向同一个内存地址,修改其中一个对象的值,另一个对象的值随之改变。
深拷贝:对基本数据类型直接复制数据的值,对引⽤数据类型,开辟新的内存空间,在新的内存空间里复制一个一模一样的对象,新老对象不共享内存,修改其中一个对象的值,不会影响另一个对象。
深拷贝相比于浅拷贝速度较慢并且花销较大。