从问题出发,不从标签出发。
输入错误信息、技术名或你正在做的事。找不到时,再按领域缩小范围。
从 HTML 到像素:浏览器渲染流水线怎么工作
浏览器不会直接把 HTML 画到屏幕上。本文拆解主线程上的解析、样式计算、布局和绘制,以及合成线程如何复用图层。
进阶9 分钟前端与浏览器
事件循环不只分宏任务和微任务
解释浏览器如何从任务队列取出工作、清空微任务、决定是否渲染,并说明微任务链为什么也会阻塞页面。
进阶8 分钟前端与浏览器
HTTP 缓存策略:强缓存、协商缓存与版本化资源
从 Cache-Control 的语义出发,为带哈希静态资源、HTML、接口数据和用户私有数据设计可预测的缓存策略。
进阶10 分钟前端与浏览器
Service Worker 离线缓存:先设计更新,再设计命中
介绍 Service Worker 生命周期、预缓存与运行时缓存策略,并处理版本升级、缓存清理和失败回退。
进阶11 分钟前端与浏览器
CORS 与预检请求:浏览器到底在保护谁
从同源策略解释简单请求、OPTIONS 预检、凭据模式和常见响应头配置错误。
进阶8 分钟前端与浏览器
Cookie 安全边界:SameSite、HttpOnly 与 CSRF
解释 Cookie 的发送规则、安全属性、跨站与跨源差异,并给出会话 Cookie 和 CSRF 防护建议。
进阶9 分钟前端与浏览器
用 CSP 把 XSS 从一次失误变成多层防线
从 Report-Only 开始部署内容安全策略,使用 nonce、strict-dynamic 和 Trusted Types 降低脚本注入风险。
进阶11 分钟前端与浏览器
Core Web Vitals 优化:从指标回到用户路径
介绍三项核心体验指标的组成、现场数据与实验室数据差异,以及每类问题的优先优化路径。
进阶10 分钟前端与浏览器
资源加载优先级:preload、preconnect 与懒加载怎么选
区分 preload、prefetch、preconnect、modulepreload 和 fetchpriority 的用途,并避免带宽竞争。
进阶8 分钟前端与浏览器
主线程长任务排查:不要只看一条红色火焰图
建立可复现的性能录制流程,识别长任务中的脚本执行、强制布局、垃圾回收和第三方代码。
进阶10 分钟前端与浏览器
Web Worker 实战:把计算移出主线程之前要算清成本
说明 Worker 的适用边界、消息协议、可转移对象、错误处理和生命周期管理。
进阶9 分钟前端与浏览器
IndexedDB 数据层:事务、索引与版本迁移
介绍对象仓库、索引、事务生命周期、版本升级和多标签页协调,构建可靠的本地数据层。
进阶11 分钟前端与浏览器
多标签页通信:BroadcastChannel、storage 与锁
比较多标签页通信方案,设计登出通知、状态同步和单实例后台任务。
进阶8 分钟前端与浏览器
页面生命周期:visibilitychange、pagehide 与 bfcache
解释页面可见性、冻结、销毁和往返缓存,可靠保存草稿与发送末尾统计。
进阶9 分钟前端与浏览器
容器查询:让组件响应自己的空间
使用尺寸与样式容器查询构建可复用卡片,并解释容器单位、命名和渐进增强。
进阶7 分钟前端与浏览器
CSS 层叠层:用 @layer 管理覆盖关系
解释层叠来源、层顺序和选择器权重的关系,为重置、第三方样式、组件和工具类规划稳定覆盖规则。
进阶7 分钟前端与浏览器
可访问组件:从键盘、焦点和语义开始
以按钮、对话框和异步状态为例,建立语义、键盘操作、焦点管理和辅助技术测试的组件基线。
进阶12 分钟服务端与数据
Node.js 事件循环:别让一段同步代码拖住所有请求
Node.js 擅长并发 I/O,但 JavaScript 仍运行在主线程上。本文用可观测指标、任务分片和 Worker Threads 说明如何处理 CPU 密集型工作。
进阶9 分钟服务端与数据
Express 异步错误处理:让异常只经过一个出口
把业务异常、参数错误和未知故障收敛到统一中间件,避免重复 try/catch、泄露堆栈和一条请求记录多次日志。
进阶8 分钟服务端与数据
API 分页:数据会变化时,用游标代替页码
offset 分页简单,但在数据持续新增或删除时会重复或漏掉记录。本文实现基于 created_at 与 id 的稳定游标分页。
进阶10 分钟服务端与数据
接口幂等:网络重试不应该创建两笔订单
客户端超时后重试是正常行为。对支付、下单等写接口,引入幂等键并在数据库事务中认领请求,才能避免重复副作用。
进阶11 分钟服务端与数据
JWT 登录设计:短访问令牌与可撤销刷新令牌
使用短期 Access Token 处理 API 授权,使用服务端可追踪的 Refresh Token 延长会话,并通过轮换检测令牌重放。
进阶12 分钟服务端与数据
用 Redis 做分布式限流:先定义你想限制什么
多实例服务不能依赖进程内计数器。本文讨论限流维度、Redis 原子操作、响应头和故障降级策略。
进阶11 分钟服务端与数据
OpenAPI 不只写文档:让契约参与请求校验
把 OpenAPI 作为可执行契约:定义统一错误结构、在边界校验输入、生成客户端类型,并在 CI 中检查破坏性变更。
进阶9 分钟服务端与数据
Node.js 文件上传:从流式处理到对象存储确认
安全的上传链路不止一个 multer 配置。本文覆盖流式接收、魔数检测、预签名直传、对象权限和上传确认。
进阶12 分钟服务端与数据
Webhook 接收端:验签、去重和异步消费缺一不可
Webhook 是外部系统主动调用你的接口。接收端需要对原始字节验签、限制时间窗口、按事件 ID 去重并快速返回。
进阶10 分钟服务端与数据
PostgreSQL 事务边界:把不变量留在数据库里
事务不只是 begin 与 commit。本文从库存扣减示例解释业务不变量、原子更新、锁顺序和外部调用边界。
进阶13 分钟服务端与数据
PostgreSQL 索引:从执行计划反推访问路径
通过 EXPLAIN ANALYZE 识别扫描、过滤和排序成本,再围绕高频查询设计复合索引、部分索引和覆盖索引。
进阶12 分钟服务端与数据
PostgreSQL JSONB:灵活字段也需要建模边界
JSONB 适合变化快的附加属性,但高频过滤、关联和强约束字段应保留为普通列。本文给出常用查询与索引策略。
进阶10 分钟服务端与数据
MySQL 死锁:统一加锁顺序,并重试整个事务
死锁不是数据库失控,而是并发事务形成了循环等待。本文介绍报告分析、索引影响、锁顺序和有限重试。
进阶12 分钟服务端与数据
Redis 缓存一致性:先接受短暂旧数据,再设计失效
缓存不是第二个真相来源。以数据库为准,使用 Cache-Aside、版本化 key、随机 TTL 和请求合并控制一致性与稳定性。
进阶12 分钟服务端与数据
数据库连接池:连接越多,不代表吞吐越高
连接池过大会让数据库上下文切换和内存压力上升。本文从部署实例数反推池大小,并设置获取超时、语句超时和泄漏保护。
进阶10 分钟服务端与数据
Prisma 生产迁移:把危险变更拆成可回滚步骤
开发环境的自动迁移不等于生产发布流程。本文使用 expand-contract 分阶段新增字段、回填数据、切换代码并最终收紧约束。
进阶11 分钟服务端与数据
MongoDB 聚合与建模:先按读取路径决定嵌入还是引用
MongoDB 的灵活结构不等于无需建模。本文以订单统计为例,说明嵌入与引用、聚合管道顺序和 explain 分析。
进阶12 分钟工程效率与质量
Monorepo 不只是把仓库放在一起:用工作区守住模块边界
从目录职责、依赖方向和发布边界出发,搭建一个不会随着项目增长而失控的 Monorepo。
进阶9 分钟工程效率与质量
TypeScript 大项目提速:从一个 tsconfig 拆到 Project References
用 Project References 拆分类型检查边界,降低编辑器负担,并让 CI 只重建真正受影响的项目。
进阶8 分钟工程效率与质量
给 API 错误一个稳定契约:别再只返回 message
设计可被前端、日志和监控共同理解的错误结构,让失败既能展示给用户,也能快速定位。
进阶7 分钟工程效率与质量
不停机数据库迁移:用 Expand and Contract 拆掉危险变更
把字段重命名、约束收紧等破坏性操作拆成兼容阶段,降低应用与数据库同时切换的风险。
进阶10 分钟工程效率与质量
测试金字塔落地:按风险选测试,不按数量凑比例
从系统边界和故障成本出发选择测试层级,让测试套件既快又能发现真正的问题。
进阶8 分钟工程效率与质量
Playwright 稳定性实践:消灭等待、串扰和偶发失败
用可观察条件替代固定等待,隔离测试数据,并为偶发失败保留可诊断证据。
进阶9 分钟工程效率与质量
微服务契约测试:在部署前发现接口不兼容
由消费者描述真实依赖,再由提供者验证契约,减少联调环境中的意外破坏。
进阶9 分钟工程效率与质量
测试数据 Builder:让用例只表达与场景有关的差异
用合理默认值和链式覆盖生成测试对象,避免每次模型加字段都修改整套测试。
入门6 分钟工程效率与质量
CI 缓存别靠运气:设计可解释的缓存键与恢复策略
区分依赖缓存与构建产物缓存,设计完整缓存键,并避免旧缓存制造难以复现的结果。
进阶8 分钟工程效率与质量
金丝雀发布实战:用指标决定继续还是回滚
从小流量开始逐步放量,把健康指标、观察窗口和自动回滚写进发布流程。
进阶10 分钟工程效率与质量
更小也更可信的容器镜像:多阶段构建、固定版本与 SBOM
缩小运行镜像、固定基础镜像来源,并生成软件物料清单,让容器既轻量又可审计。
进阶9 分钟工程效率与质量
线上故障前 15 分钟:一份能真正执行的 Runbook
明确指挥、止损、证据保全和沟通节奏,避免故障现场所有人同时猜原因。
进阶8 分钟工程效率与质量
Pre-commit Hook 怎么配才不惹人关:只检查这次改动
把快速、确定的检查前移到本地,同时把完整验证留给 CI,兼顾反馈速度与质量门禁。
入门6 分钟工程效率与质量
可复现开发环境:让新成员半小时跑起项目
固定运行时版本、自动准备依赖服务,并用干净环境持续验证项目启动文档。
进阶8 分钟工程效率与质量
结构化日志落地:从 requestId 一路追到后台任务
统一字段、传递上下文并控制敏感信息,让日志真正支持跨服务检索和故障定位。
进阶8 分钟工程效率与质量
团队 CLI 设计:把散落脚本做成可靠的自助工具
统一参数、退出码和安全确认,让部署、数据修复等高频操作既容易发现又不容易误用。
进阶8 分钟