自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(168)
  • 资源 (13)
  • 收藏
  • 关注

原创 在 ABP vNext 框架中,面向切面编程(AOP,Aspect-Oriented Programming)的详解

ABP vNext框架通过动态代理和拦截器实现面向切面编程(AOP),解决横切关注点问题。核心机制基于Castle DynamicProxy,在方法调用前后插入拦截逻辑,内置功能包括事务管理、审计日志、权限验证、缓存和异常处理。开发者可通过特性(如[UnitOfWork]、[Authorize])快速应用这些功能,无需修改业务代码。此外,ABP支持自定义拦截器,只需实现IInterceptor接口并注册即可扩展AOP功能,实现业务特定逻辑(如耗时统计)。这种设计保持了代码的纯净性和可维护性。

2025-10-22 11:40:13 667

原创 c# ABP vNext 框架详解及其模块化开发思想介绍

ABP vNext 摘要 ABP vNext 是基于 ASP.NET Core 的开源企业级框架,采用模块化架构和领域驱动设计(DDD)。核心特性包括: 模块化开发 - 支持功能模块独立开发与复用 DDD支持 - 提供分层架构和领域模型实现 基础设施集成 - 内置认证授权、数据访问、多租户等企业级功能 依赖注入 - 深度集成ASP.NET Core DI容器 框架通过模块类(AbpModule)定义模块生命周期,自动处理模块依赖和加载顺序。开发实践建议按领域分层组织代码,通过接口定义模块边界,实现高内聚低耦

2025-10-22 10:42:23 1102

原创 Redis 缓存击穿、缓存雪崩和缓存穿透

缓存击穿与缓存雪崩的解决方案 缓存击穿指热点Key失效瞬间引发大量请求穿透到数据库,可通过分布式锁、热点Key永不过期或预热+随机过期时间解决。缓存雪崩则是大量Key同时失效或缓存集群宕机导致数据库压力骤增,可通过过期时间随机化、多级缓存、熔断降级等方案应对。两者都需避免请求集中穿透到数据库,但解决方案各有侧重:击穿针对单个热点Key,雪崩处理大规模Key失效问题。合理设计缓存策略可有效提升系统稳定性。

2025-10-21 14:00:41 436

原创 C# 基础——async/await 的实现原理与最佳实践

C#中的async/await通过状态机机制将异步代码转换为类似同步的写法,底层依赖任务并行库实现非阻塞操作。最佳实践包括:优先返回Task而非async void;库代码使用ConfigureAwait(false)避免死锁;始终用await代替阻塞等待;正确处理异步异常;遵循命名规范。理解其原理可编写高效无死锁的异步代码,避免常见陷阱。

2025-10-21 00:16:56 918

原创 C#基础——GC(垃圾回收)的工作流程与优化策略

C#的垃圾回收(GC)机制通过代际回收(0/1/2代)自动管理内存,采用标记-清理-压缩流程回收无用对象。优化策略包括减少对象创建(使用值类型/对象池)、处理大对象碎片、避免内存泄漏(及时释放资源)以及选择合适的GC模式(工作站/服务器)。高性能场景需监控GC行为,通过工具诊断问题,重点降低内存分配压力,确保应用性能。

2025-10-20 23:28:03 1104

原创 C# 基础——装箱和拆箱

摘要: C#中的装箱将值类型转换为引用类型(如int转为object),需在堆上分配内存并复制数据;拆箱则是反向操作,需类型检查并复制值回栈。两者因涉及堆分配和数据复制,存在性能开销。常见于非泛型集合(如ArrayList)操作,可通过泛型集合(如List<T>)避免。开发中应减少不必要的装箱拆箱以优化性能,同时理解其内存机制有助于排查效率问题。核心区别在于装箱是值→引用(堆分配),拆箱是引用→值(类型验证+复制)。

2025-10-20 23:15:08 368

原创 C# 基础——值类型与引用类型的本质区别

