当前位置: 首页 > news >正文

一卷到底,大明哥带你横扫 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哈哈~!!!!

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

相关文章:

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

上一个死磕 Java 专栏【死磕 NIO】(当然写的不是很好,争取今年将它重写一遍)是**【死磕 Netty】**的铺垫,对于我们 Java 程序员而言,我们在实际开发过程一般都不会直接使用 Java NIO 作为我们的网络编程框架,因为写出一套高质量的…...

Python Opencv实践 - 车辆统计(1)读取视频,移除背景,做预处理

示例中的图像的腐蚀、膨胀和闭运算等需要根据具体视频进行实验得到最佳效果。代码仅供参考。 import cv2 as cv import numpy as np#读取视频文件 video cv.VideoCapture("../../SampleVideos/Traffic.mp4") FPS 10 DELAY int(1000 / FPS) kernel cv.getStructu…...

ROS-6.参数的使用

参数的使用 参数服务结构命令行的使用方式运行小海龟命令介绍查看参数获取参数值设置参数保存参数到文件从文件导入参数 通过程序操作创建节点修改cmake编译运行 参数服务结构 ros中存在参数服务管理服务,管理这所有参数,所有节点剋订阅和发布这些节点 …...

机器视觉在自动驾驶汽车中的应用与挑战

机器视觉在自动驾驶汽车中扮演着至关重要的角色,它使车辆能够感知和理解周围环境,以便自主驾驶。以下是机器视觉在自动驾驶汽车中的应用以及相关挑战: 应用: 障碍物检测与避让: 机器视觉系统可以检测和识别路上的障碍…...

欠拟合、过拟合及优化:岭回归

问题:训练数据训练的很好啊,误差也不大,为什么在测试集上面有问题呢? 当算法在某个数据集当中出现这种情况,可能就出现了过拟合现象。 1、 什么是过拟合与欠拟合 欠拟合 过拟合 分析 第一种情况:因为机器学习到的天鹅特征太少了,导致区分标准太粗糙,不能准确识别出天鹅…...

Mybatis学习笔记注解/xml映射/动态SQL%%%Mybatis教程

介绍 Mybatis 是一款优秀的持久层框架,用于简化 JDBC 的开发 MyBatis中文网 Mybatis 入门 快速入门 步骤 创建 SpringBoot 工程、数据库表 user、实体类 User引入 Mybatis 相关依赖,配置 Mybatis(数据库连接信息)编写 SQL 语…...

Git纯操作版 项目添加和提交、SSH keys添加、远程仓库控制、冲突解决、IDEA连接使用

Git 文章目录 Git项目简单克隆通用操作添加和提交回滚分支变基分支优选 远程项目推送认证抓取、拉取和冲突解决 IEDA类软件连接 最近学原理学的快头秃了,特此想出点不讲原理的纯操作版,不过还是放个图吧 项目简单克隆 git在本人日常中最重要的功能还是…...

使用OpenSSL生成自签证书

什么是OpenSSL OpenSSL是一个开源的软件库和工具套件,用于安全地处理网络数据传输中的加密、解密、安全套接层(SSL)以及传输层安全(TLS)协议等功能。它广泛应用于网站和互联网服务中,以确保数据传输的安全…...

Spring源码解析——Spring事务是怎么通过AOP实现的?

正文 此篇文章需要有SpringAOP基础&#xff0c;知道AOP底层原理可以更好的理解Spring的事务处理。最全面的Java面试网站 自定义标签 对于Spring中事务功能的代码分析&#xff0c;我们首先从配置文件开始人手&#xff0c;在配置文件中有这样一个配置&#xff1a;<tx:annot…...

机器人革命:脑洞大开的前沿机器人技术!

原创 | 文 BFT机器人 01 由生物启发的多模式移动形态机器人 在一个不断运动的世界中&#xff0c;一种新开发的名为M4&#xff08;多模式移动形态机器人&#xff09;的机器人展示了在包括滚动、飞行和行走在内的八种不同运动模式之间切换的能力。这款机器人由加州理工学院自主…...

