跳转至

站点计划

本页最后更新于 ,内容可能过时

本站目前的建设进度,以及之后打算做的事。

近期项目

项目 当前进展 内容描述
dev-cpp ✅ 已完成 Dev-C++ 的安装与使用,不想装 WSL 时的备选
wsl2-vscode ✅ 已完成 让 Windows 11 的 WSL2 能用 VSCode 开发
claude ✅ 已完成 用 CC Switch 把 Claude 客户端接到 DeepSeek,含终端版 Claude Code 的配置
linux-cli ⬜ 待补充 Linux 命令行基础
git-github ⬜ 待补充 Git 与 GitHub 配置
gcc-gdb ⬜ 待补充 GCC 与 GDB 入门
make ⬜ 待补充 Make 构建工具

未来项目

都是一些可以动手做的小题目。每做完一个,应该都能对某个方向建立起手感 —— 而不是「又抄了一遍代码」。

以下都还是设想,随时可能调整。有想做的题目,或者觉得哪个不适合,欢迎随时提出。

一、把 C 语言本身吃透

项目 内容设想
指针与堆分配 自己实现一个堆分配器:用空闲链表管理一大块内存,写出简化版的 malloc / free。指针的加减、类型转换、指针的指针在这一题里全都要用到 —— 想真正熟悉指针,这是最有效的办法
位运算与整数表示 用打印二进制的办法看懂补码、溢出和移位;再动手拆解、拼装 IEEE 754 浮点数,理解 0.1 + 0.2 为什么不等于 0.3
字符串与文本处理 自己实现 strlen / strcpy / strstr,再写一个简易 grep,顺带理解标准库为什么这么设计
内存与调试 用 GDB 定位段错误:看调用栈、下条件断点、单步观察变量;再用 AddressSanitizer 抓内存越界、野指针和泄漏。配合《GCC 与 GDB》那篇

二、理解程序怎么跑在机器上

项目 内容设想
最基础的 Linux 命令行工具 用系统调用实现 cat / ls / wc / cp,理解文件描述符与 open / read / write
进程与管道 fork / exec / wait 做一个能跑命令的小 shell,再加上管道和重定向
汇编入门 Compiler Explorer 边写 C 边看汇编:左边写代码,右边实时出汇编,两边的行还对应高亮。重点看:参数怎么传、局部变量放在哪、iffor 各自变成了什么、函数调用时栈怎么动。和下一题配合看,取指—译码—执行就不再是抽象的了
最简单的 CPU 仿真 RISC-V 的一个子集:取指、译码、执行三步循环,能跑通几条指令就够
Cache 实现一个软件模拟的 cache:先做直接映射,再加组相联和各种替换策略,用不同的访问模式跑出命中率差异。最后回到真实代码上验证 —— 同一个二维数组,按行遍历和按列遍历的耗时能差出好几倍
页表 内容待定。可以从「虚拟地址怎么映射到物理地址」入手,做一个软件模拟的页表加缺页处理

三、数据结构与算法

项目 内容设想
vector 动态数组:扩容策略怎么定、均摊复杂度是怎么来的
链表与哈希表 从手写链表做到哈希表(拉链法和开放寻址各写一遍),实测不同数据量下的性能差异
内容待定。从二叉搜索树到「为什么需要平衡」
递归 从汉诺塔、全排列做到回溯,理解递归调用和栈的关系
排序 自己实现几种排序,用计时器实测差距,让「复杂度」不再是一句空话

四、造一个能跑的小东西

项目 内容设想
表达式求值器 从中缀转后缀做到递归下降,实现一个支持变量和括号的计算器
最精简的 CPython 只支持非常简单的语法:先词法分析、再语法分析,最后遍历语法树解释执行
最基础的 MLP 用 C 实现一个多层感知机拟合 sin 函数,不依赖任何框架
终端小游戏 贪吃蛇、2048 之类,练 ANSI 转义序列和输入处理

五、练习与评测

项目 内容设想
简单的应用 OJ 题 配合课程进度出一批练习题,每题配样例、边界数据和提示
从 OS 课拆的小 pj 把操作系统课的项目拆小,做成适合本课程的版本