跳转至

数据结构与算法

本课程的目标不是把学习者训练成刷题机器,而是建立后端工程师真正需要的算法意识:

  • 能判断一段代码的时间和空间成本。
  • 能根据业务场景选择合适的数据结构。
  • 能理解数据库、缓存、消息队列、调度系统背后的常见算法思想。
  • 能在 Go 中写出清晰、可靠、复杂度合理的代码。

学习目标

学完本课程后,学习者应该能够:

  1. 使用大 O 表示法分析常见代码的复杂度。
  2. 理解数组、链表、栈、队列、哈希表、树、堆、图的适用场景。
  3. 掌握排序、查找、遍历、递归、分治、动态规划等基本思想。
  4. 理解 LRU、布隆过滤器、一致性哈希、限流算法、时间轮等后端常用算法。
  5. 能用 Go 实现常见数据结构,并知道标准库中已有能力。

课程结构

建议按下面顺序学习:

  1. 复杂度分析
  2. 基础数据结构
  3. 树、堆与图
  4. 排序与查找
  5. 后端常用算法
  6. Go 实现与实战练习

为什么后端工程师要学算法

很多后端问题本质上是数据组织和访问效率问题:

  • 缓存淘汰为什么常用 LRU?
  • Redis ZSet 为什么适合排行榜?
  • 数据库索引为什么常见 B+ 树?
  • 布隆过滤器为什么能减少缓存穿透?
  • 限流为什么会有固定窗口、滑动窗口、令牌桶和漏桶?
  • 定时任务很多时,为什么需要时间轮?
  • 分布式缓存节点变化时,为什么会用一致性哈希?

这些都不是孤立技巧,而是数据结构与算法在工程里的落地。

学习方式

  • 先理解场景,再理解结构,不要一开始死背定义。
  • 每学一个结构,都要问它擅长什么、不擅长什么。
  • 每学一个算法,都要问它的复杂度、边界条件和工程代价。
  • Go 示例以清晰为主,不追求炫技。
  • 每个数据结构和算法都要结合 Go 后端应用场景理解,不停留在抽象定义。
  • 实战任务先独立完成,再展开参考答案对照思路和边界条件。
  • 面试题要能讲出思路、复杂度和为什么这样选。

学习提醒

算法能力不是只为面试服务。它会影响你写分页、缓存、队列、排行榜、限流、调度、搜索和数据同步时的判断力。