当前位置: 首页 > news >正文

【Netty基础】Java原生网络编程

一、网络编程核心概念

  1. Socket本质
    • 应用层与TCP/IP协议族通信的中间抽象层,提供网络通信接口。
  2. 连接类型
    类型特点适用场景
    短连接请求-响应后立即断开HTTP/1.0、简单查询
    长连接保持连接复用,减少握手开销数据库连接池、RPC调用

二、Linux I/O模型详解(面试重点)

模型特点关键机制性能对比
阻塞I/O进程阻塞直到数据拷贝完成read()/write()简单,但并发差
非阻塞I/O进程轮询检查数据就绪状态(多次系统调用)fcntl(O_NONBLOCK)CPU占用高
I/O多路复用单线程监听多个Socket事件(核心模型)select/poll/epoll高并发首选
信号驱动I/O内核数据就绪时发送SIGIO信号,进程异步处理sigaction实时性要求高场景
异步I/O (AIO)数据从内核到用户空间拷贝完成后才通知进程io_submit真异步,性能最优

关键区别

  • 同步 vs 异步:数据就绪后是否需进程主动拷贝(同步需主动read,异步由内核完成)。
  • 阻塞 vs 非阻塞:等待数据就绪时进程是否挂起。

三、I/O多路复用技术对比(必考)

机制底层结构最大连接数效率触发方式
select数组1024O(n)线性扫描水平触发(LT)
poll链表无上限O(n)线性扫描水平触发(LT)
epoll红黑树+链表无上限O(1)事件通知支持LT/边缘触发(ET)

边缘触发(ET):仅状态变化时通知一次,需一次性处理完数据(减少系统调用)。


四、Java网络编程模型

  1. BIO (Blocking I/O)

    • 特点:1请求 = 1线程,线程阻塞等待I/O完成。
    • 缺陷:高并发时线程资源耗尽(C10K问题)。
    • 应用:早期RPC框架(如Dubbo默认使用Netty NIO替代)。
  2. NIO (Non-blocking I/O)

    • 核心组件
      • Channel:双向数据传输通道(ServerSocketChannel/SocketChannel)。
      • Buffer:数据容器(ByteBuffer),含position/limit/capacity属性。
      • Selector:监听多个Channel事件(SelectionKey.OP_ACCEPT/OP_READ)。
    • 模式:Reactor模式(单线程处理多连接)。

五、RPC框架原理与实现

  1. RPC核心价值

    • 解耦服务:跨进程调用像本地方法(订单服务 → 库存服务)。
    • 性能对比HTTP:TCP二进制传输效率高于HTTP文本协议。
  2. RPC实现关键问题

    问题解决方案技术工具
    代理问题动态代理隐藏远程调用细节JDK Proxy/CGLib
    序列化对象↔二进制转换(高效、跨语言)Protobuf/Hessian/JSON
    通信传输网络数据传输协议TCP/HTTP2/Netty
    服务实例化反射调用目标方法Java Reflection
  3. RPC调用流程

    客户端
    动态代理
    序列化
    网络传输
    服务端
    反序列化
    反射调用
    返回结果

六、主流RPC框架对比

框架协议特点适用场景
DubboTCP高性能、服务治理完善微服务架构
gRPCHTTP/2多语言支持、流式处理跨语言系统
Spring CloudHTTP生态丰富、与Spring集成度高云原生应用

Dubbo核心组件

  • Provider(服务提供者)、Consumer(消费者)、Registry(注册中心)、Monitor(监控)。

七、面试重点总结

  1. I/O模型
    • 阻塞 vs 非阻塞 vs 异步的本质区别。
    • epoll 为何高效?(红黑树管理fd、事件回调)。
  2. RPC核心问题
    • 动态代理作用、序列化选型(Protobuf为何高效)。
  3. BIO/NIO对比
    • BIO的C10K问题,NIO的Reactor模式如何解决。
  4. Dubbo vs Spring Cloud
    • TCP长连接 vs HTTP短连接的性能差异。

文档内容覆盖网络编程核心知识体系,掌握后可应对90%的Java中高级面试考点。

http://www.lryc.cn/news/582339.html

相关文章:

  • 熔断限流降级
  • [附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的高校实验室资源综合管理系统,推荐!
  • Spring @Conditional注解深度解析:从原理到最佳实践
  • 10.6 ChatGLM3私有数据微调实战:24小时打造高精度模型,显存直降60%
  • 【机器学习笔记 Ⅲ】4 特征选择
  • 【ARM AMBA AXI 入门 21 -- AXI partial 访问和 narrow 访问的区别】
  • 田间杂草分割实例
  • Qt的第一个程序(2)
  • JVM基础01(从入门到八股-黑马篇)
  • 微信小程序81~90
  • C++笔记之和的区别
  • 力扣 hot100 Day37
  • 回溯题解——子集【LeetCode】二进制枚举法
  • ubuntu18.04.1无法安装vscode(安装依赖无效)
  • qiankun 微前端框架子应用间通信方法详解
  • xbox one controller DSLogic 逻辑分析仪截包
  • 1.1_5_2 计算机网络的性能指标(下)
  • OpenWebUI(3)源码学习-后端models数据模型模块
  • LLVM,polly,最新测试
  • ServerAgent资源监控和nmon监控
  • 【Linux操作系统】简学深悟启示录:Linux基本指令
  • 串行接口:CAN总线
  • 2025年全国青少年信息素养大赛图形化(Scratch)编程小学低年级组初赛样题答案+解析
  • 华为OD机试 2025B卷 - 最长的指定瑕疵度的元音子串 (C++PythonJAVAJSC语言)
  • 互补功率放大器Multisim电路仿真——硬件工程师笔记
  • web渗透之指纹识别1
  • 施密特触发器Multisim电路仿真——硬件工程师笔记
  • 2048-控制台版本
  • 设计模式文章
  • 汽车信息安全 -- SHE密钥更新小细节