自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(276)
  • 资源 (3)
  • 收藏
  • 关注

原创 16-C#.Net-自研ORM框架-学习笔记

反射是 .NET 运行时提供的一种能力,允许程序在运行期间动态获取类型信息、创建对象、调用方法、读写属性。它是 ORM、依赖注入、序列化等框架的底层基础。// 定义:只能标记在属性上// 使用set;

2026-03-23 14:56:00 518

原创 15-C#.Net-编程思想(POP-OOP-AOP-DDD)-学习笔记

维度POPOOPAOPDDD关注点执行步骤对象和职责横切关注点业务领域模型扩展方式修改代码替换对象(接口+多实现)切面拦截领域模型演进适用规模小脚本中小型项目通用功能增强复杂业务系统核心原则无开闭原则、依赖倒置不破坏封装领域模型驱动。

2026-03-23 14:53:00 553

原创 14-C#.Net-设计模式-学习笔记

核心思想:一个工厂不只生产一种产品,而是生产一族相关产品(种族 + 军队 + 资源)。调用方优点:扩展新种族(产品族)很方便,加一个工厂类即可。缺点:扩展新产品类型(比如加个 IHero)需要改所有工厂类,这叫"倾斜性可扩展"——对产品族扩展友好,对产品类型扩展不友好。

2026-03-23 14:50:00 624

原创 13-C#.Net-设计模式六大原则-学习笔记

原则英文缩写一句话总结单一职责SRP一个类只做一件事开闭原则OCP扩展加代码,修改不动旧代码里氏替换LSP子类能无缝替换父类接口隔离ISP接口要小而专,不强迫实现无用方法依赖倒置DIP依赖抽象,不依赖具体实现迪米特法则LOD只和直接朋友交互,降低耦合,其中 SOLID = SRP + OCP + LSP + ISP + DIP。

2026-03-23 14:49:00 606

原创 12-C#.Net-加密解密-学习笔记

对比项MD5DES(对称)RSA(非对称)是否可逆否是是密钥数量无1个(共享)2个(公钥+私钥)速度快快慢安全性中(需加盐)中(密钥传递风险)高典型用途密码存储、文件校验数据传输加密安全通信、数字签名。

2026-03-23 13:18:00 561

原创 11-C#.Net-多线程-Async-Await篇-学习笔记

定义C# 5.0 (.NET 4.5) 引入的语法糖C# 7.1 开始,Main入口也可以使用C# 8.0 支持异步流(await foreach)和异步释放(await using)什么是语法糖由编译器提供的便捷功能底层实现不变,但写代码更简洁类似的语法糖:var、表达式树、属性的get/set、字符串插值$""

2026-03-23 11:47:00 648

原创 10-C#.Net-多线程-进阶篇-学习笔记

优点基于Task的封装,使用简单自动控制线程数量避免线程过多导致资源浪费使用建议有大量独立任务时使用需要控制并发数量时使用任务之间无依赖关系时使用定义一段业务逻辑,单线程执行和多线程执行的结果完全一致,就是线程安全否则就是线程不安全线程不安全示例// 单线程:结果是10000i < 10000;i++)// 10000// 多线程:结果不确定i < 10000;i++)});// 可能是9937、9976、9982等方法优点缺点推荐度加锁简单直接。

2026-03-19 17:40:00 525

原创 09-C#.Net-多线程-基础篇-学习笔记

⚠️ ThreadPool 无法精确控制线程,也不支持返回值和取消,实际开发中优先使用 Task。

2026-03-19 17:21:00 455

原创 08-C#.Net-Thread-学习笔记

线程无法真正从外部被强制终止,这些方法只是通过异常机制间接干预,存在安全隐患。⚠️ 正因为无序性,多线程调试困难,通常只能通过写日志、输出结果、结合线程 ID 来分析问题。⚠️ 如果忘记将长时间运行的线程设为后台线程,可能导致程序关闭后进程仍然存活。:立即开启新线程执行,返回一个"取结果的委托",调用方在需要结果时才触发等待。,它们是对线程池的更高层封装,代码更简洁,异常处理和取消机制也更完善。,操作系统不保证严格按优先级执行,不能依赖它来控制执行顺序。已不再支持,不能用于异步执行委托,需要用上述方式或。

