Skip to content

算法题准备策略 ​

S7-004建议学进阶约 60 分钟JDK 21求职与转岗 · 求职准备

1. 本节定位 ​

算法题是独立的一条准备线:它不考「会不会 Java」,考「思维与手速」。 而它最容易失败的地方不是「题太难」,而是刷了忘、忘了刷。

★ 本节用工具算出两种策略的留存差距(简化遗忘模型,半衰期 7 天) ✓✓:

text
8 周、每天 3 道新题、目标 120 题:
  只刷新题不复习   → 8 周后仍记得约 6 道(留存 5%)✗✗✗
  新题 + 间隔复习  → 8 周后仍记得约 51 道(留存 43%)✓✓
  (复习共 558 次,复习/新题 = 4.7 倍;任务最重的是第 5 周)

★ 工具:python -X utf8 scripts/career/study_plan.py ✓

2. 学习目标 ​

  • 能按「模式」而不是「题号」组织刷题 ★★★;
  • 会理解并执行间隔重复(1/3/7/15/30 天)★★★;
  • 会估算自己的计划负荷,提前发现「复习峰值」★★★;
  • 掌握面试现场的四步答题法 ★★★。

3. 前置知识检查 ​

4. 为什么需要这个知识 ​

★ 算法题准备的两个真相 ✓✓:

真相含义
面试算法题是「模式识别」测试 ✓95% 的题可归入 10 来个模式(双指针/滑窗/二分/DFS/DP…)
遗忘曲线决定了复习量 ✗✓不复习 = 白刷(本节实测留存 5%)

★★ 所以正确策略是:少数模式 × 反复复习,而不是无限新题 × 一遍过 ✓✓✓。

5. 核心概念 ​

5.1 按模式刷:题型地图 ★★★ ​

模式特征信号本知识库对应
双指针 / 滑动窗口有序数组、子数组/子串《基础算法:排序与二分查找》 ✓
二分查找有序 + 找边界、答案单调《基础算法:排序与二分查找》 ✓
链表操作反转、环、合并《数据结构:数组、链表、栈与队列》 ✓
栈 / 队列括号、单调栈、BFS 层序《数据结构:数组、链表、栈与队列》 ✓
哈希表计数、去重、查找配对《HashMap》 ✓
递归 / 回溯全排列、子集、组合剪枝《基础算法:排序与二分查找》 ✓
动态规划最值、方案数、状态转移《基础算法:排序与二分查找》 ✓
贪心局部最优可证明《基础算法:排序与二分查找》 ✓

★ 执行方式 ✓✓:一次只攻一个模式(一次 10-15 题) —— 同一模式连续做,才能在「模式内」形成手感;混着刷等于每道题都从零开始 ✓✓✓。

5.2 间隔重复:复习日优先于新题(实测)★★★ ​

★ 8 周计划的实测负荷 ✓✓:

text
周次    | 新题 | 复习 | 合计 | 累计覆盖
第 1 周  |   21 |   30 |   51 |   21
第 3 周  |   21 |   81 |  102 |   63
第 5 周  |   21 |   99 |  120 |  105   ← **峰值周**
第 6 周  |   15 |  102 |  117 |  120
第 7 周  |    0 |   60 |   60 |  120

★★ 三条读数 ✓✓✓:

  1. 复习量 4.7 倍于新题量(558 vs 120)——总时间预算要按这个比例留 ✓✓;
  2. 峰值在第 5-6 周(120 道任务/周)——提前把这两周的工作/生活排开 ✓✓;
  3. 第 7-8 周新题归零、只清复习 —— 这是收尾期,正好衔接面试 ✓。

5.3 留存对比:为什么必须复习(实测)★★★ ​

text
策略 A:只刷新题不复习 → 学过 120 道,8 周后仍记得约 6 道(5%)✗✗✗
策略 B:新题 + 间隔复习 → 8 周后仍记得约 51 道(43%)✓✓
★ 多花 558 次复习,把留存从 5% 提到 43% —— **刷得多不如复习得对** ✓✓✓

★ 模型说明(诚实标注)✓:留存按 e^(-λ·天数) 衰减(半衰期 7 天)、复习把留存重置为 1; 真实遗忘因人而异,但「数量级差距」的结论是稳的 ✓✓。

★ 为什么 B 也只有 43% ✓✓:最后两周学的题还没到复习日 —— 这正说明「计划的收尾要与面试时间对齐」:面试前 30 天应该完成新题,留出复习窗口 ✓✓✓。

5.4 三行笔记法:比再做一遍有用 ★★★ ​

text
每道题(无论做没做出来)写三行:
  ① 模式:这题属于哪个模式(考后能否归类)
  ② 卡点:卡在思路 / 边界 / 实现 / 复杂度
  ③ 下次怎么识别:题目里的什么信号让我想到这个模式 ✓✓✓

★ 为什么有效 ✓✓:面试考的是「看到题 → 想到模式」的映射速度 —— 三行笔记练的正是这个映射 ✓✓✓。

5.5 面试现场四步法 ★★★ ​

text
① 澄清题意(30 秒):输入范围、边界、是否有序 —— **别急着写代码** ✓✓
② 举例子(30 秒):手推一个小例子,验证理解 ✓
③ 说复杂度(30 秒):先给暴力解与复杂度,再说优化(**面试官要看思考过程**)✓✓✓
④ 写代码 + 自测(10 分钟):命名清晰、边界处理、主动跑一遍小例子 ✓

