计算机基础
操作系统、计算机网络、数据结构与算法。
但「基础」二字,从来不代表「简单」。
很多人觉得计算机基础是「学校里学的东西」,工作了用不上。但真正遇到问题的时候——数据库查询为什么这么慢?(索引和 B+ 树)、接口响应时间暴增?(网络和 I/O 模型)、多线程代码死锁了?(操作系统同步原语)——你会发现,所谓的「用不上」,只是因为还没遇到那个「用得上」的时刻。
计算机基础不是面试前临时抱佛脚的知识,而是贯穿整个技术生涯的底层能力。
模块速览
| 方向 | 核心目标 |
|---|---|
| 数据结构与算法 | 常见数据结构原理、高频算法思想、复杂度分析方法 |
| 计算机网络 | TCP/UDP 协议、HTTP/HTTPS、DNS、I/O 多路复用 |
| 操作系统 | 进程与线程、内存管理、文件系统、Linux 性能分析 |
| 设计模式 | 创建型/结构型/行为型模式、源码中的应用、最佳实践 |
| 网络安全 | 密码学基础、Web 安全、网络安全协议、安全运维与渗透测试 |
学习路径建议
第一阶段:数据结构与算法
→ 先理解「为什么需要这个数据结构」,再学习「怎么用」
→ 复杂度分析是基础:能说出最好/最坏/平均/均摊时间复杂度
→ 从简单题开始:数组、链表、二叉树遍历
→ 进阶:回溯、动态规划、单调栈——理解模板而非死记硬背
第二阶段:计算机网络
→ 从 OSI 七层模型建立全局观
→ 重点攻破传输层:TCP 三次握手/四次挥手、滑动窗口、拥塞控制
→ 应用层协议:HTTP/HTTPS 是日常工作的基础,必须深入
→ 综合题:「从输入 URL 到页面展示」能完整答出来
第三阶段:操作系统
→ 进程 vs 线程:搞清楚「资源分配」和「调度执行」的区别
→ 内存管理:虚拟内存、分页、页面置换——和 JVM 内存模型对照理解
→ I/O 模型:select/poll/epoll 的演进过程是高频考点
→ Linux 实践:top、vmstat、iostat、strace 能用起来
第四阶段:设计模式
→ 先理解 SOLID 原则,再学习具体模式
→ 从 Spring/JDK 源码中找设计模式的实际应用
→ 理解「意图」而非「结构」:代理和装饰器结构相似,意图不同
→ 警惕过度设计:能用简单代码解决的,不要套模式面试的核心逻辑
计算机基础的面试,不是让你背概念,而是看你对「底层原理」的理解深度:
- 能否讲清楚「为什么」:数组查询快但插入慢,链表相反——为什么?HashMap 怎么在这两者之间找到平衡?
- 能否联系实际:TCP 的滑动窗口和数据库连接池有什么关系?epoll 的原理能解释 Redis 的单线程吗?
- 能否举一反三:学了一种数据结构,能不能联想到其他类似场景?解决了一个问题,能不能抽象出通用方法?
"计算机基础扎实的工程师,遇到新问题时能快速定位到知识的源头;基础薄弱的工程师,只能靠试错和搜索。这就是差距所在。"