2026-03-19 17:19:00 532

原创 07-C#.Net-数据结构-学习笔记

Set集合:纯粹的容器,无序存储,元素唯一线性结构:一对一存储,如数组、链表、队列、栈树形结构:一对多存储,如二叉树、表达式目录树、菜单结构图状结构:多对多存储,如拓扑图、地图网络方式一:用 yield(推荐,简洁)// 编译器生成状态机方式二:手动实现 IEnumerator(理解底层用)_index++;方式二展示了 yield 背后编译器实际生成的逻辑:维护一个_index状态,每次MoveNext()推进一步,Current返回当前值。

2026-03-19 17:05:00 592

原创 06-C#.Net-表达式目录树-学习笔记

动态性:在运行时动态构建查询逻辑,把程序写活可分析性:可以解析表达式结构,转换为 SQL、MongoDB 查询、ES DSL 等类型安全:编译时检查,避免字符串拼接 SQL 的错误和注入风险高性能:配合缓存,性能接近硬编码。

2026-03-19 17:02:00 597

原创 05-C#.Net-Lambda与LINQ-学习笔记

这两个方法的结构完全一样,唯一不同的是判断条件。核心思想都一样:把固定的处理逻辑封装在内部,把可变的查询条件通过委托(或表达式树)传入,整合成统一的查询接口。扩展方法允许在不修改原类型源码的情况下为其添加新方法,是 LINQ 的实现基础,也是遵循开闭原则的常用手段。Lambda 表达式是委托的语法糖,本质上是匿名方法的简化写法,编译器最终会将其编译为委托实例。,意味着调用时就立即执行了所有判断,并把结果全部存入内存。缺点:方法必须单独定义,代码分散,不够内聚。操作符(读作 "goes to")替代。

2026-03-19 16:59:00 544

原创 04-C#.Net-委托和事件-面试题

出题意图考察候选人对多播委托机制的理解,以及实际使用中的注意事项。解答思路解释多播委托的概念说明移除的机制和规则重点讲解移除的陷阱参考答案所有委托都继承自,因此所有委托都是多播委托。多播委托可以通过+=注册多个方法,形成一个调用链,执行时按注册顺序依次调用。使用-=操作符移除从后往前逐个匹配,匹配到第一个后移除并停止没有匹配到则不做任何操作// 陷阱1:实例方法必须是同一个实例// 失败:不是同一个实例// 陷阱2:Lambda 表达式无法移除。

2026-03-19 14:55:00 508

原创 04-C#.Net-委托和事件-学习笔记

委托是一种引用类型,本质上是一个类,继承自。它可以封装方法的引用,类似于 C/C++ 中的函数指针,但更加类型安全。// 委托的定义委托定义时需要指定参数类型和返回值类型委托本质是类,会被编译器编译成继承自的类委托可以定义在类外部或类内部事件是特殊的委托,使用event关键字修饰。// 委托// 事件Console.WriteLine("喵~");MiaoEvent?.Invoke();// 只能在类内部触发.NET 推荐使用或定义事件。// 自定义事件参数set;

2026-03-19 14:44:00 481

原创 03-C#.Net-特性-面试题

特性编译后以元数据形式存储在程序集中,运行时可以通过反射读取,能携带数据和逻辑,真正影响程序行为。核心设计:抽象基类定义统一接口,具体验证规则继承实现,验证管理器只依赖抽象基类,新增规则不改已有代码。先说核心区别(编译后是否存在),再说本质(是一个类),最后点出标记语法的本质是调用构造函数。说清楚"标记 ≠ 执行",反射是让特性生效的唯一途径,顺带提性能优化(先判断再获取)。考察对特性运行机制的理解,很多人只会标记特性,不知道背后原理。考察对特性基础概念的理解,区分"会用"和"真懂"。

2026-03-19 14:07:00 555

原创 03-C#.Net-特性-学习笔记

特性是一个类:直接或间接继承自Attribute抽象类命名规范:类名默认以Attribute结尾(使用时可省略)应用方式:用方括号[]包裹,标记在类或类成员上编译后存在:与注释不同,特性在编译后依然存在于程序集中特性类就是普通的类,继承Attribute。// 使用 AttributeUsage 约束特性的使用方式AttributeTargets.All, // 可标记的目标(类、方法、属性等)AllowMultiple = true, // 是否允许重复标记。

