标签: #fundamentals
关于 GPU、LLM、MLOps、Kubernetes 以及心态的文章 · 15 篇
用 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-control像科学家一样调试:假设驱动的调试
与其盯着 bug 把代码改来改去,不如像科学家那样先立假设、做预测,再用实验去验证。把问题空间用二分搜索一点点缩小,搭出最小可复现示例,用 git bisect 揪出元凶提交,并且真正把错误信息读完。一份把「瞎猜」变成方法论的实战调试指南。
2026-07-03 · 22 分钟阅读 #debugging#engineering#productivity#fundamentals并发 vs 并行 — "应对"与"真正同时做"的区别
Rob Pike 著名的区分 — 并发是"应对"多件事,并行是"同时做"多件事。本文梳理线程与事件循环、竞态条件与数据竞争、互斥锁与死锁、哲学家就餐问题、原子操作,以及 async(I/O)何时占优、线程(CPU)何时占优。
2026-07-03 · 19 分钟阅读 #concurrency#systems#fundamentals输入 URL 并按下回车之后会发生什么:从浏览器到像素的全链路巡礼
在地址栏敲入 URL、按下回车的那一秒里,究竟发生了多少事情。从 URL 解析,到带着递归查询与多层缓存的 DNS 解析、TCP 三次握手、TLS 握手、HTTP 请求与响应,再到 HTML 解析和关键渲染路径。这是一趟从浏览器一路走到第一个像素的全栈巡礼。
2026-07-02 · 17 分钟阅读 #networking#web#fundamentals如何阅读别人写的代码
开发者花在读代码上的时间远多于写代码,但读代码这件事却从来没人教。找到入口点,不逐行阅读而是追踪数据,把测试和类型当作文档,用 grep 和 IDE 跳转画出调用图,实际跑起来打印调试,再改点东西看看什么会坏掉。这是一份快速掌控陌生代码库的实战策略。
2026-07-01 · 18 分钟阅读 #code-reading#engineering#onboarding#fundamentals代码中的命名:最难的简单事
"计算机科学中只有两件难事:缓存失效,以及命名"这句玩笑话里藏着几分真心。本文梳理好名字为什么应当揭示意图而非实现、名字长度与作用域的关系、为什么要避免匈牙利命名法、可搜索性、布尔值/函数/集合的命名惯例,以及把重命名当作一次独立重构来对待的方法。
2026-06-30 · 13 分钟阅读 #clean-code#engineering#fundamentals正则表达式从零到自信:字符类·量词·锚点·分组·环视·ReDoS 全面精通
如果正则表达式一直看起来像密码,就用这篇文章把它理清楚。从字符类、量词、锚点、分组、选择到环视,逐一搭建构成要素,再讲清楚贪婪匹配与懒惰匹配的区别、灾难性回溯与 ReDoS,以及不该使用正则表达式的时刻(解析 HTML)。
2026-06-29 · 16 分钟阅读 #regex#programming#fundamentals生日悖论与哈希碰撞 — 为什么 23 人中就有一半概率撞车
只要 23 个人凑在一起,两人生日相同的概率就超过一半。这个反直觉结果的根源是 √N 这一近似,而同一套数学贯穿了 UUID 与哈希碰撞概率、为什么 128 位就够用、哈希表的负载因子与扩容,乃至 git 从 SHA-1 转向 SHA-256 的原因。
2026-06-27 · 17 分钟阅读 #math#hashing#fundamentals栈 vs 堆:内存的真相
栈和堆不只是"内存的两个区域"。用帧和 LIFO 运转的快速、固定的栈,由 malloc 和 GC 支配的动态的堆,连接两者的指针与引用,栈溢出与 OOM,值语义与引用语义,递归深度,以及所有权、GC、手动管理——本文从底层出发,剖析程序究竟如何使用内存。
2026-06-24 · 25 分钟阅读 #systems#memory#fundamentals实战 Big-O:没有数学焦虑的复杂度
O() 到底意味着什么、常见复杂度类别配合现实例子、n 较小或缓存起作用时常数为何会赢、隐藏在嵌套循环与 N+1 查询里的 O(n²)、空间复杂度、动态数组的分摊成本,以及该在什么时候停止优化。用工程师的直觉而非数学上的严谨来处理复杂度。
2026-06-22 · 16 分钟阅读 #algorithms#performance#fundamentals浮点数:为什么 0.1 + 0.2 不等于 0.3
在几乎所有语言里,0.1 + 0.2 算出来的都不是 0.3。这不是 bug,而是 IEEE 754 设计之下的必然结果。本文从最底层开始,把浮点数的真相彻底讲清楚 — 二进制浮点数如何存放数字、为什么十进制小数在二进制下无法精确表示、误差范围(epsilon)比较与金额计算该怎么做、NaN·无穷大·负零究竟是什么,以及误差是如何累积的。
2026-06-20 · 19 分钟阅读 #floating-point#ieee754#fundamentals#numericsUnicode 与 UTF-8:文本编码的雷区
字节、码点、字形簇是三个不同的层。一个表情符号的 length 为什么会撒谎,UTF-8、UTF-16、UTF-32 之间到底有什么不同,NFC/NFD 规范化与 é 问题,用 ZWJ 拼接的表情符号,代理对(surrogate pair),以及字符串反转为什么会崩坏——本文从韩语、日语使用者的视角,深入拆解文本编码这片雷区。
2026-06-16 · 17 分钟阅读 #unicode#text#fundamentals时间戳与时区,正确处理
以 UTC 存储,以本地时间显示。epoch 与 ISO 8601 的区别、偏移量与时区(IANA tz 数据库)之间的决定性差异、夏令时制造出的"不存在的时刻"与"重复的时刻"、闰秒、绝不能信任的客户端时钟,以及日期与瞬间的区分。本文从实务角度梳理了处理时间的开发者必须掌握的原则。
2026-06-14 · 20 分钟阅读 #datetime#timezone#fundamentalsGit 到底是怎么存储数据的
我们大多数人每天都在用 Git,却不知道它内部长什么样。本文从底层出发,梳理由 blob、tree、commit、tag 组成的对象模型,用 SHA 哈希对内容做寻址的方式,提交组成的 DAG,分支其实只是指针这一事实,.git 目录的真实样貌,相同内容只存一次的原理,以及打包文件(packfile)。这是 Git 背后真正的数据模型。
2026-06-13 · 23 分钟阅读 #git#version-control#fundamentals程序员对时间深信不疑的谎言
一天有 24 小时、一分钟有 60 秒、时钟只会向前走、时区是固定的偏移量——程序员对时间理所当然深信不疑的这些命题,全部都是谎言。本文逐条梳理著名的「关于时间的谎言」清单,为每一条都附上一个真实发生过的 bug。
2026-06-12 · 15 分钟阅读 #datetime#timezone#fundamentals