- 博客(90)
- 收藏
- 关注
原创 C# IIncrementalGenerator干点啥
在依赖项=》分析器=》项目生成g.cs,注意变更源生成器需要重新打开工程来刷新新生成的代码。
2025-07-08 16:07:11
106
原创 具体类型的不同,占用的字节大小
本文详细介绍了C#中常见数据类型的内存占用情况。值类型包括整数(sbyte、short、int、long等)、浮点(float、double、decimal)、布尔(bool)和字符(char),其字节大小固定(1-16字节)。引用类型(string、class、array等)在32位系统中占用4字节,64位系统占用8字节。结构体作为值类型,其大小为各字段之和并受内存对齐影响。文章还说明了dynamic和void等特殊类型,并通过表格总结了各类型字节大小,强调了解这些信息对内存优化和性能调优的重要性。
2025-06-17 17:28:11
741
原创 OWASP Top 10
OWASPTop10揭示2024年Web应用十大安全威胁:注入攻击、身份验证失效、敏感数据泄露、XXE注入、权限控制缺陷、安全配置错误、XSS跨站脚本、反序列化漏洞、组件已知漏洞及监控不足。这些风险可能导致数据泄露、权限提升和系统入侵,开发者需重点防范。(148字)
2025-06-17 16:37:34
708
原创 ABP中的模块概念详解
ABP框架的模块化系统详解:ABP通过模块机制实现应用功能解耦,每个模块继承AbpModule类并定义明确的生命周期方法(如ConfigureServices、OnApplicationInitialization)。模块通过[DependsOn]特性声明依赖关系,支持分层结构设计和动态加载。核心优势包括:功能隔离、依赖管理、扩展性强(支持服务替换和实体扩展)。典型模块包含领域层、应用层、API层等项目,遵循单一职责原则。这种模块化设计是构建可维护、可扩展企业应用的基础设施,有效支持领域驱动设计和微服务架构
2025-06-16 14:24:16
255
原创 如何在ABP中定义实体、值对象和聚合根?
ABP框架中定义领域对象需遵循DDD原则:实体(Entity)继承Entity<TKey>基类,包含唯一标识和业务逻辑;值对象(ValueObject)通过[ComplexType]标记,重写Equals方法实现相等性比较;聚合根(AggregateRoot)作为唯一入口,维护业务规则和数据一致性。设计时应遵循聚合边界、封装不变性约束、使用工厂模式创建对象,并通过领域事件处理跨聚合逻辑。EF Core映射时需配置实体关系和值对象所有权,保持聚合轻量级并合理封装业务方法。
2025-06-16 14:18:54
310
原创 Nginx负载均衡功能
Nginx负载均衡功能解析:通过反向代理实现流量分发,支持四层/七། photo: 轮询、加权、最少连接等策略material,提供健康检查和高可用方案。核心配置包括定义upstream组、设置权重参数,可通过IP哈希实现会话保持。优化建议涉及连接数调整、请求分流,并需注意会话丢失等问题。实践表明合理配置Nginx负载均衡能有效提升系统性能和可用性,需根据业务场景选择合适策略并配合监控调优。
2025-06-16 09:46:10
734
原创 Redis的持久化功能
Redis提供RDB和AOF两种持久化方式:RDB通过定时快照保存数据,速度快但可能丢失最新数据;AOF记录写操作更安全但性能较低。Redis 4.0支持混合模式(RDB+AOF),结合两者优势。建议根据数据安全需求选择配置:高安全性场景可同时启用RDB+AOF,注重性能则可单独使用RDB。通过合理配置save参数和appendfsync策略,可平衡数据安全与系统性能。
2025-06-16 09:37:00
287
原创 rabbitmq 交换机、队列和消息概念
RabbitMQ 是一个功能强大的消息中间件,它采用发布-订阅模式进行消息传递。下面为你详细介绍 RabbitMQ 中交换机、队列和消息的核心概念。
2025-06-16 09:33:47
645
原创 C#实现RabbitMQ消息持久化
摘要:本文展示了使用C#实现RabbitMQ消息持久化的完整方案。通过RabbitMQ.Client库创建持久化交换机(ExchangeDeclare设置durable:true)、持久化队列(QueueDeclare设置durable:true)和持久化消息(BasicProperties.Persistent=true)。代码包含生产者和消费者示例,强调三者必须同时持久化才能确保消息不丢失,并指出持久化会带来性能开销。关键步骤包括:声明持久化组件、设置消息属性、通过NuGet安装客户端库(RabbitM
2025-06-16 09:13:28
191
原创 在C#中乐观锁的实现
C#中实现乐观锁的几种方法:1.版本号机制:使用Interlocked.CompareExchange原子操作检查版本号是否变化;2.时间戳机制:类似版本号,通过比较时间戳检测修改;3.ConcurrentDictionary:利用其线程安全的AddOrUpdate方法;4.数据库实现:在SQL语句中检查版本号字段。这些方法都通过冲突检测而非直接锁定来保证线程安全,适用于读多写少的并发场景。实现时需根据具体需求选择合适方案。
2025-06-13 16:14:14
479
原创 在C#中的乐观锁和悲观锁
C#中的乐观锁与悲观锁是两种并发控制策略,核心区别在于对数据冲突的处理方式。悲观锁(如lock关键字)提前锁定资源,适合写操作频繁场景,但可能导致性能瓶颈;乐观锁(如版本号机制)仅在提交时检查冲突,适合读多写少场景,能提高并发性能但需处理冲突。数据库中分别对应SELECT FOR UPDATE和版本号检查的实现方式。开发者应根据具体场景(如银行转账用悲观锁、电商库存用乐观锁)选择合适机制,权衡并发性能与冲突处理成本。
2025-06-13 15:56:05
686
原创 在C#中的锁
lock关键字:最简单易用的锁机制,适合大多数场景。Monitor类:提供了更多控制能力,适合需要等待/通知的场景。Mutex类:适合跨进程同步。Semaphore类:适合限制并发数量的场景。类:适合读多写少的场景。在实际开发中,可以根据具体需求选择合适的锁机制。
2025-06-13 15:02:13
511
1
原创 对称加密和非对称加密
对称加密优点:加密效率高,适合处理大量数据。缺点:密钥分发和管理复杂,安全性依赖于密钥的保密性。非对称加密优点:密钥分发简单,安全性高,支持身份认证和数字签名。缺点:加密和解密速度慢,不适合处理大量数据。在实际应用中,通常会结合使用对称加密和非对称加密,发挥各自的优势。例如,在SSL/TLS协议中,使用非对称加密进行密钥交换,然后使用对称加密进行数据传输,既保证了密钥的安全性,又提高了数据传输的效率。
2025-06-13 14:52:02
711
原创 .NET 中 Task 和 Thread 的根本区别
都用于实现多线程编程,但它们代表了不同的抽象层次和设计理念。理解它们的根本区别对于编写高效、可扩展的代码至关重要。的本质区别,结合具体场景合理选择,是编写高性能、可维护异步代码的关键。
2025-06-10 13:04:13
617
原创 .NET 异步编程的核心优势
摘要:.NET异步编程通过async/await关键字显著提升应用性能与用户体验,主要优势包括:1)提高I/O密集型应用吞吐量;2)避免UI线程阻塞;3)减少线程资源消耗;4)简化异步代码结构;5)统一错误处理机制;6)全面兼容现代框架。其适用于网络请求、数据库操作等I/O场景,以及需要保持UI响应的客户端应用。开发者需注意区分I/O密集型与CPU密集型任务,合理使用Task.Run,避免在不必要场景过度使用异步。该模型有效平衡了性能、资源利用和代码可维护性。
2025-06-10 11:28:53
814
原创 Redis 发布订阅(Pub/Sub)模式详解
Redis发布订阅(Pub/Sub)是一种消息通信模式,支持发布者向频道发送消息,订阅者接收特定频道的实时消息。核心功能包括:通过SUBSCRIBE订阅频道、PUBLISH发布消息、PSUBSCRIBE模式匹配订阅。该模式适用于实时聊天、事件通知等场景,特点是一对多通信、消息不持久化。Python示例展示了如何使用redis-py实现发布/订阅功能。需注意消息可能丢失、性能影响等问题,建议根据业务需求考虑Redis Streams等替代方案。
2025-06-10 11:22:50
672
原创 容器那个端口是对外暴露的
连接到 Docker 中运行的 Redis 容器有多种方式,取决于你的客户端环境和网络配置。根据你的具体场景选择合适的连接方式,确保网络配置和认证信息正确。8000:6379 其中8000是对外暴露的。
2025-06-10 11:18:19
878
原创 使用 Docker Compose 编排本地容器
通过这些配置,你可以高效地使用 Docker Compose 管理本地开发环境中的多个容器。Docker Compose 是一个用于定义和运行多容器 Docker 应用的工具。文件,你可以轻松地将多个本地容器组合成一个完整的应用。
2025-06-10 10:22:01
239
原创 Docker 分阶段构建
Docker 分阶段构建(Multi-stage Build)是一种高效的镜像构建技术,允许在一个 Dockerfile 中使用多个构建阶段,每个阶段可以使用不同的基础镜像,最终只保留需要的文件,从而显著减小镜像体积。通过分阶段构建,你可以创建更高效、更安全的 Docker 镜像,同时保持开发流程的简洁性。
2025-06-10 10:16:18
346
原创 喜大普奔!MasterNeverDown.DiagramDesigner 震撼发布[0.0.1-beta
这种可视化的呈现方式,不仅提升了设计的趣味性,更大大增强了设计的可理解性与沟通效率,让电气设计不再是枯燥的图纸绘制,而是一场生动的电路原理展示。无论是绘制复杂的电力系统主接线图,还是进行工业自动化电气设计,这个全新的隔离开关电气控件都能让您的设计更加完整、准确,轻松满足各种实际项目的需求。亲爱的小伙伴们,在这个充满希望与活力的2025年4月11日,我们怀着无比激动的心情,要向大家宣布一个超棒的消息:MasterNeverDown.DiagramDesigner正式发布啦,版本号为0.0.1-beta!
2025-04-11 15:50:28
419
原创 MasterNeverDown.DiagramStudio:电力系统单线图设计的开源利器
新建图表:轻松开启新的设计项目,快速搭建单线图的基础框架,无论是简单的局部电路还是复杂的大型电网架构,都能迅速起步。保存图表:随时保存设计成果,确保工作进度不丢失。支持多种格式,方便在不同设备与软件间共享与备份,保障设计数据的安全性与可移植性。打开图表:无缝加载已有的单线图文件,无论是继续编辑完善,还是进行复审与修改,都能迅速进入工作状态,无需重复劳动,提高工作效率。创建符号:MasterNeverDown.DiagramStudio赋予用户高度的自由度,允许根据具体项目需求,自行设计独特的符号。
2025-04-10 15:59:08
816
原创 Swagger2Md:让WebAPI文档生成变得轻松高效
在当今数字化时代,WebAPI的开发与使用日益频繁。Swagger2Md应运而生,它能够将swagger.json转化为清晰易读的markdown文档,极大地简化了文档编写流程。Swagger2Md致力于为WebAPI文档生成提供简洁高效的解决方案,期待与更多开发者共同进步,让文档编写不再是难题。或许下一个使用Swagger2Md的人就是你,它适用于各类需要高效生成WebAPI文档的开发者和团队。:打开swagger.md文件,查看API的详细信息。,指定swagger.json的url进行文档生成。
2025-04-01 14:46:53
686
原创 开源项目推荐:MasterNeverDown.LeetCode,刷题必备的C#利器
LeetCode是一个全球知名的算法练习平台,上面有海量的算法题目,是程序员提升算法能力、准备面试的绝佳场所。然而,刷题过程中,我们常常需要重复编写一些基础的数据结构类,比如TreeNode、Node、ListNode等,这不仅浪费时间,还容易出错。MasterNeverDown.LeetCode正是为了解决这个问题而生。这个项目是一个C#刷题工具包,它为开发者提供了常用的数据结构类和一些实用的方法,帮助你在编写算法题时不必自己创建这些基础类。
2025-03-31 09:44:09
405
原创 RabbitMQ消息查看全攻略:管理界面、命令行、监控与日志
查看 RabbitMQ 中的消息有多种方法,每种方法都有其独特的优势和适用场景。你可以根据自己的需求和习惯选择合适的方法,或者将它们结合起来使用,以实现更全面的监控和管理。无论是通过可视化管理界面快速查看消息,还是使用命令行工具进行灵活操作,亦或是通过监控系统进行长期监控,掌握这些方法将使你能够更好地管理和优化你的 RabbitMQ 系统,确保其稳定高效地运行。希望这篇文章对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言,我们一起交流和学习。
2025-03-28 10:27:04
1490
原创 Docker Desktop 安装 PostgreSQL 并挂载本地卷
通过上述步骤,我们成功地在 Docker Desktop 上安装了 PostgreSQL,并通过挂载本地卷实现了数据的持久化。这种方式不仅简化了 PostgreSQL 的安装和配置过程,还确保了数据的安全性和持久性,非常适合开发和测试环境。如果你在操作过程中遇到任何问题,可以参考 Docker 和 PostgreSQL 的官方文档,或者在相关社区寻求帮助。希望这篇文章能帮助你更好地利用 Docker Desktop 和 PostgreSQL,提升你的开发效率。
2025-03-27 15:14:04
981
原创 Docker Desktop 安装 RabbitMQ 并挂载本地卷
通过上述步骤,我们成功地在 Docker Desktop 上安装了 RabbitMQ,并通过挂载本地卷实现了数据的持久化。这种方式不仅简化了 RabbitMQ 的安装和配置过程,还确保了数据的安全性和持久性,非常适合开发和测试环境。如果你在操作过程中遇到任何问题,可以参考 Docker 和 RabbitMQ 的官方文档,或者在相关社区寻求帮助。希望这篇文章能帮助你更好地利用 Docker Desktop 和 RabbitMQ,提升你的开发效率。
2025-03-27 15:00:40
731
原创 Docker Desktop 安装 Redis:轻松搭建本地缓存服务
如果你有一个自定义的 Redis 配置文件(redis.conf),可以通过 Docker 的卷挂载功能将其添加到容器中。假设你的配置文件位于这样,Redis 就会使用你的自定义配置文件来启动服务。通过以上步骤,我们成功地在 Docker Desktop 上安装并运行了 Redis 服务。Docker Desktop 让我们能够轻松地搭建和管理 Redis 环境,无需手动安装和配置 Redis 服务器。无论是用于本地开发测试,还是作为临时的缓存服务,这种方式都非常方便快捷。
2025-03-27 14:26:34
695
原创 链表加一问题中的「虚拟头节点」魔法
统一处理头节点变化:无论是新增节点还是修改原头节点,都通过同一逻辑处理。简化边界条件:避免在代码中频繁判断头节点是否为空或是否需要修改。反转链表删除链表节点合并多个有序链表掌握虚拟头节点的使用,能让你在处理链表问题时更高效、优雅。
2025-03-27 09:08:52
355
原创 Quartz.NET:.NET 应用的强大任务调度工具
Quartz.NET是一个开源的作业调度框架,允许开发者定义作业、设置调度计划,并根据不同的触发器执行这些作业。它支持复杂的调度场景,包括日常任务、重复作业以及基于 cron 表达式的调度。Quartz.NET是从 Java 的 Quartz 框架移植而来的,为 .NET 应用程序提供了类似的强大功能。要使用Quartz.NET,首先需要定义作业和触发器。作业是需要执行的任务,而触发器决定了作业的执行时间和频率。// 在这里实现作业的逻辑.Build();") // 每 5 分钟执行一次。
2025-03-25 09:14:48
596
原创 C# 检查系统WSL功能是否开启
通过上述代码,我们可以方便地使用 C# 来执行命令行命令,并获取命令的执行结果。利用这种方式,我们可以检查系统的各种功能是否开启,为后续的开发工作提供有力的支持。在实际应用中,我们可以根据命令的输出信息进行进一步的判断,以确定系统功能的状态,并做出相应的处理。希望这篇文章能帮助你理解如何使用 C# 检查系统功能是否开启,如果你有任何疑问或建议,欢迎在下方留言讨论。你可以根据实际情况对文章进行修改和调整,比如增加更多的使用场景、优化代码解释等,以满足你的公众号文章需求。
2025-03-19 08:41:48
348
原创 在PowerShell脚本中编辑appsettings.json
在PowerShell中,可以使用和命令来读取和修改文件内容,或者使用更强大的和正则表达式来实现复杂的文本替换。以下是一个示例,展示如何在当前目录下的文件中替换特定文本内容。
2025-03-14 13:32:44
339
原创 命令行创建 Docker 网络
假设你想要创建一个名为 的 Docker 网络,并设置标签 ,你可以使用以下 PowerShell 脚本:定义网络名称和标签:检查网络是否已经存在:创建新的 Docker 网络并设置标签:将上述脚本保存为一个 文件,例如 ,然后在 PowerShell 中运行它:确保你有足够的权限来运行 Docker 命令。如果需要,你可能需要以管理员身份运行 PowerShell。创建网络后,你可以通过以下命令验证网络是否正确创建:这将显示网络的详细信息,包括标签。希望这对你有帮助!如果有任何问题,
2025-03-13 16:00:49
437
原创 实现 ScrollView ScrollBar 自定义样式全攻略
在 WPF(Windows Presentation Foundation)开发中,我们常常会用到ScrollView控件,而默认的ScrollBar样式可能无法满足多样化的设计需求。这时,自定义ScrollBar样式就显得尤为重要啦。今天,咱们就来详细聊聊如何实现ScrollView中ScrollBar的自定义样式。在现代应用程序开发中,用户界面的美观性和独特性是吸引用户的关键因素之一。默认的ScrollBar样式千篇一律,缺乏个性。通过自定义样式,我们可以让ScrollBar。
2025-03-11 16:43:59
517
原创 C# 检查系统是否开启 Hyper - V
通过以上两种方法,我们可以在 C# 中方便地检查系统是否开启了 Hyper - V 功能。使用注册表查询的方法较为直接,但可能需要处理注册表访问权限问题;而使用 PowerShell 命令的方法则更灵活,但可能会受到 PowerShell 环境的影响。你可以根据实际需求选择合适的方法。
2025-03-11 16:30:53
739
原创 三元表达式解析器:Java 递归实现解析思路剖析
我们的任务是求值并返回其结果。' , ':' , 'T' 和 'F' ,其中 'T' 表示真, 'F' 表示假,所有数字都是一位数(即在 [0,9] 范围内)。条件表达式从右到左分组,表达式的结果总是为数字、'T' 或 'F'。通过这种递归的方式,我们可以有效地处理任意嵌套的三元表达式,准确地得出其结果。希望今天的分享能让大家对三元表达式的解析和递归算法的应用有更深入的理解。今天我们要探讨的就是一个关于解析三元表达式的问题,并且会深入分析使用 Java 递归实现的具体方法。类来实现三元表达式的解析。
2025-02-26 18:34:30
299
原创 在WPF中实现窗口拖拽功能:打造自定义交互体验
在WPF应用开发中,为窗口添加个性化的交互体验是提升用户满意度的关键。实现窗口的拖拽功能,特别是在自定义标题栏的情况下,能够为应用带来独特的外观和操作感受。本文将详细介绍如何通过处理鼠标事件,在WPF中实现窗口的拖拽功能,并附带完整的示例代码及详细说明。
2025-02-19 15:14:13
756
原创 揭秘 WPF 按钮:如何应用多个样式?
首先,我们来定义两个不同功能的样式。一个用于设置按钮的圆角,另一个用于设置按钮的背景颜色和字体颜色。-- 定义圆角样式 --></Border></Setter></Style>-- 定义颜色样式 --></Style>这里,样式通过为按钮设置了圆角,而样式则对按钮的背景颜色、边框颜色、边框厚度、文字颜色和字体大小进行了设置。在 WPF 开发中,虽然一个控件不能直接应用多个样式,但通过继承样式的方式,我们可以轻松实现类似的效果。这种方法不仅让代码保持整洁,还大大提高了样式的复用性。
2025-02-19 09:19:30
267
开源项目源码,openapi接口转markdown文档
2024-12-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人