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

基于Netty实现高性能HTTP服务的架构解析

一、HTTP协议基础

1.1 HTTP协议概述

HTTP(HyperText Transfer Protocol)作为现代Web应用的基石,是基于TCP/IP的应用层协议,具有以下核心特性:

  • 请求/响应模型:客户端发起请求,服务端返回响应
  • 无状态协议:每个请求相互独立,无上下文关联
  • 文本格式传输:基于ASCII编码的可读报文结构
  • 默认端口:HTTP-80,HTTPS-443

1.2 HTTP报文结构

请求报文示例:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0[请求体]

响应报文示例:

HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234<html>...</html>

二、Netty实现HTTP服务核心实践

2.1 Netty编解码器架构

Netty通过ChannelPipeline实现协议处理流水线:

// HTTP请求解码器
pipeline.addLast("decoder", new HttpRequestDecoder());
// HTTP响应编码器
pipeline.addLast("encoder", new HttpResponseEncoder());
// 聚合HTTP请求体
pipeline.addLast("aggregator", new HttpObjectAggregator(65536));

2.2 完整HTTP服务实现

public class HttpServer {public static void main(String[] args) throws Exception {EventLoopGroup bossGroup = new NioEventLoopGroup();EventLoopGroup workerGroup = new NioEventLoopGroup();try {ServerBootstrap b = new ServerBootstrap();b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel ch) {ChannelPipeline p = ch.pipeline();p.addLast(new HttpRequestDecoder());p.addLast(new HttpResponseEncoder());p.addLast(new HttpObjectAggregator(65536));p.addLast(new HttpServerHandler());}});ChannelFuture f = b.bind(8080).sync();f.channel().closeFuture().sync();} finally {bossGroup.shutdownGracefully();workerGroup.shutdownGracefully();}}
}// 自定义请求处理器
public class HttpServerHandler extends SimpleChannelInboundHandler<FullHttpRequest> {@Overrideprotected void channelRead0(ChannelHandlerContext ctx, FullHttpRequest req) {// 处理GET请求示例if (req.method() == HttpMethod.GET) {String responseContent = "<h1>Hello Netty HTTP</h1>";FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK,Unpooled.copiedBuffer(responseContent, CharsetUtil.UTF_8));response.headers().set(HttpHeaderNames.CONTENT_TYPE, "text/html; charset=UTF-8");response.headers().set(HttpHeaderNames.CONTENT_LENGTH, response.content().readableBytes());ctx.writeAndFlush(response);}}
}

2.3 关键技术点解析

  1. 零拷贝优化:Netty的FileRegion支持直接内存传输
  2. 异步处理:ChannelFuture实现非阻塞IO操作
  3. 协议扩展:支持HTTP/2、WebSocket等协议升级

三、Netty HTTP服务与Servlet容器对比

3.1 架构差异对比

特性Netty HTTPTomcat Servlet
线程模型Reactor异步模型同步线程池模型
协议支持灵活扩展标准HTTP/Servlet规范
内存管理堆外内存池JVM堆内存
性能特征高并发低延迟常规Web应用场景
配置复杂度需要手动组装组件约定式配置

3.2 技术关联性

  1. Spring WebFlux底层基于Netty实现响应式编程
  2. Tomcat 8+版本引入NIO模型提升并发能力
  3. 二者都可以作为Spring Boot的内置容器选项

3.3 选型建议

  • 选择Netty的场景:

    • 需要自定义协议处理逻辑
    • 超高并发(10万+ QPS)需求
    • 需要长连接/实时通信支持
  • 选择Servlet容器的场景:

    • 传统Spring MVC应用
    • 需要JSP/JSTL支持
    • 已有Servlet规范兼容需求

四、性能优化建议

