-
Hono 前后端分离系列 09:测试、日志和可观测性
Hono 前后端分离系列 09:测试、日志和可观测性能跑起来的 API,不等于能上线。 能上线的 API,也不等于能维护。 前后端分离项目一旦进入真实使用,就会出现这些问题: 12345前端说接口偶尔 500用户说提交后没反应日志里看不出是哪次请求本... -
Hono 前后端分离系列 08:用 Hono RPC 做类型安全客户端
Hono 前后端分离系列 08:用 Hono RPC 做类型安全客户端前后端分离最大的内耗之一,是接口类型不同步。 后端改了: 123{ "nickname": "Tom"} 前端还在用... -
Hono 前后端分离系列 07:数据库访问和业务分层
Hono 前后端分离系列 07:数据库访问和业务分层Hono 很轻,但你的业务不会一直很轻。 很多 Hono 项目最开始都写得很舒服: 1234app.get('/api/todos', async (c) => {... -
Hono 前后端分离系列 06:JWT 鉴权和权限中间件
Hono 前后端分离系列 06:JWT 鉴权和权限中间件前后端分离项目里,登录不是一个按钮。 它是一整套请求身份识别机制。 很多项目一开始只写: 1POST /api/login 返回一个 token,前端存起来。 看起来完成了。 但真正的问题才刚... -
Hono 前后端分离系列 05:参数校验和统一错误响应
Hono 前后端分离系列 05:参数校验和统一错误响应后端接口不能相信前端。 这句话听起来有点冷,但它是前后端分离项目的底线。 前端表单可以校验,按钮可以禁用,页面可以限制输入。 但真正进入后端的请求,可能来自: 123456浏览器控制台脚本Post... -
Hono 前后端分离系列 04:CORS、环境变量和前端联调
Hono 前后端分离系列 04:CORS、环境变量和前端联调前后端分离项目里,第一个让新人怀疑人生的问题,通常不是数据库,也不是鉴权。 而是 CORS。 页面明明能打开,接口明明能单独访问,前端一请求就报错: 1Access to fetch at ... -
Hono 前后端分离系列 03:路由、请求和响应应该怎么设计
Hono 前后端分离系列 03:路由、请求和响应应该怎么设计接口设计不是把函数暴露出去。 它是在给前端、后端和未来的自己签一份契约。 Hono 写路由很简单: 12app.get('/api/users', listUsers)a... -
Hono 前后端分离系列 02:项目结构和本地开发环境
Hono 前后端分离系列 02:项目结构和本地开发环境前后端分离项目一开始最容易被低估的事情,是目录结构。 很多人觉得目录只是文件怎么摆。 不是。 目录结构其实是在告诉团队: 1234什么代码属于前端什么代码属于后端什么东西可以共享什么东西不能互相越... -
Hono 前后端分离系列 01:为什么用 Hono 做 API 层
Hono 前后端分离系列 01:为什么用 Hono 做 API 层前后端分离最怕的不是技术选型错,而是边界没想清楚。 很多项目一开始只是想写几个接口: 123前端调用 API后端返回 JSON数据库存数据 看起来很简单。 但项目一复杂,就会开始出现... -
当前主流 Node.js Web 框架对比:Express、Fastify、NestJS、Koa、Hono 到 Next.js
当前主流 Node.js Web 框架对比:Express、Fastify、NestJS、Koa、Hono 到 Next.jsNode.js 框架选型最容易掉进一个坑: 1把所有框架放在同一张性能榜上,然后问哪个最快。 这其实不太有意义。 Expr... -
AI 模型微调进阶:LoRA、QLoRA、训练评估和上线流程
AI 模型微调进阶:LoRA、QLoRA、训练评估和上线流程前两篇讲了两个基础问题: 12什么时候该微调微调数据集怎么准备 到了第三篇,就可以进入工程层面了。 如果你微调的是开源大模型,最常见的路线不是全量微调,而是参数高效微调: 1LoRA / ... -
AI 模型微调数据集准备:从样本设计到评估集
AI 模型微调数据集准备:从样本设计到评估集微调成败,七成在数据。 很多人以为微调失败是因为: 1234学习率不对epoch 不对模型不够大GPU 不够强 这些当然会影响结果。 但更常见的问题是: 1训练数据本身就不清楚、不一致、不代表真实业务。 ... -
AI 模型微调入门:什么时候该微调,什么时候不要微调
AI 模型微调入门:什么时候该微调,什么时候不要微调很多人第一次接触大模型微调,第一反应是: 1我能不能把自己的资料喂进去,让模型学会我的业务? 这个问题很自然。 但它也很容易把人带偏。 微调不是给模型“上传知识库”。 微调更适合让模型学会一种稳定... -
Codex 插件开发教程:从 Skill 到 Plugin 的完整实践
Codex 插件开发教程:从 Skill 到 Plugin 的完整实践Codex 插件不是“多写一个提示词文件”这么简单。 它更像一个可安装的能力包: 12把可复用工作流、技能、MCP 工具、应用集成和展示信息打包起来让自己或团队可以安装、启用、分享... -
代码重构安全清单:别把重构做成重写
代码重构安全清单:别把重构做成重写重构最容易失控的地方,是你以为自己在整理代码。 结果改着改着变成: 12345顺手改业务顺手换结构顺手改命名顺手修 bug顺手重写一半系统 最后没人知道这次改动到底想解决什么。 重构不是重写。 真正好的重构,应该让... -
功能开关 Feature Flag 实践:让上线和发布解耦
功能开关 Feature Flag 实践:让上线和发布解耦很多团队把“代码上线”和“功能发布”当成一件事。 这会带来一个问题: 1只要代码上线,功能就立刻暴露给所有用户。 如果功能有 bug,只能回滚整次发布。 如果只想给部分用户试用,也很难控制。... -
后台任务和重试队列设计:不要让异步任务悄悄失败
后台任务和重试队列设计:不要让异步任务悄悄失败很多系统一开始都是同步接口。 用户点按钮,后端立刻处理,然后返回结果。 但业务稍微复杂一点,就会出现不适合同步处理的事情: 发邮件 生成报表 调用第三方接口 处理图片和视频 同步搜索索引 发送消息通知 ... -
数据库迁移脚本管理实践:不要手改生产库
数据库迁移脚本管理实践:不要手改生产库数据库结构变化最怕什么? 不是写错一个字段。 而是: 1234开发环境改了测试环境忘了生产环境手工补了过几天谁也不知道真实结构是什么 代码可以 Git 回滚。 数据库如果靠手工改,很快就会失控。 所以项目只要进... -
接口幂等性设计实践:防重复提交、重试和并发请求
接口幂等性设计实践:防重复提交、重试和并发请求很多接口问题不是“第一次请求失败”。 而是: 123第一次请求其实成功了但客户端没收到响应于是又发了一次 如果接口没有幂等性,结果就很尴尬: 重复扣款 重复创建订单 重复发优惠券 重复提交表单 重复发... -
Rust 集合与内存性能技巧:少 clone、用 entry、提前分配容量
Rust 集合与内存性能技巧:少 clone、用 entry、提前分配容量Rust 的性能问题,很多时候不是语言慢。 而是代码里悄悄做了太多不必要的事情: 12345重复分配到处 clone字符串循环 formatHashMap 查两次该用借用的地方... -
Rust 模块组织技巧:mod、use、pub 和 workspace 怎么放
Rust 模块组织技巧:mod、use、pub 和 workspace 怎么放Rust 项目变乱,通常不是因为语法难。 而是因为模块边界一开始没想清楚。 很多新手项目会把所有代码堆在 main.rs: 1main.rs 项目小的时候没问题。 但功能... -
Rust Iterator 实用技巧:少写循环,把数据流写清楚
Rust Iterator 实用技巧:少写循环,把数据流写清楚Rust 里的 Iterator 不是“语法糖玩具”。 它是日常写 Rust 最值得熟练掌握的工具之一。 很多刚开始写 Rust 的代码会长这样: 1234567let mut resul... -
Chrome 浏览器调试高级用法和技巧
Chrome 浏览器调试高级用法和技巧Chrome DevTools 真正强的地方,不是能看 DOM、改 CSS、打印 console。 这些只是入门。 真正高级的调试方式,是你能在问题还没完全复现时,快速缩小范围: 123456到底是代码逻辑错了?... -
当前主流 Go Web 框架对比:Gin、Echo、Fiber、Chi 到 Huma
当前主流 Go Web 框架对比:Gin、Echo、Fiber、Chi 到 HumaGo Web 框架没有一个绝对正确答案。 真正要选的不是“哪个最快”,而是: 1这个框架会不会让你的项目在半年后依然好维护。 Go 和很多语言不一样。它的标准库 n...