<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[噢~]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/nullcodeworld</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; nullcodeworld]]></copyright><item><title><![CDATA[16-C#.Net-自研ORM框架-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159413007</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159413007</guid><author>nullcodeworld</author><pubDate>Mon, 23 Mar 2026 14:56:00 +0800</pubDate><description><![CDATA[反射是 .NET 运行时提供的一种能力，允许程序在运行期间动态获取类型信息、创建对象、调用方法、读写属性。它是 ORM、依赖注入、序列化等框架的底层基础。// 定义：只能标记在属性上// 使用set;]]></description><category></category></item><item><title><![CDATA[15-C#.Net-编程思想(POP-OOP-AOP-DDD)-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159413006</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159413006</guid><author>nullcodeworld</author><pubDate>Mon, 23 Mar 2026 14:53:00 +0800</pubDate><description><![CDATA[维度POPOOPAOPDDD关注点执行步骤对象和职责横切关注点业务领域模型扩展方式修改代码替换对象(接口+多实现)切面拦截领域模型演进适用规模小脚本中小型项目通用功能增强复杂业务系统核心原则无开闭原则、依赖倒置不破坏封装领域模型驱动。]]></description><category></category></item><item><title><![CDATA[14-C#.Net-设计模式-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159413005</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159413005</guid><author>nullcodeworld</author><pubDate>Mon, 23 Mar 2026 14:50:00 +0800</pubDate><description><![CDATA[核心思想：一个工厂不只生产一种产品，而是生产一族相关产品(种族 + 军队 + 资源)。调用方优点：扩展新种族(产品族)很方便，加一个工厂类即可。缺点：扩展新产品类型(比如加个 IHero)需要改所有工厂类，这叫"倾斜性可扩展"——对产品族扩展友好，对产品类型扩展不友好。]]></description><category></category></item><item><title><![CDATA[13-C#.Net-设计模式六大原则-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159413004</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159413004</guid><author>nullcodeworld</author><pubDate>Mon, 23 Mar 2026 14:49:00 +0800</pubDate><description><![CDATA[原则英文缩写一句话总结单一职责SRP一个类只做一件事开闭原则OCP扩展加代码，修改不动旧代码里氏替换LSP子类能无缝替换父类接口隔离ISP接口要小而专，不强迫实现无用方法依赖倒置DIP依赖抽象，不依赖具体实现迪米特法则LOD只和直接朋友交互，降低耦合，其中 SOLID = SRP + OCP + LSP + ISP + DIP。]]></description><category></category></item><item><title><![CDATA[12-C#.Net-加密解密-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159413003</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159413003</guid><author>nullcodeworld</author><pubDate>Mon, 23 Mar 2026 13:18:00 +0800</pubDate><description><![CDATA[对比项MD5DES(对称)RSA(非对称)是否可逆否是是密钥数量无1个(共享)2个(公钥+私钥)速度快快慢安全性中(需加盐)中(密钥传递风险)高典型用途密码存储、文件校验数据传输加密安全通信、数字签名。]]></description><category></category></item><item><title><![CDATA[11-C#.Net-多线程-Async-Await篇-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159413002</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159413002</guid><author>nullcodeworld</author><pubDate>Mon, 23 Mar 2026 11:47:00 +0800</pubDate><description><![CDATA[定义C# 5.0 (.NET 4.5) 引入的语法糖C# 7.1 开始，Main入口也可以使用C# 8.0 支持异步流(await foreach)和异步释放(await using)什么是语法糖由编译器提供的便捷功能底层实现不变，但写代码更简洁类似的语法糖：var、表达式树、属性的get/set、字符串插值$""]]></description><category></category></item><item><title><![CDATA[10-C#.Net-多线程-进阶篇-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276469</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276469</guid><author>nullcodeworld</author><pubDate>Thu, 19 Mar 2026 17:40:00 +0800</pubDate><description><![CDATA[优点基于Task的封装，使用简单自动控制线程数量避免线程过多导致资源浪费使用建议有大量独立任务时使用需要控制并发数量时使用任务之间无依赖关系时使用定义一段业务逻辑，单线程执行和多线程执行的结果完全一致，就是线程安全否则就是线程不安全线程不安全示例// 单线程：结果是10000i < 10000;i++)// 10000// 多线程：结果不确定i < 10000;i++)});// 可能是9937、9976、9982等方法优点缺点推荐度加锁简单直接。]]></description><category></category></item><item><title><![CDATA[09-C#.Net-多线程-基础篇-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276468</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276468</guid><author>nullcodeworld</author><pubDate>Thu, 19 Mar 2026 17:21:00 +0800</pubDate><description><![CDATA[⚠️ ThreadPool 无法精确控制线程，也不支持返回值和取消，实际开发中优先使用 Task。]]></description><category></category></item><item><title><![CDATA[08-C#.Net-Thread-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276467</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276467</guid><author>nullcodeworld</author><pubDate>Thu, 19 Mar 2026 17:19:00 +0800</pubDate><description><![CDATA[线程无法真正从外部被强制终止，这些方法只是通过异常机制间接干预，存在安全隐患。⚠️ 正因为无序性，多线程调试困难，通常只能通过写日志、输出结果、结合线程 ID 来分析问题。⚠️ 如果忘记将长时间运行的线程设为后台线程，可能导致程序关闭后进程仍然存活。：立即开启新线程执行，返回一个"取结果的委托"，调用方在需要结果时才触发等待。，它们是对线程池的更高层封装，代码更简洁，异常处理和取消机制也更完善。，操作系统不保证严格按优先级执行，不能依赖它来控制执行顺序。已不再支持，不能用于异步执行委托，需要用上述方式或。]]></description><category></category></item><item><title><![CDATA[07-C#.Net-数据结构-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276466</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276466</guid><author>nullcodeworld</author><pubDate>Thu, 19 Mar 2026 17:05:00 +0800</pubDate><description><![CDATA[Set集合：纯粹的容器，无序存储，元素唯一线性结构：一对一存储，如数组、链表、队列、栈树形结构：一对多存储，如二叉树、表达式目录树、菜单结构图状结构：多对多存储，如拓扑图、地图网络方式一：用 yield(推荐，简洁)// 编译器生成状态机方式二：手动实现 IEnumerator(理解底层用)_index++;方式二展示了 yield 背后编译器实际生成的逻辑：维护一个_index状态，每次MoveNext()推进一步，Current返回当前值。]]></description><category></category></item><item><title><![CDATA[06-C#.Net-表达式目录树-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276465</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276465</guid><author>nullcodeworld</author><pubDate>Thu, 19 Mar 2026 17:02:00 +0800</pubDate><description><![CDATA[动态性：在运行时动态构建查询逻辑，把程序写活可分析性：可以解析表达式结构，转换为 SQL、MongoDB 查询、ES DSL 等类型安全：编译时检查，避免字符串拼接 SQL 的错误和注入风险高性能：配合缓存，性能接近硬编码。]]></description><category></category></item><item><title><![CDATA[05-C#.Net-Lambda与LINQ-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276464</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276464</guid><author>nullcodeworld</author><pubDate>Thu, 19 Mar 2026 16:59:00 +0800</pubDate><description><![CDATA[这两个方法的结构完全一样，唯一不同的是判断条件。核心思想都一样：把固定的处理逻辑封装在内部，把可变的查询条件通过委托(或表达式树)传入，整合成统一的查询接口。扩展方法允许在不修改原类型源码的情况下为其添加新方法，是 LINQ 的实现基础，也是遵循开闭原则的常用手段。Lambda 表达式是委托的语法糖，本质上是匿名方法的简化写法，编译器最终会将其编译为委托实例。，意味着调用时就立即执行了所有判断，并把结果全部存入内存。缺点：方法必须单独定义，代码分散，不够内聚。操作符(读作 "goes to")替代。]]></description><category></category></item><item><title><![CDATA[04-C#.Net-委托和事件-面试题]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276463</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276463</guid><author>nullcodeworld</author><pubDate>Thu, 19 Mar 2026 14:55:00 +0800</pubDate><description><![CDATA[出题意图考察候选人对多播委托机制的理解，以及实际使用中的注意事项。解答思路解释多播委托的概念说明移除的机制和规则重点讲解移除的陷阱参考答案所有委托都继承自，因此所有委托都是多播委托。多播委托可以通过+=注册多个方法，形成一个调用链，执行时按注册顺序依次调用。使用-=操作符移除从后往前逐个匹配，匹配到第一个后移除并停止没有匹配到则不做任何操作// 陷阱1：实例方法必须是同一个实例// 失败：不是同一个实例// 陷阱2：Lambda 表达式无法移除。]]></description><category></category></item><item><title><![CDATA[04-C#.Net-委托和事件-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276462</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276462</guid><author>nullcodeworld</author><pubDate>Thu, 19 Mar 2026 14:44:00 +0800</pubDate><description><![CDATA[委托是一种引用类型，本质上是一个类，继承自。它可以封装方法的引用，类似于 C/C++ 中的函数指针，但更加类型安全。// 委托的定义委托定义时需要指定参数类型和返回值类型委托本质是类，会被编译器编译成继承自的类委托可以定义在类外部或类内部事件是特殊的委托，使用event关键字修饰。// 委托// 事件Console.WriteLine("喵~");MiaoEvent?.Invoke();// 只能在类内部触发.NET 推荐使用或定义事件。// 自定义事件参数set;]]></description><category></category></item><item><title><![CDATA[03-C#.Net-特性-面试题]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276461</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276461</guid><author>nullcodeworld</author><pubDate>Thu, 19 Mar 2026 14:07:00 +0800</pubDate><description><![CDATA[特性编译后以元数据形式存储在程序集中，运行时可以通过反射读取，能携带数据和逻辑，真正影响程序行为。核心设计：抽象基类定义统一接口，具体验证规则继承实现，验证管理器只依赖抽象基类，新增规则不改已有代码。先说核心区别(编译后是否存在)，再说本质(是一个类)，最后点出标记语法的本质是调用构造函数。说清楚"标记 ≠ 执行"，反射是让特性生效的唯一途径，顺带提性能优化(先判断再获取)。考察对特性运行机制的理解，很多人只会标记特性，不知道背后原理。考察对特性基础概念的理解，区分"会用"和"真懂"。]]></description><category></category></item><item><title><![CDATA[03-C#.Net-特性-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276460</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159276460</guid><author>nullcodeworld</author><pubDate>Thu, 19 Mar 2026 13:57:00 +0800</pubDate><description><![CDATA[特性是一个类：直接或间接继承自Attribute抽象类命名规范：类名默认以Attribute结尾(使用时可省略)应用方式：用方括号[]包裹，标记在类或类成员上编译后存在：与注释不同，特性在编译后依然存在于程序集中特性类就是普通的类，继承Attribute。// 使用 AttributeUsage 约束特性的使用方式AttributeTargets.All, // 可标记的目标(类、方法、属性等)AllowMultiple = true, // 是否允许重复标记。]]></description><category></category></item><item><title><![CDATA[02-C#.Net-反射-面试题]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159237807</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159237807</guid><author>nullcodeworld</author><pubDate>Wed, 18 Mar 2026 11:33:00 +0800</pubDate><description><![CDATA[反射(Reflection)是 .NET 提供的一种机制，来自命名空间，允许程序在运行时动态地获取程序集(dll/exe)中的类型信息，并基于这些信息创建对象、调用方法、读写属性和字段。IOC 容器：动态加载程序集，在不修改代码的情况下切换实现MVC 框架：根据 URL 中的控制器名和方法名，反射创建实例并调用方法ORM 框架：通过反射实现对象与数据库的自动映射突破访问权限：读写私有成员Emit：配合动态生成代码，实现动态代理、AOP泛型缓存利用的是泛型类的静态成员对每个类型参数独立存在。]]></description><category></category></item><item><title><![CDATA[01-C#.Net-泛型-面试题]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159198814</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159198814</guid><author>nullcodeworld</author><pubDate>Tue, 17 Mar 2026 17:17:00 +0800</pubDate><description><![CDATA[出题意图：考察对泛型基本概念的理解，以及是否能说清楚它解决了什么问题。答泛型是一种"延迟声明类型"的机制。声明时用占位符T代替具体类型，调用时再指定。性能问题：用object作为通用参数时，值类型会发生装箱/拆箱，有额外的堆分配和 CPU 开销。泛型在 CLR 层面对值类型生成专用代码，完全避免装箱，性能等同于专用方法。类型安全问题object参数在编译期无法检查类型，强制转换错误只能在运行时暴露。泛型在编译期就能检查类型，错误提前发现。// 泛型方法：一个方法，任意类型，无装箱，编译期安全。]]></description><category></category></item><item><title><![CDATA[02-C#.Net-反射-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159237806</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159237806</guid><author>nullcodeworld</author><pubDate>Tue, 17 Mar 2026 17:09:00 +0800</pubDate><description><![CDATA[反射(Reflection)是 C# 中的一项强大功能，来自命名空间。读取程序集(DLL/EXE)的元数据(metadata)创建对象实例调用方法访问字段和属性Emit 是反射的进阶能力，可以在程序运行时动态生成 dll、类、方法、字段等，来自命名空间。反射是"读"：读取已有程序集的元数据并使用它。Emit 是"写"：在运行时动态生成新的程序集和代码。生成步骤方法参数说明LoadFromDLL 名称(需要后缀)最常用，支持相对路径，自动解析依赖LoadFile完整路径(需要后缀)]]></description><category></category></item><item><title><![CDATA[01-C#.Net-泛型-学习笔记]]></title><link>https://blog.youkuaiyun.com/nullcodeworld/article/details/159198800</link><guid>https://blog.youkuaiyun.com/nullcodeworld/article/details/159198800</guid><author>nullcodeworld</author><pubDate>Tue, 17 Mar 2026 17:09:00 +0800</pubDate><description><![CDATA[泛：宽泛的、不确定的型：类型泛型：不确定的类型，延迟声明的类型泛型不是语法糖，是框架升级支持的特性(.NET 2.0)性能优势：避免装箱拆箱，与普通方法性能相当类型安全：编译时检查，避免运行时错误泛型约束：要么不让进，进来就保证安全泛型缓存：每个类型生成独立副本，常驻内存协变逆变：只针对接口和委托，增加类型转换的灵活性应用场景：集合类、ORM框架、通用工具类、API返回结果封装。]]></description><category></category></item></channel></rss>