跳到主要内容

计算机科学基础

"掌握基础,其余自然水到渠成。"

本章节涵盖每位后端工程师都应掌握的计算机科学基础知识。这些概念构成了所有软件系统的基石,展现了超越简单 API 调用的深层理解。

为什么 CS 基础如此重要

在技术面试和实际工程中,理解事物为什么这样工作,与知道如何使用它们同样重要。

实际影响

  • 算法选择不当:O(n²) 与 O(n log n) 可能意味着秒级与小时级的处理时间差异
  • 缺少数据库索引:查询耗时 10 秒而非 10 毫秒
  • 不理解 TCP:无法调试连接问题或优化性能
  • 系统设计薄弱:系统在可承受的负载下崩溃

内容概览

算法与数据结构

系统化的问题解决模式和高效的数据组织方式。

你将学到

  • 算法模式(双指针、滑动窗口、动态规划)
  • 核心数据结构(数组、链表、树、图、哈希表)
  • 时间与空间复杂度分析(大 O 表示法)

为什么重要

  • 编写可扩展的高效代码
  • 自信地解决编程面试题
  • 为工作选择合适的数据结构

系统设计

构建可扩展、可靠且可维护的系统。

你将学到

  • 高并发与高可用模式
  • 分布式系统基础(CAP 定理、BASE 理论)
  • 负载均衡、缓存和消息队列
  • 实际系统架构(如短链接服务、通知系统)

为什么重要

  • 设计能服务百万用户的系统
  • 在一致性、可用性和分区容错之间做出权衡
  • 高级工程师需要具备复杂系统设计能力

数据库

深入理解 MySQL 和 Redis 内部原理。

你将学到

  • MySQL:架构、索引(B+ 树)、事务(ACID)、锁、复制
  • Redis:数据结构、缓存模式、持久化、集群

为什么重要

  • 数据库通常是 Web 应用的性能瓶颈
  • 理解索引可以避免 1000 倍的性能差异
  • 事务和隔离级别防止数据损坏
  • 合理的缓存可以减少 90% 的数据库负载

网络与操作系统

驱动一切的基础设施。

你将学到

  • TCP/IP 握手、HTTP/HTTPS 协议
  • Linux 基础、进程管理、Shell 脚本
  • 内存管理、文件系统、并发

为什么重要

  • 调试连接问题和网络故障
  • 理解应用程序如何与操作系统交互
  • 通过系统调用和 I/O 优化性能

学习路径

面试准备

面试前 1-3 个月

  1. 算法(4-6 周)

    • 每天练习 2-3 道 LeetCode 题目
    • 关注模式,而非单个题目
    • 掌握:数组、字符串、链表、树、哈希表、图
  2. 系统设计(2-3 周)

    • 学习设计模式(负载均衡、缓存、分片)
    • 练习端到端设计 3-5 个系统
    • 理解权衡(一致性 vs 可用性)
  3. 数据库与网络(1-2 周)

    • 复习 MySQL 索引和事务
    • 理解 Redis 缓存策略
    • 复习 TCP/IP 和 HTTP 基础

职业成长

持续学习

  1. 从日常使用的开始

    • 后端工程师 → 数据库、系统设计
    • 基础设施工程师 → 网络与操作系统、系统设计
    • 全栈工程师 → 逐步学习所有主题
  2. 在实践中学习

    • 优化应用中的慢查询
    • 设计时考虑可扩展性
    • 使用 Wireshark/tcpdump 调试网络问题
  3. 教导他人

    • 向队友解释概念
    • 撰写博客文章或做技术分享
    • 教学是最好的学习方式

快速参考

主题核心概念面试重点时间投入
算法排序、搜索、图、动态规划LeetCode 中等/困难4-6 周
系统设计可扩展性、可靠性、CAP高级工程师面试2-4 周
数据库索引、事务、缓存后端岗位2-3 周
网络/OSTCP/IP、HTTP、Linux基础设施岗位1-2 周

各主题常见面试题

算法

  • 解释你解决方案的时间复杂度
  • 你会如何优化这个算法?
  • 不同数据结构之间的权衡

系统设计

  • 设计一个短链接服务(类似 bit.ly)
  • 设计一个限流器
  • 你会如何扩展 Twitter 的时间线?

数据库

  • 解释 B+ 树索引和哈希索引的区别
  • MySQL 中的 MVCC 是如何工作的?
  • RC 和 RR 隔离级别有什么区别?

网络与操作系统

  • 在浏览器输入 URL 后会发生什么?
  • 解释 TCP 三次握手
  • HTTPS 是如何工作的?

资源

练习平台

  • LeetCode:算法练习
  • Pramp:模拟面试
  • System Design Primer:GitHub 上的系统设计仓库

书籍

  • 《算法导论》(CLRS)
  • 《数据密集型应用系统设计》(Martin Kleppmann)
  • 《计算机网络:自顶向下方法》

文档

  • MySQL 官方文档
  • Redis 文档
  • Linux man 手册

下一步

  1. 选择起点,根据你当前的角色和面试时间线
  2. 制定计划——持续的每日练习胜过突击
  3. 跟踪进度——记录你已掌握的主题和需要加强的内容
  4. 应用知识——在实际项目中运用这些概念

深入了解任意主题: