INDEX / FULL TEXT
搜索
按标题、摘要和主题标签查找文章。
过了斩杀线,还没过验收线:DeepSeek V4-Flash 正式版发布随想
从 7 月 31 日 API 更新日志里的一行字说起:模型的性价比斩杀线被大幅前移,工程级的验收线却不会自己移动。
#大模型 #Agent #AI 编程 #工程判断
如何让 AI 编程 Agent 在真实仓库里交付
以一次失败任务批量重试为例,拆解 Agent 如何理解仓库、约束变更、处理跨层语义,并用可复核证据完成交付。
#AI 编程 #Agent #全栈开发 #软件工程
AI 时代,工程判断比代码产量更稀缺
从一次任务状态模型演进谈起:当实现方案可以快速生成,架构师更需要判断语义、影响半径、可逆性和验证成本。
#AI 编程 #工程判断 #软件架构 #技术决策
架构债务不是旧代码,而是被推迟的系统决定
以任务状态模型为例,说明怎样识别债务利息、设置偿还触发器,并通过双算和影子读取完成可回退迁移。
#架构债务 #系统设计 #渐进式迁移
人工审批不是弹窗:高风险 Agent 操作的事务边界
从一次批量策略变更出发,设计绑定 planHash 的审批协议,并处理状态漂移、重复执行、结果未知、补偿与审计。
#Human in the Loop #AI Agent #事务 #安全
资深工程师的产出,不应该只存在于代码仓库
从一次配置缺失导致的发布事故谈起:资深工程师如何把修复、反馈、恢复路径和团队判断沉淀成可复用能力。
#高级工程师 #软件架构 #技术领导力 #工程效能
AI 功能怎么发布:把 Evals 做成真正的门禁
固定回归集、权限与对抗用例、影子流量、小流量发布和线上预算逐层放行,模型或提示变化不再靠演示验收。
#Evals #AI 工程 #发布 #可观测性
上下文工程:让 Agent 知道足够多,但不要知道一切
Agent 的能力上限不仅由模型决定,还由信息如何选择、压缩、分层和在任务之间流动决定。
#上下文工程 #AI Agent #RAG #系统架构
编码 Agent 的沙箱:仓库、网络、密钥和资源分别设边界
让 Agent 在真实仓库执行之前,先把允许路径、临时工作树、网络白名单、秘密代理、资源预算和交付证据写进任务契约。
#Coding Agent #沙箱 #安全 #软件工程
AI 辅助编程之后,代码评审要看什么
生成速度提高后,稀缺资源从输入代码变成验证意图、边界与系统影响的能力。
#AI 编程 #代码评审 #工程质量
流式 AI 界面不是 append 文本:事件协议与状态恢复
把 token、工具调用、审批、引用、错误和完成统一成带序号的事件流,页面才能重连、去重并正确表达 Agent 阶段。
#AI 产品 #流式协议 #React #状态机
产品架构与技术架构应该共享同一张问题地图
如果产品按页面拆需求、技术按服务拆系统,两张地图之间的空隙最终会变成协作成本。
#产品架构 #系统设计 #团队协作
海外 ToC 产品中的前端不是一个页面层
当产品面对不同地区、设备与网络条件,前端架构必须同时处理增长、可靠性和体验一致性。
#海外 ToC #前端架构 #国际化
不要把生产密钥交给模型:AI 工具调用的权限网关
模型只提出结构化意图,网关负责 Schema、策略、审批、幂等、短期凭证和审计,把不确定推理隔离在确定性边界外。
#AI Agent #工具调用 #安全 #系统架构
创业阶段的技术决策:先管理不可逆性
资源有限时,架构的职责不是预测全部未来,而是识别哪些错误会昂贵到无法回头。
#CTO #创业 #技术决策
RAG 评估别再问‘感觉怎么样’:从 120 个真实问题开始
把客服与研究任务整理成可复跑数据集,分别衡量检索召回、权限、引用一致性、回答正确性和合理拒答。
#RAG #Evals #AI 工程 #检索
两周交付 AI MVP:速度来自主动缩小系统
短周期不是把完整产品做得粗糙,而是选择一条能验证核心价值、又保留真实约束的最短路径。
#MVP #AI 产品 #创业 #工程管理
多 Agent 系统:协作之前先建立控制面
多个 Agent 不会因为角色名称不同就自动协作。可靠系统需要任务状态、上下文边界、预算和可恢复执行。
#AI Agent #多 Agent #工作流 #系统架构
AI 产品的起点不是模型能力
模型能生成什么只是供给,产品要回答的是谁愿意在什么任务里持续依赖它。
#AI 产品 #产品设计 #大模型
经验年限不等于资深
资深工程师的区别,不在见过多少工具,而在能否识别关键问题、承担后果并提升整个系统。
#职业成长 #工程判断 #技术管理
ADR 怎么写才有人看:记录判断,不记录会议流水账
一次重复争论技术选型后,我们用上下文、备选、后果和复审条件保存决定,并把 ADR 连接到代码与指标。
#ADR #架构决策 #技术管理 #文档
技术负责人的边界:不要成为团队的同步阻塞点
负责结果不等于亲自决定一切。更重要的是建立判断标准,让团队可以独立推进。
#技术管理 #团队协作 #架构
requestId 到了消息队列就断了:异步链路的 Trace Context
一次 API 成功但后台任务失败的排查,推动我们让 traceparent 穿过 HTTP、队列和 Worker,并区分追踪与业务关联 ID。
#分布式追踪 #OpenTelemetry #消息队列 #可观测性
差量更新的收益与代价
只更新变化部分可以减少工作,也会引入缓存、一致性与失效判断的新复杂度。
#性能 #算法 #前端架构
可观测性不是做一块 Grafana 大屏
指标、日志和追踪只有围绕可回答的问题组织,才会在故障发生时产生价值。
#可观测性 #Prometheus #系统稳定性
告警为什么总在半夜吵醒错误的人:从 SLO 到 Runbook
把 CPU 阈值告警改成多窗口错误预算燃烧率,并让每条告警携带用户影响、负责人和可执行恢复步骤。
#SLO #告警 #可观测性 #可靠性
Node.js 优雅退出:先停止接单,再归还资源
Kubernetes 发出 SIGTERM 后,HTTP、队列、数据库和日志应该按什么顺序关闭,才能避免 502、重复任务和丢日志。
#Node.js #Kubernetes #优雅退出 #可靠性
十万级数据渲染:不要让 DOM 承担数据仓库的工作
海量表格与图表的优化,需要把数据获取、计算、布局和绘制分开测量,而不是只加虚拟列表。
#大数据渲染 #Web Worker #性能 #虚拟列表
把十万行计算移进 Web Worker:真正难的是传输与取消
主线程卡顿不是把函数搬进 Worker 就结束了。任务协议、Transferable、过期结果和内存峰值决定最终体验。
#Web Worker #性能 #大数据 #并发
正确使用 CocoaPods 国内源:先分清三段网络链路
安装 CocoaPods 慢、解析 Specs 慢和下载依赖慢是三个问题。先判断命令卡在哪里,再决定是否切换 RubyGems、CDN 或 Git 镜像。
#CocoaPods #Flutter #iOS #工程环境
低代码 BI 引擎:配置能力的边界在哪里
可配置报表不是把组件属性搬进表单,而是建立数据、视觉、交互与运行时之间稳定的中间模型。
#低代码 #BI #前端架构 #数据可视化
低代码配置升级:Schema 迁移不能散落在组件里
历史报表跨过多个版本后,我们用单向迁移、语义校验、黄金样例和失败隔离建立可回放的配置升级管线。
#低代码 #Schema #数据迁移 #TypeScript
多图表页面为什么需要请求调度
当几十个组件同时请求数据,问题不再属于单个组件,而属于页面级资源分配。
#数据可视化 #性能 #请求调度
Node.js 内存泄漏:一次从监控到句柄引用链的排查
真实故障中,怎样把持续上涨的 heapUsed 收敛到 Bull 队列留下的 TCP、Socket 与 EventEmitter,并用多份堆快照完成证据闭环。
#Node.js #内存泄漏 #可观测性 #故障排查
内部平台也有用户体验
工程师不会因为是内部用户,就天然理解混乱的流程、晦涩的错误和没有反馈的操作。
#平台工程 #UI/UX #研发效能
CI 构建一次、部署多次:不可变产物如何让回滚可信
同一提交在预发和生产构建出不同结果后,我们把源码、依赖、制品、SBOM 和部署记录串成可验证链路。
#CI/CD #制品 #供应链安全 #发布
RBAC 不只是用户、角色、权限三张表
权限真正困难的部分,是资源范围、组织关系和业务动作如何共同决定一次访问。
#RBAC #系统设计 #安全
tenantId 不是一个普通筛选条件:多租户隔离的五层防线
一次漏写 WHERE tenant_id 的险情后,我们把租户上下文从认证一直传到数据库策略,并为跨租户操作建立单独通道。
#多租户 #安全 #数据库 #系统设计
把 CI/CD 当作团队产品
流水线不只是 YAML 文件,它有用户、反馈、失败体验和持续演进的成本。
#CI/CD #DevOps #研发效能
审计日志怎么写,才能回答‘谁改了什么’
普通运行日志无法解释一次权限变更。通过主体、资源、动作、前后差异和 requestId 建立可查询且不可随意修改的审计证据。
#审计日志 #安全 #内部平台 #数据模型
异步任务可靠性的四个问题
队列只能保存任务,可靠性来自幂等、状态、重试和人工恢复共同构成的闭环。
#Node.js #消息队列 #可靠性
消息至少会来两次:异步消费者的幂等边界
一次队列超时重投导致重复通知,让我把 messageId、业务写入和 ACK 放进可解释的事务流程。
#消息队列 #幂等 #异步任务 #数据库
把研发流程做成产品:一个内部平台的起点
连接代码、构建、项目与通知系统时,最难的不是接口数量,而是定义谁拥有流程状态。
#Node.js #React #研发效能 #平台工程
从完成页面到理解系统
工程师能力的变化,常发生在开始为上下游结果负责,而不只为自己这一层负责时。
#系统思维 #职业成长 #架构
回滚要在发布之前设计:一次可逆部署的时序
从覆盖服务器目录改成不可变产物、渐进切流量和自动停止,回滚才从应急命令变成经过演练的正常路径。
#发布 #回滚 #CI/CD #可靠性
性能不是分数,而是一份持续预算
从 QPS、首屏到交互流畅度,性能只有被放进业务链路和发布流程,才不会在下一次迭代中消失。
#性能 #SSR #工程体系
内部平台为什么需要控制面:不要让页面直接遥控脚本
从一个能触发构建的按钮,演进到有状态机、租约、权限、产物和恢复入口的任务控制面。
#内部平台 #任务编排 #Node.js #系统设计
JSBridge 的本质是一份跨端协议
WebView 与原生端的通信不能只靠函数名约定,它需要版本、错误与能力协商。
#JSBridge #跨端 #架构
重构 SSR:性能问题首先是系统问题
从单页优化走向服务端渲染链路,真正的瓶颈往往不在某一行代码,而在缓存、流量与降级策略的组合。
#SSR #Nuxt.js #性能 #架构
功能开关不是一个 if:一次分阶段发布的完整设计
为了降低播放器重构风险,我们把稳定分桶、指标对照、自动停止和过期开关清理做成同一条发布流程。
#Feature Flag #灰度发布 #可观测性 #工程管理
跨端复用,先明确不能复用什么
Web、H5 与小程序共享业务,却拥有不同运行环境;复用率不是越高越好。
#跨端 #小程序 #架构
WebView 登录态怎么传:不要把长期 token 交给 H5
一次把 App token 拼进 URL 的方案,暴露了日志泄漏、过期与多端不一致问题。最终用能力白名单和短期会话划清边界。
#WebView #认证 #JSBridge #安全
规范的价值,是减少无意义的决定
代码规范、提交格式和目录约定不负责提升上限,它们负责让团队把注意力留给真正的问题。
#前端工程化 #团队协作 #代码质量
缓存同时过期之后:一次 SSR 回源风暴的处理
热门页面缓存到期时,请求一起打到上游。通过 stale-while-revalidate、单飞锁和随机抖动把尖峰变成可控刷新。
#缓存 #SSR #Node.js #可靠性
离开熟悉业务之前,先带走方法
项目经验会过期,解决问题时形成的观察、验证与协作方法更值得沉淀。
#职业成长 #工程方法 #复盘
一块大屏发出 47 个请求之后:给查询和渲染设预算
监控大屏组件越加越慢,我把首屏、查询、数据量和刷新频率变成可计算预算,并追踪每个超预算项。
#性能 #监控大屏 #请求调度 #数据可视化
监控界面如何处理信息密度
密集并不等于混乱。业务工具需要的是可扫描的层级,而不是更多留白或更多颜色。
#UI/UX #监控系统 #信息架构
前端也需要可观测性
用户说页面卡住时,我们需要的不只是复现运气,而是一条能还原现场的证据链。
#可观测性 #性能 #前端工程化
只有错误堆栈还不够:给前端异常补一条用户动作时间线
一个无法复现的筛选崩溃,让我用有限 Breadcrumb 记录路由、请求和状态转移,并学会控制隐私与噪声。
#前端监控 #可观测性 #隐私 #故障排查
图表是一种语言,不是一种装饰
可视化的起点不是选择折线图或柱状图,而是明确读者需要比较、定位还是解释什么。
#数据可视化 #ECharts #产品设计
图表画错了,但代码没有报错:可视化前的数据管线
一张趋势图把缺失值连成增长,让我开始在图表库之前建立字段校验、口径转换和视觉编码管线。
#数据可视化 #数据质量 #TypeScript #前端架构
前后端联调反复返工后,我开始认真写接口契约
字段表解决不了分页、错误、幂等和兼容问题。一次反复联调让我把接口契约扩展成可以共同验证的边界。
#API #契约测试 #前后端协作 #系统设计
组件边界不等于视觉边界
把每个方框都做成组件,只会得到更分散的耦合;边界应跟随变化原因。
#Vue #组件设计 #前端架构
第一次线上白屏:先恢复页面,再保住证据
一次 HTML 与静态资源版本错配导致的白屏,让我第一次完整经历发现、回滚、缓存处理和发布复盘。
#线上故障 #发布 #前端监控 #缓存
第一份生产代码教会我的事
能运行的代码进入真实业务后,会立即遇到数据、环境和协作带来的第二重复杂度。
#工程实践 #前端 #职业成长
复杂表单不是一组输入框:把提交过程画成状态机
一个重复提交和旧校验覆盖新输入的表单,迫使我把 editing、validating、submitting 与 failed 写成明确状态。
#TypeScript #状态机 #表单 #前端工程
界面复杂度,首先是状态复杂度
当页面开始失控,与其继续补事件处理,不如先列出系统到底允许哪些状态。
#前端 #状态管理 #JavaScript
第一次解决 Git 冲突:不要只让文件变绿
一次两个人同时修改导航栏的冲突,让我明白合并不是删除标记,而是重新确认双方意图和可运行结果。
#Git #协作 #代码评审 #工程实践
为什么我选择前端
前端的价值不只是还原界面,而是在不确定的需求与确定的机器规则之间建立连接。
#前端 #职业选择 #产品
第一次用 Network 面板拆开一个慢请求
页面打开要四秒,真正慢的却不是 JavaScript。把排队、DNS、建连、TTFB 和下载拆开后,我第一次看见 HTTP 请求的完整生命周期。
#HTTP #浏览器 #性能 #调试
浏览器里的第一张完整页面
页面能显示只是开始,结构、样式与行为各自承担什么,决定了代码能走多远。
#JavaScript #HTML #CSS
一次点击执行两遍:我怎样弄懂 DOM 事件传播
一个列表按钮触发两次删除,让我第一次沿着捕获、目标和冒泡阶段理解浏览器,而不是继续堆 stopPropagation。
#JavaScript #DOM #浏览器 #调试
第一个真正有用的小工具:批量改名前先生成计划
为了整理课程资料写了一个批量改名工具,也第一次碰到覆盖、冲突、半成功和回滚这些真实文件操作问题。
#Java #CLI #文件系统 #工程实践
第一次真正理解抽象
抽象不是把名字改得更高级,而是找到变化与不变之间那条可靠的边界。
#Java #抽象 #设计
用 Java 写零件清单:数据模型从现实约束里长出来
把机械专业熟悉的零件清单写成程序后,我第一次发现,类不是名词翻译器,真正重要的是单位、精度和不变量。
#Java #数据模型 #领域建模 #学习记录
第一次学会调试:先让错误稳定地发生
从一个时好时坏的 Java 成绩统计程序开始,我第一次理解:调试不是盯着代码猜,而是把现象变成可重复实验。
#Java #调试 #测试 #学习记录
从机械图纸到第一段 Java 程序
编程最早教给我的不是语法,而是如何把一个含混的问题拆成可以执行的步骤。
#Java #学习方法 #工程思维