计算机科学
计算机科学既关注抽象的数学模型——算法复杂度、形式语言、可计算性理论,也关注工程实践中的具体问题——如何让程序跑得更快、如何设计可靠的分布式系统。
提示
核心在于抽象 从晶体管到逻辑门,从逻辑门到 CPU 指令集,从指令集到高级编程语言,从语言到框架——每一层都在隐藏下层的复杂性,向上层提供更简洁的接口。理解这些抽象层次之间的关系,是掌握计算机科学的关键。
知识地图
算法
算法是解决问题的精确步骤描述。一个好的算法不仅要正确,还要在时间和空间上高效。常见的算法范式包括分治、动态规划、贪心、回溯和滑动窗口等,它们并非孤立——同一问题往往可套用不同范式,区别在时间复杂度的取舍。
数据结构
数据结构是组织和存储数据的方式,直接影响算法的效率。数组、链表、栈、队列是线性结构;二叉树 等树形结构处理层级关系;哈希表 把查找降到平均 O(1);图则表达多对多关系。选择合适的数据结构往往比优化算法本身更有效,复杂度对比见 数据结构。
操作系统
操作系统管理硬件资源并为应用程序提供运行环境。进程与线程 与调度、内存管理(虚拟内存、分页、分段)、文件系统、I/O 模型(阻塞、非阻塞、多路复用)是核心概念。原理层知识见 操作系统,具体系统表现见 Linux 系列笔记。理解操作系统原理对编写高性能服务端程序至关重要。
计算机组成原理
计算机组成原理是最贴近硬件的知识层:冯诺依曼结构定义计算机的基本框架,存储层次(寄存器→缓存→内存→磁盘)解释了软件性能差异的物理来源,CPU 流水线、RISC/CISC 指令集决定了编译器的后端目标。这一层的认知是理解操作系统和编译器如何工作的前提。
编译原理
编译器将高级语言翻译为机器码,过程包括词法分析、语法分析、语义分析、中间代码生成、优化和目标代码生成。即使不写编译器,理解编译过程也能帮助开发者写出更高效的代码,更好地理解语言特性的实现原理。完整流水线见 编译原理。
计算机网络
网络协议栈(TCP/IP 模型)定义了数据如何在计算机之间传输。从物理层的比特流到应用层的 HTTP 请求,每一层都有自己的协议和职责。DNS 解析、TCP 三次握手、HTTPS/TLS 握手、HTTP/2 多路复用等详细原理见 网络。
数据库原理
数据库系统解决数据的持久化存储和高效查询问题。关系模型、SQL 查询优化、索引结构(B+ 树、哈希索引)、事务 ACID 特性、并发控制(锁机制、MVCC)、日志与恢复机制是核心内容,体系见 数据库 领域。这些原理适用于 MySQL、PostgreSQL 等主流数据库。
知识间的关联
计算机科学的各领域相互咬合:算法 建立在 数据结构 之上;操作系统 依赖 计算机组成原理 的硬件背景,又与计算机网络协同完成数据传输;数据库实现则扎根于操作系统的文件系统和并发控制。理解这些依赖关系,才能把零散知识点串成完整体系。