摘要:C#中值类型和引用类型的核心区别在于数据存储方式。值类型直接存储数据,通常分配在栈上,赋值时复制完整数据;引用类型存储对象地址,数据在堆上,赋值时复制引用。值类型生命周期由作用域管理,引用类型由GC回收。值类型包括基本类型、结构体和枚举,引用类型包括类、接口等。特殊地,string虽是引用类型但表现出值类型特性。理解这些差异对避免编程错误至关重要。

2025-10-20 23:12:15 786

原创 C# 基础——多态的实现方式

C#多态实现方式解析:通过继承+虚方法重写(virtual/override)、抽象类+抽象方法(abstract)、接口实现(interface)以及隐藏基类方法(new关键字)四种方式实现"同一接口不同实现"。其中虚方法重写和抽象类实现动态绑定(运行时确定),接口实现跨类别行为契约,而new关键字实现静态绑定(编译时确定)。虚方法重写和接口实现最为常用,能够提升代码扩展性和可维护性。

2025-10-20 22:58:34 778

原创 C# 设计模式——单例模式

C#单例设计模式确保类仅有一个实例,并提供全局访问点。核心实现包括:私有构造、静态私有实例和公共访问点。常见实现方式有:1)饿汉式(线程安全但非延迟加载);2)懒汉式(延迟加载但非线程安全);3)双重检查锁定(线程安全且延迟加载);4)静态内部类(推荐方式,简洁无锁);5).NET4+的Lazy<T>(最佳实践)。注意防范反射攻击和序列化问题,确保单例唯一性。不同方案在延迟加载、线程安全和实现复杂度上各有特点,可根据场景选择。

2025-10-20 18:08:24 852

原创 C# 设计模式——工厂模式

C#中的工厂设计模式通过封装对象创建过程,实现"使用"与"创建"解耦,主要包括三种形式:简单工厂模式通过一个工厂类根据参数创建对象,但违反开闭原则;工厂方法模式为每个产品创建对应工厂,符合开闭原则但会增加类数量;抽象工厂模式用于创建相关联的产品族(如跨平台UI控件),能保证产品之间的兼容性。三种模式各有适用场景,能有效提高代码的灵活性和可维护性。

2025-10-20 17:33:08 496

原创 C# 设计模式——观察者

/ 观察者接口:定义更新方法// 接收主题通知时调用,参数为主题传递的数据(这里是温度)// 主题接口:定义管理观察者和通知的方法// 添加观察者// 移除观察者// 通知所有观察者。

2025-10-20 17:19:34 947

原创 什么是单点登录(SSO)?用 C# 实现一个简单的单点登录

单点登录(SSO)是一种统一认证机制,允许用户通过一次登录访问多个相互信任的系统,无需重复验证。其核心组件包括认证中心、子系统和身份令牌,通过JWT等令牌实现分布式认证。本文详细介绍了SSO的原理、价值及C#实现方案,基于ASP.NET Core和JWT搭建认证中心与子系统,涵盖JWT配置、登录接口实现等关键步骤,提供完整的代码示例,帮助开发者快速构建企业级统一认证系统。

2025-10-18 23:59:16 144

原创 python OpenCV+Milvus 实现人脸比对介绍,以及实现流程及代码

本文提出一种基于OpenCV和Milvus的人脸比对方法,通过结合计算机视觉与向量数据库实现高效人脸识别。系统采用OpenCV进行人脸检测与图像预处理,利用face_recognition库提取128维人脸特征向量,并借助Milvus向量数据库存储和快速检索特征数据。文章详细介绍了技术原理、环境配置和核心实现,包括Milvus集合的初始化、特征向量索引构建、相似度搜索等关键步骤。该方法通过余弦相似度计算实现人脸匹配,支持自定义阈值判定,具有部署简单、检索高效的特点,为人脸识别应用提供了完整的解决方案。

2025-10-18 22:16:28 771

原创 c# .NET core多线程的详细讲解

