Netty面试题

1、Netty 的特点是什么?
高并发:Netty 是一款基于 NIO(Nonblocking IO,非阻塞IO)开发的网络通信框架。
传输快:Netty 的传输依赖于零拷贝特性,尽量减少不必要的内存拷贝,实现了更高效率的传输。
封装好:Netty 封装了 NIO 操作的很多细节,提供了易于使用调用接口。可以通过 ChannelHandler 对通信框架进行灵活地扩展。

2、什么是 Netty 的零拷贝?
Netty 的接收和发送 ByteBuffer 采用 DIRECT BUFFERS,使用堆外直接内存进行 Socket 读写,不需要进行字节缓冲区的二次拷贝。
Netty 的文件传输采用了 transferTo 方法,它可以直接将文件缓冲区的数据发送到目标 Channel,避免了传统通过循环 write 方式导致的内存拷贝问题。

3、Netty 的应用场景有哪些?

典型的应用有:阿里分布式服务框架 Dubbo,默认使用 Netty 作为基础通信组件,还有 RocketMQ 也是使用 Netty 作为通讯的基础。

4、Netty 高性能表现在哪些方面?
O 线程模型:同步非阻塞,用最少的资源做更多的事。

内存零拷贝:尽量减少不必要的内存拷贝,实现了更高效率的传输。

内存池设计:申请的内存可以重用,主要指直接内存。内部实现是用一颗二叉查找树管理内存分配情况。

串形化处理读写:避免使用锁带来的性能开销。

高性能序列化协议:支持 protobuf 等高性能序列化协议。

5、Netty 中有那种重要组件?
Channel:Netty 网络操作抽象类,它除了包括基本的 I/O 操作,如 bind、connect、read、write 等。

EventLoop:主要是配合 Channel 处理 I/O 操作,用来处理连接的生命周期中所发生的事情。
ChannelFuture:Netty 框架中所有的 I/O 操作都为异步的,因此我们需要 ChannelFuture 的 addListener()注册一个 ChannelFutureListener 监听事件,当操作执行成功或者失败时,监听就会自动触发返回结果。

ChannelHandler:充当了所有处理入站和出站数据的逻辑容器。ChannelHandler 主要用来处理各种事件,这里的事件很广泛,比如可以是连接、数据接收、异常、数据转换等
ChannelPipeline:为 ChannelHandler 链提供了容器,当 channel 创建时,就会被自动分配到它专属的 ChannelPipeline,这个关联是永久性的。

6、Netty 发送消息有几种方式?
Netty 有两种发送消息的方式:

直接写入 Channel 中,消息从 ChannelPipeline 当中尾部开始移动;

写入和 ChannelHandler 绑定的 ChannelHandlerContext 中,消息从 ChannelPipeline 中的下一个 ChannelHandler 中移动。

7、默认情况 Netty 起多少线程?何时启动?
Netty 默认是 CPU 处理器数的两倍,bind 完之后启动。

8、.Netty 支持哪些心跳类型设置?
readerIdleTime:为读超时时间(即测试端一定时间内未接受到被测试端消息)。

writerIdleTime:为写超时时间(即测试端一定时间内向被测试端发送消息)。

allIdleTime:所有类型的超时时间。

你可能感兴趣的:(netty)