自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 使用 eve init 构建你的第一个 Agent

它不是再提供一种模型调用写法,而是把 Agent 运行所需的项目结构、持久执行、沙箱、审批、渠道和评测等能力,放进一套 filesystem-first 的工程框架里。这一篇开始动手。eve init。

2026-07-07 20:40:10 219

原创 0x03 RLPD 训练范式全解析

各状态的访问更加均匀。为了达到类似的性能,DAgger 可能需要显著更多的演示和纠正,并且需要人类操作员更加细致地关注数据质量。无论在线数据变得多么庞大,系统始终给 "人类老师的教导" 留出一半的席位,确保它不会学废。机器人的 "自主试错" 被当作普通经验,而人类的 "拨乱反正" 被当作专家演示。HG-DAgger —— 纯粹的"模仿者":当你运行 train_hgdagger.py 时,你就是在用这种手段跑 HG-DAgger 算法。它通过异步架构将极致的计算压力(UTD)和实时的人类干预缝合在一起。

2026-07-06 14:49:09 246

原创 我终于又有了自己的 Linux 电脑

我最初是从 DOS 开始学电脑的,后来就喜欢上了 Linux,便把所有能装 Linux 的电脑都装上了 Linux,有双系统的,也有虚拟机的,一直是 Windows 和 Linux 混着用。Mac的键盘与常用的Windows/Linux键盘不一样,我习惯了Mac,因此,我也让Pi帮助映射一些快捷键,比如我习惯用 Cmd + 空格切换中英文输入法,而不是 Ctrl + 空格。我很关注 Linux 的进展,也总是会在虚拟机里安装上各种新版本试一试,然而,总是有各种原因,无法真正在电脑上安装桌面版 Linux。

2026-07-06 14:48:25 220

原创 NHibernate实现延迟加载的主要结构:

加载的实体对象与代理对象是两个独立的对象,NHibernate并没有将加载后的实体属性值设置到代理对象上,估计一是考虑到有interface proxy存在的情况,另外实际加载过程是比较独立的,他会重新创建一个真实的实体对象,会放入一级、二级缓存中,还有一点,这种处理方式NHibernate以及client都可以通过代理对象来得到加载后的真实对象。对每一个需要代理的实体类型都会创建一个IProxyFactory对象并缓存,创建代理对象则通过IProxyFactory的GetProxy方法完成。

2026-07-05 15:09:41 181

原创 重新认识C#: 玩转指针

但是由于抽象能力不足,在C的基础上出现了C++,后来又出现了帮你管家的保姆Java,于是,在系统层开发使用C/C++,在应用层开发使用Java成为一种常见的分工方式。我看过D语言,看过Haskell语言,都不是我想要的,转一圈回来,发现,原来答案已在自己的手中,那就是已经用了很多年的C#——C#的Unmanaged部分。最开始我使用的是C++/CLI,使用后发现,C++/CLI 不好用,它继承了C++的所有缺点,最不能忍受的是狂慢的编译速度。(2)C#下的泛型不支持泛型Class的指针,于是,我在《

2026-07-05 15:09:02 160

原创 数据库设计 Step by Step (5)——理解用户需求

当客户的数据需要保密时,我们就不能“尝试客户的工作”了。需求文档要讲清楚我们将构建怎样的系统,该系统会完成什么工作,包含哪些功能点,并描述客户如何使用该系统来解决他们的问题。对客户需求理解的不完全会造成错误或无用的设计与开发,这浪费了你、你的团队还有客户的时间与金钱。当客户说“但是”、“除了”、“有时”等词时,我们要特别当心,确认客户只是强调了我们已经知道的东西,而没有出现新的情况。在这个过程中我们不急于答应或排除任何客户的要求,我们先把客户说到的东西记录下来,并确定这些方面我们已经考虑到了。

2026-07-04 15:16:46 173

原创 个人ASP.NET程序性能优化心得(1):数据库篇(外一篇)

事实上两者类型都是BigInt类型来存储在数据库中的,只不过DateTime占用8个字节,Int占用4个字节,在这种简单的排序中性能基本没有任何差别,DateTime具有强大的时间运算函数,Int类型当然达不到这些功能,这时候使用DateTime是必须的,但如果是类似ORDER BY AddTime DESC这种情况,假设添加时间默认值是GETDATE(),那么这个排序与主键排序应该是一致的,这时建议使用ORDER BY NewsID DESC来进行排序。),相对来讲,使用外键的成本要高很多。

2026-07-04 15:15:54 224

原创 Javascript执行效率小结

