《Java 100 天进阶之路》第36篇:选择最适合自己的NIO,一探流技术

java技术经理面试题及答案javamap集合面试题 其实关于Kafka,能问的问题实在是太多了,扒了几天,最终筛选出44问:基础篇17问、进阶篇15问、高级篇12问,个个直戳痛点,不知道如果你不着急看答案,又能答出几个呢?若是对Kafka的知识还回忆不起来,不妨先看我手绘的知识总结脑图(xmind不能上传,文章里用的是图片版)进行整体架构的梳理梳理了知识,刷完了面试,如若你还想进一步的深入学习解读kafka以及源码,那么接下来的这份《手写“kafka”》将会是个不错的选择。Kafka入门为什么选择KafkaKafka的安装、管理和配置。 阅读详情

第36篇:选择最适合自己的NIO,一探流技术

📌 系列导航:《Java 100 天进阶之路》完整目录 |
⬅️ 上一篇:第35篇:Java异常处理最佳实践 |
➡️ 下一篇:第37篇:Java内部类及其作用


一、核心知识点

  • BIO(Blocking I/O)、NIO(Non-blocking I/O)、AIO(Asynchronous I/O)的区别
  • 传统流体系:字节流、字符流、缓冲流、转换流
  • NIO 核心组件:Channel(通道)、Buffer(缓冲区)、Selector(多路复用器)
  • 文件操作与网络操作示例
  • 压缩流(GZIP)等

二、通俗讲解(1分钟开心学)

1. I/O 模型的演进

  • BIO(同步阻塞):一个连接一个线程,线程在读写数据时会阻塞。适合连接数少、处理快的场景。
  • NIO(同步非阻塞):一个线程可以管理多个连接(Selector),当数据准备好时才处理。适合连接数多但每个连接不频繁通信的场景(如聊天服务器)。
  • AIO(异步非阻塞):数据准备好后回调通知,不需要主动轮询。适合高并发、长连接的场景(Java 7 引入,但实际使用不如 NIO 普遍)。

2. 传统流(BIO)体系

  • 字节流:InputStream / OutputStream,处理二进制数据(图片、音视频)。
  • 字符流:Reader / Writer,处理文本,自动处理字符编码。
  • 缓冲流:BufferedInputStream / BufferedReader,减少系统调用,提高性能。
  • 转换流:InputStreamReader / OutputStreamWriter,字节与字符之间的桥梁。

3. NIO 三大核心

  • Channel:双向通道,可读可写(类似流但功能更强)。
  • Buffer:缓冲区,数据容器(如 ByteBuffer)。
  • Selector:多路复用器,监听多个 Channel 的事件(读就绪、写就绪等)。

4. 为什么 NIO 性能更好?

BIO 每个连接占用一个线程,线程上下文切换开销大。NIO 通过 Selector 复用线程,只有数据准备好时才处理,资源占用低。

生活类比:
BIO 就像餐厅里每个顾客配一个服务员,服务员一直守着,顾客不说话也站着。
NIO 就像一个服务员同时服务多个顾客,哪个顾客举手(数据就绪)就去哪个,其他时间可以干别的。

三、实操代码案例 + 场景说明

场景:文件复制,分别用 BIO 流和 NIO 的 FileChannel 实现,并对比效率。

import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.*;

public class NIODemo {
    // BIO 文件复制
    public static void copyWithBIO(String src, String dest) throws IOException {
        try (InputStream in = new FileInputStream(src);
             OutputStream out = new FileOutputStream(dest)) {
            byte[] buffer = new byte[8192];
            int len;
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);
            }
        }
    }
    
    // NIO 文件复制(使用 FileChannel)
    public static void copyWithNIO(String src, String dest) throws IOException {
        try (FileChannel srcChannel = FileChannel.open(Paths.get(src), StandardOpenOption.READ);
             FileChannel destChannel = FileChannel.open(Paths.get(dest), StandardOpenOption.CREATE, StandardOpenOption.WRITE)) {
            srcChannel.transferTo(0, srcChannel.size(), destChannel);
        }
    }
    
    // NIO 带缓冲区的手动复制
    public static void copyWithNIOBuffer(String src, String dest) throws IOException {
        try (FileChannel srcChannel = new FileInputStream(src).getChannel();
             FileChannel destChannel = new FileOutputStream(dest).getChannel()) {
            ByteBuffer buffer = ByteBuffer.allocate(8192);
            while (srcChannel.read(buffer) != -1) {
                buffer.flip();
                destChannel.write(buffer);
                buffer.clear();
            }
        }
    }
    
    // GZIP 压缩(BIO 流的典型应用)
    public static void compressGZIP(String src, String dest) throws IOException {
        try (InputStream in = new FileInputStream(src);
             OutputStream out = new GZIPOutputStream(new FileOutputStream(dest))) {
            byte[] buf = new byte[8192];
            int len;
            while ((len = in.read(buf)) != -1) {
                out.write(buf, 0, len);
            }
        }
    }
    
    public static void main(String[] args) throws Exception {
        String src = "largefile.dat";
        String dest = "copy.dat";
        
        long start = System.nanoTime();
        copyWithBIO(src, dest);
        System.out.println("BIO time: " + (System.nanoTime() - start) / 1e6 + " ms");
        
        start = System.nanoTime();
        copyWithNIO(src, dest);
        System.out.println("NIO transferTo: " + (System.nanoTime() - start) / 1e6 + " ms");
    }
}

NIO 服务器简例(理解 Selector):

// 核心代码示意
Selector selector = Selector.open();
ServerSocketChannel server = ServerSocketChannel.open();
server.bind(new InetSocketAddress(8080));
server.configureBlocking(false);
server.register(selector, SelectionKey.OP_ACCEPT);
while (true) {
    selector.select();  // 阻塞等待事件
    Set<SelectionKey> keys = selector.selectedKeys();
    for (SelectionKey key : keys) {
        if (key.isAcceptable()) { /* 接受连接 */ }
        else if (key.isReadable()) { /* 读数据 */ }
    }
    keys.clear();
}

四、避坑要点

错误/误区后果正确做法
NIO 中忘记 flip()读不到数据或读到错误数据写后读前调用 flip()
直接缓冲区频繁分配性能下降复用缓冲区,使用对象池
Selector 处理完事件不移除无限循环用完后 iterator.remove()
混淆字符流和字节流乱码或数据损坏文本用字符流,二进制用字节流

五、面试高频考点

Q1:BIO、NIO、AIO 的区别?

BIO 阻塞,一连接一线程;NIO 同步非阻塞,通过 Selector 管理多个连接;AIO 异步非阻塞,基于回调。NIO 适合高并发低流量(如聊天),AIO 适合高并发长连接(但实现复杂)。

Q2:NIO 的核心组件有哪些?

Channel(双向通道)、Buffer(数据容器)、Selector(事件多路复用器)。

Q3:什么是零拷贝?

FileChannel.transferTo() 可以直接将数据从文件系统缓存传输到网络套接字缓冲区,绕过用户态内存拷贝,提高大文件传输效率。

六、练习题

  1. 对比:分别用 BIO 和 NIO 实现文件复制,比较耗时。
  2. 编程:使用 NIO 的 FileChannel 实现一个方法,将文件内容全部读取到 ByteBuffer 中并打印。
  3. 简答:为什么 NIO 适合高并发场景?

📊 你的学习进度

  • 当前:第36篇 / 共44篇 · 第六阶段:NIO、泛型、JVM内幕、字节码(第36~44篇)
  • ✅ 已完成:第1~35篇
  • 📖 正在学:第36篇
  • ⏳ 待学习:第37~44篇

👉 📚 完整目录 & 学习指南 | 🔥 订阅本专栏,不错过每一篇

💡 本专栏每篇都包含:避坑表 + 面试高频考点 + 练习题。每天30分钟,100天拿offer!


👉 下一篇文章预告

《第37篇:Java内部类及其作用》

内容简介:成员内部类、静态内部类、局部内部类、匿名内部类,访问规则,内存泄漏风险。

💡 学完这篇,你将掌握内部类的所有用法,写出更优雅的代码结构。

📌 《Java 100 天进阶之路 | 从入门到上岗就业》 每天一篇,建议收藏 + 关注,一起100天拿offer!
👉 点击关注我,更新后第一时间收到推送!
📌 除了Java,我也在深挖智能物流实战(出版社WMS、托盘调度、机器学习落地)。如果你对技术在不同领域的实战感兴趣,欢迎点击我的头像,看看专栏《出版社物流WMS智能调度实战》。技术相通,思路可鉴。

给新人的储能系统入门图解:从电芯到EMS,一张图看懂BESS里那些‘黑话’ 本文通过视觉化拆解储能系统,从电芯到EMS详细解析BESS中的关键组件和行业术语。涵盖电芯参数、模组组装、PCS功能、BMS与EMS分工,以及SOC、DOD等关键运维参数,帮助新人快速理解储能系统的核心技术和应用场景。 阅读详情

相关推荐

深度学习赋能胶囊内镜:AI如何实现胃肠道出血的自动检测与分割

在计算机视觉领域,图像分类与目标检测是处理医学影像分析的核心技术。其原理在于通过卷积神经网络(CNN)自动学习图像中的多层次特征表示,实现对特定目标的识别与定位。这项技术的价值在于能够将医生从海量、重复的阅片工作中解放出来,提升诊断效率与一致性,尤其在处理如胶囊内镜产生的数万张连续图像时优势显著。其应用场景广泛覆盖了医学影像的辅助诊断,例如在消化内科,对胃肠道出血的早期发现与精准定位具有重要临床意义。本文聚焦于利用深度学习模型,如U-Net和EfficientNet,构建一个能够从复杂多变的胶囊内镜图像中,

weixin_42533910的博客 373

BAT 校招面试Java技术问题总结

