前端升职加薪套路第1步-算法与数据结构

    最近很多人都在准备升职或者跳槽,而大多数都没有把算法和数据结构考虑在内。原因呢,在于算法这个东西,很多人认为前端用不着算法,算法都在后端,大厂只是为了筛人才考算法,实际工作中是用不着的。这样的回答我听过了很多很多,一般我也不会直接反驳,随便问几个问题就行了。比如:

    用过Map吗,什么时候会用,Map与对象有什么区别,Map性能高?为什么?哈希表?为什么用了哈希表就性能高了?Map与对象怎么选择?

    怎么给一个数字数组排序。用数组的sort函数?为什么,如果我数据量特别大呢?如果这个数组里不是数字,而是对象呢,我要求稳定排序,你还用sort吗?sort底层怎么实现的呀?

    精通Vue?Vue的数组节点都有key吧,这个key有什么注意事项吗?看过Vue源码?Vue中是如何实现VDOM DIFF的呀?最长递增子序列?怎么用到了最长递增子序列呢?为什么我把Vue中最长递增子序列的算法拷贝到LeetCode300题,却过不去呢?尤雨溪写错了吗?为什么不用最长公共子序列呢?

    擅长React?React当中的fiber是什么数据结构?链表?为什么要用链表呢,数组不行吗,毕竟Vue中就用的数组?React中先执行优先级高的任务,好多任务,怎么找出优先级最高的任务呢?排序?怎么排序?       React和Vue都写过?它俩怎么做技术选型呢?聊个细节,它俩的VDOM DIFF有什么不同呀?

    擅长后端?用过Redis吧,什么时候选择Redis呢,支付可以用Redis吗?Redis快,确定吗?Redis可能会出错?为什么?怎么避免出错呢?

    做过加密吗?前端可以加密吗,怎么做呀?安全吗?需要后端配合吗?

    先问到这儿吧,这些问题,也有人说从来没遇到过,平常做的都是增删改查的cms,那如果你永远都做这样简单的工作,怎么升职加薪呢?是不是要尝试做一些复杂项目,而对于复杂项目,数据量可能会非常大,那是不是为了性能就要考虑Map与对象的选择了呢,你会选吗?还有一些复杂项目,如果把逻辑都放在后端,那如果和服务端交互太多且慢,最后导致影响了用户体验,你是不是可以考虑把一部分逻辑放在前端呢,比如在已有数据里找到评分最高的餐厅,你会实现吗?

    相信说到这里,大家已经意识到算法的重要性了。其实说白了,数据结构和算法就是教我们写出可以高效运行的代码。如果接下来你想继续在前端的路上升职加薪,那赶紧迈出第一步吧,好好学下算法和数据结构。

    当然很多人问怎么学习算法和数据结构呢,毕竟学算法可不是轻松事儿,这个问题其实很简单:1. 看视频教程;2. 看书;3. 刷题。当然第1个方法很简单也很高效,对于第2个和第3个我来详细说一下,首先书的话,建议买经典书籍,这个时候推荐《算法导论》与《算法》:

图片

图片     《算法导论》这本书很详细,讲了算法领域的所有思想,也是我大学时候老师让买的教材,不过这本书里都是伪代码,可以带你认识算法并了解其实用场景。当然书的难度并不低,所以一开始也不用强求自己全部掌握,可以当做一本工具书,时尝翻阅。红色的《算法》书里有很多JAVA版算法代码实现,当然算法不分语言,前端小伙伴学习的时候拆到JS就可以了。除了这两本,我还有一本《数据结构与算法分析》,这本书里讲到的数学知识会多一点:

图片     我平常是红色的《算法》放在公司,《算法导论》和《数据结构与算法分析》放在家里,经常翻翻,尤其是失眠的时候,当然治疗失眠的效果与你算法实力是成反比的~

当然书籍的话初步你可以只选择红色的《算法》,不过我觉得《算法导论》思想讲的更多更详细,而《算法》和《数据结构与算法分析》代码实现多一些,理论相对没有《算法导论》多。

    最后来说下刷题这件事,LeetCode是个非常不错的刷题平台,不过上面题型千千万,全刷不仅艰难而且没必要。这个时候你应该分类去刷,比如算法小白从链表开始刷起,慢慢再过渡到堆栈、排序、二分、哈希、动态规划等,题目选择经典题型或者面试题型就行了:

image.png     最后呢,祝大家都能升职加薪成功,下次我们再来分析升职加薪套路第2步。大家有什么疑问,也可以留言告诉我。最近开通了公众号(bubucuo),分享更多前端干货内容,关注哦~

图片

Guess you like

Origin juejin.im/post/7033712303761522718