微信小程序动态海报

参考文献&#xff1a; 微信小程序生成分享海报&#xff08;附带二维码生成&#xff09; - 简书 需求背景&#xff1a; 微信小程序固定图片&#xff0c;无法自动链接&#xff0c;分享页面内容 解决方案&#xff1a; 拆分海报内容&#xff0c;由以下几个组成 1、用户图像 …...

手写单例模式

一、单例模式的定义 定义&#xff1a; 确保一个类只有一个实例&#xff0c;并提供该实例的全局访问点。 这样做的好处是&#xff1a;有些实例&#xff0c;全局只需要一个就够了&#xff0c;使用单例模式就可以避免一个全局使用的类&#xff0c;频繁的创建与销毁&#xff0c;耗…...

介绍6种解决电脑找不到vcomp140.dll,无法继续执行代码的方法。

在编程和软件开发领域&#xff0c;我们经常会遇到各种错误和问题。其中&#xff0c;找不到vcomp140.dll文件导致无法继续执行代码是一个非常常见的问题。这个问题可能会影响到软件的正常运行&#xff0c;甚至导致整个项目延期。因此&#xff0c;我们需要找到解决方案来解决这个…...

mysql数据物理迁移

文章目录 一、mysql数据物理迁移1.1 物理迁移 一、mysql数据物理迁移 1.1 物理迁移 速度快&#xff0c;需要停机 进入数据库&#xff0c;查看数据存放位置&#xff1a; select datadir; 一般默认存放在/var/lib/mysql 停机数据库&#xff0c;防止有写入数据 systemctl stop …...

构建图像金字塔:探索 OpenCV 的尺度变换技术

构建图像金字塔&#xff1a;探索 OpenCV 的尺度变换技术 引言什么是图像金字塔&#xff1f;为什么需要图像金字塔&#xff1f;构建高斯金字塔构建拉普拉斯金字塔图像金字塔的应用示例&#xff1a;在不同尺度下检测图像中的边缘 结论 引言 在计算机视觉领域&#xff0c;图像金字…...

ios app开发环境搭建

Xcode是Apple iOS的应用市场app store移动应用的开发工具&#xff0c;支持不同设备、不同应用场景的开发&#xff0c;本文主要描述xcode开发工具开发环境的搭建。 如上所示&#xff0c;在macos中&#xff0c;使用app store安装xcode开发工具 如上所示&#xff0c;在macos中&…...

mysql面试题45:读写分离常见方案、哪些中间件可以实现读写分离

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说你知道的读写分离常见方案 读写分离是一种常见的数据库架构方案,旨在分担数据库的读写压力,提高系统的性能和可扩展性。以下是两种常见的…...

【数字IC设计】DC自动添加门控时钟

简介 数字电路的动态功耗主要是由于寄存器翻转带来的&#xff0c;为了降低芯片内部功耗&#xff0c;门控时钟的方案应运而生。作为低功耗设计的一种方法&#xff0c;门控时钟是指在数据无效时将寄存器的时钟关闭&#xff0c;以此来降低动态功耗。 在下图中&#xff0c;展示了…...

前端开发工具vscode

一、下载安装 https://code.visualstudio.com/ 二、安装插件 三、使用 ①、创建一个空目录 ②、利用vscode工具打开该目录 ③、将该目录设置为工作区 在工作区中添加文件&#xff0c;还可以进行浏览器访问&#xff08;提前安装了Live Server插件&#xff09; 为工具…...

网络基础2(1)

HTTP 1.应用层协议2.send和recv单独使用不安全3.URL4.urlencode和urldecode5.HTTP协议格式6.HTTP中的常见请求方法POST&&GET7.HTTP的状态码8.HTTP常见Header &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f6…...

GLM-OCR Python API详解:predict接口返回结构、置信度阈值设置与后处理

