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

02020304 .NET Core核心基础组件04-配置系统、Json文件配置、选项方式读取、扁平化环境变量其它配置源

02020304 .NET Core核心基础组件04-配置系统、Json文件配置、选项方式读取、扁平化&环境变量&其它配置源

1. 配置系统入门(视频2-32)

  • 传统Web.config配置的缺点,之前DI讲过。
  • 为了兼容,仍然可以使用web.config和ConfigurationManage类,但不推荐。
  • .NET中的配置系统支持丰富的配置源,包括文件(json、xml、ini等)、注册表、环境变量、命令行、Azure key value等,此外还可以配置自定义配置源。
    • 可以跟踪配置的改变,可以按照优先级覆盖。

2. Json文件配置

2.1 Json文件配置步骤
  • step1 → 创建Json文件,文件名随意。比如config.json,设置如果教新则复制。参考备注。
    • 注意要将Json文件的属性设定为较新则复制,这样文件才会拷贝到和.exe文件同级的目录底下。这样程序运行的时候,是读取的的与.exe文件同级的Json文件,不再加载源代码里面的Json文件。
  • step2 → NuGet安装两个包
    • Microsoft.Extensions.Configuration → 配置框架的包。配置框架可以读Json文件、xml文件、ini文件、数据库、环境变量来读。
    • Microsoft.Extensions.Configuration.Json → 读Json文件的包
  • step3 → 编写代码,先用简单的方式读取配置。
  • 拓展知识
    • 15-20年前,用xml配置。一层套一层,贼恶心
    • 现在流行Json格式来做配置。
    • 自行网上查阅Json格式的资料。
2.2 Json格式
{"a":"3","b":"5",c:{"d":"7","ids":[3,5]},} // 可以多级嵌套
2.3 新建Json文件
  • 项目名称 → 右键 → 添加 → 新建项 → 文本文件 → 名称 → config.json
// 新建:config.json
{"name": "yzk","age": "18","qinway": {"address":"wuxi","port":"80"}
}说明:需要把config.json文件的属性修改为如果较新则复制。
2.4 引入两个包
install-package Microsoft.Extensions.Configuration // 老师演示包的版本:5.0.0。截止2025.09.10,该包的版本为:9.0.9
install-package Microsoft.Extensions.Configuration.Json // 老师演示包的版本:5.0.0。截止2025.09.10,该包的版本为:9.0.9
2.5 读取配置原始方法
图片链接丢失
  • ConfigurationBuilder类 → 用来对Configuration进行配置的构建器。
  • AddJsonFile方法 → 加载配置文件
    • config.json → 文件名
    • optional:false → optional是可选参数。
      • false表示文件不存在就不报错。文件存在我就读,文件不存在不报错也不读。
      • 对于初学者建议设定为true,避免因为Json文件名、代码写的有问题导致写错了发现不了。
    • reloadOnChange → 文件修改之后是否立即加载新的配置。
      • true表示不需要程序重启,配置文件修改之后,立即读到新的配置文件。建议为true。
      • false表示如果配置文件更改了,需要重启程序才能加载新的配置。
  • config对象 → 通过该对象读取配置。IConfigurationRoot是配置项读取器。
  • Json里面所有值默认为字符串类型。
  • config.GetSection("proxy:address").Value → 用于读取多级结构。
2.6 读取Json文件示例
using Microsoft.Extensions.Configuration;
using System;namespace JsonConfig
{class Program{static void Main(string[] args){ConfigurationBuilder configBuider = new ConfigurationBuilder();configBuider.AddJsonFile("config.json", optional : true, reloadOnChange : true);IConfigurationRoot configRoot = configBuider.Build();string name = configRoot["name"];Console.WriteLine($"name = {name}");string addr = configRoot.GetSection("qinway:address").Value;Console.WriteLine($"addr = {addr}");Console.ReadLine();}}
}控制台输出:
name = yzk
addr = wuxi
2.7 关于config.json文件说明
图片链接丢失
  • 此时如果我们手动的修改拷贝到.exe目录下的config.json文件,然后直接双击.exe文件,程序输出的是修改后的内容。
