Java查漏补缺(一)

一、java中的序列化和反序列化

1.什么是序列化与反序列化
Java序列化指把Java对象转换为字节序列的过程。反序列化指将字节序列转换为Java对象的过程。

2.为什么要用序列化与反序列化
用途:
将对象的字节序列永久地保存到硬盘上,通常存放在一个文件中。
在网络上传送对象的字节序列。
实现了进程通信间的对象传送。比如传送方将java对象转换为字节序列传输,在接受方则通过反序列化再转换为字节序列。

二、finallize
finalize()方法是Object类中提供的一个方法,在GC准备释放对象所占用的内存空间之前,它将首先调用finalize()方法。
1.调用的时机:
在Java中,由于GC的自动回收机制,因而并不能保证finalize方法会被及时地执行(垃圾对象的回收时机具有不确定性),也不能保证它们会被执行(程序由始至终都未触发垃圾回收)。
2.什么时候用:
finalize()方法中一般用于释放非Java 资源(如打开的文件资源、数据库连接等),或是调用非Java方法(native方法)时分配的内存(比如C语言的malloc()系列函数)。

利用finalize()方法最多只会被调用一次的特性,我们可以实现延长对象的生命周期。
(让对象复活)
因为finallize的调用时机具有不缺性,从一个对象变得不可到达开始,到finallize执行,所花费的时间是任意长的。因此应该避免使用。

三、泛型是什么 什么是类型擦除 限定通配符和非限定通配符
四、String、StringBuilder、StringBuffer 的区别
String:
对于String来说,是把数据存放在了常量池中,因为所有的String,默认都是以常量形式保存,且由final修饰,因此在线程池中它是线程安全的。因为每一个String当被创建好了以后,他就不再发生任何变化,但是它的执行速度是最差的。
我们要创建String的时候,他在常量池中对这些信息进行处理,如果在程序中出现了大量字符串拼接的工作,效率是非常底下的。
因此使用场景是在少量字符串操作的时候才建议直接使用String来操作。

StringBuilder:
线程安全与线程不安全:
在进行多线程处理的时候,如果多个线程对于这一个对象同时产生操作,会产生预期之外的结果。对于StringBuilder来说,执行效率虽然高,但是因为线程不安全,所以不建议在多线程的环境下对同一个StringBuilder对象进行操作。
因此StringBuilder适用于单线程环境下的大量字符串操作。

StringBuffer:
StringBuffer相对于StringBuilder效率要相对低一点,但也远比String要高的多。效率低的原因:对于StringBuffer来说更多的考虑到了多线程的情况,在进行字符串操作的时候,它使用了synchronize关键字,对方法进行了同步处理。
因此StringBuffer适用于多线程环境下的大量操作。

五、BIO NIO AIO有什么区别

BIO:同步阻塞io
客户端和服务端就进行阻塞式的通信,客户端发送一个请求,服务端Socket进行处理后返回响应,在响应返回前,客户端那边就阻塞等待,什么事情也做不了。 这种方式的缺点, 每次一个客户端接入,都需要在服务端创建一个线程来服务这个客户端,这样大量客户端来的时候,就会造成服务端的线程数量可能达到了几千甚至几万,这样就可能会造成服务端过载过高,最后崩溃死掉。

NIO:同步非阻塞io
相当于就是一个线程处理大量的客户端的请求,通过一个线程轮询大量的channel,每次就获取一批有事件的channel,然后对每个请求启动一个线程处理即可

AIO:异步非阻塞io
将数据写入的缓冲区后,就不去管它,剩下的去交给操作系统去完成。操作系统写回数据也是一样,写到Buffer里面,写完后通知客户端来进行读取数据**

六、java垃圾回收机制

垃圾:无任何对象引用的对象
回收:清理“垃圾”占用的内存空间而非对象本身
发生地点:一般发生在堆内存中,因为大部分的对象都储存在堆内存中
发生时间:程序空闲时间不定时回收

根搜索算法:
(1)通过一系列名为“GC Roots”的对象作为起始点,寻找对应的引用节点。

(2)找到这些引用节点后,从这些节点开始向下继续寻找它们的引用节点。

(3)重复(2)。

(4)搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,就证明此对象是不可用的。
(找不连通的子图)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值