学习内容 · DMSD · QTS · AC 入試

Learning Inventory

不是学习计划 — 是把 itsuki 反向工程自己 5 端项目 + 编程基础 + AC 入試需要碰的所有内容,按「DMSD 里最常用 + 学了立刻能用」的顺序列出来。

Part A · DMSD 第 0-13 章 Part B · QTS Q1-Q16 v0.2.0 · 2026-05-28

学习内容清单 — DMSD / QTS / 编程 / AC 入試

起草: 2026-05-25 by CC,2026-05-26 扩展(新增 DMSD 第 9-12 章 + QTS Part B 全 16 章),2026-05-28 扩展(第 7 章点呼机深度知识包 7.6-7.16 + 第 1 章 1.7 项目进度全景 12 小节:阶段 0-8 + 里程碑 + 决策记录 + 仓库地图)
对象: itsuki — 编程零基础但已实装 5 端项目 DMSD,想利用在校浪费时间反向工程自己项目;同时正在筹备 QTS 量化交易系统(节奏让位于 DMSD)
性质: 学习内容清单,不是学习计划(itsuki 原话:「不是说计划,就把要学的内容列出来」)
结构: 分两大块 — Part A · DMSD + AC 入試(眼前主线,第 0-13 章)/ Part B · QTS 量化交易(终极地图,Q1-Q16,按 #008 决策让位 DMSD 优先,是「方向地图」不是「明天就要学」)
关联: 跟 02_分析与调研/AC入試制度総覧_2027.html 配套 — Part A 内容直接对应 AC 评分 3 点(关心 / 能力 / 表达)
这份清单的写法:

目录


第 0 章 — 这份清单为什么这样写

0.1 itsuki 当前位置

0.2 AC 入試 3 个评分点跟学习的关系

评分点 AC 要求 学习怎么对应
关心 对信息科学有强烈兴趣,有持续追踪轨迹 学习记录(05_logs/learning_path.md)就是追踪证据 — 每学一块写 1 条「为什么学 / 学了什么 / 感悟」
能力 自己设定课题 + 创造性解决 DMSD 项目本身就是核心证据 — 学得越深越能解释自己的设计选择
表达 逻辑说明过程与结果(书面 + 口头) 不追求广,追求每个学过的东西能讲清楚 — 评委问「为什么用 NFC」要从物理原理讲到代码

0.3 学习设计 5 条原则

  1. 每学一块都跟 DMSD 现有代码联动 — 不学跟项目无关的东西
  2. 每学一块都能写一句「我用它做了什么」 — 这就是 AC 面接素材
  3. 不追求广,追求能讲清楚 — 评委问到任何技术细节都能从原理讲到代码
  4. 边做边学(已有原则,05_logs/learning_path.md §核心学习哲学)— 不走「先学几个月编程再开始」的传统路径
  5. 三条铁律:每行代码能解释 / 先猜后跑 / 写 dev_log(dev_log = 开发日志,记每天碰到什么改了什么)

第 1 章 — 自己项目熟悉度(最优先 / 0 编程门槛)

itsuki 原话:「我现在连自己项目的文件都认不全」。这一章不需要写一行代码,只需要读 + 看 + 在脑中建立项目地图。这是优先级最高的,因为 AC 面接评委问「你的项目里有什么」如果自己答不全,是最致命的翻车。

1.1 项目地图(630+ 文件按目录分布)

DMSD 顶层目录结构(11 个目录)
必学 难度 ★
DMSD 项目根 ~/dev/DMSD/ 下 11 个目录,每个干什么用
.claude/skills/project-overview/SKILL.md §1 — 这份文件就是 itsuki 让 CC 替他维护的「项目文件总览」,630+ 文件全清单。读 1 遍能知道每个文件干什么。
AC 故事:评委问「你的项目有多大」→ 答「11 个顶层目录,约 630+ 文件,分 5 端代码 + 规格 + 设计 + 运维 + 日志 + 资产」
5 端代码分布(03_dev/ 下 5 个子目录)
必学 难度 ★
backend(后端)/ student_ios(iOS 学生端)/ student_android(Android 学生端)/ teacher_web(老师网页端)/ rollcall_device(点呼机端,跑在树莓派上)
03_dev/ 目录每个子目录的 README 或 DESIGN_LOG.md 文件
AC 故事:评委问「为什么做 5 端」→ 答「学生用手机签到(iOS / Android)、老师用电脑管学生(Web)、签到刷在硬件上(点呼机)、所有数据汇总到一个后端」

1.2 项目演变(v0.1 → v0.8 决策线)

8 次版本迭代每次做了什么 / 为什么
必学 难度 ★★
v0.1 规格冻结 → v0.3 规格大改 → v0.4 拍板分数体系 → v0.5 设计文档重写 → v0.6 三端代码 bootstrap(bootstrap = 把项目最初框架搭起来)→ v0.7 学生注册码 + 老师公告 → v0.8 工具链定型
CHANGELOG.md(顶层)+ 00_admin/progress_overview.md
AC 故事:评委问「项目怎么演化的」→ 能逐版本讲清楚每次为什么 bump(bump = 版本号升级)。这是 AC 最爱听的「迭代思考过程」

1.3 规格文档(spec)— 项目「不写代码的真值源」

RollCall 规格 = 点呼系统的需求定义
高优 难度 ★★
spec = specification(规格说明书)— 在写代码之前先用文字 + 表格定义「这个功能要做什么 / 不做什么 / 错误怎么处理」。所有 5 端代码必须按规格实装。
01_specs/rollcall/RollCall_Spec_v0.1.md(主体)+ 01_specs/rollcall/字典/ 下三件套(术语字典 / 状态字典 / 错误字典)
AC 故事:评委问「你怎么保证 5 端行为一致」→ 答「先冻结规格再实装,规格是单源真值,5 端都按规格做」

1.4 设计文档双层结构

共用层 vs 専属层
高优 难度 ★★
2 端以上涉及的设计写共用层(02_design/system_features.md),单端涉及的写専属层(每端各自的 *_DESIGN_LOG.md)。这样改的时候不会重复改 5 处。
02_design/system_features.md(共用层 830 行)+ 任一端的 DESIGN_LOG(先挑 iOS 看,比较直观)
AC 故事:评委问「5 端文档怎么不打架」→ 答「双层结构 + 文件联动矩阵」

1.5 文件联动矩阵

改 A 必查 B 的 17 条规则
中优 难度 ★★
5 端项目最大风险 = 改了一处忘改另一处导致字段对不上。DMSD 用「联动矩阵」(matrix) 把 17 条「改 A 必查 B」规则写死,每次 CC 写代码自动跑联动检查脚本。
.claude/skills/file-linkage/SKILL.md + 00_admin/hooks/lib/sync-rules.sh
AC 故事:评委问「5 端代码怎么不漂移」→ 答「PostToolUse hook 自动跑 sync-check 脚本,改一处立刻提醒查另一处」

1.6 项目工具链(hook / skill / agent)

DMSD 装的 7 个 PostToolUse hook + 1 SessionStart hook + 30+ skill
中优 难度 ★★★
hook = 钩子,特定事件发生时自动跑的脚本(比如 CC 改完文件自动跑联动检查)。skill = 技能,CC 触发特定关键词时自动加载的工作手册。DMSD 已配 7 个 hook + 30+ skill 防止 CC 失职。
00_admin/hooks/README.md + .claude/skills/ 下各 SKILL.md(先挑 session-wrap 和 version-bump 看,最常用)
AC 故事:评委问「跟 AI 协作怎么管」→ 答「自己设计 hook + skill 让 AI 按规矩做事,AI 不是黑盒是工具」

1.7 项目进度全景(v0.1 → v0.8 + 之后累积推进)

🆕 2026-05-28 加入:这一节是 DMSD 项目状态总览的镜像 (等同 00_admin/progress_overview.md)。 itsuki 有时间就过一遍,了解每个目录/阶段的左右两侧(前因后果 + 当前状态)。 详细日志在 05_logs/,本节只是快照。

1.7.1 项目身份卡

  • 仓库 / 开发代号DMSD(Dormitory Management System Digitalization)
  • 系统 / 产品名(对外)Tomoshibi(灯火 / ともしび,2026-04-21 定名)
  • 一句话:把宿舍的纸质点呼考勤、纪律管理流程数字化,通过 NFC 卡 + 后端服务器 + 手机 App 实现
  • 开发者:itsuki(一人独立开发)
  • 起始时间:2026 年 2 月
  • GitHubotogi2025/DMSD(2026-04-29 起 public)

1.7.2 分阶段策略(2026-04-19 G2 决策后已取消分阶段)

⚠️ 2026-04-19 G2 决策:原计划「Phase 1 = 卡 + 点呼机 / Phase 2 = 手机 App」已废弃。 v1.0 直接 iOS + Android + 卡 一次上线。 理由:itsuki 拍板「分阶段会让用户体验割裂、维护双套逻辑增本」。 内部开发节奏仍按 M1 → M5 里程碑(兜底:做不完至少 M1 + M2 可 demo)。
4-19 之前的旧分阶段(历史记录)
阶段内容不需要
Phase 1NFC 卡 + 后端 + 点呼机 (Raspberry Pi)学生 App
Phase 2加手机 App (iOS + Android)

1.7.3 系统架构(5 端 monorepo 真实拓扑)

  点呼室入口                          VPS 服务器
┌─────────────┐                  ┌──────────────┐
│ 点呼机 A    │───── HTTP ──────→│              │
│ (Pi 3A+ +   │←── 学生名字 ─────│  FastAPI     │
│  PN532 V3 + │                  │  + PostgreSQL│
│  USB 音响)  │                  │  + Alembic   │
└─────────────┘                  │              │
                                 │              │
┌─────────────┐                  │              │
│ 点呼机 B    │───── HTTP ──────→│              │
│ (Pi 3A+ + … │←── 学生名字 ─────│              │
└─────────────┘                  │              │
                                 │              │
┌─────────────┐                  │              │
│ 学生 App    │───── HTTP ──────→│              │
│ (iOS Swift /│←── JWT / data ───│              │
│  Android    │                  │              │
│  Compose)   │                  └──────┬───────┘
└─────────────┘                         │ HTTP
                                        ↓
                                 ┌──────────────┐
                                 │ 老师 Web     │
                                 │ (HTML stand, │
                                 │  Ryō 风格,   │
                                 │  iPad 浏览器)│
                                 └──────────────┘

NFC 卡 / 标签(学生持卡 + 入口动态标签):
  - NTAG215      (学生卡, 7B UID)
  - ST25DV16K    (动态标签, 每 10 秒刷新 nonce)
老师 Web 决策漂移注:2026-05-02 立项 TS + Vite + Zustand 实装版, 2026-05-26 itsuki 拍板整体废弃(不是他心里的 Ryō 24 学生座席表 + 实时点呼仪表盘), 回到 4-21 Ryō standalone 单 HTML 主线。Vite 实装版 13 文件归档到 99_archive/2026-05-26_teacher_web_vite实装作废/

1.7.4 核心功能:点呼系统流程

点呼一轮跑下来的 8 步
  1. 老师在管理端点击「开始点呼」
  2. 学生把 NFC 卡(或 Phase 2 的手机)贴到点呼机
  3. 点呼机读到 UID → 发给后端 → 返回学生姓名
  4. 点呼机扬声器播报学生姓名(防作弊关键设计)
  5. 老师站在旁边对照人脸
  6. 系统自动判定:准时 / 迟到 / 缺席
  7. 老师可以手动改判(需填写理由,系统留审计记录)
  8. 到时间未结束 → 系统自动结束并结算
纪律规则(扣分体系)
  • 迟到:+0.5 分
  • 缺席:+1.0 分
  • 月累计 ≥ 4.0 → 下月罚扫
  • 月累计 ≥ 8.0 → 下月禁足
2026-04-29 itsuki 拍板把禁足阈值从 ≥9 改为 ≥8(含等于)。 单源真值见 00_admin/文档同步点清单.md §10 + 01_specs/rollcall/v0.1_冻结决策.md §1
防作弊核心 = 语音播报
点呼机读卡后自动播报学生姓名,老师人眼对照。 把「机器识别身份」和「老师人眼识别」实时配对 → 攻击者必须本人到场(详见 05_logs/decision_log.md)。

1.7.5 整体进度(阶段 0 → 阶段 8)

阶段 0 — 规格设计 ✅ 已完成(2026-02 月)
阶段 0.5 — 架构决策 ✅ 已完成(2026-04-12)
阶段 0.6 — 版本管理与记录体系 ✅ 已完成(2026-04-13)
阶段 1 — 项目搭建 ✅ 已完成(2026-03-10)
阶段 2 — 编程学习 🔄 进行中
阶段 3 — 后端开发 🔄 进行中(v0.7 - v0.8 大量推进)
阶段 4 — 点呼机设备开发 🔄 进行中(设计层完成 / 硬件采购 + Pi 上手编程未开始)

已完成(设计层 + 文档层)

未开始(实物层 + 实装层)

阶段 5 — 老师端 Web/iPad 界面 🔄 进行中
阶段 6 — iOS 学生 App 🔄 进行中(v0.8 + 之后多次未 bump 推进)

已完成(v0.8 close 5-02)

v0.8 之后推进(pending bump)

阶段 7 — Android 学生 App 🔄 进行中(v0.8 + 之后多次未 bump 推进)

已完成(v0.8 bootstrap 5-02)

v0.8 之后推进(pending bump)

v0.8 之后未 bump 的累积推进(5-04 → 5-22)
日期关键节点
2026-05-04文件联动工具(pre-commit + sync-check.sh + 18 条规则代码化)+ 中文铁律加重
2026-05-08硬件全定稿(PN532 V3 + LED + 喇叭 + 外壳)+ system_features 4-30 大重写
2026-05-10ac-radar skill 上线(全局 AC 素材实时捕获,跨项目 inbox)
2026-05-11cc-comm-rules skill 立项(沟通规则)+ graphify 测试 + 术语表 HTML + reviewer 后门修复跨机器协作
2026-05-13文件大整理(26 文件 rename / archive)+ project-overview skill 建立(630+ 文件清单)
2026-05-14anti-ai-flavor skill 立项 + cc-comm-rules 规则升到 v0.5.0
2026-05-16跨项目大修(SC26 / Tango / cc-project-template)+ AC 合格率评估
2026-05-19project-overview 大改造(9 处漂移修 + §0.1 重算 957 文件)+ 防漂 C 方案(hook 全覆盖 + 启动对账)+ post-edit-format.sh + check_overview_drift.sh
2026-05-20+131 条 bug findings 4 会话并行修复(主会话 + Fix-Bot 1/2/3)
2026-05-21teacher_web/demo 整组 158 文件归档到 99_archive/ + Fix-Bot 4 effective_* 字段彻底删(spec 主体 + 字典三件套 + backend models + 新建 alembic 迁移)
2026-05-22project-overview §0.1 再校准 957 → 980 + 加 系统bug专栏.md / codex_audit_prompt.md 引用 + Codex 第二轮全文件覆盖 audit(1003 文件 / 39 条 = 24 独立 + 13 复核 + 2 positive)+ session-coord 跨会话协作板(3 会话并行:主 + 点呼机 + iOS 修复)
阶段 8 — 部署与试运行 ⬜ 未开始

1.7.6 项目里程碑(v0.4 → v0.8 + 之后)

4 月底到 5 月初的密集推进总览。详细 commit 历史 → git log / CHANGELOG.md
版本日期主题重点产出
v0.4 - v0.5 2026-04-17 → 04-29 RollCall spec 重写 + 项目审查 + 文档体系建立 RollCall_Spec v0.2 字典三件套 + v0.3 主体重写 / 项目审查 backlog 87 条 / 单源真值 + 同步点清单 + pre-commit hook 三件套
v0.6 2026-04-29 老师反馈 38 条受领 + 系统功能大重写 老师 LINE 38 条要件清单 + R1-R4 硬约束 / system_features.md 中文骨架大重写 / Demo 4-28 给宿舍管理员演示 + 4-29 口头同意采纳
v0.7 2026-04-30 三轨 A+B+C 同日完成 38 条消化 A 状态盘点 / B §9 拍板 / C 实装 brief 起草(backend / iOS / Web 各端 REQUIREMENTS / DESIGN_LOG)+ 帰省実物表 evidence 入手
v0.8 2026-05-02 三端代码层全启动 Android Compose bootstrap(21 .kt + 10 屏)/ iOS 网络层完整建设 + AppStore 切真后端 / teacher_web v1 TS+Vite+Zustand 升级 + 5 page / backend rollcall+study+teachers routers + Alembic / iOS↔backend 字段对齐 F1-F5+Q1
v0.8 之后(pending bump) 2026-05-03 → 05-04 注册码 + 公告 + 文件联动工具 App Store 上架对策(学生注册码 6 桁 5 分钟有效)/ 老师公告功能(4 端,backend + iOS 完成)/ A+B 文件联动工具(pre-commit + sync-check.sh + 13 条规则代码化)/ 中文铁律加重(被骂 3 次后扩到规范文档)

1.7.7 技术学习时间线

日期学了什么关键收获
2026-02 月项目规格设计学会如何定义系统需求、冻结范围、写规格文档
2026-03-10Git 基础理解版本控制的意义,建立多设备同步流程
2026-03-11Python 变量、数据类型、条件判断第一次写代码并运行
2026-03-11前端 / 后端 / API / 数据库概念理解整个系统的通信架构
2026-04-10NFC 与 NFD(Unicode normalization)跨平台开发的隐藏坑,错误信息可能是误导
2026-04-12NFC 原理(电磁感应 + 13.56MHz + UID)NFC 不是黑科技,是高中物理的应用
2026-04-12iOS Core NFC 框架 + SwiftUI 基础读卡核心逻辑 ~60 行 Swift
2026-04-12Python nfcpy + pyttsx3Raspberry Pi 设备端代码 ~20 行
2026-04-13SemVer 语义化版本规范版本号是给「发布」用的,不是每次 commit

1.7.8 关键决策记录(索引)

详细前因后果见 05_logs/decision_log.md
日期决策
2026-02-12v0.1 规格冻结
2026-03-10用 Git + GitHub 管理代码
2026-03-11练习代码放 ~/dev/practice/,不放 DMSD
2026-03-11用 Claude Code 辅助开发
2026-04-12NFC 而非二维码(防作弊)
2026-04-12分阶段上线(Phase 1 卡 + Phase 2 App)
2026-04-12点呼机 = Raspberry Pi(不是 iPad)
2026-04-12语音播报防作弊设计
2026-04-13版本号体系重置 v1.0 → v0.1
2026-04-19G2 决策:取消分阶段,v1.0 直接 iOS + Android + 卡 一次上线
2026-04-19单源真值 + 同步点清单 + pre-commit hook 三件套确立(防止文档版本号漂移)
2026-04-20动态 NFC 贴纸 ST25DV16K(10 秒 nonce)+ Pi 4B 2GB × 4 采购拍板
2026-04-21系统 / 产品名定为 Tomoshibi(灯火 / ともしび)
2026-04-28Demo 4-28 给宿舍管理员演示(NFC → 后端 → iPad 座位变绿 + 语音播报)
2026-04-29管理员口头同意采纳系统;GitHub repo 首次 public
2026-04-29老师 LINE 反馈 38 条要件 + R1-R4 硬约束(邮件通知 / 老龄 UX 一本道 / 教师单独账号 / 1·2 寮 4 寮分别表示)
2026-04-29禁足阈值 ≥9 → ≥8 单源真值统一
2026-05-02Android 实装方针拍板:CC 主导逐屏对译 Compose(不派 sub agent)
2026-05-03学生注册码拍板(教师生成 6 桁数字、5 分钟有效)— App Store 上架对策
2026-05-03老师公告功能拍板(Classroom 风、scope=all/male/female、学生回复全员互见)
2026-05-03Apple Intelligence on-device AI 路线统一(Image Playground 头像 / Foundation Models 摘要 / Translation framework)
2026-05-04A+B 文件联动工具拍板(pre-commit 内容检查 + bin/sync-check.sh 中途随时查)
2026-05-04中文铁律强化(覆盖范围扩到规范文档、被骂 3 次)

1.7.9 问题解决记录(索引)

详细记录在 05_logs/problem_solving/
日期问题类型
2026-03-10tar 打包报错「no files or directories specified」命令行
2026-03-10scp 传文件缺少目标路径命令行
2026-03-11Python NameError(变量未定义)编程
2026-03-11Python 布尔值必须大写 True / False编程
2026-04-10Git pull 失败:NFC vs NFD 跨平台编码差异Git / 跨平台

1.7.10 开发环境

2026-04-19 更新:VPS 已停用 for DMSD(itsuki 决定不再从学校 iPad 推进 DMSD 工作)。 当前只有家里 Mac 一台主机。
  • 家里 Mac~/dev/DMSD)→ Claude Code + Xcode(iOS 开发)+ VS Code — 当前唯一 dev 环境
  • GitHub otogi2025/DMSD = 唯一远端真值,2026-04-29 起 public
  • 独立 repo:otogi2025/Tomoshibi-iOS(iOS Swift 实装镜像)+ otogi2025/Tomoshibi-Android(Android Compose)

1.7.11 当前待办

优先(短期)
  • [ ] 填 4-10 dev_log 的 4 个【】占位符
  • [ ] 填 reflection_2026-04-10 的 5 个【】占位符(已迁 iCloud AC素材_成品/reflection/
  • [ ] 回答 AC素材_成品/ac_入試准备/项目起源_真实观察.md 里的 AC 起源问题(已迁 iCloud)
  • [ ] 继续 Python 学习(下一个:循环 + 列表)
中期
  • [ ] .pages 文件转换为 Markdown(4 个文件)
  • [ ] 删除 / 归档早期 throwaway iOS 代码
  • [ ] 学习 Swift / SwiftUI 基础
  • [ ] VPS 安装 PostgreSQL
  • [ ] 搭建 FastAPI 后端骨架
长期
  • [ ] 采购 Raspberry Pi + NFC 模块,搭建第一台点呼机原型
  • [ ] 建 README.md(开始写代码时)
  • [ ] 和真人讨论项目(填 iCloud AC素材_成品/interview_log/
  • [ ] 月度回顾(每月最后一周,填 iCloud AC素材_成品/monthly_review/

1.7.12 仓库结构地图(顶级目录骨架)

2026-05-21 重写:原静态结构图严重过期。 真值已迁.claude/skills/project-overview/SKILL.md (630+ 文件清单 + 每个文件作用 + 状态 + AC 价值,957 文件全统计 2026-05-16)。 本节只列顶级目录骨架(防漂),详细看上面 skill。
顶级目录干嘛文件数(截至 2026-05-16)
根级 6 文件CLAUDE / README / CHANGELOG / LICENSE / .gitignore / .graphifyignore6
00_admin/项目管理(WIP / TODO / progress_overview / hooks / 文档同步点清单)18
01_specs/规格文档(rollcall 字典三件套 + 主体)13
02_design/设计文档(system_features / hardware / flow)3
03_dev/5 端代码(backend / teacher_web / student_ios / student_android / rollcall_device)546
04_ops/运维2
05_logs/开发 log(raw / dev_log / problem_solving / decision_log / learning_path / project_evolution)75
06_assets/4 icon + 术语表 + 实样7
99_archive/早期归档273
.claude/CC 配置 + 7 skill9+
bin/脚本(sync-check / check_overview_drift / create_local_dev_symlink3
docs/Matt Pocock 外部 skill 适配配置3
总计957

第 2 章 — 基础通用知识(5 端都要)

这一章是「不学就根本理解不了 5 端在干嘛」的底层知识。不限语言,5 端都用。每个条目都已经在 DMSD 里实装过,不是抽象学。

2.1 命令行 / 终端基础

cd / ls / cat / grep / find
必学 难度 ★
cd = change directory 切目录 / ls = list 列文件 / cat = 看文件内容 / grep = 找匹配文字 / find = 找文件。Mac 终端(Terminal.app)和 zsh(Mac 默认 shell 命令行解释器)的基本操作。
DMSD 里日常碰:跑 bash bin/sync-check.sh 跑联动检查 / 用 git status 看改动 / 用 find . -name "*.md" 找文档
AC 故事:能在面接现场用终端打开项目目录展示文件 = 加分项

2.2 Git 版本控制

commit / branch / push / pull / log
必学 难度 ★★
Git = 代码版本管理工具。commit = 保存一次改动快照 / branch = 分支(同时开发不同功能不互相干扰)/ push = 推到远程仓库 / pull = 拉远程最新 / log = 看历史。DMSD 截至 v0.8 已有 200+ commit。
DMSD 里日常碰:每次会话结束 CC 起草 commit message(commit 说明文)让 itsuki 拍板。pre-commit hook(提交前自动跑的脚本)已在 00_admin/hooks/pre-commit
AC 故事:评委可能查 GitHub otogi2025/DMSD 看 commit 历史 → 200+ commit 本身就是「持续追踪」证据

2.3 文件路径 / 目录结构

绝对路径 vs 相对路径 / 隐藏文件 / 软链接
高优 难度 ★
绝对路径 = 从根开始(/Users/kurekoduki/dev/DMSD/)/ 相对路径 = 从当前位置出发(./03_dev/)/ 隐藏文件 = 点开头(.claude/)/ 软链接 = 一个文件指向另一个的快捷方式
DMSD 里:.claude/skills/ 是隐藏目录 / 各种相对路径在脚本里 / Cloud iCloud 路径 ~/Library/Mobile Documents/com~apple~CloudDocs/ 是 Mac 上 iCloud 的真实位置

2.4 JSON / YAML / Markdown

3 种文本格式
必学 难度 ★★
JSON = JavaScript Object Notation,对象数据格式,API 数据传输标准(DMSD backend 返回的就是 JSON)
YAML = YAML Ain't Markup Language,缩进式配置格式(hooks 配置用 YAML)
Markdown = 轻量文档格式(DMSD 几乎所有 .md 文件都是)
DMSD 里:API 返回 JSON / hooks 配置 / 所有 spec + design + log 都是 Markdown

2.5 HTTP / API 客户端-服务器架构

客户端怎么跟服务器说话
必学 难度 ★★★
HTTP = HyperText Transfer Protocol 超文本传输协议(网络上客户端和服务器通信的规则)
GET / POST / PUT / DELETE = 4 种 HTTP 请求方法(GET 取数据 / POST 创建 / PUT 更新 / DELETE 删除)
API = Application Programming Interface 应用程序接口(服务器对外开放的「能让客户端调用的功能列表」)
REST = Representational State Transfer 表现层状态转移(API 设计风格的一种,DMSD 用这个)
状态码 = 200 OK / 401 没授权 / 404 没找到 / 500 服务器爆炸
DMSD 里:iOS / Android / Web 3 个客户端都通过 HTTP 跟 backend 说话。backend 在 03_dev/backend/routers/ 下定义 API 端点(API endpoint = 一个具体的 URL 路径)
AC 故事:评委问「客户端怎么获取数据」→ 能从 HTTP 请求讲到 backend route 讲到数据库查询

2.6 数据库基础(PostgreSQL)

表 / 字段 / 主键 / 外键 / 索引 / 查询
必学 难度 ★★★
PostgreSQL = Postgres,一个免费开源的关系型数据库(DMSD 用这个存所有数据)
表 (table) = 像 Excel 的工作表,每行一条数据
字段 (column) = 表的列,比如 student_id / name / dorm_room
主键 (primary key) = 唯一标识一行的字段(通常是 id)
外键 (foreign key) = 指向另一个表主键的字段(学生表里的 dorm_id 指向宿舍表的 id)
索引 (index) = 给字段加速查找的数据结构
SQL = Structured Query Language 结构化查询语言(跟数据库说话用的语言)
DMSD 里:03_dev/backend/models.py 定义所有表 / alembic/versions/ 下是迁移脚本(migration = 数据库表结构变更记录)
AC 故事:评委问「点呼记录怎么存」→ 能从表设计讲到字段类型讲到查询性能

2.7 安全基础(hash / 加密 / 签名 / nonce)

为什么 DMSD 防作弊用这些
高优 难度 ★★★★
hash = 哈希,把任意长度数据压成固定长度指纹(密码不直接存,存哈希)
加密 (encryption) = 把数据变成只有持密钥的人能读懂的乱码
签名 (signature) = 证明「这条数据是某人发的、没被改过」
nonce = number used once 一次性随机数(防重放攻击 — 攻击者不能录下一次通信再发一遍)
ECDSA = Elliptic Curve Digital Signature Algorithm 椭圆曲线数字签名算法(DMSD 防代签到用这个)
DMSD 里:NFC 卡 ST25DV16K 用动态 nonce 每 10 秒刷新 / 学生注册码用 hash 验证 / 老师权限用 ECDSA 签名
AC 故事:评委问「怎么防代签到」→ 能从物理 NFC 距离限制讲到 nonce 防重放讲到 ECDSA 签名 = 完整的防御链 = 极强加分

第 3 章 — Python(backend + 点呼机,2 端用)

Python 优先级最高的原因:DMSD 5 端里 2 端用(backend + 点呼机),学一次能看懂 2 端代码,投入产出比(ROI = Return on Investment)最高。

3.1 Python 基础语法

展开 6 个子条目
变量 / 类型 / 字符串 / 数字 / 布尔
必学 难度 ★
DMSD 03_dev/backend/main.py 第 1 行开始就能看到
列表 / 字典 / 元组 / 集合
必学 难度 ★★
list 有序可变 / dict 键值对 / tuple 有序不可变 / set 无序去重。Python 4 种基本容器。
backend 里 API 返回的数据结构基本都是 dict 嵌套 list
if / for / while / try-except
必学 难度 ★★
控制流 + 异常处理。except = 捕获错误不让程序崩溃。
函数 / 参数 / 返回值 / 默认值 / 关键字参数
必学 难度 ★★
类 / 对象 / 继承 / 方法
高优 难度 ★★★
面向对象编程(OOP = Object-Oriented Programming)入门。SQLAlchemy 的 model 就是类。
模块 / 包 / import / __init__.py
高优 难度 ★★
模块 = 一个 .py 文件 / 包 = 装多个模块的目录。backend 代码分了 routers/ services/ models/ schemas/ 几个包。

3.2 FastAPI(backend 用的网络框架)

FastAPI = Python 写后端 API 的框架
必学 难度 ★★★
框架 (framework) = 别人写好的代码骨架,自己只填业务逻辑
Route = 路由,一个 URL 对应一个函数(GET /students 调 list_students() 函数)
依赖注入 (Dependency Injection) = 函数需要的东西(数据库连接 / 当前用户)让框架自动塞进来
OpenAPI = 自动生成的 API 文档(FastAPI 跑起来自带 /docs 路径能看到所有 API)
DMSD 03_dev/backend/routers/ 下所有 .py 文件 / 03_dev/backend/main.py 装配
AC 故事:评委问「为什么选 FastAPI 不选 Django / Flask」→ 答「自动生成 OpenAPI 文档对 5 端联动有用 / 性能比 Flask 高 / 比 Django 轻量适合 demo 阶段」

3.3 SQLAlchemy(数据库 ORM)

用 Python 类操作数据库表
必学 难度 ★★★★
ORM = Object-Relational Mapping 对象关系映射 — 让 Python 类对应数据库表,不用直接写 SQL。
Model = 一个 Python 类对应一张表(class Student(Base)
Session = 一次数据库会话,做完一组操作 commit(提交)或 rollback(回滚)
DMSD 03_dev/backend/models.py — 5 端里所有数据库表的定义都在这一个文件

3.4 Pydantic(数据校验)

API 输入输出的「类型守门员」
必学 难度 ★★★
Pydantic = Python 数据校验库 — 客户端发什么数据过来 / 服务器返什么数据出去,都用 Pydantic schema(模式)定义。如果字段类型不对自动报错。
Schema = 模式 / 数据形状定义 — 跟 model 不同:model 是数据库表,schema 是 API 进出口
DMSD 03_dev/backend/schemas.py — 跟 models.py 配套
AC 故事:评委问「客户端发错数据怎么办」→ 答「Pydantic 自动拒绝并返 422 错误(HTTP 状态码 = 数据格式错)」

3.5 Alembic(数据库迁移)

改表结构不丢数据的工具
高优 难度 ★★★★
Alembic = 跟 SQLAlchemy 配套的数据库迁移工具
迁移 (migration) = 改表结构的脚本(加字段 / 删字段 / 改类型),有版本号能回滚
DMSD 已有 30+ 个 migration 脚本
DMSD 03_dev/backend/alembic/versions/ 目录

3.6 nfcpy(点呼机用的 NFC 库)

Python 读 NFC 卡的库
中优 难度 ★★★
点呼机端用这个库通过 PN532 模块(NFC 读写模块)读 NTAG215 卡(NFC 卡的一种型号)和 ST25DV16K(动态 NFC 卡)。
DMSD 03_dev/rollcall_device/src/

第 4 章 — Swift + SwiftUI(iOS 学生端 / AC demo 重点)

Swift 优先级仅次于 Python — 因为 iOS 是 itsuki 给宿舍管理员演示用的端(4-28 demo 就是 iPhone)。AC 面接如果带 iPhone 当场演示,Swift 代码必须能讲清楚。

4.1 Swift 语法基础

展开 6 个子条目
let / var / Optional / 类型推断
必学 难度 ★★
let = 常量(不能改)/ var = 变量
Optional = 可空类型 — Swift 区分「这个值可能为空」和「这个值一定有」,用 ? 表示可空。零基础容易翻车的语法。
struct / class / enum
必学 难度 ★★★
struct = 结构体(值类型,赋值是复制)/ class = 类(引用类型,赋值是同一份)/ enum = 枚举(有限取值集合)。SwiftUI 里 View 几乎都是 struct。
func / 闭包 / 高阶函数(map / filter / reduce)
高优 难度 ★★★
闭包 (closure) = 匿名函数,可以传给别的函数。Swift 里到处都是。
protocol / extension
高优 难度 ★★★★
protocol = 协议,定义「实现我的类型必须有这些方法」/ extension = 扩展,给已有类型加新方法。Swift 的「面向协议编程」核心。
async / await(异步编程)
高优 难度 ★★★★
网络请求要等几百毫秒,不能堵住 UI。async 函数表示「我会异步」,await 表示「在这里等结果」。Swift 5.5+ 的现代异步语法。
Codable(JSON 解码)
必学 难度 ★★★
让 Swift 结构体能自动把 JSON 转成 struct 实例(解码 / decode)或反过来(编码 / encode)。DMSD iOS 端跟 backend 通信全靠这个。

4.2 SwiftUI 声明式 UI

SwiftUI = Apple 的现代 UI 框架
必学 难度 ★★★★
声明式 (declarative) = 写「UI 长什么样子」而不是「怎么一步步画出来」
View 协议 = 所有 UI 元素都实现 View 协议
组合 = 复杂 UI 由简单 View 拼起来
跟传统的命令式 UIKit 是两套思路
DMSD 03_dev/student_ios/ 下所有 .swift 文件 / Foundation/ 下是基础 component

4.3 状态管理(@State / @Binding / @ObservedObject / @StateObject / @EnvironmentObject)

SwiftUI 5 个数据流注解
必学 难度 ★★★★★
@State = 本地状态(这个 View 内部用)
@Binding = 子 View 拿到父 View 的状态引用
@ObservedObject = 监听外部对象的变化
@StateObject = 自己创建并持有外部对象
@EnvironmentObject = 全局共享对象(不用层层传)
DMSD iOS 端到处都是。零基础最容易翻车的点 — 错用导致状态不更新或者无限循环。

4.4 导航(NavigationStack / Sheet / Alert)

屏幕之间跳转
必学 难度 ★★★
DMSD 03_dev/student_ios/Route.swift + RootView.swift 是导航中枢

4.5 Core NFC(iOS 系统 NFC 框架)

iPhone 读 NFC 卡 / 触发 URL
高优 难度 ★★★★
Core NFC = iOS 系统层提供的 NFC 操作接口
BTR = Background Tag Reading 背景标签读取(不用打开 App,靠近 NFC 就触发)
Universal Link = 通用链接(特定 URL 不打开 Safari 而是直接跳 App)
AASA = Apple App Site Association(Universal Link 配置文件)
DMSD iOS 端点呼相关代码
AC 故事:评委问「学生怎么签到」→ 「碰 NFC 卡 → BTR 触发 Universal Link → 跳 App 自动签到 → 后端记录」全链路能讲

4.6 URLSession(网络请求)

iOS 发 HTTP 请求的系统库
必学 难度 ★★★
DMSD 03_dev/student_ios/Endpoints/ 下各个 *API.swift 文件

第 5 章 — Kotlin + Compose(Android 学生端)

Kotlin 跟 Swift 概念高度相似(都是现代静态语言 + 声明式 UI),学完 Swift 再学 Kotlin 时间能减半。Android 端学习优先级排第三。

5.1 Kotlin 跟 Swift 的对应关系

Swift Kotlin 说明
let / var val / var 常量 / 变量
Optional (?) Nullable (?) 可空类型
struct data class 数据类
protocol interface 协议 / 接口
extension extension function 给已有类型加方法
async / await suspend / coroutine 异步编程
Codable kotlinx.serialization JSON 解码

5.2 Jetpack Compose(Android 声明式 UI)

SwiftUI 的 Android 对应物
必学 难度 ★★★★
Compose 函数 (@Composable) = SwiftUI 的 View
remember / mutableStateOf = SwiftUI 的 @State
ViewModel + StateFlow = SwiftUI 的 @StateObject + ObservableObject
DMSD 03_dev/student_android/ 下 10+ 屏 Compose 代码

5.3 Ktor / Retrofit(Android 网络库)

Android 发 HTTP 请求
高优 难度 ★★★
iOS 用 URLSession 系统库,Android 通常用第三方库 Ktor 或 Retrofit(DMSD 用哪个看 03_dev/student_android/ build.gradle)

5.4 Android NFC API

Android 读 NFC
中优 难度 ★★★★
Android 对 NFC 支持比 iOS 早 + 更开放(不用配置 AASA),但要处理 Intent(Android 应用间消息机制)。

第 6 章 — TypeScript + Vue(老师 Web 端)

老师 Web 端使用频率最低 — 在校老师电脑上跑,不像学生手机端那么个人化。优先级排第 4。但 AC 面接如果问「为什么不全用 App」要能解释。

6.1 TypeScript 基础

TypeScript = JavaScript + 类型系统
高优 难度 ★★★
JavaScript = 浏览器跑的脚本语言(动态弱类型,写错了运行时才知道)
TypeScript = JS 加类型检查 — 写代码时编辑器就报错 — 大型项目几乎都用 TS
interface / type alias = 定义数据形状
泛型 (generics) = 参数化类型

6.2 Vue 3 Composition API

Vue = 前端框架
高优 难度 ★★★★
Vue = Web 前端框架(跟 React / Angular 并列三大)
Composition API = Vue 3 的新写法(跟 React Hooks 类似思路)
ref / reactive = 响应式数据
computed / watch = 计算属性 / 监听
Single File Component = .vue 文件里同时写 template(模板)+ script(逻辑)+ style(样式)
DMSD 03_dev/teacher_web/src/.vue 文件

6.3 Vite(前端打包工具)

Vite = 现代前端开发服务器
中优 难度 ★★
Vite = 法语「快」/ 前端项目本地开发 + 打包工具
Hot Module Replacement (HMR) = 改代码不用刷新页面,浏览器自动更新
跟老的 Webpack 比启动快 10 倍

6.4 Pinia(Vue 状态管理)

跨组件共享数据
中优 难度 ★★★
Pinia = Vue 官方推荐的状态管理库(替代老的 Vuex)。多个组件要共享数据时不用一层层传 props(属性),存到 Pinia store。

第 7 章 — 硬件 + 嵌入式(点呼机端)

硬件层是 DMSD 区别于纯 App 项目的「实物作品」证据 — AC 面接评委看到 itsuki 自己组装的 Pi + NFC 模块 = 极强加分。这一章学的不是写代码,是搞懂硬件原理 + 能讲清楚每个零件为什么选。

7.1 NFC 物理原理

电磁感应是怎么传数据的
必学 难度 ★★★
NFC = Near Field Communication 近场通信 — 工作距离 4cm 以内
原理 = 13.56 MHz 电磁场感应(高中物理课的法拉第电磁感应定律的应用)
被动卡 (passive tag) = 自己没电,被读卡器的磁场激活 — NTAG215 就是被动卡
动态卡 (dynamic tag) = 有微控制器能改内容 — ST25DV16K 就是动态卡
02_design/hardware_design.md + 05_logs/learning_path.md 2026-04-12 条目已写
AC 故事:评委问「为什么 4cm 限制是优势」→ 「电磁场强度随距离立方衰减 → 远了根本耦合不上 → 物理上必须靠近 → 防作弊」

7.2 NFC 卡型号对比(NTAG215 / ST25DV16K)

为什么 DMSD 选 ST25DV16K
高优 难度 ★★
NTAG215 = NXP 公司的被动卡 — 内容写死,便宜(约 5 元 / 张)
ST25DV16K = STMicroelectronics 公司的动态卡 — 内容能被微控制器实时改(DMSD 每 10 秒刷新 nonce)— 贵(约 25 元 / 张)
选 ST25DV16K = 防 URL 复制攻击(NTAG215 内容固定,攻击者抄一份内容贴别处也能签到)
02_design/hardware_design.md §卡选型决策

7.3 PN532 模块

点呼机用的 NFC 读卡模块
高优 难度 ★★★
PN532 = NXP 公司的 NFC 收发芯片
跟 Pi 的连接接口 = I2C / SPI / UART 3 种(DMSD 选 V3 版本 — 接线方式见硬件设计)
跟 nfcpy 库配合在 Python 里读卡
02_design/hardware_design.md + 03_dev/rollcall_device/

7.4 树莓派 GPIO + 外设

Raspberry Pi 3A+ 跟外设接线
高优 难度 ★★★
Raspberry Pi (树莓派) = 信用卡大小的微型电脑,跑 Linux(DMSD 用 3A+ 型号)
GPIO = General Purpose Input / Output 通用输入输出针脚 — Pi 上 40 个针脚能接 LED / 喇叭 / 模块
DMSD 点呼机外设 = PN532 NFC 模块 + LED 灯(签到成功显示绿)+ 喇叭(日语播报「○○ さん おかえりなさい」)
02_design/hardware_design.md §接线 GPIO + 模块选型

7.5 防作弊机制(nonce + ECDSA)

3 层防御
必学 难度 ★★★★★
第 1 层 (物理) = NFC 4cm 距离限制,远程攻击不了
第 2 层 (动态) = ST25DV16K 每 10 秒刷新 nonce — 录下一次 URL 再发就过期了
第 3 层 (签名) = ECDSA 椭圆曲线签名 — 服务器验证「这个 nonce 是我发的」攻击者伪造不出来
02_design/system_features.md §防作弊设计 + 03_dev/backend/services/ 下签名验证代码
AC 故事:评委问「为什么 3 层不是 1 层」→ 「单层都有可能被绕(物理近距离也能用强磁场放大 / nonce 在硬件被破解 / 签名密钥泄露)→ 3 层叠加任何 1 层守住就安全」= 防御深度的思考 = 极强加分
🆕 2026-05-28 扩展:点呼机深度知识包(7.6 - 7.16)
下面从「整体构造 → 配件清单 → 工作原理 → 各部件深度 → 关键概念 → 失败模式」 6 层把点呼机讲到能上 AC 答辩的颗粒度。这一段是面接评委问「你自己组装的这台盒子里面到底是什么」时的弹药库。

7.6 整体构造与设计原则

点呼机 = 一台微型电脑 + 几个模块的盒子
必学 难度 ★★
点呼机是 Tomoshibi 系统 5 端中的一端,4 台部署在宿舍楼层走廊, 干一件事:让学生回宿舍时签到,把签到数据发给后端。

核心设计原则 — thin client / thick server(瘦客户端 / 厚服务器)
  • 点呼机只负责搬运数据(读卡、发网络请求、声光反馈)
  • 所有业务判断(是否准时 / 是否缺席 / 扣几分)全在后端服务器, 以服务器时间 server_now(JST 日本标准时)为准
  • 点呼机本身不做任何「判断对错」的逻辑
物理组成(6 个部件 + 主板)
Raspberry Pi 3 Model A+(主板 / 大脑)
 ├─ PN532 读卡器模块   → 读学生 NFC 卡(路径 A)
 ├─ ST25DV16K 贴纸模块 → 给手机碰一下的动态贴纸(路径 B)
 ├─ LED 状态灯(4 色)  → 蓝待机 / 绿成功 / 红失败 / 白启动
 ├─ USB 小喇叭         → 日语播报学生姓名
 ├─ 散热风扇           → 24×7 运行散热
 └─ micro-USB 电源     → 墙插供电
02_design/hardware_design.md(硬件选型单源真值)+ 03_dev/rollcall_device/ROLLCALL_DEVICE_DESIGN_LOG.md
AC 故事:评委问「这台盒子是什么」→ 「Raspberry Pi 微型电脑 + 5 个外设模块,只搬运数据不做判断 — 所有业务逻辑都在服务器,硬件端尽可能简单 = 故障率低、好维护、单台坏了不影响整体」= 瘦客户端架构思想的实战。

7.7 完整配件清单(11 项 + 单价 + 渠道)

方案 A 首单 1 台演示机 — 日本本地采购
高优 难度 ★
首单合计约 19,800 日元。部署 4 台总计约 56,600 日元
#部件型号 / 规格单价 (¥)渠道接口
1主板 Raspberry Pi 3 Model A+(512MB / 双频 WiFi / 1× USB / 40-pin GPIO / 3.5mm 音频) 5,580秋月電子 (114878)
2电源 micro-USB 5V 3A AD-K50P300 1,100秋月電子 (112001)micro-USB
3读卡器 PN532 V3 红板(3.3V/5V 自适应 / SPI/I²C/UART) 约 1,100Amazon JP(Hailege 套件)SPI(推荐)
4动态贴纸 ST25DV16K(Adafruit 4701 / STEMMA QT / 16 Kbit)× 5(4 部署 + 1 备用) 968 × 5 = 4,840Switch Science (7903)I²C
5学生卡 NTAG215 空白白卡 10 枚装(86×54mm) 约 1,500Amazon JP
6状态灯 5mm LED 红/绿/蓝/白各 1 + 220Ω 抵抗 × 4 约 100秋月電子(绿 OSPG5111A / 112117)数字 GPIO
7散热 5V 30×30×7mm 静音风扇 ⚠️ 必须 5V 不是 12V 约 800Amazon JP5V 电源脚
8喇叭 USB 取电 + 3.5mm 音频输入小音响 ⚠️ 不要买 USB DAC 型 约 1,300Amazon JPUSB + 3.5mm
9面包板 170 孔迷你面包板(BB-601 / SJB-17WH) 150 ~ 439秋月電子 / Sunhayato
10接线 杜邦线 40P 母-母 约 250秋月電子 (g115868)
11转接线 ⚠️ STEMMA QT 转杜邦公头转接线(ST25DV 必需) 约 200Amazon / Switch Science
砍掉的:外壳(暂不买)/ microSD 卡(已有)
正式部署升级项:学生卡 NTAG215 → NTAG424 DNA(防克隆,约 200-400 日元/张 × 100+ 张)
02_design/hardware_design.md §配件单(单源真值)

7.8 两条签到路径(工作原理)

路径 A — 刷 NFC 卡(没手机 / 主力方式)
必学 难度 ★★★
学生把 NTAG215 卡放到点呼机 PN532 读卡器上
 → PN532 读出卡的 UID(7 字节唯一编号)
 → 点呼机通过 WiFi 发 HTTP POST:UID + 点呼机编号 → 后端
 → 后端查 UID 绑定的学生账户 + 判定是否准时
 → 后端推 WebSocket 消息给老师端,座位实时变绿
 → 后端回点呼机:成功 → 绿灯 + 喇叭播报「○○ さん、お帰りなさい」
路径 B — 手机碰一下(动态贴纸防代刷)
必学 难度 ★★★★
点呼机 Python 程序每 10 秒(仅在点呼时间窗内)
向后端请求新 nonce(10 秒时效的一次性随机码)
 → 拼 NDEF URL:https://.../checkin?device=DEV001&nonce=XXX
 → 通过 I²C 把 URL 写进 ST25DV16K 的 EEPROM

学生手机(iPhone/Android)碰一下贴纸
 → 手机 NFC 读出贴纸里的 URL
 → 触发 Universal Link 打开学生 App
 → App 调签到 API(带 nonce)
 → 后端验证 nonce 是否在 10 秒有效期内 → 完成签到
路径 B 防代刷原理:贴纸里的 URL 每 10 秒变一次。 学生想复制 URL 发给同学代签 → 10 秒后那个 URL 就失效了。
AC 故事:评委问「为什么不用静态 NFC 贴纸」→ 「静态贴纸 URL 不变,学生抄一份发到群里就能远程代签 → ST25DV16K 动态贴纸每 10 秒换一次 URL → 复制行为没意义」= 从攻击者视角设计防御 = 安全工程思维。
点呼机本机 6 项职责
高优 难度 ★★
  1. 读 PN532 上的 NFC 卡 UID(路径 A)
  2. 通过 I²C 写 ST25DV16K 的 NDEF URL(路径 B 刷新 nonce)
  3. HTTP POST 签到数据到后端
  4. WebSocket 订阅后端播报指令
  5. 播放日语语音(pyttsx3 / OpenJTalk → 3.5mm 喇叭)
  6. 点亮 LED 状态灯
注意:6 项里没有一项是「判断学生准不准时」— 那是后端的事。

7.9 Raspberry Pi 3 Model A+(主板深度)

为什么选 3A+ 不选 4B / Zero / ESP32
高优 难度 ★★★
规格:4 核 1.4GHz CPU / 512MB 内存(紧但够)/ 双频 WiFi / 1× USB 2.0 / 40 针 GPIO / 3.5mm 模拟音频口 / micro-USB 供电。

选型对比
  • vs Pi 4B:4B 性能过剩(点呼机是瘦客户端用不到); 3A+ 是「最便宜含 3.5mm 音频口」的官方 Pi
  • vs Pi Zero:Zero 无 3.5mm 音频口 → 没法直接接喇叭
  • vs ESP32:跑不了完整 Python + 本地日语语音合成
512MB 内存余量分析
系统 ~100MB + Python 程序 ~50MB + 语音引擎 ~30MB + 驱动 ~50MB + 缓存 ~100MB ≈ 330MB,余约 180MB
优化手段:关 swap 改 zram(内存压缩)/ GPU 内存设 16-32MB / 不在本机跑 VOICEVOX(要 2GB)。

headless 部署:不插键盘鼠标显示器,全程 SSH 远程登录调试 (因为 USB 口被喇叭占了,没法插键鼠 hub)。
AC 故事:评委问「为什么选这块 Pi」→ 「3A+ 是最便宜的同时含 3.5mm 模拟音频口的官方 Pi — 瘦客户端用不到 4B 的性能,Zero 没音频口,ESP32 跑不了 Python + 本地日语 TTS。这是按需求倒推选型,不是越贵越好」。

7.10 PN532 读卡器(深度)

为什么选 SPI 不走 I²C / 为什么不选 RC522
高优 难度 ★★★★
PN532 = NXP 公司出品的 NFC 读卡器界事实标准芯片。 读 13.56MHz / ISO 14443A 标准的卡(NTAG215 学生卡属于这类)。 V3 红板支持 SPI / I²C / UART 三种接口,板上跳线切换。

接口选 SPI(推荐)的 4 个原因
  1. I²C 总线冲突:ST25DV 已占了 I²C 总线,PN532 再走 I²C 容易总线锁死 → 一锁死整机 NFC 全停只能重启
  2. 踩坑多:PN532 走 I²C 在 Pi 上历史问题多
  3. 主流库支持:SPI 模式主流 Python 库支持更完整
  4. 教程丰富:新手教程基本都讲 SPI 接法
SPI 接线:MOSI / MISO / SCK / SS(CE0)/ GND / VCC = 6 根线, 建议额外加 1 根复位线。

不选 RC522 的原因:RC522 不支持 NFC 标签写入 / P2P, 跟项目(要写动态 nonce 到 ST25DV)不兼容。
AC 故事:评委问「PN532 三种接口为什么选 SPI」→ 「I²C 总线已经被 ST25DV 占用,两个 NFC 芯片走同一根 I²C 容易锁死, 一锁死整机得重启 → 让两个 NFC 子系统物理隔离在不同总线上 = 故障隔离」= 系统设计的容错思想。

7.11 ST25DV16K 动态贴纸(深度)

双接口 EEPROM + 寿命算法 + Mailbox 模式
必学 难度 ★★★★★
ST25DV16K = 一种「双接口 EEPROM」: 一边手机能当 NFC 贴纸读(ISO 15693 / NFC Type 5), 一边点呼机能通过 I²C 写。16 Kbit = 2KB 容量(NDEF URL 约 80 字节,绰绰有余)。

EEPROM 擦写寿命(关键参数)
  • 官方 25°C 约 100 万次
  • 85°C 约 60 万次
  • 数据保持约 40 年
寿命算法(重要)— 寿命取决于「每天写几次」
策略每天写磨穿时间
❌ 7×24 全天每 10 秒刷 8,640 次 100 万 ÷ 8,640 = 116 天磨穿
✅ 仅点呼时间窗内刷 120 ~ 360 次 7 ~ 22 年
结论:nonce 刷新必须限定在点呼时间窗内执行,不能全天候跑。

为什么不用静态 NTAG215 当贴纸: 静态贴纸 URL 不变 → 学生复制后永久有效 → 代签漏洞。 ST25DV 能动态改 URL 防代签。

Mailbox / Fast Transfer Mode:ST25DV 有个 256 字节内存缓冲区, 走内存不写 EEPROM,几乎不耗寿命。但只适合「主机 ↔ 手机 App 实时双向握手」, 不适合「手机被动读 NDEF」(手机读的是 EEPROM 不是 Mailbox)→ DMSD 路径 B 用 NDEF 模式不用 Mailbox。

STEMMA QT / Qwiic 接口:4 针 JST-SH 即插即用口, 杜邦线插不进去,要专用转接线(配件单 #11)。
AC 故事:评委问「贴纸不是会写坏吗」→ 「每 10 秒刷一次确实会,全天候跑 116 天就报废 → 所以代码里 nonce 刷新只在点呼时间窗内启动 → 实际写入次数从 8,640 次/天降到 120-360 次/天 → 寿命从 116 天延长到 7-22 年」= 理解硬件物理约束并写进软件控制 = 嵌入式工程思维。

7.12 NTAG215 学生卡 → NTAG424 DNA 升级路径

UID 克隆漏洞 + AES-128 + SUN 机制
高优 难度 ★★★★
NTAG215:NXP 出品的 NFC 卡,CR80 标准(85.6×54mm,银行卡大小)。 7 字节 UID / 540 字节 EEPROM(项目只用 UID,不写数据)。

致命局限:只读 UID 的方案,UID 能被
  • Flipper Zero(便携黑客 NFC 工具)克隆
  • Android HCE(手机模拟卡功能 Host Card Emulation)克隆
升级方案 NTAG424 DNA
  • 内置 AES-128 加密引擎
  • SUN(Secure Unique NFC)动态签名 — 每次刷卡输出不同加密密文
  • 物理克隆 UID 也通不过签名验证
注意:容量大小跟防克隆无关,关键是芯片硬件加密能力。

学生卡生命周期: 入学发卡 + App 绑 UID → 日常签到 → 丢失换卡作废旧 UID → 毕业清绑定回收给下一届。
AC 故事:评委问「NTAG215 不是能被克隆吗」→ 「对,这是有意识的成本权衡:演示阶段先用 NTAG215(5 元/张)跑通流程; 正式部署升级到 NTAG424 DNA(200-400 日元/张)— 内置 AES-128 + SUN 动态签名,每次刷卡密文都不一样,物理克隆 UID 也通不过验证」= 阶段性技术决策能力 + 知道更高级方案存在。

7.13 LED / 风扇 / 喇叭 / 接线(外设坑总集)

LED 状态灯 — 数字 GPIO 不走 PWM
中优 难度 ★★
4 颗 5mm LED:蓝=待机 / 绿=签到成功 / 红=失败 / 白=系统启动中。
接数字 GPIO(红 17 / 绿 27 / 蓝 22 / 白 23,BCM 编号),共地。
每颗串一个 220Ω 限流抵抗(防止电流过大烧坏 LED)。
不走 PWM(脉宽调制调亮度),简单数字开关即可。
散热风扇 — 必须 5V + 接电源脚不接 GPIO 信号脚 ⚠️
必学 难度 ★★★
30×30×7mm 风扇,必须 5V(不是 12V — 12V 接 Pi 5V 脚转不起来)

接法关键
  • ✅ 接 5V 电源脚(物理第 2 或第 4 针)+ 接地脚
  • ❌ 不能接 GPIO 信号脚(信号脚最大 16 mA,风扇要 100 mA 会烧坏 Pi
24×7 运行 Pi 在塑料壳里持续读 NFC 会发热,风扇是廉价保险。
烧主板典型新手坑:「GPIO 针脚都长一样,随便插」→ 信号脚电流上限 16 mA,风扇启动瞬间 100+ mA 直接烧坏 GPIO 驱动电路 → 整块 Pi 报废。这条务必记。
USB 小喇叭 + 日语语音合成方案对比
高优 难度 ★★★
喇叭选型:USB 取电 + 3.5mm 音频输入 (不要买 USB 数据传声型 / USB DAC,那种占 Pi 唯一 USB 口)。

Pi 3A+ 默认音频走 HDMI,要用 raspi-config 命令改成「模拟音频」走 3.5mm 口。

日语语音合成 3 方案对比
方案说明评价
A 推荐 预生成语音文件缓存 — 开发电脑上用 OpenJTalk 提前把每个学生名字生成 .wav,存到 Pi,运行时直接播 ✅ 最稳 + 音质最好 + 省资源
B Pi 上装 OpenJTalk 实时合成 音质好,每次延迟 1-2 秒
C 不推荐 pyttsx3 + espeak / VOICEVOX espeak 日语人名发音机械(最弱场景)/ VOICEVOX 要 2GB 内存跑不动
AC 故事:评委问「日语播报怎么实现」→ 「3 方案都试过,最后选预生成缓存 — 因为学生名字是固定名单,开学一次性生成, 运行时只播 .wav 不做合成 → CPU 占用低、零延迟、音质好。 实时合成是处理不可预测输入用的,这场景不需要」= 理解工程权衡的「按数据特性选方案」。
接线坑 — BCM 编号 vs 物理针脚编号
高优 难度 ★★
开发期:面包板 + 杜邦线,不焊接(随时改接法,失败不报废板子)。
部署期:建议改焊接到万能板(perfboard),防走廊振动接线松脱。

GPIO 编号坑(100% 会踩)
  • BCM 编号:代码里用(如 GPIO.setmode(GPIO.BCM)
  • 物理针脚编号:板子上印的,从 1 开始数
  • 两套编号完全不一样,第一次接线 100% 会搞混 → LED 不亮 / 模块识别不到
排查办法:先 gpio readall 看物理 ↔ BCM 对照表。

7.14 关键技术概念词典(20 个)

下面这 20 个词出现在 hardware_design.md / ROLLCALL_DEVICE_DESIGN_LOG.md / flow_design.md 里, AC 面接可能被问到任意一个。每个词都要能用一句话说清。
概念解释
NFC近场通信,13.56MHz 短距离(2-5cm)无线技术
ISO 14443ANFC 标准之一,NTAG215 学生卡走这个,PN532 读这个
ISO 15693 / NFC Type 5另一个 NFC 标准,ST25DV 贴纸走这个。 PN532 读不了这个(所以两个芯片不会互相误读)
UID卡的唯一编号,7 字节,出厂固定
NDEFNFC 数据交换格式,贴纸里存 URL 用的标准格式
I²C两根线(数据 SDA + 时钟 SCL)的低速通信总线,ST25DV 接这个
SPI四根线的高速通信总线,PN532 推荐接这个
UART串口通信,PN532 第三种可选接口
GPIO通用输入输出针脚,Pi 上 40 针,接 LED / 模块
EEPROM可反复擦写的存储芯片,有擦写次数寿命上限
nonce一次性随机码,10 秒时效,防 URL 复制代签
Universal LinkiOS/Android 的深度链接,点 URL 直接打开 App
WebSocket长连接协议,后端实时推消息给点呼机 / 老师端
HTTP POST点呼机发签到数据给后端的网络请求方式
thin client瘦客户端,只搬数据不做判断
headless无显示器/键鼠,靠 SSH 远程操作
SSH远程登录另一台电脑命令行的工具
AES-128128 位高级加密标准,NTAG424 DNA 防克隆用
SUNSecure Unique NFC,NTAG424 DNA 每次输出不同密文的机制
PWM脉宽调制,调 LED 亮度 / 风扇转速用(本项目 LED 不用)

7.15 24×7 部署常见失败模式(按发生概率)

6 类失败模式 + 对应防御
必学 难度 ★★★★
#失败模式原因防御
1 面包板杜邦线接线松脱 走廊振动 + 温度变化 部署期改焊接到万能板
2 SD 卡损坏 频繁写日志 + 停电 用高耐久卡(Sandisk Max Endurance)
3 学校 WiFi 认证门户 / WebSocket 被代理拦 校园网常见限制 本地签到队列缓冲 + 自动重连
4 供电电压不稳 走廊插座共用电路欠压让 Pi 降频 用 5V 3A 稳压电源 + 监控 throttled 状态位
5 风扇积灰 / 损坏 无尘网 + 长期运转 定期巡检 + 备件
6 ST25DV EEPROM 磨穿 错误地全天候刷新 nonce 只在点呼时间窗内刷(见 7.11)
AC 故事:评委问「24×7 运行你怎么保证稳定」→ 「列了 6 种最可能的故障模式,每种都有对应防御 — 从硬件(焊接、稳压电源)到软件(本地队列缓冲)到运维(定期巡检)。 重点是承认硬件一定会坏,关键是坏了系统不崩」= 可靠性工程思想(Reliability Engineering)。

7.16 学习材料起点(文档定位)

3 份文档读完点呼机就懂了
必学 难度 ★
  1. 02_design/hardware_design.md — 硬件选型 + 配件单单源真值
  2. 03_dev/rollcall_device/ROLLCALL_DEVICE_DESIGN_LOG.md — 点呼机软件层
  3. 02_design/flow_design.md — 签到流程端到端
三份文档读顺序:硬件设计 → 软件设计 → 端到端流程。任何一份对不上代码时, 以硬件设计文档为准(单源真值原则)。

第 8 章 — AC 入試 直接相关知识

这一章不是技术,是 AC 面接评委可能问 + itsuki 必须答得上来的「为什么选筑波 / 为什么选情报科学類」类问题的背景知识。

8.1 情报科学類的 3 个分野

软件科学 / 信息系统 / 智能信息媒体
必学 难度 ★★
软件科学 (ソフトウェアサイエンス) = 软件本身的理论 + 设计
信息系统 (情報システム) = 支撑情报社会的基础设施
智能信息媒体 (知能情報メディア) = 给计算机「眼·智·安全」
02_分析与调研/AC入試制度総覧_2027.html §1.2 + 大学案内 2027 P80
AC 故事:评委问「入学后想学哪个分野」→ DMSD 项目跨这 3 个分野(软件设计 + 后端架构 + NFC 安全),要能挑 1 个主要方向 + 解释理由

8.2 CTF(信息安全竞技)

Capture The Flag 抢旗赛
高优 难度 ★★★★
CTF = 信息安全领域的竞赛形式 — 找系统漏洞 / 破解密码 / 逆向分析
SECCON = 日本最大 CTF 之一
情报科学類学生 2026-03 在 SECCON CTF 14 学生队伍优胜 — 这是 coins 官网最新的对外宣传成绩
AC 故事:评委问「入学后想做什么」→ 答「DMSD 已做防作弊设计 → 想进一步学 CTF 攻防 → 跟筑波在 SECCON 的实绩对接」= 高度匹配筑波招生方向

8.3 SecHack365(日本总务省人才育成项目)

青年信息安全人才项目
中优 难度 ★★
SecHack365 = 日本总务省主办的 25 岁以下青年信息安全人才育成项目(1 年期)。情报科学類学生 2026-03 获优秀修了认定。
AC 故事:可以提「入学后想申请 SecHack365」— 让评委看到 itsuki 知道筑波的资源

8.4 大学案内 P80 人材养成目的

情报科学類想培养什么人
必学 难度 ★
原文:「能定义问题 + 用信息技术创造性解决 + 能解释自己为什么这么做」的人。这就是 AC 入試 3 个评分点(关心 / 能力 / 表达)的源头。
02_分析与调研/AC入試制度総覧_2027.html §1.2

第 9 章 — 项目底层运转逻辑(你的项目怎么从源代码变成跑起来的东西)🆕

itsuki 原话:「想搞懂自己项目怎么运转起来的」。这一章是「从你写一行代码到用户手机上跑出来」整条链路。AC 评委如果问「你的 iPhone 怎么把数据传到后端」,必须能答全链路 — 从应用层一路讲到物理层。

9.1 操作系统基础

9.1.1 进程 / 线程 / 协程(process / thread / coroutine — 操作系统跑程序的 3 种粒度)
高优 难度 ★★★
进程 = 操作系统给程序分的独立内存空间(互相隔离)/ 线程 = 进程内部能并行的执行流(共享内存)/ 协程 = 程序自己调度的轻量级线程(不需要操作系统切换)
DMSD 里:FastAPI(后端框架)每个请求一个协程 / iOS Swift async-await(异步语法)底层是协程
AC 故事:评委问「100 个学生同时签到怎么不卡」→ 答「协程让一个线程能处理上千请求,不用为每个请求开一个进程」
9.1.2 内存管理(memory management — 程序怎么用内存)
中优 难度 ★★★
栈(stack 自动分配局部变量,函数返回就回收)/ 堆(heap 手动分配复杂对象)/ ARC(Automatic Reference Counting 自动引用计数,编译期决定释放点)/ GC(Garbage Collection 垃圾回收,运行时定期扫描)
DMSD 里:Swift 用 ARC / Kotlin + Python 用 GC
AC 故事:评委问「为什么 Swift 不用 GC」→ 答「ARC 编译期决定释放点更可预测,移动端避免 GC 暂停带来的卡顿」
9.1.3 文件系统(filesystem — 文件怎么存在硬盘上)
中优 难度 ★★
inode(文件元信息:大小 / 时间戳 / 权限位)/ 目录树(树形组织)/ 权限位 rwx(read 读 / write 写 / execute 执行)
DMSD 里:Mac 上 APFS(Apple File System 苹果文件系统)/ Raspberry Pi 上 ext4(Linux 文件系统)

9.2 网络底层(iPhone → 后端 的物理链路)

9.2.1 TCP/IP 4 层模型(互联网通信的分层标准)
必学 难度 ★★★
链路层(Wi-Fi / 网线 — 物理传输)/ 网络层(IP 地址 + 路由 — 知道发去哪台机器)/ 传输层(TCP 可靠有序 / UDP 不可靠但快)/ 应用层(HTTP / WebSocket / DNS 等)
DMSD 里:你的 HTTP 请求实际是「HTTP 装在 TCP 里、TCP 装在 IP 里、IP 装在 Wi-Fi 帧里」一层层包起来发出去
AC 故事:评委问「断网怎么办」→ 能从 TCP 重传机制讲到应用层重试策略
9.2.2 DNS(Domain Name System 域名解析系统)
高优 难度 ★★
dmsd.example.jp 这样的域名变成 IP 地址。电脑先问 DNS 服务器「这名字对应哪个 IP」才能连过去。
DMSD 里:iPhone 怎么找到后端服务器 — 先 DNS 查询拿到 backend 的 IP,再发 HTTP 请求
9.2.3 TLS / HTTPS(Transport Layer Security 传输层安全)
必学 难度 ★★★★
HTTP 明文传输能被中间人窃听 / TLS 在 TCP 之上加密 + 用证书验证服务器身份 / HTTPS = HTTP + TLS
DMSD 里:NFC 防作弊设计第 3 层 ECDSA 签名跟 TLS 证书用的是同一种椭圆曲线数学
AC 故事:评委问「攻击者截获学生签到 URL 怎么办」→ 能讲 HTTPS 防窃听(加密)+ ECDSA 防伪造(签名)双重保护

9.3 编译与解释(你写的代码怎么变成能跑的东西)

9.3.1 编译型 vs 解释型
高优 难度 ★★
编译型:Swift / Kotlin / Rust — 编译器(compiler)把源代码一次性翻译成机器码或字节码再跑(运行快、错在编译期发现)
解释型:Python / JavaScript — 解释器(interpreter)边读源代码边跑(启动快、错在运行时才发现)
DMSD 里:iPhone 上跑的是 Swift 编译后的 ARM 机器码 / 后端跑的是 Python 解释器读 .py 源码
9.3.2 字节码 / 虚拟机(bytecode / virtual machine — 中间形态)
中优 难度 ★★★
源代码先编译成跨平台的「中间码」(字节码),运行时再由虚拟机翻译成机器码。好处:一份代码跑多平台。
Kotlin → JVM 字节码(Java Virtual Machine Java 虚拟机执行的中间码)→ Android 上由 ART 运行时翻译成 ARM 机器码
DMSD 里:你的 Android 代码就走这条路
9.3.3 抽象语法树(AST = Abstract Syntax Tree — 编译器看源代码的内部数据结构)
低优 难度 ★★★
你写的 let x = 1 + 2 编译器先把它变成一棵树(赋值节点 → 加法节点 → 两个数字叶子)才能处理。
DMSD 里:你装的 graphify 工具就是用 AST 分析代码结构画依赖图

9.4 数据库底层

9.4.1 B 树索引(B-tree / B+ 树 — PostgreSQL 默认索引结构)
高优 难度 ★★★
一种平衡多叉树数据结构,让百万行表的查询从 O(n) 全表扫降到 O(log n) — 100 万行查询从 100 万次比较降到约 20 次。
DMSD 里:students 表的 student_id 主键自动建 B 树索引;想给 school_id 字段加索引也是建 B 树
9.4.2 事务 ACID(Atomicity / Consistency / Isolation / Durability — 数据库事务 4 性质)
必学 难度 ★★★
原子性(一组操作要么全成功要么全失败)/ 一致性(事务前后数据库都满足约束)/ 隔离性(并发事务不互相干扰)/ 持久性(提交后哪怕断电也不丢)
DMSD 里:学生签到 + 扣分必须同一个事务 — 不能签到成功但扣分失败,否则学生白扣或白签
AC 故事:评委问「签到中途数据库挂了怎么办」→ 答「事务回滚机制保证不会出现签到了但没扣分的脏数据」
9.4.3 锁与并发控制(lock / MVCC = Multi-Version Concurrency Control 多版本并发控制)
高优 难度 ★★★★
传统锁:读写互相阻塞 / MVCC:每次写产生新版本,读永远不阻塞(PostgreSQL 默认用这个)
DMSD 里:100 个学生同时签到 PostgreSQL 用 MVCC 处理并发不冲突
AC 故事:评委问「同一秒 50 个签到怎么处理」→ 能讲 MVCC 多版本机制不需要排队

9.5 异步编程深度

9.5.1 事件循环(event loop — async 怎么实现的)
高优 难度 ★★★★
单线程靠不停切换任务模拟并发:碰到 I/O 等待就挂起当前任务转去跑别的,I/O 回来再恢复。比多线程省内存(不用为每个任务分配线程栈)。
DMSD 里:FastAPI 后端 + iOS Swift async 都用事件循环
9.5.2 回调地狱 → Promise → async/await(异步编程演进史)
中优 难度 ★★★
3 代异步语法:
① 回调(callback)— 嵌套深难读,错误处理散乱
② Promise / Future — 链式调用 .then().then()
③ async/await — 写起来像同步代码,实际是异步
AC 故事:评委问「为什么不直接用回调」→ 能讲异步语法演进史

第 10 章 — 计算机科学基础(情报科学類 1-2 年共通课预习)🆕

大学案内 P80 写情報科学類 1-2 年共通课 = 线性代数 / 微积分 / 概率统计 / 逻辑 / 形式语言 / 编程入门 / 计算机硬软件结构 / 数值算法 / 面向对象编程。这一章把这些预习一遍。AC 面接评委问「入学后想学什么」答得出具体科目 = 加分。

10.1 离散数学(discrete mathematics)

10.1.1 命题逻辑 / 谓词逻辑
高优 难度 ★★★
数学逻辑基础 — 编程的 if 判断 / 布尔代数 and / or / not / 量词「存在 / 任意」全是从这来的
10.1.2 集合 / 关系 / 函数
高优 难度 ★★★
数据库表的理论基础就是「集合 + 关系代数」— SQL 的 SELECT / JOIN / UNION 全是关系运算
DMSD 里:你写 SQL 查学生表关联出席表本质就在做关系代数运算
10.1.3 图论(graph theory)— 顶点 + 边
中优 难度 ★★★
社交网络 / 路径规划 / 网页链接全是图。算法:最短路径 / 最小生成树 / 拓扑排序
DMSD 里:学生宿舍楼层平面图就是图(房间 = 顶点,相邻 = 边);模块依赖也是图
10.1.4 组合数学 — 排列组合 / 容斥原理
中优 难度 ★★★
概率计算的前置 / 算法复杂度分析 / 密码学搜索空间估算全要

10.2 线性代数(linear algebra)

向量 / 矩阵 / 线性变换 / 特征值
高优 难度 ★★★★
机器学习 / 计算机图形学 / 信号处理 / 量子计算全靠线性代数
AC 故事:评委问「想做机器学习吗」→ 答得出「先要补线性代数」就是会读 paper 的基础

10.3 微积分(calculus)

极限 / 导数 / 积分 / 多元微积分
高优 难度 ★★★★
信号处理 / 机器学习里的梯度下降 / 物理模拟全要。导数 = 变化率,积分 = 累计量。

10.4 概率与统计(probability and statistics)

概率 / 条件概率 / 贝叶斯定理 / 大数定律 / 假设检验
高优 难度 ★★★★
贝叶斯定理 = 用观测到的证据更新先验信念 / 假设检验 = 判断观察结果是否够「显著」
DMSD 里:你的扣分体系用了平均值 + 阈值 = 简单统计
AC 故事:评委问「为什么扣 8 分不是 10 分」→ 能讲统计分布 / 历史出席数据的均值方差

10.5 算法与数据结构(algorithms and data structures)

10.5.1 数据结构 — 数组 / 链表 / 栈 / 队列 / 树 / 图 / 哈希表
必学 难度 ★★★
每种结构擅长不同操作:数组随机访问快 / 链表插入快 / 哈希表查找 O(1) / 树形维持有序
10.5.2 排序算法 — 冒泡 / 快速 / 归并 / 堆排序
高优 难度 ★★★
经典面试题。各自的时间复杂度 / 稳定性 / 适用场景。
10.5.3 搜索算法 — 二分 / 深度优先 DFS / 广度优先 BFS
必学 难度 ★★★
二分 = 有序数组里 O(log n) 找元素 / DFS = 一条路走到黑 / BFS = 一层一层扩展
10.5.4 复杂度分析 — 大 O 记号 O(1) / O(log n) / O(n) / O(n²)
必学 难度 ★★★
描述算法在输入规模增大时的时间 / 空间增长速度。判断算法好坏的通用语言。
AC 故事:评委可能直接出算法题

10.6 计算机体系结构(computer architecture)

CPU / 寄存器 / 缓存 L1 L2 L3 / 内存 / 硬盘 — 存储层级
中优 难度 ★★★
越靠近 CPU 越快但越小 / 越远越慢但越大。缓存命中率决定程序性能。
指令集(ISA = Instruction Set Architecture)— ARM 苹果用 / x86 桌面用
中优 难度 ★★★
ARM = 精简指令集(RISC,省电,移动端 / Mac M 系列) / x86 = 复杂指令集(CISC,性能高,Intel / AMD 桌面)
AC 故事:评委问「为什么 iPhone 比 Pi 快」→ 能从指令集 + 缓存大小 + 时钟频率讲

10.7 形式语言与自动机(formal languages and automata)

正则表达式 / 上下文无关文法 / 图灵机
低优 难度 ★★★★
正则 = 描述字符串模式 / 上下文无关文法 = 描述编程语言语法 / 图灵机 = 可计算性理论的源头
DMSD 里:你已用过正则(验证学生注册码格式)
AC 故事:这是编译原理基础,能说出「想学编译原理」很加分

10.8 面向对象编程理论(OOP 理论)

封装 / 继承 / 多态 / 抽象 — 4 原则
高优 难度 ★★
封装 = 隐藏内部细节只暴露接口 / 继承 = 子类复用父类 / 多态 = 同一接口多种实现 / 抽象 = 提取共性
DMSD 里:后端 SQLAlchemy model / iOS Swift class 都用 OOP
SOLID 5 原则
中优 难度 ★★★
S 单一职责 / O 开闭 / L 里氏替换 / I 接口分离 / D 依赖倒置 — OOP 进阶设计准则

第 11 章 — 信息安全深度(CTF / SecHack365 方向预习)🆕

coins 官网 2026-03 实绩 = SECCON CTF 14 学生优胜 + SecHack365 优秀修了。AC 面接答「入学后想做信息安全方向」必须对这领域有概念。这一章把 DMSD 防作弊已经在用的密码学拉到数学层,再往外扩展到 CTF 5 大类。

11.1 密码学基础

11.1.1 对称加密 — AES(Advanced Encryption Standard 高级加密标准)
必学 难度 ★★★
同一把钥匙加密又解密 / AES 是现役标准 / DES 是被淘汰的老旧标准
11.1.2 非对称加密 — RSA / ECC
必学 难度 ★★★★
公钥加密、私钥解密 / RSA 是最经典(大整数分解难题)/ ECC 椭圆曲线密码(同等安全密钥更短)
11.1.3 哈希函数 — MD5(弃用)/ SHA-256(现役)
必学 难度 ★★
单向不可逆 / 任意长度输入 → 固定长度输出 / 雪崩效应(输入改一个 bit 输出完全变)
DMSD 里:学生注册码用 hash 防伪
11.1.4 数字签名 — 用私钥签名 + 公钥验证
必学 难度 ★★★
证明「这消息确实是私钥持有者发的」+「没被篡改」
DMSD 里:NFC 防作弊第 3 层 ECDSA 签名

11.2 椭圆曲线密码学(ECC = Elliptic Curve Cryptography)

椭圆曲线的数学(y² = x³ + ax + b
高优 难度 ★★★★★
椭圆曲线上定义「加法运算」/ 选一个基点 G / 反复加 G 得到的点构成密钥空间
离散对数难题 — 为什么 ECC 难破
高优 难度 ★★★★★
给点 P 和 G,求出 k 让 P = k·G 在椭圆曲线上是已知最难的数学问题之一 — 这就是 ECC 安全的源头
ECDSA(Elliptic Curve Digital Signature Algorithm 椭圆曲线数字签名算法)
必学 难度 ★★★★
基于 ECC 的数字签名算法 / 比特币 / TLS 1.3 / 现代 NFC 卡都用
DMSD 里:NFC 防作弊第 3 层
AC 故事:评委问「为什么不用 RSA」→ 答「ECC 256 位密钥相当于 RSA 3072 位的安全级别,密钥短 10 倍,适合 NFC 卡的小存储空间」

11.3 网络安全攻击与防御

11.3.1 SQL 注入(SQL injection)
必学 难度 ★★★
把 SQL 字符串跟用户输入拼起来 → 攻击者输入 ' OR '1'='1 就能绕过登录验证。防御:用参数化查询,不要字符串拼接。
DMSD 里:SQLAlchemy ORM 默认用参数化查询,所以本身就防 SQL 注入
11.3.2 XSS(Cross-Site Scripting 跨站脚本)
高优 难度 ★★★
把恶意 <script> 注入网页 → 别人访问时执行偷 cookie / 改 DOM。防御:输出时转义 / CSP 头限制脚本来源。
11.3.3 CSRF(Cross-Site Request Forgery 跨站请求伪造)
中优 难度 ★★★
诱导已登录用户的浏览器去发请求(比如点击伪造链接转账)/ 防御:CSRF token / SameSite cookie
11.3.4 中间人攻击(Man-in-the-Middle / MITM)
高优 难度 ★★★
攻击者卡在通信双方中间窃听 / 篡改 / 防御:TLS 证书验证 + 公钥固定(pinning)
11.3.5 重放攻击(replay attack)
必学 难度 ★★★
录下合法请求再发一遍冒充合法用户 / 防御:nonce(一次性随机数)+ 时间戳
DMSD 里:NFC 防作弊第 2 层动态 nonce(每 10 秒刷新)就是防重放

11.4 CTF 5 大类

11.4.1 Reverse Engineering 逆向工程
中优 难度 ★★★★
反编译别人的二进制程序找逻辑 / 找漏洞 / 工具:IDA Pro / Ghidra / radare2
11.4.2 Web — 网站漏洞利用
高优 难度 ★★★
SQL 注入 / XSS / SSRF / 命令注入等利用 / 跟你 DMSD backend 直接相关
11.4.3 Crypto 密码学
高优 难度 ★★★★
破解弱加密 / 找密码协议漏洞 / 跟你的 ECDSA 知识衔接
11.4.4 Pwn 二进制利用
低优 难度 ★★★★★
缓冲区溢出 / ROP / 内存破坏漏洞利用 / 最硬核的一类
11.4.5 Forensics 取证
中优 难度 ★★★
从数据残留(内存 dump / 网络包 / 磁盘镜像)找证据
AC 故事:能讲「CTF 5 大类我对 Web + Crypto 最感兴趣 + 为什么」= 高度匹配筑波 SECCON 实绩

第 12 章 — 软件工程(DMSD 工程化实践对应的理论)🆕

DMSD 已经在做的工程化(规格冻结 / 联动检查 / hooks / commit 规范 / 文档先行)背后都有理论。AC 评委问「为什么这么做」时要能引用理论术语,不是只会说「感觉这样好」。

12.1 版本控制理论

Git 内部结构 — blob / tree / commit / ref
高优 难度 ★★★
blob = 文件内容快照 / tree = 目录结构 / commit = 一次提交快照(指向一个 tree + 父 commit)/ ref = 分支指针(branch 本质是指向某个 commit 的可移动指针)
DMSD 里:你已经积累 200+ commit,理解 Git 内部模型后能更安全地用 rebase / cherry-pick
merge vs rebase — 两种合并策略
中优 难度 ★★★
merge = 保留分支历史,产生 merge commit / rebase = 把分支提交「移植」到主干上,历史变直线 / 各有取舍

12.2 测试理论

12.2.1 单元测试(unit test)
高优 难度 ★★
测一个函数 / 方法的行为 / 跑得快 / 数量最多 — 测试金字塔的底
12.2.2 集成测试(integration test)
中优 难度 ★★★
测多个组件一起协作(比如后端 + 数据库一起跑)/ 数量中等 / 比单测慢
12.2.3 端到端测试(E2E = end-to-end)
中优 难度 ★★★★
模拟真实用户全流程(启动 app → 点按钮 → 看结果)/ 慢 + 脆 / 数量最少
12.2.4 TDD(Test-Driven Development 测试驱动开发)
中优 难度 ★★★
红 → 绿 → 重构循环:先写失败的测试 → 写最少代码让它通过 → 重构 / 强制思考接口设计

12.3 设计模式(design patterns)

GoF 23 种常见模式 — 选 5-6 个先看
中优 难度 ★★★
Singleton 单例 / Observer 观察者 / Factory 工厂 / Strategy 策略 / Decorator 装饰器 / Adapter 适配器 — 常见的先掌握
DMSD 里:SwiftUI 的 @ObservedObject / @StateObject 就是观察者模式

12.4 重构(refactoring)

不改功能改结构 — 让代码更易懂
高优 难度 ★★★
代码异味(code smell)信号:长函数 / 重复代码 / 上帝类(一个类管所有事)/ 神秘命名
DMSD 里:v0.5 → v0.6 你重写 system_features.md 357 行 → 830 行 = 文档级重构

12.5 持续集成 / 持续部署(CI/CD = Continuous Integration / Continuous Deployment)

CI 每次 push 自动跑测试 / CD 测试过自动部署
中优 难度 ★★★
减少「在我电脑上能跑」类问题 / 工具:GitHub Actions / GitLab CI / Jenkins
DMSD 里:目前没正式 CI/CD,但 pre-commit hook + sync-check.sh 算 CI 的雏形

12.6 监控 / 日志 / 可观测性(observability)

日志 / 指标 / 链路追踪 — 3 大支柱
中优 难度 ★★★
日志(log 事件流)/ 指标(metrics 数值时序)/ 链路追踪(trace 跨服务调用链)/ 系统跑起来才能查问题
DMSD 里:backend 已有日志输出,但还没结构化日志 + Prometheus 指标

12.7 文档驱动开发(DDD = Documentation-Driven Development)

先写规格 / 设计文档 → 再写代码
高优 难度 ★★
DMSD 用的方式 / 跟 TDD 测试驱动并列的另一种开发哲学 / 适合多端协同的项目(先对齐接口再各端实现)
DMSD 里:02_design/system_features.md 就是「先冻结再写代码」的载体
AC 故事:评委问「为什么先写文档再写代码」→ 能讲 DDD 理论 + 跟 DMSD 5 端同步的实际收益

第 13 章 — 推荐学习顺序(给参考,非强制)

以下顺序按「AC 时间表」+「学一个能立刻看懂代码」+「先易后难」综合排。itsuki 可以按自己节奏调整。新增的第 9-12 章建议「Part A 主线穿插」— 学到具体技术点时顺手翻对应底层章节(比如学 backend HTTP 时翻 9.2 网络)/ 不单独安排时段。

阶段 A — 现在到 6/15 R9 募集要项公表(21 天)

学什么 预期产出
第 1 周(5/25-5/31) 第 1 章项目熟悉(全章 6 节) 能口头说清楚 DMSD 11 个顶层目录干嘛 + 5 端各自的代码在哪
第 2 周(6/1-6/7) 第 2 章通用基础(2.1-2.4 命令行 / Git / 路径 / JSON) 能用终端 + Git 操作项目(不依赖 CC 替你跑命令)
第 3 周(6/8-6/14) 第 2 章通用基础(2.5-2.7 HTTP / 数据库 / 安全) 能讲清楚 DMSD 的「客户端 → HTTP → backend → 数据库」全链路

阶段 B — 6/15 到 9/3 出愿截止(11 周)

这 11 周 itsuki 的主任务是写志愿理由书 + 自我推荐书 + 收集添付资料 — 学习时间应该减量,不要为了学新东西耽误出愿。
学什么 预期产出
第 4-6 周 第 3 章 Python(3.1-3.4 语法 + FastAPI + SQLAlchemy + Pydantic) 能读懂 DMSD backend 60% 的代码
第 7-9 周 第 4 章 Swift + SwiftUI(4.1-4.4 语法 + UI + 状态 + 导航) 能读懂 DMSD iOS 端 60% 的代码 — AC demo 演示能讲
第 10-12 周 第 8 章 AC 直接相关(人材养成 / CTF / SecHack365)+ 第 7 章硬件原理(7.1-7.2) 面接素材成型 — 能讲为什么选筑波 / 入学后想做什么
第 13-14 周(出愿前最后 2 周) 停止学新东西,全力写 / 检查出愿材料 9/3 出愿截止前所有材料准备完成

阶段 C — 9/3 出愿后到 11/2 最终合格(约 8 周)

阶段 学什么 预期产出
9/3 - 10/1(第 1 段结果通知前) 不学新东西,把已经学过的所有内容做「能讲清楚」训练 — 每个条目对着镜子或者跟 CC 模拟问答 1 遍 每个学过的技术点都能用 30 秒讲清楚原理 + 1 分钟讲清楚 DMSD 怎么用
10/1 - 10/17(第 2 段面接前) 第 7 章硬件深度(7.3-7.5 模块 / GPIO / 防作弊 3 层)+ 第 2 章 2.7 安全深度 面接评委问技术细节能完整答
10/17 - 10/20(面接期间) 不学新东西,专注面接
11/2 最终合格发表后 看结果调整 — 合格则继续学 Kotlin / Vue 等剩余章节为入学准备

不在阶段 A/B/C 主线的章节

章节 建议学习时机
第 5 章 Kotlin + Compose 合格之后 → 入学前的「先发优势」准备
第 6 章 TypeScript + Vue 合格之后 / 老师 Web 端有具体功能要做时再学
第 3.5 Alembic 数据库迁移 backend 真上线前学(demo 阶段不需要)
第 3.6 nfcpy 点呼机硬件到货后再学(实物在手才有意义)
Part B

QTS 量化交易 — 终极知识地图

16 章 / 90+ 条目 · 不是「明天就要学完」/ 是「沿着 QTS 这条线走到能上实盘路上会撞到的知识全集」
按 #008 决策 DMSD 优先 · QTS 节奏让位 · 这里是「方向地图」让 itsuki 知道前面有什么山要爬
清单本身可以当 AC 素材 — 「面对完全陌生领域自己拆解出 16 大类知识地图」这件事就是 AC 入試可展示的能力

Part B 引言 — 为什么 QTS 单列一块

跟 Part A 的关系:Part A(DMSD + AC)是眼前主线,时间冲突时 Part A 优先。Part B 提到的「Python / 数据库 / Linux / Docker / 安全」等也在 Part A 出现过 — 不重复列,QTS 自己的特化部分(金融 / 市场 / 回测 / 策略)才是 Part B 的真核心。
性质:「终极清单」不是「学习计划表」/ 零基础起步 / 按学习路径顺序排(前置基础 → 金融认知 → 策略 → 回测 → 实盘 → 进阶)。
范围限定 QTS 相关:没列日语 / AC 出愿准备 / 数学高考。如果未来要扩到「全部学习内容」由 itsuki 拍板。

QTSQ1 — 编程基础(前置必备)

写代码本身的能力 — 没有这个连别的都学不动。跟 Part A 第 3 章 Python 部分重叠,QTS 角度补充:量化界几乎垄断用 Python,所以学 Python 是双向投资。
Q1.1 Python 基础语法
必学 难度 ★★
Python = 量化界几乎垄断的工具 / 变量 / 流程控制 / 函数 / 类
QTS 视角:所有量化库(pandas / numpy / backtrader / vnpy)都是 Python
Q1.2 命令行 / 终端基础
必学 难度 ★
cd(切目录)/ ls(列文件)/ 管道 | / 重定向 >
Q1.3 Git 版本控制
必学 难度 ★★
commit / 分支 / 远程仓库 — 策略迭代必须有版本管理,不然哪天回测好了不知道是哪版策略
Q1.4 数据结构基础
高优 难度 ★★★
列表 / 字典 / 集合 / 树 / 图 — 处理行情数据每天都要用
Q1.5 调试与测试
高优 难度 ★★★
打日志 / 断点 / 单元测试 — 策略代码错一个符号能亏几百万,必须能调能测

QTSQ2 — 数学与统计基础

量化交易的本质是用数学描述市场,没有这块连别人在说什么都听不懂。
Q2.1 概率论
必学 难度 ★★★★
条件概率 / 贝叶斯定理 / 常见分布(正态 / 对数正态 / 泊松)/ 股价对数收益率近似正态是大多数模型的前提
Q2.2 描述统计
必学 难度 ★★★
均值 / 方差 / 偏度(分布是否对称)/ 峰度(尾部多厚)/ 分位数 — 因子分析必备
Q2.3 假设检验
高优 难度 ★★★★
t 检验 / 卡方 / p 值(统计显著性指标)— 判断因子是不是「真的有效」还是运气
Q2.4 线性代数
高优 难度 ★★★★
矩阵运算 / 特征值 / 主成分分析 PCA — 多因子合成 + 风险模型必备
Q2.5 时间序列
必学 难度 ★★★★★
自相关 / 平稳性 / ARMA / ARIMA(时间序列预测模型)/ 行情数据本质就是时间序列
Q2.6 微积分基础
高优 难度 ★★★★
导数 / 积分 / 最优化 — 组合优化 / 期权定价全要
Q2.7 随机过程
中优 难度 ★★★★★
布朗运动 / 鞅 / 马尔可夫链 — 期权定价 / 高频建模理论源头

QTSQ3 — 金融市场基础

搞清楚自己在跟什么打交道。
Q3.1 金融市场分类
必学 难度 ★★
一级(发行)/ 二级(流通)/ 场内(交易所)/ 场外(OTC)
Q3.2 市场参与者
必学 难度 ★★
散户 / 机构(公募 / 私募 / 对冲基金)/ 做市商 / 监管
Q3.3 主要金融工具
必学 难度 ★★★
股票(普通股 / 优先股 / ADR 美国存托凭证)/ 债券(国债 / 公司债 / 收益率曲线)/ 期货(合约 / 保证金 / 移仓换月)/ 期权(Call 看涨 / Put 看跌 / Greeks 希腊字母 / Black-Scholes 期权定价模型)/ ETF(交易所交易基金 / 指数 / 杠杆 / 反向)/ 外汇 / 加密货币
Q3.4 各市场特点(美 / 日 / 港 / A 股)
必学 难度 ★★★
交易时段 / 涨跌停 / 结算规则差异 — 跨市场策略前必须搞清楚

QTSQ4 — 市场微观结构

「订单怎么撮合成交」的底层机制 — 影响所有实盘细节。
Q4.1 订单簿(买卖双方挂单的队列)
必学 难度 ★★★
五档 / 十档 / 全息(完整 limit order book)
Q4.2 撮合机制
必学 难度 ★★★
连续竞价(盘中)/ 集合竞价(开盘 / 收盘)
Q4.3 流动性 / 买卖价差 / 市场深度
高优 难度 ★★★
流动性 = 想成交多快能成交 / spread = 买一卖一价差 / 深度 = 每档挂单总量
Q4.4 做市商角色
中优 难度 ★★★
同时挂买卖单赚价差 / 提供流动性 / 承担库存风险
Q4.5 高频交易对市场的影响
中优 难度 ★★★★
提供流动性 / 缩小价差 / 但加剧极端行情(闪崩)

QTSQ5 — 日本市场特化(TSE + moomoo)

非通用知识 — 但 QTS 要在日本跑就必须懂。itsuki 在日本 + 用 moomoo,这一章是「不能跳的章」。
Q5.1 东证 TSE(Tokyo Stock Exchange 东京证券交易所)规则
必学 难度 ★★★
前场(9:00-11:30)/ 后场(12:30-15:30)/ 立会外取引 / 涨跌停规则 / 单位股数(100 株)
Q5.2 税务制度
必学 难度 ★★★
特定口座源泉征收 / 一般口座 / NISA(少额投资非课税制度)/ 报税流程
Q5.3 法律
高优 难度 ★★★★
金融商品取引法 / 内幕交易禁止(インサイダー取引)/ 高频交易限制
Q5.4 moomoo / 富途日本
必学 难度 ★★★
可交易品种 / 手续费结构 / openD 网关 / moomoo OpenAPI 接口文档 / 模拟盘 vs 实盘差异

QTSQ6 — 量化交易理论

真正进入「量化」这门学科。
Q6.1 什么是量化交易
必学 难度 ★★
跟主观交易 / 高频交易的区别 / 共同特征:规则化 + 数据驱动 + 可回测
Q6.2 alpha / beta 概念
必学 难度 ★★★
alpha = 超额收益(跑赢市场的部分)/ beta = 跟市场的相关性 / 策略目标通常是「正 alpha + 可控 beta」
Q6.3 策略大类
必学 难度 ★★★★
趋势跟踪(动量 / 突破)/ 均值回归(统计套利 / 配对交易)/ 套利(跨市场 / 跨期 / 三角)/ 事件驱动(财报 / 并购)/ 因子投资(价值 / 动量 / 质量 / 低波动)/ 高频做市 / 机器学习驱动策略
Q6.4 因子模型
高优 难度 ★★★★
CAPM 资本资产定价模型 / Fama-French 三因子 + 五因子 / APT 套利定价理论
Q6.5 投资组合理论
高优 难度 ★★★★
Markowitz 均值方差 / Black-Litterman / 风险平价(risk parity)
Q6.6 经典著作
高优 难度 ★★★★
Ernest Chan《Quantitative Trading》系列 / López de Prado《Advances in Financial Machine Learning》/ Rishi Narang《Inside the Black Box》

QTSQ7 — 数据

没有干净的数据,再好的策略也是空中楼阁。
Q7.1 行情数据类型
必学 难度 ★★
tick 逐笔 / 1 分钟 / 5 分钟 / 日线 / 周线 — 频率决定策略类型
Q7.2 基本面数据
必学 难度 ★★★
财报 / 估值 / 行业分类
Q7.3 另类数据
中优 难度 ★★★
新闻 / 卫星图像 / 社交媒体 / 搜索趋势 — 现代量化的 alpha 增量
Q7.4 数据问题(陷阱)
必学 难度 ★★★★
复权(前复权 / 后复权)/ 时区 / 时间戳对齐 / 缺失值 / 异常值 / 幸存者偏差(已退市股票被剔除导致回测虚高)
Q7.5 数据存储
高优 难度 ★★★
CSV / Parquet(列式存储格式,pandas 友好)/ HDF5 / 时序数据库(InfluxDB / TimescaleDB)/ 关系数据库(SQLite / PostgreSQL)

QTSQ8 — 数据处理工具链(编程层)

Q8.1 pandas(Python 的表格数据库)
必学 难度 ★★★
DataFrame 操作 / 时序对齐 / groupby 分组聚合 — 量化每天都用
Q8.2 numpy(Python 的数值计算库)
必学 难度 ★★★
向量化运算 — 用 numpy 写比纯 Python 循环快 100 倍
Q8.3 可视化 — matplotlib / plotly
必学 难度 ★★
画 K 线图 / 回测净值曲线 / 因子分布 / 不可视化就发现不了问题
Q8.4 SQL(结构化查询语言)基础
必学 难度 ★★★
查询 / 联表 JOIN / 聚合 GROUP BY — 跟 DMSD 后端 SQLAlchemy 知识可复用

QTSQ9 — 策略开发

Q9.1 因子构造
必学 难度 ★★★★
技术因子(动量 / 反转 / 波动率 / 成交量)/ 基本面因子(PE 市盈率 / PB 市净率 / ROE 净资产收益率 / 增长率)/ 情绪因子(新闻情感 / 论坛热度)
Q9.2 信号生成
高优 难度 ★★★★
单因子检验(IC / IR)/ 多因子合成 / 因子正交化(剔除因子间相关性)
Q9.3 仓位管理
必学 难度 ★★★★
等权 / 市值加权 / 风险加权 / Kelly 凯利公式 / 固定比例
Q9.4 组合优化
高优 难度 ★★★★★
均值方差优化 / 风险预算 / 行业 + 个股 + 换手率约束

QTSQ10 — 回测(陷阱比方法重要)

回测是量化交易最容易自欺欺人的环节。这一章的「陷阱知识」比「方法知识」更重要 — 大多数策略失败是因为回测设计错了,不是策略本身错了。
Q10.1 回测引擎设计 — 事件驱动 vs 向量化
必学 难度 ★★★★
事件驱动 = 一根 bar 一根 bar 模拟,更真实更慢 / 向量化 = 整段时间一次性算,快但易出错
Q10.2 常见偏差识别(重点)
必学 难度 ★★★★★
前视偏差(look-ahead bias — 用了未来才知道的信息)/ 幸存者偏差(survivorship bias — 退市股被剔除导致样本偏好)/ 过拟合(参数调得太合历史数据反而在未来失效)/ 数据窥探(data snooping — 同一份数据反复试到看起来有效为止)
Q10.3 现实约束建模
必学 难度 ★★★★
手续费 / 滑点(实际成交价比预期差)/ 涨跌停 / 停牌 / 流动性约束 — 不建模这些回测全是假的
Q10.4 评估指标
必学 难度 ★★★
年化收益 / 最大回撤 / Sharpe 夏普比率(单位风险换多少收益)/ Sortino 索提诺比率 / Calmar 卡玛比率 / 胜率 / 盈亏比 / 换手率
Q10.5 鲁棒性验证
必学 难度 ★★★★
样本内 vs 样本外 / Walk-forward 滚动窗口验证 / 蒙特卡洛模拟 / 参数敏感性分析

QTSQ11 — 风险管理

Q11.1 风险度量
必学 难度 ★★★★
VaR 在险价值(一定置信度下最大亏损)/ CVaR 条件在险价值 / 最大回撤 / 波动率
Q11.2 风险控制
必学 难度 ★★★
止损规则 / 仓位上限 / 行业 + 个股 + 杠杆约束
Q11.3 资金管理
必学 难度 ★★★★
资金分配 / 仓位调整 / 黑天鹅应对
Q11.4 心理纪律
必学 难度 ★★★
信号执行不打折扣 / 亏损时不撤单 / 系统化的最大价值就是把这种纪律外包给机器

QTSQ12 — 实盘部署

Q12.1 系统架构
必学 难度 ★★★★
数据接入 → 信号生成 → 下单 → 风控 → 监控 这条主链 / 每一环都能挂掉,要有容错
Q12.2 异步 / 并发基础
高优 难度 ★★★★
同步阻塞 vs 异步事件循环 — 跟 Part A 第 9.5 节衔接
Q12.3 订单执行
必学 难度 ★★★★
订单类型(市价 / 限价 / 止损 / 冰山)/ 执行算法 TWAP(时间加权平均价格)/ VWAP(成交量加权平均价格)/ POV(参与率)
Q12.4 监控与告警
必学 难度 ★★★
实时持仓 / 盈亏 / 异常检测 / 报警通道(电邮 / Slack / Telegram)
Q12.5 日志审计(QTS 核心特色:可审计性)
必学 难度 ★★★★
订单 / 信号 / 决策证据完整留档 — 这块是 QTS 跟传统量化的差异化点
Q12.6 容错与故障恢复
必学 难度 ★★★★
断网 / 服务重启 / 数据回补 — 实盘随时会出意外,预案要事先写好

QTSQ13 — 机器学习在量化的应用

Q13.1 监督学习基础
高优 难度 ★★★★
回归(预测连续值)/ 分类(预测类别)
Q13.2 时序预测
中优 难度 ★★★★★
ARIMA / LSTM 长短期记忆网络 / Transformer
Q13.3 强化学习在交易
中优 难度 ★★★★★
Q-learning / 策略梯度 — 让 agent 自己学最优执行
Q13.4 集成学习
高优 难度 ★★★★
XGBoost / LightGBM — 两个梯度提升模型,因子合成里非常常用
Q13.5 LLM 在交易
高优 难度 ★★★★
LLM = Large Language Model 大语言模型 / 新闻情绪分析 / 财报解读 / 决策辅助 — 跟 Q14 衔接
Q13.6 机器学习陷阱(重点)
必学 难度 ★★★★★
数据泄露(label 不小心包含未来信息)/ 时序交叉验证(不能随机切分)/ 过拟合 / 市场非平稳性(历史数据上学的模式未来失效)

QTSQ14 — AI Agent 多层架构(QTS 特色)

跟 archive 里的「人机协同 + 可审计」定位对应,是 QTS 跟传统量化的差异化点。
Q14.1 多层架构设计
必学 难度 ★★★★
策略层 / 决策层 / 执行层 — 各自职责清晰,方便审计 + 替换
Q14.2 prompt 工程
必学 难度 ★★★
怎么让大模型按需要输出 — 结构化提示词 / 角色设定 / few-shot 示例
Q14.3 证据包设计
必学 难度 ★★★★
每个决策都能追溯到「为什么这么决定」 — 这是 QTS 的差异化卖点
Q14.4 LLM 输出验证
必学 难度 ★★★★
防止大模型胡说八道直接进入交易 — 多模型交叉验证 / 规则白名单 / 人工 review 关卡

QTSQ15 — 行为金融与心理

Q15.1 常见认知偏差
高优 难度 ★★★
确认偏差(只看支持自己结论的数据)/ 锚定效应 / 过度自信 / 处置效应(赚了就跑亏了死扛)
Q15.2 纪律性 / 系统化思维
必学 难度 ★★
为什么要让机器执行而不是手动 — 机器没情绪,不会因为亏了就乱改规则
Q15.3 亏损心态管理
必学 难度 ★★★
连续亏损时还能不偏离原计划 — 比策略本身更难

QTSQ16 — 工程与运维

策略写完不是结束 — 能稳定跑下去才是。跟 Part A 第 9 / 12 章衔接。
Q16.1 Linux 基础
必学 难度 ★★
服务器常用命令 / 进程管理 / cron 定时任务
Q16.2 Docker 容器化
必学 难度 ★★★
打包应用环境 / 一次构建到处跑 / docker-compose 编排多服务
Q16.3 云服务基础
必学 难度 ★★★
VPS(Virtual Private Server 虚拟专用服务器)/ 部署流程 / SSH 远程操作
Q16.4 监控 — Prometheus + Grafana
高优 难度 ★★★
一对监控数据收集 + 可视化工具 / 实盘必备
Q16.5 CI/CD(持续集成 / 持续部署)基础
高优 难度 ★★★
每次 push 自动跑测试 + 部署到服务器 — 跟 Part A 12.5 衔接