首页
/ UCB CS61B:用 Java 系统掌握数据结构与算法,并完成千人时工程级实战(cs-self-learning 自学指南)

UCB CS61B:用 Java 系统掌握数据结构与算法,并完成千人时工程级实战(cs-self-learning 自学指南)

2026-09-07 21:56:01作者:胡唯隽

导读

本文围绕本仓库(计算机自学指南 cs-self-learning)收录的 UCB CS61B 课程文档,完整梳理这门伯克利 CS61 系列第二课的技术定位、前置要求、Gradescope 免费测评流程、14 个 Lab / 10 个 Homework / 3 个 Project 组成的实战体系,以及历年课程资源版本与跟进学习路径。读完本文,你将能规划出「CS61A → CS61B → 体系结构/操作系统/数据库/进阶算法」的完整自学路线,并知道如何利用开源 autograder 量化检验自己的数据结构实现。

课程概览:一门以"写代码"为核心的算法数据结构课

本节信息均出自课程入口文档 docs/数据结构与算法/CS61B.en.md(中文版见 docs/数据结构与算法/CS61B.md):

属性 内容
开课院校 UC Berkeley
先修要求 CS61A
编程语言 Java
课程难度 ★★★(三星,适合完成 CS61A 后进阶)
预计学时 60 小时

CS61B 是伯克利 CS61 系列的第二门课,核心目标有两层:一是系统掌握数据结构与算法的设计,二是通过 Java 让学生首次接触上千行规模的工程代码,在实战中初步领会软件工程思想。与 CS61A 侧重"用程序解决现实问题"不同,CS61B 更强调程序本身的规模与正确性——这正是很多自学者从"会写小脚本"迈向"能构建大系统"的关键一跃。

在仓库的 docs/编程入门/Python/CS61A.en.md 中,课程介绍对 CS61 系列的定位有清晰描述:

  • CS61A:强调抽象,训练学生在不关注底层硬件细节的前提下用程序解决现实问题;
  • CS61B:聚焦算法与数据结构,以及大规模程序的构建,学生将把算法与数据结构知识结合 Java 语言,构建千行代码级别的大型项目(该系列课程描述提到的典型项目形态包括类 Google Maps 的"简易地图"式应用与二维 Minecraft 式的世界构建);
  • CS61C:聚焦计算机体系结构,理解 C 等高层次语言如何逐级翻译成机器可理解的比特串并在 CPU 上执行。

可见 CS61B 在整个 CS61 系列中承担"承上启下"作用:向上承接 CS61A 的编程抽象能力,向下为 CS61C 的体系结构、乃至操作系统、数据库等系统类课程打下"能读懂并维护大型 Java 工程"的基础。

为什么 CS61B 值得进入自学路线:仓库学习规划的依据

docs/CS学习规划.en.md 的 Data Structures and Algorithms 板块中,作者把 CS61B 与普林斯顿的 Coursera 课程 Algo 并列,作为算法方向的首选推荐,原文给出的理由包括:

算法是计算机科学的核心,是几乎所有专业课程的基础。如何把现实问题通过数学抽象转化为算法问题,并选用合适的数据结构在时间与内存限制内求解,是算法课的永恒主题。……强烈推荐伯克利的 UCB CS61B 与普林斯顿的 Algorithms I & II,这两门课都讲得深入浅出,并配有丰富且有趣的编程实验,将理论知识与实践结合起来。

该规划文档还给出了按语言偏好的替代选择,方便你根据自身技术栈选课:

  • 偏好 C/C++:可选择 Stanford 的 CS106B/CS106X(编程抽象课程);
  • 偏好 Python:可选择 MIT 的 6.006 算法导论
  • 已在 6.006/CS61B 层面打好基础、想进阶算法设计与复杂度分析(含 NP 问题):推荐伯克利 CS170 或 MIT 6.046

从仓库导航文件 mkdocs.yml 可以看出,CS61B 被编排在"数据结构与算法(Data Structures and Algorithms)"分类下,与 Algo、6.006、6.046、CS170 并列,是该分类的起点课程之一。

前置要求与 Java 新手友好设计

CS61B 的官方先修要求是 CS61A。需要特别说明的是:这门课全部编程作业均使用 Java 完成,但没有任何 Java 基础的同学也不必担心

