(资料图片仅供参考)
【CSDN 编者按】作为一个代码在线评测平台,LeetCode 是许多程序员提高编程技能和算法能力的极佳场所,它包含了算法、数据库、Shell、多线程等多种分类的题目,其中以算法题目为主。那么当一个人在 LeetCode 上狂刷 400 道题后,会得到什么新的感悟吗?
原文链接:/durgesh4993/after-solving-400-leetcode-questions-here-are-five-things-that-i-have-learned-c60
未经允许,禁止转载!
作者 | Durgesh kumar prajapati 在我成功刷完了 LeetCode 上 400 道题之后,我获得了一些宝贵的经验,这些经验对我在软件开发方面的理解和方法产生了深远的影响。 本文将介绍我从中悟 到的五点经验。
LeetCode 这个网站对许多正在找工作的软件开发人员来说并不陌生,它整理了来自谷歌、Facebook、微软等顶尖公司的技术面试题目和题解。然而,让人感到困惑的是,现在越来越多的小公司也开始大量采用关注数据结构和算法的面试题,这让一些人产生了疑问,因为他们认为 "Leetcode能力" 并不能准确衡量他们的工作实力。 我赞同这个观点,擅长 LeetCode 并不等同于你就是一个出色的开发者,而且在实际工作中,你可能永远不需要反转二叉树。然而,通过练习 LeetCode,你会学到很多有价值的东西,这些都将在你的职业生涯中发挥重要的作用。 LeetCode 并不提供全面的数据结构和算法(DSA)课程,因此在使用这个平台前,你需要对这个数据结构和算法有基础的了解。我强烈建议你刷题之前要系统地学习数据结构和算法的基础课程。然而,一旦你在 数据结构和算法(DSA)上打下了基础,再去刷 LeetCode 就将如虎添翼,而且刷题也会反向加深你对数据结构和算法的理解。 值得一提的是,对于任何开发者来说,具备扎实的数据结构基础都极为重要。最近国外就有一位大神玩家通过对算法进行小改进,成功让游戏的加载时间缩短了70%。在大规模使用的情况下,数据结构和算法的有效实现对于应用程序的性能和稳定性影响深远。 我经常会对找到的解决方案和自己写出的代码进行对比,经常会为自己的解法感到自豪,但每当我浏览评论区时,可能会破受打击。我看到过一些解决方案,它们甚至优于官方提供的答案。在使用 LeetCode 刷题过程中,我学到的很多内容都源于对他人代码的仔细研究,并将他们的建议融入我的工作。 这种 “总有更多可以学习” 的观念同样适用于我的职业生涯。我很幸运,有经验丰富的同事们愿意慷慨分享他们的知识,帮助我提升自己。这种向他人学习的方法让我能尽可能多地吸取他们的专业知识。 在正式工作之前,代码中的错误基本上不会产生任何实际的后果。那些只在特定情况下才会显露的 bug 往往可以被忽视。但如果你已经工作,代码将推到生产环境,如果你的产品用户量庞大,任何一个哪怕只在一个极端情况下出现的bug,都可能给大量用户造成麻烦。 LeetCode 提供了对这种场景的极好训练,因为每个问题都有数百个测试用例,这其中往往包含很多边界用例。如果未能正确处理好边界情况,代码就会失败。 最近,我需要处理一个缺乏适当约束的数据库,其中许多行包含一些意料之外的数值。我非常感谢在 LeetCode 上积累的技能,因为这让我能在这些问题影响生产环境之前就识别并解决它们。 “当天赋未得以施展时,勤奋胜于天赋。” 这句话出自 Tim Notke,对我个人来说,其影响深远,尤其是在使用 LeetCode 刷题时。我曾遇到许多在处理中等难度问题时挣扎的天才开发者,因为他们对解决问题的方法和所需工具的经验和理解不足。 起初,我在 LeetCode 上解决最简单的问题也会感到困难。然而,在参加了几门数据结构和算法课程并经过一段时间的练习后,我提升到了在合理时间内解决大多数中等难度,甚至一些难度较大的问题的水平。 为了更好地提高我的 Java 编程能力,我最近将 LeetCode 的解题语言从 Python 切换到 Java。尽管我每天在工作中都在使用 Java,但在解决这些问题时,我并不觉得自如。然而,我并没有感到沮丧。我坚信,只要有足够的实践,我在 Java 的技巧就能达到和 Python 一样的熟练程度。 规划是软件开发的核心环节,不容忽视。无论是在实际编程中还是参加正式面试中,都能深刻意识到编码只是整个过程的一部分。有时我们往往会陷入这样一个误区:读到问题提示后,立即进入编码阶段,这是一种常见的错误,很容易因为了解和思考地不够清楚导致结果不尽人意。 软件开发中充满了模糊不清和意外的情况,编程面试试图通过提供通常模糊或不完全的问题来模拟这个现象。与面试官沟通,寻求对任何不确定性或限制的明确解释是非常重要的。建议在开始编写代码之前,先提出解决方案,评估其优点和局限性,只有当所有人都接受了提出的计划,才开始编码。 否则,如果解决方案不满足时间和空间要求,将无法进行任何必要的更改。这一点同样适用于专业环境,因为如果在没有适当分析需求和考虑所有选项的情况下开始编码,可能最终导致大规模重构。 作为一个个体,我很幸运可以享受在 LeetCode 上学习和挑战,甚至在找工作之外的时间里也能从中获得乐趣。然而,我也理解并不是每个人都有同样的看法,有些人可能会认为它是浪费时间,或者刷题得到的经验在实际开发中毫无用武之地。 标签: