Netty面试题
# 1、Netty 是什么?
Netty 是一个基于 NIO的 client-server(客户端服务器)框架,使用它可以快速简单地开发网络应用程序。
它极大地简化并优化了 TCP 和 UDP 套接字服务器等网络编程,并且性能以及安全性等很多方面甚至都要更好。
支持多种协议如 FTP,SMTP,HTTP 以及各种二进制和基于文本的传统协议。
Netty 成功地找到了一种在不妥协可维护性和性能的情况下实现易于开发,性能,稳定性和灵活性的方法。
除了上面介绍的之外,很多开源项目比如我们常用的 Dubbo、RocketMQ、Elasticsearch、gRPC 等等都用到了 Netty。
# 2、为什么要使用Netty ?
面试官其实是想问你Netty的特点,以及有没有使用过Netty
上面说到很多开源项目都使用到了 Netty,比如Dubbo、RocketMQ 等等,那它的优势还是有很多,证明也是很稳定的。
Netty 的特点有以下:
高并发
基于 NIO(Nonblocking IO,非阻塞IO)开发的网络通信框架,简单而强大的线程模型。自带编解码器解决 TCP 粘包/拆包问题。自带各种协议栈。真正的无连接数据包套接字支持。
比直接使用 Java 核心 API 有更高的吞吐量、更低的延迟、更低的资源消耗和更少的内存复制。
安全
有完整的 SSL/TLS 以及 StartTLS 支持。社区活跃成熟稳定,经历了大型项目的使用和考验,而且很多开源项目都使用到了 Netty。
稳定、封装好
统一的 API,支持多种传输类型,阻塞和非阻塞,提供了易于使用调用接口。(因为Netty 封装了 NIO 操作的很多细节,不用像传统的JavaIO那样复杂)
# 3、Netty 的应用场景有哪些?
这问题和上面的有点类似,问了场景就更深入了,想问你项目中有没有用过Netty,如果没有用过,它可以用在哪些场景。
Netty主要还是围绕 网络通信 应用展开。
作为 RPC 框架的网络通信工具:
我们在分布式系统中,不同服务节点之间经常需要相互调用,这个时候就需要 RPC 框架了。不同服务节点之间的通信是如何做的呢?可以使用 Netty 来做。比如我调用另外一个节点的方法的话,至少是要让对方知道我调用的是哪个类中的哪个方法以及相关参数吧!
HTTP 服务器:
通过 Netty 我们可以自己实现一个简单的 HTTP 服务器,这个大家应该不陌生。说到 HTTP 服务器的话,作为 Java 后端开发,我们一般使用 Tomcat 比较多。一个最基本的 HTTP 服务器可要以处理常见的 HTTP Method 的请求,比如 POST 请求、GET 请求等等。
实现一个即时通讯系统:
比如说即时通讯、聊天系统、消息推送系统。