Skip to content

Latest commit

 

History

History
142 lines (132 loc) · 46 KB

feature-checklist.md

File metadata and controls

142 lines (132 loc) · 46 KB

功能清单

状态说明:已完成 表示首版已在仓库中落地;待体验确认 表示功能已落地并通过自动化复验(复验范围写在「验收结果」里),但观感、听感与窄屏排版这类只能由人判断的部分仍需学习者现场体验确认,页面与文档不得把它说成已经人工确认;下一步 表示已确认方向但尚未承诺具体实现;不做 表示受项目边界约束。

首版交互课件

功能 状态 验收结果
五阶段学习路径 已完成 可切换阶段并查看阶段目标与课程数量
40 节 CSP-J C++ 课件目录 已完成 每节含目标、内容、检验清单、视频组织建议和练习建议
每节课的先修关系可见 已完成 每课页首标题正下方列出先修课号、课名与要会的那一件事,并给上一课入口;课程目录详情面板同步显示同一份数据
单课件详情阅读 已完成 点击任意课件卡片即可切换详情;键盘上下方向键也可切换
交互动作反馈 已完成 切换阶段、选择课件、筛选和修改进度后显示即时状态提示
逐项学习检验 已完成 可勾选、撤销勾选或一键完成当前课
本地进度保存 已完成 刷新后恢复;浏览器拒绝存储时会给出提示且不崩溃
学习尝试恢复 已完成 保存失败(含会话中途失败)当次会话立刻可见、可点“重试保存”;恢复后说明“本地保存已恢复”并把期间待写进度补写落盘,绝不显示成已保存
课程结构校验 已完成 bun test 校验课程数据的完整性和阶段均衡
本地开发服务器内容边界 已完成 bun run dev 只监听 127.0.0.1(可用 HOST 覆盖),并且只服务 index.html、glossary/、lessons/ 这三份内容——内容清单与构建、线上 Worker 共用 src/site.ts 里同一份定义。/.git/config、/.gitignore、/wrangler.jsonc、/AGENTS.md、/package.json、/docs/、/scripts/、/src/ 等仓库文件,以及越界与编码写法(..、%2e%2e、%2f、%00、坏编码),一律给出与线上一致的中文 404;少了末尾斜杠的目录地址与线上一样 307 跳转(目录不存在则不跳);PORT/HOST 非法或端口被占用会当场说清而不是静默换端口
互动页面脚本语法校验 已完成 bun test 逐一编译首页与全部 40 课内嵌脚本,语法错误会立即失败,弥补此前只做字符串匹配的盲区
手工 E2E 验收 已完成 见 tests/e2e/manual-checklist.md;S1-01 的八个场景另可用 bun run e2e:s1-01 在无头 Chrome 自动重跑,S1-02 至 S1-08 的手写填空微练习可用 bun run e2e:s1-typed 自动重跑,S2-01 至 S2-08 的手写填空微练习可用 bun run e2e:s2-typed 自动重跑,S3-01 至 S3-08 用 bun run e2e:s3-typed,S4-01 至 S4-08 用 bun run e2e:s4-typed,S5-01 至 S5-08 用 bun run e2e:s5-typed,全部 39 节已迁移课用 bun run e2e:typed
整课推进与随机小测浏览器复验 已完成 bun run e2e:flow 把 S1-02 至 S5-08 全部 39 课从 0 / N 已推进 走到 N / N(780 项,每课 20 项),并逐课量「检查目标绑到本课学习目标原文、没答完不能提交、提交后才给解析与得分、没考住时按学习目标汇总错题并指回本节讲解且不倒退进度、没做完不提前引到下一课、完成后继续学习入口指向 courseData 的下一课且可达」;步骤与仍需人工确认的部分见 tests/e2e/flow-manual-checklist.md
课后继续学习入口 已完成 39 节非末课在走完 N / N 后自己打开「继续学习」,写明下一课是 Sx-xx 与课名、先练的那件事,并直达下一课的 index.html;没做完之前入口隐藏,不会把学习者中途引走。S5-08 作为最后一课换成课程收尾出口(说明五阶段 40 课已走完、怎么复盘、题目与解析已通过校验,并指回课程路线),不给成绩评定或能力认证的说法。tests/next-lesson.test.ts 锁住契约,bun run e2e:flow 在真实浏览器复验;步骤见 tests/e2e/flow-manual-checklist.md 的 E2E-FLOW-05
手机端阅读 已完成 阶段栏和课程列表在窄屏下纵向重排
40 个课程目录与元数据 已完成 lessons/s1-01/ 至 lessons/s5-08/ 均有 lesson.json,由 Bun 脚手架和测试校验
S1-01 引导式互动课件 已完成 已实现程序入口识别、编译流程演示、分号排错(先选最小修复,再亲手补 1 个分号,含提示/参考/重置兜底)与本地进度恢复;bun run e2e:s1-01 在无头 Chrome 复验 88 项检查(含跳过步骤、错误选项、存储不可用、会话中途保存失败、词条表载入失败与词条面板脚本未载入的恢复),键盘操作、音效听感与窄屏排版仍需人工确认
S1-01 随机选择题小测 已完成 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析;空题库或题目无效时明确告知并保留进度;两种题库异常均已由 bun run e2e:s1-01 自动复验
S1-02 引导式互动课件 待体验确认 已实现类型选择、变量声明/赋值/更新、亲手写 1 行更新语句(含提示/参考/重置兜底)、char 与大整数分界、本地进度恢复;手写填空已由 bun run e2e:s1-typed 在无头 Chrome 复验(本课 17 项,含空提交、全角符号与把更新写成 == 而不是 =三类失败路径,重置会清掉输入框里残留的旧字),键盘操作、音效听感与窄屏排版仍需人工确认
S1-02 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析;空题库或题目无效时明确告知并保留进度
S1-03 引导式互动课件 待体验确认 已实现公式选择、亲手写平均数算式(含提示/参考/重置兜底)、整除/取模演示、括号消歧义与本地进度恢复;手写填空已由 bun run e2e:s1-typed 在无头 Chrome 复验(本课 16 项,含空提交、全角符号与漏括号写成 a + b / 2三类失败路径,重置会清掉输入框里残留的旧字),键盘操作、音效听感与窄屏排版仍需人工确认
S1-03 随机选择题小测 待体验确认 每套从 6 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S1-04 引导式互动课件 待体验确认 已实现连续 cin 读入选择、亲手写 1 行读入语句(含提示/参考/重置兜底)、空格/换行演示、竞赛提示语对照与本地进度恢复;手写填空已由 bun run e2e:s1-typed 在无头 Chrome 复验(本课 16 项,含空提交、全角符号与连续读入写成 cin >> a, b;三类失败路径,重置会清掉输入框里残留的旧字),键盘操作、音效听感与窄屏排版仍需人工确认
S1-04 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S1-05 引导式互动课件 待体验确认 已实现 if/三路判断选择、60 分边界演示、= 与 == 对照、亲手补齐两行条件(含提示/参考代码/重写兜底)与本地进度恢复;手写填空已由 bun run e2e:s1-typed 在无头 Chrome 复验(本课 17 项,含空提交、全角符号与>= 丢掉等于三类失败路径,重置会清掉输入框里残留的旧字),键盘操作、音效听感与窄屏排版仍需人工确认
S1-05 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S1-06 引导式互动课件 待体验确认 已实现 for/while 选择、亲手写 for 表头(含提示/参考/重置兜底)、1 到 3 累加演示、忘记 i++ 的死循环对照与本地进度恢复;手写填空已由 bun run e2e:s1-typed 在无头 Chrome 复验(本课 16 项,含空提交、全角符号与循环上界写成 i < n三类失败路径,重置会清掉输入框里残留的旧字),键盘操作、音效听感与窄屏排版仍需人工确认
S1-06 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S1-07 引导式互动课件 待体验确认 已实现内外层职责选择、亲手写内层循环(含提示/参考/重置兜底)、3 行 3 列图案演示、break 与 continue 对照与本地进度恢复;手写填空已由 bun run e2e:s1-typed 在无头 Chrome 复验(本课 16 项,含空提交、全角符号与内层循环变量写成 r三类失败路径,重置会清掉输入框里残留的旧字),键盘操作、音效听感与窄屏排版仍需人工确认
S1-07 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S1-08 引导式互动课件 待体验确认 已实现三类错误对照、少分号定位、亲手补分号(含提示/参考/重置兜底)、最小数据与分段输出、本地进度恢复;手写填空已由 bun run e2e:s1-typed 在无头 Chrome 复验(本课 17 项,含空提交、全角符号与多写字符写成 ;n三类失败路径,重置会清掉输入框里残留的旧字),键盘操作、音效听感与窄屏排版仍需人工确认
S1-08 随机选择题小测 待体验确认 每套从 6 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S2-01 引导式互动课件 待体验确认 已实现数组声明选择、下标 0 到 n-1 演示、亲手写 a[n - 1](含提示/参考/重置兜底)、越界对照、遍历求最大与本地进度恢复
S2-01 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S2-02 引导式互动课件 待体验确认 已实现 char/string 选择、s[0] 到 s[n-1] 演示、亲手写 s[n - 1](含提示/参考/重置兜底)、字符统计与数字判断、本地进度恢复
S2-02 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S2-03 引导式互动课件 待体验确认 已实现偶数函数选择、调用/参数/返回值演示、亲手写 isEven(4)(含提示/参考/重置兜底)、闰年抽取、本地进度恢复
S2-03 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S2-04 引导式互动课件 待体验确认 已实现局部变量可见范围选择、值传递 n 不变演示、亲手写 int x(含提示/参考/重置兜底)、同名与引用对照、本地进度恢复
S2-04 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S2-05 引导式互动课件 待体验确认 已实现结构体记录卡选择、成员写入/读出演示、亲手写 a[0].score(含提示/参考/重置兜底)、结构体数组与按字段比较、本地进度恢复
S2-05 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S2-06 引导式互动课件 待体验确认 已实现冒泡思想选择、3/1/2 相邻交换演示、亲手写 swap(a[0], a[1])(含提示/参考/重置兜底)、sort 与稳定性对照、本地进度恢复
S2-06 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S2-07 引导式互动课件 待体验确认 已实现枚举范围选择、1 到 3 数偶数的状态演示、亲手写 if (i % 2 == 0) evenCount++;(漏分支、整除、条件写反、单个 =、漏分号都会点出原因,含提示/参考/重置兜底)、漏分支对照、本地进度恢复
S2-07 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S2-08 引导式互动课件 待体验确认 已实现操作次数选择、n=3 单层/双层对照、亲手写 n * n(写成 n + n、单层、^ 当乘方、多套一层或写死数字都会点出原因,含提示/参考/重置兜底)、大 n 写法与测试点、本地进度恢复
S2-08 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S3-01 引导式互动课件 待体验确认 已实现数位拆法选择、125 逐步拆位、亲手写 x % 10(空提交/全角百分号/写成 x / 10 都被具体指正,只做文字规则检查,不编译或执行学习者写的 C++)、GCD 与循环停止对照、本地进度恢复
S3-01 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S3-02 引导式互动课件 待体验确认 已实现递归拆法选择、countdown(3) 三层追踪、亲手写 n * fact(n - 1)(到不了边界、漏一层、忘了乘当前层都被具体指正,只做文字规则检查)、阶乘与无限递归对照、本地进度恢复
S3-02 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S3-03 引导式互动课件 待体验确认 已实现有序/单调前提选择、[1,3,5,7,9] 找 7 的区间收缩、亲手写 (left + right) / 2(漏括号、写成乘 2 都被具体指正,安全写法 left + (right - left) / 2 标为拓展但同样接受,只做文字规则检查)、首尾与死循环对照、本地进度恢复
S3-03 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S3-04 引导式互动课件 待体验确认 已实现前缀和定义选择、[2,5,1,4] 填表、亲手写 sum[i] = sum[i - 1] + a[i](空提交/全角方括号等号加号/漏减 1 写成 sum[i]、漏 a[i]、下标错位到 a[i - 1]、方向反成 sum[i + 1]、只加相邻两格、把下标 i 当数组元素都会被具体指正,只做文字规则检查)、区间公式与 l=1/下标偏移对照、本地进度恢复
S3-04 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S3-05 引导式互动课件 待体验确认 已实现双指针含义选择、[1,2,3] 窗口扩张、亲手写 right++; sum += a[right];(空提交/全角加号分号方括号/两步顺序反了、用减号、下标写成 a[left]、只移不加、只加不移、移错成 left++、用 = 覆盖窗口和、方向反成 right-- 都会被具体指正,只做文字规则检查)、空/满窗口与移动时机对照、本地进度恢复
S3-05 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S3-06 引导式互动课件 待体验确认 已实现贪心规则选择、三个活动逐步选取、亲手写 sort(a + 1, a + 4, by_end)(空提交/全角括号加号逗号/按开始时间排、按时长排、比较规则名字写错、漏掉第三个参数、起点写成 a 把 a[0] 排进去、终点写成 a + 3 少排一个、起止写反都会被具体指正,只做文字规则检查)、空选择与时长最长反例对照、本地进度恢复
S3-06 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S3-07 引导式互动课件 待体验确认 已实现栈/队列选择、([]) 入栈出栈、亲手写 st.pop();(空提交/全角符号/只看一眼的 st.top()、st.empty()、又压一个的 st.push()、只数数的 st.size()、漏掉栈名都被具体指正,只做文字规则检查,不编译或执行学习者代码)、空栈与 ([)] 错配对照、本地进度恢复
S3-07 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S3-08 引导式互动课件 待体验确认 已实现动态规划含义选择、爬楼梯前三步手算、亲手写 dp[i] = dp[i - 1] + dp[i - 2];(空提交/全角符号/写成 dp[i + 1]、右边又用 dp[i]、把两类走法相乘、i - 1 用两次、忘了加 dp[i - 2] 都被具体指正,只做文字规则检查,不编译或执行学习者代码)、初值与 n=1 对照、本地进度恢复
S3-08 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S4-01 引导式互动课件 待体验确认 已实现竞赛程序规范选择、圈范围/删提示语/对样例三步、亲手写 cout << n + 1;(空提交/全角符号/漏分号/多写提示语、给答案加引号或原样输出 n 都被具体指正,只做文字规则检查,不编译或执行学习者代码)、干净输出对照、本地进度恢复
S4-01 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S4-02 引导式互动课件 待体验确认 已实现建模卡含义选择、已知/目标/样例反推三步、亲手写 sum += a[i];(空提交/全角符号/漏分号/写成 sum = a[i] 覆盖前面的和、只写 i 或写成 a[n] 都被具体指正,只做文字规则检查,不编译或执行学习者代码)、算法候选与两个边界对照、本地进度恢复
S4-02 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S4-03 引导式互动课件 待体验确认 已实现模拟思路/条件分支选择、状态/事件顺序/样例追踪三步、亲手写 if (balance + x >= 0)(空提交/全角符号/边界写成 > 漏掉刚好把余额用完的情况、方向写反成 <= 0 都被具体指正,只做文字规则检查,不编译或执行学习者代码)、处理思路与两个边界对照、本地进度恢复
S4-03 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S4-04 引导式互动课件 待体验确认 已实现搜索思路/剪枝条件选择、选择/剪枝判断/回溯三步、亲手写 if (sum > target) return;(空提交/全角符号/漏分号/边界写成 >= 把和刚好等于目标的分支也剪掉、用 break 代替 return 都被具体指正,只做文字规则检查,不编译或执行学习者代码)、处理思路与两个边界对照、本地进度恢复
S4-04 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S4-05 引导式互动课件 待体验确认 已实现计数数组/排序工具选择、排序/扫描/记录三步、亲手写 cnt[score]++;(空提交/全角符号/漏分号/写成 cnt[score] = 1; 覆盖已数好的次数、漏掉方括号下标或写成 cnt[i] 都被具体指正,只做文字规则检查,不编译或执行学习者代码)、处理思路与两个边界对照、本地进度恢复
S4-05 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S4-06 引导式互动课件 待体验确认 已实现状态定义(选或不选)/枚举对照选择、状态/初始化/转移三步、亲手写 dp[i] = max(dp[i - 1], dp[i - 2] + nums[i]);(空提交/全角符号/漏分号/两边都写 dp[i - 1] 等于允许相邻两家、漏掉不选 i 那条路、下标写成 dp[i + 1] 都被具体指正,只做文字规则检查,不编译或执行学习者代码)、处理思路与两个边界对照、本地进度恢复
S4-06 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S4-07 引导式互动课件 待体验确认 已实现图的表示(邻接表)/访问标记对照选择、邻接表/访问标记/DFS 三步数连通块、亲手写 if (visited[u]) return;(空提交/全角符号/漏分号/条件写反成 !visited[u]、判断 adj[u] 或 deg[u]、用 break 代替 return 都被具体指正,只做文字规则检查,不编译或执行学习者代码)、DFS 与 BFS 顺序差异与两个边界对照、本地进度恢复
S4-07 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S4-08 引导式互动课件 待体验确认 已实现做题顺序/保底方案对照选择、划分子任务/保底方案/优化冲刺三步、亲手写 if (n <= 1000) { cout << brute(n); return 0; }(空提交/全角符号/边界漏等号或把 1000 写成 100、范围判断用 while 都被具体指正,只做文字规则检查,不编译或执行学习者代码)、先易后难与检查时间安排两个边界对照、本地进度恢复
S4-08 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S5-01 引导式互动课件 待体验确认 已实现审题计时/不跳过样例对照选择、审题/草稿/对照样例三步、亲手写 int a[100005];(空提交/全角符号/拿变量 n 当数组大小、漏掉类型 int、漏分号都被具体指正,开得比范围更宽是允许的、会被说明,只做文字规则检查,不编译或执行学习者代码)、预留检查时间与样例态度两个边界对照、本地进度恢复
S5-01 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S5-02 引导式互动课件 待体验确认 已实现最小复现/分段输出对照选择、缩小/分段输出/回归三步、亲手写 cout << i << " " << prefix;(空提交/全角符号/漏分号/写成分段输出以外的读入方向、只打其中一个值、变量名加引号都被具体指正,只做文字规则检查,不编译或执行学习者代码)、断言思路与回归测试两个边界对照、本地进度恢复
S5-02 随机选择题小测 待体验确认 每套从 5 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S5-03 引导式互动课件 待体验确认 已实现溢出/越界故障卡诊断选择、定位/改型/回归三步、亲手写 long long sum = 0;(空提交/全角符号/漏分号/仍写 int 或 unsigned int、只写 long、少初值或把 sum 写成 Sum 都被具体指正,只做文字规则检查,不编译或执行学习者代码)、比较符号与调试残留两个边界对照、本地进度恢复
S5-03 随机选择题小测 待体验确认 每套从 7 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S5-04 引导式互动课件 待体验确认 已实现开始策略/标注限制选择、基线/标注/升级三步、亲手写 sum[r] - sum[l - 1];(空提交/全角符号/减反成 sum[l] - sum[r]、用加法、从数组 a 里取、拿长度 n 当右端点、多减或多加 1 都被具体指正,只做文字规则检查,不编译或执行学习者代码)、伪优化识别与验证方式两个边界对照、本地进度恢复
S5-04 随机选择题小测 待体验确认 每套从 7 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S5-05 引导式互动课件 待体验确认 已实现开始顺序/记录方式选择、浏览排序/自测记录/时间检查三步、亲手写 if (n == 0) { cout << 0 << "\n"; return 0; }(空提交/全角符号/只写一个等号、拿 a[1] 当空数据判断、条件写成 n >= 0 太宽、用 while、漏掉 return 0; 或输出都被具体指正,只做文字规则检查,不编译或执行学习者代码)、时间不够时的处理与自测表记录方式两个边界对照、本地进度恢复
S5-05 随机选择题小测 待体验确认 每套从 7 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S5-06 引导式互动课件 待体验确认 已实现分类优先/改法方向选择、找错/归类/写改法并重做三步、亲手写 i <= n(空提交/全角符号/写成 i < n 或 i + 1 <= n 都漏掉最后一个下标、i > n 方向反、把上界写成数组大小 105 都被具体指正,只做文字规则检查,不编译或执行学习者代码)、时间不够时的处理与拿不准分类记录方式两个边界对照、本地进度恢复
S5-06 随机选择题小测 待体验确认 每套从 8 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S5-07 引导式互动课件 待体验确认 已实现开始前带上上次习惯/交叉检查判断选择、独立解题/交叉检查/习惯记录三步、亲手写 long long formula = 1LL * n * (n + 1) / 2;(空提交/全角符号/漏分号/漏掉 1LL 让 n * (n + 1) 按 int 溢出都被具体指正,两个因数交换顺序等价会被说明,只做文字规则检查,不编译或执行学习者代码)、对照两次时间分配与习惯是否稳定两个边界对照、本地进度恢复
S5-07 随机选择题小测 待体验确认 每套从 7 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
S5-08 引导式互动课件 待体验确认 已实现整理知识地图/标注薄弱模块判断选择、知识地图/薄弱项标记/赛前清单三步、亲手写 int cnt[105] = {0};(空提交/全角符号/写成 = 0 只清第一个格子、只声明不给初值、漏掉类型 int、漏分号都被具体指正,只做文字规则检查,不编译或执行学习者代码)、薄弱模块复习优先级与 CSP-S 衔接边界两个边界对照、本地进度恢复
S5-08 随机选择题小测 待体验确认 每套从 7 道已通过校验的选择题中随机抽取 3 道;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题,并把每条错题目标点回讲它的那个任务(bun run e2e:flow 每课真点一次:面板真的切换、焦点落到该任务标题);提交后给出分数与逐题解析
初学者常见问题词条 已完成 共享 glossary/faq.json;S1-01 中 g++、.cpp、main 等可点开基础解释;S1-02 中 int、char、变量、赋值等同样可点开;S1-03 中表达式、整除、取模、优先级、括号同样可点开;S1-04 中 cin、换行、固定小数、提示语同样可点开;S1-05 中 if、else if、==、&& 同样可点开;S1-06 中 for、while、循环变量、累加、死循环同样可点开;S1-07 中嵌套循环、外层、内层、break、continue 同样可点开;S1-08 中编译错误、运行错误、答案错误、缩进、命名、分段输出同样可点开;S2-01 中数组、下标、长度、初始化、越界同样可点开;S2-02 中 char、string、长度、下标、ASCII 同样可点开;S2-03 中函数、参数、返回值、调用、定义同样可点开;S2-04 中作用域、局部变量、全局变量、值传递、引用同样可点开;S2-05 中结构体、成员、成员访问、结构体数组、按字段比较同样可点开;S2-06 中冒泡思想、sort、比较规则、交换、稳定性同样可点开;S2-07 中枚举、枚举范围、状态更新、模拟、漏分支同样可点开;S2-08 中操作次数、O(n)、O(n²)、边界数据、测试点同样可点开;S3-01 中整除、取模、数位、最大公约数、循环不变量同样可点开;S3-02 中递归、递归边界、递归调用、调用栈、阶乘同样可点开;S3-03 中二分查找、单调性、左右边界、中点、死循环同样可点开;S3-04 中前缀和、前缀和数组、区间和、下标偏移、O(n) 同样可点开;S3-05 中双指针、滑动窗口、左指针、右指针、窗口条件同样可点开;S3-06 中贪心选择、选择标准、反例、排序后决策、sort 同样可点开;S3-07 中栈、队列、后进先出、先进先出、括号匹配、广度优先直觉同样可点开;S3-08 中动态规划、状态、转移、初始化、一维 DP 同样可点开;S4-01 中竞赛程序、数据范围、样例、标准输入输出、干净输出同样可点开;S4-02 中建模卡、已知与未知、样例反推、约束、算法候选同样可点开;S4-03 中状态表、事件顺序、条件分支、样例追踪、边界数据同样可点开;S4-04 中深度优先搜索、搜索树、回溯、剪枝同样可点开;S4-05 中数据范围、sort、二分查找、计数数组、重复元素同样可点开;S4-06 中状态、转移、初始化、选或不选、最优子结构、状态压缩同样可点开;S4-07 中图、邻接表、访问标记、深度优先搜索、广度优先直觉、连通块同样可点开;S4-08 中子任务、部分分、保底方案、先易后难、复杂度降级同样可点开;S5-01 中限时解题流程、审题计时、建模草稿、样例检查、预留检查时间同样可点开;S5-02 中系统化调试、最小复现、分段输出、断言思路、差分检查同样可点开;S5-03 中溢出、long long、数组初始化、下标越界、运算优先级、== 比较相等、干净输出同样可点开;S5-04 中暴力基线、子任务、特殊情况、复杂度升级、伪优化、差分检查同样可点开;S5-05 中模拟赛、提交顺序、自测表、时间记录同样可点开;S5-06 中错误分类、边界数据、改法、重做关键题同样可点开;S5-07 中新题组、交叉检查、对照上一次、稳定习惯同样可点开;S5-08 中知识地图、薄弱模块、赛前检查清单、CSP-S 衔接条件同样可点开。词条表载入失败(含返回 HTTP 错误)时,面板当场说明并给出“重新载入词条表”入口,恢复后回到刚才点开的词条,课件其他互动不受影响

