编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • 性能优化实践

  • 程序编程原理

    • README
    • 序卷方法论

      • 专栏的导读和绪论
        • 要看懂这篇导读
        • 1.根本矛盾和焦虑
          • 1.1 一个真实的场景
          • 1.2 这个焦虑的根源
          • 1.3 为何要看该专栏
        • 2.为什么非学不可
          • 2.1 工业革命下的程序员
          • 2.2 本专栏的定位
        • 3.每篇都做到3件事
          • 3.1 至少对比3种语言
          • 3.2 开头必有"根本矛盾"
          • 3.3 每篇必有"时间轴"
          • 3.4 贯穿的思维方法
        • 4.阅读方法|三条路径
          • 4.1 路径 A|建立整体观(新手)
          • 4.2 路径 B|深入核心矛盾(进阶)
          • 4.3 路径 C|面试冲刺
          • 4.4 三种推荐读法
        • 5.整体设计哲学
          • 5.1 设计5卷的结构
          • 5.2 三大独家承诺
        • 6.常见疑问的说明
          • Q1:需要看"跨语言"吗?
          • Q2:这些东西 AI 不是都能回答吗?
          • Q3:学完专栏我能得到什么?
          • Q4:需要先具备什么基础?
        • 7.一句话总结
      • 全专栏地图与索引
    • 数据的本质

    • 运行时模型

    • 并发的设计

    • 内存的真相

    • 交互和系统

  • 稳定性与可靠性

  • 工程化与运维

  • 方案设计思想

  • 专栏
  • 程序编程原理
  • 序卷方法论
杨充
2026-05-09
目录

专栏的导读和绪论

# 专栏的导读和绪论

语言在更新,框架在迭代,AI 都能写代码了——学"老底层"还有意义吗? 为何要懂底层设计思想?这篇文章回答这个问题,也交代整个专栏的方法论、承诺与阅读路径。


# 要看懂这篇导读

flowchart LR
    A[现象<br/>语法天天变<br/>API 天天换] --> B{困惑<br/>还要学底层吗?}
    B -->|表层| C[看见 API]
    B -->|深层| D[看见设计]
    C --> E[被淘汰]
    D --> F[穿越周期]

    style D fill:#d4edda
    style F fill:#d4edda
    style C fill:#ffdddd
    style E fill:#ffdddd
1
2
3
4
5
6
7
8
9
10
11

# 1.根本矛盾和焦虑

# 1.1 一个真实的场景

我见过太多这样的工程师:

  • 会用 synchronized,但说不清为什么"锁会升级";
  • 会写 async/await,但不知道"挂起点"到底挂起了什么;
  • 会调 ThreadPoolExecutor 参数,但从没想过线程池为什么要设计一个 ctl 变量;
  • 会用 ConcurrentHashMap,但看到 Go 的 sync.Map、C++ 的 concurrent_hash_map,依然觉得"这是完全不同的东西"。

他们焦虑的并不是"我不会某个 API",而是:"我学的东西,5 年后还值钱吗?"

# 1.2 这个焦虑的根源

技术栈的寿命正在急剧缩短:

时代 代表技术 寿命
1990s C / Unix / MFC 30 年+
2000s Java / .NET / PHP 20 年+
2010s Android / iOS / Node.js 10-15 年
2020s Flutter / RN / Electron 5-10 年?
AI 时代 LangChain / Agent / MCP ?

表层 API 的半衰期正在趋近于 3 年。但是底层设计思想的半衰期是 30 年以上。

进程 / 线程 / 锁 / CAS / 事件循环 / GC / 所有权——这些概念 1970s 诞生,2020s 依然是面试题、依然是高薪岗位的分水岭、依然决定你能不能看懂 Go 新版本的 runtime、能不能调出 Rust 编译器的报错。

# 1.3 为何要看该专栏

很多读者打开底层书的第一个问题不是"看不懂",而是"为什么要看?":写业务代码十年,没碰过 JVM、没写过线程池底层,不也照样发版?

AI 时代代码自动生成,还有必要懂指针、懂 GC、懂事件循环吗?框架天天换,今年是 React 明年是 Solid,学"原理"不是徒劳吗?

序卷给你三个不绕弯的回答:

  1. 能写"会跑的代码"和能写"不出事的代码"是两件事——后者只能靠原理。
  2. 语法在变,但矛盾不变——线程通信 1965 年的矛盾今天还在,知道矛盾就能看穿任何新框架。
  3. "看见设计"是工程师不可被替代的能力——AI 能写代码,但回答不了"为什么要这样设计"。