  1. 使用PooledByteBufAllocator优化内存分配
  2. 合理设置HttpObjectAggregator的maxContentLength
  3. 开启TCP_NODELAY减少网络延迟
  4. 使用EventExecutorGroup隔离业务逻辑处理

总结

Netty通过其灵活的Pipeline机制和高效的异步处理模型,为构建高性能HTTP服务提供了全新选择。相比传统Servlet容器,Netty更适合需要深度定制协议处理或应对高并发场景的系统架构。理解二者的差异和适用场景,有助于在实际项目中做出更合理的技术选型。

建议结合具体业务需求进行技术选型,在传统Web应用场景下,Servlet容器仍然是更便捷的选择,而在需要深度定制协议或追求极致性能时,Netty展现出独特的优势。

相关文章:

基于Netty实现高性能HTTP服务的架构解析

一、HTTP协议基础 1.1 HTTP协议概述 HTTP&#xff08;HyperText Transfer Protocol&#xff09;作为现代Web应用的基石&#xff0c;是基于TCP/IP的应用层协议&#xff0c;具有以下核心特性&#xff1a; 请求/响应模型&#xff1a;客户端发起请求&#xff0c;服务端返回响应无…...

Sqlite下载、安装与数据库创建

Sqlite官网 https://www.sqlite.org/index.html 官方文档链接 https://www.sqlite.org/docs.html 官方文档是英文版的&#xff0c;如果想看中文的文档请参考 **菜鸟教程** 网站中的 **《Sqlite教程》&#xff1a;https://www.runoob.com/sqlite/sqlite-tutorial.html 官方下载…...

内网环境安装dlv,本地远程调试go

背景&#xff1a;内网环境(服务器)下安装dlv,本地通过dlv调试编译后的go代码。 可以配合观看: 【dlv远程调试-哔哩哔哩】 https://b23.tv/NqPZ5q9 内网安装dlv步骤 1、dlv安装: &#xff08;我额服务器和内网的go都是1.21以上&#xff09; # 先在有网络的环境下&#xff08…...

【使用 Element UI 实现手动上传文件:FormData 追加文件和其他参数,支持单文件覆盖上传】

在开发 Web 应用时&#xff0c;文件上传是一个常见的需求。Element UI 提供了强大的 el-upload 组件&#xff0c;可以轻松实现文件上传功能。本文将详细介绍如何使用 Element UI 实现以下功能&#xff1a; 手动触发文件上传&#xff1a;用户选择文件后&#xff0c;点击按钮手动…...

python基础8 单元测试

通过前面的7个章节&#xff0c;作者学习了python的各项基础知识&#xff0c;也学习了python的编译和执行。但在实际环境上&#xff0c;我们需要验证我们的代码功能符合我们的设计预期&#xff0c;所以需要结合python的单元测试类&#xff0c;编写单元测试代码。 Python有一个内…...

第四节:sqlx库使用指南

在项目中我们通常可能会使用database/sql连接MySQL数据库。本文借助使用sqlx实现批量插入数据的例子&#xff0c;介绍了sqlx中可能被你忽视了的sqlx.In和DB.NamedExec方法。 sqlx介绍 在项目中我们通常可能会使用database/sql连接MySQL数据库。sqlx可以认为是Go语言内置datab…...

麒麟操作系统作为服务器,并且需要在浏览器上调试 MATLAB

在内网环境下&#xff0c;使用麒麟操作系统作为服务器&#xff0c;并且需要在浏览器上调试 MATLAB 程序&#xff0c;这确实复杂&#xff0c;但仍然有可行的解决方案。麒麟操作系统是国产化的 Linux 发行版&#xff08;如基于 Ubuntu Kylin 或银河麒麟&#xff09;&#xff0c;因…...

在线教育网站项目第四步:deepseek骗我, WSL2不能创建两个独立的Ubuntu,但我们能实现实例互访及外部访问

一、说明 上一章折腾了半天&#xff0c;搞出不少问题&#xff0c;今天我们在deepseek的帮助下&#xff0c;完成多个独立ubuntu24.04实例的安装&#xff0c;并完成固定ip&#xff0c;实践证明&#xff0c;deepseek不靠谱&#xff0c;浪费我2个小时时间&#xff0c;我们将在下面实…...

AI安全、大模型安全研究(DeepSeek)

DeepSeek 点燃AI应用革命之火,但安全 “灰犀牛” 正在逼近 DeepSeek-R1国产大模型的发布,以技术创新惊艳了全球,更是极致的性价比推动国内千行百业接入 AI,政府、企业竞速开发智能业务处理、智能客服、代码生成、营销文案等应用,“落地效率” 成为第一关键词。然而与此相…...

(hash表+vector 数位和相等数对的最大和)leetcode 2342

一定要断点调试看看数据对不对的上&#xff01;&#xff01;&#xff01;不然很容易弄不清楚值和下标 这个题意思是在nums中找出相同数位和的值 如 数位和为7 nums中符合要求的有 43&#xff0c;7 在这些数中选两个相加取最大值&#xff0c;再与其他数位和取得的相加最大值比…...

正则表达式引擎深入探讨

正则表达式引擎&#xff08;Regular Expression Engine&#xff09;是正则表达式得以“活起来”的核心。它是一个精密的软件组件&#xff0c;负责接收正则表达式和输入文本&#xff0c;解析模式并执行匹配或替换操作&#xff0c;最终输出结果——可能是简单的“是否匹配”&…...

[蓝桥杯 2023 省 B] 飞机降落(不会dfs的看过来)

[蓝桥杯 2023 省 B] 飞机降落 题目描述 N N N 架飞机准备降落到某个只有一条跑道的机场。其中第 i i i 架飞机在 T i T_{i} Ti​ 时刻到达机场上空&#xff0c;到达时它的剩余油料还可以继续盘旋 D i D_{i} Di​ 个单位时间&#xff0c;即它最早可以于 T i T_{i} Ti​ 时刻…...

DockerTLS加密/不加密传输

前言&#xff1a; 在Docker容器的网络通信中&#xff0c;安全性是至关重要的。DockerTLS作为一种加密传输协议&#xff0c;通过为Docker守护进程与客户端之间的通信提供加密层&#xff0c;有效防止数据在传输过程中被窃取或篡改。然而&#xff0c;在某些特定场景下&#xff0c;…...

基于微信小程序的充电桩管理系统

一、开发背景 在开发充电汽车管理系统之前&#xff0c;深入的需求分析至关重要。我们要充分了解不同用户群体的需求&#xff0c;比如私家车主希望充电过程便捷、高效、安全&#xff0c;能够实时查看充电状态和费用明细&#xff1b;出租车、网约车司机则更注重充电速度和充电桩…...

Excel导出工具类--复杂的excel功能导出(使用自定义注解导出)

Excel导出工具类 前言: 简单的excel导出,可以用easy-excel, fast-excel, auto-poi,在导出实体类上加上对应的注解,用封装好的工具类直接导出,但对于复杂的场景, 封装的工具类解决不了,要用原生的excel导出(easy-excel, fast-excel, auto-poi都支持原生的) 业务场景: 根据…...

创新实训项目初始化——gitee的使用

创新实训项目管理采用gitee&#xff0c;写下这篇博客熟悉gitee进行项目创建和版本同步 一、gitee概述 Gitee 是一个基于 Git 的代码托管平台&#xff0c;与 GitHub 类似&#xff0c;Gitee 提供了丰富的功能&#xff0c;比如代码仓库的创建、分支管理、代码审查等。 二、gite…...

【原创】使用ElasticSearch存储向量实现大模型RAG

一、概述 检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;RAG&#xff09;已成为大型语言模型&#xff08;LLM&#xff09;应用的重要架构&#xff0c;通过结合外部知识库来增强模型的回答能力&#xff0c;特别是在处理专业领域知识、最新信息或企业私有数…...

Gymnasium Cart Pole 环境与 REINFORCE 算法 —— 强化学习入门 2

Title: Gymnasium Cart Pole 环境与 REINFORCE 算法 —— 强化学习入门 2 文章目录 I. Gymnasium Cart Pole 环境II. REINFORCE 算法1. 原理说明2. REINFORCE 算法实现 I. Gymnasium Cart Pole 环境 Gymnasium Cart Pole 环境是一个倒立摆的动力学仿真环境. 状态空间: 0: Ca…...

响应式数据 和 Pinia 状态

响应式数据 和 Pinia 状态 是 Vue.js 应用中用于管理数据的两种重要机制&#xff0c;它们之间有密切的关系。以下是它们的定义、特点以及关系&#xff1a; 1. 响应式数据 定义 响应式数据 是 Vue.js 的核心特性之一&#xff0c;指的是当数据发生变化时&#xff0c;视图会自动…...

在大数据开发中hive是指什么?

hello宝子们...我们是艾斯视觉擅长ui设计和前端数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 在大数据技术的浩瀚星空中&#xff0c;Apache Hive犹如一座桥梁&#xff0c;连接着传统数据仓库理念…...

LeRobot源码剖析——对机器人各个动作策略的统一封装:包含ALOHA ACT、Diffusion Policy、VLA模型π0

前言 过去2年多的深入超过此前7年&#xff0c;全靠夜以继日的勤奋&#xff0c;一天当两天用&#xff0c;抠论文 抠代码 和大模型及具身同事讨论&#xff0c;是目前日常 而具身库里&#xff0c;idp3、π0、lerobot值得反复研究&#xff0c;故&#xff0c;近期我一直在抠π0及l…...

Python生成requirements.txt的两种方法

Python生成requirements.txt的两种方法 方法一&#xff1a;导出当前环境的依赖包 使用pipreqs --encodingutf8为使用utf8编码&#xff0c;避免编码报错 --force 强制执行覆盖生成目录下的requirements.txt # 安装 python3 -m pip install pipreqs # 在当前目录生成 pipreqs . …...

如何判断 MSF 的 Payload 是 Staged 还是 Stageless(含 Meterpreter 与普通 Shell 对比)

在渗透测试领域&#xff0c;Metasploit Framework&#xff08;MSF&#xff09;的 msfvenom 工具是生成 Payload&#xff08;载荷&#xff09;的核心利器。然而&#xff0c;当我们选择 Payload 时&#xff0c;经常会遇到一个问题&#xff1a;这个 Payload 是 Staged&#xff08;…...

HTML5与CSS3新特性详解

一、HTML5新特性 1.概述 HTML5 的新增特性主要是针对于以前的不足&#xff0c;增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题&#xff0c;基本是 IE9 以上版本的浏览器才支持&#xff0c;如果不考虑兼容性问题&#xff0c;可以大量使用这些新特…...

Redis常用进阶 存储原理和主从思路

Redis常用进阶 存储原理和主从思路 简介 此篇用于需要时随时查阅的知识. 由于不断的学习总是会忘记一些 所以用于记录 笔记对应视频为黑马redis https://www.bilibili.com/video/BV1Pu411Y7bq 单点redis的问题 : 数据丢失问题 持久化并发能力弱 主从集群存储能力问题 ES故…...

本地部署DeepSeek-R1(Dify升级最新版本、新增插件功能、过滤推理思考过程)

下载最新版本Dify Dify1.0版本之前不支持插件功能&#xff0c;先升级DIfy 下载最新版本&#xff0c;目前1.0.1 Git地址&#xff1a;https://github.com/langgenius/dify/releases/tag/1.0.1 我这里下载到老版本同一个目录并解压 拷贝老数据 需先停用老版本Dify PS D:\D…...

分治-快速排序系列一>快速排序

目录 题目方法&#xff1a;优化方法&#xff1a;代码&#xff1a; 题目方法&#xff1a; 忘记快速排序看这里&#xff1a;链接: link 优化方法&#xff1a; 代码&#xff1a; public int[] sortArray(int[] nums) {qsort(nums,0,nums.length-1);return nums;}private void qso…...

【spring对bean Singleton和Prototype的管理流程】

在 Spring 框架中&#xff0c;Bean 的作用域决定了 Bean 的生命周期和创建方式。Spring 支持多种作用域&#xff0c;其中最常用的是 单例&#xff08;Singleton&#xff09; 和 原型&#xff08;Prototype&#xff09;。以下是 Spring 对单例和原型 Bean 的管理流程详解&#x…...

【Java】grpc-java在IDEA中build不成功的相关问题,Android,codegen C++语言排除

一、解决Android依赖问题 在当前grpc-java项目根目录下创建gradle.properties文件,输入以下内容: skipAndroid=true或者 android.useAndroidX=true二、com.google.cloud.tools.appengine插件找不到的问题 Plugin [id: ‘com.google.cloud.tools.appengine’, version: ‘…...

十七、实战开发 uni-app x 项目(仿京东)- 后端指南

前面我们已经用uniappx进行了前端实战学习 一、实战 开发uni-app x项目(仿京东)-规划-CSDN博客 二、实战 开发uni-app x项目(仿京东)-项目搭建-CSDN博客 三、实战开发 uni-app x 项目(仿京东)- 技术选型-CSDN博客 四、实战开发 uni-app x 项目(仿京东)- 页面设计-C…...

SpringSecurity——基于角色权限控制和资源权限控制

目录 基于角色权限控制 1.1 自定义 UserDetailsService 1.2 加载用户角色 1.3. 给角色配置能访问的资源&#xff08;使用切面拦截&#xff0c;使用注解&#xff09; 总结 资源权限控制 2.2. 需要有一个用户&#xff1b;&#xff08;从数据库查询用户&#xff09; 2.2 基…...

经历过的IDEA+Maven+JDK一些困惑

注意事项&#xff1a;由于使用过程中是IDEA绑定好另外2个工具&#xff0c;所以报错统一都显示在控制台&#xff0c;但要思考和分辨到底是IDEA本身问题导致的报错&#xff0c;还是maven导致的 标准配置 maven Java Compiler Structure 编辑期 定义&#xff1a;指的是从open pr…...

基于Arduino控制的温室蔬菜园环境监控系统(论文+源码)

2.1系统总体方案设计 本课题为基于Arduino控制的温室蔬菜园环境监控系统&#xff0c;在硬件上结合Arduino 控制器&#xff0c;土壤湿度传感器&#xff0c;ESP8266模块&#xff0c;环境温湿度传感器&#xff0c;光敏电阻&#xff0c;液晶等来构成整个系统&#xff0c;其可以实现…...

关于HAL库的知识1----MSP函数

在 HAL 库中&#xff0c;大部分外设在初始化时都会调用一个对应的 MSP 初始化函数&#xff0c;这个函数的主要作用就是配置与外设相关的底层硬件资源&#xff0c;比如时钟、GPIO、中断、DMA 等。常见的外设及其对应的 MSP 函数包括&#xff1a; UART/USART&#xff1a;对应 HA…...

QT 磁盘文件 教程04-创建目录、删除目录、遍历目录

【1】新建目录 bool CreateDir(QString name){QString fileName name ;QDir dir(fileName);if (dir.isEmpty()) {dir.mkdir(fileName);return true;}else{qDebug()<<"文件夹已存在";return false;} } 【2】删除目录 bool DeleteDir(QString fileName){if (…...

高级java每日一道面试题-2025年3月06日-微服务篇[Eureka篇]-Eureka Server和Eureka Client关系?

如果有遗漏,评论区告诉我进行补充 面试官: Eureka Server和Eureka Client关系? 我回答: 在微服务架构中&#xff0c;Eureka作为Netflix开源的服务发现组件&#xff0c;由Eureka Server&#xff08;服务端&#xff09;和Eureka Client&#xff08;客户端&#xff09;两大部分…...

MAC-在使用@Async注解的方法时,分布式锁管理和释放

在使用 @Async 注解的异步方法中管理分布式锁时,需要特别注意 ​锁的获取、释放与异步执行的生命周期匹配。以下是结合 Spring Boot 和 Redis 分布式锁的实践方案: 1. 为什么需要分布式锁? 异步方法可能被多个线程/服务实例并发执行,若访问共享资源(如数据库、缓存),需…...

Kafka 八股文

一、基础概念 1. Kafka 是什么&#xff1f;它的核心组件有哪些&#xff1f; Kafka 的定义 Kafka 是一个 分布式流处理平台&#xff0c;最初由 LinkedIn 开发&#xff0c;后成为 Apache 顶级项目。它主要用于 高吞吐量的实时数据流处理&#xff0c;支持发布-订阅模式的消息传递…...

现代前端开发框架对比:React、Vue 和 Svelte 的选择指南

引言 在当今快速发展的 Web 开发领域&#xff0c;前端框架的选择往往直接影响项目的开发效率、维护成本和用户体验。React、Vue 和 Svelte 作为当前最受关注的三大框架&#xff0c;各自拥有独特的设计哲学与技术实现。本文将通过 5000 字的深度解析&#xff0c;从架构设计、开…...

ffmpeg(库编译) 01 搭建环境和安装依赖

创建目录在home目录下创建 ffmpeg_sources:用于下载源文件 ffmpeg_build: 存储编译后的库文件 bin:存储二进制文件(ffmpeg,ffplay,ffprobe,X264,X265等) mkdir ffmpeg_sources ffmpeg_build bin安装依赖 先执行sudo apt-get update进行更新,再往下走sudo apt-get -…...

Java后端开发技术详解

Java作为一门成熟的编程语言&#xff0c;已广泛应用于后端开发领域。其强大的生态系统和广泛的支持库使得Java成为许多企业和开发者的首选后端开发语言。随着云计算、微服务架构和大数据技术的兴起&#xff0c;Java后端开发的技术栈也不断演进。本文将详细介绍Java后端开发的核…...

Python高级:GIL、C扩展与分布式系统深度解析

文章目录 &#x1f4cc; **前言**&#x1f527; **第一章&#xff1a;Python语言的本质与生态**1.1 **Python的实现与版本演进**1.2 **开发环境与工具链** &#x1f527; **第二章&#xff1a;元编程与动态特性**2.1 **描述符协议&#xff08;Descriptor Protocol&#xff09;*…...

数学之握手问题

问题描述 小蓝组织了一场算法交流会议&#xff0c;总共有 50人参加了本次会议。在会议上&#xff0c;大家进行了握手交流。按照惯例他们每个人都要与除自己以外的其他所有人进行一次握手 (且仅有一次)。但有 7 个人&#xff0c;这 7 人彼此之间没有进行握手 (但这 7 人与除这 …...

【Nodejs】2024 汇总现状

之前已经调研了容器、nexus-public&#xff0c;实现了本地构建应用镜像和基础设施的镜像。为实现分布式一体化协作开发的目标&#xff0c;还需要配套的线上协作开发环境。故而重回前端调研现状&#xff0c;比较 5 年前的 nodejs 快好的啊。 以下是针对 Node.js 工具链的深度解析…...

人工智能之数学基础:矩阵的降维

本文重点 在现实世界中,我们经常会遇到高维数据。例如,图像数据通常具有很高的维度,每个像素点都可以看作是一个维度。高维数据不仅会带来计算和存储上的困难,还可能会导致 “维数灾难”,即随着维度的增加,数据的稀疏性和噪声也会增加,从而影响数据分析的效果。因此,我…...

数仓开发那些事(10)

某神州优秀员工&#xff1a;&#xff08;没错&#xff0c;这个diao毛被评为了优秀员工&#xff09;一闪&#xff0c;听说你跑路了&#xff0c;不做零售行业了 一闪&#xff1a;没错&#xff0c;老东家的新it总监上任后大家都开始躺平&#xff0c;失去了当年的动力&#xff0c;所…...

【手工】早教游戏:下楼的猴子

一、效果 二、准备材料 吸管: 10.4 c m 10.4cm 10.4cm&#xff1b;棉签&#xff1a; 6 6 6 根双头棉签&#xff1b;硬币&#xff1a;1角&#xff1b;纸皮人: 2.0 c m 4.0 c m 2.0cm4.0cm 2.0cm4.0cm&#xff1b;纸板&#xff1a; 12.0 c m 30.0 c m 12.0cm30.0cm 12.0cm30…...

力扣刷题46. 全排列

46. 全排列 - 力扣&#xff08;LeetCode&#xff09; 使用dfs搜索&#xff0c;查找所有的情况&#xff0c;首先定义所有的链表集合list&#xff0c;在定义每一种情况的链表res&#xff0c;在主函数中遍历所有的初始元素&#xff0c;首先初始化res&#xff0c;并且添加到res中&…...

【工作记录】pytest使用总结

1、 fixture夹具 可参考&#xff1a; python3.x中 pytest之fixture - 漂泊的小虎 - 博客园 fixture是指夹具&#xff08;把用例夹在中间&#xff09;&#xff0c;它包括前置工作和后置工作&#xff0c;前置是用例代码的准备阶段&#xff0c;后置是用例执行之后的清理阶段,用…...

linux 命令 mkdir

以下是 Linux mkdir 命令的简明总结&#xff0c;适合快速查阅和实际场景应用&#xff1a; 基础语法 mkdir [选项] 目录名... 常用选项速查 选项作用-p自动创建父目录&#xff08;解决多级目录问题&#xff09; mkdir -p a/b/c-m直接设置权限&#xff08;替代chmod&#xff0…...