2.8 绑定读取配置
图片链接丢失
install-package Microsoft.Extensions.Configuration.Binder // 老师演示包的版本:5.0.0。截止2025.09.10,该包的版本为:9.0.9
—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—
using Microsoft.Extensions.Configuration;
using System;namespace JsonConfig
{class Program{static void Main(string[] args){ConfigurationBuilder configBuider = new ConfigurationBuilder();configBuider.AddJsonFile("config.json", optional : true, reloadOnChange : true);IConfigurationRoot configRoot = configBuider.Build();Qinway qinway = configRoot.GetSection("Qinway").Get<Qinway>(); // @1Console.WriteLine($"{qinway.Address}, {qinway.Port}");Console.ReadLine();}}class Qinway // 类名要和配置名一致,貌似不区分大小写规范。{public string Address { get; set; }public int Port { get; set; }}
}控制台输出
wuxi, 80说明:
1. 在@1处GetSection("Qinway"),这里的Qinway和config.json里面的qinway对应,不区分大小写。
2. 在@1处Get<Qinway>()是个泛型方法,Qinway是类名。
2.8 将Json文件根节点读出来
using Microsoft.Extensions.Configuration;
using System;namespace JsonConfig
{class Program{static void Main(string[] args){ConfigurationBuilder configBuider = new ConfigurationBuilder();configBuider.AddJsonFile("config.json", optional : true, reloadOnChange : true);IConfigurationRoot configRoot = configBuider.Build();Config cg = configRoot.Get<Config>();Console.WriteLine($"{cg.Name}, {cg.Qinway.Port}");Console.ReadLine();}}class Qinway{public string Address { get; set; }public int Port { get; set; }}class Config // 根节点类{public string Name { get; set; }public int Age { get; set; }public Qinway Qinway { get; set; }}
}控制台输出:
yzk, 80

3. 选项方式读取(视频2-33)

3.1 选项方式读取用法
图片链接丢失
  • IOptions → 读取配置,不会读到新的值。即使配置文件改了,通过这种方式读的仍然是旧的值。
    • 只有在程序重启之后,读的才是新的值。
  • IOptionsMonitor → 读取配置,会读到新的值。
  • IOptionsSnapshot → 读取配置,会读到新的值。截图有错误,更正为IOptionsSnapshot 会在同一个范围之内。
3.2 演示代码
图片链接丢失
3.3 项目目录
JsonConfig → 解决方案名称
├── JsonConfig  → .NET Core 5.0控制台项目。
|   ├── config.json → Json文件
|   ├── TestController.cs → DI注入用的类,用来读取整个Json文件
|   ├── TestPart.cs → DI注入用的类,用来读取Json文件某个节点
└── └──Program.cs → 包含Main方法,程序的入口。需要安装如下5个包:
microsoft.extensions.configuration
microsoft.extensions.configuration.binder
microsoft.extensions.configuration.json
microsoft.extensions.options
microsoft.extensions.dependencyinjection
3.4 源码
// config.json
{"name": "yzk","age": "18","qinway": {"address":"wuxi","port":"80"}
}
—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—
// TestController.cs
using Microsoft.Extensions.Options;
using System;namespace JsonConfig
{class TestController{public readonly IOptionsSnapshot<Config> optConfig;public TestController(IOptionsSnapshot<Config> optConfig){this.optConfig = optConfig;}public void Test() // 测试读取{Config config = optConfig.Value;Console.WriteLine(config.Age);Console.WriteLine("**********************************");Console.WriteLine(config.Age);}}
}
—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—
// TestPart.cs
using Microsoft.Extensions.Options;
using System;namespace JsonConfig
{class TestPart{public readonly IOptionsSnapshot<Qinway> optQinway;public TestPart(IOptionsSnapshot<Qinway> optQinway){this.optQinway = optQinway;}public void TestRead() // 测试读取{Console.WriteLine(optQinway.Value.Address);Console.WriteLine(optQinway.Value.Port);}}
}
—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—
// Program.cs
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;namespace JsonConfig
{class Program{static void Main(string[] args){ServiceCollection services = new ServiceCollection();services.AddScoped<TestController>(); // 往DI容器注册services.AddScoped<TestPart>(); // 往DI容器注册ConfigurationBuilder configBuider = new ConfigurationBuilder();configBuider.AddJsonFile("config.json", optional : true, reloadOnChange : true);IConfigurationRoot configRoot = configBuider.Build();// @1 把Config对象绑定到根节点services.AddOptions().Configure<Config>(e => configRoot.Bind(e));// @2 把Qinway对象绑定到qinway节点services.AddOptions().Configure<Qinway>(e => configRoot.GetSection("qinway").Bind(e));/** 在@1处和@2处的代码可以写成如下形式* services.AddOptions()*      .Configure<Config>(e => configRoot.Bind(e));*      .Configure<Qinway>(e => configRoot.GetSection("qinway").Bind(e));* 即:可以连续点来绑定节点。*/using (var sp = services.BuildServiceProvider()){var c1 = sp.GetRequiredService<TestController>();c1.Test();var c2 = sp.GetRequiredService<TestPart>();c2.TestRead();}Console.ReadLine();}}class Qinway // 单个节点类{public string Address { get; set; }public int Port { get; set; }}class Config // 根节点类{public string Name { get; set; }public int Age { get; set; }public Qinway Qinway { get; set; }}
}控制台输出:
18
**********************************
18
wuxi
80
3.5 演示修改本地配置文件后输出结果
// 修改Program.cs文件
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;namespace JsonConfig
{class Program{static void Main(string[] args){ServiceCollection services = new ServiceCollection();services.AddScoped<TestController>(); // 往DI容器注册services.AddScoped<TestPart>(); // 往DI容器注册ConfigurationBuilder configBuider = new ConfigurationBuilder();configBuider.AddJsonFile("config.json", optional : true, reloadOnChange : true);IConfigurationRoot configRoot = configBuider.Build();// @1 把Config对象绑定到根节点services.AddOptions().Configure<Config>(e => configRoot.Bind(e));// @2 把Qinway对象绑定到qinway节点services.AddOptions().Configure<Qinway>(e => configRoot.GetSection("qinway").Bind(e));/** 在@1处和@2处的代码可以写成如下形式* services.AddOptions()*      .Configure<Config>(e => configRoot.Bind(e));*      .Configure<Qinway>(e => configRoot.GetSection("qinway").Bind(e));* 即:可以连续点来绑定节点。*/using (var sp = services.BuildServiceProvider()){while(true){using (var scope = sp.CreateScope()) // 使用IOptionsSnapshot配置时,在下一个Scope生效。{var c1 = scope.ServiceProvider.GetRequiredService<TestController>();c1.Test();var c2 = scope.ServiceProvider.GetRequiredService<TestPart>();c2.TestRead();}Console.WriteLine("点击任意键继续");Console.ReadLine();}}}}class Qinway // 单个节点类{public string Address { get; set; }public int Port { get; set; }}class Config // 根节点类{public string Name { get; set; }public int Age { get; set; }public Qinway Qinway { get; set; }}
}step1 → 控制台输出:
18
**********************************
18
wuxi
80
点击任意键继续step2 → 修改本地配置文件为
{"name": "yzk","age": "88","qinway": {"address":"wuhan","port":"60"}
}step3 → 控制台输出:
18
**********************************
18
wuxi
80
点击任意键继续注意:这里示例失败了,不纠结,继续推进课程。

4. 其它配置提供者(视频2-34)

4.1 命令行方式配置
图片链接丢失
4.2 项目目录
JsonConfig → 解决方案名称
├── JsonConfig  → .NET Core 5.0控制台项目。
|   ├── config.json → Json文件
|   ├── TestController.cs → DI注入用的类,用来读取整个Json文件
|   ├── TestPart.cs → DI注入用的类,用来读取Json文件某个节点
└── └──Program.cs → 包含Main方法,程序的入口。需要安装如下6个包:
microsoft.extensions.configuration
microsoft.extensions.configuration.binder
microsoft.extensions.configuration.json
microsoft.extensions.options
microsoft.extensions.dependencyinjection
microsoft.extensions.configuration.commandline
4.3 启动命令行位置
图片链接丢失
4.4 源代码
  • 在3.4基础上修改Program.cs文件
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;namespace JsonConfig
{class Program{static void Main(string[] args) // 这里args是命令行参数,不懂。{ServiceCollection services = new ServiceCollection();services.AddScoped<TestController>();services.AddScoped<TestPart>();ConfigurationBuilder configBuider = new ConfigurationBuilder();// configBuider.AddJsonFile("config.json", optional : true, reloadOnChange : true);configBuider.AddCommandLine(args); // 将args传入。IConfigurationRoot configRoot = configBuider.Build();services.AddOptions().Configure<Config>(e => configRoot.Bind(e)).Configure<Qinway>(e => configRoot.GetSection("qinway").Bind(e));using (var sp = services.BuildServiceProvider()){while(true){using (var scope = sp.CreateScope()){var c1 = scope.ServiceProvider.GetRequiredService<TestController>();c1.Test();Console.WriteLine("改一下age");Console.ReadKey();c1.Test();var c2 = scope.ServiceProvider.GetRequiredService<TestPart>();c2.TestRead();}Console.WriteLine("点击任意键继续");Console.ReadLine();}}}}class Qinway{public string Address { get; set; }public int Port { get; set; }}class Config{public string Name { get; set; }public int Age { get; set; }public Qinway Qinway { get; set; }}
}控制台输出:
0
**********************************
0
改一下age
4.5 命令行启动程序并且输入配置
图片链接丢失
  • 说明:命令行只有在程序运行时才能配置,不存在改配置的问题,这样调试比较麻烦。
4.6 通过VS进行配置
  • 项目名称 → 属性 → 调试 → 应用程序参数。
图片链接丢失
  • 输出结果对比
4.4中控制台输出:
0
**********************************
0
改一下age在VS 2019中配置了应用程序参数之后,控制台输出:
18
**********************************
18
改一下age

5. 扁平化配置

图片链接丢失
  • 对于命令行来讲,都是名称=值这样的形式,无法嵌套结构。此时通过扁平化来配置。

6. 环境变量配置

图片链接丢失

7. 其它配置源

图片链接丢失

结尾

书籍:ASP.NET Core技术内幕与项目实战

视频:https://www.bilibili.com/video/BV1pK41137He

著:杨中科

ISBN:978-7-115-58657-5

版次:第1版

发行:人民邮电出版社

※敬请购买正版书籍,侵删请联系85863947@qq.com※

※本文章为看书或查阅资料而总结的笔记,仅供参考,如有错误请留言指正,谢谢!※

相关文章:

02020304 .NET Core核心基础组件04-配置系统、Json文件配置、选项方式读取、扁平化环境变量其它配置源

02020304 .NET Core核心基础组件04-配置系统、Json文件配置、选项方式读取、扁平化&环境变量&其它配置源 1. 配置系统入门(视频2-32)传统Web.config配置的缺点,之前DI讲过。 为了兼容,仍然可以使用web.config和ConfigurationManage类,但不推荐。 .NET中的配置系统…...

md格式

markdown # 一级标题 ## 二级标题 ### 三级标题 #### 四级标题*斜体* **粗体** ***粗斜体*** ~~删除线~~ `print("hello world)` ==高亮== 一级标题 二级标题 三级标题 四级标题 斜体 粗体 粗斜体 删除线 print("hello world) 高亮>一层嵌套引用 >>二层嵌套…...

CSP-S模拟20

前言: 一场通过乱搞获得如下成绩的比赛。\(T1:\) 思路: 一场情况超级复杂(bushi)的大模拟(应该可以这么叫吧?)直接先这样这样,在那样那样,最后在叽里呱啦就好了。 嘿嘿,开个玩笑嘛。首先,我们知道一定至少从\(S\)跳到\(S\)到\(T\)的那条链上,这样我们可以就\(S\)跳…...

第7篇、Kafka Streams 与 Connect:企业级实时数据处理架构实践指南

Kafka Streams 与 Kafka Connect:企业级实时数据处理架构实践指南 技术背景与适用场景 在现代数据架构中,实时数据处理已成为企业数字化转型的核心能力。Apache Kafka作为分布式流处理平台,提供了两个关键组件:Kafka Streams:轻量级流处理库,支持有状态实时计算 Kafka Co…...

Day16编写一个计算机程序

package method; import java.util.Scanner; public class Demo6 {/**作业:*1 写四个方法,加减乘除*2 利用循环+switch进行用户交互*3 传递需要操作的两个数*4 输出结果*/public static void main(String[] args) {Scanner scanner = new Scanner(System.in);boolean sco…...

迷宫最短路径

2025.9.11 曹立 题目内容 给定一个迷官的地图,地图是一个二维矩阵,其中0表示通道,1表示墙壁,S表示起点,E表示终点。你需要从起点S出发,通过最路径到达终点E,返回最短路径的步数,如果无法到达终点,则返回-1,迷宫中会有虫洞,用数字2表示,成对出现,你走入虫洞可以穿越…...

千靶日记-0003

day-3 今天事情不多,继续打靶,这个靶机关键点不多 Hommie靶机复盘 https://t.bilibili.com/1111299672388927491?share_source=pc_native...

COMSOL 6.3 下载+安装教程+激活教程:一站式下载安装激活操作说明

COMSOL 6.3 作为主流多物理场仿真软件,是工程设计与科研的重要工具。不少用户在下载安装时会遇权限不足、许可证无效等问题。本教程围绕安全下载渠道、 step-by-step 安装步骤、常见问题解决展开,还附入门实操,助你高效完成安装,快速上手软件。目录一、先搞懂:COMSOL 6.3 …...

20231427-田泽航-Linux命令实践

1...

202207_BUGKU_二维码GIF

GIF分离,QRCODE,ZXING库Tags:GIF分离,QRCODE,ZXING库 0x00. 题目0x01. WP 01 分离GIF工具路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件/Tools 工具名称:风二西_GIF图片分离工具.zip 02 使用脚本批量扫描 exp.py #将指定文件夹下的文件…...

20250910NOIP模拟赛

20250910NOIP模拟赛 A 题意: 有 \(n\) 个小球分为红、蓝两种颜色排成一排,现在你可以进行若干次操作,每次操作选择任意 \(R+B\) 个小球,使其有 \(R\) 个红球,\(B\) 个蓝球,把这些小球全部染为白色,且在该选择序列中,最左侧的球到最右侧的球之间不得存在已经被染为白色的…...

分治 NTT 一则

le0n 太强大!1...

U604938 你不准卡 O(n sqrt n log L) 其中 L log L = sqrt n

U604938 你不准卡 O(n sqrt n log L) 其中 L log L = sqrt n 如题目所言,这道题的出现就是为此,所以不要说什么 wyy。 首先是空间上卡掉了 \(n\sqrt n\) 空间的做法,然后因为值域限制卡掉了回滚莫队(也许只是我菜才不会写?)。总之再有什么我也没法了,就这样。 如果你要卡…...

20250906

20250906T1 推倒骨牌 多维护几个东西就能直接倍增了。不要开 long long。代码 #include <iostream> #include <algorithm> #include <string.h> #define lowbit(x) ((x) & (-(x))) using namespace std; int n, q; struct BIT {pair<int, int> bi…...

【2025最新推荐】AI大模型API中转站 | 国内直连ChatGPT/Claude/Gemini全系API接口服务

作为一名开发者,你是否曾为了使用ChatGPT、Claude等AI模型而苦恼?网络问题、支付困难、成本昂贵...这些痛点让很多国内开发者望而却步。今天给大家推荐简易API中转站,解决这些问题。 1.什么是API中转站? API中转站是专为国内开发者打造的AI模型API中转服务平台。简单来说,…...

在用灵魂去感受另一个灵魂的震颤

【用灵魂去感受另一个灵魂的震颤】...

html怎么写

html 1. 基本结构 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title></title> <bod…...

谁拿了谁的伞?

我:要去上课了,哎,不想去上课,我想在工位带着。算了,还是去吧。我的伞放在工位门口左边,光线很黑,拿错了雨伞,拿成了学长的雨伞去上课。一到教室,刚坐下,老师就开始说,不让坐最后一排啊,你们几个快做前面去,然后我就拿着我的伞坐到了前面。这课是真无聊,我准备上…...

NSSCTF-misc

签到 用emoji-aes解码,key为GAME ☀☺⏩☺⌨☂☃✅ 得到flag{10ve_4nd_Peace} GIF有点大GETwbStego4open 隐写 首先,wbStego4open会把插入数据中的每一个ASCII码转换为二进制形式 然后,把每一个二进制数字再替换为十六进制的20或09,20代表0,09代表1 最后,将这些被转换后的…...

百粉粉福

应机房某人要求,说要搞一个百粉粉福,决定先做一个 \(Q&A\) ,其它的请各位想想可以做什么别的粉福。 \(Q&A\) 可以直接回复这篇帖子或直接私信我,到时候会发到你谷主页,文章跟博客园,支持一下呗QwQ \(Q&A\)Q:瑞平我 @Misty_PostA:感觉是非常可爱的学弟,平时…...

lc1024-视频拼接

难度:中等(中期)题目描述给定一些区间和一个数字 time,找到能覆盖 [0, time] 的最少区间数示例 输入:clips = [[0,2],[4,6],[8,10],[1,9],[1,5],[5,9]], time = 10 输出:3 解释:选 [0,2], [8,10], [1,9]输入:clips = [[0,1],[1,2]], time = 5 输出:-1 解释:找不到返回…...

多元统计分析1

多元统计分析1 大三开始学习多元统计分析,首先使一些预备知识,基本是就是一些高代,数分,概率论的有些难度的知识。我个人觉得这些知识还是有难度的,尤其是距离高代已经过去了一年时间了。 概率论这里就是一些随机变量的均值,方差的性质。由于涉及到了多变量的协方差矩阵一…...

OI界的梗

%%% 在C++“%”是取模的意思,简称模,是膜拜大佬的意思(%越多,语气越强) 蒟蒻 他本是一种可以吃的植物(就是魔芋),可是因为他谐音“巨弱”,所以,他被用作自嘲,但没人会说别人是蒟蒻的,这是一种基础礼仪 神犇(读ben(第一声))、巨佬 神犇是大牛的升级版 巨佬是大佬…...

202404_QQ_ZIP嵌套

ZIP,嵌套Tags:ZIP,嵌套 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202404_QQ_ZIP嵌套.zip 0x01. WP打开txt文件发现文件头为504b0304 导入到010Editor另存为tmp.zip 打开tmp.zip发现里面是另一个txt 打开…...

无重复字符的最长子串-leetcode

题目描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长 的长度。 示例 1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2: 输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子…...

两个常见的 计数问题 trick

两个非常有用的计数 trick,虽然感觉比较典。 计数转 01 有一件事情:\(v=\sum_{i=1}^V [v \geq i]\),\(V\) 为值域。看着好像没有什么突破性的转变,但是当我们对很多东西进行统计的时候,如果对于 有多少个大于等于 某个值 \(v\) 是好做的话,那么我们就可以做这个转化:\(\…...

搜维尔科技:Xsens人形机器人拟人动作AI训练,提升机器人工作精度与效率

随着人工智能与机器人技术的深度融合,人形机器人正从实验室走向工业制造、医疗护理、公共服务等真实场景。然而,要让机器人真正"像人类一样工作",其动作的流畅性、精准度与环境适应性仍是技术突破的关键。Xsens动作捕捉系统通过创新的拟人化动作AI训练方案,为机器…...

文件轮转机制

文件轮转机制 基于文件的持久化队列(File-based Persistent Queue),利用 双文件切换(Double Buffering / File Rotation) 来保证批处理、高效写入、并发安全。 方法主要实现的机制双文件切换(Double Buffering / File Rotation) • 通过 inputFile(正在写的新数据) 和…...

202110_绿盟杯_隐藏的数据

ZIP,伪加密,密码爆破,DOCX文件Tags:ZIP,伪加密,密码爆破,DOCX文件 0x00. 题目 附件路径:https://pan.baidu.com/s/1GyH7kitkMYywGC9YJeQLJA?pwd=Zmxh#list/path=/CTF附件 附件名称:202110_绿盟杯_隐藏的数据.zip 0x01. WP 01 打开压缩包,发现有word文件和zip文件,得到flag1…...

【初赛】图 - Slayer

欧拉图 在图论中,欧拉路径是经过图中每条边恰好一次的路径,欧拉回路是经过图中每条边恰好一次的回路。 如果一个图中存在欧拉回路,则这个图被称为欧拉图;如果一个图中不存在欧拉回路但是存在欧拉路径,则这个图被称为半欧拉图。 对于连通图 G,以下三个性质是互相等价的: …...

线上课

反射反射就是在程序运行时 获取到类的信息(成员变量 成员方法 构造方法) 并操作对象的属性和方法 获取class对象就可以拿到类的信息 获取class对象Class.forName(全类名) 类名.class 对象.getClass字节码是唯一的 无论哪种方式获取 都是同一个class对象当通过反射拿到的构造…...

弹窗、抽屉、当前页和新开页,到底怎么选? - 智慧园区

弹窗、抽屉、当前页、新开页,看似只是交互容器的选择,实则关乎信息密度、操作路径与用户心智的精准匹配。本文从B端产品的真实场景出发,拆解四种容器的使用逻辑与适配原则,帮助产品经理构建更清晰的设计判断框架。在B端产品的设计实践中,你是否曾面临过以下的灵魂拷问?你…...

POJ 2566 Bound Found

题面描述: 美国航空航天局(该机构似乎正经历叛逆期:"我就要用英尺,才不用米呢!")接收并数字化了极可能来自地外文明的信号。每个信号包含两部分:一个由n个整数值组成的序列和一个非负整数t。虽然细节不便透露,但研究人员发现信号编码了两个整数值。这两个值可…...

搜维尔科技:Haption触觉力反馈系统,沉浸式远程呈现、数字孪生、混合现实和移动远程机器人

为您的项目提供技术和经验 自2001年以来,HAPTION力反馈设备已被用于广泛的研究应用。 您是否希望在您的项目中使用HAPTION力反馈设备 您是否正在寻找国内厂商来申请新项目 增强人机交互-远程操作,实现人机交互 图片 图片 通过最先进的社交、视觉、触觉、音频和嗅觉技术的出色…...

飞书免费企业邮箱推荐

1、品牌背书:成长技术最快的企业,稳定性拉满 对于中小企业而言,一款稳定、安全且免费的企业邮箱,不仅能降低运营成本,更能提升团队沟通效率。飞书作为字节跳动旗下的协同办公平台,其推出的免费企业邮箱服务,凭借 “零成本、强协同、高安全” 的特点,成为越来越多企业的…...

CF1140F Extending Set of Points

还是比较好想的一个题。 首先你这个 \((x, y)\) 看着就很像连边关系,这是很重要的一步,一般这种二元关系都可以想着上图。 然后你发现,所谓的扩展不过就是在能加上边的地方都加上边,就是一个连通块都连满了。 这个时候注意到原图是一个二分图,能加的边不过就是所有左部点向…...

Lark免费企业邮箱推荐

Lark是飞书的国际版 Lark(飞书)的免费企业邮箱是中小型团队高效协作的理想选择,尤其适合追求低成本、高集成度的企业。以下是基于最新功能和用户反馈的深度推荐:一、核心功能与优势免费版基础能力全面无广告纯净体验:不同于部分免费邮箱,Lark 免费版全程无广告干扰,专注…...

CMP 40HX在PVE9.0配置vGPU

在PVE9.0下CMP 40HX使用NVIDIA vGPU19.0显卡虚拟化拆分技术 本文参考文章:https://yangwenqing.com/archives/2729/最近看了很多vGPU的文章,心里面痒痒,就想搞一块矿卡来玩玩。在选择方面考虑了P106-100、CMP 30HX 、CMP 40HX,最终选则了CMP 40HX。 如果你需要玩vGPU,百元…...

耶日奈曼:置信区间与假设检验的奠基者

img { display: block; margin-left: auto; margin-right: auto } table { margin-left: auto; margin-right: auto } 在20世纪统计学的发展历程中,耶日奈曼(Jerzy Neyman, 1894–1981)无疑是一位具有里程碑意义的人物。他不仅在理论层面上为数理统计学奠定了严格的推断体系…...

尚硅谷后台管理系统

尚硅谷后台管理系统商品添加业务逻辑添加品牌,是新的数据 请求url中,可以将添加品牌和编辑品牌放在同一个函数中,根据data.id判断是否是新数据<el-uploadclass="avatar-uploader"action="/api/admin/product/fileUpload":show-file-list="false…...

Web语音聊天室中录音无声问题分析与解决方案

问题背景 在开发Web端语音聊天室时,我们使用了声网RTC实现实时语音通信,同时需要在前端实现本地录音功能。在实际应用中,发现偶尔会出现录制的音频文件有时长但没有声音的问题。 问题现象聊天室正常使用声网RTC进行语音通信 前端使用原生JS的MediaRecorder API进行录音 录制…...

25.9.11随笔联考总结

考试 开考通读题面,感觉题目有点难啊。最后还是决定顺序开题。想了 5 min 确定 T1 是暴力容斥于是直接写,感觉要处理的东西不少,写了快半小时写了 3+KB。大样例没过,那我不炸了?唉清空数组的时候有个东西漏了,改了就过了。还真没炸。T2 感觉挺神秘的,我看了一眼会了暴力…...

sites(legal - Gon

杂(去除了一些应被和谐的**g++ new.cpp -o new && ./newtaskkill -f -im studentmain.execode ~/.bashrc alias clock=cd /home/gon_tata/下载/code && ./clock # source ~/.bashrchttps://www.cnblogs.com/zouwangblog/p/11541835.html //theme https://cn…...

vue3 使用 i18n-auto-extractor库 实现国际化

一、安装:npm i i18n-auto-extractor 二、更新国际化:npx i18n-auto-extractor;需要手动更新,会在文件中生成以下文件,也可以手动对文件翻译进行更改三、使用: import { $at } from "i18n-auto-extractor"; $at(nav.meta?.title || "");四、切换: …...

[题解]CF1404B Tree Tag

CF1404B Tree Tag ~ Codeforces 我们发现,若 \(db\le 2\times da\),则说明 Bob 不能跳到 Alice 控制范围的另一侧,只能被 Alice 不断逼近到某个叶子节点,从而输掉。 不过有些情况下,Bob 的最大移动距离不是 \(db\)。因为其移动会受制于树上最长的路径,即直径 \(D\)。 所以…...

20231314许城铭课上测试:Linux命令实践(AI)

ls:列出当前目录的文件和文件夹。 ls -l:以详细格式列出(显示权限、所有者、大小等)。 ls -a:列出所有文件,包括隐藏文件(以 . 开头)。ls -lh:以易读的格式(如 KB、MB)显示文件大小。 ls /home:列出指定目录(如 /home)的内容。 ls -t:按修改时间排序列出。 ls -…...

解决推理能力瓶颈,用因果推理提升LLM智能决策

从ChatGPT到现在的智能体AI这个跨越说明了一个关键转变。ChatGPT本质上是个聊天机器人,生成文本回应;而AI智能体能够自主完成复杂任务——销售、旅行规划、航班预订、找装修师傅、点外卖,这些都在它的能力范围内。 目前我们解决用户任务时,主要是让大语言模型(LLM)做任务…...

reLeetCode 热题 100-3 最长连续序列 - MKT

reLeetCode 热题 100-3 最长连续序列 自己 版本吧1 不合格 class Solution { public:int longestConsecutive(vector<int>& nums) {if (nums.empty()) return 0;//1 数组排序// 2 遍历 i 0-(length(num)-1)// num[i+1]-num[i]==1 创建map 添加到后面// 否则单独创…...

123

测试测试...

pdf在纯html5移动端下不显示

需要使用pdf.js插件 https://github.com/mozilla/pdf.jshtml部分<div class="pdf-container"><div class="viewer"><div class="loading text-center mb-4" id="loading">正在加载PDF文档...</div><div cl…...