每日面试题打卡(基础篇)——Day5

博主个人博客网站:文客
这个系列会长期更新!
如果你想每天和我打卡面试题、交流技术,可以关注一下我的个人博客网站:文客,我会每天在这里更新技术文章和面试题,也会及时收到大家的评论与留言,欢迎各位大佬来交流!

基础篇结语

经过五天的奋战,基础篇的面试题算是学习完啦。当然这些面试题只是基础中的一部分,对于知识的学习,我们一定要自成体系,不能盲目的去背八股。后面会主要更新容器篇的面试题,当然啦,如果我看到了其它的基础面试题也会整理发布的!谢谢大家的关注与支持。

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

序列化就是将我们程序中的数据结构或者是对象转化为二进制字符流

反序列化就是将二进制字符流解析,转换为对应的数据结构或对象

Java 序列化中如果有些字段不想进行序列化,怎么办?

可以使用transient关键字修饰,transient关键字的作用是组织被这个关键字修饰的变量被序列化,当反序列化时,被transient修饰的变量不会被恢复,这些变量一般会被置为对应的默认值。

transient只能修饰变量,不能修饰类和方法。用static修饰的变量不属于任何对象,所以static修饰的变量不会被序列化。

Java 中 IO 流分为几种?

按照单位划分可分为字节流和字符流

按照流向划分可分为输入流和输出流

按照功能划分可分为节点流和处理流

既然有了字节流,为什么还要有字符流?

字符流是JVM将字节转换得到的,这个过程非常耗时,并且当我们不知道编码类型时很容易出现乱码问题。所以,IO流就直接提供了一个可以直接操作字符流的接口,方便我们平时对字符进行流操作。

BIO,NIO,AIO 有什么区别?

BIO:同步阻塞式IO,也就是我们平常使用的传统的IO,它的特点是模型简单,不用考虑系统的过载和限流,但是面对十万级和百万级连接时,BIO就显得无能为力了,需要有性能更高的IO来处理。

NIO:同步非阻塞式IO,NIO在JDK1.4被引入,对应java.nio包,提供了Selector、Buffer和Channel等抽象。它是支持面向缓冲的,其实Java中的NIO可以看作为多路IO复用的模型,IO多路复用模型中,线程首先发起select调用,询问操作系统内核是否准备好数据,等内核准备好了数据再通过read调用读取数据,read调用这个过程还是阻塞的。

AIO:异步非阻塞式IO,AIO是基于事件和回调机制的。也就是说当程序发起read调用时会立刻返回,当内核准备好数据时会通过回调返回数据。

强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么?

不同的引用类型,主要体现在对象不同的可达性状态与对垃圾收集状态的影响。

强引用:强引用是我们最常见的引用类型,只要还有一个强引用指向一个对象,就能表明对象还存活,垃圾收集器就不会去碰他。对于一个普通对象,如果没有其它的引用关系,只要超过的引用的作用域或者是显示将引用赋值为null,就是可以被垃圾回收器回收的,具体何时回收这要看垃圾回收器的回收策略。

软引用:是一种比强引用相对弱化的引用,它可以豁免一些垃圾回收,只有当JVM认为内存不足时,才会去回收这类引用所指向的对象。JVM会确保在抛出OutOfMemoryError之前,回收掉软引用所指向的对象。软引用通常用来实现内存敏感的缓存,如果还有空闲内存,就可以暂时保留缓存,当内存不足时清理掉,这样就保证了使用缓存的同时,不会耗尽内存。

弱引用:弱引用不能使对象豁免垃圾收集,仅仅是提供一种访问在弱引用状态下对象的途径。这就可以用来构建一种没有特定约束的关系,比如,维护一种非强制性的映射关系,如果试图获取时对象还在,就使用它,否则重现实例化。它同样是很多缓存实现的选择。

幻象引用:也叫虚引用,不能通过它来访问对象。幻象引用仅仅是提供了一种确保对象被finalize以后,做某些事情的机制。

博客原文地址

每日面试题打卡(基础篇)——Day5
在这里插入图片描述

你可能感兴趣的:(面试题打卡,java,开发语言)