站点计划
本页最后更新于 ,内容可能过时
本站目前的建设进度,以及之后打算做的事。
近期项目
| 项目 |
当前进展 |
内容描述 |
| 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 边看汇编:左边写代码,右边实时出汇编,两边的行还对应高亮。重点看:参数怎么传、局部变量放在哪、if 和 for 各自变成了什么、函数调用时栈怎么动。和下一题配合看,取指—译码—执行就不再是抽象的了 |
| 最简单的 CPU 仿真 |
RISC-V 的一个子集:取指、译码、执行三步循环,能跑通几条指令就够 |
| Cache |
实现一个软件模拟的 cache:先做直接映射,再加组相联和各种替换策略,用不同的访问模式跑出命中率差异。最后回到真实代码上验证 —— 同一个二维数组,按行遍历和按列遍历的耗时能差出好几倍 |
| 页表 |
内容待定。可以从「虚拟地址怎么映射到物理地址」入手,做一个软件模拟的页表加缺页处理 |
三、数据结构与算法
| 项目 |
内容设想 |
| vector |
动态数组:扩容策略怎么定、均摊复杂度是怎么来的 |
| 链表与哈希表 |
从手写链表做到哈希表(拉链法和开放寻址各写一遍),实测不同数据量下的性能差异 |
| 树 |
内容待定。从二叉搜索树到「为什么需要平衡」 |
| 递归 |
从汉诺塔、全排列做到回溯,理解递归调用和栈的关系 |
| 排序 |
自己实现几种排序,用计时器实测差距,让「复杂度」不再是一句空话 |
四、造一个能跑的小东西
| 项目 |
内容设想 |
| 表达式求值器 |
从中缀转后缀做到递归下降,实现一个支持变量和括号的计算器 |
| 最精简的 CPython |
只支持非常简单的语法:先词法分析、再语法分析,最后遍历语法树解释执行 |
| 最基础的 MLP |
用 C 实现一个多层感知机拟合 sin 函数,不依赖任何框架 |
| 终端小游戏 |
贪吃蛇、2048 之类,练 ANSI 转义序列和输入处理 |
五、练习与评测
| 项目 |
内容设想 |
| 简单的应用 OJ 题 |
配合课程进度出一批练习题,每题配样例、边界数据和提示 |
| 从 OS 课拆的小 pj |
把操作系统课的项目拆小,做成适合本课程的版本 |