2026-03-19 13:57:00 488

原创 02-C#.Net-反射-面试题

反射(Reflection)是 .NET 提供的一种机制,来自命名空间,允许程序在运行时动态地获取程序集(dll/exe)中的类型信息,并基于这些信息创建对象、调用方法、读写属性和字段。IOC 容器:动态加载程序集,在不修改代码的情况下切换实现MVC 框架:根据 URL 中的控制器名和方法名,反射创建实例并调用方法ORM 框架:通过反射实现对象与数据库的自动映射突破访问权限:读写私有成员Emit:配合动态生成代码,实现动态代理、AOP泛型缓存利用的是泛型类的静态成员对每个类型参数独立存在。

2026-03-18 11:33:00 348

原创 01-C#.Net-泛型-面试题

出题意图:考察对泛型基本概念的理解,以及是否能说清楚它解决了什么问题。答泛型是一种"延迟声明类型"的机制。声明时用占位符T代替具体类型,调用时再指定。性能问题:用object作为通用参数时,值类型会发生装箱/拆箱,有额外的堆分配和 CPU 开销。泛型在 CLR 层面对值类型生成专用代码,完全避免装箱,性能等同于专用方法。类型安全问题object参数在编译期无法检查类型,强制转换错误只能在运行时暴露。泛型在编译期就能检查类型,错误提前发现。// 泛型方法:一个方法,任意类型,无装箱,编译期安全。

2026-03-17 17:17:00 315

原创 01-C#.Net-泛型-学习笔记

泛:宽泛的、不确定的型:类型泛型:不确定的类型,延迟声明的类型泛型不是语法糖,是框架升级支持的特性(.NET 2.0)性能优势:避免装箱拆箱,与普通方法性能相当类型安全:编译时检查,避免运行时错误泛型约束:要么不让进,进来就保证安全泛型缓存:每个类型生成独立副本,常驻内存协变逆变:只针对接口和委托,增加类型转换的灵活性应用场景:集合类、ORM框架、通用工具类、API返回结果封装。

2026-03-17 17:09:00 371

原创 02-C#.Net-反射-学习笔记

反射(Reflection)是 C# 中的一项强大功能,来自命名空间。读取程序集(DLL/EXE)的元数据(metadata)创建对象实例调用方法访问字段和属性Emit 是反射的进阶能力,可以在程序运行时动态生成 dll、类、方法、字段等,来自命名空间。反射是"读":读取已有程序集的元数据并使用它。Emit 是"写":在运行时动态生成新的程序集和代码。生成步骤方法参数说明LoadFromDLL 名称(需要后缀)最常用,支持相对路径,自动解析依赖LoadFile完整路径(需要后缀)

2026-03-17 17:09:00 329

原创 03-C#

特性是一个类:直接或间接继承自Attribute抽象类命名规范:类名默认以Attribute结尾(使用时可省略)应用方式:用方括号[]包裹,标记在类或类成员上编译后存在:与注释不同,特性在编译后依然存在于程序集中特性类就是普通的类,继承Attribute。// 使用 AttributeUsage 约束特性的使用方式AttributeTargets.All, // 可标记的目标(类、方法、属性等)AllowMultiple = true, // 是否允许重复标记。

2026-03-17 17:08:00 258

原创 04-C#

委托是一种引用类型,本质上是一个类,继承自。它可以封装方法的引用,类似于 C/C++ 中的函数指针,但更加类型安全。// 委托的定义委托定义时需要指定参数类型和返回值类型委托本质是类,会被编译器编译成继承自的类委托可以定义在类外部或类内部事件是特殊的委托,使用event关键字修饰。// 委托// 事件Console.WriteLine("喵~");MiaoEvent?.Invoke();// 只能在类内部触发.NET 推荐使用或定义事件。// 自定义事件参数set;

2026-03-17 17:08:00 510

原创 05-C#

