练了500道Leetcode题后,我学到这五件事

练了500道Leetcode题后,我学到这五件事

所有寻找软件开发职位的人应该都非常了解Leetcode,该网站收集了一些最受欢迎的公司(如Google,Facebook和Microsoft)进行技术面试时遇到的问题和解决方案。对于软件工程师或者数据科学家,Leetcode网站上的算法和数据结构相关的题目是非常有帮助的。

这类涉及数据结构和算法的面试问题甚至在小公司中也变得越来越流行,这是很多人丧气的原因,他们认为自己的“leetcoding”技能不能真实反映他们的工作能力。

虽然我同意不了解Leetcode不代表你是一个糟糕的开发,而且在你的工作中,你可能永远不会去反转一个二叉树,但熟练使用Leetcode能教会你很多东西,而它的好处终将会显现在你的职业生涯中。如果你想了解更多数据分析相关内容,可以阅读以下这些文章:

数据科学家八大最常见统计面试题
13大自测问题:你适合当数据科学家吗?
SQL面试终极指南(附习题)
面了Amazon、Uber、Tesla、Samsung数据科学家岗后,我总结了这16道面试真题

图片摘自Unsplash的 这是工程RAEng

数据结构和算法的重要性

Leetcode不是DSA的课程,如果你对这个主题没有准备,那你绝对应该去选择一门课程来帮助你学习如何有效地使用该平台的基础知识,而且它还可以帮你深入了解它们的工作原理和最擅长的领域。扎实的数据结构基础对于每个开发人员都是必不可少的。最近我遇到了一个简单算法成功减少了70%GTA V加载屏幕时间的故事,并且根据经验,我可以知道如何高效地实现应用程序在压力下的平稳运行。

总有人比你懂得多

在找到解决方案后,我通常会对自己的代码感到非常自豪,但当我看到评论部分时,这种自豪感往往会消失,因为在评论部分,有时你会发现有些解决的方案甚至超越了官方解决方案。平心而论,在学习Leetcode的过程中,我学到的东西有一半是来自于阅读别人的代码,并自己尝试着去实施他们的建议。在我的工作中,“多多益善”的理念很有效。我很幸运有非常有经验的前辈帮助我,这种向他人学习的心态能让我尽可能多地吸取他们的知识。

极端案例会毁了你的一天

在真正开始工作之前,如果我在代码中犯了一个错误,一个永远不会出现并情境特殊的bug,并没有什么真正的利害关系。但现在情况完全不同了,我贡献了一个生产代码库,成千上万的人可以与我的工作进行交互,任何出现的错误(甚至影响较小的边缘情况)都有可能给我们的客户带来不便,甚至损害。值得庆幸的是,Leetcode是一个绝佳的培训基地,每个问题都有数百个测试用例,经常也会包括每个边缘案例,如果考虑不周,代码就会运行错误。最近,当我不得不使用到一个没有适当限制,而且很多行里都有意外值的数据库时,我意识到这是多么基本的错误。幸运的是,我能够在这些问题扩大成生产问题之前,在代码中找到并解决这些问题。

勤奋胜过天赋…

当天赋不再管用时,勤奋会胜过天赋。我喜欢Tim Notke的这句话,据我的个人经验,它也完全适用于Leetcode,我知道许多出色而有才的开发人员无法解决大多数中等问题,因为他们不知道问题的模式和正确的工具,也没有开发出合适的结构来解决此类问题。我刚开始时比这还差,我几乎连所有简单的问题都很难解决,但是在完成了一些有关DS&A的课程并钻研了许多简单的知识之后,我逐渐可以在合理的时间范围,甚至在一半时间内解决大多数中风问题的程度。当我最近从Python切换到Java来解决问题时,我再次确认了实践的重要性,虽然在日常工作中,使用Java对我来说并不像Python一样熟练,我也像回到开始一样,如果不用Google搜索,就无法解决大多数问题。这并没有让我失落,因为现在我知道,只要有足够的练习,我就会像精通Python一样精通Java。

规划是软件开发的一个重要组成部分

解决了实践和实际采访中的许多问题后,我很快意识到编程只是这个过程中的一部分,而在阅读部分要求后立即开始编程可能会是最糟糕的错误。软件开发中总是充满了模棱两可与意想不到的结果,编程面试经常会尝试通过提供模棱两可或不完整的问题来模拟这种情况,所以你必须和面试官沟通并要求他澄清不清楚的地方和可能的限制。

不仅如此,在实际写代码前,你还应该提出一个解决方案,分析它的优缺点,只有在每个人都同意并接受你的建议下再开始编程;如果你直接开始编程,但你的计划不能满足时间和空间上的要求,当你发觉时间太短,已经太迟了。

这在实际工作中同样重要,如果你写代码时没有分析要求,没有仔细考虑到所有可能性,那么最终你极有可能要返工。

结论

就我个人而言,我很幸运能喜欢Leetcode,并且我在不找工作的时候也愿意用它练习。但希望我的文章至少说服了一部分人,如果你不得不用它来做面试准备,请至少试着从中获取有价值的东西,但如果你无论如何就是不喜欢,那其实也有很多工作不会问到Leetcode问题的。你还可以订阅我们的YouTube频道,观看大量数据科学相关公开课:https://www.youtube.com/channel/UCa8NLpvi70mHVsW4J_x9OeQ;在LinkedIn上关注我们,扩展你的人际网络!https://www.linkedin.com/company/dataapplab/

感谢你的阅读。

原文作者:Federico Mannucci
翻译作者:Lea
美工编辑:过儿
校对审稿:Jiawei Tong
原文链接:https://towardsdatascience.com/five-things-i-have-learned-after-solving-500-leetcode-questions-b794c152f7a1