分享10道Java流相关面试题!!!

1.谈谈对 NIO 的认知?

NIO的IO处理机制与以往的标准IO机制不同的是,新的机制把重点放在了如何缩短抽象与现实之间的距离上面。

NIO中提出了一种新的抽象,NIO 弥补了原来的BIO的不足,它在标准 Java 代码中提供了高速的、面向块的I/O

2.字节流和字符流的区别?

编码方式不同决定处理文件类型不同,字节流(ASCII)处理二进制文件,字符流(Unicode)处理文本文件

3.NIO 和传统的 IO 有什么区别?

BIO与NIO之间的共同点是他们都是同步的。而非异步的。

(1)BIO是阻塞的(当前线程必须等待感兴趣的事情发生), NIO是非阻塞的(事件选择,感兴趣的事情发生可以通知线程,而不必一直在哪等待);

(2)BIO是面向流式的IO抽象(一次一个字节地处理数据), NIO是面向块的IO抽象(每一个操作都在一步中产生或者消费一个数据块(Buffer));

(3)BIO的服务器实现模式为一个连接一个线程,NIO服务器实现模式为一个请求一个线程;

4.BIO 和 NIO 和 AIO 的区别以及应用场景?

1.BIO:同步并阻塞,服务器的实现模式是一个连接一个线程,这样的模式很明显的一个缺陷是:由于客户端连接数与服务器线程数成正比关系,可能造成不必要的线程开销,严重的还将导致服务器内存溢出。当然,这种情况可以通过线程池机制改善,但并不能从本质上消除这个弊端。

2.NIO:在JDK1.4以前,Java的IO模型一直是BIO,但从JDK1.4开始,JDK引入的新的IO模型NIO,它是同步非阻塞的。而服务器的实现模式是多个请求一个线程,即请求会注册到多路复用器Selector上,多路复用器轮询到连接有IO请求时才启动一个线程处理。

3.AIO:JDK1.7发布了NIO2.0,这就是真正意义上的异步非阻塞,服务器的实现模式为多个有效请求一个线程,客户端的IO请求都是由OS先完成再通知服务器应用去启动线程处理(回调)。

应用场景:并发连接数不多时采用BIO,因为它编程和调试都非常简单,但如果涉及到高并发的情况,应选择NIO或AIO,更好的建议是采用成熟的网络通信框架Netty。

5.Java 中有几种类型的流

两种流分别是字节流,字符流。字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。

6.什么是缓冲区?有什么作用

指由多个以不同速度或优bai先级运行的硬件或du程序进程共享的数据存储区,zhi在其中暂时保存dao数据。缓冲区使进程之间的相互等待变少了。先结束的进程可以把结果放入缓冲区内,进行下面的工作,而后做完的进程可以从缓冲区内取出原来的数据继续工作。缓冲区的作用是:在高速和低速设备之间起一个速度平滑作用;暂时存储数据;经常访问的数据可以放进缓冲区,减少对慢速设备的访问以提高系统的效率。

7.什么是阻塞 IO?什么是非阻塞 IO

阻塞baiIO:socket 的阻塞模式意味着必须要du做完IO 操作(包括错误)才会返回。

非阻塞IO:非阻塞模式下dao无论操作是否完成都会立刻返回,需要通过其他方式来判断具体操作是否成功。

8.如何实现对象克隆

实现Cloneable接口并重写Object类中的clone()方法;
实现Serializable接口,通过对象的序列化和反序列化实现克隆

9、流的概念和作用

流:代表任何有能力产出数据的数据源对象或者是有能力接受数据的接收端对象

流的本质:数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

作用:为数据源和目的地建立一个输送通道

10.什么是节点流,什么是处理流,各有什么好处,处理流的创建有什么特征?

节点流:从特定的地方读写的流类,例如:磁盘或一块内存区域。

处理流:使用节点流作为输入或输出。是使用一个已经存在的输入流或输出流连接创建的

处理流的构造器必须要 传入节点流的子类

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值