diff --git a/source/_posts/ASP.NET Core.md b/source/_posts/ASP.NET Core.md index 4424653..f95b6ff 100644 --- a/source/_posts/ASP.NET Core.md +++ b/source/_posts/ASP.NET Core.md @@ -4,6 +4,7 @@ date: 2021-03-23 10:30:31 author: 文永达 permalink: asp-net-core/ top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg +tags: .NET --- # IDE智能提示优化 @@ -20,7 +21,7 @@ dotnet tool install -g islocalizer `.net6`的汉化包已经有现成的了,可以直接进行安装 ```shell -islocalizer install auto -m net6.0 -l zh-cn +islocalizer install auto -m net6.0 -l zh-cn ``` 工具会自动从`github`下载对应的包进行安装(可能需要访问加速)。 @@ -134,7 +135,7 @@ docker ps cd /usr/local/jenkins_home/workspace/XiaodaERP_NetCore echo $PWD docker image build -f ./XiaodaERP/Dockerfile -t xiaodaerp/netcore . -docker images +docker images docker run --name xiaodaerp/netcore -p 7274:80 -d xiaodaerp/netcore ``` @@ -475,7 +476,7 @@ http { ``` - 如果`$http_upgrade`的值与`default`不匹配(通常是指`$http_upgrade`未设置或未匹配任何其他条件),则将`$connection_upgrade`设置为`upgrade`。 - 如果`$http_upgrade`的值为空字符串(''),则将`$connection_upgrade`设置为`close`。这意味着Nginx将关闭连接而不是升级。 - + 2. 第二个`map`块(微软官方用法): ```conf map $http_connection $connection_upgrade { @@ -483,7 +484,7 @@ http { default keep-alive; } ``` - + - 如果`$http_connection`的值匹配正则表达式`~*Upgrade`(不区分大小写地匹配包含"Upgrade"的值),则将`$connection_upgrade`设置为`$http_connection`的值,通常是`upgrade`。 - 如果没有匹配的值,将`$connection_upgrade`设置为`keep-alive`。这意味着Nginx将保持HTTP连接保持活动状态以进行进一步的请求和响应。 @@ -653,7 +654,7 @@ namespace XiaodaERP.Utils private readonly IConfiguration _configuration; private readonly JwtSecurityTokenHandler _jwtSecurityTokenHandler; public TokenHelper(IConfiguration configuration, JwtSecurityTokenHandler jwtSecurityTokenHandler) - { + { this._configuration = configuration; this._jwtSecurityTokenHandler = jwtSecurityTokenHandler; } @@ -735,7 +736,7 @@ namespace XiaodaERP.Utils public ViewUser Login(string UserName, string PassWord) { var res = _sqlServerDbContext.Users.Include(user => user.Role).FirstOrDefault(x => x.UserName == UserName); - if (res != null) + if (res != null) { if (res.PassWord == Md5Encoding(PassWord)) { @@ -884,7 +885,7 @@ namespace XiaodaERP.Attributes sysActionLog.ActionUserId = us.UserId; Console.WriteLine(us.username); sysActionLog.ActionUserName = us.username; - } + } sysActionLog.ActionTime = DateTime.Now; } _sqlServerDbContext.SysActionLogs.Add(sysActionLog); @@ -997,7 +998,7 @@ app.UseIpRateLimiting(); "ClientIdHeader": "X-ClientId", //限制状态码 "HttpStatusCode": 429, - ////IP白名单:支持Ip v4和v6 + ////IP白名单:支持Ip v4和v6 //"IpWhitelist": [ "127.0.0.1", "::1/10", "192.168.0.0/24" ], ////端点白名单 //"EndpointWhitelist": [ "get:/api/license", "*:/api/status" ], @@ -1071,13 +1072,13 @@ app.UseIpRateLimiting(); using (var serviceScope = app.Services.CreateScope()) { var services = serviceScope.ServiceProvider; - + // get the IpPolicyStore instance var ipPolicyStore = services.GetRequiredService(); // seed IP data from appsettings ipPolicyStore.SeedAsync().GetAwaiter().GetResult(); - + var clientPolicyStore = services.GetRequiredService(); clientPolicyStore.SeedAsync().GetAwaiter().GetResult(); } @@ -1141,16 +1142,16 @@ public class CustomIpRateLimitMiddleware : IpRateLimitMiddleware private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); private readonly IIpRateLimitLogService _ipRateLimitLogService; - - public CustomIpRateLimitMiddleware(RequestDelegate next, IProcessingStrategy processingStrategy, - IOptions options, IIpPolicyStore policyStore, IRateLimitConfiguration config, + + public CustomIpRateLimitMiddleware(RequestDelegate next, IProcessingStrategy processingStrategy, + IOptions options, IIpPolicyStore policyStore, IRateLimitConfiguration config, ILogger logger, IIpRateLimitLogService ipRateLimitLogService) : base(next, processingStrategy, options, policyStore, config, logger) { _ipRateLimitLogService = ipRateLimitLogService; } - + // 重写 用于记录被阻止的请求的日志 - protected override void LogBlockedRequest(HttpContext httpContext, ClientRequestIdentity identity, + protected override void LogBlockedRequest(HttpContext httpContext, ClientRequestIdentity identity, RateLimitCounter counter, RateLimitRule rule) { // base.LogBlockedRequest(httpContext, identity, counter, rule); @@ -1260,9 +1261,9 @@ public class HelloQuartzJob : IJob { public Task Execute(IJobExecutionContext context) { - return Task.Factory.StartNew(() => + return Task.Factory.StartNew(() => { - Console.WriteLine("Hello Quartz.Net"); + Console.WriteLine("Hello Quartz.Net"); }) } } @@ -1276,12 +1277,12 @@ Job不是孤立存在的,它需要执行的参数,这些参数如何传递 public class SayHelloJob : IJob { public string UserName { get; set; } - + public Task Execute(IJobExecutionContext context) { - return Task.Factory.StartNew(() => + return Task.Factory.StartNew(() => { - Console.WriteLine($"Hello {UserName}!"); + Console.WriteLine($"Hello {UserName}!"); }) } } @@ -1516,7 +1517,7 @@ NLog 配置文件是一个以`nlog`为根节点的 XML 文件。`nlog`节点可 ```xml - + @@ -1577,7 +1578,7 @@ NLog 4.4.2 之后可以使用通配符`*`指定多个文件。例如,` responseStream, ServerCallContext context) { diff --git a/source/_posts/C#.md b/source/_posts/C#.md index 16ad650..8e5fd1e 100644 --- a/source/_posts/C#.md +++ b/source/_posts/C#.md @@ -4,6 +4,7 @@ date: 2021-03-23 10:30:31 author: 文永达 permalink: csharp/ top_img: https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg +tags: .NET --- # 异步编程 @@ -117,30 +118,30 @@ DataTable dt = new DataTable("Table_New"); DataColumn dc = new DataColumn(); dt.Columns.Add(dc); //2. 提供列名,并对列属性进行设置 -DataTable workTable = new DataTable("Customers"); +DataTable workTable = new DataTable("Customers"); //带列名和类型名 -DataColumn workCol = workTable.Columns.Add("CustID", typeof(Int32)); +DataColumn workCol = workTable.Columns.Add("CustID", typeof(Int32)); // 对进行属性设置 workCol.AllowDBNull = false; //列的属性设置为不允许 DBNull 值 workCol.Unique = true; //值约束为唯一 workColumn.AutoIncrement = true; //在表中添加新行时自动递增 workColumn.AutoIncrementSeed = 200; //从值 200 开始并以 3 为增量递增的列 -workColumn.AutoIncrementStep = 3; +workColumn.AutoIncrementStep = 3; column.DefaultValue = 25; // 定义主键:唯一地标识表中的每一行 -workTable.PrimaryKey = new DataColumn[] {workTable.Columns["CustID"]}; -// Or -DataColumn[] columns = new DataColumn[1]; -columns[0] = workTable.Columns["CustID"]; -workTable.PrimaryKey = columns; +workTable.PrimaryKey = new DataColumn[] {workTable.Columns["CustID"]}; +// Or +DataColumn[] columns = new DataColumn[1]; +columns[0] = workTable.Columns["CustID"]; +workTable.PrimaryKey = columns; // 创建表达式列:能够包含根据 同一行 中其他列值或根据表中 多行 的列值计算而得的值 //比如 表达式类型 示例 // 比较 “总计 >= 500” // 计算 "UnitPrice * Quantity" // 聚合 Sum(Price) -workTable.Columns.Add("Total", typeof(Double)); -workTable.Columns.Add("SalesTax", typeof(Double), "Total * 0.086"); +workTable.Columns.Add("Total", typeof(Double)); +workTable.Columns.Add("SalesTax", typeof(Double), "Total * 0.086"); ``` ## 复制DataTable @@ -198,11 +199,11 @@ ObjectTable.EndLoadData(); # 反射(Reflection) > 反射是.NET中的重要机制,通过反射可以得到\*.exe或\*.dll等程序集内部的接口、类、方法、字段、属性、特性等信息,还可以动态创建出类型实例并执行其中的方法。 -> +> > 反射指程序可以访问、检测和修改它本身状态或行为的一种能力。 -> +> > 程序集包含模块,而模块包含类型,类型又包含成员。反射则提供里封装程序集、模块和类型的对象。 -> +> > 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。 通过反射获取类型 @@ -210,21 +211,21 @@ ObjectTable.EndLoadData(); 描述:有三种类型 1. 通过`typeof`获取某个值的类型 - + ```c# System.Type personType=typeof(Person); System.Type heroType=typeof(Framework.Hero); ``` 2. 通过一个对象获取该对象所对应的类的类型、 - + ```c# Framework.hero dmxy =new Framework.hero(); System Type=dmxy.GetType(); ``` -3. 通过类的名称字符串获取对应的类型 - +3. 通过类的名称字符串获取对应的类型 + ```c# System.Type strType =System.Type.GetType("Person"); System.Type strType =System.Type.GetType("Framework.Hero"); @@ -284,7 +285,7 @@ private void ShowTypeField() - GetMember(),GerMembers() -1.返回MemberInfo类型,用于取得该类的所有成员的信息 +1.返回MemberInfo类型,用于取得该类的所有成员的信息 2.GetConstructor(),GetConstructors() -返回ConstructorInfo类型,用于取得该类构造函数的信息 @@ -312,4 +313,4 @@ private void ShowTypeField() ## foreach -### +### diff --git a/source/_posts/Claude-Code.md b/source/_posts/Claude-Code.md index 31f3f5b..1ec7e0b 100644 --- a/source/_posts/Claude-Code.md +++ b/source/_posts/Claude-Code.md @@ -3,6 +3,8 @@ title: Claude Code date: 2026-02-27 14:05:22 tags: [AI, 效率工具] categories: 开发工具 +permalink: claude-code/ +tag: AI --- ## 简介 @@ -65,7 +67,7 @@ export ANTHROPIC_API_KEY="your-api-key-here" **方式二:配置文件** ```json -{ +{ "env": { "ANTHROPIC_AUTH_TOKEN": "YOUR_API_KEY", "ANTHROPIC_BASE_URL": "https://coding.dashscope.aliyuncs.com/apps/anthropic", @@ -95,13 +97,13 @@ claude --model claude-haiku-4-5-20251001 ## 常用命令 -| 命令 | 说明 | -|------|------| -| `claude` | 启动交互式对话 | -| `claude -p "问题"` | 直接提问并获取答案 | -| `claude --model <模型名>` | 指定模型 | -| `claude --version` | 查看版本 | -| `claude --help` | 查看帮助 | +| 命令 | 说明 | +| ------------------------- | ------------------ | +| `claude` | 启动交互式对话 | +| `claude -p "问题"` | 直接提问并获取答案 | +| `claude --model <模型名>` | 指定模型 | +| `claude --version` | 查看版本 | +| `claude --help` | 查看帮助 | ## MCP 配置 @@ -116,11 +118,11 @@ claude mcp add fetch -- uvx mcp-server-fetch ### 常用 MCP 服务 -| 服务 | 命令 | 说明 | -|------|------|------| -| fetch | `claude mcp add fetch -- uvx mcp-server-fetch` | 网页内容抓取 | +| 服务 | 命令 | 说明 | +| ---------- | ------------------------------------------------------------------------- | ------------ | +| fetch | `claude mcp add fetch -- uvx mcp-server-fetch` | 网页内容抓取 | | filesystem | `claude mcp add filesystem -- npx -y @anthropic-ai/mcp-server-filesystem` | 文件系统访问 | -| git | `claude mcp add git -- npx -y @anthropic-ai/mcp-server-git` | Git 操作 | +| git | `claude mcp add git -- npx -y @anthropic-ai/mcp-server-git` | Git 操作 | 配置好的 MCP 配置文件实例 `~/.claude.json` diff --git a/source/_posts/Entity-Framework-Core.md b/source/_posts/Entity-Framework-Core.md new file mode 100644 index 0000000..39ed894 --- /dev/null +++ b/source/_posts/Entity-Framework-Core.md @@ -0,0 +1,7 @@ +--- +title: Entity Framework Core +date: 2026-04-15 12:35:21 +tags: .NET +permalink: entity-framework-core/ +--- + diff --git a/source/_posts/大数据.md b/source/_posts/大数据.md index a12b8fb..2d63c62 100644 --- a/source/_posts/大数据.md +++ b/source/_posts/大数据.md @@ -1,7 +1,7 @@ --- title: 大数据 date: 2025-08-03 22:53:51 -tags: +tags: 大数据 --- # Apache Doris @@ -341,13 +341,13 @@ ulimit -n 65536 ] } } - + ``` 执行任务 ```bash cd datax -python ./bin/datax.py mysql_2_doris_t_base_material.json +python ./bin/datax.py mysql_2_doris_t_base_material.json ``` diff --git a/source/_posts/大模型.md b/source/_posts/大模型.md index d8d8c43..5e88032 100644 --- a/source/_posts/大模型.md +++ b/source/_posts/大模型.md @@ -1,7 +1,7 @@ --- title: 大模型 date: 2025-02-18 10:06:57 -tags: +tags: AI --- # Ollama @@ -379,7 +379,7 @@ pip install -U "huggingface_hub" hf download cyankiwi/Nemotron-Orchestrator-8B-AWQ-8bit --local-dir /AI/hf/models/cyankiwi/Nemotron-Orchestrator-8B-AWQ-8bit ``` -- +- # Code-forge @@ -538,7 +538,7 @@ conda activate ai # Anaconda -> +> ## 安装 @@ -561,7 +561,7 @@ source ~/.zshrc conda env list ``` - + 2. 查看conda下的包 ```she @@ -602,7 +602,7 @@ source ~/.zshrc conda remove --name env_name package_name ``` - + ## 问题 @@ -612,24 +612,24 @@ source ~/.zshrc ```shell #在个人环境下修改 conda activate gatkenv - + conda env config vars set PS1='($CONDA_DEFAULT_ENV)[\u@\h \W]$' #重启环境就ok了 - + conda deactivate - + conda activate gatkenv - + #在所有的虚拟环境下修改,这个命令的意思是在~/.condarc下添加一行 - + conda config --set env_prompt "({default_env})[\u@\h \W]$" - + #取消设置 - + conda config --remove-key env_prompt ``` - + 2. conda 安装后没有将conda置为默认 @@ -638,23 +638,23 @@ source ~/.zshrc This will activate conda on startup and change the command prompt when activated. If you'd prefer that conda's base environment not be activated on startup, run the following command when conda is activated: - + conda config --set auto_activate_base false - + You can undo this by running `conda init --reverse $SHELL`? [yes|no] [no] >>> - + You have chosen to not have conda modify your shell scripts at all. To activate conda's base environment in your current shell session: - + eval "$(/home/user/miniconda3/bin/conda shell.YOUR_SHELL_NAME hook)" - + To install conda's shell functions for easier access, first activate, then: - + conda init - + Thank you for installing Miniconda3! - + ``` 则执行以下shell @@ -688,7 +688,7 @@ source ~/.zshrc 下载试试:如果两都能看到下载源,那么就更改成功。 ```mipsasm - conda install + conda install ``` ##### Linux系统下: @@ -705,22 +705,22 @@ source ~/.zshrc ```ini [global] - index-url=https://pypi.tuna.tsinghua.edu.cn/simple - [install] + index-url=https://pypi.tuna.tsinghua.edu.cn/simple + [install] trusted-host=pypi.tuna.tsinghua.edu.cn - disable-pip-version-check = true - timeout = 6000 + disable-pip-version-check = true + timeout = 6000 ``` 下载试试: ```bash - pip install + pip install ``` # Jupyter Notebook -> +> ## 全局 @@ -946,7 +946,7 @@ CUDA_VISIBLE_DEVICES=0 vllm serve /mnt/e/modelscope/deepseek-ai/DeepSeek-R1-Dist ### Qwen/Qwen3-4B ```shell -vllm serve ~/modelscope/Qwen/Qwen3-4B --api-key token-abc123 --enable-reasoning --reasoning-parser deepseek_r1 --max_model_len=2048 --gpu_memory_utilization=0.85 +vllm serve ~/modelscope/Qwen/Qwen3-4B --api-key token-abc123 --enable-reasoning --reasoning-parser deepseek_r1 --max_model_len=2048 --gpu_memory_utilization=0.85 ``` #### supervisor @@ -1166,7 +1166,7 @@ cd LLaMA-Factory # 安装所需依赖 pip install -e ".[torch,metrics]" # 启动webui -python src/webui.py +python src/webui.py ``` ## 微调 @@ -1255,24 +1255,24 @@ print(f'Model is quantized and saved at "{quant_path}"') ## **1. 核心原理对比** -| **架构类型** | **核心思想** | **典型模型** | -| -------------- | ------------------------------------------------------------ | -------------------------- | -| **Dense** | 所有参数对所有输入生效,每层神经元全连接,统一处理所有输入特征。 | GPT-3、BERT、LLAMA | +| **架构类型** | **核心思想** | **典型模型** | +| -------------- | ------------------------------------------------------------------------------------ | -------------------------- | +| **Dense** | 所有参数对所有输入生效,每层神经元全连接,统一处理所有输入特征。 | GPT-3、BERT、LLAMA | | **MoE** | 将模型划分为多个“专家”(子网络),每个输入仅激活部分专家,通过路由机制动态分配任务。 | Switch Transformer、GShard | -| **Hybrid-MoE** | 混合Dense和MoE层:部分层全连接,部分层采用MoE结构,平衡计算效率和模型容量。 | DeepSeek-MoE、Google GLaM | +| **Hybrid-MoE** | 混合Dense和MoE层:部分层全连接,部分层采用MoE结构,平衡计算效率和模型容量。 | DeepSeek-MoE、Google GLaM | ------ ## **2. 技术特点与性能对比** -| **维度** | **Dense** | **MoE** | **Hybrid-MoE** | -| -------------- | --------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------- | +| **维度** | **Dense** | **MoE** | **Hybrid-MoE** | +| -------------- | --------------------------------------------------- | ----------------------------------------------------------------- | ----------------------------------------- | | **参数规模** | 总参数量=激活参数量,随层数线性增长。 | 总参数量高(专家数×专家规模),但激活参数量低(仅激活部分专家)。 | 介于两者之间,MoE层数可控。 | -| **计算效率** | 计算成本高(FLOPs与参数量正相关),适合小规模模型。 | 相同参数量下,FLOPs显著降低(仅激活部分专家)。 | 通过调整MoE层比例,灵活平衡计算开销。 | -| **训练稳定性** | 收敛稳定,梯度传播路径简单。 | 路由机制易导致专家负载不均衡,需复杂正则化。 | 稳定性优于纯MoE,但仍需路由优化。 | -| **扩展性** | 参数规模受硬件限制,千亿级后成本陡增。 | 可扩展至万亿参数(如GShard-1.6T),适合超大规模模型。 | 通过局部MoE化实现高效扩展,适配中等规模。 | -| **显存占用** | 高(需存储全部参数梯度)。 | 显存需求更高(专家参数独立存储)。 | 显存介于两者之间,取决于MoE层占比。 | -| **应用场景** | 通用任务、资源受限场景。 | 超大规模预训练、多任务学习。 | 需平衡性能与成本的工业级应用。 | +| **计算效率** | 计算成本高(FLOPs与参数量正相关),适合小规模模型。 | 相同参数量下,FLOPs显著降低(仅激活部分专家)。 | 通过调整MoE层比例,灵活平衡计算开销。 | +| **训练稳定性** | 收敛稳定,梯度传播路径简单。 | 路由机制易导致专家负载不均衡,需复杂正则化。 | 稳定性优于纯MoE,但仍需路由优化。 | +| **扩展性** | 参数规模受硬件限制,千亿级后成本陡增。 | 可扩展至万亿参数(如GShard-1.6T),适合超大规模模型。 | 通过局部MoE化实现高效扩展,适配中等规模。 | +| **显存占用** | 高(需存储全部参数梯度)。 | 显存需求更高(专家参数独立存储)。 | 显存介于两者之间,取决于MoE层占比。 | +| **应用场景** | 通用任务、资源受限场景。 | 超大规模预训练、多任务学习。 | 需平衡性能与成本的工业级应用。 | ------ @@ -1309,11 +1309,11 @@ print(f'Model is quantized and saved at "{quant_path}"') ## **4. 典型应用场景** -| **架构** | **适用场景** | -| -------------- | ------------------------------------------------------------ | +| **架构** | **适用场景** | +| -------------- | ----------------------------------------------------------------------------------- | | **Dense** | - 中小规模模型(<100B参数) - 对训练稳定性要求高的任务(如对话生成) - 边缘设备推理 | -| **MoE** | - 超大规模预训练(>500B参数) - 多任务/多模态学习 - 云端高性能计算集群 | -| **Hybrid-MoE** | - 中等规模模型(100B-500B参数) - 需兼顾通用性与效率的工业场景 - 长文本处理任务 | +| **MoE** | - 超大规模预训练(>500B参数) - 多任务/多模态学习 - 云端高性能计算集群 | +| **Hybrid-MoE** | - 中等规模模型(100B-500B参数) - 需兼顾通用性与效率的工业场景 - 长文本处理任务 | ------