接上篇:《Claude 六步提示词系统(上):核心框架 + 学习阶梯 + 20 小时 80/20》
本篇覆盖提示词 3-6 与串联系统、落地模板、避坑指南。
四、提示词 3:考我直到我崩溃——主动回忆找漏洞
4.1 核心逻辑
被动阅读看起来很有成效。主动回忆才能揭示真相。
这个提示词把 Claude 变成 严格考官:
- 一次只问 1 题,等你答
- 10 题分 4 梯度:新手 1-3 → 中级 4-6 → 高级 7-8 → 专家 9-10
- 每答一题:评分 → 指出对/错 → 只重讲漏洞 → 弱则追问 → 强则升级
- 最后给:总分、强项、弱项、复习计划、5 道挑战题
4.2 完整提示词(可直接复制)
我刚刚学习了 [主题],我想测试一下我到底理解得怎么样。
请扮演一位严格但有帮助的考官。你的工作是通过主动回忆找出我理解的边界。
首先,问我 10 个问题,一次一个。
规则:
1. 让问题逐步变难:
- 第 1-3 题:新手级别
- 第 4-6 题:中级水平
- 第 7-8 题:高级水平
- 第 9-10 题:专家水平
2. 一次只问一个问题,并等待我的回答。
3. 每次回答后,做四件事:
- 给我的答案打分(满分 10 分)
- 告诉我哪些地方答对了
- 指出确切的漏洞、错误或薄弱点
- 只用简单的语言重新讲解我遗漏的部分
4. 如果我的答案很弱,在继续下一个问题之前,先追问一个问题。
5. 如果我答得好,稍微增加难度。
6. 最后,给我:
- 最终得分
- 我最强的领域
- 我最弱的领域
- 一个简短的复习计划
- 5 个最终的挑战题来掌握这个主题
不要一次性给我所有答案。让这个过程感觉像一次真正的学习访谈。
4.3 实战演示:Rust 所有权考官对话(节选)
考官:「Q1(新手):解释『所有权』的三条规则,每条用一句话。」
我:「每个值有一个所有者;同一时刻只有一个所有者;所有者离开作用域值被丢弃。」
考官:「✅ 9/10。遗漏:『赋值/传参会发生 move』——这导致新手最常见的
use of moved value报错。重讲:move 语义 = 所有权转移,旧变量失效。」考官:「Q2(新手):
let s1 = String::from("hi"); let s2 = s1; println!("{}", s1);会发生什么?为什么?」我:「编译报错,s1 被 move 了,不能再用。」
考官:「✅ 10/10。下一题升级。」
考官:「Q4(中级):什么时候用
&T、什么时候用&mut T、什么时候用Box?给决策树。」我:「…」
4.4 进阶用法
| 场景 | 追加指令 |
|---|---|
| 模拟面试 | 「按 [Google / 字节 / Rust 基金会] 面试风格出题,含系统设计开放题」 |
| 考证冲刺 | 「对齐 [CKAD / AWS SAA / PMP] 真题库风格,每题标注知识点编号」 |
| 团队复盘 | 「输出 Markdown 报告:姓名、各题得分、共性弱项、团队复习计划」 |
| 间隔重复 | 「把 10 题 + 5 道挑战题按 Anki 卡片格式导出:正面=题,背面=答案+漏洞解析」 |
五、提示词 4:创建一页速查表——大脑记结构不记段落
5.1 核心逻辑
你的大脑记忆结构比记忆段落更容易。
压缩到 一页纸,5 分钟复习:
- 定义(简单语言)
- 核心概念/规则/公式/步骤(要点)
- 图表/流程图/表格/思维模型
- 3-5 个现实例子
- 常见错误/易混淆点
- 使用前检查清单
- 5 个快速测试题
5.2 完整提示词(可直接复制)
我想要一份 [主题] 的一页速查表。
请扮演一位专家教师,能够将复杂想法简化为一份快速复习表。
创建一份我可以在使用该主题前 5 分钟内复习完的速查表。
请包括:
1. 该主题的简短定义,用简单的语言。
2. 最重要的概念、规则、公式或步骤。
3. 清晰的要点,而不是长段落。
4. 一个简单的带标注的图表、流程图、表格或思维模型(如果有助于解释主题的话)。
5. 3-5 个具体例子,展示该主题在现实生活中的运作方式。
6. 我应该避免的常见错误或容易混淆的部分。
7. 一个快速的"使用前检查清单"。
8. 5 个快速测试题来检验我的记忆。
保持实用、可视化、对新手友好且易于扫描。
5.4 实战输出样例:Rust 所有权速查表(Markdown 可直接存 Obsidian)
# 🦀 Rust 所有权·借用·生命周期 — 一页速查表
## 定义
内存安全无 GC 的核心:编译期通过**所有权/借用/生命周期**三套规则,确保无空悬指针、无数据竞争、无双重释放。
---
## 核心规则(背下来)
| 规则 | 口诀 | 代码后果 |
|------|------|----------|
| **所有权** | 有主、唯一、离开即丢 | `let s2 = s1` → s1 失效(move) |
| **借用** | 要么多读、要么单写、引用不超主 | `&mut` 独占、`&` 共享、不可共存 |
| **生命周期** | 引用活得比被引用久 | `'a` 标注,编译器自动推导 90% |
---
## 思维模型:三角铁律
┌──────────────┐
│ 所有权 │ ← 唯一拥有者,决定 drop 时机
└──────┬───────┘
│ move / 借用
┌───────┴────────┐
▼ ▼
┌─────────────┐ ┌─────────────┐ │ 不可变借用 │ │ 可变借用 │ │ &T │ │ &mut T │ │ 多读共存 │ │ 独占写 │ └─────────────┘ └─────────────┘ ▲ ▲ └───────┬────────┘ │ 引用生命周期 ≤ 拥有者生命周期 ▼ ┌──────────────┐ │ 生命周期 │ ← 编译期约束,运行期零成本 └──────────────┘
---
## 3 个现实例子
1. **函数参数**:`fn foo(s: &String)` → 只读借用,调用者保留所有权
2. **方法链**:`vec.iter().map(|x| x*2).collect()` → 连续不可变借用,安全
3. **线程传递**:`thread::spawn(move || { ... })` → `move` 夺走所有权,'static 生命周期
---
## ⚠️ 常见错误(避坑榜)
| 错误 | 现象 | 修正 |
|------|------|------|
| 循环里 push 同 vec | `cannot borrow as mutable` | 先收集索引,再改;或用 `split_at_mut` |
| 闭包捕获环境变量 | `does not live long enough` | 加 `move` 或显式标注生命周期 |
| 结构体存引用不标注 `'a` | 编译报错 | `struct Foo<'a> { x: &'a i32 }` |
| `&mut` 后又用原变量 | `borrow later used here` | 缩小作用域 `{ ... }` 或 `clone()` |
---
## ✅ 使用前检查清单(写代码前 30 秒)
- [ ] 谁拥有这块数据?(所有者)
- [ ] 我要读还是写?(`&` vs `&mut`)
- [ ] 引用能活多久?(生命周期 ≤ 拥有者)
- [ ] 需要跨线程吗?(`Send + Sync` / `'static`)
- [ ] 会不会同时 `&` 和 `&mut`?(编译期拦截)
---
## 🧪 5 秒自测题
1. `let mut v = vec![1,2,3]; let r = &v[0]; v.push(4);` → 编译?为什么?
2. `fn foo(x: &i32) -> &i32 { x }` 生命周期省略规则是什么?
3. `Box::new(5)` 和 `&5` 在栈/堆上有何区别?
4. 什么是 `Pin<Box<Future>>`?解决什么问题?
5. `Rc<RefCell<T>>` 组合实现什么模式?(内部可变性 + 共享所有权)
5.5 进阶用法
| 场景 | 追加指令 |
|---|---|
| 打印贴墙 | 「输出 A4 版式:左栏规则、右栏图表、底部检查清单,PDF 就绪」 |
| Anki 导入 | 「把 5 道测试题 + 5 个常见错误按 正面::背面 CSV 导出」 |
| 团队共享 | 「生成 Notion Page:含数据库视图、标签筛选、版本历史」 |
| 考前突击 | 「只保留『检查清单』+『5 道测试题』,其余折叠」 |
=== END PART 2 ===