• 简中
    • 繁中
  • 注册
  • 查看作者
  • 刷‌ 500 个力扣(Leetcode)题之后,我学到‌这 5 件事

    神译局是转载旗下编译团队,关注科技、商业、职场、生活等领域,重点介绍国外嘅新技术、新观点、新风向。

    转载:找开发方面嘅工作或者从事开发工作嘅人应该都听讲过Leetcode(力扣)。呢个网站汇聚‌大量包括大厂真题喺内嘅技术面试资源,拥有丰富嘅题库和活跃嘅社区,是好多找开发工作嘅人都离唔开嘅一个必备网站。但是,也有说法认为呢种题库只是纸上谈兵,对实际工作并没有太大帮助。喺这里做过大量练习嘅Federico Mannucci谈‌他嘅感受。原文发表喺Medium上,标题是:Five things I have learned after solving 500 Leetcode questions

    刷‌ 500 个力扣(Leetcode)题之后,我学到‌这 5 件事

    想找软件开发工作嘅任何人应该都非常认识Leetcode(力扣)。因为呢个网站收集‌最食香嘅一啲公司(如Google、Facebook以及微软)嘅技术面试时问题和解决方案。

    呢类涉及数据结构、算法嘅面试问题甚至喺小一点嘅公司当中也越来越受欢迎,但好多人对此却感到沮丧,因为佢哋认为知道点样解力扣嘅题目并唔系自身工作能力嘅真实反映。

    唔知道点样解力扣题未必就说明你是个糟糕嘅开发者,呢一点我也同意,而且你喺工作过程中可能永远都唔需要倒置一棵二叉树呢一点都系事实,但喺力扣这里多练肯定是可以教会你一啲嘢嘅,呢对于你嘅职业生涯一定会有啲好处嘅。

    1)数据结构同算法嘅重要性

    力扣并唔系数据结构同算法课,如果你以前没有准备过这门课嘅话,噉绝对应该选修一门传授这方面基础知识嘅课程,呢样才能有效地利用好呢个平台,但是有一点力扣是好有帮助嘅,噉就是佢可以好好地帮助你深入认识数据结构同算法嘅原理,以及嗰啲数据结构和算法最擅长嘅系乜嘢。

    坦白说,喺数据结构方面打下坚实基础对于每一位开发人员嚟讲都系必唔可少嘅,我最近就碰到一个故事,讲嘅系一个非常简单嘅算法就将GTA V嘅屏幕加载时间改进‌70%,而且根据我嘅经验,高效嘅实现可以让应用甚至处喺压力下都可以够平滑运行。

    2)总会有比你更懂嘅人

    喺揾到解决方案后,我通常会为自己写出嘅代码感到非常自豪,但是当我睇到评论部分时,呢种自豪感往往就会消失殆尽,因为你有时候会揾到甚至比官方解决方案还要好嘅实现。

    说实话,我喺力扣练习嘅时候学到嘅内容有一半都系来自认真睇人哋代码并试下实施佢哋嘅建议。

    要学嘅嘢永远都系越来越多,呢一点喺工作中更加系咁。我好幸运,有经验丰富嘅前辈帮我改进,呢种向他人学习嘅心态让得以尽可能多地吸收佢哋嘅知识。

    3)边界情况可能会毁掉你一整天

    我喺工作之前仲未有嗰种感受,就算代码犯‌点错误也没有太大嘅关系,特殊情况下才会发作嘅bug出现嘅几率好低,可以被忽略掉。

    但而家情况完全唔一样嘎啦,我而家是畀生产代码库做贡献,会有成千上万嘅人同我嘅工作进行交互,任何错误(甚至影响好小嘅半边街情况)都有可能出现,而且会畀我哋嘅客户带来唔便甚至造成损害。

    值得庆幸嘅系,力扣呢个地方是个绝佳嘅培训基地,喺这里每个问题都有数百个测试用例,而且往往也包括每一个边界情况——如果唔对嗰啲边界情况加以考虑嘅话,佢们就会导致代码出问题。

    我系喺最近被迫跟数据库打交道嘅时候才认识到呢一点嘅根本性嘅。当时嗰个数据库没有做出适当嘅约束,有好多行数据都包含有非预期值,幸运嘅系,我提前喺代码中处理掉嗰啲问题嘎啦,否则嘅话喺生产环境下出问题就唔得‌嘎啦。

    4)勤奋胜于天才······

    (前提是)当天才没有努力工作嘅时候。我钟意蒂姆·诺特克(Tim Notke)呢句话,从我个人嘅经验来睇,呢完全也适用于力扣,我认识嘅好多好出色好有才华嘅开发者也无办法解决大多数难度一般嘅问题,因为佢哋唔认识该用乜嘢模式,唔知道使用合适嘅工具,没能开发出适当嘅结构来解决此类问题。

    我啱开始嘅时候甚至比这还要糟糕,几乎任何一道简单嘅问题我都好难解决,但系喺上‌一啲跟数据结构和算法有关嘅课程,并经过大量练习之后,我终于取得‌进展,大部分嘅普通问题我都可以搞定,而且系喺合理嘅时间范围内解决嘅,甚至只用一半嘅时间都可以解决一啲难题嘎啦。

    当我最近为认识决问题从Python切换到Java时,我再次确认‌实践嘅重要性,我每天喺工作中使用Java时,根本感受唔到咗种敏悟,大多数问题如果唔去网上搜实现细节嘅话都解决唔嘎啦,好似我是个初学者时候嘅样。

    但呢啲并没有让我感到沮丧,而家我知道,只要有‌足够多嘅练习,我用Java也会像Python一样精通。

    5)计划是软件开发嘅重要组成部分

    喺练习以及实际面试中解决‌好多问题之后,我好快就意识到编码只是成个过程嘅一部分,而喺睇完提示后马上就写解决方案也许系一个人能犯下嘅最糟糕嘅错误。

    软件开发过程中充满‌模糊性,总会遇到意想唔到嘅结果,编码面试经常想要通过提供模棱两可或唔完整嘅问题来复制呢种情况,你得去跟面试官进行沟通,要求澄清并弄清楚可能嘅约束。

    唔仅咁,喺编写实际代码之前,你应该先提出解决方案,分析其优缺点,只有喺每个人都同意你所提出嘅建议是可接受嘅情况下才开始编码;如果你写嘅嘢并唔可以满足时间和空间要求嘅话,等你意识到呢一点时已经为时已晚,而且你也没时间去做出一个更好嘅实现嘎啦。

    呢一点喺实际工作当中同样重要,如果你唔先分析需求并仔细考虑可能性就开始写代码嘅话,噉极有可能最终需要重构大部分嘅工作。

    结论

    就我个人而言,好幸运我钟意力扣 ,而且我唔介意就算唔找工作也到嗰个网站去练习一下,但是我知道,也有好多人非常唔钟意佢,觉得佢其实并没有传授任何可以运用到实际工作当中嘅嘢。

    我希望这篇文章至少可以说服一部分人,情况并非咁,而且如果你被迫用佢来准备面试嘅话,请至少试下从中获得一啲有价值嘅嘢。仲有,如果你确实唔钟意佢嘅话,外面仲有好多工作是唔会问你力扣问题嘅。

    译者:boxi。

    cantonese.live 足跡 粵字翻譯

  • 0
  • 0
  • 0
  • 166
  • 请登录之后再进行评论

    登录
  • 任务
  • 发布
  • 偏好设置
  • 单栏布局 侧栏位置: