java 1.4起,jdk支持了NIO(NEW IO),因NIO(os nonblocking)的非阻塞式工作方式,让应用服务器可以极大的优化线程模型,相比传统的阻塞式IO线程和链路一对一的模式,NIO只需少量的线程即可处理所有的链路,这对广大的java开发者来说是一大福音,基于NIO能开发出更高效的网络应用。
然而使用JDK原生的api开发NIO,编程模型是非常复杂的,开发者需要理解Selector、Channel、ByteBuffer三大组件,此外JDK原生NIO实现上还存在一些稳定性问题。netty把三大组件交互代码封装在框架内部有效的简化了编程模型让使用者能够更高效的开发出NIO网络应用,保障了系统的稳定性。
但是伴随新的问题到来,对于开发者,框架是易于使用的,屏蔽了底层细节,换来的是对原理的深入理解不够,对性能调优和理论的淡化,在很多优秀的线上产品dubbo、spark、zookeeper、elasticSearch等等,使用了netty作为底层通信IO框架支持后,对于netty的原理,底层原理的关注越发急迫,这在面试环节尤为突出。
然而很多Netty相关的知识点与工作中的技巧,一篇文章是很难说完整的。这次小编针对Netty技术知识难点特地分享一份PDF文档《Netty源码剖析及实战文档》,里面内容涉及Netty的启动和停止、Netty 的内存、Netty 的并发多线程、Netty 的性能、Netty 的可靠性、Netty 的安全等等
本文档共分为18部分,为了不影响阅读,在这以截图形式展示目录与部分内容,整理收集不易有需要的朋友麻烦帮忙转发后扫描小编的二维码即可!
第一部分及第二部分
主要内容包括:Netty服务端意外退出问题、Nty优雅退出机制、Netty连接池资源泄漏问题、Netty客户端创建机制
第三部分及第四部分
主要内容包括:Netty内存池泄漏问题、Netty内存池工作机制、HTTP协议栈ByteBuf使用问题、Netty ByteBuf实现机制
第五部分和第六部分
主要内容包括:Netty发送队列积压案例、Netty消息发送工作机制、高并发压测性能波动问题、Netty消息接入内存申请机制
第七部分和第八部分
主要内容包括:Netty ChannelHandler并发安全问题、Netty ChannelHandler工作机制、车联网服务端接收不到车载终端消息问题NioEventL oop线程I作机制
第九部分到第二十部分
主要内容包括:
- Netty 3.X版本升级案例
- Netty并发失效导致性能下降案例
- loT百万长连接性能调优案例
- 静态检查修改不当引起性能下降案例
- Netty性能统计误区案例
- gRPC的Netty HTTP/2实践案例
- Netty事件触发策略使用不当案例
- Netty流量整形应用案例
- Netty SSL应用案例
- Netty HTTPS服务端高并发宕机案例
- MQTT服务接入超时案例
- Netty实践总结
大厂面试常问的Netty面试解析
整理一份Netty面试题清单,这些面试题经常出现在互联网网络编程面试中。从基础到高级,如果你都能回答出来,说明你非常熟练,甚至即将能步入精通Netty了。为了不影响阅读,在这以截图形式展示目录与部分内容,整理收集不易有需要的朋友麻烦帮忙转发后扫描小编的二维码即可!
基础
- TCP、UDP的区别?
- TCP协议如何保证可靠传输?
- TCP的握手、挥手机制?
- TCP的粘包/拆包原因及其解决方法是什么?
- Netty的粘包/拆包是怎么处理的,有哪些实现?
- 同步与异步、阻塞与非阻塞的区别?
- 说说网络IO模型?
- BIO、NIO、AIO分别是什么?
- select、poll、epoll的机制及其区别?
- 说说你对Netty的了解?
- Netty跟Java NIO有什么不同,为什么不直接使用JDK NIO类库?
- Netty组件有哪些,分别有什么关联?
- 说说Netty的执行流程?
高级
- Netty高性能体现在哪些方面?
- Netty的线程模型是怎么样的?
- Netty的零拷贝提体现在哪里,与操作系统上的有什么区别?
- Netty的内存池是怎么实现的?
- Netty的对象池是怎么实现的?
实战
- 在实际项目中,你们是怎么使用Netty的?
- 使用过Netty遇到过什么问题?
如何学习Netty
学习Netty的内部原理、了 解它到底怎么工作起来的,却是一个比较漫长的过程,因为它不仅要求对Java编程的高阶知识有掌握,还要懂网络知识。同时,Netty包含了各种算法、优化策略在其中,这也是Netty学习的难点之一。