.NET Core 多线程编程摘要: 本文系统介绍了.NET Core多线程技术,涵盖基础概念(线程、并发/并行)、核心API及适用场景。重点讲解了三种实现方式:1) Thread类提供底层线程控制,适合精细化管理;2) ThreadPool优化线程复用,适合短期任务;3) Task异步模型(推荐)简化编程,支持返回值。文章通过代码示例演示各API用法,对比分析优缺点,指导开发者根据CPU/I/O密集型等场景选择合适方案,提升程序性能与资源利用率。

2025-10-18 21:20:12 1007

原创 c# 基础——泛型的详细介绍

C# 泛型技术通过类型参数(如<T>)实现代码复用和类型安全,解决了传统方法中代码冗余(为每种类型重复编码)和使用object导致的类型不安全与性能损耗(装箱拆箱)问题。泛型支持类、方法、接口和委托四种形式:泛型类(如GenericStack<T>)可创建通用数据结构;泛型方法(如Swap<T>)实现类型无关的操作;泛型接口(如IComparable<T>)提供类型安全的契约;泛型委托(如Func<T>)支持多态方法调用。泛型在编译时进行类型检查,

2025-10-18 19:21:05 1079

原创 Entity Framework Core和SqlSugar的区别,详细介绍

EFCore和SqlSugar是.NET生态中两大主流ORM框架,各有特点。EFCore由微软开发,强调领域驱动设计,适合复杂业务场景,提供完整的实体映射和迁移功能,但学习成本较高。SqlSugar是国内开发的轻量级ORM,注重性能与开发效率,支持灵活SQL控制和批量操作,适合快速开发项目。两者在查询语法、事务管理、多库支持等方面存在差异:EFCore基于LINQ实现类型安全查询,SqlSugar提供更接近SQL的链式API。性能方面,SqlSugar在批量处理上更优。选择时需考虑项目规模,大型系统推荐EF

2025-10-18 17:51:34 831

原创 C# 中,依赖注入(DI)的实现方式

在 C# 中,依赖注入(DI)的实现方式主要分为手动注入和通过 IoC 容器注入(如 .NET 自带的 Microsoft.Extensions.DependencyInjection)。以下是具体代码示例,涵盖常用场景和最佳实践。

2025-10-18 11:24:08 1032 1

原创 docker (56) Recv failure: Connection reset by peer

docker 运行一个spring boot的api接口项目,在虚拟机上测试:报错:(56) Recv failure: Connection reset by peer。

2024-02-21 17:11:33 1266

原创 vue前端项目命令框输入npm run serve报error:03000086:digital envelope routines::initialization error错误

vue前端项目命令框输入npm run serve报error:03000086:digital envelope routines::initialization error错误。也可以执行:export NODE_OPTIONS=--openssl-legacy-provider。然后再执行:npm run serve。

2024-02-02 09:30:00 729

原创 supervisorctl重启服务

其中,program配置指定了进程的名字,command指定了启动脚本的路径,autostart和autorestart则表示自动启动和自动重启。startretries指定了尝试启动应用程序的次数,user指定了应用程序运行所用的用户,directory指定了应用程序所在的工作目录,stdout_logfile和stderr_logfile分别指定了应用程序的标准输出和标准错误输出的日志文件。supervisorctl可以帮助我们在Linux服务器上管理和监控运行在后台的进程,包括自动重启服务。

2024-01-29 18:02:34 2852

原创 测试 ASP.NET Core 中间件

正常情况下,中间件会在主程序入口统一进行实例化,这样如果想单独测试某一个中间件就很不方便,为了能测试单个中间件,可以使用单独测试。

2024-01-16 18:25:48 764

原创 .Net Core 使用 AspNetCoreRateLimit 实现限流

上一篇文章介绍过使用.NET 7 自带的中间件可以实现简单的Api限流,但是这个.NET 7以后才集成的中间件,如果你使用的是早期版本的.NET,可以使用第三方库AspNetCoreRateLimit实现Api限流。AspNetCoreRateLimit 是一种 ASP.NET Core 速率限制解决方案,旨在根据 IP 地址或客户端 ID 控制客户端可以向 Web API 或 MVC 应用发出的请求速率。

