IO面试题整理

Java基础面试题——IO和多线程专题 进程:一个独立的正在执行的程序线程:一个进程的最基本的执行单位,执行路径多进程:在操作系统中,同时运行多个程序多进程的好处:可以充分利用CPU,提高CPU的使用率多线程:在同一个进程(应用程序)中同时执行多个线程多线程的好处:提高进程的执行使用率,提高了CPU的使用率在同一个时间点一个CPU中只可能有一个线程在执行多线程不能提高效率、反而会降低效率,但是可以提高CPU的使用率一个进程如果有多条执行路径,则称为多线程程序Java虚拟机的启动至少开启了两条线程,主线程和垃圾回收线程。 阅读详情

1.同步/异步,阻塞/非阻塞是一样的概念吗?

不一样。

阻塞/非阻塞说的是调用者。调用者需要等待就是阻塞,不需要等待就是非阻塞。

同步/异步说的是被调者通知调用者的方式。被调者执行完成后再恢复调用者是同步。被调者立即告诉调用者收到求请求。当处理完成后,再告诉调用者处理完成。这就是异步。

https://www.cnblogs.com/liaowenhui/p/14617891.html

什么是数据准备?什么是数据读取?

数据准备:是将数据从网络物理设备(网卡)读取到内核缓冲区。

数据读取(复制):将数据从内核缓冲区拷贝到用户程序空间的缓冲区。

数据准备阶段和数据读取读取阶段是谁发起的?通过什么指令发起的?

都是由用户线程发起的。数据准备由询问指令发起,数据读取由read指令发起。

整个io过程中到底有哪些步骤

以读取来自客户端的请求进行处理为例:

介绍思路:

从服务器处理来自客户端的请求出发-》 描述请求数据的数据流 -〉如何使用较少的线程资源处理好成千上万的请求 -》 介绍select模型 -〉信号驱动io模型 -》异步模型

常见的几种io模型的关系到底是怎么样?

阻塞同步io模型:这个模型的特点就是每个socket连接都会有一个线程负责监听,高并发的场景非常消耗线程资源。基本不会使用。

非阻塞同步io模型:这里的模型特点是,在socket数据准备阶段,如果数据没有准备好,会返回给用户线程一个error。线程需要不断轮训去监听socket的状态。当然在每次轮训期间,线程可以做其他的事情。这个模型里面io线程也是没有被复用的。

io复用模型:特点一个线程,可以监听多个socket连接。有select机制和epoll机制。

select 基于轮询机制,随着连接数的增加处理效率会下降。(poll也是轮训的机制,但是没有监听连接数数量的限制)

epoll模型基于事件通知,socket就绪会告知主线程处理。优点,连接数增加,性能也没什么变化,可以处理的连接数无限制(数据准备阶段也是需要等待内核回复是否ready的消息,只是说不用一直等待数据准备好)

信号I/O:还不完全是非阻塞,在数据准备阶段是非阻塞,在数据复制阶段是阻塞

通过信号驱动的方式,使用的sigaction系统调用,向socket中组册信号回调。但是tcp协议中不会用,是一种 Unix 信号,信号没有附加信息,如果一个信号源有多种产生信号的原因,信号接收者就无法确定究竟发生了什么。而 TCP socket 生产的信号事件有七种之多,这样应用程序收到 SIGIO,根本无从区分处理。(无法区分是socket数据已经准备好了,还是说发生了什么异常)

参考:https://www.cnblogs.com/chenssy/p/15382938.html

非阻塞异步:数据准备和数据读取都是非阻塞的,且内核是异步处理

可以理解用户进程发起read指令后,操作系统内核立即返回结果,然后操作系统自动完成数据准备和数据复制两个阶段的工作。完成后,再通过信号通知用户进程。

Linux内核2.6确实提供了内核级的AIO支持,只是还不完善。所以java也是用不来异步非阻塞io的。

基于上面的5中基础的io模型?又有哪些可以知道设计开发的更高级的模型?

reactor模型:

单reactor单线程:依赖io多路复用技术

单reactor多线程:依赖io多路复用技术

主从Reactor多线程:

依赖的也是io多路复用模型

图中acceptor的作用,接受新的请求,监听未ready的scoket链接,将ready的连接分发到下游处理。

Proactor模型

