C# 混淆代码工具--ConfuserEx功能与使用指南
目录
- 1 前言
- 1.1 可能带来的问题
- 2 ConfuserEx
- 2.1 简介
- 2.2 功能特点
- 2.3 基本使用方法
- 2.4 集成到MSBuild
- 2.5 深入设置
- 2.5.1 保护机制
- 2.5.1.1 ConfuserEx Protection
- 2.5.2 精细的代码保护
- 主要特性
- 1. `decl-type(string)`
- 2.`full-name(string)`
- 3. `is-public()`
- 4. `match(string)`
- 5. `match-name(string)`
- 6.`match-type-name(string)`
- 7. `member-type(string)`
- 8. `module(string)`
- 9. `name(string)`
- 10. `namespace(string)`
- 11. `inherits(string)`
- 12. `is-type(string)`
- 2.6 使用建议
1 前言
代码混淆是一种通过故意模糊代码逻辑、隐藏其本意的技术,旨在提高逆向工程的难度,从而实现以下目标:
- 延缓破解与篡改速度:通过复杂化代码结构,增加攻击者分析和修改代码的时间成本。
- 保护知识产权:防止敏感算法或商业逻辑被轻易窃取或复制。
常见的混淆技术包括:
- 名称混淆:缩短变量、函数名称,使其失去语义性。
- 字符串加密:对字符串内容进行加密,避免明文暴露关键信息。
- 控制流混淆:引入冗余逻辑或虚假分支,扰乱程序执行路径。
- 控制流扁平化:将线性逻辑转化为复杂的状态机结构。
- 不透明谓词:插入看似有意义但实际上不影响功能的条件判断。
- 指令替换:用等价但更复杂的指令替代原有操作。
代码混淆不仅能有效保护程序逻辑,还能通过移除冗余信息、缩短标识符等方式减小编译后程序体积,提升分发效率。其核心价值在于平衡功能等价性与可读性之间的矛盾,为软件安全提供基础保障。
1.1 可能带来的问题
- 调试和维护困难:混淆后的代码难以理解,调试和修复问题时通常需要依赖未混淆的原始代码,否则可能难以定位问题。
- 反射冲突:代码混淆可能与反射机制产生冲突,尤其在未正确配置保留规则时,可能导致运行时错误。
- 安全性限制:代码混淆无法完全阻止反向工程,仅能提高其门槛。对于高安全性需求的场景,建议结合加密、完整性校验等多重保护措施。
2 ConfuserEx
2.1 简介
ConfuserEx 是一个开源的 .NET 应用程序保护工具,用于防止反编译和篡改。它支持多种混淆技术,包括控制流混淆、字符串加密、资源加密等。其灵活的配置选项可以根据不同的需求进行定制,为开发者提供了强大的保护机制。
官网:https://mkaring.github.io/ConfuserEx/
文档:git clone https://github.com/mkaring/ConfuserEx.wiki.git
2.2 功能特点
- 代码混淆:通过重命名、控制流混淆等技术,使反编译后的代码难以理解。
- 字符串加密:对字符串进行加密,防止攻击者轻易获取敏感信息。
- 完整性校验:确保应用程序在运行过程中没有被篡改。
- 反反编译:防止反编译工具对应用程序进行反编译。
- 插件系统:允许开发者根据自己的需求编写自定义混淆规则,增强工具的灵活性和扩展性。
2.3 基本使用方法
-
下载安装 ConfuserExGUI
https://github.com/mkaring/ConfuserEx/releases
-
ConfuserExGUI界面

-
将待混淆的 .dll 或 .exe 文件拖拽进中间方框区域。
他会自动带出基本路径和输出路径

4. 设置 .NET 运行时.NET Core, .NET Standard, .NET 5 Support · Issue #302 · mkaring/ConfuserEx
ConfuserExGUI默认支支持.NET FrameWork,如果需要使用.NET Core版本,需要手动设置运行时。
-
点击【⚙️】选择对应版本的运行时。

-
点击【+】选择运行时文件夹


-
-
选择 Settings 项,添加混淆规则。

