欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

前端之路,论算法的重要性!不要与高薪大厂,职级晋升,失之交臂

程序员文章站 2022-04-08 19:28:33
...

  都想拿到一份大厂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;

  安利大家一个学习的地址,通过动画演示算法的实现。

  感谢您的阅读,暂时分享到这里,算法运用是进大厂晋升的基石。所以一定要将算法能力提升。

  喜欢小编文章的可以点个赞关注小编哦,小编每天都会给大家更新文章。

  我自己是一名从事了多年的前端老程序员,小编为大家准备了新出的前端编程学习资料,免费分享给大家!