为什么有人说 “F*** LeetCode”:难度、公平性、实际价值——以及更好的方法

发布: (2025年12月8日 GMT+8 11:32)
9 min read
原文: Dev.to

Source: Dev.to

为什么这么多聪明的工程师会有这种感觉?

这种沮丧不仅仅是发泄;它是一种模式——当准备循环与面试评估不匹配时就会出现。

  1. 度量不匹配 – 你用解题数量和连击来跟踪进度,而面试官更在乎清晰度、适应性以及在时间压力下对边界情况的处理。当两者出现分歧时,数周的苦练会感觉像在原地踏步。
  2. 记忆衰减 – 周二解完一道题,周五就忘了,这不是性格缺陷,而是大脑在没有结构化笔记和间隔复习的情况下的正常工作方式。
  3. 面试的社交属性 – 你必须叙述约束、阐明权衡、承担错误并引导对话。单独苦练并不会训练这种肌肉。
  4. 上下文切换过载 – 粘贴题目、切换日志、在标签页之间跳来跳去会消耗工作记忆,导致你需要的细节被驱逐。
  5. 错误的自我怀疑 – 交付可靠系统却在一个人为的 DP 变体上卡壳,会让你觉得自己“格格不入”,而真正的差距是缺少一个在保留挣扎的同时提升反馈的准备循环。

感知难度:一个简单公式

Difficulty = Novelty Load + Time Pressure + Feedback Delay
组成部分含义
Novelty Load(新颖度负荷)题目在熟悉的模式上加入了新 twist(例如,被计数约束隐藏的滑动窗口)。
Time Pressure(时间压力)时钟压缩工作记忆;捷径往往会变成死胡同。
Feedback Delay(反馈延迟)缺乏快速确认迫使你自我怀疑或过度设计。

通过降低新颖度(提示模式)、控制时间(温和的时间盒)以及缩短反馈回路(提前生成对抗测试),同一道题的感受可以大幅提升——而不需要把题目“降智”。

算法轮的公平性与实用性

标准需要提问的问题
内容效度任务是否抽样了工作实际使用的技能(不变量、复杂度感、边界情况卫生)?
构念覆盖我们是在评估推理和沟通,还是仅仅在评估压力下的记忆?
可靠性两位评审会给出相似的评分吗(结构化评分表、锚定示例)?
不利影响我们是否无意中奖励了应试技巧而非真正的工程判断?
可游戏性 vs. 透明度准备是有帮助的,但唯一的通路不应是数月的死记硬背。

如果做得好,算法轮会产生一个可迁移的信号:能够干净地表示状态、维护不变量,并在约束下权衡取舍。这在工作中表现为限流器、调度器、流窗口、依赖图和有界缓存。若做得差,它们就沦为冷知识、陷阱以及“背 500 道中等题” 的小众产业。

常见模式族的真实价值

模式族典型生产使用
哈希表 / 集合去重、关联、成员测试、缓存键、幂等性。
滑动窗口 / 双指针流分析、滚动限流、窗口聚合。
堆 & 区间扫描优先级调度、Top‑K 查询、房间/时段分配、压缩遍历。
图(BFS/DFS)依赖解析、服务网络最短路、权限/ACL 遍历、工作流编排。
答案空间二分调整阈值(SLO 预算、退避),搜索最小可行容量。
动态规划优化、定价、编译器/分析、推荐系统,任何状态 + 转移 + 顺序重要的领域。

即使你在工作中从未写过“编辑距离”,其背后的思考——定义状态、保持不变量、提前测试边界——就是“在开发环境可运行”和“在生产环境存活”之间的区别。

更好的学习体系 – FAITH 循环

一个五部分的每日例行,保留学习发生的挣扎,同时降低无效摩擦。每天花 60–90 分钟

F — Find the family(找到族)

识别模式族并获得一个 策略层面的提示(不写代码)。
示例:“增长/收缩窗口?”,“层次 BFS?”,“答案空间二分?”

A — Articulate the invariant(阐明不变量)

在写代码前陈述核心不变量
示例:“窗口内字符唯一”, “堆保存当前 k 候选”, “dp[i] = 到 i 为止的最佳 …”。

I — Implement under a kind timer(在温和计时下实现)

  • 15 分钟:构思 / 第一次尝试。
  • 卡住时,获取 一个结构提示(框架,而非完整语法)。
  • 总计 45–50 分钟;随后切换到学习模式。

T — Test by trying to break it(通过尝试破坏来测试)

生成 3–5 组对抗输入(重复、空、极端、偏斜)。批量运行,修复第一个失败,并记录 为什么 失败。

H — Hold the learning(固化学习)

2 分钟 写一条微笔记:

Problem: 
Approach: 
Invariant: 
Failure mode + fix: 

让笔记 冷却 10 分钟后再回顾。

每周加入一次 30 分钟的模拟(一道中等,一道简单)。目标不是“赢”,而是暴露你的薄弱环节(清晰度、节奏、边界处理),并将其反馈到下周的计划中。

有效使用 AI

好的用法

  • 渐进式提示 – 策略 → 结构 → 检查点问题;除非在“事后复盘”阶段才写代码。
  • 边界压力 – 生成棘手输入并一次性批量运行,让 bug 早现。
  • 可视化 – 当文字解释失效时,用 30 秒展示调用栈或指针时间线。
  • 回忆 – 自动生成微笔记并安排复现,使今天的努力延续到下周。
  • 性能练习 – 模拟面试并提供后续评分(清晰度、思路、正确性)。

坏的用法

  • 在练习过程中直接请求代码。
  • 没有实际行动的无尽聊天(不运行、不测试、不可视化)。
  • 笔记写得太长,以至于根本不会再读。

经验法则:让 AI 降低反馈成本,而不是让思考变成可选项。

示例每周节奏(FAITH‑聚焦)

星期重点任务
周一数组 / 字符串2 题 – 仅策略提示;批量边界测试;指针可视化;微笔记。
周二哈希表 + 滑动窗口2 题 – 大声说出不变量。
周三链表 + 单调栈2 题 – 指针/栈快照;记录一次失败。
周四堆 & 区间2 题 – 扫描线 + 最小堆;共享边界测试。
周五2 题 – BFS 层级 + 访问语义;可视化队列边界。
周六答案空间二分2 题 – 定义 P(mid);真值表;防止 off‑by‑one。
周日轻量 DP2 题 – 状态/转移/顺序句子;2D 表填充图。
每日快速叙述90 秒“向橡皮鸭或 AI 解释题目和思路”。

坚持每天的 FAITH 循环,使用 AI 作为 反馈脚手架,你就能把 “F*** LeetCode” 的沮丧转化为可持续的、高影响力的学习习惯。

Back to Blog

相关文章

阅读更多 »

我最喜欢的小哈希表

文章 URL: https://www.corsix.org/content/my-favourite-small-hash-table 评论 URL: https://news.ycombinator.com/item?id=46205461 积分: 9 评论数: 0

第3天:反思与推动

概述:前两天的重点是打好基础:观看了 3Blue1Brown 的两个向量视频,并挑战了 LeetCode 题目 217、242、1、347……