-
点击【Protect!】按钮开始混淆。

-
点击【Save Project】保存混淆项目
这将保存一个crproj文件。内容示例,可以看到其包含输出路径,基本路径,模块以及模块对应的规则。
<project outputDir="E:\File\WorkFile\ConfuserExTest\ConfuserDemo\ConfuserDemo\bin\Debug\net5.0-windows\Confused" baseDir="E:\File\WorkFile\ConfuserExTest\ConfuserDemo\ConfuserDemo\bin\Debug\net5.0-windows" xmlns="http://confuser.codeplex.com"><module path="ConfuserDllDemo.dll">inherit="false"><protection id="rename"><argument name="mode" value="reversible" /><argument name="generatePassword" value="true" />protection></rule></module><module path="ConfuserDemo.dll" /><module path="ConfuserDllDemo2.dll">inherit="false"><protection id="constants" /><protection id="ctrl flow" /><protection id="rename"><argument name="mode" value="reversible" /><argument name="generatePassword" value="true" />protection></rule></module><probePath>C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\5.0.17</probePath><probePath>C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.17</probePath><probePath>C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\5.0.17</probePath> </project>
2.4 集成到MSBuild
ConfuserEx提供了ConfuserEx.CIL.exe工具,可以运行ConfuserEx.CIL.exe执行代码混淆。所以可以通过csproj配置MSBuild事件或者通过bat脚本执行ConfuserEx.CIL.exe工具等方法实现xxxxx执行混淆。
其基本命令为:
Confuser.CLI.exe <path to project file>
以下是两种方式的示例:
-
方式一:通过bat脚本执行ConfuserEx.CIL.exe工具
..\release\tool\ConfuserEx.CIL.exe Your_ConfuderExProjectPath.crproj -
方式二:通过csproj配置MSBuild事件
-
csproj配置如下:
<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><OutputType>WinExe</OutputType><TargetFramework>net5.0-windows</TargetFramework><UseWPF>true</UseWPF><ConfuserExPath>$(SolutionDir)tools\ConfuserEx\Confuser.CLI.exe</ConfuserExPath><ConfuserConfig>$(SolutionDir)tools\ConfuserEx\ConfuserDemoConfuder.crproj</ConfuserConfig></PropertyGroup><ItemGroup><ProjectReference Include="..\ConfuserDllDemo2\ConfuserDllDemo2.csproj" /><ProjectReference Include="..\ConfuserDllDemo\ConfuserDllDemo.csproj" /></ItemGroup><Target Name="Obfuscate" AfterTargets="Build"><!-- 执行混淆命令 --><Exec Command=""$(ConfuserExPath)" "$(ConfuserConfig)"" /></Target></Project> -
配置解析
-
定义 ConfuserEx 路径
<PropertyGroup><ConfuserExPath>$(SolutionDir)tools\ConfuserEx\Confuser.CLI.exe</ConfuserExPath><ConfuserConfig>$(SolutionDir)tools\ConfuserEx\ConfuserDemoConfuder.crproj</ConfuserConfig> </PropertyGroup>ConfuserExPath:指定 ConfuserEx 的可执行文件路径。$(SolutionDir)是 MSBuild 的内置变量,表示解决方案的根目录。但是注意只有通过解决f- 确保路径中使用的是反斜杠
\,而不是正斜杠/。
ConfuserConfig:指定 ConfuserEx 的配置文件路径。- 配置文件
.crproj包含了混淆规则和保护选项。
- 配置文件
-
定义构建后目标
<Target Name="Obfuscate" AfterTargets="Build"><!-- 执行混淆命令 --><Exec Command=""$(ConfuserExPath)" "$(ConfuserConfig)"" /> </Target>Target:定义一个名为Obfuscate的目标。AfterTargets="Build":表示该目标会在Build目标完成后执行。
Exec:执行命令行指令。Command属性中使用了"来转义双引号,确保路径中包含空格时命令能正确执行。
-
-
2.5 深入设置
2.5.1 保护机制
ConfuserEx 提供了四种混淆预设:Minimum,Normal,Aggressive,Maximum,每种预设,设定了不同的混淆模式,也可以选择不设置预设,自行选择混淆模式。其对应关系如下:
| **Protection保护项** / **preset**预设 | Minimum | Normal | Aggressive | Maximum |
|---|---|---|---|---|
| Name | ✅ | ✅ | ✅ | ✅ |
| Hardening | ✅ | ✅ | ✅ | ✅ |
| Anti Debug | ✅ | ✅ | ✅ | ✅ |
| Anti IL Dasm | ✅ | ✅ | ✅ | ✅ |
| Watermark | ✅ | ✅ | ✅ | ✅ |
| Constants | ✅ | ✅ | ✅ | |
| Reference Proxy | ✅ | ✅ | ✅ | |
| Resources | ✅ | ✅ | ✅ | |
| Anti Dump | ✅ | |||
| Anti Tamper | ✅ | |||
| Invalid Metadata | ✅ | |||
| Type Scramble |
2.5.1.1 ConfuserEx Protection
| 标题 | 简要说明 | 缺点 | 备注 |
|---|---|---|---|
| Hardening 代码硬化保护 | 合并调用指令,隐藏敏感方法,对性能影响小 | 适用范围小,只针对全局静态构造函数 | 可能对方法有要求。实践没起效 |
| Reference Proxy 中间代理保护 | 添加中间方法作为代理,隐藏对类型、方法和字段的引用 | 可能对方法有要求。实践没起效 | |
| Anti Debug 反调试保护 | 保护代码会维护一个专用线程来监控调试器。 | 只适用于应用程序的主程序集,对性能有影响,能够被dnspy移除 | |
| Watermark | 增加一个被ConfuserEx 保护的特性,也没有实质性的保护,默认启用 | ||
| Anti IL Dasm | 给代码添加一个SuppressIldasmAttribute自定义属性 | 没有任何实质性的混淆保护,只是增加礼貌的提示。 | |
| Invalid Metadata | 向模块中添加无效的元数据,阻止反汇编器或反编译器正常打开目标程序。 | 实践没起效,不明原因 | |
| Anti Dump防转储保护 | 不推荐,我们需要能够捕捉Dump以进行分析 | ||
| Rename 重命名保护 | 高效,推荐,支持多种重命名方式 | 可能会影响反射 | 推荐 |
| Anti Tamper反篡改保护 | 确保应用程序的完整性。 | ||
| Type Scramble | 类型混淆保护 | 不明副作用,不推荐使用。使用最好对特定类型启用 | |
| Constants | 使用算法对程序中的常量进行压缩,推荐使用 | 推荐 | |
| Resources 资源保护 | 通过算法对资源进行编码和压缩 |
2.5.2 精细的代码保护
声明式混淆和表达式函数是ConfuserEx中非常重要的功能,它们共同为开发者提供了灵活、精确的代码保护机制。声明式混淆通过ObfuscationAttribute特性直接在代码中指定混淆规则,而表达式函数通过规则模式筛选代码元素,实现更精细的代码保护。
-
声明式混淆
使用System.Reflection.ObfuscationAttribute 特性指导ConcuserEx混淆。
声明式混淆是通过.NET框架提供的
System.Reflection.ObfuscationAttribute特性来指导混淆工具(如ConfuserEx)对代码进行混淆的一种方式。
主要特性
- Exclude:布尔值,表示是否将当前代码元素排除在混淆之外。
Exclude = true:当前代码元素不会被混淆。Exclude = false:当前代码元素会被混淆。
- Feature:字符串值,用于指定混淆工具的特定功能。
- 例如:
Feature = "generate debug symbol: true"表示生成调试符号。 - 也可以组合多个功能,如
Feature = "preset(minimum);+ctrl flow;-anti debug;+rename(mode=letters,flatten=false)"。
- 例如:
- ApplyToMembers:布尔值,表示是否将当前类型的混淆规则应用到其成员。
- 默认值为
true,表示混淆规则会应用到类型的所有成员。
- 默认值为
[assembly: Obfuscation(Exclude = false, Feature = "generate debug symbol: true")]
[assembly: Obfuscation(Exclude = false, Feature = "random seed: Hello!")]
[assembly: Obfuscation(Exclude = false, Feature = "strong name key:C:\\key.pfx")]
[assembly: Obfuscation(Exclude = false, Feature = "strong name key password:hunter2")][assembly: Obfuscation(Exclude = false, Feature = "packer:compressor(key=dynamic)")]
[assembly: Obfuscation(Exclude = false, Feature = "preset(minimum);+ctrl flow;-anti debug;+rename(mode=letters,flatten=false);")][assembly: Obfuscation(Exclude = false, Feature = "namespace('Test'):-rename")]
[assembly: Obfuscation(Exclude = false, Feature = "namespace('LibraryA.Test'):+rename")]
[assembly: Obfuscation(Exclude = false, Feature = "external module:LibraryB.dll")]
namespace Test {[Obfuscation(Exclude = false, Feature = "constants")]class Program {public static void Main() {Console.WriteLine("Hi");}}
}
-
表达式函数
在设置规则时,可以看到一个Pattern,其默认值为true。这里支持设置表达式函数筛选模块中哪些成员进行混淆。通过组合这些函数和运算符,可以灵活地指定规则的适用范围,从而实现更精细的代码保护。

