一卷到底,大明哥带你横扫 Netty

上一个死磕 Java 专栏【死磕 NIO】(当然写的不是很好,争取今年将它重写一遍)是**【死磕 Netty】**的铺垫,对于我们 Java 程序员而言,我们在实际开发过程一般都不会直接使用 Java NIO 作为我们的网络编程框架,因为写出一套高质量的 Java NIO 程序并不是一件容易的事,除了 Java NIO 固有的复杂性和 bug 之外,作为 NIO 服务端,我们要处理的事情太多了,如网络闪断、客户端认证、消息编解码、半包读写,客户端一样也有很多复杂的事情要处理,所以如果我们对 Java NIO 没有足够了解,没有足够的网络编程经验的话,利用 Java NIO 来编写一个高性能的稳定网络编程框架并不是一件容易的事。 所以我们一般都不会直接使用 Java NIO ,当然有特殊需求除外。

Netty 作为目前互联网中间件领域使用最广泛最核心的网络通信框架,它使用简单,功能强大、高性能且稳定,而且经历过大规模的生产验证,质量能够得到保障。它被广泛使用,几乎所有互联网中间件或者大数据领域均离不开 Netty,比如知名的 Dubbo、RocketMQ,Spark、ES 等等。所以掌握 Netty 是作为一名初中级工程师迈向高级工程师最重要的技能之一。

为什么要学 Netty

可能有小伙伴说,在实际工作中我并没有用到 Netty,对网络编程涉及的内容也不多,都是些业务逻辑,那还有必要花精力来学习 Netty 吗?当然如果你止步于 CRUD boy ,不想进大厂,不追求高薪的话,确实是没有必要学习 Netty,连这篇文章你也可以不用再看了,因为后面我都是来说服你要学 Netty 的。

在互联网大厂的中高级面试中,网络编程绝对是一个必问的栏目,只要涉及到网络编程必问 Netty,因为 Netty 是考察一个人 Java 内功最佳的面试题,因为它涉及的知识点多,而且重要。比如:

  1. 网络协议相关知识点
  2. 内存处理相关知识点
  3. IO 及 OS 内核相关知识点
  4. Java 并发相关知识点
  5. 数据结构相关知识点
  6. 设计模式相关知识点

是不是只要一个 Netty 就可以把面试官想问的全部都问了?确实是这样,不仅可以问,而且它们是环环相扣,紧密关联的,大明哥在网上收集并整理了一些 Netty 面试题:

  1. Netty 的核心有哪些,这些组件承担的角色是什么?
  2. 说说你对 Reactor 模式的理解,Netty 采用的是哪种线程模型?这种线程模式的优势在哪里?
  3. 说说什么是粘包和粘包?怎么产生的?有哪些解决方案?Netty 又提供了哪些方案?
  4. 什么是零拷贝(Zero-Copy)?Netty 提供了哪些零拷贝的技术?Netty如何利用零拷贝来提升性能的?
  5. 内存池了解吗?解释下内存池在Netty中的作用。
  6. 内存泄露了解吗?如何避免内存泄露?Netty 是如何避免内存泄露的?又提供了哪些检测机制?
  7. 了解堆外内存吗?Netty 是怎么规避堆外内存泄露的?
  8. 知道断线重连功能吗?怎么实现的?Netty 的重连机制是怎么样的?它的作用又是什么?
  9. 解释一下心跳检测在 Netty 中的原理和应用场景。
  10. Netty如何处理网络中断和异常?
  11. 知道异步编程吗?JDK 的 Future 的核心原理是什么? Promise 呢?Future和Promise在Netty中的角色是什么?
  12. 什么是ChannelPipeline ?它采用了哪种设计模式?Netty 中使用了哪些设计模式?你在实际生产环境使用过哪些?怎么使用的?

这 12 连问能顶住吗?涉及到的知识点是不是及其广泛而且重要,而且这些还是没有延伸的,比如问 Netty 内存池,就可以延伸到堆内堆外内存,由此可以推到 JVM ,GC 相关知识点等等。线程模型可以延伸到 Java 的线程池,任务调度去。还有锁、性能优化等等。

所以,通过学习 Netty,可以把 Java 大壁江山的知识点都串连起来,达到融会贯通的作用。当你掌握 Netty 后,你对 I/O 模型 、内存管理、线程模型、数据结构、Java 并发等知识点基本上都会有一个更加深层次的认识。

