web 前端需不需要刷算法?

更新日期: 2022-02-15 阅读: 1.5k 标签: 算法

大家好,我是坚持刷算法的前端西瓜哥。

最近我一如既往地打开了 Leetcode 官网打算找道算法题做做,然后看到了一个 “关于 web 前端需不需要刷算法” 的讨论,觉得可以说上一说我的看法。

我个人觉得 web 前端是非常有必要刷算法题的。这对我们的职业发展和个人成长是非常有帮助的。

个人职业发展

算法题能够提高自己写出高效率代码的能力。

大部分的 web 前端开发不少时间都是在写业务代码,要用到复杂算法的机会并不多,通常就是切切图还原视觉稿、实现下交互、和后端对下接口。

但我们不应该将自己局限在写业务代码,有时候我们还是要写非业务代码的。

或许你会说可以找别人写好的轮子,但并不是所有轮子都能满足我们的项目需求,尤其是细分领域,有些时候还是得自己动手造轮子。

很多算法问题其实都是脱胎于实际的场景的,对我们写出好的非业务代码有不小的借鉴意义。

如果你不想成为一名打杂,刷算法还是非常有必要的。

代码更健壮

刷算法有一些好处,你会注重代码的可读性,使用可读性更好的变量名,不使用多余的变量,让代码尽量简洁。

在刷题中,你不得不考虑算法的各种边界情况,以便应付一些极端的测试用例。这能提高你写的代码的健壮性,写出 bug 更少的代码。

此外你也能学到一些有意思的算法技巧。比如,Flood fill 算法可以处理油漆桶填充图形的问题,前缀和技巧可以通过缓存快速求一些中间范围的值。这对我们做方案有一定的帮助。

我们看一些优秀源码时,代码里面可能针对场景做了特殊的算法优化,如果你刷过算法题,就能更好地理解作者这样写的意图。

面试的基本要求

随着近些年前端开发从业人员越来越多,很多公司的产品越发切进细分市场、复杂度越来越高,考察算法能力基本上是中大型公司面试的标配了。

面试大公司时,你可能在每轮技术面试都会被要求解答至少一道 medium 难度的算法题,偶尔也会出现 hard 难度的题。算法不好被刷的概率会增大,除非你的项目经验表现足够优秀。

中小公司则好些,多数不考算法题,或者出一道很简单的算法题。

如果想让你的职业发展有更多的机会的话,建议你刷算法。

面试中能够做出所有的算法题,面试官不免会高看你一眼,有非常好的初步印象,提高你斩获 offer 的概率。

场景方案的思考

我们在开发中完成需求,经常会有多个解决方案,认真根据场景权衡不同方案的利弊,从中选择最合适的方案,是一名优秀的程序员非常重要的能力。

刷算法题,其实就是锻炼这个能力的过程。

不少的算法题的解法很多。有的解法空间复杂度高但时间复杂度低,有的时间复杂度高但空间复杂度低,有的实现起来很简单,有的性能更好但实现复杂容易写错。

虽然在刷算法题中,通常时间最快的算法是正解,但也有不少加了时间复杂度限制的题目,你需要分析不同的方案,找出对应场景最合适的解法。

我们在做题中,对每一个解法的利弊的分析,也是面试中重点考察的内容。

“与其刷算法题,还不如多做点项目”

也有人说:“与其刷算法题,还不如多做点项目”。其实这两点并不冲突,我们的业余时间不可能全部用来刷算法题。

刷题应该是我们能力提高的一环,而不是全部。我们除了刷算法题,还可以学习其他的知识,读书、学习理财知识、做点个人项目、像我这样写文章,都是可以的。

并不是说,我们刷了算法题,就没时间做其他事情了。

我是推荐每周完成 5 道算法题,周一到周五每天一道,哪天没完成,周六日再补上就好了。

像玩游戏一样刷算法题

首先我们不要想着算法能够速成,能够短时间就能大幅提高,它是一个慢慢积累的过程。

你应该像玩游戏一样,每天打一关,一点点地收获熟练度并提高难度。应该带着去通关一个有难度的游戏关卡去对待它。即使今天完不成,明天我们再尝试,不行就看攻略。

Leetcode 其实是一个非常好的提高自己算法能力的平台,因为它有覆盖度足够的测试用例,能让我们每次提交都能获得反馈。

相比自己工作中写出的代码,不知道部署到线上什么时候会导致事故,Leetcode 的反馈是即时的,对我们快速提高能力有非常大的帮助。

结尾

无论是什么程序员,我都建议他去刷算法题,因为算法能力是一名程序员的基本素养。

来自:https://www.toutiao.com/a7064203187749716511/
作者:前端西瓜哥

本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!

链接: https://fly63.com/article/detial/11169

相关推荐

JavaScript字符串压缩_js实现字符串压缩

设计一种方法,通过给重复字符计数来进行基本的字符串压缩。例如,字符串 aabcccccaaa 可压缩为 a2b1c5a3 。而如果压缩后的字符数不小于原始的字符数,则返回原始的字符串。 可以假设字符串仅包括a-z的字母

js实现将一个正整数分解质因数

js 把一个正整数分解成若干个质数因子的过程称为分解质因数,在计算机方面,我们可以用一个哈希表来存储这个结果。首先,你需要一个判断是否为质数的方法,然后,利用短除法来分解。

js之反转整数算法

将一个整数中的数字进行颠倒,当颠倒后的整数溢出时,返回 0 ;当尾数为0时候需要进行舍去。解法:转字符串 再转数组进行操作,看到有人用四则运算+遍历反转整数。

js求数组中的最大差值的方法总汇

有一个无序整型数组,如何求出这个数组中最大差值。(例如:无序数组1, 3, 63, 44最大差值是 63-1=62)。实现原理:遍历一次数组,找到最大值和最小值,返回差值

js实现生成任意长度的随机字符串

js生成任意长度的随机字符串,包含:数字,字母,特殊字符。实现原理:可以手动指定字符库及随机字符长度,利用Math.round()和Math.random()两个方法实现获取随机字符

js生成32位uuid算法总汇_js 如何生成uuid?

GUID是一种由算法生成的二进制长度为128位的数字标识符。GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中的 x 是 0-9 或 a-f 范围内的一个32位十六进制数。在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。

js从数组取出 连续的 数字_实现一维数组中连续数字分成几个连续的数字数组

使用原生js将一维数组中,包含连续的数字分成一个二维数组,这篇文章分2种情况介绍如何实现?1、过滤单个数字;2、包含单个数字。

Tracking.js_ js人脸识别前端代码/算法框架

racking.js 是一个独立的JavaScript库,实现多人同时检测人脸并将区域限定范围内的人脸标识出来,并保存为图片格式,跟踪的数据既可以是颜色,也可以是人,也就是说我们可以通过检测到某特定颜色,或者检测一个人体/脸的出现与移动,来触发JavaScript 事件。

js实现统计一个字符串中出现最多的字母的方法总汇

给出一个字符串,统计出现次数最多的字母。方法一为 String.prototype.charAt:先遍历字符串中所有字母,统计字母以及对应显示的次数,最后是进行比较获取次数最大的字母。方法二 String.prototype.split:逻辑和方法一相同,只不过是通过 split 直接把字符串先拆成数组。

js实现斐波那契数列的几种方式

斐波那契指的是这样一个数列:1、1、2、3、5、8、13、21、34......在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*);随着数列项数的增加,前一项与后一项之比越来越逼近黄金分割的数值0.6180339887..…

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!