确定不看吗? 全网最详 BIO,NIO,AIO,Netty面试题——IO篇(持续更新)

Posted 孟挽周

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了确定不看吗? 全网最详 BIO,NIO,AIO,Netty面试题——IO篇(持续更新)相关的知识,希望对你有一定的参考价值。

Java面试题IO篇

说明:所有题目均来自互联网,如有侵权可联系删除,在此希望大家沉下心来,认真学习。╥﹏╥…因工作原因,日更新10题。整合不易 关注加点赞就是对博主最大的支持!


提示:大家有资源或有更好建议的可以私信博主或评论区留言哦!


前言

送给大家一句话:平凡的脚步也可以走完伟大的行程
在这里插入图片描述

BIO、NIO、AIO、Netty


1. 什么是IO

  • Java中I/O是以流为基础进行数据的输入输出的,所有数据被串行化(所谓串行化就是数据要按顺序进行输入输出)写入输出流。简单来说就是java通过io流方式和外部设备进行交互。

  • 在Java类库中,IO部分的内容是很庞大的,因为它涉及的领域很广泛:标准输入输出,文件的操作,网络上的数据传输流,字符串流,对象流等等等。
    在这里插入图片描述

  • 比如程序从服务器上下载图片,就是通过流的方式从网络上以流的方式到程序中,在到硬盘中。


2. 在了解不同的IO之前先了解:同步与异步,阻塞与非阻塞的区别

同步 一个任务的完成之前不能做其他操作,必须等待(等于在打电话)

异步 一个任务的完成之前,可以进行其他操作(等于在聊QQ)

阻塞 是相对于CPU来说的, 挂起当前线程,不能做其他操作只能等待

非阻塞 无须挂起当前线程,可以去执行其他操作


3. 什么是BIO

BIO 同步并阻塞,服务器实现一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,没处理完之前此线程不能做其他操作(如果是单线程的情况下,我传输的文件很大呢?),当然可以通过线程池机制改善。BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。


4. 什么是NIO

NIO: 同步非阻塞,服务器实现一个连接一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4之后开始支持。


5. 什么是AIO

AIO 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由操作系统先完成了再通知服务器应用去启动线程进行处理,AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用操作系统参与并发操作,编程比较复杂,JDK1.7之后开始支持。

AIO属于NIO包中的类实现,其实IO主要分为BIO和NIO,AIO只是附加品,解决IO不能异步的实现在以前很少有Linux系统支持AIO,Windows的IOCP就是该AIO模型。但是现在的服务器一般都是支持AIO操作。

6. 什么是Netty

NettyNetty是由JBOSS提供的一个Java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。

Netty 是一个基于NIO的客户、服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发。
在这里插入图片描述

Netty是由NIO演进而来,使用过NIO编程的用户就知道NIO编程非常繁重,Netty是能够能跟好的使用NIO


7. 未完待续


在这里插入图片描述

以上是关于确定不看吗? 全网最详 BIO,NIO,AIO,Netty面试题——IO篇(持续更新)的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 中BIO,NIO,AIO的理解

BIO NIO AIO 学习笔记

BIO,NIO,AIO详解

Java BIO与NIO以及AIO分析

也谈BIO | NIO | AIO (Java版--转)

NIO:异步非阻塞I/O,AIO,BIO