1. 刷题这件事为什么值得好好记一笔日常刷题记录这六个字看起来像是某个代码仓库里随手建的一个文件夹名字但真正坚持刷题超过三个月的人会明白这个标题背后藏着一整套方法论。我在接触过大量开发者之后发现一个规律那些进步速度明显快于同龄人的人几乎都有一个共同习惯——他们不只是刷题而是会沉淀刷题记录。有人用仓库管理有人用笔记软件有人干脆用一个表格形式五花八门但核心动作都是一样的把每道题做过之后的思考、踩坑、优化过程完整留下来。这篇文章我想聊聊日常刷题记录这个习惯本身。它适合谁适合正在准备面试的求职者、想提升算法能力的在职开发者、以及刚入门数据结构和算法的学生。我会把自己在实际刷题过程中积累的套路、踩过的坑、总结出来的记录模板全部摊开来讲希望能帮你少走一些弯路。先说结论刷题记录不是简单的题解粘贴而是一个完整的复盘闭环。它至少应该包含题目本身、你的思考过程、正确解法、错误尝试、复杂度分析、同类题扩展这几个维度。把这个闭环跑通了刷题效率会有质的提升。我自己最喜欢的记录格式是一个轻量级的结构化模板不追求花哨但每个字段都有它存在的意义。后面我会把这个模板完整拆解给你看并且告诉你每一栏为什么要这么设计。2. 记录之前先想清楚你的刷题目标2.1 不同阶段的人记录重点完全不同刷题记录这件事最怕的就是一刀切。我见过太多人拿着别人的模板直接套结果要么记了一堆自己根本看不懂的笔记要么因为模板太复杂坚持了两天就放弃。记录方式必须服务于你当前的目标。如果你是准备校招或者跳槽那你的记录重点应该放在面试常考题型和高频考点的整理上。每道题记录时多写几句这道题面试官可能会怎么追问比你花大把时间记录冷门题的解法学要实用得多。如果你是单纯想提升算法思维那记录的重点就变成解题思路的演化过程。比如一道动态规划的题目你最开始是怎么想的为什么没想到状态转移方程后来是怎么被某个提示点醒的这些思考痕迹才是你思维成长的证据。如果是刚入门的小白记录的核心就一个字细。什么变量名代表什么、为什么边界条件要这么处理、这个循环的终止条件是怎么推出来的都要写清楚。别嫌啰嗦这些细节正是你三个月后回头复习时最需要的东西。2.2 建立你的刷题坐标系我建议每个刷题的人在正式开始记录之前先花半小时建立自己的刷题坐标系。这个概念听起来玄乎其实就是三件事确定你按什么顺序刷题、确定你用什么难度梯度、确定你多久复习一次。按什么顺序刷题我推荐按照数据结构来划分模块。数组、链表、栈、队列、哈希表、树、图、动态规划、贪心、回溯一个模块一个模块地过。这样做的最大好处是你在记录时可以把同一模块的题目放在一起对比很容易发现规律。难度梯度上我个人的经验是黄金比例每个模块里简单题占两成中等题占六成困难题占两成。别一上来就死磕难题也别光刷简单题自我感动。这个比例能让你保持成就感的同时不断触碰自己的能力边界。复习周期这件事我用的是一个朴素但不失灵的方法新做过的题当天记录三天后复习一次一周后再复习一次一个月后再回头看一遍。人的遗忘曲线摆在那里你不主动对抗遗忘刷过的题就会变成熟悉的陌生人。3. 我的刷题记录模板每个字段都是踩坑踩出来的3.1 模板整体结构直接上干货。这个模板是我在各种尝试之后沉淀下来的结构很轻但每一部分都有明确用途题目编号 / 名称 难度 / 所属模块 / 完成日期 题目大意用自己的话概括不超过三行 我的初始思路写当时真实的想法哪怕是错的也要写 正确思路经过学习/提示后理解的解法 两种思路的差距分析这是全模板最核心的部分 复杂度分析时间 空间 代码实现带注释关键行必须有注释 易错点记录边界条件 / 空值 / 索引越界等 同类题链接后续遇到相似的题就补充进来 复习标记没掌握 / 勉强 / 熟练这个模板初看好像字段很多但实际填起来熟练之后每道题大约只需要十五分钟。关键是把题解和复盘分开题解随处都能找到但你自己的思考过程只有你自己能写出来那才是记录中真正值钱的部分。3.2 为什么初始思路和正确思路必须分开写很多人的刷题记录最大的问题就是直接把官方题解或者评论区的高赞答案抄一遍然后合上笔记觉得自己学会了。这是典型的虚假掌握——看得懂和做得出来中间隔着一条巨大的鸿沟。所以我的模板里强制区分我的初始思路和正确思路并且专门留了一栏让两者进行对比。你别小看这一栏它的价值在于逼你直面自己的思维漏洞。举一个特别常见的例子。做链表相关的题目时我的初始思路经常是直接遍历一遍然后处理但正解往往是双指针。当我把两种思路放在一起对比时就会发现原来我每次都是栽在没有意识到可以使用多个指针来减少遍历次数这个思维定式上。这种规律你刷十道题可能还察觉不到但记了三十道之后自己的思维盲区会非常清晰地浮现出来。这也是为什么我一直强调刷题记录的本质不是记录题目而是记录自己。每一条我的初始思路和正确思路的差距都是你认知模型的一次修正。3.3 易错点栏目的妙用别人看题解我看自己的失败史易错点这栏我在早期是完全忽略的。觉得一道题只要做出来了过程不重要结果对就行。直到有一次在面试中一道原题我明明做过却在边界条件上挂了面试官追问了一句如果输入是空数组呢我当场就卡住了。从那次之后我开始在每道题的记录里强制写下至少一条易错点。慢慢地我发现自己有一个高频翻车模式总是忘记处理输入为空的边界情况。后来我在做题时养成了一个肌肉记忆拿到题目先问自己三个问题——输入可能为空吗数值是否有上限索引操作是否可能越界这三个问题成了我快速定位易错点的检查清单。刷题记录的价值也在这里体现你记录的不是一道题的答案而是你个人的错误基因图谱。同一个错误模式你第一次踩坑是偶然第三次踩坑就是必然。记录的意义就是把这种必然消灭在萌芽里。4. 实操演示一道题完整走一遍记录流程4.1 题目场景设定为了让你更直观地理解这个记录模板怎么用我拿一道标准的数组类题目来演示。为了规避版权问题我把题目改写成完全原创的等价描述给定一个整数数组请找出数组中两个数的下标使得它们对应的值相加等于目标值。假设每个输入恰好有一个解并且不能重复使用同一个元素。这是一道非常经典的入门题但它的记录过程却一点都不简单。我特意挑这道题就是因为几乎所有刷题人都写过它但很少有人把它记录到位。4.2 依次填写模板字段先写下题目基本信息难度简单所属模块是数组 哈希表完成日期按实际填写。题目大意我用自己的话压缩成了一句找数组中两个不同位置的数使它们的和等于目标值。我的初始思路老实说第一次接触这道题时我想到的是暴力解法两层循环外层固定一个数内层遍历找另一个数时间复杂度是O(n²)。这个思路本身不算错但效率很差。正确思路用哈希表优化遍历数组时每处理一个元素就检查目标值减去当前值是否已经在哈希表中。如果在直接返回两个下标如果不在把当前元素的值和下标存入哈希表。这样一次遍历就能完成任务时间复杂度降到了O(n)。现在来到这个模板的核心两种思路的差距分析。暴力解法的问题在于它把查找另一个数的操作内嵌在第二层循环里而查找操作本身可以通过哈希表将O(n)的遍历降低到O(1)。我的思维误区是默认了查找必须要遍历没有主动去想是否有更快查找的数据结构。复杂度分析也顺手填上去暴力法时间O(n²)、空间O(1)哈希表法时间O(n)、空间O(n)。空间换时间是这道题最重要的trade-off。代码实现部分我刻意在注释里写清楚为什么先检查再存入因为要避免同一个元素被使用两次。这个细节虽然简单但对于理解哈希表法的精妙之处至关重要。易错点记录输入数组只有一个元素时直接判定无解目标值可能为负数不要理所当然认为目标值是正数哈希表存储的value是下标不要误存成元素值。复习标记第一次没看任何提示独立想出来但时间花费超过二十分钟标记为勉强。4.3 记录完成之后再补一步横向扩展一个完整的刷题记录到上面那一步还不算完。我会在同一份记录的末尾追加一个同类题链接区域写上与这道题解题思路相似的题目编号。比如找数组中第一个不重复的数、判断数组中是否存在两个数的平方和等于目标值这类题都是同一个哈希表思路的变体。这一步的作用是让你的记录从点变成面。当你积累到二三十道题都指向同一个模式的时候你其实就已经掌握了这一类题的通解。这比单纯追求刷题数量要高效得多因为你在用一个个真实的例子训练自己的模式识别能力。学会一道题只能及格学会一类题才叫掌握。这也是我做刷题记录最大的收获。5. 记录工具怎么选轻量、顺手、能搜索5.1 三种常见方案对比刷题记录用什么工具这个问题不同人有不同答案。我前后换过好几次工具最后总结出三个核心需求记录要快、搜索要方便、能插入代码。最常见的方案是在代码仓库里建一个文件夹每道题一个文件文件名用题目编号题目名称的格式。好处是代码和记录天然在一起支持版本管理随时可以回溯。坏处是挪动目录结构比较麻烦且不适合做跨题目的横向整理。第二种方案是用在线笔记。它的优势是随时随地可以记录搜索功能强大而且天然支持代码块格式化。我自己现在的主力方案就是这样一个巨大的汇总文档按数据结构分章节每章下面挂题目。配合标签功能可以快速筛选还没掌握的题目。第三种方案是用电子表格。看起来朴实无华但用起来极其顺手——每一行是一道题每一列是一个记录维度。你只要用筛选功能就能瞬间调出所有标记为没掌握的题目或者所有复杂度O(n²)待优化的题目。表格方案特别适合强迫症型选手因为它天然就是结构化的。5.2 我的取舍建议别在工具上耗太多时间工具永远是辅助别在选工具这件事上花太多精力。我见过有人为了选一款笔记软件研究了三天最后题一道没刷。工具的上手成本如果超过二十分钟果断换掉。如果让我给出一个闭眼推荐的组合那我会说用电子表格做总览用代码仓库做代码存档用备忘录做随手记录。这个组合几乎零成本但覆盖了记录、存储、灵光一现的所有场景。我自己的习惯是白天随手写的思路碎片放在备忘录晚上统一整理进表格和仓库。这样的好处是记录不会被琐碎的做题过程打断而且晚上整理的过程本身就是一次主动回忆。根据我的经验回忆比抄写带来的记忆留存率高得多。6. 复盘周期的设计让记录真正转化为能力6.1 三种复盘节奏覆盖短期记忆与长期能力记录做完如果不定期复盘那这和没记录也没什么两样。复盘这件事一定要有节奏我把它拆成三种周期。短期复盘是每次刷题结束后的当日回顾重点看初始思路和正确思路的差距确保自己理解了题解而不是背下了答案。这个步骤花时最短但价值最大因为记忆曲线下降最快的就是前二十四小时。中期复盘是每周日晚上做一次周总结。打开记录表把所有勉强和没掌握的题目标记拎出来重新做一遍并且尝试不看任何提示写代码。如果一个标记勉强的题目连续两周都能独立写对就升级为熟练。这个筛选机制会让你始终盯着自己的薄弱环节而不是沉浸在做对题目带来的虚假成就感里。长期复盘每月做一次重点不再是单个题目而是整个记录册里的模式总结。我会统计本月哪些模块占比最大、哪些错误类型出现次数最多、哪些同类题链接下面已经积累了超过十道题。这些数据会直接指导我下个月的刷题计划强化薄弱模块减少重复训练已经熟练的模块。6.2 复盘时怎么判断自己是真的会了这个问题我问过很多人答案五花八门。但在我看来真正的会了只有一个标准隔一段时间后不看任何题解能独立讲清楚这道题的完整解题思路并且能准确说出它的复杂度。注意这里说的是讲清楚不是做出来。你会做某道题可能只是记下了代码你能讲清楚才说明你理解了背后的逻辑。在复盘时我经常用一种自测方式把自己假装成老师对着空气把这题的思路用口语讲一遍。如果讲的过程中出现磕巴、停顿或者某个关键转折点想不起来那就说明这里还没真正掌握。用这个方式自测比刷十道新题更能暴露问题。复盘时还应该特别注意同类题链接这个区域。如果你发现一组同类题里某一道你能秒解另一道却毫无头绪那说明你不是掌握了这个模式而只是记住了其中一道题的解法。正确的做法是回到这两道题中间找到它们共通的抽象结构把那部分写成一句高度概括的解题策略补充在记录里。7. 避坑合集我踩过的刷题记录的大坑7.1 第一个坑记录变成了抄题解这是最常见的问题几乎新人必踩。具体表现是做完一道题后打开题解区把最长的那篇答案一字不差地复制进自己的记录里。乍一看记录得很充实实际上什么都没有留下。为什么说这是坑因为抄题解的时候你的大脑处于自动巡航模式完全没有在思考为什么这一步要这么处理。记录的价值在于记录思考而不是记录答案。要破这个坑最简单的方法是给自己立一条规矩记录里必须包含一段用自己的话写的解题思路如果写不出这段话就说明还没理解透彻需要继续看题解直到能写出来为止。7.2 第二个坑过度追求记录的完整与美观这个坑正好和第一个坑相反典型表现是花四十分钟做题再花两个小时整理笔记把每道题都装饰得漂漂亮亮甚至用不同颜色标注各种重点。我理解这种心情刷题记录做得漂亮会让人产生一种我在认真学习的错觉。但刷题的核心目标是训练解题能力不是办展览。如果记录耗费的时间与做题本身几乎相当那这个负担很快就会让你坚持不下去。我的经验是记录时间不要超过做题时间的三分之一。超过这个比例果断精简记录粒度。7.3 第三个坑只记录新题从不回头复习这是另一个隐蔽的大坑。很多人保持每天刷三题记录也在坚持写但一个月后发现之前做过的大部分题目居然完全想不起来。原因很简单新题的输入不停覆盖旧题而你的复盘机制没有跟上。破解方法就是我在第六节讲的三种复盘节奏。如果你觉得每周复盘已经占用了太多时间那至少保留一个最低限度每周日把本周标注为没掌握的题重新做一遍。这个最小复盘闭环足以保证你的记录不只是躺在仓库里的冰冷文字。7.4 第四个坑忽略了记录中的为什么最后一个坑也是最难自我察觉的。它在记录中的表现是只有做了什么没有为什么这么做。比如只写用双指针解法不写为什么这道题可以用双指针以及双指针相比其他方法好在哪里。所有为什么的追问本质上都是在逼自己做更高层次的抽象思考。我在实际使用中验证过同样一道题只记录做法的笔记一周后基本忘光而记录了为什么的笔记一个月后回来还能完整复述。不夸张地说记录中为什么的密度决定了你复习时的效率。8. 进阶技巧从单题记录到模式库8.1 什么是解题模式库记录做了两三个月之后你会发现一个显著的变化文件夹里的文件越来越多浏览记录越来越吃力。这时候就该做一次数据升级——把散落的记录聚合整理成一个模式库。模式库不是题目的集合而是解法的集合。比如双指针模式、滑动窗口模式、动态规划-状态压缩模式每个模式下面挂若干道典型的例题。这样你的记录体系就从题目中心变成了解法中心更加接近算法思维的本质——识别问题模式套用匹配解法。这个转变有个非常实际的收益面试中遇到新题时你思考的路径会更快。因为你不是从这道题和我做过的哪道题类似出发而是从这道题符合哪种解法模式出发显然后者的覆盖面更广。8.2 模式库的搭建步骤第一步打开你的记录总览把所有题目按照解法类型粗分组不用太精细大致分到数组技巧、链表操作、树遍历、动态规划、回溯、贪心、图论这几个大类即可。第二步给每个大类写一段模式识别指南说明具备什么特征时应该优先考虑这种解法。比如当题目中出现最长/最短子串时优先考虑滑动窗口这一段话是你实践经验的高度凝缩价值远超任何书上的理论。第三步把每道题的记录链接挂到对应模式下面并且在链接旁标注这个模式里的核心例题是哪一道。以后复习时只看每类的核心例题就够了其余题目作为补充。这个过程做一次大约需要两三个小时但做完之后你的刷题体系会清晰很多往后每新增一条记录只需要花十秒钟放进对应的模式里。这个整理本质上是把碎片化的努力编织成了一张有结构的知识网络。9. 关于日常刷题记录我最后想说的话刷题这件事本质上是一场与遗忘的对抗。代码写得好的人未必是智商碾压更多的是一种把经验固化成方法论的能力。我一直觉得日常刷题记录这个习惯最大的意义不是让你在面试时能背出某道题的答案而是让你逐渐建立起属于自己的问题分析与拆解框架。每一条记录都是一块乐高积木单看没什么特别但积累到一定数量后你会发现这些积木开始自动拼合成一些有意思的形状——你会开始看到题目之间的相似性看到自己的思维盲区集中在哪些地方看到复杂度的优化空间常常藏在哪些不起眼的位置。所以如果你现在刚开始刷题别嫌记录麻烦从最简单的格式做起哪怕每天只记一道题也要坚持写。如果你已经刷了上百道题但没有留下任何痕迹那就从今天开始挑最近做的十道题把记录补上。你会发现这十道题的补记过程本身就会让你对它们的理解上一个台阶。最后一个小技巧送给大家如果你实在不知道每道题记什么那就只记一句话——如果三周后的我重新看到这道题需要什么提示才能独立做出来把答案写下来这就是最好的记录。