这两个方法的结构完全一样,唯一不同的是判断条件。核心思想都一样:把固定的处理逻辑封装在内部,把可变的查询条件通过委托(或表达式树)传入,整合成统一的查询接口。扩展方法允许在不修改原类型源码的情况下为其添加新方法,是 LINQ 的实现基础,也是遵循开闭原则的常用手段。Lambda 表达式是委托的语法糖,本质上是匿名方法的简化写法,编译器最终会将其编译为委托实例。,意味着调用时就立即执行了所有判断,并把结果全部存入内存。缺点:方法必须单独定义,代码分散,不够内聚。操作符(读作 "goes to")替代。

2026-03-17 17:08:00 236

原创 06-C#

动态性:在运行时动态构建查询逻辑,把程序写活可分析性:可以解析表达式结构,转换为 SQL、MongoDB 查询、ES DSL 等类型安全:编译时检查,避免字符串拼接 SQL 的错误和注入风险高性能:配合缓存,性能接近硬编码。

2026-03-17 17:08:00 308

原创 07-C#

Set集合:纯粹的容器,无序存储,元素唯一线性结构:一对一存储,如数组、链表、队列、栈树形结构:一对多存储,如二叉树、表达式目录树、菜单结构图状结构:多对多存储,如拓扑图、地图网络方式一:用 yield(推荐,简洁)// 编译器生成状态机方式二:手动实现 IEnumerator(理解底层用)_index++;方式二展示了 yield 背后编译器实际生成的逻辑:维护一个_index状态,每次MoveNext()推进一步,Current返回当前值。

2026-03-17 17:08:00 344

原创 08-C#

线程无法真正从外部被强制终止,这些方法只是通过异常机制间接干预,存在安全隐患。⚠️ 正因为无序性,多线程调试困难,通常只能通过写日志、输出结果、结合线程 ID 来分析问题。⚠️ 如果忘记将长时间运行的线程设为后台线程,可能导致程序关闭后进程仍然存活。:立即开启新线程执行,返回一个"取结果的委托",调用方在需要结果时才触发等待。,它们是对线程池的更高层封装,代码更简洁,异常处理和取消机制也更完善。,操作系统不保证严格按优先级执行,不能依赖它来控制执行顺序。已不再支持,不能用于异步执行委托,需要用上述方式或。

2026-03-17 17:08:00 370

原创 09-C#

⚠️ ThreadPool 无法精确控制线程,也不支持返回值和取消,实际开发中优先使用 Task。

2026-03-17 17:08:00 363

原创 10-C#

优点基于Task的封装,使用简单自动控制线程数量避免线程过多导致资源浪费使用建议有大量独立任务时使用需要控制并发数量时使用任务之间无依赖关系时使用定义一段业务逻辑,单线程执行和多线程执行的结果完全一致,就是线程安全否则就是线程不安全线程不安全示例// 单线程:结果是10000i < 10000;i++)// 10000// 多线程:结果不确定i < 10000;i++)});// 可能是9937、9976、9982等方法优点缺点推荐度加锁简单直接。

2026-03-17 17:08:00 302

原创 11-C#

定义C# 5.0 (.NET 4.5) 引入的语法糖C# 7.1 开始,Main入口也可以使用C# 8.0 支持异步流(await foreach)和异步释放(await using)什么是语法糖由编译器提供的便捷功能底层实现不变,但写代码更简洁类似的语法糖:var、表达式树、属性的get/set、字符串插值$""

2026-03-17 17:08:00 358

原创 12-C#

对比项MD5DES(对称)RSA(非对称)是否可逆否是是密钥数量无1个(共享)2个(公钥+私钥)速度快快慢安全性中(需加盐)中(密钥传递风险)高典型用途密码存储、文件校验数据传输加密安全通信、数字签名。

2026-03-17 17:08:00 377

原创 13-C#

原则英文缩写一句话总结单一职责SRP一个类只做一件事开闭原则OCP扩展加代码,修改不动旧代码里氏替换LSP子类能无缝替换父类接口隔离ISP接口要小而专,不强迫实现无用方法依赖倒置DIP依赖抽象,不依赖具体实现迪米特法则LOD只和直接朋友交互,降低耦合,其中 SOLID = SRP + OCP + LSP + ISP + DIP。

2026-03-17 17:08:00 270

原创 14-C#

