阿里钉钉web前端一面

  • 1.写个防抖函数, 有什么问题

    function debounde(handler, delay) {
      var time;
      return function() {
          var _self = this;
          var _args = arguments;
          time && clearTimeout(time);
          time = setTimeout(() => {
              handler.call(_self, _args);
          }, delay)
      }
    }
  • 2.封装个组件, Vue / React / 原生JS 点击组件时弹出组件的位置信息,并在下方出现一个div

  • 3.怎么学前端的,vue双向绑定

  • 4.表单中的input,id和name的区别

  • 5.跨域,解决方案

  • 6.css引入方式,选择器优先级

  • 7.原型链

  • 8.JS的模块化方案,CommonJS, ES6 Modle区别

  • 9.http请求方法,post和put区别

  • 10.异步请求方案

  • 11.垂直居中

  • 12.算法:区间合并 输入: [[1,6],[2,7],[23,34],[8,15]] 输出: [[1,7],[8,15],[23,34]]

    var merge = function(arr) {
    
      if (arr.length <= 1) {
          return arr;
      }
    
      var arr1 = arr.sort((a, b) => {return a[0] - b[0]});
    
      var res = [];
      let j = 1;
      let cur = arr1[0];
    
      while (j < arr1.length) {
          let next = arr1[j];
          if (cur[0] <= next[0] && cur[1] >= next[0]) {
              if (next[1] >= cur[1]) {
                  cur = [cur[0], next[1]];
              } // 前后能合并
              j++; // 前者包含后者,跳过
          } else if (cur[1] < next[0]) {
              res.push(cur);
              cur = arr[j];
              j += 1;
    
              if (j == arr1.length) {
                  res.push(cur);
                  break;
              }
          }
      }
    
      return res;
    }
    

/**

  • input = [[1,3], [2,6], [15,18], [8,10]]
  • output = [[1,6],[8,10],[15,18]]
  • /

var input = [[1,3], [2,6], [15,18], [8,10]]; var output = merge(input); console.log(output) ```