- 博客(27)
- 收藏
- 关注
原创 .NET中的加密算法总结(自定义加密Helper类续)
大家好,我是你们的老朋友。上一篇我们聊了对称加密和非对称加密的基础概念,还手写了一个简单的AES加密Helper。今天咱们继续深挖,把.NET里那些常用加密算法的“家底”都翻出来,配上可运行的代码,让你一次性搞懂怎么选、怎么用。### 为什么还要继续封装?很多同学说:“.NET不是自带吗?直接用不就行了?” 没错,但直接用的痛点很明显: - 代码重复:每次都要写usingCreate()Dispose()
2026-08-05 17:38:36
143
原创 Fiddler - 前端开发值得拥有
当你遇到“线上环境正常,本地开发却报错”、“接口返回数据对不上”、“页面加载慢得离谱”这类问题时,大多数人的第一反应是打开 DevTools 的 Network 面板。但 DevTools 能做的只是“看”,而 Fiddler 能做的则是“改”。虽然 DevTools 足够日常调试,但当你需要深入底层协议、复现生产环境问题或进行自动化测试时,Fiddler 是无可替代的利器。(DevTools 能看,但不如 Fiddler 直观)。安装后,Fiddler 会作为系统代理,所有浏览器的请求都会经过它。
2026-08-05 17:37:30
174
原创 Web安全性测试之XSS
即使代码有漏洞,浏览器也能挡住。作为测试人员,不仅要会找漏洞,更要能给出可落地的修复建议。希望这篇文章能帮你从原理到实践彻底搞懂XSS。如果你在开发或测试中遇到问题,欢迎在评论区留言,我们下期再见!?
2026-08-04 17:20:56
140
原创 C#综合揭秘——深入分析委托与事件
订阅退订 || 安全性 | 可能被外部恶意替换调用列表 | 防止外部直接触发 || 适用场景 | 回调、函数参数传递 | 发布/订阅模式、UI事件 || 内存泄漏风险 | 需手动管理引用 | 同样存在,需注意退订 |#### 3.1 为什么事件不能直接在外部触发?### 三、委托与事件的核心区别| 特性 | 委托 | 事件 ||------|------|------|| 封装性 | 公开,可随意调用 | 私有,只能类内部触发 || 外部操作 | 可赋值、可调用、可修改调用列表 | 只能。
2026-08-04 17:19:54
170
原创 闲谈.Net类型之public的不public,fixed的不能fixed
因为它本质上是“钉住托管堆上的对象,防止其移动”,而多维数组的内部布局是连续的,但语法上不支持直接取指针。更别提那些引用类型数组,每个元素都是引用,你固定了数组本身,元素所指的对象还是会移动。,外人只能拿到一个“看不见的类型”的引用,想用它的方法?在这里是必须的,但你不能“固定”一个结构体变量本身——这就像你要给一台正在移动的卡车换轮胎,你不能把整台车钉在地上,只能把轮胎卸下来单独固定。各位朋友,今天咱们不聊高深莫测的架构,也不谈玄之又玄的性能调优,就来闲话一下 .NET 里那些“名不副实”的家伙。
2026-08-03 16:47:45
165
原创 2026 年 .NET 客户端常用 MVVM 框架推荐
## 2. 2026 年主流 MVVM 框架一览| 框架 | 适用平台 | 特点 ||------|----------|------||—## 3. 首选:CommunityToolkit.Mvvm(官方推荐)这是微软官方维护的社区工具包,2026 年已迭代到 8.x 版本,性能极佳,且完全支持源生成器(Source Generator),让你写代码像“魔法”一样简洁。### 3.1 安装。—## 4. 进阶选择:Prism(模块化架构)如果你的应用是大型项目,比如企业级 ERP、金融客户端,需要。
2026-07-31 19:49:24
194
原创 To B 定位,是要回答好这四个问题
做 To B 产品,最忌讳的就是“自嗨”。我们写代码时知道要定义接口、明确入参和出参,做产品定位时却常常凭感觉。其实,To B 定位本质上是一次“系统设计”——你需要回答清楚四个核心问题,才能让产品在市场中找到准确的位置,让销售、研发、市场团队像调用同一个 API 一样协同工作。这四个问题分别是:为谁解决什么问题?、凭什么是我?、客户为什么现在买?、我的边界在哪里? 下面,我们逐一剖析,并用代码示例来具象化这些抽象概念。### 问题一:为谁解决什么问题?(目标客户与核心痛点)这是定位的“入参”。你不能说“我
2026-07-31 19:48:16
148
原创 这 3 年做教育相关项目,我把一些经验整理成了一个开源 Agent Skills 项目
从最初的简单问答机器人,到后来能自适应学生水平的个性化学习助手,我逐渐意识到:教育场景下的 AI 应用,核心在于让 Agent 掌握正确的技能(Skills),而不仅仅是调用大模型。下面是一个更复杂的例子:一个数学解题技能,它利用大语言模型(LLM)生成分步解答,但通过技能封装让代码更清晰。## 项目总结:Agent Skills 如何改变教育三年教育项目经验告诉我,一个成功的教育 Agent 不是“万能问答机”,而是。:好的教育 Agent,就像一位有耐心的老师——它知道何时该讲,何时该问,何时该鼓励。
2026-07-30 19:02:12
230
原创 21. “|”不只是按位或,90%的人不知道
被重载用于集合的并集运算,这类似于按位或的“合并”特性,但应用于不同数据类型。从底层位操作到逻辑短路(尽管非标准),从权限掩码到集合合并,再到模式匹配,它展现了编程语言设计的多样性和灵活性。它可以是逻辑运算的加速器、权限管理的利器、数据合并的巧手,甚至在某些语言中扮演着模式匹配的角色。在这个例子中,按位或将两个数的位合并,结果位为 1 的地方表示至少一个操作数在该位为 1。,不妨思考它到底是按位运算、逻辑组合,还是其他巧妙用法——90% 的人可能只知其一,但现在你已掌握了它的全貌。例如,Scala 中的。
2026-07-30 19:01:03
219
原创 AI编程系列02:合并知识功能,给 AI 问数和 RAG 场景打基础
但现实世界中的 AI 应用往往需要处理更复杂的场景:比如让 AI 从多个文档中提取信息、合并不同来源的知识,或者为特定领域(如医疗、法律)构建一个“会问问题”的智能助手。在 RAG 场景下,合并知识是检索后的关键步骤:系统先从知识库中检索出相关片段,然后将这些片段合并成一个上下文,最后让 AI 模型基于上下文生成回答。让我们写一个基础函数,它接收多个文本片段,将它们合并为一个连贯的上下文。我们从简单的字符串拼接开始,学习了结构化数据的去重与排序,构建了一个完整的 RAG 原型,并探索了动态权重的合并策略。
2026-07-28 20:09:50
160
原创 开源免费的桌面自动化神器,AI 一句话生成工作流:AutoFlow Studio
首次使用,你需要准备一个 API Key(比如调用 OpenAI 或国产大模型),或者使用 AutoFlow 内置的轻量模型。## 实战案例2:批量处理Excel数据并发送邮件另一个常见场景:从Excel读取用户列表,生成个性化报告,然后发送邮件。你只需用自然语言描述需求,它就能自动生成可执行的自动化流程,无需写代码或拖拽界面。:如果界面元素找不到,AI 会尝试语义匹配(比如找“提交”按钮找不到,就找“确认”按钮)。:比如“每天上午9点,打开Excel,把A1单元格的数据复制到记事本”,AI直接生成脚本。
2026-07-28 20:07:16
217
原创 一次修改闭源 Entity Provider 程序集以兼容新 EntityFramework 的过程
该 Provider 是闭源的,无法直接修改源代码// 1. 创建旧工厂实例(通过反射加载闭源 DLL)var legacyFactory = CreateLegacyFactory("LegacyProvider.dll");// 2. 创建适配器工厂var adaptedFactory = new LegacyProviderFactoryAdapter(legacyFactory);
2026-07-26 18:19:36
195
原创 使用Visual Studio SDK制作GLSL词法着色插件
此外,制作这个插件的过程会让你深入理解VS的扩展机制,这对以后开发其他语言支持插件(如HLSL、CUDA内核)也大有裨益。然后创建一个新项目:1. 文件 → 新建 → 项目2. 搜索“VSIX Project”,选择“VSIX Project”模板3. 命名为“GLSLSyntaxHighlighter”VSIX项目默认会生成一个空白的扩展骨架。这个插件虽然简单,但展示了VS扩展开发的核心模式。:对于大文件,应该只重新分析可见区域,而不是整个文件你可以通过增加新的分类类型和对应的正则表达式来扩展功能。
2026-07-26 18:18:25
163
原创 超高性能管线式HTTP请求(实践·原理·实现)
很明显的差距,对于线程组的形式大概使用了25秒,而异步接收使用了超过1分钟的时间(异步接收的模式是平台推荐的发送模式,正常应用情况下性能是十分优越的,而对于过高的压力不如自定义的线程组,主要还是因为其使用了默认的线程池,而默认线程池不可能在短时间开100条线程出来用来接收数据,所以大量的回复对线程池里的线程就会有大量的切换,通过设置默认线程池数量可以提高测试中的性能)。注意,这里的测试如果选择了性能较低的测试对象,大部分流量会在服务器端排队等候,导致吞吐量不大,这实际是服务器端处理过慢,与客户端关系不大。
2026-07-22 16:52:33
191
原创 String hashCode 方法为什么选择数字31作为乘子
正如 Goodrich 和 Tamassia 指出的那样,如果你对超过 50,000 个英文单词(由两个不同版本的 Unix 字典合并而成)进行 hash code 运算,并使用常数 31, 33, 37, 39 和 41 作为乘子,每个常数算出的哈希值冲突数都小于7个,所以在上面几个常数中,常数 31 被 Java 实现所选用也就不足为奇了。上面的图还是很一幕了然的,乘子2算出的哈希值几乎全部落在第32分区,也就是 [0, 67108864)数值区间内,落在其他区间内的哈希值数量几乎可以忽略不计。
2026-07-22 16:51:43
163
原创 三种使用方式# 1. 自动模式(默认)#
支持的 data-* 属性:data-square-size、data-speed、data-direction、data-z-index、data-background-color。无限网格:每帧让 gridOffset 按方向累加,再对 squareSize 取模,使偏移始终落在一个格子内,从而用有限的重绘营造出无限平铺、缓慢流动的错觉。hoverShadowColor string rgba(255,255,255,0.8) 悬停格子的辉光颜色。// 扩大中心清晰区,仅四角压暗。
2026-07-21 16:09:35
183
原创 做一款企业真正敢用的 AI 测试应用,到底难在哪?
比如,支持企业常用的MCP规范,让企业自己的Agent系统掌控整体的研发、测试流程,AI测试系统只专注于自己的核心领域——做好需求分析、生成精准的测试用例,然后把结果回传给企业的测试平台、项目管理系统,由这些现有系统完成后续的执行、审批、复盘等工作。企业真正需要的,从来不是一个“什么都干”的一站式平台,而是一个“可插拔、可调用”的专业能力模块——不用改造现有流程,不用额外学习新操作,接入就能用,这样才能降低落地门槛,让系统真正融入企业工作流,被大家长期使用。而这件事,远比我们想象中难得多。
2026-07-21 16:07:51
178
原创 Visual Studio 2013 编译TitanEngine引擎
VS2013 不支持 constexpr,将所有 constexpr 关键字替换为 const。第一个问题C2144点击并跳转过去,替换 constexpr 为 const。将编译模式改为Release然后直接在生成位置点击重新编译按钮。打开 Global.Debugger.cpp,在文件顶部添加。然后再次点击重新编译按钮,此时等待一段时间后会报错误。// 兼容旧 SDK,添加缺失的 ARM64 架构定义。然后解析点击重新编译按钮,等待程序编译完成。依次限定范围,并继续修改剩下的两个。
2026-07-19 20:54:43
200
原创 不要把所有任务塞给同一个模型
必须按顺序发生的部分写成固定流程,比如先开变更单,再执行动作,再做回归,再验证指标,最后签字。发布、打包、服务查询、变更单、日志检索、指标读取,这些能力本来就在工程体系里,只是过去由人手动串起来。很多团队还没系统读完推理优化、测试时计算、后训练和 Agent 架构,就已经在工作流里用上了类似思想:给难步骤多一次推理,让不同模型互相校验,用外部工具形成反馈闭环。跨模型评审要看的不是格式,也不是挑语法。一个模型从需求拆解、实现、评审、发布一路做到底,看似上下文完整,问题也很明显:它会把自己的假设带到每一步。
2026-07-19 20:53:57
209
原创 gsc 编译器、MSBuild SDK、VS Code 扩展
v0.3.8 虽然版本号低调,却已拥有:完整的词法/语法分析器与 Binder、泛型系统、空安全模型、三种并发模型、完整的 CLR 互操作(属性、事件、委托、运算符重载)、MSBuild SDK、VS Code LSP 扩展、Portable PDB 调试支持,甚至还有一个 C#→G# 迁移工具 cs2gs。这不是"全都要"的贪婪,而是经过深思熟虑的架构分层——语法表面保留 Go 的简洁与 C# 的互操作兼容,运行时统一在 .NET 的并发基础设施之上。这是 G# 设计中最精彩的"权衡艺术"。
2026-07-18 20:17:36
202
原创 四语言 Hello World 对照表
让我们用一张表收束本章,对比四种 .NET 生态相关语言的 Hello World 全貌:维度 C# G# Go Kotlin完整代码 namespace Hello { class Program { static void Main() { Console.WriteLine(“Hello!”); } } } package Hello\nimport System\nfunc Main() { Console.WriteLine(“Hello!”) } package main\nimport “f
2026-07-18 20:16:55
216
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