GLM-OCR Python API详解&#xff1a;predict接口返回结构、置信度阈值设置与后处理 1. 项目概述与环境准备 GLM-OCR 是一个基于先进多模态架构的高性能OCR识别模型&#xff0c;专门针对复杂文档理解场景设计。它不仅能识别常规文本&#xff0c;还支持表格识别、公式识别等高级…...

OpenClaw+GLM-4.7-Flash语音交互:对接Whisper实现语音控制

OpenClawGLM-4.7-Flash语音交互&#xff1a;对接Whisper实现语音控制 1. 为什么需要语音交互的自动化助手&#xff1f; 去年冬天的一个深夜&#xff0c;我裹着毯子在书房调试代码时突然想到&#xff1a;如果能用语音控制电脑执行重复性任务&#xff0c;就不用反复在键盘和鼠标…...

实践指南:借助LLaMa-Factory高效定制你的专属LLaMa3

1. 为什么选择LLaMa-Factory微调LLaMa3&#xff1f; 第一次尝试微调大语言模型时&#xff0c;我花了整整三天时间在环境配置上。从CUDA版本冲突到PyTorch依赖问题&#xff0c;各种报错让人崩溃。直到发现LLaMa-Factory这个"微调瑞士军刀"&#xff0c;才明白原来大模型…...

TTL与CMOS数字电路核心技术对比分析

1. 数字电路技术解析&#xff1a;TTL与CMOS电路深度对比1.1 数字电路技术发展概述现代数字电子系统的核心构建模块主要采用TTL(Transistor-Transistor Logic)和CMOS(Complementary Metal-Oxide Semiconductor)两种集成电路技术。这两种技术构成了当前数字电路设计的基础&#x…...

springboot-vue+nodejs的农村综合风貌展示平台

目录技术架构设计功能模块划分开发实施步骤测试与部署关键代码示例项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术架构设计 后端框架选择 Spring Boot作为核心框架&#xff0c;提供RESTful API接口。 Node.js作为辅助服务…...

BongoCat:让桌面交互充满生命力的开源伴侣

BongoCat&#xff1a;让桌面交互充满生命力的开源伴侣 【免费下载链接】BongoCat 让呆萌可爱的 Bongo Cat 陪伴你的键盘敲击与鼠标操作&#xff0c;每一次输入都充满趣味与活力&#xff01; 项目地址: https://gitcode.com/gh_mirrors/bong/BongoCat 在数字化工作与娱乐…...

阿里巴巴Sentinel流量控制:从基础概念到核心算法实现

阿里巴巴Sentinel流量控制&#xff1a;从基础概念到核心算法实现 【免费下载链接】Sentinel alibaba/Sentinel: Sentinel 是阿里巴巴开源的一款面向分布式服务架构的流量控制、熔断降级组件&#xff0c;提供实时监控、限流、降级和系统保护功能&#xff0c;适用于微服务治理场景…...

突破语言壁垒:XUnity.AutoTranslator让Unity游戏翻译不再复杂

突破语言壁垒&#xff1a;XUnity.AutoTranslator让Unity游戏翻译不再复杂 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 一、游戏语言困境&#xff1a;玩家面临的真实挑战 想象一下&#xff0c;你终于等…...

SFM3304热式流量传感器嵌入式驱动开发指南

1. Sensirion SFM3304 流量传感器技术解析与嵌入式驱动开发指南Sensirion SFM3304 是一款基于热式原理的高精度、低功耗数字质量流量传感器&#xff0c;专为医疗呼吸设备、工业过程控制及实验室气体分析等对响应速度、零点稳定性与长期可靠性要求严苛的应用场景设计。该器件采用…...

Wan2GP:革命性开源视频生成平台,仅需6GB VRAM即可创作好莱坞级影片

Wan2GP&#xff1a;革命性开源视频生成平台&#xff0c;仅需6GB VRAM即可创作好莱坞级影片 【免费下载链接】Wan2GP Wan 2.1 for the GPU Poor 项目地址: https://gitcode.com/gh_mirrors/wa/Wan2GP Wan2GP&#xff08;GitHub加速计划&#xff09;是一款专为GPU资源有限…...