web 前端需不需要刷算法?

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

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

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

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

个人职业发展

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

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

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

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

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

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

代码更健壮

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

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

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

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

面试的基本要求

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

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

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

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

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

场景方案的思考

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

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

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

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

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

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

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

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

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

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

像玩游戏一样刷算法题

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

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

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

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

结尾

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

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

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

js洗牌算法:javascript数组随机打乱顺序的实现方法

有一个数组,我们需要通过js对数组的元素进行随机排序,然后输出,这其实就是洗牌算法,首页需要从元素中随机取一个和第一元进行交换,然后依次类推,直到最后一个元素。

程序员必须知道的10大基础实用算法及其讲解

程序员必须知道的10大算法:快速排序算法、堆排序算法、归并排序、二分查找算法、BFPRT(线性查找算法)、DFS(深度优先搜索)、BFS(广度优先搜索)、Dijkstra算法、动态规划算法、朴素贝叶斯分类算法

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

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

原生Js获取数组中最长的连续数字序列的方法

给定一个无序的整数序列, 找最长的连续数字序列。例如:给定[100, 4, 200, 1, 3, 2],最长的连续数字序列是[1, 2, 3, 4]。此方法不会改变传入的数组,会返回一个包含最大序列的新数组。

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

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

JS常见算法题目

JS常见算法题目:xiaoshuo-ss-sfff-fe 变为驼峰xiaoshuoSsSfffFe、数组去重、统计字符串中出现最多的字母、字符串反序、深拷贝、合并多个有序数组、约瑟夫环问题

RSA算法详解

这篇文章主要是针对一种最常见的非对称加密算法——RSA算法进行讲解。其实也就是对私钥和公钥产生的一种方式进行描述,RSA算法的核心就是欧拉定理,根据它我们才能得到私钥,从而保证整个通信的安全。

PageRank算法的定义与来源、以及PageRank算法原理

PageRank,网页排名,又称网页级别、Google左侧排名或佩奇排名,是一种由 根据网页之间相互的超链接计算的技术,而作为网页排名的要素之一,以Google公司创办人拉里·佩奇(Larry Page)之姓来命名。

js算法_js判断一个字符串是否是回文字符串

什么是回文字符串?即字符串从前往后读和从后往前读字符顺序是一致的。例如:字符串aba,从前往后读是a-b-a;从后往前读也是a-b-a

js之反转整数算法

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

点击更多...

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