后续在线课程能力

功能 状态 验收边界
40 节专属在线学习界面 已完成 lessons/s1-01/ 至 lessons/s5-08/ 均有与目标对应的学习活动、过程演示/最小示例、进度反馈与资源异常说明
每课配套视频课件 仓库外实现 视频制作、存储和播放不在本仓库;仅可按课程 ID 关联外部交付状态,不伪造可用性
40 节随机在线测试 已完成 每课从 5 至 7 道已通过校验的题库随机组卷;选择题数量严格多于非选择题;完成后展示得分、逐题正误与解析,并把没考住的目标点回讲它的那个任务(复习出口真的能点、能切、能聚焦);空题库或题目无效时明确告知并保留进度;每题把检查目标绑到本课学习目标原文并另起一行说明本题检查,未通过时按学习目标汇总错题
题库与组卷质量控制 已完成 每道题关联课程 ID、学习目标、难度、题型、正确答案、解析与来源;同次不重复,试卷用种子标识复现;题目统一标记为已通过机器校验。难度档位统一为必会 required / 建议掌握 recommended / 拓展 stretch,由 tests/lesson-contract.test.ts 逐课校验;抽出来的那 3 道题另由 tests/quiz-paper-contract.test.ts 在 256 个种子下校验题数、同次不重复、只出选择题、同一试卷标识可复现、题库内每题都抽得到,以及抽题不会就地改写题库
学习尝试恢复 已完成 保存失败(含会话中途失败)当次会话立刻可见、可点“重试保存”;恢复后说明“本地保存已恢复”并把期间待写进度补写落盘;词条表载入失败同样当场说明、可点“重新载入词条表”,恢复后回到刚才点开的词条。两类失败都不伪造成功
先修关系可见与可达 已完成 全部 40 课都由 bun run e2e:prereq 在无头 Chrome 里复验(242 项检查:40 课各 6 项,5 项笔记本视口 + 1 项手机竖屏,另含脚本自检 2 项),覆盖先修块整块落在首屏、文字与 courseData 一致、链接全部可达、键盘走得到焦点环可见、真实鼠标点击真的进得去,以及手机竖屏下的同一块
键盘可达与焦点可见 已完成 全部 40 课都由 bun run e2e:keyboard 在无头 Chrome 里发真实按键事件复验(328 项检查:结构检查每课 8 项 + S1-02 与 S3-01 的键盘深路径每课 4 项),覆盖 Tab 绕圈全程可见焦点环、无正数 tabindex 打乱顺序、音效开关 Space 可切换、词条 Enter/Escape 与焦点归还、步进门闩挡得住、提交后焦点交给结果区;tests/keyboard-access-contract.test.ts 在 bun test 里逐课锁住两处焦点恢复动作(作答重画题面、提交成功),焦点环观感与读屏语气仍待人工确认
可复制的代码模板与错误对照 下一步 帮助初学者辨识常见 C++ 错误;不在浏览器端执行不受控代码
教师备课打印版 下一步 便于课堂使用;默认不包含学生账号或行为追踪
可选的公开静态发布 已完成 课程站点发布在 https://cplus.talkincode.net,由 Cloudflare Worker csp-cpp-courseware 托管静态资源;bun run build 从仓库内容重建 dist/,bun run deploy 先构建再发布,线上内容就是仓库的构建结果;课程地址的末尾斜杠跳转由静态资源的 html_handling 负责(Worker 看不到这类请求),Worker 只把 404 换成中文说明。main 上的推送由 .github/workflows/test-and-deploy.yml 自动发布(先 bun test,再 bun run deploy,最后抽检线上每一节课、末尾斜杠跳转、词条面板与中文 404),需要 CLOUDFLARE_API_TOKEN(仓库级或组织级共享 secret 均可)。零账号、零排行榜、零在线判题、零个人画像的边界不变

不做

  • 在线编译、执行或评测任意用户 C++ 代码
  • 账号体系、排名、班级社交、公开作答和个人画像
  • 未标记来源的大量题目转载或“保过”式承诺
  • 未通过校验或无法复现的随机试题、答案和解析
  • 以高级竞赛算法替代零基础 C++ 核心训练

内容发布检查

新增或修改一节课前,确认:

  • 课程的目标、内容、检验项和练习出口都已写入 courseData。
  • 课程规划中有相同的课次和范围表述。
  • 新概念具有可运行的最小示例和至少一个边界条件。
  • 本课出现的陌生工具名、命令或语法符号已写入 glossary/faq.json,并在页面中可点开基础解释。
  • CSP-J 必会内容与拓展内容已明确区分。
  • 若课程上线互动界面或测试,两项资源均有课程 ID 和学习目标对应关系;外部视频仅记录交付状态,不加入视频资产。
  • 若新增题目,已写明题型、难度、答案、解析和可追溯来源;每次随机组卷仍以选择题为主。
  • bun test 通过。
  • 相关手工 E2E 已按 tests/e2e/manual-checklist.md 执行,并更新验收矩阵(如涉及一级功能)。