核心思想:一个工厂不只生产一种产品,而是生产一族相关产品(种族 + 军队 + 资源)。调用方优点:扩展新种族(产品族)很方便,加一个工厂类即可。缺点:扩展新产品类型(比如加个 IHero)需要改所有工厂类,这叫"倾斜性可扩展"——对产品族扩展友好,对产品类型扩展不友好。

2026-03-17 17:08:00 637

原创 15-C#

维度POPOOPAOPDDD关注点执行步骤对象和职责横切关注点业务领域模型扩展方式修改代码替换对象(接口+多实现)切面拦截领域模型演进适用规模小脚本中小型项目通用功能增强复杂业务系统核心原则无开闭原则、依赖倒置不破坏封装领域模型驱动。

2026-03-17 17:08:00 266

原创 02-C#

反射(Reflection)是 C# 中的一项强大功能,来自命名空间。读取程序集(DLL/EXE)的元数据(metadata)创建对象实例调用方法访问字段和属性Emit 是反射的进阶能力,可以在程序运行时动态生成 dll、类、方法、字段等,来自命名空间。反射是"读":读取已有程序集的元数据并使用它。Emit 是"写":在运行时动态生成新的程序集和代码。生成步骤方法参数说明LoadFromDLL 名称(需要后缀)最常用,支持相对路径,自动解析依赖LoadFile完整路径(需要后缀)

2026-03-17 17:08:00 520

原创 Vue3入门

通过watch监听的ref对象默认是浅层侦听的,直接修改嵌套的对象属性不会触发回调执行,需要开启deep。默认情况下在 <script setup>语法糖下组件内部的属性和方法是不开放给父组件访问的。在setup函数中写的数据和方法需要在末尾以对象的方式return,才能给模版使用。需求:在不开启deep的前提下,侦听age的变化,只有age变化时才执行回调。4. 不开启deep,想在某个层次比较深的属性变化时执行回调怎么做?顶层组件可以向底层组件传递方法,底层组件调用方法修改顶层组件的数据。

2026-01-22 09:17:00 918

原创 WebApi实现原理

WebApi 就是网络接口,运行流程如下。

2025-07-11 19:42:00 504

原创 模版方法模式

模版方法模式就是通过把不变行为搬移到超类,去除子类中的重复代码来体现它的优势。

2025-07-11 19:39:00 297

原创 适配器模式

适配器使用前提系统中功能已经实现时候。系统中功能不兼容时候。缺点导致对象违背单一职责。导致代码理解难度增大。建议:尽量保证规范。尽量保证统一。代码规范不统一,那么就只能只用适配器暂时解决。

2025-07-11 19:38:00 444

原创 责任链模式与中间件原理

虽然责任链调用已经完成了封装,遵循了开闭原则,但是添加中间件 AddMiddleware 方法依然会随着中间件增加而增多,客户端代码不稳定。上面代码中把中间件都添加到集合 middlewares 中,再通过 GetMiddleware 方法动态创建出中间件链。以后每次想添加中间件,只需要添加中间件类和扩展类,再往 Startup 类中加入就可以了,客户端调用代码完全不用动。但是如果要想加入中间件,责任链这样的调用就会很麻烦,于是去改造代码,加入建造者模式。这样客户端代码就稳定了。创建请求类和中间件类。

2025-07-10 21:16:00 492

原创 容器化-Docker volume数据卷

这样就可以把 /root/volumes/nginx.conf 文件挂载到容器中的 /usr/local/nginx/conf/nginx.conf。目标:Linux主机上面的nginx.conf配置文件挂载到 nginx 容器中。含义:Linux文件可以挂载到容器中,Linux文件可以复制到容器中。创建 volumes 文件夹,并创建 nginx.conf 文件。数据卷就是将容器的数据存储到主机上,方便进行持久化存储。主机目录挂载到容器中或把容器目录挂载到主机中。主机文件挂载到容器中,

2025-07-03 21:04:00 303

正则表达式30分钟入门教程.chm

正则表达式30分钟入门教程.chm

2020-06-06

JSON基础教程.CHM

JSON基础教程.CHM

2020-06-06

JScript.chm

JScript.chm

2020-06-06

空空如也

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

TA关注的人

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