自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 C# 锁机制——【2】深入原理

文章介绍了.NET锁优化机制:CLR通过对象头实现薄锁/厚锁状态机,JIT内联快速路径并自适应自旋;CAS操作须用SpinWait退避防止总线风暴;高竞争下会出现锁车队效应,需合理使用lock和自旋。

2026-09-04 16:27:05 403

原创 C# 锁机制——【1】基础讲解

本文梳理 C# 全套锁机制,从 CPU 多级缓存、MESI 协议切入,讲解多线程三大底层问题:可见性、有序性、原子性,解释缓存、指令重排、内存屏障、非原子操作带来的各类诡异并发 bug。依次解析 lock、Mutex、SemaphoreSlim、ReaderWriterLockSlim、Interlocked、SpinLock、Monitor 条件变量,以及 Concurrent 系列线程安全集合,介绍各同步原语底层实现、锁升级逻辑、典型用法和高频踩坑点。对比跨进程能力、性能、异步支持差异,给出工程化选型建

2026-09-04 09:34:50 279

原创 C# 上位机 Bug 记录:本地 UI 日志正常,MES 接口时间格式解析失败(隐形 Unicode 特殊字符)

本次记录一个非常隐蔽的跨系统 Bug:C# 本地 UI、日志、时间格式展示全部正常,但通过 HTTP JSON 推送到 MES 时,持续报 “时间格式非法”。抓包后发现,时间字符串中的横杠被序列化为\u2011,原因是格式化字符串里混入了 U+2011 非断行连字符。Windows 界面渲染时几乎看不出差异,但 MES 强校验只认标准 U+002D 半角减号。问题根源是复制文档模板时带入了隐形脏字符。

2026-08-31 14:00:44 436

原创 C# 定时器——【1】基础讲解

本文详解上位机开发五类常用定时器,从底层执行模型、适用场景、优缺点、高频坑点全方位拆解,重点剖析任务重入核心疑难问题。结合工业实战梳理选型标准、防重入方案与性能误区,附带直观对比表与可落地代码,帮助开发者规避界面卡顿、数据错乱、进程残留等现场 Bug。

2026-08-28 15:44:04 351

原创 C# 特性(Attribute)——【2】工业设备参数框架设计

本篇为 C# 特性工业进阶实战,跳出基础语法讲解,聚焦工业上位机参数框架工程设计。针对工控项目参数冗余、规则分散、迭代难维护等痛点,详解特性模板化设计、元数据规范、中间层解耦、反射缓存核心方案,结合可复用代码与工程避坑原则,给出适配长期迭代的工业参数架构落地思路。

2026-08-28 13:33:35 326

原创 C# 特性(Attribute)——【1】基础讲解

本文通俗易懂讲解C#特性核心原理,摒弃空洞理论,聚焦基础语法与工业上位机实战场景。结合设备UI自动生成、PLC协议路由、参数校验等工控常用案例,讲解特性结合反射的落地方式,同时梳理使用规范与避坑要点,帮助开发者用特性优化工控项目代码结构。

2026-08-28 09:39:13 458

原创 C# 进阶:ref foreach、Span<T>、CollectionsMarshal.AsSpan,如何原地修改 struct?

在C#中,直接修改值类型集合(如List<struct>)的元素时,foreach遍历获取的是副本,修改无法生效。解决此问题的进阶方案包括: 数组+ref:通过ref直接修改数组元素,性能最优但仅限数组类型。 ref foreach:遍历时获取元素引用,需集合支持ref枚举器,适用于底层代码。 Span<T>:提供连续内存视图,支持高效批处理,但受限于ref struct生命周期。

2026-08-13 20:14:59 344

原创 C# 开发实录:foreach 遍历 struct ,为什么看起来改了,结果却没生效?

在C#开发中,遍历结构体(struct)集合修改数据时可能遇到“修改无效”的陷阱。由于结构体是值类型,foreach循环中获取的是元素副本而非引用,导致对副本的修改不会影响原集合。典型现象是断点调试时字段已变更,但集合数据仍为旧值。此问题易被误判为通讯覆盖、线程同步等复杂问题,实际只需改用for循环按索引取出、修改并写回即可解决。

2026-08-13 19:57:01 487

原创 关于.NET中的队列理解

探讨队列的相关操作

2026-04-12 14:17:57 646

原创 到底应不应该写注释?

笔者结合目前为止的工作经验,讨论关于注释应该如何写的问题。

2026-04-12 12:10:59 410

原创 迪米特法则(LoD):别总去打听“朋友的朋友”

迪米特法则:降低对象间耦合的设计原则 摘要 迪米特法则(LoD)强调对象间应保持最小知识,避免过度了解其他对象内部结构。当代码出现多层链式调用(如order.Customer.Address.City)时,表明对象耦合过深,违反了这一原则。这种设计会导致系统结构变更时产生连锁反应。 遵守迪米特法则的关键在于: 对象只与直接朋友交互 避免穿透访问"朋友的朋友" 让每个对象封装自身逻辑 典型案例显示,将员工信息展示逻辑内聚在Employee类中,比在外部报表类中直接访问员工属性更符合该原则。

2026-03-26 08:15:18 373

原创 依赖倒置原则(DIP):别让业务层直接绑死底层实现

摘要:依赖倒置原则(DIP)是解决代码耦合问题的关键方法。该原则指出高层模块不应依赖低层模块,而应共同依赖抽象。通过生活化的插座比喻,说明抽象接口如同标准插座,使不同设备能灵活替换。违反原则的典型症状包括业务类直接new底层对象、切换实现需修改多处、单元测试困难等。在数据采集系统案例中,直接依赖串口和文件存储的实现会导致修改困难,而通过定义ICommunicator和IDataStore接口,再注入具体实现,可使系统更灵活。遵循依赖倒置原则能带来实现切换方便、易于测试、降低耦合和结构稳定等优势。

