ASCII码 ASCII码

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

发布于:2022-01-19 09:51:59  栏目:技术文档

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

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

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

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

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

相关推荐
阅读 +