所以,来和大明哥一起卷 Netty 吧!!

为什么写死磕 Netty

有小伙伴可能会问,现在市面上这么多 Netty 教程,从入门、实战到源码,几乎 Netty 的所有知识点都可以在网上找到,为什么还要花大精力来写这个课程呢?但是,不知道小伙伴们注意没有,这些资料都是零散的啊,很难找到系统性的学习 Netty 课程,比如在讲 Netty 的内存模型,网上几乎所有的资料就仅仅只是 Netty 的内存模型,但是大明哥会讲解操作系统的内存管理,内存管理算法,以及内存分配器 jemalloc 和 Netty 的内存模型,Netty 的内存模型我不仅仅有理论知识还有源码分析。在比如 Netty 的 ByteBuf 组件,市面很多资料都仅仅只介绍 ByteBuf 的 API 使用,但是大明哥会讲 ByteBuf API、零拷贝、内存分配机制以及源码等等。

死磕 Netty 绝对是大明哥目前死磕系列写的最最认真的,课程非常详细,整个课程分为四个部分:入门、进阶、实战、源码,文章数量不少于 120 篇。最最重要的是这个也是我学习 Netty 的路径,个人认为这是一个比较好且完备的学习路径。

当然大明哥也不是 Netty 高手,在生产环境也没有经过大规模的应用,对 Netty 也有很多理解不到位的地方,所以文章难免出错的地方,提前打招呼,免得到时被骂,O(∩_∩)O哈哈~!!!!

最后贴一个课程的全局图例:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/106207.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于和声优化的BP神经网络(分类应用) - 附代码

基于和声优化的BP神经网络(分类应用) - 附代码 文章目录 基于和声优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.和声优化BP神经网络3.1 BP神经网络参数设置3.2 和声算法应用 4.测试结果:5.M…

内网渗透——隧道代理

文章目录 代理代理使用场景VPS建立隧道frpMSF木马生成监听开启frp服务端和客户端执行exe木马文件 代理 实验环境: 攻击机kali:192.168.188.133(NAT模式) 模拟的公网服务器(本机):10.9.75.239 …

kube-controller-manager和kube-scheduler不能正常启动

kube-controller-manager-k8s-worker01和kube-scheduler-k8s-worker01没有启动起来 原因: 解决:进入/etc/kubernetes/manifests 编辑 将镜像地址修改为 然后重启kubelet:systemctl restart kubelet.service

freefilesync文件同步软件

下载 下载链接 https://freefilesync.org/download.php 往下拉,看到下载的链接 下载windows版本 下载地址: https://freefilesync.org/download/FreeFileSync_13.0_Windows_Setup.exe 直接复制到浏览器中访问就能下载 安装 双击安装包,一路默…

Megatron-LM GPT 源码分析(二) Sequence Parallel分析

引用 本文基于开源代码 https://github.com/NVIDIA/Megatron-LM ,延续上一篇Megatron-LM GPT 源码分析(一) Tensor Parallel分析 通过对GPT的模型运行示例,从三个维度 - 模型结构、代码运行、代码逻辑说明 对其源码做深入的分析。…

zookeeper应用场景(二)

单机环境下可以利用jvm级别的锁,比如synchronized、Lock等来实现锁,如果是多机部署就需要一个共享数据存储区域来实现分布式锁 一、分布式锁实现方式 1、基于数据库实现分布式锁 可以用数据库唯一索引来实现 2、基于redis实现分布式锁 redis实现的分…

【Vue面试题二十六】、SSR解决了什么问题?有做过SSR吗?你是怎么做的?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:SSR解决了什么问题&…

回归预测 | MATLAB实现IBES-ELM基于改进的秃鹰搜索优化算法优化极限学习机的数据回归预测(多指标,多图)