Proactor 基于基础的异步io模型,定义了每个步骤需要的组件,以及每个组件的功能。

比如说因为操作系统自己完成数据复制的过程,那么数据复制到哪里去呢,这个是需要用户告知的。所以在用户进程发起read指令时,就应该携带这个相关的数据。

哪基于reactor模型,哪又有哪些可以使用的组件呢?

netty就是基于reactor开发的。这三种Reactor模型在netty中都是支持的,但是我们常用的是主从Reactor多线程模型。下面是主从Reactor多线程模型。

所以其实netty使用就是io多路复用模型。

上面是5中常见的io模型。java中使用的又是那种io模型呢?

在java中,如果使用的是tomcat容器,可以支持3种模式,那他们分别使用的是什么模型。

APR模式:非阻塞同步模型;

BIO模式:阻塞同步的模型,一个socket连接需要一个线程处理(完成监听,数据读取,业务支持,响应等)。

NIO模式:基于io多路复用模型,用java.nio编写的TCP模块。具体的设计如下。

除来tomact模型,还是有jetty,undertown,netty可以使用。

tomcat:成熟稳定。但性能比undertown要差。

underTown的性能好与tomcat,jetty。相对于Tomcat和Jetty,社区和生态系统相对较小。

netty:高性能

jetty:轻量级、快速启动和低资源消耗。性能与tomcat差不多。扩展性好。更易于开发者对Jetty本身进行二次开发,定制一个适合自身需求的WebServer

1.1 不同模型的不同阶段是阻塞还是非阻塞,是同步还是异步

2. 介绍一下io复用模型?

这里的io复用指的是,负责处理input/output工作的线程的服用。相比非复用的io模型每个fd文件描述符(网络请求),都会用一个线程进行监听,复用的io模型只需使用一个线程进行监听,当发现有数据准备好的文件描述符时,会将其通知给另一个负责数据读取的线程。当请求并发量高时,这样的模型,大大减少了线程的使用。

但是这个模型也有它的不足之处,比如监听fd文件描述符的线程,需要不断轮询。但大多数的轮训其实是无效的。这个问题,信号驱动的io模型可以解决。

使用io 复用模型的例子:select模型,poll模型,epoll模型。

是同步模型,因为操作系统内核处理用户线程的read指令是同步的。它是需要用户线程等待自己执行完的。并不是立即回复,执行完后,再另行通知(异步方式)。

常见的io多路复用模型

1. select模型:思想是,节约用户文件描述符监听的线程,只需使用一个线程进行文件描述符的监听即可。相比非复用的模型,大大减少了线程的使用。使用轮询的方式监听,效率低。

2.poll模型,本质和select模型没有什么区别。只是它使用链表来存放文件描述符,解决了select模型中文件描述符限制的问题。

3.epoll模型:显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。使用回调机制,让准备好的文件描述符加入一个ready队列。减少轮询的消耗。

io复用模型也是,阻塞同步模型。

3.介绍一下信号驱动io模型?

信号驱动io是在首次发起询问请求时,与文件描述符建立一个信号联系,当文件描述符状态变为ready后,会主动通知询问线程。相比socket模型,减少了很多无效的轮询。

4.介绍一下异步io模型?

io复用模型和信号驱动模型,都是需要先发送一个数据询问请求,再发起一个数据读取请求。

那是否可以一步到位。用户进程只需要发起一次询问请求。数据的准备和复制,都是由操作系统内核完成,并在完成后,只需通知用户线程已完成。然后用户线程再完成后续的业务操作。

5. 介绍一些netty模型

https://segmentfault.com/q/1010000016221286 
netty只是异步事件驱动,并不是异步的网络模型,要异步还是需要操作系统支持的

下图是netty的处理流程图。其中acceptor和read的过程都是通过事件机制去通知应用线程数据准备和数据复制的工作完成,可以进行业务处理了。

6. spring cloud gateway 使用的io模型是哪一种?

它使用的就是netty模型,在数据的ready和数据read阶段它都是异步的。

7. springboot项目,使用的tomcat容器,使用的是什么io模型,它的原理是什么?

tomcat有nio和bio这两种选择,那一般项目中使用的是nio这个模式。这个模式基于JDK的NIO实现的多路复用的IO模型,并且Tomcat的网络模型是主从Reactor多线程模型。

