Netty面试题大全

Netty面试题大全


目录

文档索引

面试题汇总

Q:Netty是什么?为什么需要Netty?

Q:Netty为什么性能高?

Q:Netty有哪些组件?

Q:Netty如何解决半包读写问题?

Q:Netty如何解决断连重连问题?


文档索引


面试题汇总

Q:Netty是什么?为什么需要Netty?

A: Netty时异步事件驱动的网络应用程序框架

NIO使用麻烦,且客户端面临断连重连、网络闪断、半包读写、失败缓冲、网络拥塞和异常流的处理等等;Netty对JDK自带的NIO的API进行封装,使用方便,解决了上述问题

在分布式系统中,各个节点之间需要远程服务调用,Netty往往作为基础通信组件被这些RPC框架使用。比如Dubbo、RocketMQ、Seata、Hadoop、Avro

Q:Netty为什么性能高?

A: 

1、高效的Reactor线程模型

2、高性能序列化协议,支持protobuf等高性能序列化协议

3、使用零拷贝

4、无锁化的串行设计理念

5、灵活的TCP参数配置能力

6、使用内存池

Q:Netty有哪些组件?

A: 

Q:Netty如何解决半包读写问题?

A: Netty的拆包器大致如下:

1、固定长度的拆包器 FixedLengthFrameDecoder

每个应用层数据包都拆分成固定长度大小

2、行拆包器 LineBasedFrameDecoder

每个应用层数据包,都通过换行符作为分隔符,进行分割拆分

3、分隔符拆包器 DelimiterBasedFrameDecoder

每个应用层数据包,都通过自定义的分隔符,进行分割拆分

4、基于数据包长度的拆包器 LengthFieldBasedFrameDecoder

将应用层数据包的长度,作为接收端应用层数据包的拆分依据。按照应用层数据包的大小,拆包。拆包器需要求应用层协议中包含数据包的长度

Q:Netty如何解决断连重连问题?

A: Netty中提供了一个IdleStateHandle类用于心跳检测,用法如下:

ch.pipeline().addLast("ping", new IdleStateHandler(60, 20, 60 * 10, TimeUnit.SECONDS));

第一个参数 60 表示读操作空闲时间

第二个参数 20 表示写操作空闲时间

第三个参数 60 * 10 表示读写操作空闲时间

第四个参数 单元 秒

通过心跳检测机制,可以检测客户端与服务的长连接是否保持,当客户端发送的心跳包没有收到服务端的响应时,可以认为服务端已经出故障了,这个时候可以重新连接或者选择其他的可用的服务进行连接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值