根据课程入口文档的说明,课程内置了保姆级的 Java 教程,覆盖范围包括:

  1. 从零配置 IDE(IDEA):讲授如何安装并配置 IntelliJ IDEA 这一主流 Java 开发环境,包括项目创建、JDK 配置、运行与调试等基本功;
  2. Java 核心语法与特性:从类与对象、继承多态、接口泛型等基础语法讲起,事无巨细地覆盖到足以完成课程作业的深度。

换句话说,CS61B 事实上同时扮演了"数据结构算法课"与"Java 入门实战课"两个角色。如果你此前只学过 Python(CS61A 即基于 Python),这门课是把 Java 作为第二语言上手的极佳路径。

开源 autograder:用自动化评测量化你的实现正确性

这是 CS61B 在自学圈广受好评的重要原因之一。根据课程文档:

  • 2018 春季学期(课程文档作者亲历版本)的授课教师 Josh Hug 将课程的 autograder(自动评分器)开源
  • 课程网站会公开 Gradescope(在线作业评测平台)的邀请码,自学者可凭邀请码免费加入课程;
  • 加入后即可方便地提交代码、自动测评你的数据结构实现是否正确,无需真人批改,极大提升自学反馈效率。

SP2021 学期对公众开放:根据教授最新政策,2021 春季学期(SP2021)的 CS61B 对公众开放。在 Gradescope 上的加入步骤为:

  1. 打开 Gradescope,选择 "Add a course"(添加课程)按钮;
  2. 输入课程代码 MB7ZPY 即可被加入课程;
  3. 加入后可访问公开的作业与评测入口,随堂提交自己的实现并查看 autograder 反馈。

需要说明的是,课程每年的作业与测评安排略有差异,Gradescope 邀请码与开放范围请以对应学期课程网站的实时公告为准;课程入口文档的 Resources 一节保留了历年官方版本指引,可回到 docs/数据结构与算法/CS61B.en.md 查看。

实战体系全景:14 个 Lab、10 个 Homework、3 个 Project

课程文档明确评价"这门课的作业质量也是绝绝子(unparalleled)",其练习体系按由浅入深分三层(以 2018 春季学期为例,每年要求略有不同):

类型 数量 定位与作用
Lab 14 亲手实现课上讲解的绝大部分数据结构,把"听懂"变成"会写"
Homework 10 运用已学的数据结构与算法解决实际问题,训练"选对工具解题"的能力
Project 3 接触上千行规模工程代码,在大型项目实战中磨练 Java 能力与软件工程素养

三层练习的设计逻辑值得自学者借鉴:

  1. Lab:数据结构的"临摹与内化"。链表、数组表、堆、树、哈希表等课上核心数据结构,都会被拆成一个个可验证的小实验让你亲自动手实现。此阶段建议配合 autograder 逐题提交,确保每个基础结构都通过正确性测试后再进入下一题。
  2. Homework:真实问题驱动的综合运用。题目通常不会直接告诉你"用哪个结构",而是给出一个实际问题场景,需要你自己完成数据结构选型、复杂度权衡与实现——这正是算法课"在时间与内存限制下求解"这一永恒主题的落地训练。
  3. Project:千行级工程的完整洗礼。三个 Project 是这门课含金量的集中体现,也是仓库课程规划里强调的"让自学者经历数十个千行代码量 Project 的洗礼"这一目标的起点。作为参照,仓库 docs/编程入门/Python/CS61A.en.md 对 CS61B 项目形态的概括是"构建大型、千行代码级别的项目(如简易 Google Maps、二维版 Minecraft 之类)"——你在项目中不仅要写对单个算法,还要面对模块划分、代码组织、测试与调试等工程问题,这正是"初步领会软件工程思想"的含义。

历年课程资源与使用方式

课程入口文档列出的公开资源如下(以下为本仓库文档对官方资源的如实转述,历年站点与官方链接请在仓库内课程文档的 Course Resources 一节查看原文):

  • 课程网站:历年均有独立学期站点,仓库文档记录了 spring2024、fall2023、spring2023、spring2021、spring2018 等多个学期版本(域名均以 datastructur.es 为准),建议优先选择与自己学习目标匹配的学期版本跟随;
  • 课程视频(Recordings):以课程网站发布为准;
  • 课程教材:无指定教材(Data Structures 领域的知识主要通过课堂与作业内化);
  • 课程作业:每年略有不同,2018 春季学期为 14 个 Lab + 10 个 Homework + 3 个 Project,具体要求以对应学期课程网站为准。

