CS61A 学习记录:从函数走向对象与状态
发表于|更新于|课程
之前在随笔里提过 Recursion、OOP。这些内容在 CS61A 里都能碰到,仓库按照学习日保存了 Discussion、Lab、Homework,也有 Cats 项目的文件。
对象和状态
Day11/lab06/lab06.py 里有银行账户练习。存款和取款要修改余额,也要记录交易前后的状态,后面才能从历史记录中看出发生了什么。
Day12/hw06/hw06.py 里的自动售货机则要处理库存、余额和商品价格。缺货、钱不够、购买和找零分别对应不同的情况,写的时候需要把这些状态变化理清楚。
作业的 docstring 里有调用和预期输出。看代码之前可以先按例子推一下:补货之后库存是多少,投币之后余额是多少,购买之后又会发生什么。
仓库中同时有题目模板、测试和个人代码,具体进度可以直接查看对应目录。
相关链接
相关推荐

2026-10-11
MiniVim:原来光标后面有这么多事情
MiniVim 是基于交大 CS1958-01 课程框架的 C++17 编辑器项目。我的仓库是课程上游的 fork,下面记录一下项目中的模块和编辑流程。 模块 项目分为 Buffer、Window、Command、Renderer、Editor 和 Terminal,分别处理文本、可见区域、命令、渲染、编辑器状态和终端交互。 屏幕上的行号不一定等于文件中的行号;缓冲区修改之后,也需要由渲染部分把变化显示出来。看源码时可以从按键进入 Editor 开始,继续跟到作用于 Buffer 的操作。 模式和边界 Normal、Insert 和命令行模式下,相同按键可能有不同含义。除此之外,行首退格、光标移动到屏幕外等情况也需要明确处理。 课程提供基础要求、进阶说明和终端测试工具。这篇主要记录结构,没有重新运行完整课程测试。 相关链接 项目仓库 · 课程框架 · 源码

2026-10-11
人工智能基础与实践:从 Python 练习到可演示的作品
这里整理一下交大人工智能入门课程的内容。仓库保存了按周组织的实践、期末复习、自测页面和期末项目,从 Python 基础一直涉及神经网络、CNN、目标检测、大语言模型、生成式 AI、Agent 和 AI 伦理。 练习与复习 实践部分有回归、MNIST 和 CNN 相关 Notebook。看实验的时候,除了模型结构,还可以顺着输入、标签、损失函数、训练循环和结果分析,把整个过程走一遍。 Final_term_review/ 按章节整理了概念,Final_exercises/ 里有复习笔记和 HTML 自测页面。复习完一个章节之后可以用问题检查一下自己是否真的记住了。 期末项目 期末项目《别点那个链接!》是一个校园反诈互动网页,包括三关剧情、风险线索复盘、AI 问答和报告导出。项目有静态演示模式,也可以通过本地 Flask 后端连接模型接口。 项目的具体介绍放在另一篇文章,课程代码和复习资料见下面的仓库。 相关链接 课程仓库 · 期末复习笔记 · 期末项目

2026-10-11
STLite 数据结构作业:把容器接口落到内存与迭代器
STLite 是 ACM 班 CS1951 数据结构课的作业框架,要求实现 vector、deque、priority_queue 和 map,包括迭代器和复杂度要求。我的仓库是课程仓库的 fork,接口和测试来自上游。 deque 的存储 deque/notes.md 里记录了分块数组的设计:通过逻辑下标找到块号和块内偏移,再用这套坐标处理访问、迭代和元素移动。 实现容器的时候,接口写出来只是第一步。插入、删除和扩容之后,元素位置以及迭代器的行为都需要重新考虑。 内存和对象 笔记还讨论了元素没有默认构造函数的情况。块申请原始内存,容器在需要的位置构造元素;删除、清空和析构时则要销毁活对象。异常路径上也需要处理已经构造的部分。 笔记中还留了坐标用错、扩容后容量没有更新、边界遗漏等排查记录。具体实现和课程要求可以在仓库里查看。 相关链接 课程 fork · 课程上游 · deque 实现笔记

2026-10-11
交大 C++ 基础课:从第一个程序开始建立习惯
这里放一下交大 C++ 基础课的课堂代码。目前仓库里的内容主要是 Hello World、课堂练习和输入输出示例,先把这些基础部分记下来。 第一份 main.cpp 使用 std::cout 输出 Hello World,同目录下还有 Makefile。程序虽然很短,但从源文件到可执行程序,仍然要经过编译和运行的过程。后面遇到多文件项目,还需要考虑依赖和链接。 输入输出部分也有一个值得注意的地方:cin.get.cpp 虽然文件名里有 get,实际使用的是 std::cin >> a >> b >> c。两种输入方式对空白字符的处理不同,复习的时候还是得看代码本身。 目前这里是课堂练习的记录,后面有新的代码再继续补充。 相关链接 课堂仓库 · 第一个程序 · 输入输出示例

2026-03-08
第一篇博客:源(代码)神 启动!
卷了一整个周末,有些无聊,又不想无所事事,所以这个blog就诞生了。作为一个 Markdown 迷和 LaTeX 享受者,怎么能容忍纯文本呢? 1. 物理与数学的交织 (LaTeX Test) 在无聊的时候,看看优美的公式也是一种放松(真的吗)。比如经典的薛定谔方程: iℏ∂∂tΨ(r,t)=[−ℏ22m∇2+V(r,t)]Ψ(r,t)当然,还有内联公式 eiπ+1=0,这是数学中最纯粹的美。 2. 万物皆对象 (Code Test) 最近刚好在梳理 C++ 的函数封装,顺手写一段优雅的 OOP 示例: 1234567891011121314151617181920212223#include <iostream>#include <string>class Yumemi {private: std::string title; int magicPower;public: // 构造函数 Yumemi(std::string t, int p) : title(t), magicPower(p) {}...

2026-10-11
ACMOJ 作业整理:接口约束与对象生命周期
这篇记录一下 ACMOJ 上的 C++ 作业。仓库按照 Homework 和题号保存代码,这里挑两道比较有意思的题。 逻辑构造 Homework1/2354/ans.hpp 里面先定义了一个函数:只有两个输入都为真时才返回假。再利用这个函数组合出逻辑与和逻辑非。 题目对可用操作有限制,所以不能只看最后的结果。需要想清楚在给定操作下,怎么把想要的逻辑组合出来。 Defer 与对象生命周期 Homework2/1048/DeferClass.hpp 使用 std::function<void()> 保存动作,在对象析构时从容器尾部逐个取出执行。复制构造和复制赋值被禁用,避免一组动作被复制到另一个对象之后执行两遍。 这里需要注意保存顺序和执行顺序,也需要想清楚对象什么时候离开作用域。作业代码和题目接口可以在下面的仓库里查看。 相关链接 作业仓库 · 逻辑构造 · Defer 实现