2026-03-26 08:14:24 372

原创 接口隔离原则(ISP):别让接口越来越胖

接口隔离原则(ISP)强调客户端不应被迫依赖不使用的接口方法,提倡将大而全的接口拆分为小而专的独立接口。本文通过设备控制场景的案例,对比了违反ISP的"胖接口"问题与遵循ISP的合理设计: 问题接口强制实现类编写冗余方法或抛出异常 改进方案按能力拆分为IReadable、IControllable等单一职责接口 不同设备类只需实现相关接口,避免无关方法 调用方只需依赖所需能力对应的接口 典型症状包括实现类存在大量空方法、NotImplementedException、接口频繁改动影响无关

2026-03-26 08:13:00 528

原创 开闭原则(OCP):加功能时,尽量别去改老代码

文章摘要: 开闭原则(OCP)是软件开发的核心设计原则,强调软件实体应对扩展开放而对修改关闭。实际开发中常见的问题是反复修改老代码来添加新功能,导致代码臃肿、维护困难。本文通过塔防游戏的敌人移动案例,对比了硬编码类型判断(违反OCP)和面向抽象编程(符合OCP)两种实现方式。正确的做法是通过抽象基类定义稳定契约,让子类实现具体行为,这样新增功能只需添加新类而无需修改原有代码。该原则能有效控制修改风险,提高代码的可维护性和扩展性。

2026-03-25 11:06:36 471

原创 单一职责原则(SRP):为什么你的类总是越改越乱?

单一职责原则(SRP)实践指南 核心要点: 定义:每个类只应有一个引起修改的原因,职责边界清晰 问题表现: 类膨胀(超千行代码) 修改时牵一发而动全身 类名模糊(如XXManager/Helper) 典型场景改进: 上位机开发中常见的"全能类"(通信+解析+日志)应拆分为: SerialCommunicator:专管设备连接/数据传输 DataParser:专注协议解析 FileLogger:独立处理日志记录 优势体现: 修改协议不影响通信模块 调整日志方式不涉及业务逻辑 问题定位更快速

2026-03-25 10:41:42 827

原创 Golang语言闭包完全指南

本文总结了Golang闭包的核心概念和实际应用。

2026-03-18 13:00:00 439

原创 大模型开发之 RAG 的初步认识

本文深入浅出地介绍了RAG技术的核心原理与应用价值。

2026-03-18 08:45:51 718

原创 上位机开发中常用高性能定时器及典型应用

上位机开发高性能定时器应用指南 本文总结了上位机开发中5种常用定时器的特性及适用场景。

2025-08-12 09:27:51 462

原创 分支管理指南

Git Flow 分支管理指南摘要 本文系统介绍了Git Flow分支管理模型,构建标准化的代码管理体系。

2025-08-12 09:09:33 1288

原创 里氏替换原则(LSP):继承不是为了“像”,而是为了“能替换”

子类应当完全继承父类的行为,保证在程序中替换父类对象为子类对象后,程序的行为不会出错。这意味着子类不仅要继承父类的属性和方法,还要遵循父类的契约,确保行为的一致性。在这个例子中,我们将考虑一个简单的场景:有多个角色类型,每个角色可以使用不同的武器,每种武器也有不同的攻击方式。每个角色可以使用不同的武器并有不同的行为,例如:士兵可以使用步枪,狙击手可以使用狙击枪,支援角色可以使用机枪。每种武器有不同的攻击方式,例如:步枪有快速的单发射击,狙击枪有高伤害的慢速射击,机枪有快速的连发射击。,从而实现不同的行为。

2025-03-07 16:43:50 694

原创 【Web3面试题库】——DeFi

DeFi(去中心化金融,Decentralized Finance)是基于区块链技术,特别是以太坊等智能合约平台构建的金融系统,旨在通过去中心化的方式重构传统金融服务。DeFi 利用智能合约、去中心化交易所(DEX)、稳定币、借贷协议等技术,提供传统银行和金融服务(如借贷、支付、保险等)的去中心化版本。DeFi 的核心理念是开放、透明和无需许可,任何人只要有互联网连接和数字资产,都可以参与到 DeFi 协议和产品中,避免了传统金融体系中的中介机构、限制和费用。DeFi(去中心化金融)

2024-12-29 12:03:12 1678

原创 【Web3面试题库】——openzeppelin

是一个开源的智能合约库,提供了许多经过审计、可重用并且高安全性的合约模块。它专为以太坊和其他区块链平台开发,帮助开发者快速、可靠地构建去中心化应用(DApp)。OpenZeppelin 提供的智能合约涵盖了从代币标准、治理合约到安全性措施等多个方面,可以极大地简化开发过程并减少潜在的安全风险。该库的核心目标是让开发者能够构建更安全、更易于维护的智能合约应用,而无需从零开始编写代码。

2024-12-28 22:55:02 1862 1

原创 【Web3面试题库】——Solidity

Solidity

2024-12-28 22:41:27 3214

原创 【Web3面试题库】——EVM

EVM

2024-12-28 22:18:50 1038

原创 【openzeppelin学习系列】openzeppelin的ERC721合约

ERC721合约分析

2024-07-02 17:33:55 1215

原创 【openzeppelin学习系列】ERC-165:智能合约的交互标准

深入理解 ERC-165:智能合约的交互标准

2024-07-02 11:33:33 1059

原创 【openzeppelin学习系列】ERC721

ERC721基础

2024-07-01 15:18:35 944

原创 【openzeppelin学习系列】ERC20

ERC20基础

2024-07-01 14:52:16 2467

空空如也

空空如也

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

TA关注的人

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