- 博客(28)
- 收藏
- 关注
原创 .NET(C#) Internals: .NET Framework中已使用的设计模式
类交互的一个通常例子是:一个类应该(观察者,Observer)被通知,当被观察者(Subject)的某些东西改变了。装饰模式:一种动态地往一个类中添加新的行为的设计模式,通过使用修饰模式,可以在运行时扩充一个类的功能。原理是:增加一个修饰类包裹原来的类,包裹的方式一般是通过在将原来的对象作为修饰类的构造函数的参数。装饰类实现新的功能,但是,在不需要用到新功能的地方,它可以直接调用原来的类中的方法。被观察者维护者一个对它感兴趣的观察者列表,每次被观察者的状态改变时,它对每个观察者调用Notify方法。
2026-07-05 14:45:29
261
原创 Silverlight 有没有对 FLV 视频提供支持?
FLV 文件中第一个 VIDEOTAG 的 VIDEODATA 的 AVCVIDEOPACKET 的 Data 总是 AVCDecoderConfigurationRecord(在 ISO/IEC 14496-15 中定义),解码的时候注意跳过这个 VIDOETAG。FLV 文件中第一个 AUDIOTAG 的 AUDIODATA 的 AACAUDIODATA 的 Data 总是 AudioSpecificConfig(在 ISO/IEC 14496-3 中定义),解码的时候注意跳过这个 AUDIOTAG。
2026-07-05 14:44:45
219
原创 Ø 性能优化的思路
首先是较为精准的定位问题,借助于相应的工具包,分析系统性能瓶颈在哪,在根据其性能指标,以及所处于层级决定选择优化的方式方法。在选择优化的方式方法时,大家可以参照以下章节调优方法,架构优化递进,进行正确的,有针对性,有步骤的优化。可能会发现部分指导思想或许有相悖嫌疑,大可不必较真,系统优化的过程本身就是一个不断分离+共享的组合拳,至于具体选择哪种优化方式,根据具体需求来定,但大型应用发展的总体思路是不断分离,在通过索引(非数据库)进行关联起来,,发现病症所在的医生并不比操作手术刀的医生水平差。
2026-07-04 14:48:38
198
原创 擦亮自己的眼睛去看SQLServer之简单Insert
惰性写入器线程定期检查SQLServer空闲缓冲列表的大小,当这个值过低的时候,惰性写入器会扫描整个数据缓存,将所有一段时间没被使用的页面老化。检查点是检查点线程创建的一个时间点,将保证脏页都写入磁盘,并且在页面头将缓存中的这个页面标记为干净的页面注意检查点是不删除脏页的。但是这些原因不是主要原因,主要原因就是这里说的写事务日志,delete是每次删除一行,并在事务日志中为所删除的每行记录一项,而truncate是通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。
2026-07-04 14:47:37
208
原创 高并发服务端分布式系统设计概要(上)
好,先解释下这2点。对于(1)应该容易理解,比如说,我这套系统用于微博(就假想我们做一个山寨的推特吧,给他个命名就叫“山推” 好了,以下都叫山推,Stwi),那么,“我关注的人”这一个业务的数据,肯定和“我发了的推文”这个业务的数据是分开存储的,那么我们现在把,每一个业务所负责的数据的存储,称为一个group。假如我们要做的系统不是山推,而是淘宝购物车,支付宝一类的,那么弱一致性(最终一致性)则很难满足要求,同时写服务挂掉也是不能忍受的,对于这样的系统,应保证“强一致性”,保证不能丢失任何数据。
2026-07-03 17:23:05
172
原创 项目经理在项目中究竟是什么角色
国内的氛围是“学而优则仕”,放到软件开发领域也是一样,不少开发人员向往管理岗位,一是觉得技术领域日新月异,学习上感觉吃力;二是长江后浪推前浪,前浪死在沙滩上,技术上新人更有一股狠劲,而年纪大了的开发人员面临婚姻、子女、父母的诸多问题难以拼命了,身体也大不如前;三是几千年的文化形成要做人上人,必须管理人的观念。上述三个方面没有对错,我只想说如果你对技术没有持续的热忱,你想向项目经理或管理领域发展时,就要明白项目经理这四个字背后的含义。
2026-07-03 17:22:03
236
原创 如果你这样回答“什么是线程安全”,面试官都会对你刮目相看
需要说明的是这N份数据都还是存储在公共区域堆内存里的,经常听到的“线程本地”,是从逻辑从属关系上来讲的,这些数据和线程一一对应,仿佛成了线程自己“领地”的东西了。回到程序里,要让公共区域堆内存中的数据对于每个线程都是安全的,那就每个线程都拷贝它一份,每个线程只处理自己的这一份拷贝而不去影响别的线程的,这不就安全了嘛。大街上的共享单车,现在都很安全,因为太多了,到处都是,都长得一样,所以连搞破坏的人都放弃了。再重申一遍,ThreadLocal就是,把一个数据复制N份,每个线程认领一份,各玩各的,互不影响。
2026-07-02 21:15:11
241
原创 一篇文章帮你彻底搞清楚“I/O多路复用”和“异步I/O”的前世今生
这就是一个比较“土”的多路复用,首先在发射端把多种信号或数据进行“混合”,接着是在通道上进行传输,最后在接收端“分离”出自己需要的信号或数据。在网络的初期,网民很少,服务器完全无压力,那时的技术也没有现在先进,通常用一个线程来全程跟踪处理一个请求。(这节省的可都是纯利润呀。一对一服务是典型的有钱任性,虽然响应及时、服务周到,但不是每个人都能享受的,毕竟还是“屌丝”多嘛,那就来个共享服务吧。所以实际当中更多的情况是,客人坐下后,会给他一个菜单,让他先看着,反正也不可能立马点餐,服务员就去忙别的了。
2026-07-02 21:14:20
185
原创 C#如何安全、高效地玩转任何种类的内存之Span的本质(一)。
作为.net程序员,使用过指针,写过不安全代码吗?为什么要使用指针,什么时候需要使用它,以及如何安全、高效地使用它?如果能很好地回答这几个问题,那么就能很好地理解今天了主题了。C#构建了一个托管世界,在这个世界里,只要不写不安全代码,不操作指针,那么就能获得.Net至关重要的安全保障,即什么都不用担心;那如果我们需要操作的数据不在托管内存中,而是来自于非托管内存,比如位于本机内存或者堆栈上,该如何编写代码支持来自任意区域的内存呢?这个时候就需要写不安全代码,使用指针了;而。
2026-07-01 16:30:04
163
原创 部署您的第一个ASP.NET Core应用到k8s集群
Kubernetes是Google基于Borg开源的容器编排调度引擎,作为CNCF(Cloud Native Computing Foundation)最重要的组件之一,它的目标不仅仅是一个编排系统,而是提供一个规范,可以让你来描述集群的架构,定义服务的最终状态,Kubernetes可以帮你将系统自动得达到和维持在这个状态。
2026-07-01 16:29:16
190
原创 MicroPython 内核开发者直接狂喜!这个 Claude 插件市场,把开发全流程做成了「对话式外挂」合集 - upypi(45)
家人们谁懂啊!mpremote直到我挖到了 Andrew Leech 大佬的宝藏项目:,直接把 MicroPython 开发的全流程,打包成了 Claude Code 里的一键插件!
2026-06-29 15:30:24
201
原创 ByteArrayInputStream和DataInputStream的源码分析和使用方法详细分析前言)UTF-8 编码规则
UTF-8(Unicode Transformation Format-8-bit)是一种针对 Unicode 的可变长度字符编码,通过 1 至 4 个字节表示一个字符,完美兼容 ASCII 编码,同时支持全球所有语言的字符(包括中文、日文、韩文、阿拉伯语等)。其核心设计思想是通过首字节的标识符确定字符的字节长度,后续字节以固定格式标记,确保编码的唯一性和可解析性。UTF-8 的编码规则基于 Unicode 码点的范围,通过首字节的前几位(前缀码)标识字符的字节长度,后续字节以 10 开头作为延续标记。
2026-06-29 15:28:50
159
原创 新版最重要的变化
这些东西听起来比“画一个三角形”硬很多,但它们决定了库的上限。Zenith.NET 如果只是做一个简单渲染封装,旧 API 也能继续用;但如果要承载 ray tracing、mesh shading、GPU-driven rendering、后处理链、ImGui/Skia/游戏引擎集成,那底层模型就必须先足够现代。现代图形 API 的复杂度不是凭空来的。它把以前驱动和封装层偷偷替应用做的事情,重新交还给应用层。
2026-06-28 15:42:39
155
原创 继承策略——TPC
这位同仁比较负责,他觉得哪怕用 EF Core 生成数据库也要规范一点,字段名也应该用边界字符,比如,在 SQLite 中,边界是双引号,表达式应写成 "age" > 15,在 SQL Server 中写成 [age] > 15。3、也正因为存在继承关系的成员是共享元数据的,所以,像 Name 属性那样要配置最大字符数为 15,也只能在 Animal 类上配置,而且所以派生类所映射的表中,各个继承的成员所对应的列,其类型和参数也必须相同的。按照上述代码,基类是 Animal,其他两个是它的子类。
2026-06-28 15:41:47
193
原创 深度拆解 OpenCoWork:一个本地多智能体桌面平台的架构设计与实现
协作工具包括任务、提问、计划、目标、记忆;它的定位不是再做一个聊天窗口,而是把大模型、文件系统、Shell、SSH、MCP、定时任务、办公 IM 插件和多 Agent 编排放进一个本地桌面运行时里,让 Agent 真正进入开发者的工作环境。这篇文章不做功能清单罗列,重点拆它的技术实现:Electron 如何分层、Agent runtime 如何落地、工具系统如何注册与执行、Plan Mode 如何约束写文件、Cron Agent 如何后台运行、MCP 和办公消息插件又是怎样接入的。容易膨胀成“超级入口”。
2026-06-27 17:24:27
240
原创 Excel考勤公式-上班与休息日
若指定日期等于法定休息日,即可判定为休息日。否则,若非法定调班日,且为周六、周日则为休息日。点击展开流程图是否是否是否开始指定日期是否为法定休息日?判定:休息日是否为法定调班日?判定:非休息日是否为周六/周日?判定:休息日就是:休息日 = 法定休息日 or 周六、周日(非法定调班日)根据,可以创建智能表(其名为"表1"),其中A列标题为,B列标题为,分别填入规定的休息日和调班的日期,然后在D2单元格输入测试用的日期,比如2026-10-10点击展开表结构。
2026-06-27 17:23:46
264
原创 本文能帮你解决的
模型会返回一个类似 {"name":"get_weather","arguments":{"city":"杭州"}} 的指令。,前面我用的 qwen3:0.6b 结果就是不调用工具,换成 qwen3.5:0.8b 立马识别到工具了,那个心酸呀!后面多轮对话时,又出现第二轮和第一轮回复相同内容的情况,一通折腾,最后找到原因是小模型做不了轮对话,至少要是。然后把工具元信息统一注册到一个列表里。一定要在第二轮请求里把之前的消息和工具结果都拼进去,组成完整的对话历史,不然模型会失忆,以为你在自言自语。
2026-06-25 16:33:35
225
原创 【EF Core】使用自定义的值比较器
要注意的是,PropertyBuilder 的成员方法/扩展方法并没有让咱们设置比较器的(使用 HasConversion 方法除外,配置值转换器时可以设置比较器。Paper 实体类的 Color 属性是 RGBColor 结构类型,而存入数据库时,我们只需要一个 uint 值即可,因此,它需要一个值转换器。抠亮眼睛看清楚呢,属性值确实是变了的,但由于咱们自定义的比较器在作怪,所以,实体的状态依然被标记为 Unchanged。好了,现在咱们实现数据库上下文类,并在配置数据库模型时应用自定义的比较器。
2026-06-25 16:31:32
158
原创 Docker 部署 RocketMQ 5.x 完整教程(含新手踩坑+命令深度解析)
但我不太想只是“做完”,所以在做完之后,我又自己改了一版,做成了“敕勒食驿”。但对我来说,这是一个挺重要的小节点,是我一点一点写出来的,是我努力的一个过程。但慢慢地,我开始有一点感觉了——至少我写的东西,是能跑起来的。不是因为别人都在考,而是我自己觉得,我现在的基础还不够扎实,很多东西只是刚刚接触,还没有形成体系。有点感慨,所以今天不打算讲什么技术,就当是一次随便的记录,想到什么写什么,说说我和计算机的故事。虽然现在回头看,项目也没有多复杂,但在当时,那种“这是我自己做出来的东西”的感觉,还是挺真实的。
2026-06-24 15:49:51
290
原创 vue3+ts构建企业级文件传输管理系统:状态管理、性能优化与用户体验的深度实践
的矛盾:本地队列保证操作实时响应,API数据确保记录持久化。当从API获取数据时,组件采用。组件使用了一个自定义的。
2026-06-23 16:18:47
193
原创 NET 高级开发 | 开发 .NET 诊断工具、链路追踪原理
我们可以在程序中自定义事件源,然后通过代码监听或 .NET 中的诊断工具收集这些事件。示例项目在 Demo2.ES 中,下面的代码定义了一个事件源 MyEventSource 类,其内部使用了一个计数器。其功能非常简单,每次循环时,触发 MyEventSource 内的计数器自动递增 1。number++;EventSource.LogEvent("测试", number);// MyEvent 是事件的名称// 计数器然后我们通过工具收集事件信息。
2026-06-23 16:17:58
206
原创 【Azure App Service】应用服务(Web App)里的 SNAT 端口 vs 出站连接数:到底是谁限制了谁?
本文会先把 SNAT 端口的占用原理 讲清楚,再解释它和出站连接 (Outbound Connections) 的区别。
2026-06-22 19:25:00
169
原创 RM500U 5G模块debug及拨号上网测试
根据原厂提供资料需要Sprd_pcie_V1.1.8驱动,详细可以查阅模块原厂文档《Quectel_RGx00U&RM500U系列_PCIe驱动_用户指导_V1.1.pdf》编译进内核后查看dmesg | grep pcie 是否有这里加载信息或者使用lsmod查看lsusblspci执行如下命令可以看到网卡 pcie0、 pcie1、 pcie2、 pcie3、 sipa_dummy0。RM500U PCIe 支持 4 路拨号,网卡分别对应 pcie0、 pcie1、 pcie2、 pcie3。
2026-06-21 23:38:04
259
原创 张高兴的 Hailo-10 开发指南:(二)使用 LangChain 搭建本地大模型 RAG 问答应用
Hailo-Ollama 的底层用的是 oatpp HTTP 框架,它对请求体的 JSON 字段类型要求很严。LangChain 官方的ChatOllama会往请求里附加optionskeep_alive等额外字段,oatpp 碰到未知字段直接报类型解析错误。解决方案是继承model: str@propertyreturn [self,self,) as resp:continueif token:break只传model和messages两个字段,完全避开 oatpp 的字段校验问题。
2026-06-21 23:37:22
387
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