自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Agent Harness 拆解:345 行代码实现主 Agent 与 Sub-Agent 双层循环

很多人第一次读 Agent 代码,注意力会停在提示词上。真正决定它能不能持续干活的,是外面的循环、工具表和路径沙箱。这篇文章拆一份三百多行的最小实现:一个主 Agent 循环、一个子 Agent 循环、四个文件工具、一个 task 工具。读完后你能说清六大模块分别落在哪些函数上,也能拿到一份照着改的清单。说明:本文只做静态阅读,未运行验证,行为结论以源码为准;涉及密钥的配置只确认存在,不展开内容。

2026-10-28 00:24:43 166

原创 闭包与 useState 怎么串成一条线?用 4 个 demo 从作用域链讲到 React 过期快照

三题里最重要的是第二题,因为它是整条链的地基。代码执行前,引擎会准备执行上下文,里面包含变量环境、词法环境和outer。outer指向外层上下文,变量查找就沿它一路走到全局。这套路径叫作用域链。而outer指向谁,在函数声明时就定死了。这就是“词法作用域”,也叫静态作用域:作用域由代码书写位置决定,编译阶段完成,和运行时怎么调用无关。判断对象由什么决定例子变量查找(作用域链)定义位置,静态bar在全局定义,就找全局this指向调用方式,动态baz()独立调用,非严格模式是window。

2026-10-24 14:08:42 267

原创 MySQL LIKE 太慢?用 Docker Compose 跑通 Elasticsearch 8.17 + IK 中文分词

当content这类大文本字段开始用查的时候,问题通常不是"再优化一下 SQL",而是索引根本用不上:前置通配符让 B+ 树失效,只能全表逐行扫。这篇用一个真实的小项目讲清楚三件事:Elasticsearch 快的根因是倒排索引而不是"另一个数据库"、一份怎么把 ES 和 Kibana 编排起来、以及为什么项目里明明写了装 IK 的 Dockerfile,跑起来的容器却没有 IK。文中配置来自本地材料,命令,请以你机器上的实际输出为准。

2026-10-22 20:23:22 431

原创 LangGraph + Milvus 实战:把朴素 RAG 升级成会“多跳检索“的 Agentic RAG

RAG 升级的本质是在检索管道里插入决策环节——LLM 负责建议,代码硬规则兜底。版本图结构解决的问题代价朴素 RAG线性跑通闭环简单问题浪费检索+ 查询路由分支简单问题省资源复杂问题仍只有一跳+ 多跳检索循环链式推理召回需要轮数上限兜底(规划)混合检索 + ReRank召回增强召回率与质量引入 ES 与重排模型每个节点都有从 START 出发的可达路径(否则编译报 unreachable node)

2026-10-15 15:41:43 162

原创 LangChain + LangGraph + Milvus 实战:电子书 RAG 问答从入库到排错的完整路线(附 Agentic RAG 改进清单)

可迁移判断:RAG 的可靠性 = 入库质量 × 检索可观测性。集合字段类型与 JS 传入类型一致(尤其 VarChar vs number)入库/查询两侧 index_type、metric_type 一致抽查存储向量与现算向量的余弦(应接近 1)top5 分数低于阈值时有兜底策略,而不是让 LLM 硬答垃圾片段(图片引用等)在入库前清洗下一步:实现评估节点与重写查询回环,把五个痛点逐条变成图上的节点。标签:LangChain, LangGraph, Milvus, RAG, 向量检索。

2026-09-28 16:56:07 181

原创 LangGraph 图编排怎么写?State + 节点 + 边三件套,5 个最小示例讲透分支、循环、持久化与人工中断

材料边界:文中代码整理自一个学习仓库的 5 个最小示例(basic-graph / conditional-routing / loop-retry / checkpointer-memory / graph-interrupt),全部,聚焦图机制本身;均为静态阅读整理,。

2026-09-27 15:10:58 347

原创 LLM 无状态怎么办:LangChain Memory 三大策略与 Milvus 向量库闭环实