当 DOM 元素的属性发生变化 (如 color) 时, 浏览器会通知 render 重新描绘相应的元素, 此过程称为 repaint。如果该次变化涉及元素布局 (如 width), 浏览器则抛弃原有属性, 重新计算并把结果传递给 render 以重新描绘页面元素, 此过程称为 reflow。

2026-07-03 19:17:32 236

原创 Linux.NET学习手记(2)上一回合,我们讨论学习了如何在Linux环境中搭建能够供.NET运行的环境,不知道各位读者是否已经完成了环境的搭建?

不过,无论各位读者是采用我们上回合介绍的方法还是采用网上提供的其他方法搭建Linux.NET环境,选择哪个发行版的Linux,采用了那个版本的mono,都有一点非常重要的,就是:必须保证.NET能够在这上面正常的运行,换句话说就是要确保搭建的环境能够正常工作。所谓“三军未动粮草先行”,今后所有关于Linux.NET学习实验都是基于该环境进行的,如果连这个环境没办法正常的运作,那我们今后Linux.NET的学习与实验将会变得困难重重,甚至是无法进行下去。好了,言归正传,当我们做好一个网站想要发布的时候,一般来

2026-07-03 19:16:44 210

原创 浅谈重构中踩过的坑

其实当你发觉另一种做法是更好的处理方式,但这种方式在目前排期下无法完成,这时候作为整体功能的开发重构人,你应该有自己的判断。即使是因为做了这件事情而延期,但只要你做的这件事情是对的,有利于系统拓展性和稳定性的,那还是应该坚持自己的选择。一般会给出这种答案的人,都是理论上的巨人,行动上的矮子,基本可以断定没有经历过实战。所以有时候觉得开发或重构一个系统真的是得抱着必死的决心,这样才能有自己的坚持,而不会在上级的排期压力之下做出错误的选择。特别对于重构类的项目,如果没有一个从容的心态,那系统是肯定做不好的。

2026-07-02 21:43:06 228

原创 DDD峰会归来话DDD

一场大戏落幕,首届DDD中国峰会如大会主题色一般的红。或许在12月9日这一天,全中国的DDD粉丝大约有一半都汇聚在了国家会议中心。听起来是幸,其实是不幸,因为DDD在中国的人群基数实在是太少了。因为要负责大会的其中一个Track,期间又要接受采访,另外还有朋友到访,所以除了前面的两个keynote以及我自己的session(这是当然的),我没有完整听完一个session。然而单单是和DDD大咖、专家与爱好者们交谈,已经受益匪浅了。参会归来,关于DDD的idea产生了许多,我觉得有必要和DDD谈谈我的想法。

2026-07-02 21:42:25 168

原创 超高性能管线式HTTP请求(实践·原理·实现)

很明显的差距,对于线程组的形式大概使用了25秒,而异步接收使用了超过1分钟的时间(异步接收的模式是平台推荐的发送模式,正常应用情况下性能是十分优越的,而对于过高的压力不如自定义的线程组,主要还是因为其使用了默认的线程池,而默认线程池不可能在短时间开100条线程出来用来接收数据,所以大量的回复对线程池里的线程就会有大量的切换,通过设置默认线程池数量可以提高测试中的性能)。注意,这里的测试如果选择了性能较低的测试对象,大部分流量会在服务器端排队等候,导致吞吐量不大,这实际是服务器端处理过慢,与客户端关系不大。

2026-07-01 16:56:09 229

原创 String hashCode 方法为什么选择数字31作为乘子

也就意味着会在图上显示超过23万个散点,如果不出意外的话,这23万个散点会聚集的很密,有可能会变成一个大黑块,就失去了可视化的意义了。下面我来解释第一个理由。正如 Goodrich 和 Tamassia 指出的那样,如果你对超过 50,000 个英文单词(由两个不同版本的 Unix 字典合并而成)进行 hash code 运算,并使用常数 31, 33, 37, 39 和 41 作为乘子,每个常数算出的哈希值冲突数都小于7个,所以在上面几个常数中,常数 31 被 Java 实现所选用也就不足为奇了。

2026-07-01 16:55:32 179

原创 生命周期长的集合

这些资源不仅占用内存,还可能占用文件句柄(操作系统分配的唯一标识,凭它,你才能操作文件资源)、网络连接等系统资源。比如 数据库连接、文件流(FileInputStream)、Socket连接 等。),即使后面不再需要,集合仍持有其引用,导致无法。如果内部类实例生命周期更长(如被缓存或另一个线程引用),会阻止外部类被回收。若线程来自线程池(会复用),其 ThreadLocalMap 中的值会一直存活。非静态内部类(或匿名类)会。

2026-06-30 16:08:42 196

原创 jvm~分析gc老年代内存过高的原因

