cross - core - map
跨学科速查:一段程序背后的四大件
这份速查用一个通用问题把四科串起来:一段程序从输入到输出,底层发生了什么?
1. 总流程
输入进入系统
-> 数据按编码规则变成 bit
-> 数据放入内存、文件或网络缓冲区
-> CPU 按指令读取、计算、写回
-> 数据结构组织中间状态
-> 操作系统调度进程/线程并管理内存和 IO
-> 如果需要跨机器通信,网络协议负责寻址、传输、可靠性
-> 输出被写回文件、屏幕、网络或其他设备
2. 每一步对应哪门课
| 阶段 | 主要学科 | 关键知识 |
|---|---|---|
| 信息变成 bit | 组成原理 | 二进制、补码、浮点、字符编码 |
| bit 被解释成数据 | 组成原理 + 数据结构 | 类型、布局、数组、记录、对象 |
| 数据被组织起来 | 数据结构 | 数组、链表、栈、队列、哈希、树、图 |
| 指令被执行 | 组成原理 | 取指、译码、执行、寄存器、ALU |
| 程序获得资源 | 操作系统 | 进程、线程、虚拟内存、文件、系统调用 |
| 多任务同时推进 | 操作系统 | 调度、同步、互斥、死锁、上下文切换 |
| 数据跨机器移动 | 计算机网络 | IP、端口、TCP、UDP、DNS、HTTP、TLS |
| 稳定性和性能 | 四科共同 | 复杂度、局部性、缓存、重传、阻塞、排队 |
3. 常见问题反查
| 现象 | 先查 | 再查 |
|---|---|---|
| 结果溢出或精度异常 | 整数位宽、补码、浮点表示 | 类型转换、舍入、边界输入 |
| 查找或排序太慢 | 数据结构、算法复杂度 | 内存局部性、缓存命中 |
| 程序卡住 | 线程状态、锁、阻塞 IO | 调度、死锁、资源耗尽 |
| 内存不够 | 虚拟内存、堆/栈、对象数量 | 页缓存、缺页、swap |
| 文件读写慢 | 文件系统、页缓存、磁盘 IO | 缓冲策略、同步刷盘 |
| 网络连接失败 | DNS、IP、端口、TCP 握手 | 防火墙、路由、协议不匹配 |
| 网络传输慢 | RTT、带宽、丢包、重传 | 拥塞控制、应用层排队 |
| 并发结果偶发错误 | 原子性、可见性、竞态条件 | 锁粒度、内存模型 |
| 大量任务排队 | 队列、调度、吞吐/延迟 | 生产消费速度差、资源瓶颈 |
4. 四大件的底层依赖关系
组成原理提供硬件事实:
位、字节、指令、寄存器、CPU、Cache、内存、总线、设备
操作系统把硬件包装成抽象:
进程、线程、虚拟内存、文件、Socket、系统调用、权限
数据结构在抽象之上组织信息:
数组、链表、栈、队列、哈希、树、图、堆、位图
计算机网络让不同主机上的进程通信:
寻址、路由、传输、可靠性、拥塞控制、应用协议、安全
5. 学习时的 first-principles 问法
遇到任何知识点,按这 5 个问题拆:
- 它管理的资源是什么?CPU、内存、磁盘、网络、时间、状态?
- 它提供的抽象是什么?变量、数组、文件、进程、Socket、报文?
- 它的成本在哪里?计算、存储、复制、切换、等待、通信?
- 它的边界条件是什么?容量、并发、失败、恶意输入、极端规模?
- 它和其他层如何交互?上层依赖它什么,它又依赖下层什么?