Table of Contents
设定明确的目标和时间限制
在开始任何定时编码会话之前, 定义具体、 可测量的目标。 与其像“ 练习算法” 这样的模糊目标, 不如将其拆散: 在每场25分钟内解决三个中等难度的数组问题, 或者在40分钟内完成一个动态编程问题。 明确的目标会保持你的做法的焦点, 并防止无目的地在问题集中徘徊 。
设定严格的时间限制也同样重要。 许多有抱负的工程师在定时设置中失败,不是因为他们无法解决问题,而是因为他们浪费了非基本细节。对每个问题使用倒计时器,把它当作一个艰难的最后期限。随着时间的推移,这个学科会训练你的大脑高效地分配精神资源。比如,如果你发现自己在单一方法上被困了10分钟以上,那么就强迫自己选择一个解决方案,然后优化。
选择右侧练习环境
您的物理和数字设置会直接影响您的性能。 尽可能的模仿真实的测试条件。 使用一个最小的杂乱的工作空间。 关闭电话通知、 关闭无关的浏览器标签并禁用Slack或电子邮件。 如果您在家练习, 请考虑使用噪声 取消耳机或背景白噪声 。
选择一个提供内建的定时器和直播反馈的编码平台。 [[FLT: 0]] LeetCode [[FLT: 1] 和 [[FLT: 2]] HackerRank 提供时间竞演和模拟访谈, 密切模拟真实的评估环境。 对于竞争性编程, 代码Force [ 提供定期计时回合。 关键是复制实际测试的压力: 不浪费时钟、 不切换任务、不过早检查解决方案 。
现实问题实践
开始处理与您当前技能水平相匹配的问题。 如果您正在准备技术访谈( 如 FAANG) , 请关注最常见的被询问话题: 数组、 字符串、 散列图、 树、 图表、 动态编程和重现。 避免过早跳入极端困难的问题, 这样可以压抑信心和浪费时间。 相反, 当您掌握每个模式时, 将逐渐增加难度 。
选择问题时, 优先选择需要批判性思维和算法选择的问题。 避免在两分钟内用野蛮武力解决的琐碎问题。 一个好的时间练习问题会迫使您权衡时间复杂度、空间复杂度和可读性之间的权衡。 例如,一个要求您找到最长的子字符而不重复字符的问题可以通过滑动窗口 O(n) 方法解决, 但是在时间限制下, 天真 O(n2) 解决方案会失败 。
使用过去的考试和模拟测试
没有什么能让你像模拟实际考试那样完全准备。 许多平台都提供过去的竞争问题或模拟面试套件。 设置一个精确测试时间的定时器, 并完成一系列问题, 而不中断。 课后, 审查每一个解决方案, 无论是正确还是不正确 。
在回顾期间,请问自己:我在哪里浪费时间?我是否过度思考了问题陈述?我错过了一个边缘案例?我是否因为语言不熟悉而编码太慢了?用这些见解来调整策略。例如,如果你注意到你总是在阅读提示前五分钟重新阅读,那么在一分钟内就训练自己去提取关键限制。
时间管理战略
有效的时间管理不仅仅是设置一个定时器。 学会在一个单一的问题中明智地分配时间。 编码访谈中常用的规则是:在问题理解和高层规划上花费5分钟。一旦你有一个明确的计划,即15-20分钟的代码,那么就省下最后5-10分钟的测试和调试。如果你碰到一个死胡同,就不要害怕去掉你的方法,重新开始新的工作 — — 这往往比修改一个有缺陷的解决方案要快。
按难度排列问题的优先次序
在多问题定时测试(比如黑客计时或竞争性编程回合)中,快速扫描所有问题。首先解决最简单的问题,以获得积分并形成势头。然后转向更困难的问题。这一策略使您无法在困难问题上花费40分钟,而将容易的积分留在桌面上。许多顶尖竞争者都遵循“简单”的顺序。
使用“ 2 ” 技术
对于复杂的问题,考虑两条路径:首先实施一个即使缓慢但效果正确的野蛮武力解决方案。然后,如果时间允许,优化它。拥有一个工作(但缓慢)解决方案远胜于未完成的最佳解决方案。在访谈中,采访者有时接受正确的野蛮武力,然后口头讨论优化,节省宝贵的编码时间。
心理准备和处理压力
时间环境会引发压力,从而降低认知性能。为了应对这种情况,将心理准备纳入常规。在每次课前进行深呼吸练习或短暂的思维冥想。在时间测试中,如果感到恐慌,暂停10秒,深呼吸,重新关注问题。
另一种方法是用外部压力来模拟准确的压力,比如让朋友看你们代码或者用网络摄像头来记录自己。 你越是暴露在被监视的感觉中,真正的采访就会感到的恐惧就越少。
制定会前程序
在每次定时会话之前创建一致的仪式:审查几条快速提示,听一首激起的歌曲,或者解决一个微不足道的热身问题。 随着时间的推移,这一仪式标志着你的大脑进入“焦点模式 ” 。 这是职业运动员和音乐家的常见做法,它能很好地翻译成编码。
深入审查和反思
后会议审查是实际增长的地方。
- 我被困在哪里了? 被困在了哪里? 被困在了哪里?
- 我先试了哪一种方法?
- 我是不是犯了粗心的语法错误?
- 我处理过边缘案件(空输入,大量数量等)吗?
- 我花了多少时间去调试对写新代码?
使用电子表格或日记跟踪这些度量衡。 在10–20会话之后, 模式会出现。 例如, 您可能会发现由于变量命名不善, 或经常忘记处理无效输入, 总是会持续损失5分钟。 具体地在下一个练习块中解决这些弱点 。
从官方解决方案和讨论中学习
解决问题后,请将您的解决方案与官方编辑和顶级社区解决方案进行比较。注意编码样式、算法选择和边缘大小写处理。如果您看到某种技术,请在下次时间会议之前单独研究。这一有针对性的学习可以快速填补空白。
保持一贯和逐步增加难度
一致性大于强度。 每周五天每天30分钟的练习会比周末的4小时马拉松更能产生效果。 每天的课时都安排在同一个时间来建立习惯。 使用日历或习惯跟踪应用程序来让自己承担责任。
随着你变得舒适, 将挑战逐渐增加。 将每个问题的时间缩短。 从简单到中到难。 引入你不太熟悉的新话题。 添加“ 没有外部库” 或“ 以你很少使用的语言编码 ” 等限制。 这种渐进式超载会保持你的大脑适应性,防止高原。
调用代码模板和片段
在时间化的环境中,每秒数。 构建一个可重复使用的代码模式的心理库: 二进制搜索模板、 Union = find 执行、 滑动窗口锅炉板、 树质翻转和图 BFS/ DFS。 当你开始一个问题时, 您可以立即写入骨架, 而无需重新定义它。 这样就可以释放解决问题独特方面的认知负荷 。
大多数现代的IDE和在线编辑器允许您保存一个私有的片段文件。虽然许多定时测试禁止外部资源,但允许通过心知肚明模板。在温暖的会话中快速输入这些模式,从而成为肌肉记忆。
分析性能计量
不要仅仅依赖直觉。 使用练习会的数据来识别弱点。 跟踪每个问题的衡量标准 :
- 第一个代码字符的时间( 规划速度)
- 第一次正确提交的时间( 编码速度)
- 失败的尝试次数( 调试效率)
- 调试失败的时间
平台, 如 [[ FLT: 0]] InterviewBit [[FLT: 1]] 经常提供时间的 QQPER 问题统计。 使用这些见解来排列优先级。 例如, 如果您调试时间很长, 请练习写更清洁的代码, 并使用打印语句或控制台日志 。 如果您的规划时间很长, 请尽快读取问题, 并立即识别模式 。
定时编码控制器的最后单词
在时间压力下掌握编码并不是天生的天赋 — — 它是通过刻意练习而形成的一种技能。 设定明确的目标、模拟真实环境、在多个层面管理时间、严格反省每个会话。 随着时间的推移,你的速度和准确性将会提高,钟将会成为盟友而不是敌人。
欲获取额外资源, 请通过freeCodeCamp和[[FLT: 2]] BigFrontEnd[ 平台探索 编码访谈崩溃课程[ , 用于前端指定时间的挑战。 继续按下限制, 您将在任何时间编码方案下繁荣起来 。