面试刷题 Agent:别只报答案,要逼自己讲证明

刷题系统如果只给答案,学习效果很有限。面试时,面试官不只看你会不会写代码,还看你能不能讲清思路、证明正确性、分析复杂度、处理边界。一个好的面试刷题 Agent,应该像一个有点严格的面试官,别只报答案,要逼自己讲证明。

我更喜欢把刷题 Agent 分成四步:先追问思路,再要求证明,再跑边界用例,最后让用户复述。只有代码过了,不代表面试过了。

一、面试过程要结构化

flowchart TD
  A[题目] --> B[用户讲思路]
  B --> C[Agent 追问边界]
  C --> D[用户写代码]
  D --> E[运行测试]
  E --> F[复杂度和证明复盘]

Agent 不应该一上来给标准答案。它可以给提示,但要分层:方向提示、关键观察、伪代码、完整代码。提示太快,学习者会变成复制机器。

二、追问模板要覆盖证明链

interview_prompts:
  invariant: "你的循环不变量是什么?"
  correctness: "为什么这个选择不会漏答案?"
  complexity: "每个指针最多移动几次?"
  edge_case: "空数组、重复元素、极值怎么处理?"

这些问题比“你会了吗”有用。会不会,证明链最诚实。

三、代码运行只是其中一步

Agent 要自动跑样例、边界、随机用例。对可暴力验证的小规模题,还可以用 brute force 对拍。

def brute(nums):
    best = 0
    for i in range(len(nums)):
        for j in range(i, len(nums)):
            best = max(best, sum(nums[i:j+1]))
    return best

对拍能让用户看到:优化算法不是玄学,它和暴力解在小规模上应该一致。

四、复述比看答案更重要

最后让用户用自己的话复述思路。Agent 可以打分:是否讲清状态、转移、边界、复杂度。复述卡住的地方,就是还没真正懂。

学习不是把答案看顺眼,而是能在压力下重新构造出来。面试场景尤其如此。

Agent 还可以给表达反馈。比如用户讲双指针时,只说“左右指针移动”,但没解释为什么不会漏答案,就提示补证明。面试官听的不是关键词,而是逻辑闭环。

answer_score:
  idea: 4
  correctness_proof: 2
  complexity: 3
  edge_cases: 2
  suggestion: "补充为什么左指针移动不会错过最优解"

这个评分不必太精确,但能让用户知道自己短板在哪里。刷题不只是写代码,也是练表达。

最后,Agent 要避免“鼓励式废话”。别只说“你做得很好”,要指出具体哪里好、哪里还缺。温柔可以有,但别糊弄。

它还可以模拟追问。用户给出 O(n) 解法后,继续问“如果输入全是相同元素怎么办”“如果数组为空怎么办”。这些追问能逼出边界意识。面试里,很多人不是不会写,而是一追问就露出没想全。

follow_up:
  - 这个算法在重复元素下是否仍然正确?
  - 你能给出循环不变量吗?
  - 如果要求返回所有答案,需要改哪里?

追问不是刁难,是帮你提前经历面试压力。

如果 Agent 能把每次追问结果存下来,下一轮训练就能针对性补弱项,而不是重新从零开始问。

五、总结

面试刷题 Agent 不应该只给答案。它要追问思路、要求证明、运行测试、组织复述,帮助用户建立完整表达链。

代码提交通过是题库的终点,但只是面试表达的起点。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