博客
关于 GPU、LLM、MLOps、Kubernetes 以及心态的文章 · 855 篇
#2026-03 168#ai 112#llm 90#ai-papers 62#career 60#kubernetes 57#mindset 51#ai-platform 48#devops 45#security 43#deep-learning 35#performance 33#psychology 32#mlops 30#observability 29#2026-04 26#linux 24#database 23#robotics 22#rust 22#ai-agent 21#mcp 20#productivity 20#culture 19#evaluation 19#gpu 18#transformer 18#electronics 17#paper-review 17#pytorch 17#developer-tools 16#distributed-systems 16#engineering 16#learning 16#open-source 16#postgresql 16#rag 16#fundamentals 15#network 15#2026-08 14
正确使用 Kubernetes 三种探针 — liveness、readiness、startup 的准确边界
毫无问题的 Pod 周期性重启、刚发布完就冒出大量 502、启动缓慢的应用永远到不了 Ready,这三类故障全都出自探针设计。文章先区分三种探针各自回答什么问题、失败时又会做什么,然后计算从 initialDelaySeconds 到 failureThreshold 这些参数实际会在几秒之后杀掉容器。接着讨论把数据库检查放进 liveness 为什么会让单点故障扩散成全面故障、readiness 里到底可以放到什么程度、exec 探针
2026-07-26 · 21 分钟阅读 #kubernetes#liveness-probe#readiness-probe#graceful-shutdown#sre用 Git 内部结构理解命令 — 用对象、引用、索引重读 reset 和 rebase ♪ 可收听
把 Git 命令背下来,结果每次还得搜;可只要懂了数据模型,命令的行为是可以推出来的。本文用 cat-file 和 ls-files 亲手打开来看:blob、tree、commit、tag 这四种对象,相同内容永远得到相同哈希的内容寻址,分支不过是一个 41 字节的文件这一事实,以及索引里到底装了什么。有了这个模型,reset 为什么是指针移动、rebase 为什么不是搬走提交而是新建提交、cherry-pick 为什么会冲突、deta
2026-07-26 · 16 分钟阅读 #git#internals#git-objects#fundamentals#version-controlKubernetes OOMKilled(137) 内存问题排查 — 在调高上限之前要确认的事 ♪ 可收听
本文讨论容器以 Exit Code 137 退出、应用日志里却没有留下任何异常的情况。文章从 137 只能说明 128 加 9、也就是 SIGKILL 这一事实出发,整理了如何用一行 dmesg 区分容器 cgroup 上限导致的 OOM、节点全局 OOM 以及 kubelet 驱逐。文章用真实的命令和输出说明:JVM、Node.js 和 Python 会如何误解容器上限,为什么调大堆反而会让情况恶化,working set、RSS 和
2026-07-26 · 19 分钟阅读 #kubernetes#oomkilled#memory#jvm#cgroup一把胡椒把世界连了起来 — 香料贸易与全球化的原型 ♪ 可收听
408年围困罗马的阿拉里克开出的赎金清单上,金银之外还列着1360公斤胡椒。如今在超市几十元就能买到的果实,当年为何贵到这个地步?那个流传甚广的说法 — 香料是用来盖住腐肉气味的 — 又为何证据薄弱?本文先厘清这两点,再依次追踪1498年达伽马抵达卡利卡特、1602年成为世界第一家股份公司的荷兰东印度公司与1621年班达屠杀,以及1667年布雷达条约里让伦岛与曼哈顿分道扬镳的那场著名交换的真实脉络。最后要看的是今天的供应链:胡椒换成了可
2026-07-26 · 23 分钟阅读 #humanities#history#trade#globalization#colonialism牛顿为什么重写了世界——苹果、《自然哲学的数学原理》与预测这块试金石 ♪ 可收听
苹果没有砸在牛顿头上。那则轶事的出处是1752年威廉·斯蒂克利的回忆录,而故事本身出自八十三岁的牛顿之口。鼠疫让剑桥关门的1665年"奇迹之年",其实是把长达二十年的工作压缩进一年的叙事;而1687年的《自然哲学的数学原理》,是哈雷自掏腰包付了出版费的书。与莱布尼茨的微积分优先权之战、凯恩斯在1936年苏富比拍卖会上买下的炼金术手稿、围绕"站在巨人肩上"这句话的解释之争,再到两百年后爱因斯坦的修正为什么不算失败——文章最后落在一个问题上
2026-07-26 · 22 分钟阅读 #humanities#science#history-of-science#newton#physics钱不是从物物交换里诞生的 — 从吕底亚硬币到信用货币的货币世界史 ♪ 可收听
经济学教科书的第一章说,货币诞生于物物交换的不便,可人类学家至今没有找到哪怕一个这样的社会。公元前7世纪吕底亚的琥珀金硬币、11世纪宋代四川诞生的世界最早纸币交子、波托西白银掀起的16世纪价格革命,直到1971年8月尼克松关上黄金窗口的那个夜晚 — 本文追踪货币真正走过的路。最后登场的是太平洋雅浦岛的巨型石币:不用搬动、甚至沉入海底也照样管用的石头,最准确地解释了今天我们账户里的余额究竟是什么。
2026-07-26 · 22 分钟阅读 #humanities#history#money#economics#financegit 撤销 — 按情况挑选 restore、reset、revert、reflog ♪ 可收听
把撤销命令背下来,结果每次还是要搜;可要是先把"我到底想撤销什么"分类清楚,命令自己就定下来了。本文把问题拆成六种情况——工作目录、暂存、上一条提交信息、提交本身、已经推送出去的提交、被删掉的分支——并给出各自准确的命令和风险等级。文中用一张表展示 reset 的 soft、mixed、hard 分别移动 HEAD、索引、工作树中的哪些部分,说明为什么已推送的历史只有 revert 这一个答案,以及把合并提交 revert 之后再合并一
2026-07-26 · 16 分钟阅读 #git#undo#reset#reflog#version-controlgit 变慢的时候 — 让大型仓库重新变快的结构性处方 ♪ 可收听
仓库变慢的原因不止一个。提交历史太长、文件数量太多、里面塞了大的二进制文件,这是三个不同的问题,处方也各不相同。本文先从区分原因的测量命令讲起,说明浅克隆和部分克隆为什么不是彼此的替代品而是用途不同的工具,sparse-checkout 和文件监视如何把 status 缩短,以及 commit-graph 为什么能把日志和合并基准点的计算改变得那么明显。文中还讲了"用 aggressive 跑 gc"这条常见建议为什么大多是亏的,为什么
2026-07-26 · 16 分钟阅读 #git#performance#monorepo#git-lfs#version-control包豪斯:14年改变了100年——读懂事物形状的方法
1919年在魏玛开校、1933年在纳粹压力下关门的包豪斯,只存在了整整14年。学生人数始终维持在数百人的规模,建筑系是开校八年之后才有的,卖得最多的产品也不是那把著名的钢管椅,而是壁纸。本文梳理预备课程与工坊制度、"形式追随功能"其实出自路易斯·沙利文之口这一点、女学生不得不涌向织造工坊的结构,以及关校反而造就的全球化——并在"极简主义是否永远正确"这一反论之后,以从身边任何一件东西反推其形状理由的观察法收尾。
2026-07-26 · 23 分钟阅读 #humanities#design#architecture#design-history#modernismDocker 构建缓存为什么总是失效 — 层缓存键、ARG 与 BuildKit 缓存挂载
从缓存键这一层解释:为什么只改了一行代码,npm ci 却要重跑五分钟。文章讲清 RUN 的缓存键是命令字符串、而 COPY 的缓存键是文件内容哈希这一差别,一层失效就会连带失效其下所有层的规则,以及 ARG 在 BuildKit 与旧构建器上行为不同的那个点。再结合 CI runner 本来就没有缓存这一事实,用真实命令和输出梳理缓存挂载不会被导出到镜像仓库缓存的陷阱、cache-from 与 cache-to 的 mode 差异,以
2026-07-26 · 14 分钟阅读 #docker#buildkit#build-cache#ci-cd#devopsgit merge vs rebase — 什么时候用哪个,为什么共享分支不做 rebase ♪ 可收听
merge 和 rebase 的差别,看图不准,看提交哈希才准。变基不是移动提交的命令,而是创建父提交不同的新提交的命令,而哈希会变这一个事实,就是"不要对共享分支做 rebase"这条黄金法则的唯一依据。本文用真实的提交哈希和 reflog 输出展示这个变化,用 first-parent 日志反驳"合并提交是噪音"的成见,讲清楚压缩合并从 bisect 和 cherry-pick 那里拿走了什么,变基过程中同一个冲突反复出现的原因以及
2026-07-26 · 16 分钟阅读 #git#rebase#merge#version-control#workflow容器与 VM 究竟差在哪里 — namespace、cgroup,以及共享内核的账单 ♪ 可收听
先说清"容器是轻量级 VM"这种说法为什么会带来误解。容器只是一个被命名空间遮住视野、被 cgroup 限制了资源的普通 Linux 进程,它原样共享宿主机内核。文章用真实命令确认 pid/mnt/net/uts/ipc/user/cgroup 各自隔离了什么、cgroup v2 又限制了什么,并讨论共享内核带来的后果:sysctl 共享、对内核版本的依赖,以及容器逃逸。最后延伸到 gVisor、Kata 和 Firecracker 存
2026-07-26 · 18 分钟阅读 #docker#container#linux-namespace#cgroup#virtualizationDocker 网络模式与连接问题 — bridge、host、overlay,以及 127.0.0.1 的陷阱 ♪ 可收听
把"容器起来了却连不上"这类状况,按各模式的工作原理逐一拆开。文章讲清默认 bridge 下容器为什么无法用名字互相找到、用户自定义网络的内置 DNS 起了什么作用、端口发布实际生成的 iptables DNAT 规则,以及把绑定地址限制在 127.0.0.1 的安全含义。还会用真实命令和输出梳理容器里的回环并不是宿主机以及 host.docker.internal、应用只绑定回环导致外部连不上的问题、UFW 拦不住已发布端口的机制,以
2026-07-26 · 17 分钟阅读 #docker#docker-network#iptables#networking#devops建了索引却不走索引的原因 — 那些优化器对而你错的情况 ♪ 可收听
本文按原因梳理为什么建了索引之后执行计划里依然是 Seq Scan。选择性太低导致优化器故意忽略、列上套了函数或运算而不再 sargable、类型不匹配触发隐式转换、LIKE 前导通配符、OR 条件、复合索引的前导列规则、统计信息老化,直到 NULL 的处理,全部用真实 SQL 和执行计划来确认。同时也讨论部分索引与表达式索引成为答案的场景,以及索引反而有害的情况。
2026-07-26 · 18 分钟阅读 #database#postgresql#index#query-optimization#mysql连接池开太大反而吃亏的原因 — 把队列排在哪里 ♪ 可收听
本文梳理把连接池调大反而变慢这一现象背后的原理。在 PostgreSQL 的进程模型下连接为什么昂贵,既然磁盘与 CPU 的并行度有限,为什么把队列排在连接池而不是数据库内部更划算,以及常被引用的核数公式的依据与局限。文章还会结合真实查询讲解微服务中实例数乘以池大小超过最大连接数的典型事故、PgBouncer 的三种模式与事务模式下无法使用的功能、如何用 idle in transaction 抓连接泄漏,以及无服务器环境的特殊性。
2026-07-26 · 21 分钟阅读 #database#postgresql#connection-pool#pgbouncer#performanceDockerfile 里反复出现的错误 — 以 root 运行、PID 1,以及留在镜像里的密钥 ♪ 可收听
把那些构建能过、只在生产环境炸掉的 Dockerfile 问题,从原因说起。没写 USER 因而以 root 运行的容器、latest 标签与可复现性、为什么该避开 ADD、shell form 的 CMD 吞掉 SIGTERM 导致每次部署白扔 10 秒并以 137 退出的机制、PID 1 的僵尸回收职责与 tini、用 ARG 和 ENV 传入的令牌残留在 docker history 里的问题,以及 BuildKit 的 secr
2026-07-26 · 16 分钟阅读 #docker#dockerfile#container-security#pid1#devops给 Docker 镜像瘦身 — 层的真相、multi-stage build,以及基础镜像的真实代价 ♪ 可收听
先从如何用 dive 逐层定位 Docker 镜像膨胀到 1.9GB 的根源讲起。文章会解释为什么联合文件系统让 RUN rm 连一个字节都减不掉、多阶段构建到底该把什么复制进最终阶段、alpine 的 musl libc 通过 Python wheel 重新编译和 DNS 问题收取的隐性成本,以及 distroless 与 slim 的取舍 — 全部配上真实的 Dockerfile 与真实输出。最后讲清楚比体积更能决定部署速度的层复用
2026-07-26 · 16 分钟阅读 #docker#dockerfile#multi-stage-build#container#devops死锁的诊断与预防 — 如何从日志中锁定那两条查询 ♪ 可收听
本文按顺序梳理遇到 deadlock detected 错误时应该看什么。如何逐行解读 PostgreSQL 的死锁报告和 MySQL 的 SHOW ENGINE INNODB STATUS 输出,从而锁定究竟是哪两条查询纠缠在了一起;并讨论实务中反复出现的三种模式:更新顺序不一致、因缺少索引导致锁范围扩大、以及外键引发的父行加锁。文章还包含 deadlocktimeout 与 locktimeout 的设置,以及不把普通锁等待误诊为死
2026-07-26 · 21 分钟阅读 #database#postgresql#deadlock#locking#mysqlEXPLAIN ANALYZE 阅读法 — 从执行计划中找出真正瓶颈的顺序 ♪ 可收听
本文梳理如何从头到尾读懂 EXPLAIN ANALYZE 的输出。应该按什么顺序读节点,cost 为什么不是时间单位,预估行数与实际行数之间的偏差说明了什么,loops 会被相乘的陷阱又该如何避开,全部结合真实输出来讲解。同时涵盖 Nested Loop、Hash Join、Merge Join 各自被选中的条件,以及如何用 BUFFERS 判断缓存命中。文章还会给出依据,说明 Seq Scan 并不总是坏事。
2026-07-26 · 17 分钟阅读 #database#postgresql#explain#query-optimization#performance人物是怎么变的 — 角色弧光设计的语法 ♪ 可收听
情节是事件的顺序,弧光是人的变化。在好的故事里,这两者共用同一批事件,并且互相推着往前走。丢掉虚假信念的正向型、向虚假信念屈服的负向型、人物不变而世界改变的平坦型,这三种弧光,以及推动它们的引擎 — 想要的与需要的之间的错位;人物不是靠说明、而是靠压力下的选择显形的原则;背景故事为什么要藏起来;陪衬角色与反英雄又是如何运作的。文末附上可以自己动手做的观察练习。
2026-07-26 · 18 分钟阅读 #storytelling#character#fiction#narrative#craft