最近经常会再面试中碰到Netty相关的问题。
全文采用大家喜欢的与面试官对话的形式展开。如果大家觉得总结的不错的话,不妨点一个赞鼓励一下!这是我继续坚持很重要的动力来源。
概览:
Netty是什么?为什么要用Netty?Netty应用场景了解么?Netty核心组件有哪些?分别有什么作用?EventloopGroup了解么?和EventLoop啥关系?Bootstrap和ServerBootstrap了解么?NioEventLoopGroup默认的构造函数会起多少线程?Netty线程模型了解么?Netty服务端和客户端的启动过程了解么?Netty长连接、心跳机制了解么?Netty的零拷贝了解么?Netty是什么?
面试官:介绍一下自己对Netty的认识吧!小伙子。
我:好的!那我就简单用3点来概括一下Netty吧!
Netty是一个基于NIO的client-server(客户端服务器)框架,使用它可以快速简单地开发网络应用程序。它极大地简化并优化了TCP和UDP套接字服务器等网络编程,并且性能以及安全性等很多方面甚至都要更好。支持多种协议如FTP,SMTP,HTTP以及各种二进制和基于文本的传统协议。用官方的总结就是:Netty成功地找到了一种在不妥协可维护性和性能的情况下实现易于开发,性能,稳定性和灵活性的方法。
除了上面介绍的之外,很多开源项目比如我们常用的Dubbo、RocketMQ、Elasticsearch、gRPC等等都用到了Netty。
网络编程我愿意称Netty为王。
为什么要用Netty?
面试官:为什么要用Netty呢?能不能说一下自己的看法。
我:因为Netty具有下面这些优点,并且相比于直接使用JDK自带的NIO相关的API来说更加易用。
统一的API,支持多种传输类型,阻塞和非阻塞的。简单而强大的线程模型。自带编解码器解决TCP粘包/拆包问题。自带各种协议栈。真正的无连接数据包套接字支持。比直接使用Java核心API有更高的吞吐量、更低的延迟、更低的资源消耗和更少的内存复制。安全性不错,有完整的SSL/TLS以及StartTLS支持。社区活跃成熟稳定,经历了大型项目的使用和考验,而且很多开源项目都使用到了Netty,比如我们经常接触的Dubbo、RocketMQ等等。......Netty应用场景了解么?
面试官:能不能通俗地说一下使用Netty可以做什么事情?
我:凭借自己的了解,简单说一下吧!理论上来说,NIO可以做的事情,使用Netty都可以做并且更好。Netty主要用来做网络通信:
作为RPC框架的网络通信工具:我们在分布式系统中,不同服务节点之间经常需要相互调用,这个时候就需要RPC框架了。不同服务节点之间的通信是如何做的呢?可以使用Netty来做。比如我调用另外一个节点的方法的话,至少是要让对方知道我调用的是哪个类中的哪个方法以及相关参数吧!实现一个自己的HTTP服务器:通过Netty我们可以自己实现一个简单的HTTP服务器,这个大家应该不陌生。说到HTTP服务器的话,作为Java后端开发,我们一般使用Tomcat比较多。一个最基本的HTTP服务器可要以处理常见的HTTPMethod的请求,比如POST请求、GET请求等等。实现一个即时通讯系统:使用Netty我们可以实现一个可以聊天类似