gc的老年代内存高居不下,导致最后full gc的发生,我们需要通过分析gc dump文件来解决biggest objects过多的问题。

2026-06-30 16:08:00 209

原创 Spring AOP + Guava RateLimiter:我是如何用注解实现优雅限流的?

free-fs—— 一个基于 Spring Boot 4.x 的企业级文件管理网盘系统后端,专注于提供高性能、高可靠的文件存储和管理服务。功能特色完整的文件管理能力:不仅提供上传、下载、预览、重命名、移动、复制等常见的文件管理功能,而且支持文件分享、回收站机制功能强大的大文件传输:支持分片上传、断点续传、秒传功能,并且支持通过 SSE 技术实时推送上传进度丰富的在线预览:提供强大的文件在线预览功能,包括图片、文档、音视频、压缩包等类型文件的预览插件化存储。

2026-06-29 16:10:03 214

原创 无硬件学LVGL:基于Web模拟器+MiroPython速通GUI开发—布局与空间管理篇

这篇教程,我们就不搞那些复杂的环境配置了,直接用 Web 模拟器 + MicroPython,零硬件门槛,边写代码边看效果,一步步把 LVGL 布局与空间管理的核心摸明白:从最基础的盒模型,搞懂内容区、内边距、边框和阴影到底怎么影响控件;还有滚动交互和图层管理,搞定内容溢出和弹窗层级的难题。这些都是做嵌入式界面绕不开的基本功,搞懂了这些,后面再复杂的界面,你也能拆解开,一步步搭出来。其实,嵌入式 GUI 开发的核心,从来不是 “怎么画控件”,而是 “怎么管理控件的位置、大小和层级”。

2026-06-29 16:09:04 233

原创 Agent Workflow Runtime 架构拆解:把 Agent Loop 从提示词搬进代码,长任务才真正稳了

更麻烦的是复盘:结果错了,你很难准确指出是哪一步偏了,因为执行路径本身就在模型的上下文里漂。它要记住阶段,要判断下一步,要用工具,要验收结果,还要在失败时绕回来。生成之后,它又不再是飘在对话里的自然语言,而是一段普通代码:能改、能存、能重跑。它并不是再发明一种更会写 prompt 的方法,而是把一类任务的执行方式重新摆放:流程不再藏在模型临场推理里,而是被编译成一段可以执行、可以观察、可以复用的 ​。用户给一个复杂问题,系统先快速扫一遍背景,再规划子课题,并行研究,合并成稿,审稿,必要时回炉,最后做终验。

2026-06-28 16:10:16 179

原创 AI 开发之后,我总结出这 7 件必须先做的事

很多公司都会遇到一个现实问题:美工资源有限,但内部系统、活动页面、文档、PPT、官网配图、产品原型都需要图片。开发者使用 AI 时,经常会把代码、日志、接口文档、数据库结构复制进去。有的适合写代码,有的适合长文本,有的适合推理,有的便宜,有的贵但效果好。比如颜色、构图、人物风格、是否偏写实、是否偏插画,都可以提前定义。企业里应该有专门的人或团队负责研究模型、接入模型、评估模型,而不是让每个项目组都重复踩坑。这样做的问题是,AI 会按照它自己的通用经验写代码,而不是按照你的团队习惯写代码。

2026-06-28 16:09:41 207

原创 设计模式-模板方法实战

再次回顾:在软件设计模式中,模板方法设计模式是一种行为型设计模式,其核心思想是在抽象类中定义一个算法的骨架(即模板),并将某些具体的实现步骤延迟到子类去完成。鉴于有多种实现,我们需要先创建一个抽象类,让子类来实现对应的审批逻辑,上述代码块。在学习设计模式时,应当结合实战。不久前刚学到的模板方法设计模式,今天在搓自己的。功能,那么这些逻辑都需要在实现类中编写,这些功能在代码编写上都是相似的,为了解决上述缺陷,我们需要使用模板方法设计模式,现在我们修改。实现,使得每个实现类都不用重复性地编写。

2026-06-27 19:49:59 161

原创 DeepSeek V4 + Claude Code thinking mode 400 错误修复方案

使用 DeepSeek V4 Pro / V4 Flash 的 thinking mode + tool calls 时,第一轮工具调用后的每次请求都返回。在 Claude Code 和 DeepSeek API 之间插入一个本地 Node.js 代理,自动补全被丢弃的 thinking 字段。的消息必须保留 thinking 块。Claude Code / cc-switch 在序列化历史时把它丢弃了。DeepSeek V4 要求 multi-turn 对话中,每个。

2026-06-27 19:48:49 363

原创 安装与演示 Warp ── 自然语言直接生成命令