# 2.为什么非学不可

# 2.1 工业革命下的程序员

timeline
    title 程序员的三次"失业焦虑"
    1990s : IDE 崛起<br/>"不用记指令了"<br/>→ 懂底层的赢了
    2010s : 框架盛行<br/>"不用写底层了"<br/>→ 懂框架设计的赢了
    2020s : AI 写代码<br/>"不用写代码了"<br/>→ 懂设计思想的赢了
1
2
3
4
5

每一次"生产力革命"都在淘汰"只会一层"的工程师。

  • IDE 淘汰的是"背指令的人",留下的是"懂编译原理的人";
  • 框架淘汰的是"抄 API 的人",留下的是"懂框架为什么这么设计的人";
  • AI 淘汰的是"写胶水代码的人",留下的是"能定义问题、能判断设计对错的人"。

# 2.2 本专栏的定位

市面上主流的底层文章有三种:

类型 代表 问题
单语言深挖 "Java 并发编程实战"、"C++ 内存管理" 换语言就失效
面试八股文 "JVM 十问"、"多线程面试题" 只背结论,不懂为什么
翻译 RFC "深入 Linux 内核"类译作 太硬核,没有跨语言视角

本专栏的位置是第四种:跨语言对比 × 只问矛盾 × 看演进史

看见 Java ConcurrentHashMap 和 Go sync.Map 背后是同一个"分段锁"; 看见 Kotlin 协程和 C++20 协程都是同一个"CPS 状态机变换"; 看见 Rust 的 Ownership 和 C++ 的 RAII 都在解决同一个矛盾——资源的释放时机。

这就是"看见设计,而不是语法"的含义。


# 3.每篇都做到3件事

# 3.1 至少对比3种语言

不是"Java 并发"、"C++ 并发"、"Go 并发"各写一篇,而是一篇文章里把三种语言放一起对比:

维度 Java C++ Go
... ... ... ...

这才是跨语言视角——让读者一眼看出"共性"与"差异"。

# 3.2 开头必有"根本矛盾"

所有技术设计的源头都是一对矛盾。

  • 锁 = 并发访问 vs 数据一致;
  • 协程 = 写得像同步 vs 跑得像异步;
  • GC = 自动释放 vs 可预测性能;
  • 泛型 = 类型安全 vs 代码复用;
  • 引用计数 = 确定性释放 vs 循环引用。

看懂矛盾,你就拿到了"一把万能钥匙"——任何新语言的新特性,都是在这对矛盾上做新的折中。

# 3.3 每篇必有"时间轴"

flowchart LR
    A[1970s<br/>原始方案] --> B[1990s<br/>第一次改进]
    B --> C[2000s<br/>第二次改进]
    C --> D[2010s<br/>第三次改进]
    D --> E[2020s<br/>当前形态]
1
2
3
4
5

为什么现在是这样——只有看演进,才能真正回答。

# 3.4 贯穿的思维方法

flowchart LR
    A[现象<br/>遇到 Bug 或性能问题] --> B[矛盾<br/>这个技术在解决什么矛盾]
    B --> C[设计<br/>核心思想是什么]
    C --> D[实现<br/>各语言为何选择不同]
    D --> E[演进<br/>未来还会怎么变]
    E -.复盘.-> A
1
2
3
4
5
6

理解矛盾 → 理解设计 → 理解实现 → 理解演进——这条闭环在后续每一卷都会反复出现。


# 4.阅读方法|三条路径

专栏有 50+ 篇,没必要从头啃到尾。三条路径任选一条:

# 4.1 路径 A|建立整体观(新手)

目标:先有"整本书的骨架",再补细节。

0A 导读 → 00 数据编码 → 01 字符串 → 07 类加载
      → 11 线程由来 → 15 并发设计 → 22 单线程模型
      → 25 线程池 → 31 内存模型 → 41 消息机制
1
2
3

读完这 10 篇,你会拥有一张计算机系统的心智地图。学完能做到:理解程序"从启动到运行"的全景,但不深入硬核细节。

# 4.2 路径 B|深入核心矛盾(进阶)

目标:已经会用,想知道"为什么"。

04 泛型 → 09 方法分派 → 18 锁设计 → 19 上下文切换
      → 20 CAS → 21 异步同步 → 23 协程 → 24 Actor/CSP
      → 33 GC → 34 引用类型 → 36 所有权/RAII → 50 分层全景
1
2
3

读完这 12 篇,你看任何新语言的 runtime 源码都不会害怕。学完能做到:能从硬件指令推导到语言并发原语,能看懂大多数主流框架的源码。