历史无限增长,上下文窗口有限且有成本(readme.md L12-13)。笔记给出三种思路(readme.md L20):截断、总结、检索。先看前两种。// ① 把老消息数组拼成对话字符串const conversationText = getBufferString(messagesToSummarize, '用户', '助手')// ② 让模型总结${

2026-09-18 15:00:28 145

原创 WebSocket 最小双端 Demo 实战:握手、复用 HTTP 服务器与跨域原理一篇讲清

本文解决三个搜索高频问题:WebSocket 和 HTTP 到底什么关系、Node 端如何用 ws 库搭一个最小服务端、为什么 WebSocket 还能跨域。技术栈:原生浏览器 WebSocket + Node.js ws 库(CommonJS)。读完你将得到:一段可直接对照的服务端/客户端最小代码、一张双端事件对应表、一张跨域方案对比表。说明:代码为静态阅读整理,,依赖需先npm i ws。

2026-09-18 14:42:03 270

原创 LangChain 聊天记忆实践:文件持久化后,为什么还要做上下文截断?

文件持久化和上下文截断不是替代关系:前者保证记忆能够跨运行恢复,后者保证恢复出来的记忆不会无限制地进入每次请求。小型示例可以先用slice(-N),当消息长度不稳定或上下文预算重要时,再使用带自定义 Token 计数器的。本文基于指定源码和 JSON 材料,未对外部库当前版本、并发写入和实际模型分词计费做额外验证。下一步应把 Token 截断后的结果真正传给,并增加清晰的自检日志。标签:LangChain, JavaScript, 聊天记忆。

2026-09-05 23:32:07 273

原创 LangChain Memory 实战:用 InMemoryChatMessageHistory 管理多轮对话

多轮对话的关键不是“模型自己记住了”,而是应用维护了一条消息链。addMessage负责保存,负责取出,负责调用,下一轮再把历史重新组装进请求。掌握这条最小闭环后,再向持久化、总结、截断和检索扩展,Memory 才能从 Demo 走向可维护的 Agent 系统。标签:LangChain, Memory, JavaScript, 多轮对话, 大模型。

2026-09-01 22:33:55 208

原创 React + Express + MySQL 项目部署:dist 打包后为什么仍然可能启动失败?

这个项目最值得迁移的判断是:构建成功只验证了“代码可以生成产物”,上线成功还需要验证“产物、运行依赖、环境变量、网络和数据库权限”是否连成闭环。前端 dist 解决浏览器加载什么,后端 dist 解决 Node.js 执行什么;.env决定连接谁,MySQL 权限决定能不能连接,进程管理决定服务能否持续运行。遇到问题时沿调用链逐层定位,比反复删除或重新上传整个项目更有效。运行未验证:本文命令、云服务器配置和数据库授权步骤基于项目源码与配置整理,实际部署前请在目标服务器逐项确认。

2026-08-31 22:50:22 392

原创 云服务器部署全流程:DNS、Nginx、Node.js 与前端静态文件如何协作

