撩课-Web大前端每天5道面试题-Day37

作者: 撩课学院 | 来源:发表于2019-01-10 07:32 被阅读22次

1.描述一下React 生命周期?

 渲染过程调用到的生命周期函数,主要几个要知道;
 * constructor
 * getInitialState
 * getDefaultProps
 * componentWillMount
 * render
 * componentDidMount

 更新过程

 * componentWillReceiveProps
 * shouldComponentUpdate
 * componentWillUpdate
 * render
 * componentDidUpdate

 卸载过程

 componentWillUnmount

2.实现组件有哪些方式?

 React.createClass 使用API来定义组件
 React ES6 class component 用 ES6 的class 来定义组件
 Functional stateless component 通过函数定义无状态组件

3.shouldComponentUpdate函数有什么作用?

shouldComponentUpdate是一个允许我们自行决定某些
组件(以及他们的子组件)是否进行更新的生命周期函数,
reconciliation的最终目的是尽可能以最有效的方式去根据新的state更新UI,
如果你已经知道UI的哪些状态无需进行改变,
就没必要去让React去判断它是否该改变。
让shouldComponentUpdate返回falss, 
React就会让当前的组件和其子组件保持不变。

4.手写数组快速排序

快速排序”的思想很简单,整个排序过程只需要三步:
(1)在数据集之中,选择一个元素作为”基准”(pivot)。
(2)所有小于”基准”的元素,都移到”基准”的左边;
 所有大于”基准”的元素,都移到”基准”的右边。
(3)对”基准”左边和右边的两个子集,不断重复第一步和第二步,
 直到所有子集只剩下一个元素为止。
 代码:

  var quickSort = function(arr) {
 if (arr.length <= 1) { return arr; }
 var pivotIndex = Math.floor(arr.length / 2);
 var pivot = arr.splice(pivotIndex, 1)[0];
 var left = [];
 var right = [];
 for (var i = 0; i < arr.length; i++){
    if (arr[i] < pivot) {
      left.push(arr[i]);
    } else {
      right.push(arr[i]);
    }
  }
  return quickSort(left).concat([pivot], quickSort(right));
};

5.判断一个字符串中出现次数最多的字符,并统计次数?

 var str = 'shdshdfjkfjfdgjkjdksgjskdjfsfsfsfjksjkfdkjf'

 var arr = str.split('').sort()//把字符串变为数组,在排序                        

 str = arr.join('') //把排序好的数组,变为字符串

 var count = 0  //不能使用undefined,转化为数字是NaN

 var char = 0

 var reg = /(\w)\1+/g                       

 str.replace(reg,function(parent,son){                                   

     if(parent.length >count){

              count = parent.length

              char = son
      }                                   
 })

 console.log("最多的字符为:"+char+";个数为:"+count)         

 拓展:replace方法:

 replace语法:

 replace(reg,function(parent,son1,son2,index){

 第一个参数:匹配成功的子字符串(parent)

 第二个参数:第一个分组内容;(son)

  第三个参数:第二个分组内容;(son2)

 ...

 最后一个为开始的下标

 })

 <script type="text/javascript">

 var data = '2019-1-8'

 var reg = /(\d*)-/g

 var data = data.replace(reg,function(parent,son1,index){  //此时没有son2

 console.log(parent) //2019- , 1-                             

 console.log(son1) //2019 , 1

 console.log(index) //0  5  开始匹配的下标

 return son1+'.'                                   

 })

 console.log(data) //2016.6.8                                   

 </script>         

 使用replace()基本方法

 var data = '2019-1-8'

 var reg = /-/g

 var data = data.replace(reg,'.')

 console.log(data)  //2019.1.

相关文章

网友评论

    本文标题:撩课-Web大前端每天5道面试题-Day37

    本文链接:https://www.haomeiwen.com/subject/sgxvrqtx.html