前端之路,论算法的重要性!不要与高薪大厂,职级晋升,失之交臂
都想拿到一份大厂offer,想斩获无数迷妹,想成为大家心中的大神级玩家......
但是!连第一关技术笔试和面试都过不了,还怎么坐在西二旗5A写字楼里和那些优秀的程序员们一起码代码打游戏?
总结了一下同学们秋招失败的原因,发现在秋招中,大部分程序员基本的数据结构和算法是不懂的。
而原因是什么?
原因就在于编程有一个很有趣的特性,表面上看是只需要码代码,真正需要的思维技能不容易考察,而且即使编得不好,你也可以把代码写完。
此外,在实际工作中,有一部分程序员的工作中接触后数据结构和算法的机会不多,如此而已,时间长了,即使学过数据结构和算法也忘了。如此一来,程序员中自然会出现大量没有接受数据结构和算法训练的成员。
话说回来,程序员究竟要不要学习算法呢?当然要!而且你花费一辈子的时间去研究算法也不为过。
工作需要
如果你不会,也许不妨碍你能找到工作,如果你想单纯的只完成做一个前端页面仔,低级码农的话,别说算法了,就是连高级框架的源码都可以不用搞明白!
但在这一行你没法上升得足够高,因为这个金字塔顶端的人可都是会这些的。
未来需要
如果你想不断进步,不被时代淘汰,还能激流勇进,那么你需要强大的算法功底作为内功,进而能去不断探索前端主流框架及源码,深入对前端工程化的理解,有能力为大型项目提供一个完整的系统化的解决方案。
性能需要
这个就不用说了,如果你的产品用户量很少,几百几千个用户无所谓快慢,选什么数据结构的类库也没啥影响,但是如果你的产品是千万级、亿级的呢,你时时刻刻都得考虑性能,一个简单的ArrayList可能都会导致系统崩溃。
学习了数据结构和算法,考虑问题的角度、深度和广度就会不一样,也是在未来职场和别人竞争的捷径,更是面试时你怼面试官的法宝。
尤其是对于很多想去大厂的同学们来说,数据结构和算法,是所有大厂的必考面试题,并且在校招的面试题中,出题比例高达60%以上。要想去这类优质企业的同学,必须要掌握一些算法,接下来就是分享一些算法类的面试题,接招啦!
判断一个单词是否是回文?
回文是指把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫做回文,也叫回环。比如 mamam redivider
很多人拿到这样的题目非常容易想到用for 将字符串颠倒字母顺序然后匹配就行了。其实重要的考察的就是对于reverse的实现。其实我们可以利用现成的函数,将古玩字符串转换成数组,这个思路很重要,我们可以拥有更多的*度去进行字符串的一些操作。
function checkPalindrom(str) {
return str==str.split('').reverse().join('');
}去掉一组整型数组重复的值
比如输入: [1,13,24,11,11,14,1,2]
输出: [1,13,24,11,14,2]
需要去掉重复的11 和 1 这两个元素。
这道问题出现在诸多的前端面试题中,主要考察个人对Object的使用,利用key来进行筛选。
/**
* unique an array
**/
let unique=function(arr) {
let hashTable={};
let data=[];
for(let i=0,l=arr.length;i<l;i++) {<="" p="">
if(!hashTable[arr[i]]) {
hashTable[arr[i]]=true;
data.push(arr[i]);
}
}
return data
}
module.exports=unique; 统计一个字符串出现最多的字母
给出一段英文连续的英文字符窜,找出重复出现次数最多的字母
输入 : afjghdfraaaasdenas
输出
前面出现过去重的算法,这里需要是统计重复次数。
function findMaxDuplicateChar(str) {
if(str.length==1) {
return str;
}
let charObj={};
for(let i=0;i<str.length;i++) {<="" p="">
if(!charObj[str.charAt(i)]) {
charObj[str.charAt(i)]=1;
}else{
charObj[str.charAt(i)] +=1;
}
}
let maxChar='',
maxValue=1;
for(var k in charObj) {
if(charObj[k] >=maxValue) {
maxChar=k;
maxValue=charObj[k];
}
}
return maxChar;
}
module.exports=findMaxDuplicateChar; 排序算法
如果抽到算法题目的话,应该大多都是比较开放的题目,不限定算法的实现,但是一定要求掌握其中的几种,所以冒泡排序,这种较为基础并且便于理解记忆的算法一定需要熟记于心。冒泡排序算法就是依次比较大小,小的的大的进行位置上的交换。
function bubbleSort(arr) {
for(let i=0,l=arr.length;i<l-1;i++) {<="" p="">
for(let j=i+1;j<l;j++) {<="" p="">
if(arr[i]>arr[j]) {
let tem=arr[i];
arr[i]=arr[j];
arr[j]=tem;
}
}
}
return arr;
}
module.exports=bubbleSort;
除了冒泡排序外,其实还有很多诸如 插入排序,快速排序,希尔排序等。每一种排序算法都有各自的特点。全部掌握也不需要,但是心底一定要熟悉几种算法。 比如快速排序,其效率很高。
算法参考某个元素值,将小于它的值,放到左数组中,大于它的值的元素就放到右数组中,然后递归进行上一次左右数组的操作,返回合并的数组就是已经排好顺序的数组了。
function quickSort(arr) {
if(arr.length<=1) {
return arr;
}
let leftArr=[];
let rightArr=[];
let q=arr[0];
for(let i=1,l=arr.length; i<l; i++)="" {<="" p="">
if(arr[i]>q) {
rightArr.push(arr[i]);
}else{
leftArr.push(arr[i]);
}
}
return [].concat(quickSort(leftArr),[q],quickSort(rightArr));
}
module.exports=quickSort;
安利大家一个学习的地址,通过动画演示算法的实现。
感谢您的阅读,暂时分享到这里,算法运用是进大厂晋升的基石。所以一定要将算法能力提升。
喜欢小编文章的可以点个赞关注小编哦,小编每天都会给大家更新文章。
我自己是一名从事了多年的前端老程序员,小编为大家准备了新出的前端编程学习资料,免费分享给大家!
上一篇: 用Python获取B站播放历史记录!
下一篇: 基于EMR离线数据分析-反馈有礼