Nginx 是 Web 服务器,也可以作为反向代理。用户↓Nginx├── 返回前端静态文件└── /api 请求转发给 Node.jsserver {listen 80;这段配置表达的是:访问的请求由 Nginx 在 80 端口接收,再转发到当前服务器的3001端口。这里的127.0.0.1指的是 Nginx 所在的云服务器本机,不是开发者自己的电脑。/ → Nginx 返回 dist 中的前端文件。

2026-08-31 22:37:11 384

原创 Next.js + Drizzle 后台认证实战:从首位管理员注册到 Session 权限闭环

标签:Next.js, Drizzle ORM, PostgreSQL, 用户认证, Supabase很多后台项目先把登录表单做出来,再补数据库和权限,最后才发现:重复创建超级管理员、Cookie 泄露、页面隐藏但接口仍可调用等问题,都不是一个登录页面能解决的。本文基于一个单词后台管理项目,拆解 Next.js App Router、Drizzle ORM 与 PostgreSQL 如何组成完整认证闭环。

2026-08-26 23:15:25 187

原创 AI Coding 项目怎么拆:从微信公众号 Markdown 组件需求到 9 阶段开发计划

AI Coding 的可控性并不来自一句“请严格按要求实现”,而来自一套能相互校验的工程结构:需求限制边界,架构连接数据流,任务缩小上下文,规则约束执行方式,验收定义停止条件。md-wx 目前最有价值的成果不是代码,而是已经形成了这条管理链路。下一步不应直接冲向完整组件,而应先关闭三个规格冲突,再只执行“项目初始化和配置”这一个任务,用真实构建结果完成第一次验收闭环。标签:AI Coding, React, Markdown, NPM组件, 软件工程。

2026-08-25 13:52:35 392

原创 Chrome Manifest V3 网页翻译扩展:流式输出、多任务隔离与历史保存实践

这篇文章总结一个 React + TypeScript Chrome 扩展的架构演进:它从当前网页提取英文文章,通过 OpenAI-compatible 接口调用 Qwen,在 Side Panel 中流式渲染中文 Markdown,并支持最多三个独立任务与本地历史。重点不是界面组件,而是如何解决标签页切换导致任务失败、取消后部分译文丢失、Markdown 高频重渲染等工程问题。文中代码运行未验证,现有材料也不支持“全部 E2E 已通过”的结论。

2026-08-23 15:08:13 337

原创 Next.js 16 App Router 实战:从 About、Blog 动态路由到全局 404

动态详情不能共享一个固定标题。post) return { title: "文章未找到" };return {页面渲染和 metadata 使用相同查询函数,能减少标题与正文不一致的风险。这个项目最值得复用的不是某个页面样式,而是围绕blogPosts建立的闭环:列表负责发现内容,动态段负责定位内容,静态参数负责声明内容,动态元数据负责描述内容,notFound()负责处理缺失内容。掌握这条链路后,把静态数组替换成文件系统、CMS 或数据库时,页面边界仍然可以保持稳定。

2026-08-22 19:16:32 201

原创 用 SDD 规划 AI 浏览器插件:从网页提取、翻译到 Markdown 输出

规划笔记强调先回答“做什么”,再调研和验证需求,并明确返回格式与“不做什么”。这个插件的难点不只是“让 AI 翻译网页”,而是保证网页提取、模型调用、Markdown 处理和浏览器交互形成稳定闭环。SDD 的价值,是在生成代码前先暴露这些决策:用明确用户、MVP 和非目标,用design.md固化技术方案,用task.md拆出可验收步骤,再使用 Git 和文档管理 AI 生成过程。下一步不是立即生成整个插件,而是先补齐正文提取、模型兼容、密钥安全和 Markdown 目标格式的验收标准。

2026-08-20 23:21:46 193

原创 AI 编程为什么容易返工:用 SDD 从模糊需求走向可执行规范

Vibe Coding 的问题并不是 AI 不会写代码,而是开发者容易在需求尚未明确时直接进入代码生成。SDD 将开发重新拆成两次创造:先在 PRD、design.md和task.md中完成设计,再让 Agent 落地代码。代码生成越便宜,清晰、可执行、可验证的意图越重要。下一次让 AI 开发功能前,先写清楚做什么、怎么做、先做什么,以及怎样才算完成。说明:本文材料未包含项目源码和实际运行过程,文中的流程与示例运行未验证。

2026-08-20 22:37:07 346

原创 React JWT 登录鉴权实战:串起 Zustand、Axios 拦截器与路由守卫

标签:React, JWT, Zustand, Axios, React Router在 React 项目里,登录接口返回 token 只是起点。真正容易遗漏的是:刷新后怎样恢复登录态、业务请求怎样自动携带 token、受保护页面怎样拦截,以及服务端怎样识别伪造或过期凭证。本文基于一个 React + Zustand + Axios + React Router + Vite Mock 项目,拆解完整数据流,并指出教学实现与生产鉴权的边界。源码仅做静态分析,。

2026-08-19 21:38:20 294 1

原创 CSS 三栏布局怎么写:Flex、Grid 完整方案与 BFC 区别

左右固定宽度、中间自适应,是前端面试常见的三栏布局题。初学者通常知道,却容易漏掉左右栏尺寸、中间栏伸缩和长内容溢出;还可能把 Flex、Grid 与 BFC 混为一谈。本文给出 Flex、Grid 两套完整模板,并说明三种格式化上下文的边界。本文基于现有 HTML 和 CSS 笔记进行静态分析,浏览器运行未验证。

2026-08-18 22:55:22 384

原创 TypeScript 工具类型怎么记:从 Pick、Omit 到 keyof 与 Exclude 推导

学习 TypeScript 时,很多人能背出PickOmitPartial,遇到组合题却仍会把“保留”和“删除”写反。关键不是继续背定义,而是先判断工具类型的。本文用一个User类型串起常见工具类型,并重点推导如何构成Omit。本文根据现有 TypeScript 学习代码进行静态分析,代码编译运行未验证。

2026-08-18 22:39:57 365

原创 Docker + Nginx + Node.js:从端口映射到反向代理的完整请求链路

学习这组技术时,不要只背命令。始终沿着“浏览器 → 宿主机端口 → 容器端口 → Nginx → Node.js”检查,请求在哪一段断开,问题通常就在哪一层。下一步可以补充 Dockerfile、Docker Compose、容器网络和数据卷,让多个服务从手工命令走向可复现编排。Docker、Nginx、Node.js、反向代理、容器化。

2026-08-18 22:18:28 239

原创 NestJS MVC 实战:用 hello 项目 7 个文件讲清分层、装饰器、依赖注入与错误处理

很多 NestJS 教程用「玩具例子」讲概念——单独贴一段@Get()你以为懂了,回到真实项目还是懵。问题不在你,在例子。本文换个思路:拿一个能跑起来的 hello 项目,7 个文件全部摆出来,5 个 CRUD 接口逐个拆,让你看到 MVC 不是教科书三层等分,而是「Controller 接 HTTP + Service 写业务 + Module 组装」的工程分工。理解这 7 个文件的协作,就能回答 NestJS 大厂面试的 80% 问题。

2026-08-17 23:56:28 804

原创 从蜜雪冰城到 NestFactory:用 50 行 JS 看懂工厂模式在 NestJS 中的落地

几乎所有元数据都通过装饰器附加——@Module注册模块、声明路由前缀、@Get和@Post绑定 HTTP 方法、标记可注入、@Param@Body@Query提取请求参数。装饰器的好处是「在不修改原有对象的前提下,动态添加额外功能」,让业务代码保持纯净。工厂模式不是抽象的设计模式理论,而是「调用方不直接new、通过工厂统一入口拿对象」的工程实践。和是同一个模式在两种语境下的落地——前者是教学例子,后者是工业级框架的启动入口。

2026-08-17 23:22:52 178

原创 Next.js App Router 父子组件 RSC 拆分实战:从 Redis Hash 到客户端交互的最小化边界

{content.substring(0, 20)}

2026-08-14 21:56:57 237

原创 Next.js App Router 全栈博客实战:文件路由、RSC 异步取数据、路径别名与 SEO 五大核心

App Router 的核心是「约定大于配置」——文件名即路由、RSC 默认 async 取数据、alias 配一次省心、SEO 写 head、Link 不刷新。掌握这五点,就掌握了 App Router 的骨架。可迁移的判断:学新框架时,先找「约定」——文件名、默认导出、目录结构——这些约定背后是框架的设计哲学。App Router 的哲学是「让文件结构说话」,理解了这一点,看任何 App Router 项目都能快速上手。下一步给的加实现(返回模拟数据)在里取数据修复拼写错误(应为研究嵌套布局。

2026-08-14 18:23:25 234

原创 ESLint flat config 配置实战:五大字段、规则严重级别与 --fix 能力边界详解

规则值严重级别作用no-var2error禁用var,强制letconstno-console1warn禁用console,开发时用上线后不用quoteserror引号必须用双引号semierror必须加分号indenterror缩进用 2 个空格为什么no-console只用 warn:开发时调试需要 console,但上线后不应残留。设成 warn 提醒但不阻断开发流程,体现了「严格但不死板」的工程权衡。

2026-08-13 23:44:07 331

原创 Next.js App Router 全栈实战:从 SPA 的 SEO 痛点到服务端组件与 Hydration 水合机制

Next.js 的价值不在「又一个 React 框架」,而在于用「服务端渲染 + 客户端水合」的混合模式,把 SPA 的交互体验和传统网站的 SEO/首屏速度同时拿下。App Router 用文件即路由的约定,让全栈开发回归「写组件」本身。可迁移的判断:写 Next.js 项目时,默认用服务端组件,只在需要交互的最小范围切到客户端组件——这是性能和体验兼得的关键。下一步给 my-app 的route.ts加一个DELETE方法修复handleAdd的 bug,并在添加成功后调用刷新列表给。

2026-08-13 23:25:27 693

原创 React Todos 前端独立开发全解:用 vite-plugin-mock + axios 封装,再也不等后端接口

你可能刚学会 React + axios,想写一个 TodoList。按照"正确流程":先让后端写GET /todos,你再拿数据渲染。结果后端同学忙着别的需求,接口一周都没影——你卡在"页面能写,但没数据就是空的"这个状态上,寸步难行。这个项目用一个 Todos 小例子完整演示了一套"前端先行"的开发模式:后端只要把接口契约(URL / method / 返回结构)定下来,前端自己用 vite-plugin-mock 提供一模一样的假 JSON,页面、状态、交互全部写完;

2026-08-12 22:49:57 1913

原创 大厂面试常考的 AI 工程化:71 行代码讲透 Best of N + LLM as Judge 降幻觉方案

过去一年,无论是字节、阿里、腾讯还是美团,面试官在问完八股文后,越来越多会追加一句:“你用过 LLM 吗?如果让你落地一个生成代码的功能,怎么保证质量?很多零基础同学卡在这一问——会调,但说不出"质量怎么保证"。。本文拆解一个真实项目harness,把"生成 → 评测 → 择优"三阶段流水线讲透,并标注每一段对应的面试考点。“我用 Node.js 实现了一个 LLM 工程化的 harness 框架,核心是 Best of N Sampling 加 LLM as Judge。

2026-08-11 22:38:10 222

原创 大厂面试必问:TypeScript 中 type 和 interface 到底有什么区别?零基础也能看懂

需要描述对象结构?├─ 是 → 需要被扩展/合并,或用于 React Props / 体现 OOP?│ ├─ 是 → 用 interface│ └─ 否 → type / interface 均可(看团队约定)└─ 否(联合、元组、基本类型别名、工具类型)→ 只能用 typetype和interface的区别是 TS 面试的「送分题」,但很多同学只会背一两个点。记住这 4 个核心区别 + 共同点 + 实战理由,面试时就能答得有理有据。

2026-08-11 22:35:02 190

原创 JavaScript 单例模式:用静态属性保证 Popup 只创建一次

理解单例模式,不要只记“只创建一个对象”。谁负责创建、实例存在哪里、后续如何复用、业务代码是否绕过统一入口。下一步可以给Popup补上open()方法,再在浏览器中验证按钮是否能打开新页面。本文未执行项目,运行结果未验证。标签: JavaScript, 设计模式, 单例模式, DOM。

2026-08-10 23:34:32 285

原创 React + WebGPU 在浏览器运行 DeepSeek:从 Worker 通信到流式生成

这个项目最值得迁移的设计不是某一个 API,而是职责划分:React 处理交互,Worker 管理重任务,模型类负责资源生命周期,消息状态负责跨线程反馈。理解这条调用链后,再学习 WebGPU、tokenizer 或流式生成,都会更容易定位问题。建议下一步按以下顺序实践:先单独完成 Worker 的消息往返,再接入 tokenizer,最后接入模型和流式 UI。本文代码和项目运行结果均未验证,部署前应补做依赖安装、构建、浏览器 WebGPU 能力和模型加载检查。

2026-08-10 23:08:34 1119

原创 React memo、useCallback 与 useMemo:父组件多状态时如何减少无效渲染

React 性能优化不是看到重新渲染就全部阻止,而是先判断更新是否有必要。当前 Demo 中,memo让可以关注name而忽略count;函数 Props 场景再考虑,昂贵计算场景再考虑useMemo。memo管子组件跳过,管函数引用,useMemo管计算结果。本文代码运行未验证。

2026-08-09 23:27:23 193

原创 React useRef + Web Worker:避免大计算阻塞页面的通信方案

Web Worker 不会替代 React 主线程,也不能操作 DOM。它的价值是把纯计算任务交给浏览器提供的后台线程;React 主线程通过消息接收结果,再用 state 更新 UI。new Worker创建线程,useRef保存线程,useEffect管生命周期,负责通信,useState负责页面状态。

2026-08-07 23:15:28 240

原创 React Context 与自定义 Hook:解决跨层传值和鼠标监听复用

主题属于共享数据;鼠标监听则属于可复用逻辑。Demo 中的useMouse负责三件事:保存坐标、注册事件、卸载时清理事件。}, [])clientX和clientY表示鼠标相对浏览器可视区域的坐标。状态变化后,React 会重新渲染,页面显示新的位置。对比项Context自定义 Hook解决的问题跨层共享数据复用状态和副作用逻辑当前案例主题鼠标坐标是否让不同组件共享同一份 state可以由 Provider 提供同一份值不会,每次调用通常都有自己的 Hook state。

