高级 Java 程序员都在学什么?
我曾在某乎的一条回答下看到这样一条评论:确实,Netty 大家肯定都会,不会的绝对是初级或者XX上面的说有失偏颇,学习技术没必要上升到人身攻击,更重要的是如何学会技术,面...
确实,Netty 大家肯定都会,不会的绝对是初级或者XX
很多大厂在招聘时要求会用 Netty
写这篇文章之前,我试着在各大招聘网站检索 Netty,以下岗位都要求了会使用或熟悉 Netty:
-
阿里巴巴 - Java 工程师 (服务端),20k-40k / 北京 / 经验 3-5 年 / 本科及以上 / 全职
-
小米 - 高级 Java 开发工程师,13k-26k / 武汉 / 经验 3-5 年 / 本科及以上 / 全职
-
拼多多 - 资深 Java 研发工程师,30k-50k / 上海 / 经验 3-5 年 / 本科及以上 / 全职
当然还有美团、搜狗、平安科技、自如、携程、搜狐等等公司都在岗位要求中加入了熟练掌握或熟悉 Netty。
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/77f9597d084ecba6230e7a63cc8c0f58.png)
多款开源框架中应用 Netty
-
阿里分布式服务框架 Dubbo 的 RPC 框架使用 Dubbo 协议进行节点间通信,Dubbo 协议默认使用 Netty 作为基础通信组件,用于实现各进程节点之间的内部通信。
-
淘宝的消息中间件 RocketMQ 的消息生产者和消息消费者之间,采用 Netty 进行高性能、异步通信。
-
Hadoop 的高性能通信和序列化组件 Avro 的 RPC 框架,默认采用 Netty 进行跨节点通信,它的 Netty Service 基于 Netty 框架二次封装实现。
除了 Dubbo、RocketMQ、Hadoop,还有开源集群运算框架 Spark、分布式计算框架 Storm、构建 JVM 上的并发应用和分布式应用 Akka,都采用了 Netty 作为通信基础。
这里我可以很正确的说:Netty 基本是 Java 语言处理网络 IO 的首选框架,性能和稳定性都有保障,社区比较活跃,基于 Netty 进行二次定制服务成本小。
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/1d00b42e12d7dee761dc67eee8f7f380.png)
为什么这么多行业选择了 Netty?
举个简单例子:普通的服务器 100000 个连接需要 100000 个线程,服务器可能就直接卡住了,但对于 Netty 服务器,也许几个线程就够了,请求放线程池,服务器面对电商促销,应用推送服务,完全无压力。
从电商、游戏、大数据、企业软件再到通信行业,Netty 的各种特性都能够很好的支持和帮助业务快速发展,Netty 满足了过去用 Socket 进行网络编程时的几乎所有美好愿景。
设计:统一的 API,适用于不同的协议、基于灵活、可扩展的事件驱动模型、高度可定制的线程模型、可靠的无连接数据 Socket 支持(UDP)。
性能:更好的吞吐量、低延迟、省资源、减少不必要的内存拷贝
-
安全:完整的 SSL/TLS 和 STARTTLS 的支持
-
健壮性:不再因过快、过慢或超负载连接导致 OutOfMemoryError、不再有在高速网络环境下 NIO 读写频率不一致的问题
易用:完善的 JavaDoc,用户指南和样例,更有活跃的社区支持
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/20c5908d758edbf47f438a489ed80d16.png)
那么,我们应该怎么学 Netty
所以我们准备了一个新专栏《深入浅出学 Netty 》来帮助大家学习深入 Netty。
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/036341c8b1becc0e757cff25be77bca2.jpeg)
是的,开发网络应用程序是一个复杂的系统工程,稍有疏忽便容易造成错误。而直接基于 Java 提供的原生 API 编写一个健壮的,高性能的网络应用是一个很大的挑战。
Netty 的存在帮助我们解决了这个问题,虽然 Netty 简单易用容易上手,但是毕竟网络编程是复杂的,会存在各种的状况和可能性。在遇到一些问题时,仅仅只是掌握的程度是不足以对问题进行定位和排查。
通过对 Netty 的源码深入讲解,使得读者对 Netty 达到 “知其然更之所以然” 的程度。在遇到一些线上的问题时,具备了扎实理论功底的情况,可以有的放矢而不会显得盲目。
专栏内容
这个部分阐述网络 IO 模型的分类以及如何使用 Java 原生接口进行开发。让读者建立起对网络 IO 开发的感性印象。其后会详细讲解 NIO 的相关知识,NIO 是后续学习的整体基石。在了解 NIO 的基础上,对 Netty 进行模型,API,组件方面的介绍,并且编写第一个 Netty 应用程序。通过这个例子,读者可以掌握对 Netty 的基本使用,达到初步使用 Netty 进行开发的能力。
结合第一部分的理论知识,本章节使用 Netty 开发两个实际项目中可能会涉及到项目,分别是在线 IM 聊天和 HTTP 文件下载器。通过实战项目,讲解在实战中,对 Netty 的使用。并且通过实战,还会涉及诸如协议设计、数据存储、并发安全考量等等实战类知识。
经过入门和实战的学习,读者对使用 Netty 开发高质量的项目已经没有问题。但是在遇到一些疑难杂症时,可能需要更多对 Netty 内部的了解;或者与项目深度结合时,希望能够了解到 Netty 的实现。进阶篇将从源码分析的角度入手,带领读者从源码的层级上分析整个 Netty 的实现。几个重点的组件,线程池,管道,启动器以及一些设计模式,线程模式等都会详细分析。
作者介绍
林斌,博思软件技术架构部技术经理,8 年研发经验。福建省省级标准《双离线场景二维码标准》撰写人,多年大型项目研发经验。关注团队效率,高并发等方面。
你将获得
-
对 Java 中几种 IO 实现模式的了解
-
掌握使用 Java NIO 开发的能力
-
掌握使用 Netty 开发项目的能力
-
深入理解和掌握 Netty 的设计精髓,诸如并发安全保证,设计原理,重点算法等
从源码的深度掌握 Netty 重点设计背后的代码细节和思路
内容参考:
通俗地讲,Netty 能做什么?
点击阅读原文,了解 Netty 专栏!
更多推荐
所有评论(0)