2024-01-16 15:55:36 2389

原创 ASP.NET Core 的 Web Api 实现限流 中间件

中间件提供速率限制中间件。类提供下列用于限制速率的扩展方法:​​​​​。

2024-01-16 11:16:20 1922 1

原创 asp.net core项目发布到 iis上

我们都知道与传统asp.net 项目比较,ASP.NET Core则完全不同,它并不是运行在IIS的工作进程中,而是独立运行的。它运行于控制台应用程序之中,控制台中则运行了Kestrel Web服务器组件。Kestrel作为一款.NET Web服务器的实现,它在吞吐量性能方面做了很多工作。它可以快速将来自网络的请求接入到应用程序中,但是它仅仅是一个最基本的Web服务器。它没有类似IIS的Web管理服务,也没有IIS那么多的功能。

2024-01-12 18:21:19 922

原创 .NET core 中的Kestrel 服务器

什么是Kestrel?Kestrel 是一个跨平台的Web服务器,会默认在ASP.NET Core 项目模板中对其进行配置。未使用 IIS 托管时,ASP.NET Core 项目模板默认使用 Kestrel。在下面的模板生成的Program.cs中,方法在内部调用。

2024-01-12 11:40:46 4661

原创 .NET 反射的介绍和简单应用

反射还支持的更高级的行为,能在运行时动态创建新类型,并且对这些新类型的操作进行调用。发现信息(如名称、事件处理程序的数据类型、自定义特性、声明类型以及事件的反射的类型),并添加或删除事件处理程序。来定义和加载程序集,加载程序集清单中列出的模块,以及在此程序集中定位一个类型并创建一个它的实例。发现信息(如名称、数据类型、声明类型,反射的类型和属性的只读或可写状态),并获取或设置属性值。发现信息,如参数的名称、数据类型、参数是输入参数还是输出参数以及参数在方法签名中的位置。发现信息,如名称、访问修饰符(如。

2024-01-11 17:26:33 1371

原创 swagger Actions require an explicit HttpMethod binding for Swagger/OpenAPI 3.0报错处理

相关的Attribute。正常逻辑来说那就给每个Action添加HttpMethod呗,但是往往情况就出现在不正常的时候。因为项目是迁移的老项目,先不说私自改了别人代码带来的甩锅问题,公司的WebApi项目很多,这意味着Action很多,如果一个项目一个项目的去找Action添加HttpMethod可是一个不小的工作量,而且开发人员工作繁忙,基本上不会抽出来时间去修改这些的,因为这种只是Swagger不行,,否则就报这一大堆错误。这里的HttpMethod其实就是咱们常用。

2024-01-04 16:59:39 1097

原创 .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式

但是这存在一个问题,不是所有接口会按照定义的数据格式返回,除非每个接口都返回我们自定义的类,这种实现起来不太现实。我们需要不管接口定义的返回类型是什么,最后的结果都是统一的数据格式,需要实现这个功能就需要自定义一个过滤器来实现。附上 ApiResponse.cs IApiResponse.cs 代码。之前写过使用自定义返回类的方式来统一接口数据返回格式,时,把这个响应结果拿出来,再判断是不是。类型来确定这个返回结果是否包装过。没包装的话就给包装一下,就这么简单。在代码中进行判断,当响应的类型是。

2023-12-21 15:41:09 2022 2

原创 .net 隐式自定义类型转换运算符 static implicit operator

public static implicit operator T1(T2 t) static implicit operator static implicit operator static implicit operator

2023-12-21 14:47:42 878

原创 .Net Core webapi RestFul 统一接口数据返回格式

json对象中data是返回的实际结果对象,可以是一个对象、一个list、一个字符串、一个数字......分别实现类带有泛型的 ApiResponse 类和 ApiResponse 类。的隐式转换,所以就完美解决这个问题,大大减少了代码量。注意在泛型类中,使用运算符重载,实现了。中,我们定义了一个运算符重载,实现了。但是整体的json格式要以上面的为准。2、使用过滤器(Filter)实现。类型呀,这不是类型不一致吗?1、自定义一个统一返回类。但这接口的返回值明明是。创建对应的接口和实现类。

2023-12-21 14:02:59 3698 1

原创 Asp.Net Core 项目中常见中间件调用顺序

常用的 AspNetCore 项目中间件有这些,调用顺序如下图所示:

2023-12-21 09:53:19 1544

原创 .Net Attribute 特性 自定义特性(二)

在实际开发中,我们经常看到如MVC中标记在方法上的 [HttpGet] [HttpPost][HttpDelete][HttpPut] ,序列化时标记在类上的 [Serializable] ,使用EF标记属性的 [Key] ,使用特性的地方随处可见。二次升级已完成,看看代码,瞬间心情舒畅。细心的朋友会发现,校验返回的都是true跟false,每次遇到校验不通过的字段后下面的都不再校验了,想要返回所有未校验通过的字段,并告诉调用者,一次性把所有字段都按照格式填好,这样才是我们想要的效果。

2023-12-20 11:40:51 1426

原创 .Net Attribute 什么是特性、预定义特性使用(一)

特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。在.Net 框架提供了两种类型的特性预定义特性和自定义特性。在.net框架内提供了三种预定义特性,经常使用特性或对特性有了解的朋友肯定见到过或用过。obsolete预定义特性。

2023-12-19 17:55:42 1123

原创 .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证

【代码】.NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证。

2023-12-18 17:26:14 1022

原创 .NET Core中鉴权 Authentication Authorization

Authentication:鉴定身份信息,例如用户有没有登录,用户基本信息Authorization:判定用户有没有权限使用框架提供的Cookie鉴权方式1.首先在服务容器注入鉴权服务和Cookie服务支持2.注册鉴权和授权中间件,用于在管道中调用拦截校验鉴权和授权3.在控制器引入特性 [Authorize] ,调用登录接口时使用HttpContext.SignInAsync()写入鉴权信息

2023-12-18 16:48:16 1089

原创 用一个简单的例子教你如何 自定义ASP.NET Core 中间件(一)

中间件是一种装配到应用管道以处理请求和响应的软件。 每个组件:选择是否将请求传递到管道中的下一个组件。可在管道中的下一个组件前后执行工作。请求委托用于生成请求管道。 请求委托处理每个HTTP请求。一句话总结:中间件是比筛选器更底层,更上游的面向切面技术,其性能最高,可处理的应用范围远比过滤器广,如实现网关,URL转发,限流等等。

2023-12-18 15:42:21 525

原创 用一个简单的例子教你如何 自定义ASP.NET Core 中间件(二)

如果没有实现 InvokeAsync 方法运行会报错:“找不到'Hero.Jwt.MyMyMiddleware'类型的中间件的公共'Invoke'或'InvokeAsync'方法。上一章已经说过了,中间件是一种装配到应用管道以处理请求和响应的软件。新建一个静态类:MyMiddlewareExtensions。公共方法,参数必须保持一致,它是中间件执行的入口。新建一个类:MyMiddleware。必须要在构造函数里面申明请求委托。自定义中间件必须要实现。

2023-12-18 15:39:32 531

原创 .NET core JWT身份认证实现

首先我们知道jwt中一定会有的字段有Issuer,Audience,另外jwt有过期时间,所以要有代表生命周期的Lifetime,表示续期的RenewalTime,然后是头字段,是否验证失效时间,是否验证签名等,于是就有了如下结构. JwtConfig.cs在Hero.Jwt中定义一个叫做JwtConfig的类,表示针对jwt的所有配置信息,ciset;set;/// 签名keyset;/// 生命周期set;/// 续期时间set;/// 是否验证生命周期set;/// 验证头字段set;

2023-12-15 18:30:02 2339

原创 垃圾回收 (GC) 在 .NET Core 中是如何工作的?(二)

接上一篇文章GC 会分配堆段,其中每个段都是一系列连续的内存。置于堆中的对象归类为 3 个代系之一:0、1 或 2。代系可确定 GC 尝试在应用不再引用的托管对象上释放内存的频率。编号较低的代系会更加频繁地进行 GC。对象会基于其生存期从一个代系移到另一个代系。随着对象生存期延长,它们会移到较高代系。如前所述,较高代系进行 GC 的频率较低。短期生存的对象始终保留在第 0 代中。例如,在 Web 请求存在期间引用的对象的生存期较短。应用程序级别单一实例通常会迁移到第 2 代。

2023-12-14 15:23:41 1232

原创 垃圾回收 (GC) 在 .NET Core 中是如何工作的?

提起GC大家肯定不陌生,但是让大家是说一下GC是怎么运行的,可能大多数人都不太清楚,这也很正常,因为GC这东西在.NET基本不用开发者关注,它是依靠程序自动判断来释放托管堆的,我们基本不需要主动调用Collect()释放内存,只需要注意对非托管资源进行及时释放就行。,其中每个段都是一系列连续的内存。置于堆中的对象归类为 3 个代系之一:0、1 或 2。代系可确定 GC 尝试在应用不再引用的托管对象上释放内存的频率。编号较低的代系会更加频繁地进行 GC。对象会基于其生存期从一个代系移到另一个代系。

2023-12-14 11:45:26 1743

python 华容道拼图小游戏

内容概要:使用python 的pygame模块 编写的一个华容道拼图小游戏,另外还使用的模块有 os:用于加载图片文件、random:用于生成随机数组、tkinter :用于窗口美化,弹窗提示

2022-10-28

mysql-connector-net-6.8.3

mysql-connector-net-6.8.3解决错误“具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序未在计算机或应用程序配置文件中注册或无法加载。有关详细信息,请参阅内部异常。”

2018-06-04

冷笑话sql数据

冷笑话sql数据,Mysql数据库,有2000多条数据。。。。

2018-09-30

自动聊天数据,机器人聊天数据,MySql数据

这是有2万条智能聊天数据的sql语句,包含了基本的日常对话、谚语、成语等对话。聊天机器人使用

2018-09-27

ChineseConverter.dll ChnCharInfo.dll

中文简体转中文繁体,中文繁体转中文简体,中文转拼音,包含 ChineseConverter.dll和ChnCharInfo.dll

2018-01-04

WebSocket C#服务端Demo+测试

用C#写的一个WebSocket后台,和两个客户端测试页面,IIS需要有WebSocket协议

2017-10-26

AnkhSVN 2.7.0.6493msi 支持vs2015

AnkhSVN是一款在VS中管理Subversion的插件,您可以在VS中轻松的提交、更新、添加文件,而不用在命令行或资源管理器中提交。

2017-10-26

智能聊天静态页面,模板

智能聊天静态页面,基本样式,js处理响应等处理,仿照微信聊天界面

2018-09-30

AopSdk.dll

C# 支付宝支付SDK集成 集成支付宝支付请求,异步回调验证签名,签名,RSA加密等类

2018-01-10

城市名对应城市代码表sql,用于天气查询等

城市名对应城市代码表sql,用于天气查询等,包含省份、城市、地区对应的城市代码,2000多条数据

2018-09-30

wkhtmltopdf

wkhtmltopdf

2021-01-13

ThoughtWorks.QRCode.dll

生成图片二维码,包含各个版本,只需要下载后添加引用,后台一句代码就可以生成二维码的bitmap对象,是目前最好用的c#生成二维码dll

2018-01-04

文件同步_allwaysync-10-5-8_cr

文件同步_allwaysync-10-5-8_cr和allwaysync-11-7-0两个版本,可直接安装使用

2018-06-18

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除