2026-08-07 21:14:21 386

原创 React useRef 实战:从 input 聚焦到 Web Worker 引用

我通过 ReactuseRef学习了两类非响应式引用:一类是通过ref获取 input DOM 并在 effect 中调用focus(),另一类是保存 Web Worker 实例。这里new Worker才负责创建线程,ref 只负责跨渲染保存实例;需要展示给用户的计算结果则应该放入 state。资源型对象还要在组件卸载时清理,避免留下 Worker 实例。能解释返回的对象结构。能说明 input 挂载前后current的变化。能区分autoFocus和。能说明为什么页面状态使用。

2026-08-06 23:47:18 275

原创 React Router 实战:用 ProtectRoute 实现登录鉴权与登录后回跳

这是一个基于 React、React Router 和 Vite 的 SPA 路由练习项目。我实现了普通路由、动态参数、嵌套路由、路由懒加载、404 页面以及受保护路由。权限路由通过 ProtectRoute 读取登录状态,未登录时使用 Navigate 跳转登录页,并通过 location state 保存用户原本访问的 pathname;登录成功后使用 useNavigate 和 replace 返回原页面。项目还使用 lazy 和 Suspense 做路由级代码分割。

2026-08-06 22:50:32 377

原创 从手写 Hash 路由到 React Router:一个路由练习的关键实现

前端路由的目标是在单页应用中根据 URL 切换页面组件,而不按传统多页应用方式重新请求整份 HTML。本练习基于 React、Vite 和,集中实现了基础路由、动态参数、嵌套路由、404 与路由级懒加载。本文依据本地代码静态分析整理,运行未验证。

2026-08-05 23:20:51 201

原创 手写 Hash 路由:把 #/page1 变成局部页面切换

手写 Hash 路由不等于要在项目里重复造框架。URL 状态 → 事件监听 → 路径匹配 → 组件或 DOM 渲染先把默认路由、404 和首次渲染补齐,再去学习 Vue Router 的路由配置与 History 模式,你会更容易理解路由库到底帮我们封装了什么。

2026-08-05 19:04:31 222

空空如也

空空如也

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

TA关注的人

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