-
规则模式的构成
规则模式由以下部分组成:
- 文字表达(Literal Expressions):
- 布尔文字:
true和false,用于表示逻辑值。 - 字符串文字:用单引号(
')或双引号(")括起来的字符串,支持用反斜杠(\)转义特殊字符。例如:'NS1.MyClass'。
- 布尔文字:
- 运算符:
and:逻辑与。or:逻辑或。not:逻辑非。
- 表达函数(Expression Functions):
- 这些函数用于检查代码元素的属性,返回布尔值(
true或false)。 - 如果返回
true,则表示该规则适用于当前评估的代码元素。
- 这些函数用于检查代码元素的属性,返回布尔值(
- 文字表达(Literal Expressions):
-
支持的函数
1.
decl-type(string)- 功能:检查当前评估的类型(或类型成员的声明类型)是否具有指定的签名。
- 示例:
decl-type("System.Object")返回true,如果当前类型是System.Object。
2.
full-name(string)- 功能:检查当前评估的项目是否具有指定的签名(全名)。
- 示例:
full-name("MyNamespace.MyClass")返回true,如果当前项目的全名是MyNamespace.MyClass。
3.
is-public()- 功能:检查当前评估的项目是否在程序集外部可见(即是否为公共成员)。
- 示例:
is-public()返回true,如果当前项目是公共的。
4.
match(string)- 功能:检查当前评估的项目的签名是否与指定的正则表达式匹配。
- 示例:
match(".*MyClass.*")返回true,如果当前项目的签名包含MyClass。
5.
match-name(string)- 功能:检查当前评估的项目的名称是否与指定的正则表达式匹配。
- 示例:
match-name("MyClass")返回true,如果当前项目的名称是MyClass。
6.
match-type-name(string)- 功能:检查当前评估的类型的名称(或类型成员的声明类型的名称)是否与指定的正则表达式匹配。
- 示例:
match-type-name("MyClass")返回true,如果当前类型的名称是MyClass。
7.
member-type(string)- 功能:检查当前评估的项目是否具有指定的类型。
- 支持的类型:
type、method、field、property、event和module。 - 示例:
member-type("method")返回true,如果当前项目是一个方法。
8.
module(string)- 功能:检查当前评估的项目的模块是否具有指定的名称。
- 示例:
module("MyModule.dll")返回true,如果当前项目的模块名称是MyModule.dll。
9.
name(string)- 功能:检查当前评估的项目的名称是否与指定的名称匹配。
- 示例:
name("MyMethod")返回true,如果当前项目的名称是MyMethod。
10.
namespace(string)- 功能:检查当前评估的类型(或类型成员的声明类型)是否具有指定的命名空间。
- 示例:
namespace("MyNamespace")返回true,如果当前类型的命名空间是MyNamespace。
11.
inherits(string)- 功能:检查当前评估的类型是否继承自指定的类型。
- 示例:
inherits("System.Exception")返回true,如果当前类型继承自System.Exception。
12.
is-type(string)- 功能:检查当前评估的类型是否属于指定的特殊类型。
- 示例:
is-type("delegate")返回true,如果当前类型是一个委托。
-
实践
例如:要匹配程序集
ConfuserDllDemo2中CalculateExpressionFunctions类的Calculate方法,可以使用 ConfuserEx 的规则模式。member-type('method') and name('Calculate') and decl-type('ConfuserDllDemo2.CalculateExpressionFunctions')
-

- 配置示例
<project outputDir="E:\File\WorkFile\ConfuserExTest\ConfuserDemo\ConfuserDemo\bin\Debug\net5.0-windows\Confused" baseDir="E:\File\WorkFile\ConfuserExTest\ConfuserDemo\ConfuserDemo\bin\Debug\net5.0-windows" xmlns="http://confuser.codeplex.com"><module path="ConfuserDemo.dll">inherit="false"><protection id="constants" /></rule></module><module path="ConfuserDllDemo.dll">inherit="false"><protection id="rename"><argument name="mode" value="reversible" /><argument name="generatePassword" value="true" />protection><protection id="harden" /><protection id="constants" /><protection id="ref proxy" /><protection id="invalid metadata" /></rule></module><module path="ConfuserDllDemo2.dll">inherit="false"><protection id="ctrl flow" /><protection id="constants" /><protection id="rename"><argument name="mode" value="reversible" /><argument name="generatePassword" value="true" />protection></rule></module><probePath>C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App\5.0.17</probePath><probePath>C:\Program Files\dotnet\shared\Microsoft.NETCore.App\5.0.17</probePath><probePath>C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\5.0.17</probePath> </project>
2.6 使用建议
-
建议启用重命名保护、常量保护
高效,对性能影响小
<protection id="constants" /> <protection id="rename"><argument name="mode" value="reversible" /><argument name="generatePassword" value="true" /> protection> -
结合使用声明式混淆和表达式函数和对核心或敏感代码进行混淆
-
注意避免重命名可能会进行反射的方法
相关文章:
C# 混淆代码工具--ConfuserEx功能与使用指南
目录 1 前言1.1 可能带来的问题 2 ConfuserEx2.1 简介2.2 功能特点2.3 基本使用方法2.4 集成到MSBuild2.5 深入设置2.5.1 保护机制2.5.1.1 ConfuserEx Protection 2.5.2 精细的代码保护主要特性1. decl-type(string)2.full-name(string)3. is-public()4. match(string)5. match…...
使用PyTorch实现目标检测边界框转换与可视化
一、引言 在目标检测任务中,边界框(Bounding Box)的坐标表示与转换是核心基础操作。本文将演示如何: 实现边界框的两种表示形式(角点坐标 vs 中心坐标)之间的转换 使用Matplotlib在图像上可视化边界框 验…...
nlp面试重点
深度学习基本原理:梯度下降公式,将损失函数越来越小,最终预测值和实际值误差比较小。 交叉熵:-p(x)logq(x),p(x)是one-hot形式。如果不使用softmax计算交叉熵,是不行的。损失函数可能会非常大,…...
欢乐力扣:反转链表二
文章目录 1、题目描述2、思路 1、题目描述 反转链表二。 给你单链表的头指针 head 和两个整数 left 和 right ,其中 left < right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 2、思路 参考官方题解,基本思路…...
2025最新系统 Git 教程(七)(完结)
第4章 分布式Git 4.1 分布式 Git - 分布式工作流程 你现在拥有了一个远程 Git 版本库,能为所有开发者共享代码提供服务,在一个本地工作流程下,你也已经熟悉了基本 Git 命令。你现在可以学习如何利用 Git 提供的一些分布式工作流程了。 这一…...
14-大模型微调和训练之-Hugging Face 模型微调训练(基于 BERT 的中文评价情感分析(二分类))
1. datasets 库核心方法 1.1. 列出数据集 使用 datasets 库,你可以轻松列出所有 Hugging Face 平台上的数据集: from datasets import list_datasets # 列出所有数据集 all_datasets list_datasets() print(all_datasets)1.2. 加载数据集 你可以通过…...
聊透多线程编程-线程基础-4.C# Thread 子线程执行完成后通知主线程执行特定动作
在多线程编程中,线程之间的同步和通信是一个常见的需求。例如,我们可能需要一个子线程完成某些任务后通知主线程,并由主线程执行特定的动作。本文将基于一个示例程序,详细讲解如何使用 AutoResetEvent 来实现这种场景。 示例代码…...
论文阅读笔记——Reactive Diffusion Policy
RDP 论文 通过 AR 提供实时触觉/力反馈;慢速扩散策略,用于预测低频潜在空间中的高层动作分块;快速非对称分词器实现闭环反馈控制。 ACT、 π 0 \pi_0 π0 采取了动作分块,在动作分块执行期间处于开环状态,无法及时响…...
ISIS协议(动态路由协议)
ISIS基础 基本概念 IS-IS(Intermediate System to Intermediate System,中间系统到中间系统)是ISO (International Organization for Standardization,国际标准化组织)为它的CLNP(ConnectionL…...
大数据(7.1)Kafka实时数据采集与分发的企业级实践:从架构设计到性能调优
目录 一、实时数据洪流下的技术突围1.1 行业需求演进曲线1.2 传统方案的技术瓶颈 二、Kafka实时架构设计精要2.1 生产者核心参数矩阵2.1.1 分区策略选择指南 2.2 消费者组智能负载均衡 三、实时数据管道实战案例3.1 电商大促实时看板3.2 工业物联网预测性维护 四、生产环境性能…...
UniApp 实现兼容 H5 和小程序的拖拽排序组件
如何使用 UniApp 实现一个兼容 H5 和小程序的 九宫格拖拽排序组件,实现思路和关键步骤。 一、完整效果图示例 H5端 小程序端 git地址 二、实现目标 支持拖动菜单项改变顺序拖拽过程实时预览移动位置拖拽松开后自动吸附回网格兼容 H5 和小程序平台 三、功能…...
C,C++,C#
C、C 和 C# 是三种不同的编程语言,虽然它们名称相似,但在设计目标、语法特性、运行环境和应用场景上有显著区别。以下是它们的核心区别: 1. 设计目标和历史 语言诞生时间设计目标特点C1972(贝尔实验室)面向过程&#…...
MySQL | 三大日志文件
Undo Log(回滚日志) 实现原理与分类 原理:Undo Log 记录的是数据修改前的旧值,通过这些旧值可以将数据恢复到修改之前的状态。它采用的是逻辑日志,即记录的是如何撤销操作,而不是物理数据的实际值。 分类…...
【网络协议】WebSocket讲解
目录 webSocket简介 连接原理解析: 客户端API 服务端API(java) 实战案例 (1)引入依赖 (2)编写服务端逻辑 (3)注册配置类 (4)前端连接 WebSocket 示例…...
啥是Spring,有什么用,既然收费,如何免费创建SpringBoot项目,依赖下载不下来的解决方法,解决99%问题!
一、啥是Spring,为啥选择它 我们平常说的Spring指的是Spring全家桶,我们为什么要选择Spring,看看官方的话: 意思就是:用这个东西,又快又好又安全,反正就是好处全占了,所以我们选择它…...
一天时间,我用AI(deepseek)做了一个配色网站
前言 最近在开发颜色搭配主题的相关H5和小程序,想到需要补充一个web网站,因此有了这篇文章。 一、确定需求 向AI要答案之前,一定要清楚自己想要做什么。如果你没有100%了解自己的需求,可以先让AI帮你理清逻辑和思路,…...
Day14:关于MySQL的索引——创、查、删
前言:先创建一个练习的数据库和数据 1.创建数据库并创建数据表的基本结构 -- 创建练习数据库 CREATE DATABASE index_practice; USE index_practice;-- 创建基础表(包含CREATE TABLE时创建索引) CREATE TABLE products (id INT PRIMARY KEY…...
Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(二)
Pytorch深度学习框架60天进阶学习计划 - 第41天:生成对抗网络进阶(二) 7. 实现条件WGAN-GP # 训练条件WGAN-GP def train_conditional_wgan_gp():# 用于记录损失d_losses []g_losses []# 用于记录生成样本的多样性(通过类别分…...
Spring - 13 ( 11000 字 Spring 入门级教程 )
一: Spring AOP 备注:之前学习 Spring 学到 AOP 就去梳理之前学习的知识点了,后面因为各种原因导致 Spring AOP 的博客一直搁置。。。。。。下面开始正式的讲解。 学习完 Spring 的统一功能后,我们就进入了 Spring AOP 的学习。…...
Spring Cloud Alibaba微服务治理实战:Nacos+Sentinel深度解析
一、引言 在微服务架构中,服务发现、配置管理、流量控制是保障系统稳定性的核心问题。Spring Cloud Netflix 生态曾主导微服务解决方案,但其部分组件(如 Eureka、Hystrix)已进入维护模式。 Spring Cloud Alibaba 凭借 高性能、轻…...
设计模式之迭代器模式:遍历的艺术与实现
引言 迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种顺序访问聚合对象中各个元素的方法,而又不暴露其底层实现。迭代器模式将遍历逻辑与聚合对象解耦,使得我们可以用统一的方式处理不同的集合结构。…...
红宝书第三十六讲:持续集成(CI)配置入门指南
红宝书第三十六讲:持续集成(CI)配置入门指南 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、什么是持续集成? 持续集成(CI)就像咖啡厅的…...
Java—HTML:3D形变
今天我要介绍的是在Java HTML中CSS的相关知识点内容之一:3D形变(3D变换)。该内容包含透视(属性:perspective),3D变换,3D变换函数以及案例演示, 接下来我将逐一介绍&…...
什么是音频预加重与去加重,预加重与去加重的原理是什么,在什么条件下会使用预加重与去加重?
音频预加重与去加重是音频处理中的两个重要概念,以下是对其原理及应用条件的详细介绍: 1、音频预加重与去加重的定义 预加重:在音频信号的发送端,对音频信号的高频部分进行提升,增加高频信号的幅度,使其在…...
免费下载 | 2025清华五道口:“十五五”金融规划研究白皮书
《2025清华五道口:“十五五”金融规划研究白皮书》的核心内容主要包括以下几个方面: 一、五年金融规划的重要功能与作用 凝聚共识:五年金融规划是国家金融发展的前瞻性谋划和战略性安排,通过广泛听取社会各界意见,凝…...
微信小程序实战案例 - 餐馆点餐系统 阶段 4 - 订单列表 状态
✅ 阶段 4 – 订单列表 & 状态 目标 展示用户「我的订单」列表支持状态筛选(全部 / 待处理 / 已完成)支持分页加载和实时刷新使用原生组件编写 ✅ 1. 页面结构:文件结构 pages/orders/├─ index.json├─ index.wxml├─ index.js└─…...
如何为C++实习做准备?
博主介绍:程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章,首发gzh,见文末👇…...
【docker】--部署--安装docker教程
文章目录 环境方法一:脚本安装方法二:手动安装**步骤 1:卸载旧版本(如有)****步骤 2:更新系统并安装依赖****步骤 3:添加 Docker 官方 GPG 密钥****步骤 4:设置 Docker 仓库****步骤…...
【开发记录】服务外包大赛记录
参加服务外包大赛的A07赛道中,最近因为频繁的DEBUG,心态爆炸 记录错误 以防止再次出现错误浪费时间。。。 2025.4.13 项目在上传图片之后 会自动刷新 没有等待后端返回 Network中的fetch /upload显示canceled. 然而这是使用了VS的live Server插件才这样&…...
Cesium.js(6):Cesium相机系统
Camera表示观察场景的视角。通过操作摄像机,可以控制视图的位置、方向和角度。 帮助文档:Camera - Cesium Documentation 1 setView setView 方法允许你指定相机的目标位置和姿态。你可以通过 Cartesian3 对象来指定目标位置,并通过 orien…...