自学者选版建议(依据文档事实整理):

  • 若希望用开源 autograder 免费自测,课程文档作者亲历并推荐的是 2018 春季版(Josh Hug 讲授、autograder 开源)以及 2021 春季版(SP2021)——后者已确认对公众开放且可通过 Gradescope 邀请码 MB7ZPY 加入;
  • 若希望跟随更新的教学与作业,可查看仓库文档中记录的 2023/2024 各学期站点是否仍开放公众访问,再决定是否采用。

学习者实践资源:仓库内的课程档案指引

课程入口文档的 "Personal resources" 一节汇总了两份由真实学习者维护、随课实践的完整资料档案(具体入口链接保留在仓库课程文档原文中):

  • PKUFlyingPig 的 CS61B 课程档案:包含学习该课程期间用到的全部资源与作业实现,整理者即本自学指南仓库的核心维护者;
  • InsideEmpire 的 CS61B-PathwayToSuccess 档案:另一位学习者维护的同类资源与作业实现汇总。

这两类"过来人"档案的价值在于:当你卡在某道 Lab/Homework 或 Project 时,可以参考他人经过 autograder 验证的实现来对照思路(注意先独立思考再对照,避免直接照抄而失去训练效果)。仓库同时提供课程通用模板 template.en.md 与文档写作规范,如果你学完后想向社区贡献该课程的新学期版本指引,可据此提交。

学完 CS61B 之后:仓库路线图中的下一步

CS61B 在仓库的完整自学路线图中是被多个后续方向共同依赖的"地基课程"。从仓库内各课程文档记录的先修要求可以清晰看到它的辐射面:

后续方向 课程(仓库收录) CS61B 在其先修链中的角色
计算机体系结构 UCB CS61C 先修要求 CS61A、CS61B
操作系统 UCB CS162 先修要求 CS61A、CS61B、CS61C
数据库系统 UCB CS186 先修要求 CS61A、CS61B、CS61C
进阶算法 UCB CS170 先修要求 CS61B、CS70
高阶算法设计 MIT 6.046 接受 CS61B 等入门算法课作为前置
算法进阶对比 Coursera: Algorithms I & II 与 CS61B 并列的 Java 系算法课,可互为补充

据此,一个推荐的跟进节奏是:学完 CS61B(数据结构的"工程级掌握")后,若偏好硬件/系统方向可进入 CS61C → CS162/CS186;若偏好算法理论深度可进入 CS170/6.046;两条线并不冲突,可在 docs/CS学习规划.en.md 的数据结构与算法、体系结构等板块中找到完整编排。

实战学习建议小结

结合课程文档事实与仓库学习规划,给自学者三条可执行建议:

  1. 以"通过 autograder"为每道题的完成标准:CS61B 的最大优势在于免费开放的自动评测闭环,建议每完成一个 Lab/Homework 即提交到 Gradescope 查看测试反馈,用自动化结果替代"我感觉写对了"的模糊判断。
  2. 把三个 Project 当作工程训练而非作业:这是你第一次接触千行级 Java 工程的机会,建议认真经历需求分析、模块设计、分步实现与调试排错的全过程;不要因为"能跑"就止步,注意体会代码组织与可维护性。
  3. 按需选择版本并善用他人档案:优先选择有开源 autograder、确认对公众开放的 SP2018/SP2021 版本;遇到卡点时可参考仓库课程文档记录的 PKUFlyingPig、InsideEmpire 两份实践档案对照思路,但务必先独立完成核心实现。

CS61B 不是一门"看看视频就能过"的课,而是需要你真正坐下来写完十几道数据结构题、扛过三个千行项目才能内化的硬功夫课——而这恰恰是本仓库把它置于数据结构与算法分类起点并强力推荐的原因。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.13 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.8 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
529
593
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
915
1.83 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.58 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.35 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.01 K
515
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
547
388