- 博客(28)
- 收藏
- 关注
原创 做一名合格的前端开发工程师(12篇)——第一篇 Javascript加载执行问题探索
从图中可以看出,"hello.js"和“world.js"出现在蓝色线以后,也就说明这两个js是在DomContentLoad结束后再进行触发加载的,这样就不会造成页面的锁定。看上面的“瀑布图”,估计大家也看出来了,三个js文件进行了三次“Get”请求,大家都知道Get请求是需要带http头的,图片1.jpg的下载是在js执行完成后触发的,这也验证了上面所说的情况,阻止了image的加载。追加js,这就是所谓的“无阻塞“,但是其中有一个非常要注意的地方就是我们对js的要求是否有严格的顺序。
2026-07-04 13:49:11
213
原创 基于Socket实现的最简单的Web服务器【ASP.NET原理分析】
在当前的TCP/IP协议下,所谓服务器的网络地址,就是一个IP地址,目前我们使用IPv4的地址,即IP协议第4个版本规定的地址,每个地址由四个字节共32位组成。在TCP/IP协议中,网络层的协议为IP协议。图右下部为服务器回应的内容,第一行为回应的状态行,HTTP/1.1 200 OK表示请求的内容可以找到,但是需要到另外的地址去取。HTTP协议定义了内容的格式,这是一个应用层的协议,应用层协议的内容需要通过传输层在浏览器和服务器之间传送,TCP/IP协议是ISO网络参考模型的一种实现。
2026-07-04 13:48:06
212
原创 一.单位英寸像素数(Pixel Per Inch,PPI)
PPI是一个度量单位,是像素密度单位,它表示了现实世界一英寸内的像素数,因此它决定了屏幕的显示质量。像我们常说的1024*768其实是指的屏幕分辨率,对应在现实中的分辨率就用PPI作为度量单位,可以举个例子来说明:|如果显示器的屏幕大小是14英寸(对角线的长度)纵横比是3:4-->|那么水平方向上的长度就为:14*(4/5)=11.2 英寸 (1英寸=0.762寸)|从而我们常说的1024对应现实世界的分辨率就为:1024/11.2 = 91.4PPI。
2026-07-03 16:24:55
189
原创 查看w3wp进程占用的内存及.NET内存泄露,死锁分析
可见,103b3360地址的字符串value="System.Web.UI.PageRequestManager:AsyncPostBackError", 占120bytes. 这个字符串对象包含3个字段,它们的偏移量分别是4,8,12。.net世界里,GC是负责垃圾回收的,但GC仅仅是回收哪些不可及的对象(无根对象),对于有应用的有根对象,GC对此无能为力。好了,接下打开Windbg看看这个w3wp进程占用了376M内存,启动的54个线程。从左往右第一列是地址,而第二列开始则是地址上的数据。
2026-07-03 16:24:07
293
原创 值得关注的文本排版引擎
Pretext 是一个用 TypeScript 实现的用于多行文本精确测量和布局的引擎。不碰 DOM,不触发 reflow,却能完美匹配浏览器字体引擎在各种语言、emoji、混合文字方向下的真实表现。它刚刚发布,发展势头很猛。我觉得这是过去十年里最值得关注的文本引擎之一。它不是小打小闹的优化,而是把文本这块一直卡着大家脖子的核心问题彻底解决掉了。先说清楚它解决什么痛点。
2026-07-02 17:56:27
218
原创 代码是 AI 写的,生产事故谁背锅?
最近在做 Code Review 的时候,我发现团队里越来越多的年轻工程师,开始频繁提交一些看起来极其规整、甚至连注释都写得完美无缺,但稍微往深了一看,业务逻辑根本跑不通的代码。问他们怎么写的,答案出奇地一致:“这是 Copilot / ChatGPT / Claude Code 给出的代码,我看它逻辑挺清晰的,就直接拿来用了。这两年,整个行业都在拼命研究怎么给大模型“立规矩”:搞 RAG(检索增强)、微调、写各种复杂的 System Prompt,乃至搞出一整套 Harness Engineering。
2026-07-02 17:55:32
269
原创 客户端将每个 Function 的执行结果和用户的提问等信息,一起再次提交给 AI 模型服务器。
Resources 是 Model Context Protocol (MCP) 中的一个核心原语,它允许服务器暴露可以被 clients 读取并用作 LLM 交互上下文的数据和内容。Resources 代表 MCP server 想要提供给 clients 的任何类型的数据,在使用上,MCP Server 可以给每种资源定义一个 Uri,这个 Uri 的协议格式可以是虚拟的,这不重要,只要是能够定位资源的一段 Uri 字符串即可。只看定义,读者可能不理解什么意思,没关系,等后面动手做的时候就知道了。
2026-07-01 15:26:30
182
原创 Streamable HTTP 是 SSE 的升级方案,完全基于标准 HTTP 协议,移除了专用 SSE 端点,所有消息通过 /message 端点传输。
本节不讲解 Streamable。
2026-07-01 15:25:39
204
原创 spring框架创建bean就是利用反射机制
新建Java Class 时选择Annoation 类型的文件,这样就创建了一个新的注解// 自定义注解// @Target 标注注解的注解,叫做元注解// ElementType.TYPE: 表示可以标注在类上// ElementType.FIELD: 表示可以标注在属性上// 使用某个注解的时候,如果注解的属性名是value,可以省略属性名// 使用某个注解的时候,如果注解的属性值是数组,并且数组中只有一个值,可以省略大括号。
2026-06-30 14:02:24
164
原创 剑指offer-73、连续⼦数组的最⼤和(⼆)
说明:经分析可知,输⼊数组的⼦数组[3,10,-4,7,2]可以求得最⼤和为18,故返回[3,10,-4,7,2]通过三重循环枚举所有可能的子数组,使用三重循环枚举所有可能的子数组起始和结束位置,计算每个子数组的和。假设现在有 n 个元素,突然加上⼀个元素,变成 n+1 个元素,对连续⼦数组的最⼤和有什么影响呢?输⼊⼀个⻓度为n 的整型数组array ,数组中的⼀个或连续多个整数组成⼀个⼦数组,找到⼀个具有。// 更新最大和及位置(优先选择长度更长的)输⼊:[1,-2,3,10,-4,7,2,-5]
2026-06-30 14:01:46
241
原创 微服务架构下的HTTP请求头“大小写”丢失排查之旅
既然整个网络链路(Nginx -> Gateway -> 本地网卡)都没有修改请求头的大小写,那问题必定出在 Spring Boot 服务内部。为了验证,我直接使用 Postman 直连 Spring Boot 服务()发起请求,并在代码中断点调试以下获取请求头的方法:Java运行结果让人大跌眼镜:遍历打印出来的headerName全是小写的appkey!
2026-06-29 14:00:08
201
原创 GO练习题-Goroutinue泄漏
某电商公司的订单服务,上线后运行了大约 2 小时,OOM(Out of Memory)被 K8s 杀死,进程反复重启。。开发同事重启了几次,问题依旧。直到有经验的架构师用pprof,而且这些 goroutine 全部卡在 channel 的 send 操作上,永远无法退出。1000 个 QPS × 2 小时 = 720 万次泄露的 goroutine,每个 goroutine 默认 2KB 栈空间,再加上分配的堆对象,最终把内存吃光了。
2026-06-29 13:59:33
169
原创 形式化方法:Java并发bug的“数学克星“
以前我觉得Java后端就是Spring Boot + MyBatis + Redis + 写CRUD。人类如何驾驭复杂性?UML的答案是:抽象、边界、可视化,让我们的大脑能处理超载的信息形式化方法的答案是:数学严谨性,让机器验证人脑无法穷举的逻辑谭云杰说UML应"大象无形",Lamport 说"不用形式化思考就没有真正理解系统"。
2026-06-28 14:36:08
149
原创 在领域驱动(DDD)设计中的核心实践
对于复杂的读模型(仪表板、报表),应使用专用的查询服务或直接发出 SQL 的读模型——不要将领域模型扭曲为 DTO 工厂。一个包含数百个子实体的聚合通常表明其中一些子实体应作为独立的聚合,通过 ID 引用。较大的聚合会导致更长的事务锁和更多的合并冲突。聚合是由单个聚合根组织的一组实体和值对象。仅通过 ID 引用其他聚合——切勿跨聚合边界持有直接对象引用。它们必须不可变——任何改变状态的操作都应返回一个新实例。)本质上是值对象——对于有限状态集,应使用它们代替字符串常量或独立的值对象类。
2026-06-28 14:35:32
155
原创 从天桥地摊Basic到西藏阿里的.Net AOT。(续二)
前面说到,没有分号结束的语言,一眼看去就是上不了台面的,逢人说起我会编程,人家问起会什么语言,VBScript 说不出口,虽然后来我用 Jscript 重写了一遍,有分号结束了,看起来也像那么一回事了,但依然是不能用少的东西控制多的东西,我哪懂什么叫引用类型什么叫值类型,看起来都是var,就靠猜,如果发现有什么东西被间接修改的话,先把它 var taget = ""+a ; 再 var value = parseInt(target) 就行了。虽然说 Server.CreateObject("ADODB.c
2026-06-27 14:02:44
228
原创 桌面 UI 框架的范式演进:Jalium.UI 与 MewUI 架构深度对比
对于游戏引擎而言,引入几十兆的 Avalonia 是不可接受的性能灾难,而 3 MB 的 MewUI 则成为了一个理想的轻量级解决方案。而 MewUI 走的是“极限轻量化”路线,由社区开发者 Youngjae Song(社区 ID: aprillz / al6uiz)发起,定位为一个实验性的、代码优先的轻量级.NET GUI 框架,专为解决小型桌面实用工具的分发体积问题而生,其核心目标是在无任何外部 C++ 图形 DLL 依赖的前提下,实现 2.5 MB 至 4.0 MB 的极致原生编译体积 3。
2026-06-27 14:02:04
233
原创 问题的根源:传统运维面临的系统性障碍
在深入讨论解决方案之前,有必要先把问题说清楚。传统运维面临的三大障碍,几乎在每个大型企业中都真实上演。生产环境日均产生原始告警超过10万条,但有效告警识别率长期不足5%。其余95%是网络抖动、心跳超时或级联反应引发的次生告警。海量无效信息导致运维人员心理疲劳,核心异常指标被淹没,形成显著的生产安全隐患。值班人员每天面对几百条甚至上千条告警,真正需要关心的可能只有几条,但谁也不敢轻易忽略任何一条——这种“狼来了”的循环每天都在消耗团队的精力。
2026-06-25 13:30:50
246
原创 深度学习进阶(十八)坐标注意力 CA
我们介绍了 ECA,它用一维卷积替代了 SE 中的 MLP bottleneck,用更少的参数实现了更好的通道注意力。但实际上,这套框架里还有别的优化空间:在前面的内容里,无论是还是,它们的通道注意力子模块第一步都是(CBAM 额外加入了最大池化),将 的特征图压缩为。这个过程实际上等价于。对于要得出一个整体性的通道权重来说,这看起来是合理的。但还有高手,21 年的论文由此论文提出了,下面就来详细展开。
2026-06-25 13:29:54
213
原创 【从0到1构建一个ClaudeAgent】内存管理-上下文压缩
/ 触发自动压缩的 token 阈值。// Layer 3: 如果调用了 compact 工具,执行手动压缩。// Layer 2: 如果 token 数超过阈值,自动压缩。// Layer 1: 每次调用前进行微观压缩。// Layer 3: 如果调用了 compact 工具,执行手动压缩。// ... 执行工具。// Layer 2: 如果 token 数超过阈值,自动压缩。
2026-06-24 14:08:52
153
原创 2026 AI效率神器:Superpowers + Claude Code 保姆级教程
通俗一点来说,它是把软件工程最佳实践(TDD、Code Review、Spec-Driven、Git Worktree、子 Agent 协作)全部封装成 AI 可自动执行的 Skills,让大模型从“代码生成器”变成“真正懂工程的 Junior Engineer”。简单来说:先写一个会失败的测试(RED),然后用最少的代码让它通过(GREEN),最后优化代码(REFACTOR)。,复杂项目容易失控,代码质量参差不齐,连续工作 1 小时后,AI 忘记最初的架构约定,代码风格混乱。
2026-06-24 14:08:00
253
原创 Nginx 学习总结
注:(1)负载均衡支持的策略有:轮询、加权、Hash,权重相同即为轮询,均来自同一个主机的请求则均发往相同的服务器即为 Hash。Nginx 最核心的设计之一就是它的模块体系,几乎所有功能都是由模块提供的。(3)Nginx 的 Stream 功能平时用的较少,但他实际上和 HAProxy 的功能类似,都是为了实现 TCP/UDP 四层的流量代理转发功能。以下 Nginx 的各种使用场景中,提供的参数信息仅为能实现功能所需的最基本要求,忽略了更多的参数配置、以及模块加载配置。(2)Nginx 模块管理。
2026-06-23 14:13:12
204
原创 接口测试——pytest框架续集
autouse 参数默认为 False。如果设置为 True ,则每个测试函数都会⾃动调⽤该fixture,⽆需显式传⼊。params 参数⽤于参数化fixture,⽀持列表传⼊。每个参数值都会使fixture执行⼀次,类似于for循环。scope 参数用于控制fixture的作⽤范围,决定了fixture的⽣命周期。
2026-06-23 14:12:01
201
原创 沪漂五周年了:我越来越迷茫了
看简历的时候,大家经历都不算差,做过各种系统、后台、业务模块,也参与过不少项目。现在越来越多时候,是看你能不能判断该怎么写,为什么这么写,AI 写错了你能不能看出来,需求不清楚时你能不能问到关键点,项目上线后你能不能兜住问题。大家已经够焦虑了,我也一样。真正能证明一个人的,是他有没有在这些年里形成可复用的经验、可展示的作品、可迁移的能力,以及可被别人信任的结果。AI 时代,程序员最危险的状态,不是不会用 AI,而是只会用 AI 写代码,却不知道自己到底在解决什么问题。否则,AI 放大的不是能力,而是混乱。
2026-06-22 16:23:13
179
原创 Claude Code v2.1.139 深度解读:Agent 视图 + /goal 命令的架构逻辑
这和 Kubernetes Reconcile Loop 的设计逻辑是一样的——你告诉 K8s「我要 3 个 Pod」,K8s 自己想办法凑够 3 个,而不是你指定「先启动第一个,再启动第二个,再启动第三个」。当你在做「这段上下文还塞得下吗」的判断时,精确的 token 计数很重要——差 15% 可能就是「刚好够」和「触发 compaction」的区别。在多会话的场景下这个问题被放大了:你同时开了 4 个后台会话,每个都在消耗上下文窗口,不准确的估算可能让你误判整体的 token 压力。
2026-06-22 16:22:39
233
原创 Electron 桌面应用如何接入 Microsoft Store 订阅与永久许可证
这套实现跑了一段时间,整体还算稳。最值得借鉴的,其实不是某个具体的小技巧,而是这种分层的方式:把"和 Store 打交道"这件脏活,彻底隔离在 broker 和 addon 里,上层只处理纯粹的业务语义。WinRT 只在 C++ addon 里碰,addon 只做"异步转 JSON",业务语义一概不沾。标准化和状态机分两层,原始数据和业务状态别混在一起。网络失败时保留上次的好状态并标 stale,别把付费用户的权限搞掉。权益和状态解耦,功能代码只看数组。
2026-06-21 15:08:33
225
原创 OpenClaw.NET 上线 MetaSkills :软件工程第一性原理的工业级实践
MetaSkills 的 30 次提交构建了一个相当厚的抽象层——声明式 DSL、DAG 引擎、LLM 路由、Checkpoint 机制。但每一层都保留了可观测性、可调试性、可审计性的逃生舱口。它没有假装本质困难不存在,而是用抽象把偶然困难压到极限低,然后把省下来的大脑带宽全部投入到 DAG 死锁检测、LLM 输出校验、失败分支恢复这些无法逃避的本质困难上。你不消灭狼,但你可以用更好的瞄准镜和更轻的枪,把子弹精准地送到该去的地方。
2026-06-21 15:07:59
193
原创 JuiceFS PB 级数据同步优化:断点续传、安全与带宽控制
的增强包括:断点续传降低了任务中断后的恢复成本,数据加解密提高了数据备份的安全性,全局流量控制则帮助多个同步任务更有序地共享带宽。这种设计的好处是,随机读取时只需要根据偏移定位到对应的加密块,并下载相关块数据,不必读取整个文件。相应地,加密后的对象会包含额外头部、填充和加密元数据,因此目标端对象通常会比原始明文文件更大。进程同时运行时,例如分布式同步中的多个 Worker,或多个独立同步任务共享同一条出口链路,单进程限速并不能约束整体带宽使用量,仍然可能导致出口带宽被打满,影响其他业务流量。
2026-06-19 22:24:45
220
原创 C#摸鱼实录——IoC与DI案例详解 _
DependencyInjectionControlInversion控制方向被反过来了,所以叫控制反转控制反转:原本由对象自己掌握的控制权,转移给了外部对象或容器但是需要注意的是,IoC是一种思想,它并不是某种具体的实现换句话说,DI是IoC的一种实现方式,依赖注入就是使用控制反转的思想依赖注入(DI)是实现IoC最常见的方式之一# 原来:产品内部控制零件A产品↓ # 控制零件A# 现在:外部同时控制零件和产品,然后把零件A交给产品使用外部↓ # 控制零件A外部↓ # 控制产品。
2026-06-19 22:23:55
360
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