这位大侠,这是我的公众号:程序员江湖。分享程序员面试与技术的那些事。 干货满满,关注就送。 BAT 校招面试Java技术问题总结 26.Hashtable,HashMap,ConcurrentHashMap 底层实现原理与线程安全问题(建议熟悉 jdk 源码,才能从容应...

weixin_33912246的博客 440

AD/Protel老手才知道的PCB过孔查看技巧:3分钟分清通孔、盲孔和埋孔

本文为PCB设计工程师提供了在Altium Designer/Protel中快速鉴别通孔、盲孔和埋孔的实用技巧。通过层叠管理器、高级筛选工具和实战五步法,帮助用户在3分钟内精准识别过孔类型,提升设计效率和电路性能。特别适合处理高密度HDI板卡中的复杂过孔布局。

weixin_29164497的博客 563

《2026全新 | Java 100 天进阶之路:从零基础到上岗就业,108篇完整学习地图》

摘要:不背八股文,不堆概念。44篇基础 + 64篇进阶(共108篇),100天助你达到Java就业水平,从容面对技术面试。 👉 零基础入门 / 校招社招突击 / 1-3年Java后端提升 / 想系统复盘全栈知识的开发者。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 9583

用STM32的SPI接口读取MT6835磁编码器,手把手教你避开数据读取的坑

本文详细介绍了如何使用STM32的SPI接口读取MT6835磁编码器,并提供了21个实战细节与避坑指南。从硬件连接、SPI配置到数据解析和实时调试,全面解析了读取位置信息过程中的常见问题及解决方案,帮助工程师在工业控制、伺服电机等场景中高效应用AMR技术。

weixin_30729609的博客 1436

Mac上快速部署DeepSeek模型:Ollama终端操作全指南

本文详细介绍了在Mac上使用Ollama终端快速部署DeepSeek模型的完整指南。从硬件要求、Ollama安装、模型下载运行,到高级配置、可视化界面及常见问题解决,提供了全流程操作步骤与优化技巧,帮助开发者高效搭建本地AI助手,实现稳定、私密的离线使用体验。

weixin_29251567的博客 546

《Java 100 天进阶之路》第44.2篇:Java泛型与NIO易混淆概念对比(2026版)

基础篇外挂第四弹!本文汇总 10 组泛型与 NIO 高频易混淆概念:泛型类 vs 泛型方法、T vs ?、? extends T vs ? super T(PECS 原则)、类型擦除 vs Signature 属性、BIO vs NIO vs AIO、阻塞 vs 非阻塞、同步 vs 异步、GET vs POST、直接缓冲区 vs 堆缓冲区。每组配一句话总结 + 详细对比表 + 代码示例,面试前直接背诵!附10组速查PDF,评论区自取。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 238

4D毫米波雷达与激光雷达融合评测:3种主流融合框架在极端天气下的性能对比

本文深度评测了4D毫米波雷达与激光雷达在极端天气下的三大融合框架性能,包括前融合、特征级融合和后融合。通过实测数据对比,揭示了多传感器融合在暴雨、浓雾等恶劣环境中的显著优势,为自动驾驶感知系统提供了关键的技术参考和工程实践指南。

weixin_28677005的博客 326

《Java 100 天进阶之路》第37篇:Java内部类及其作用

本文系统讲解Java内部类的核心知识点,包括成员内部类、静态内部类、局部内部类和匿名内部类的定义、访问规则及典型应用场景。通过迭代器设计实例展示内部类的封装优势,并提供四种内部类的代码示例。特别指出常见误区(如内存泄漏风险)和面试高频考点(如私有成员访问原理)。最后给出链表实现、匿名比较器等练习题,帮助读者掌握内部类的实际应用。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 673

从 Non-Unicode 到 Unicode:ABAP 程序切换的坑、原理与工程化落地指南

摘要 老SAP系统中ABAP程序员常假设1字符=1字节,导致大量代码依赖单字节处理逻辑。Unicode系统的引入彻底改变了字符长度、偏移量等底层认知,强制要求程序遵循Unicode规则。关键问题包括:字符/字节语义混淆、结构体访问风险、以及ABAP语言版本的门槛限制。迁移时需要重点关注字符串处理、二进制协议解析等场景,利用UCCHECK、RSUNISCAN_FINAL等工具扫描风险,并通过持续集成机制确保代码质量。建议在Non-Unicode阶段就启用unicode_check参数模拟严格模式,分批次修复问

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3428

为YOLOv11引入自适应特征融合模块(ASFF)

本文探讨了在YOLOv11中引入ASFF(自适应空间特征融合)模块以解决多尺度目标检测性能不均衡的问题。作者分析了传统FPN固定融合策略的缺陷,详细介绍了ASFF模块的实现原理,包括动态权重生成网络设计和特征融合机制。通过将ASFF集成到YOLOv11颈部网络,实现了特征在双向流动时的自适应融合,在复杂场景下mAP提升1.2%而推理时间仅增加3-5ms。文章还分享了训练调参技巧和部署注意事项,指出ASFF特别适合交通监控等目标尺度变化大的场景,但强调需根据实际需求平衡模型复杂度与性能。最后提供了工程实践建议

as1225120794的博客 318

《Java 100 天进阶之路》第35篇:Java异常处理最佳实践

本文总结了Java异常处理的最佳实践,包括核心原则、异常分类、资源管理、日志记录等关键知识点。重点强调:只捕获能处理的异常,避免空catch;区分检查型异常和运行时异常的使用场景;推荐使用try-with-resources自动关闭资源;正确记录异常日志并保留完整堆栈信息。文章通过代码示例演示了异常包装、参数校验等常见场景,并提供了常见错误对照表。适合Java开发者系统学习异常处理规范,提升代码健壮性。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 632

基于STM32L4XX、HAL库的MMA8452QR1姿态传感器驱动程序设计

/ HAL库需要左移1位。#define MMA8452Q_I2C_ADDRESS 0x1D // SA0=1时的地址。* @param range: 量程(MMA8452Q_RANGE_2G/4G/8G)* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。

zhusl6688的博客 756

java-nio网络编程

nio编程1.java nio知识体系概述2.Channel2.1 FileChannel 介绍和示例2.2 Socket 通道2.3DatagramChannel2.4 Scatter和Gather3.Buffer3.1 Buffer 的基本用法3.2 Buffer 的 capacity、position 和 limit3.3 Buffer 几个常用方法3.4 缓冲区操作4.Selector4.1 Selector 和 Channel 关系4.2 可选择通道(SelectableChannel)4.3 C

客官不爱喝酒的博客 553

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JavaSE学习总结第22天_IO流4

- 22.01 数据输入输出流的概述和讲解 操作基本数据类型 public class DataInputStreamextends FilterInputStream implements DataInput 数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。 public clas...

diaoji9561的博客 240

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

44篇通关!Java基础篇终极总结:一张图、三张表,把全部知识点装进脑子(2026版)

Java基础篇44篇终极总结!一张学习路线图 + 三张速查表 + 面试题 + 避坑清单,帮你把零散知识串成体系。附PDF福利,进阶篇预告。收藏本文,面试前复习效率翻倍。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 704

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WebMagic非阻塞IO:NIO改造与性能提升分析

在大数据时代,网络爬虫(Web Crawler)作为数据采集的核心工具,其性能直接影响数据获取的效率。传统基于阻塞I/O(BIO)模型的爬虫框架在高并发场景下往往面临严重的性能瓶颈,如线程资源耗尽、响应延迟增加等问题。WebMagic作为一款基于Java的可扩展网络爬虫框架,其默认的I/O模型同样受到这些限制。 本文将深入探讨如何通过非阻塞I/O(NIO)技术对WebMagic进行改造,分析NI...

gitblog_00095的博客 492

Java NIO复制文件功能

1. package com.ghb.crp.file; 2. 3. import java.io.BufferedInputStream; 4. import java.io.BufferedOutputStream; 5. import java.io.File; 6. import java.io.FileInputStream; 7. imp

^_^TaeYang-Jade^_^ 607

java nio 读取_Java NIO 读取文件、写入文件、读取写入混合

1 packagecom.nio;23 import java.io.*;4 importjava.nio.ByteBuffer;5 importjava.nio.channels.FileChannel;6 importjava.nio.charset.Charset;78 public classTestJavaNio {910 public static String pathnam...

weixin_42389043的博客 723

《Java 100 天进阶之路》第44篇:jd-gui反编译class文件:中文乱码破解与反编译实战指南(2026版)

摘要:一文攻克反编译乱码痛点!从乐谱与手稿类比切入,讲透字节码→源码还原本质。提供 Windows/Mac/Linux 多系统 jd-gui 乱码解决方案,对比 jd-gui、CFR、IDEA FernFlower 等主流工具选型,附 CFR 批量反编译实战命令。覆盖反编译原理、工具对比、避坑清单、面试高频题,配套完整 Demo 与课后练习。基础篇收官,为进阶篇集合源码阅读铺路。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 497

《Java 100 天进阶之路》第44.3篇:JVM底层与字节码核心考点速查(2026版)

摘要:基础篇外挂第三弹!本文汇总 10 组 JVM 与字节码核心考点速查:JVM 内存结构(JDK 8+ 堆+栈+元空间)、堆 vs 栈、类加载生命周期(加载→验证→准备→解析→初始化)、双亲委派模型、GC 算法对比(复制/标记-清除/标记-整理)、JIT 编译器、字节码指令速查(javap -c 常用指令)、类加载器层次、finalize() 已弃用 → 用 try-with-resources、常见 JVM 参数。每组配一句话总结 + 结构图/表格,面试前直接速查!附10组速查PDF,评论区自取。

折哥|智能物流与Java实战,副高数据库工程师。深耕出版社物流WMS/OMS(线体/立库/VGA),也分享Java进阶与OMS电商对接。Oracle→PG实战派。相信沉淀可迁移能力,分享通用技术,不藏不虚。 319

Java NIO2:缓冲区

什么是缓冲区       一个缓冲区对象是固定数量的数据的容器,其作用是一个存储器,或者分段运输区,在这里数据可被存储并在之后用于检索。缓冲区像前篇文章讨论的那样被写满和释放,对于每个非布尔原始数据类型都有一个缓冲区类,尽管缓冲区作用于它们存储的原始数据类型,但缓冲区十分倾向于处理字节,非字节缓冲区可以再后台执行从字节或到字节的转换,这取决于缓冲区是如何创建的。          缓冲区的工作...

laomumu1992的博客 167

BAT 校招面试Java技术100问题总结

BAT 校招面试Java技术100问题总结 题目太多,所以只做问题总结,不做答案 阿里校招 1.java中所有类的父类是什么?他都有什么方法? 2.java中IO包下面的inputstream运用了什么设计模式?请简述你知道的设计模式? 3.ArrayList跟LinkedList的区别详细说出? 4.session和cookie的区别? 5.说一下快速排

huangshulang1234的博客 661

(阿里技术专家分享)2020年最全阿里面试题合集100+道+答案

点关注,不迷路;持续更新Java相关技术及资讯!!! 整理不易,欢迎点赞+关注哦 前言: 能进入阿里工作,是很多开发者们的目标与梦想,为帮助开发者们提升面试技能、高效通关一线互联网公司的面试,提炼总结了这份面试真题,一次整体放出送给大家。 看看自己能答对多少,如果能回答70%的题目,就大胆去阿里以及各互联网公司试试身手吧。本篇建议大家收藏、备用~ 【阿里、天猫、蚂蚁面试题目】 涵盖:开源、Java集合、JVM、NIO、Dubbo、秒杀系统、高并发、分布式、锁、redis、MySQL、Linux、ha.

豆汁 2804

以面向对象的思维和软件架构完成一道编程题目(Java)--原作者:小康小白--重写

今天刚好没事,看了下CSDN,看到有这个题,一时兴起就做了一下 原文链接:https://blog.csdn.net/weixin_45791445/article/details/108890171 作者是:小康小白 开始看的时候感觉很简单,半天就可以写完了,写着写着突然想尝试一下NIO来代替普通IO流,不太熟悉缓冲区结构,查了点资料,加调错,结果就花了一天时间。。 当然,我知道NIO只是在读大文件时候会用到,在读小文件的时候,效率还比不上普通IO流,不过既然是练习,尝试一下新的API也是一种提升 如果是

紫宇寰的Java小屋 586

面试题BIO和NIO数量问题

一、问题 BIO 和 NIO 作为 Server 端,当建立了 10 个连接时,分别产生多少个线程? 答案: 因为传统的 IO 也就是 BIO 是同步线程堵塞的,所以每个连接都要分配一个专用线程来处理请求,这样 10 个连接就会创建 10 个线程去处理。而 NIO 是一种同步非阻塞的 I/O 模型,它的核心技术是多路复用,可以使用一个链接上的不同通道来处理不同的请求,所以即使有 10 个连接,...

FurtherSkyQ的博客 416
上一篇: Java 23 种设计模式:从踩坑到精通 | 单例模式 —— 你写的真的安全吗?(12种写法全揭秘)
下一篇: 《Java 100 天进阶之路》第37篇:Java内部类及其作用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值