★ 常见失分点 ✗✗:沉默写代码(面试官看不到思考)、不澄清边界(写完发现理解错)、 不主动说复杂度(被认为「背过答案」)✓。

6. 递进示例 ​

6.1 把计划参数换成自己的 ​

python
# 编辑 scripts/career/study_plan.py
TOTAL_QUESTIONS = 120    # 目标题量
NEW_PER_DAY = 3          # 每天新题(按你的真实时间定)
DAYS = 56                # 距离面试的周数

6.2 读峰值、调计划 ​

text
峰值周(第 5 周)任务 120 道 → 两种调整:
  ① 把 NEW_PER_DAY 降到 2(总时长拉长,但峰值更平)✓
  ② 接受峰值,但提前把工作/生活排开 ✓
★ 千万不要「先不管,到时候再说」——**峰值周放弃 = 复习链断裂** ✓✓

6.3 反例:用「做了多少道」当进度 ​

text
「刷了 300 道」(数字好看),但面试时连滑动窗口都写不顺 ✗✗
正解:进度看**留存**(能默写模板 + 能识别信号),不看数量 ✓✓✓

7. 完整可运行工具与实测 ​

工具:scripts/career/study_plan.py

运行:

powershell
python -X utf8 scripts/career/study_plan.py

实测输出(节选):

text
===== 8 周刷题计划(120 题,每天 3 道新题,复习间隔 1/3/7/15/30 天)=====
  第 5 周  |   21 |   99 |  120 |  105
  第 8 周  |    0 |   39 |   39 |  120
  合计:新题 120 道,复习 558 次(复习/新题 = 4.7 倍)
  最重的周:第 5 周(120 道任务)—— **提前把这一周标出来** ✓✓

===== 两种策略的 8 周后留存(半衰期 7 天的简化模型)=====
  策略 A:只刷新题不复习 → 学过 120 道,8 周后仍记得约 6 道(留存 5%)✗✗
  策略 B:新题 + 间隔复习 → 学过 120 道,8 周后仍记得约 51 道(留存 43%)✓✓

8. Debug 观察点 ​

  1. 把 NEW_PER_DAY 从 3 改成 1:观察峰值周与总时长的变化 ✓✓✓;
  2. 把 DAYS 从 56 改成 42(面试提前):观察新题是否来得及学完 ✓✓(结论:要么加量要么减题);
  3. 去掉 INTERVALS 的后两个间隔(只复习到 7 天):观察留存下降 ✓✓;
  4. 用一道做过的题自测「三行笔记」:写不出「模式与信号」= 这题等于没做 ✓✓✓。

9. 常见错误 ​

#错误说明
1只刷新题不复习 ✗✗✗实测留存 5% ✓✓
2混着刷题(不做模式归类) ✗✗每道题都从零开始,模式感建立不起来 ✓✓
3面试前一周才开始冲量 ✗✗遗忘曲线不给面子,复习链也断了 ✓
4只看题解不动手 ✗✗面试要手写,手感无法替代 ✓✓
5沉默写代码 ✗✗面试官看不到思考过程,直接扣分 ✓✓
6硬编码边界(不澄清) ✗理解错 = 白写 ✓

10. 动手实验 ​

  1. 跑 study_plan.py,生成自己的 8 周计划 ✓✓✓;
  2. 把计划落到日历(含峰值周标注)✓✓;
  3. 选一个模式(如滑动窗口),连续做 10 题 + 写三行笔记 ✓✓✓;
  4. 3 天后闭卷默写该模式的模板与「识别信号」,对照笔记检查 ✓✓✓;
  5. 找同伴做一次「现场四步法」演练(澄清 → 例子 → 复杂度 → 编码)✓✓。

验收方式:能默写 5 个以上模式的模板,并说出每个模式的识别信号;计划留存 ≥ 20%。

扩展任务:把「三行笔记」做成一张表(模式 / 卡点 / 信号),每周复盘一次分布 ✓✓

11. 练习题 ​

  1. 为什么按模式刷比按题号刷有效?
  2. 间隔重复的复习间隔与复习/新题比例(本节实测)?
  3. 为什么策略 B 的留存也只有 43%?这说明什么?
  4. 三行笔记写什么?它练的是什么能力?
  5. 面试现场四步法的顺序?常见失分点?
参考答案(要点)
  1. 面试考模式识别;同模式连做才能形成映射速度 ✓✓★
  2. 1/3/7/15/30 天;复习约 4.7 倍于新题 ✓✓★
  3. 新题学到最后一刻,最晚学的题还没到复习日;说明收尾要留复习窗口 ✓✓★
  4. 模式 / 卡点 / 识别信号;练「看到题想到模式」的映射 ✓✓★
  5. 澄清 → 例子 → 复杂度 → 编码;失分点是沉默写代码、不澄清、不说复杂度 ✓✓★

12. 掌握标准 ​

  • [ ] 能按模式组织刷题 ★★★;
  • [ ] 会执行间隔重复并读计划负荷 ★★★;
  • [ ] 用三行笔记替代无脑重刷 ★★★;
  • [ ] 掌握现场四步法 ★★★。

13. 扩展资源 ​

14. 下一步学习 ​

《系统设计题》 —— 把 《高并发系统设计》 的容量估算与架构方法搬进面试。

进度只保存在本机浏览器,可随时清除

个人学习项目:AI 生成内容均经人工复核,第三方资源仅作索引