Warp:自然语言输入层,将自然语言翻译为可执行命令,解决命令记不住、拼写繁琐的问。

2026-06-25 19:20:23 262

原创 从一个真实案例理解 JVM 标量替换

标量替换是 JIT(主要是 C2 编译器)的一种优化:如果 JVM 能证明一个对象不逃逸、生命周期完全受控、不需要对象身份(identity),就会彻底消除对象分配,将对象的字段拆成若干个局部变量(标量)。int px = x;int py = y;这里有个关键区别:标量替换不是"对象很快被 GC",而是对象从未存在过。这个案例的结论:对象逻辑上可被 GC,但不能被标量替换,原因是字段值进入了不可建模的外部调用,JVM 无法证明"对象从未存在过"是语义透明的。

2026-06-25 19:19:31 167

原创 ElasticSearch中的分词器详解

stop适用于英文纯文本场景,它基于基于Simple Analyzer,额外移除英文停词(the/a/an等),停词列表可自定义,不支持中文停词。这是ES中默认的分词器,通常用于英文文本等通用场景,其是按单词边界拆分,转小写,支持删除停词(默认关闭),不适合中文,中文会拆分为单个汉字。其适用于精确匹配字段(手机号、身份证、枚举值),keyword不做任何拆分,将整个文本作为一个词项,不支持模糊检索,适合需要精确匹配的字段。适用于简单英文文本,其按非字母字符拆分,自动转小写,数字、特殊字符会被完全过滤。

2026-06-24 16:57:28 218

原创 投影投影接口定义

IProjection接口很简单只有TryConvert一个方法相同类型对象的转化,返回是否成功以及转化后的结果约定不符合规则就不转化一般情况下转化成功的结果会和源对象不同当然经过多次投影后也可能会和源对象相同了。

2026-06-24 16:56:30 222

原创 AI价值:理性评估三维度

所以,发现了吗?听个响(过程改进):刚用上AI,先看看速度是不是快了,效率是不是高了。看疗效(能力改进):用了一阵子,看看员工是不是少骂娘了?决策质量是不是变高了?数钞票(财务成果):到了最后,你才能去算那些你心心念念的“成本节约”和“营收增长”。优秀的管理者,必须是个清醒的实用主义者。别再妄想用单一的“降本增效”指标去生搬硬套所有的AI项目了。在动手之前,先冷静地问问自己:我现在的业务痛点,到底需要的是一个极速的“打字员”、一个默契的“副驾驶”,还是一个能掀翻桌子的“疯子”?

2026-06-23 16:53:52 205

原创 为什么越来越多高要求项目,都认准了Bun?

今天不搞虚的,就跟大家唠唠一个最近特别火的工具——Bun。尤其是那些对启动速度、交互体验、工程统一性要求极高的项目,为啥都开始认真选它?整篇文章我就聊3件事,保证接地气、不绕弯,哪怕你不是资深开发者,也能看明白:很多人刚听说Bun,第一反应都是:这不就是个比Node.js快一点的替代品吗?这话不能说全错,但真的没说到点子上。Bun真正牛的地方,不是想替代Node,而是想把咱们以前写前端、写Node项目时,那些东拼西凑的工具,全整合到一起。咱们回想一下,以前写JavaScript/TypeScript项目,是

2026-06-23 16:53:02 223

原创 C#一行代码免写Web登录页:PicoServer 的 AddBasicAuth 中间件实战

现在有 OAuth、JWT 等更复杂的方案,但 Basic Auth 在简单场景下依然好用——内部工具、配置页面、临时加锁。如果配置页面需要暴露在公网,前面加一层 NGINX 做 HTTPS 即可,PicoServer 作为胶水库不直接处理证书。所有请求反代给 PicoServer,具体哪个路径需要认证、用什么方式认证,全由 PicoServer 在代码里决定。如果你也有类似的场景——给简单配置页面加个锁、不想写登录页、不想动 NGINX——不妨试试。项目本身已经有一个主域名,所有业务都在上面。

2026-06-22 20:02:36 144

原创 使用typedef封装函数指针新类型

本质上是不一样的,一个是函数指针存储函数的第一条汇编指令的内存地址,一个是这个函数的函数体,在输出的时候会隐式退化成test。类型名test就表示一个返回值是void参数是void的一个函数指针类型,与上面的int a不同这里的变量名是test。并且这里面的test的值就是存储函数指针,也就是这个函数的第一条语句的内存地址。ypedef的用法是在定义前加上这个关键字,就能得到一个新的类型名;不管多少个解引用,结果都是这个函数的内存地址。这个函数声明表示定义了一个参数为void,返回空的test函数。

2026-06-22 20:01:33 214

空空如也

空空如也

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

TA关注的人

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