Java面试必考点--第07讲(下):必会框架 - RPC与ORM

本文详细介绍了Netty作为高性能的异步事件驱动NIO框架的特点,包括其内存零copy技术、线程模型和ChannelPipeline。接着,讨论了RPC的交互流程和主流框架如Dubbo、Motan和gRPC的特点。此外,还分析了ORM框架MyBatis的优缺点、缓存机制和主要对象。最后提到了Spring、SpringBoot等相关知识点以及面试考察点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

详解 Netty

下面我们来看 Netty 相关的知识点,如下图所示。

特点

如上图左侧所示,首先了解 Netty 的特点。

  • Netty 是一个高性能的异步事件驱动的 NIO 框架,它对消息的处理采用串行无锁化设计,提供了对 TCP、UDP 和文件传输的支持。

  • Netty 内置了多种 encoder 和 decoder 实现来解决 TCP 粘包问题。

  • Netty 处理消息时使用了池化的缓冲池 ByteBufs,提高性能。

  • 结合内存零 copy 机制,减少了对象的创建,降低了 GC 的压力。

主要概念

需要掌握 Netty 中的一些对象概念,比如将 Socket 封装成 Channel 对象,在 Channel 读写消息时,使用 ChannelHandler 对消息进行处理,一组 Handler 顺序链接组成 ChannelPipeline 的责任链模式。一个 Channel 产生的所有事件交给一个单线程的 EventLoop 事件处理器来进行串行处理。而 Bootstrap 对象的主要作用是配置整个 Netty 程序串联起各个组件,是一个 Netty 应用的起点。

零内存复制

要了解 Netty 的内存零 copy 技术。包括使用堆外内存来避免在 Socket 读写时缓冲数据在堆外与堆内进行频繁复制;使用 CompositeByteBuf 来减少多个小的 buffer 合并时产生的内存复制;使用 FileRegion 实现文件传输的零拷贝等。

粘包与半包

要了解 TCP 协议下粘包与半包等产生原因,知道 Netty 提供的多个 decoder 是用什么方式解决这个问题的。例如 FixedLengthFrameDecoder 用来解决固定大小数据包的粘包问题、LineBasedFrameDecoder 适合对文本进行按行分包、DelimiterBasedFrameDecoder 适合按特殊字符作为分包标记的场景、LengthFieldBasedFrameDecoder 可以支持复杂的自定义协议分包等等。

Netty3 和 Netty4

简单了解一下 Netty3 和 Netty4 的区别,其中主要的就是两个版本的线程处理模型完全不同, Netty4 处理得更加优雅。其他的以 Netty4 的特点为主即可。

线程模型

Netty 线程模型采用“服务端监听线程”和“IO 线程”分离的方式,如下图,左侧 Boss 线程组负责监听事件,创建 Socket 并绑定到 Worker 线程组。

Worker 线程组负责 IO 处理。线程组由 EventLoopGroup 实现,其中包含了多个 EventLoop 事件处理器,每个 EventLoop 包含一个处理线程。通常情况下在 NIO 非阻塞模式下,Netty 为每个 Channel 分配一个 EventLoop,并且它

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值