写给自己和同行的技术笔记
容器与编排
三种探针配错的五种线上现象
滚动更新卡在 0/3 ready、Pod 明明在跑却一直不 ready —— 三种探针配错的五种典型现象、参…
阅读文章 →
前端与性能
首页从 59 MB 到 2.27 MB
LCP、INP、CLS 三个指标对应三种完全不同的病理。用本站真实数据说明:30 张没压缩的照片,比任何代码…
阅读文章 →
数据库与缓存
索引失效的 10 种场景与 EXPLAIN 实战
隐式类型转换、函数包裹、前导模糊、联合索引断链等 10 种索引失效场景,每种配 EXPLAIN 实测输出与改…
阅读文章 →
精选
最近更新 共 96 篇查看全部归档 →
仓库 2.1 GB、clone 要九分钟:历史瘦身与 LFS 迁移
两年时间仓库从 40 MB 涨到 2.1 GB,而工作区只有 26 MB。体积全躺在历史里:设计稿、数据库备份、误提交的 node_mo…
@Async 静默失效:自调用、异常黑洞与 MDC 丢失
导出改成异步,接口 180ms 就返回,任务却从没跑过。自调用绕过代理、void 返回值吞掉异常、默认执行器每次新建线程,三个问题互相掩…
两万行表格滚动像幻灯片:虚拟列表、白条与 key 的三个坑
产品要求一屏看完两万行订单,v-for 直接铺满,滚动只剩 8 帧。换成虚拟列表后,滚动白条、勾选串行、动态行高三个问题接连冒出来,最后…
HPA 显示 30% 却不扩容:requests 定大了,阈值永远够不着
压测时每个 Pod 都在 0.6 核,HPA 却只算 30%,副本数一动不动。requests 是半年前按峰值拍的,成了 utiliza…
proxy_cache 上线三天就串号:缓存键、Set-Cookie 与回源风暴
三行配置就让回源掉了九成,三天后有客户看到了别人的库存和会员价。缓存键里少了身份维度、上游还在发 Set-Cookie,修完又撞上热点 …
一条 ALTER 跑了六分十二秒:MDL 与 online DDL 的边界
加个字段的 DDL 在测试环境 0.2 秒,生产上却把整张表锁了六分钟。一个 Sleep 状态的空闲连接挂着 MDL,后面所有读写都排在…
改了 ConfigMap,Pod 里的配置还是旧的:subPath 与热更新的边界
限流阈值从 200 改到 500,等了十分钟容器里还是旧值。kubelet 换的是符号链接,subPath 绑的是启动时的 inode。…
CompletableFuture 用了公共池:一次批量接口把 Tomcat 线程全占住
五个下游改并行,本地从 380ms 降到 120ms,压测 QPS 却腰斩。两百个 Tomcat 线程停在 join 上,干活的只有三个…
线上报错只剩一行 Script error.:sourcemap 与错误采集的三个断点
三成错误只留一句话,剩下的堆栈指向压缩文件的第 48 万列。修好 crossorigin 只是第一步,sourcemap 的三个断点、V…
Communications link failure:连接池和 wait_timeout 的时间竞赛
每天凌晨第一笔请求必失败,重试就好。Aborted_clients 一千八百多,maxLifetime 用的是默认值,wait_time…
limit_req 把正常用户挡在门外:漏桶、突发与真实 IP
限流上线第二天,投诉集中在两家客户。日志里被限的 IP 只有四个,全是我们自己的代理。从 set_real_ip_from、burst …
git bisect 两小时定位到一次提交:从 40 个候选里二分
结算回调偶发 NPE,六天四十多个提交没人认得出是哪次引入。先把偶发变必现,再把判定交给脚本做二分,两次跑偏后锁到一条「纯重构」提交。
滚动更新卡在 2/5 二十分钟:配额、maxUnavailable 与 PDB
Events 一片空白,五个旧 Pod 一个不退,两个新的 Ready 却不增加。真因在 status.conditions 里:Pod…
启动 96 秒到 14 秒:Spring Boot 启动慢的分层排查
扩容时新 Pod 八十秒才 Ready,HPA 跟不上流量。从 Bean 实例化打点到收窄扫描包,再到 AlwaysPreTouch 与…
后台开两天堆到 1.8 GB:Vue3 SPA 内存泄漏定位
用久了变卡、重开就好,是内存泄漏的典型特征。Memory 快照差集里一万两千个 Detached DOM,引用链指向 37 个没 dis…
load average 38,CPU 却空闲 71%:D 状态进程排查
8 核机器 load 38,CPU 七成空闲。vmstat 里 r=1、b=21,二十个进程堵在 IO 上。根因是备份任务冲掉页缓存,让…
Nginx 的 499 和 504 一起涨:一次超时预算的重排
一个导出接口同时制造了 499 和 504。客户端 30 秒、Nginx 60 秒、上游无限制,三层超时全错位,还叠加了重试放大。超时怎…
Seconds_Behind_Master 一直是 0,从库数据却落后 8 分钟
从库延迟显示 0,报表却少了 11 万。心跳表算出真实延迟 421 秒,根因是一个几十万行的大事务。为什么这个指标在空闲、并行复制、时钟…
Service 有地址,Ingress 却 502:Endpoints 为空的排查路径
Pod 是 Running 1/1,日志干净,直连 Pod IP 也通,域名访问却 502。ingress-nginx 的 upstre…
发版后 30% 用户白屏:Cache-Control 与资源指纹的配合
白屏报 ChunkLoadError,强刷一下就好,因为 index.html 被缓存了七天而旧 chunk 已被删除。入口用 no-c…
堆只用了 900 MB 却被 OOMKilled:Metaspace 与堆外内存
Xmx 2g,堆使用率 46%,容器却以 Exit Code 137 被杀。差出来的 1.5 GB 在 Metaspace 和 Nett…
HTTPS 证书过期三天:certbot 自动续期为什么一直失败
续期定时任务每小时都在跑,证书还是过期了三天。根因是一条无条件的 return 301,把 ACME 校验请求也跳去了 HTTPS。we…
df 还剩 42 GB,却报 No space left on device:inode 与已删除文件
磁盘明明还有 42 GB,日志却写不进去,df -i 显示 inode 已经 100%。三百多万个小文件来自 Postfix 队列和容器…
Too many connections:486 个 Sleep 连接,把数据库占满了
早高峰连接数打满,CPU 却只有 22%。486 个连接里 402 个在 Sleep,全来自同一个导出接口:Connection 关了,…
Redis 大 key 与热 key:从库延迟 40 秒,主库 CPU 却只有 30%
告警说从库落后 40 秒,但主库 QPS 和 CPU 都没涨。真正的原因是一个 380 MB 的 hash:大 key 不让请求变多,只…
反向代理下的重定向:Location 为什么会变成 http://host:8081/
登录成功却跳到一个打不开的地址,Location 里带着内网端口甚至 localhost。这类问题几乎都出在三个地方:绝对 Locati…
depends_on 不等于「准备好了」:健康检查与启动顺序的四个坑
容器都 Up 了,应用还在刷连不上库。depends_on 只保证启动顺序,不保证就绪;补上 healthcheck 后又踩了 mysq…
Next.js standalone 上 Docker:静态资源、原生依赖与 30 秒构建
output: 'standalone' 能做出很小的镜像,但它不会帮你拷 public 和 .next/static,也不会把被 we…
Nginx location 匹配优先级:一次 /admin 被别的服务抢走的复盘
登录成功后跳到 /admin,结果落进了隔壁业务的后台,另一些时候干脆「找不到网页」。查了一晚上才发现是三条规则叠在一起:最长前缀匹配、…
K8s 三种探针:liveness、readiness、startup 配错会怎样
滚动更新卡在 0/3 ready、Pod 明明在跑却一直不 ready —— 三种探针配错的五种典型现象、参数推导方法与固定排查套路。
Docker 镜像瘦身:从 1.24 GB 压到 87 MB
多阶段构建、分层 jar、合理清理缓存,六步把镜像从 1.24 GB 压到 87 MB,CI 推送从 3 分钟降到 8 秒,以及四种看着…
K8s OOMKilled 排查:Exit Code 137 的三种来源
Exit Code 137 只说明被 SIGKILL,不说明原因。区分容器级、节点级、JVM 级 OOM,算出堆内外内存配比,附一套可直…
JVM 内存结构与 GC 调优:从 900ms 到 180ms
堆调到 8G 停顿反而变长?从分代布局讲清四类 GC 症状的判别方式,再用一次真实调优过程说明参数该怎么推。
线程池七个参数:一个无界队列引发的 OOM
newFixedThreadPool 把队列设成无界,3000 个任务直接吃满 3.2 GB。七个参数的真实作用顺序、四种拒绝策略与五个…
Java 线上排查工具链:从 CPU 100% 定位到方法行
CPU 高、内存涨、线程堆积、接口慢,四类现象各对应不同的第一条命令。jstack、jcmd、Arthas 的完整用法与判读方法。
MySQL 锁机制与死锁分析:从死锁日志到根因
InnoDB 的锁加在索引上而不是行上。记录锁、间隙锁、临键锁的加锁规则,死锁日志的四步读法,以及五个高频死锁场景的改法。
MySQL 慢查询治理:3 秒到 45ms 的完整过程
一条 ORDER BY 分页查询拖垮整个接口。七步治理:联合索引、覆盖索引、游标分页、COUNT 限流、消除函数与隐式转换,每步附实测收…
Redis 缓存穿透、击穿、雪崩与一致性策略
三个词经常被混用,根因和修法完全不同。空值缓存与布隆过滤器、互斥锁与逻辑过期、TTL 抖动与本地兜底,以及四种一致性策略的取舍。
Vue 3 响应式的六个坑:解构、ref、watch 与性能
从 Proxy 的 get/set 拦截原理出发,推导出解构丢响应性、ref 少写 .value、watch 浅监听等六个高频问题的成因…
Vite 构建优化:90 秒到 18 秒,产物 4.2 MB 到 420 KB
用 visualizer 定位到五个「全量引入」的第三方库,按需引入加分包把首屏砍掉 90%,构建时间靠关 sourcemap 和缓存降…
Core Web Vitals 实战:首页从 59 MB 到 2.27 MB
LCP、INP、CLS 三个指标对应三种完全不同的病理。用本站真实数据说明:30 张没压缩的照片,比任何代码优化都致命。
Kafka 消息不丢不重:生产端到消费端的完整配置
acks 与 min.insync.replicas 必须一起设,手动提交只是第一步。四个丢失点的逐段拆解,以及「恰好一次」真正依赖的业…
Redis 主从、哨兵、Cluster:三套高可用方案怎么选
三套方案的丢失窗口其实是同一个 —— 异步复制的延迟。故障转移过程、脑裂防护、16384 个槽的由来,以及按规模选型的判断标准。
分布式锁的五个版本:从 SETNX 到业务幂等
每一版都修掉上一版的漏洞,但最后一版才触及根本:锁只是优化,幂等才是正确性。附 Redlock 争议与 ZooKeeper 的适用边界。
Docker Compose 编排实战:一套前端 + 后端 + MySQL + Redis 的完整环境
一套前端、后端、MySQL、Redis 的最小可用编排。健康检查、启动依赖顺序、环境变量分离,以及上线后才暴露的几个坑,一次讲清。
Nginx 反向代理与 HTTPS 实战:被 X-Forwarded 坑掉的两个晚上
一次 WAF 改写 X-Forwarded-Proto,让 109 条 sitemap 全部失效。从这场真实事故出发,把反向代理与 HT…
Spring 事务失效的 8 个场景,每一个都踩过
@Transactional 在同类方法调用、非 public 方法、异常被吞掉、多数据源等 8 种场景下会悄悄失效。每种给出复现代码、…
Spring Boot 自动配置原理与手写一个可用的 Starter
从 @EnableAutoConfiguration 到条件装配的加载顺序,再手写一个能用的 Starter。搞懂自动配置,才敢改别人的…
MySQL 索引失效的 10 种场景与 EXPLAIN 实战
隐式类型转换、函数包裹、前导模糊、联合索引断链等 10 种索引失效场景,每种配 EXPLAIN 实测输出与改写方案。
Git 分支工作流与冲突处理:从焦虑到可逆操作
把撤销、合并、冲突处理按意图重新组织一遍,先建立四层数据模型的心智地图,让每一步操作都可回退。
CI/CD 流水线设计:从提交到上线的完整链路
一条好流水线的四个标准:快、可信、可回、可追溯。完整 GitLab CI 与 GitHub Actions 配置,以及六个最常见的反模式…
可观测性三件套:指标、日志、链路怎么串起来
有监控但查不到原因,是因为缺了「调用链耗时」这一层。四个黄金信号、结构化日志、1% 采样链路,以及告警该怎么分级。
灰度发布与回滚:把故障成本降两个数量级
影响面乘以持续时间等于故障成本。五种发布策略对比、三个灰度维度、必须提前定好的回滚判据,以及数据层的 Expand-Contract 模…
Mysql 索引管理
话不多说,直接上代码
mysql 试图管理
试图管理
Mysql 用户管理
-- 创建用户(推荐方式)
Mysql 授权管理
-- 基础授权
Mysql 数据库 - 表 - 操作相关
-- 显示当前库的所有库
Mysql 表空间管理
--现在8基本都是一表一空间 使用的为独立表空间
异常记录 java.lang.NoSuchMethodError: ‘void org.springframework.web.method.ControllerAdviceBean.<init>(java.lang.Object)'
在spring cloud 2025.0.0 + spring boot 3.5.7 + knife4j 4.5.0 集成,集成完成后没…
docker - 通过 Dockerfile 创建镜像
由于 Docker 镜像的结构优势,使它的占用空间远小于普通的虚拟机镜像,而这就大幅减少了 Docker 镜像在网络或者其他介质中转移所…
docker - 使用 Docker Hub 中的镜像
自己编写 Dockerfile 能够很好的实现想要的程序运行环境,不过如果装有想要环境的镜像已经由热心的开发者构建好并共享在 Docke…
docker - Dockerfile 使用技巧
在实际编写 Dockerfile 时,与搭建环境相关的指令会是其中占有大部分比例的指令。在搭建程序所需运行环境时,难免涉及到一些可变量,…
mysql常用时间函数
1,NOW():返回当前日期和时间
mysql客户端错误代码大全
客户端错误信息来自下述源文件:
mysql服务端错误代码大全
服务器错误信息来自下述源文件:
Java8新特性-Optional 类
点击查看这篇笔记的完整内容。
Java8新特性-Stream API
Stream到底是什么呢? 是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。 “集合讲的是数据,Stream讲的是计算!” …
ES6
变量在什么范围内可用,类似Java的全局变量和局部变量的概念,全局变量,全局都可用,局部变量只在范围内可用。ES5之前的var是没有块级…
Javascript继承实现方式
1、构造继承 2、原型继承 3、实例继承 4、拷贝继承 原型prototype机制或apply和call方法去实现较简单,建议使用构造函…
Java8新特性-方法引用与构造器引用
点击查看这篇笔记的完整内容。
Javascript作用链域
全局函数无法查看局部函数的内部细节,但局部函数可以查看其上层的函数细节,直至全局细节。 当需要从局部函数查找某一属性或方法时,如果当前作…
JavaScript值类型、附内存图
两种类型的区别是:存储位置不同; 原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放…
Java8新特性-函数式接口
点击查看这篇笔记的完整内容。
javaScript-This对象
点击查看这篇笔记的完整内容。
Javascript-eval的作用
它的功能是把对应的字符串解析成JS代码并运行; 应该避免使用eval,不安全,非常耗性能(2次,一次解析成js语句,一次执行)。 由JS…
redis 分布式锁
分布式应用进行逻辑处理时经常会遇到并发问题。
Java8新特性-Lambda 表达式
Lambda 是一个匿名函数,我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简…
搭建 Docker 运行环境
既然 Docker 是一款实用软件,我们就不得不先从它的安装说起,只有让 Docker 运行在我们的计算机上,才能更方便我们对 Dock…
null,undefined 的区别
null 表示一个对象被定义了,值为“空值”; undefined 表示不存在这个值。
JavaScript-写一个通用的事件侦听器函数
点击查看这篇笔记的完整内容。
Javascript创建对象的几种方式
javascript创建对象简单的说,无非就是使用内置对象或各种自定义对象,当然还可以用JSON;但写法有很多种,也能混合使用。
Redis 安装方式
体验 Redis 需要使⽤ Linux 或者 Mac 环境,如果是 Windows 可以 考虑使⽤虚拟机。主要⽅式有四种:
Redis-布隆过滤器
布隆过滤器可以理解为一个不怎么精确的 set 结构,当你使用它的 contains 方法判断某个对象是否存在时,它可能会误判。但是布隆过…
["1", "2", "3"].map﴾parseInt﴿ 答案是多少?
[1, NaN, NaN] 因为 parseInt 需要两个参数 (val, radix), 其中 radix 表示解析时用的基数。 m…
Redis - 漏斗限流
漏斗限流是最常用的限流方法之一,顾名思义,这个算法的灵感源于漏斗(funnel)的结构。
Redis-实现简单限流
限流算法在分布式领域是一个经常被提起的话题,当系统的处理能力有限时,如何阻止计划外的请求继续对系统施压,这是一个需要重视的问题。
IE与火狐的事件机制区别,如何阻止冒泡?
点击查看这篇笔记的完整内容。
JavaScript的基本规范
1.不要在同一行声明多个变量。 2.请使用 ===/!==来比较true/false或者数值 3.使用对象字面量替代new Array这…
redis消息队列-延时队列
Redis 的消息队列不是专业的消息队列,它没有非常多的高级特性,没有 ack 保证,如果对消息的可靠性有着极致的追求,那么它就不适合使…
在 Windows 和 Mac 中使用 Docker
对于开发来说,Windows 和 macOS 是更为常见和常用的系统,所以也很有必要了解在 Windows 和 macOS 中使用 Do…
JavaScript的原型及原型链
每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就…
Redis - HyperLogLog
我们常见的业务问题:如果你负责开发维护一个大型的网站,有一天老板找产品经理要网站每个网页每天的 UV 数据,然后让你来开发这个统计模块,…
docker保存和共享镜像
让 Docker 引以为傲的是它能够实现相比于其他虚拟化软件更快的环境迁移和部署,在这件事情上,轻量级的容器和镜像结构的设计无疑发挥了巨…
Redis - 位图
在我们平时开发过程中,会有一些 bool 型数据需要存取,比如用户一年的签到记录,签了是 1,没签是 0,要记录 365 天。如果使用普…
Redis - GeoHash
Redis 在 3.2 版本以后增加了地理位置 GEO 模块,意味着我们可以使用 Redis 来实现摩拜单车「附近的 Mobike」、美…