N

Netty 面试题

连载中

Netty 面试题:Reactor 线程模型、ByteBuf、零拷贝、编解码与常见内存泄漏排查。

5 篇文章 开始阅读

教程目录

1

Netty 的 Reactor 线程模型?

一、Reactor 模式 基于事件驱动,I/O 多路复用监听多个连接,事件就绪后分发给处理器。 二、Netty 三种模型 单线程 Reactor:一个线程处理所有连接的 accept 和 I/O,简单但不适合高并发。 多线程 Reactor:一个 Acceptor 线程接收连接,I/O 由线程池处理

2

Netty 的 ChannelPipeline 机制?

一、定义 每个 Channel 有一个 Pipeline,由多个 ChannelHandler 组成,形成责任链。入站和出站事件在 Pipeline 中传播。 二、入站和出站 InboundHandler:处理入站事件(读、连接建立等),从 head 向 tail 传播。 OutboundHandl

3

Netty 的 ByteBuf 设计?

一、与 ByteBuffer 对比 JDK ByteBuffer 只有一个 position,读写切换需 flip(),易出错。 ByteBuf 有 readerIndex 和 writerIndex 两个指针,读写分离,无需 flip。 二、核心方法 readXxx() / writeXxx():

4

Netty 如何解决粘包拆包?

一、问题 TCP 是字节流,没有消息边界,多个请求可能粘在一起(粘包),一个请求可能被拆分(拆包)。 二、解决方案 固定长度:FixedLengthFrameDecoder,每条消息固定长度。 特殊分隔符:DelimiterBasedFrameDecoder,按换行符等分隔。 长度字段:Length

5

Netty 如何实现心跳检测?

一、IdleStateHandler Netty 提供 IdleStateHandler 检测空闲状态。 ch.pipeline().addLast(new IdleStateHandler(5, 0, 0, TimeUnit.SECONDS)); 三个参数:读空闲时间、写空闲时间、所有空闲时间。