参考文章:

100%弄明白5种IO模型 - 知乎

NIO之缓冲区【直接和非直接缓冲区】-腾讯云开发者社区-腾讯云45 张图深度解析 Netty 架构与原理-腾讯云开发者社区-腾讯云

netty到底是同步还是异步? - 知乎

Netty相关网络IO面试题(20题) 摘要 : 本文主要介绍网络编程, NETTY io 核心面试题 20道大题,穿插部分小题,可以用作复习! 阅读详情

相关推荐

Java最全面试题->Java基础面试题->JavaSE面试题->IO面试题

本文主要有基本IO面试题和网络IO面试题

白菜治 942

IO 面试题

I/O为input(输入)/ output(输出)的简称input代表将数据从其他地方写入程序,例如从文件中读取文件,将文件内容保存在程序内存中output代表程序将数据输出到某些地方,例如利用程序向文件中保存内容等,在Linux系统中,有一切皆文件的概念,不管对于任何文件,设备,网络设备等,在Linux下都被当做文件来进行处理;位(bit):是计算机中存储数据的最小单位,是二进制数中的一个位数,值为“0”或“1”。字节(byte):计算机中存储数据的单元,是一个8位的二进制数,一个具体的存储空间。

weixin_43964191的博客 1212

金九银十准备季:Java IO流面试题(含答案)

前言 本题集列举了众多IT公司面试真题,对应聘Java程序员职位的常见考点和知识体系都进行的分类和归纳整理。 本题集适合应聘Java和JavaEE职位的程序员作为面试复习、学习和强化的资料,也适合其他程序员作为拓展读物进行阅读。 本题集包含了常见的算法、面试题,也包含了新的高级技术,比如:微服务架构等技术的面试题目。本题集非常全面,对于工作1-5年左右的java程序员面试有非常好的指导作用。 大家也可以访问(直接在线观看最新版的面试题): Java考试_Java笔试题机试题真题讲解_JavaWeb

java8797的博客 2448

面试题系列之IO面试题

面试题系列之IO面试题1、IO里面的常见类,字节流、字符流、接口、实现类、方法阻塞?8、往期佳文8.1、面试系列8.2、技术系列8.3、源码系列8.4、数据结构和算法系列8.5、并发系列8.6、面试题系列8.7、JVM系列 1、IO里面的常见类,字节流、字符流、接口、实现类、方法阻塞?         8、往期佳文 8.1、面试系列 1、吊打面试官之一面自我介绍 2、吊打面试官之一面项目介绍 3、吊打面试官之一面系统架构设计 4、吊打面

Java学习之乐的博客 1万+

深入剖析JavaIO面试题: 详细剖析了字节流与字符流的用法与区别以及BIO、NIO、AIO之间的区别与联系

本文系统梳理了Java I/O核心知识,对比了字节流与字符流的差异及适用场景,分析了缓冲机制的作用。深入讲解了Java I/O模型的演进历程:从同步阻塞的BIO(单连接单线程)、到同步非阻塞的NIO(多路复用),再到异步非阻塞的AIO(回调驱动)。详细解析了NIO三大核心组件(Buffer、Channel、Selector)和AIO的架构设计(异步通道、回调处理器)。通过代码示例展示了不同I/O模型的实现方式,并提供了性能对比和选型建议,帮助开发者根据连接数、业务特性和团队能力选择适合的I/O方案。

Java 后端|Python|AI 实战博主。专注微服务、分布式、大模型应用开发,输出可落地项目、源码剖析与面试总结。用通俗文字拆解技术难点,记录开发路上的学习与踩坑,期待和大家一起交流成长。 6000

pwscf与wannier90 Hands-On实战训练(一)——费米面计算为例

系列文章目录 Quantum Espresso Hands-On实战训练(三)——DOS计算 文章目录系列文章目录计算过程pwscf直接得到等能面pwscf和wannier90得到等能面pwscf直接得到等能面1. scf2. nscf3. 后处理pwscf和wannier90得到等能面1. Kpoints2. scf3. nscf4. pw2wan及wannier90.x5. XCrySDen可视化 计算过程 pwscf直接得到等能面 pwscf和wannier90得到等能面 pwscf直接得到等能面

weixin_45973682的博客 5070

Java IO面试题及答案整理汇总