# 4.3 路径 C|面试冲刺

目标:3 周突击一线大厂。

03 值与引用 | 04 泛型 | 15 并发三大核心 | 16 并发三大Bug
17 并发安全 | 18 锁升级 | 20 CAS/ABA | 27 线程池原理
33 GC 演进 | 34 四种引用
1
2
3

这 10 篇覆盖了 80% 的高频考点,并且理解深度足以应对任何追问。面试官问到任何并发或 JVM 内存问题,都能从根因出发回答。

# 4.4 三种推荐读法

🟢 通读型:序卷 → 第1卷 → 第2卷 → 第3卷 → 第4卷 → 第5卷。建议每天 1 篇,持续 50 天

🟡 围猎型:先读序卷,再带着具体问题去找对应章节。例如最近被 OOM 困扰 → 直接跳第4卷

🔴 突击型:序卷 + 第3卷 + 第4卷。面试前 7 天集中突破并发与内存
1
2
3
4
5

# 5.整体设计哲学

# 5.1 设计5卷的结构

flowchart LR
    L1[第1卷<br/>数据的本质] --> L2[第2卷<br/>运行时模型]
    L2 --> L3[第3卷<br/>并发之道]
    L3 --> L4[第4卷<br/>内存的真相]
    L4 --> L5[第5卷<br/>交互与系统]
    
    style L3 fill:#ffe6cc
    style L4 fill:#cfe2ff
1
2
3
4
5
6
7
8

这 5 卷不是随便拼凑的"知识点合集"——它们之间有严格的逻辑递进:

卷 回答的问题 在专栏中的位置
第 1 卷·数据的本质 程序的"原料"——0/1 怎么变成有意义的信息 一切的基础
第 2 卷·运行时模型 程序"跑起来"——类、对象、栈帧、字节码、JIT 怎么协作 单线程世界的全景
第 3 卷·并发之道 多线程后的所有矛盾——可见性、原子性、有序性、协程、Actor、CSP 全书最重,连接前后
第 4 卷·内存的真相 程序的"物理基础"——虚拟内存、GC、引用、缓存、泄漏诊断 性能问题的源头
第 5 卷·交互与系统 程序的"上层世界"——窗口、渲染、事件、消息、IPC、加密 应用层的设计基石

# 5.2 三大独家承诺

① 跨语言对比:每篇至少对比 3+ 种语言/平台
② 只问矛盾:不背 API,只讲"这个设计解决了什么矛盾"
③ 看演进史:让你看见"为什么是这样"
1
2
3

# 6.常见疑问的说明

# Q1:需要看"跨语言"吗?

要。原因:

  • 跨语言视角让你看清"哪些是本质、哪些是语法糖";
  • 面试官最爱问"你们 Java 的锁,跟 Go 的锁有什么区别"——这种问题只有跨语言视角能答;
  • 一旦跳槽技术栈,别人需要半年重新学,你只需要一周。

# Q2:这些东西 AI 不是都能回答吗?

AI 能回答表层问题——"ConcurrentHashMap 是什么"、"怎么用"。

但 AI 答不好的是:

  • "为什么 Java 1.7 的 ConcurrentHashMap 是分段锁,1.8 改成 CAS + synchronized?哪种更好?为什么?"
  • "协程在 Kotlin 里为什么是 suspend 函数,在 Go 里却是 go 关键字?这两种选择的取舍是什么?"

AI 给你答案,但人判断答案好坏。判断力从哪来?从对"设计思想"的理解来。

# Q3:学完专栏我能得到什么?

  • 看源码的速度:3-5 倍提升。看任何开源框架,能直接找到"核心矛盾"和"关键折中"。
  • 设计能力:从"写代码实现需求"升级到"定义问题 + 设计结构"。
  • 迁移能力:换技术栈从 6 个月缩短到 1-2 周。
  • 面试表现:高频考点有深度认知,能扛住 3 轮追问。

# Q4:需要先具备什么基础?

  • 熟悉至少一门主流语言(Java / C++ / JS / Python / Go 任一);
  • 懂基础数据结构(数组、链表、哈希表、树);
  • 不要求懂操作系统,但懂一点会读得更快。

# 7.一句话总结

语法会过时,框架会淘汰,但"设计思想"穿越周期。

这个专栏不教你"怎么用某个 API",而是教你"看见 API 背后的设计"—— 这样,无论 5 年后语言怎么变、AI 怎么进化,你依然是那个能做判断、能定方向的人。

上次更新: 2026/06/07, 10:26:12
README
全专栏地图与索引

← README 全专栏地图与索引→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式