Netty 核心专题

共 18 题
#

1. Netty 的主从 Reactor 线程模型,Boss/Worker EventLoopGroup 的分工与一个 Channel 绑定单一 EventLoop 的意义如何?

A Boss 处理读写
B Boss 接受连接,Worker 处理读写,Channel 绑定单一 EventLoop 获得无锁串行 ✓ 正确答案
C Channel 可被多个 EventLoop 并发处理
D 每个 Channel 需独立线程
#

2. Netty 如何解决 TCP 粘包/拆包?四种内置解码器(定长/分隔符/LengthFieldBasedFrameDecoder/行解码)的适用场景?

A 所有协议用同一解码器
B 粘包无需处理
C 定长转换用行解码
D 按协议格式选解码器,二进制带长度用 LengthFieldBasedFrameDecoder ✓ 正确答案
#

3. Netty 的 ChannelPipeline 与 ChannelHandler 责任链,入站/出站事件的传播顺序与 handler 共享(@Sharable)注意事项如何?

A 所有 handler 都可共享
B @Sharable 用于有状态 handler
C 入站从后向前
D 入站从前向后、出站从后向前传播,@Sharable 仅用于无状态 handler ✓ 正确答案
#

4. Netty 的 EventLoop 模型与 Reactor 模式的关系,N 个 EventLoop 如何绑定 Channel?

A Channel 绑定多个 EventLoop
B 每个 Channel 一个线程
C EventLoop 不处理事件
D EventLoop 是 Reactor 单线程,Channel 轮询绑定一个 EventLoop 串行处理 ✓ 正确答案
#

5. Netty 的 Future/Promise 与 JDK Future 的差异(addListener 回调、线程安全)

A Netty Future 只能阻塞获取
B Netty Future 支持 addListener 回调与可写 Promise,比 JDK Future 阻塞 get 更异步 ✓ 正确答案
C Promise 不可写
D 两者相同
#

6. Netty 的 EpollEventLoopGroup 在 JDK NIO Epoll 下的零拷贝 sendfile 路径?

A sendfile 无收益
B 零拷贝只用于内存
C 文件需拷贝到用户态
D FileRegion 走 sendfile 系统调用,文件数据从内核直接发送避免用户态拷贝 ✓ 正确答案
#

7. Netty Pipeline 的 ChannelHandler 上下文传播与 @Sharable 的陷阱?

A 非线程安全 handler 标注 @Sharable 会被多 Channel 并发访问产生竞争 ✓ 正确答案
B @Sharable 无风险
C 有状态 handler 可安全共享
D @Sharable 保证线程安全
#

8. Netty 的 ByteBuf 内存管理,池化(PooledByteBufAllocator)、引用计数与内存泄漏检测机制如何?

A 每次分配新缓冲
B 引用计数与释放无关
C 无需检测泄漏
D 池化复用、引用计数管理生命周期、LeakDetector 定位泄漏 ✓ 正确答案
#

9. Netty 的零拷贝体现在哪些层面(CompositeByteBuf/slice/FileRegion/堆外内存)?

A CompositeByteBuf 免拼接、slice 免切片、FileRegion 免用户态拷贝 ✓ 正确答案
B 零拷贝只是概念
C slice 会复制数据
D 堆外内存增加拷贝
#

10. Netty 心跳机制 IdleStateHandler 的三种空闲检测与断线重连的实现方案?

A 心跳无需超时
B 检测读/写/读写空闲,空闲发心跳、超时判定失效并重连 ✓ 正确答案
C 只检测读空闲
D 空闲不处理
#

11. Netty 的 ByteBuf 池化与引用计数,内存泄漏如何检测(LeakDetector)?

A 泄漏自动修复
B 记录分配栈,GC 时发现未 release 的 ByteBuf 并打印栈定位 ✓ 正确答案
C 检测无开销
D 泄漏不检测
#

12. Netty 的粘包拆包,LineBased/固定长度/分隔符/自定义协议解码器如何选择?

A 所有协议用 LineBased
B 定长协议用 LengthFieldBased
C 文本行用 LineBased,定长用 FixedLength,二进制长度用 LengthFieldBased ✓ 正确答案
D 无需区分协议
#

13. 在 Netty EventLoop 中执行阻塞/耗时操作的影响与正确 offload 方式

A 阻塞 EventLoop 影响同线程所有 Channel,耗时操作 offload 到线程池 ✓ 正确答案
B 阻塞操作可直接在 EventLoop 执行
C 耗时操作不影响 EventLoop
D 无需 offload
#

14. Netty 的 FastThreadLocal 相比 JDK ThreadLocal 的优化(数组索引替代哈希)

A 无优化
B 用全局 index 数组直接访问,替代 ThreadLocal 的哈希查找 ✓ 正确答案
C 仍用哈希
D 比 ThreadLocal 慢
#

15. Netty 的 writeAndFlush 写出流程与高低水位线(write buffer watermark)背压机制?

A 缓冲超高水位变不可写触发背压,低于低水位恢复可写 ✓ 正确答案
B 背压与内存无关
C 缓冲无限增长
D 水位线无背压作用
#

16. Netty 与虚拟线程在高并发网络编程中的对比与取舍?

A 虚拟线程吞吐更高
B Netty 编程简单
C 两者不可兼得
D Netty 事件驱动高吞吐但复杂,虚拟线程阻塞式简单适合 I/O 密集 ✓ 正确答案
#

17. Netty 的 ChannelPipeline,入站/出站事件与 Handler 顺序的执行机制如何?

A 入站从 head 向后、出站从 tail 向前,fireXxx 传播 ✓ 正确答案
B 入站从 tail 向前
C 顺序无关
D 出站从 head 向后
#

18. Netty 的优雅停机(shutdownGracefully)流程与未完成任务处理

A 只停 EventLoop
B 停止新连接、排空在途任务、关闭 Channel 与资源 ✓ 正确答案
C 立即关闭中断
D 不处理在途任务