说到Java开发,所有的java程序员都知道JavaIO流,而且相信大家在具体的工作中也都会用到,但是其实很多朋友们并没有完全掌握java IQ流的内容,而且java IO在java 面试中也会考察到,是在面试官常考的知识范围内的。近期也有不少的小伙伴面临着就业面试的问题,下面就整理了一些java IO的面试题及答案,帮助大家学习一下。 1、字节流和字符流的区别? 答:字节流读取的时候,读到一个字节就返回一个字节;字符流使用了字节流读到一个或多个字节(中文对应的字节数是两个,在 UTF-8 码表中是 3 个

shuux666的博客 4284

FlowDroid高级技巧:从基础配置到精准Android静态污点分析实战

静态污点分析是软件安全领域的核心技术,通过追踪数据在程序中的流动路径,识别潜在的隐私泄露与安全漏洞。其原理基于控制流与数据流分析,构建程序执行模型,模拟敏感信息从源头到汇聚点的传播过程。这项技术的核心价值在于能在不运行代码的情况下,系统性地发现隐蔽的数据流问题,为应用安全提供前置保障。在Android应用安全审计、合规检测等场景中,静态污点分析工具如FlowDroid已成为发现数据泄露、硬编码密钥等问题的标准手段。本文聚焦于FlowDroid的高级实战应用,深入探讨如何通过优化配置、调参策略及结果分析,将这

weixin_29324401的博客 367

java io 面试题_Java IO面试题及答案整理汇总

说到Java开发,所有的java程序员都知道JavaIO流,而且相信大家在具体的工作中也都会用到,但是其实很多朋友们并没有完全掌握java IQ流的内容,而且java IO在java 面试中也会考察到,是在面试官常考的知识范围内的。近期也有不少的小伙伴面临着就业面试的问题,下面就整理了一些java IO的面试题及答案,帮助大家学习一下。1、字节流和字符流的区别?答:字节流读取的时候,读到一个字节...

weixin_36487107的博客 2948

新手避坑指南:用PIC16F15355开发板和MCC完成第一个UART通信项目

本文为新手提供了使用PIC16F15355开发板和MPLAB代码配置器(MCC)实现首个UART通信项目的完整指南。通过图形化配置系统时钟、UART参数并自动生成驱动代码,手把手教学如何避开常见陷阱,快速完成从环境搭建、代码编写到调试输出的全流程,助力开发者高效入门PIC单片机开发。

bash7scripter的博客 725

ROS-Industrial :simple_message

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录1. 概述2. 协议(Protocol)3. HEADER解析3.1 MSG_TYPE3.2 COMM_TYPE3.3 REPLY CODE 1. 概述 Simple_Message是ROS-Industrial的一部分,定义了用于与工业机器人控制器通信的简单消息连接协议。另外还包括处理连接受限系统的处理器和管理器类。 2. 协议(Protocol) 简单消息(simplemessage)协议定义了ROS的驱动层和机器人控制器之.

flsxyw的博客 780

Java 面试题整理成 985 道细分 26 个部分,接连下成功面上阿里!

今年7自己在网络上白嫖了很多资料,自己也通过线下的方式联系了一些在阿里、腾讯这些大厂的朋友(我是天津大学计算机专业毕业)拿到了一些内部的面试题,自己手动总结细分化了26个部分,现在免费分享给大家,获取方式在文章最后,如果有不足的地方欢迎大家补充!

m0_73256420的博客 165

手机也能跑!5.6MB的AnimeGANv3模型部署实战:从PyTorch到ONNX再到移动端推理

本文详细介绍了如何将轻量级动画生成器AnimeGANv3从PyTorch模型转换为ONNX格式,并部署到移动端进行实时推理。通过5.6MB的极简模型设计和优化策略,实现在手机等边缘设备上的高效动漫风格转换,涵盖模型准备、格式转换、移动端优化及性能调优全流程。

weixin_33724059的博客 383

2023-JavaSE最新整理面试题-IO和多线程专题

Java面试专题

波波烤鸭的博客 978

Codex 接入自定义大模型终极教程:插件解锁、会话管理、国产模型一键搞定

🚀 Codex 默认只能使用 OpenAI 官方模型?这篇文章带你从零接入 DeepSeek、通义千问、GLM 等国产大模型,并彻底解锁插件、会话删除、多模型切换等隐藏功能。配置原理、常见坑点、傻瓜式增强工具分享,小白也能轻松上手!🔥

XiaoqiangClub的博客 3142

【YOLO26实战全攻略】08——YOLO26模型导出与部署全攻略:从训练权重到生产环境(含5种格式+INT8量化+实战案例)

本文聚焦YOLO26模型从训练权重到生产环境的全流程部署,针对“训练精度高、部署效果差”的行业痛点,详解其无NMS端到端推理、量化友好架构、全格式导出三大核心优势。内容涵盖ONNX、TensorRT、OpenVINO、TFLite、CoreML五种主流格式的导出原理与实操步骤,深入剖析INT8量化、混合量化等边缘优化技术,并通过智慧园区车辆检测虚拟案例,完整演示从模型准备、格式导出、引擎适配到性能验证的全流程。文中提供可直接复制运行的代码、详细执行结果及避坑指南,兼顾新手入门与进阶读者提升,更好的帮助读者。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 500

【面试精选】40道Java IO高频题整理(附答案背诵版)

同步 I/O(Input/Output)和异步 I/O 是两种基本的数据交换模式。在同步 I/O 模式中,一个 I/O 操作必须在完成之前,其他所有的操作都必须等待。也就是说,一个同步 I/O 操作阻止了程序的执行,直到这个操作完成。这种方式简单、直接,但也容易造成程序阻塞,降低了程序的整体效率。例如,当你在 Java 中使用读取文件时,如果文件非常大,那么程序会阻塞,直到整个文件都被读取完毕。在异步 I/O 模式中,一个 I/O 操作的开始和结束(或完成)是分离的。

tyler的博客 846

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

【WorkBuddy专栏19】技能的创造与迁移——从零开始打造你的AI工作流

AI人人懂 369

Java面试题之IO流分为几种?

各位伙伴们,大家好!随着时间的推进,由于本人需要为实习面试做准备,同时也希望每天能将面试题整理一点,来帮助和我有同样需求的伙伴,古人云:不积跬步,无以至千里;不积小流,无以成江海;所以呢?每天进步一点点,日积月累,终会有大的进步。今天要讲解的是面试过程中常有的一道题目: IO流分为几种? 通过这个框架我们有一定的认识,还需要进行深层次的反问? IO流是用来做什么的?它的分类?常用的有哪几种? J...

qq_41026809的博客 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

40道Java IO高频题整理(附答案背诵版)

同步 I/O(Input/Output)和异步 I/O 是两种基本的数据交换模式。在同步 I/O 模式中,一个 I/O 操作必须在完成之前,其他所有的操作都必须等待。也就是说,一个同步 I/O 操作阻止了程序的执行,直到这个操作完成。这种方式简单、直接,但也容易造成程序阻塞,降低了程序的整体效率。例如,当你在 Java 中使用读取文件时,如果文件非常大,那么程序会阻塞,直到整个文件都被读取完毕。在异步 I/O 模式中,一个 I/O 操作的开始和结束(或完成)是分离的。

Angela_L的博客 1198

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JavaSE面试题整理

JavaSE面试题整理Object类Object类自带哪些方法?String类构造方法创建一个表格 Object类 Object类自带哪些方法? hashCode() hashCode相等,不一定equals equals时,hashCode一定相等 如果不重写hashcode(),在HashSet中添加两个equals的对象,会将两个对象都加入进去。 toString() equals(Obj...

Mono is growing up 1393

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

不愿看你迷茫,把清华毕业大佬整理的Java网络编程面试题分享给你

前言 大家平时在面试开发岗位的时候,是不是总觉得面试官问的问题,都感觉是在刁难自己呢?明明自己准备的知识都很充足,为什么偏偏问的都不是自己所掌握的?小编在这里告诉大家,你们就是缺少对应的面试题做指导,没有一个方向。面试造火箭,入职拧螺丝,所以说,面试对大家来说是非常重要的。 小编应大家的考虑,给大家分享清华毕业大佬所整理的Java网络编程面试题。因为内容实在是有点多,小编在这里只给大家把部分内...

如果频繁就私信一下呢 604
上一篇: 后端开发专业英文单词收集
下一篇: 英文自我介绍
带着托托写代码
博客等级 码龄10年 113粉丝 90原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值