回归预测 | MATLAB实现IBES-ELM 基于改进的秃鹰搜索优化算法优化极限学习机的数据回归预测(多指标,多图) 目录 回归预测 | MATLAB实现IBES-ELM 基于改进的秃鹰搜索优化算法优化极限学习机的数据回归预测(多指标,多图&a…

变分自动编码器 (VAE)02/2 PyTorch 教程

一、说明 在自动编码器中,来自输入数据的信息被映射到固定的潜在表示中。当我们旨在训练模型以生成确定性预测时,这特别有用。相比之下,变分自动编码器(VAE)将输入数据转换为变分表示向量(顾名思义&#xf…

服务器崩溃前的数据拯救实践

前言 在服务器的VMWARE ESXi系统环境中,我们经常需要创建虚拟机来运行各种应用程序。然而,服务器如果偶尔出现自动重启以及紫屏报错的问题,说明服务器内部出现了故障,一般情况下重启机器能够解决问题,但时间一长&…

[23] IPDreamer: Appearance-Controllable 3D Object Generation with Image Prompts

pdf Text-to-3D任务中,对3D模型外观的控制不强,本文提出IPDreamer来解决该问题。在NeRF Training阶段,IPDreamer根据文本用ControlNet生成参考图,并将参考图作为Zero 1-to-3的控制条件,用基于Zero 1-to-3的SDS损失生成…

网络类型与数据链路层协议

目录 整体大纲图 一、网络类型 二、数据链路层协议 1、MA网络 2、P2P网络 1)HDLC协议 2)PPP协议 a、特点及其数据帧封装结构 b、组成及其工作过程 c、ppp会话流程及ppp验证 d、ppp配置命令 f、ppp mp 整体大纲图 一、网络类型 二、数据链路层…

系统文件IO、文件描述符fd、重定向、文件系统、动态库和静态库

目录 C文件接口系统文件I/O系统调用和库函数文件描述符0 & 1 & 2FILE和fd的关系文件描述符的分配规则 重定向重定向的本质输出重定向输入重定向追加重定向 dup2函数 FILE理解文件系统了解磁盘的物理结构逻辑抽象文件系统文件系统的图解和解析通过文件系统来理解ls -al通…

MySQL 3 环境搭建 MySQL 5.7版本的安装、配置

MySQL5.7.43官网下载地址 MySQL :: Download MySQL Community Server 这里选5.7.43,Windows版本,然后点击Go to Download Page,下载msi安装包的版本 MSI安装包版本比ZIP压缩包版本的安装过程要简单的多,过程更加清楚直观&#x…

MATLAB——径向基神经网络预测程序

欢迎关注公众号“电击小子程高兴的MATLAB小屋” %% 学习目标:径向基神经网络 %% 可以以任意精度逼近任意连续函数 clear all; close all; P1:10; T[2.523 2.434 3.356 4.115 5.834 6.967 7.098 8.315 9.387 9.928]; netnewrbe(P,T,2); %建立精确的径向基…

KMP 算法 + 详细笔记

给两个字符串,T"AAAAAAAAB",P"AAAAB"; 可以暴力匹配,但是太费时和效率不太好。于是KMP问世,我们一起来探究一下吧!!! (一)最长公共前后缀 D[i] p[…

【C/C++数据结构 - 2】:稳定性与优化揭秘,揭开插入排序、希尔排序和快速排序的神秘面纱!

文章目录 排序的稳定性插入排序插入排序的优化 希尔排序快速排序 排序的稳定性 稳定排序:排序前2个相等的数在序列中的前后位置顺序和排序后它们2个的前后位置顺序相同。(比如:冒泡、插入、基数、归并) 非稳定排序:排…

进化算法------微生物进化算法(MGA)

前言 该文章写在GA算法之后:GA算法 遗传算法 (GA)的问题在于没有有效保留好的父母 (Elitism), 让好的父母不会消失掉. Microbial GA (后面统称 MGA) 就是一个很好的保留 Elitism 的算法. 一句话来概括: 在袋子里抽两个球, 对比两个球, 把球大的放回袋子里, 把球小…

ARMv5架构对齐访问异常问题

strh非对齐访问 在ARMv5架构中,对于strh指令(Store Halfword),通常是要求对地址进行对齐访问的。ARMv5架构对于半字(Halfword)的存储操作有对齐要求,即地址必须是2的倍数。 如果尝试使用strh指…

vue3 状态管理pinia

1. 什么是Pinia Pinia 是 Vue 的专属的最新状态管理库 ,是 Vuex 状态管理工具的替代品 特点优势: 提供更加简单的API(去掉了mutation)提供符合组合式风格的API(和Vue3新语法统一)去掉modules的概念,每一个store都是一个独立的模块配合TypeScript更加友好,提供可靠的…