2019-8-6:跨境电商面试题

426 阅读4分钟
1.请列举一些css3的新特性:
1.新选择器
2.文本
3.边框
4.背景
5.渐变
6.多列布局
7.过渡
8.动画、旋转
9.flex布局
10.media媒体查询
2.请实现一个垂直居中
方法一:position加margin 
方法二:diaplay:table-cell 
方法三:position加 transform 
方法四:flex;align-items: center;justify-content: center 
方法五:display:flex;margin:auto 
方法六:纯position 
方法七:兼容低版本浏览器,不固定宽高

方法一:position加margin

/**html**/

<div class="wrap">
    <div class="center"></div>
</div>

/**css**/

.wrap {
    width: 200px;
    height: 200px;
    background: yellow;
    position: relative;
}

.wrap .center {
    width: 100px;
    height: 100px;
    background: green;
    margin: auto;
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
}

兼容性:主流浏览器均支持,IE6不支持

方法二: diaplay:table-cell

<!-- html -->
<div class="wrap">
     <div class="center"></div>
</div>

/*css*/
.wrap{
    width: 200px;
    height: 200px;
    background: yellow;
    display: table-cell;
    vertical-align: middle;
    text-align: center;
}

.center{
    display: inline-block;
    vertical-align: middle;
    width: 100px;
    height: 100px;
    background: green;
}

兼容性:由于display:table-cell的原因,IE6\7不兼容

方法三:position加 transform

<!-- html -->
<div class="wrap">
    <div class="center"></div>
</div>

/* css */
.wrap {
    position: relative;
    background: yellow;
    width: 200px;
    height: 200px;
}
.center {
    position: absolute;
    background: green;
    top:50%;
    left:50%;
    -webkit-transform:translate(-50%,-50%);
    transform:translate(-50%,-50%);
    width: 100px;
    height: 100px;
}
兼容性:ie9以下不支持 transform,手机端表现的比较好。

方法四:flex;align-items: center;justify-content: center

<!-- html -->
<div class="wrap">
    <div class="center"></div>
</div>

/* css */
.wrap {
    background: yellow;
    width: 200px;
    height: 200px;
    display: flex; 
    align-items: center; 
    justify-content: center;
}
.center {
    background: green;
    width: 100px;
    height: 100px;
}

移动端首选

方法五:display:flex;margin:auto

<!-- html -->
<div class="wrap">
    <div class="center"></div>
</div>

/* css */
.wrap {
    background: yellow;
    width: 200px;
    height: 200px;
    display: flex; 
}

.center {
    background: green;
    width: 100px;
    height: 100px;
    margin: auto;
}

移动端首选

方法六:纯position

<!-- html -->
<div class="wrap">
    <div class="center"></div>
</div>

/* css */
.wrap {
    background: yellow;
    width: 200px;
    height: 200px;
    position: relative;
}

/**方法一**/
.center {
    background: green;
    position: absolute;
    width: 100px;
    height: 100px;
    left: 50px;
    top: 50px; 
}

/**方法二**/
.center {
    background: green;
    position: absolute;
    width: 100px;
    height: 100px;
    left: 50%;
    top: 50%;
&emsp;&emsp;margin-left:-50px;
&emsp;&emsp;margin-top:-50px;
}

兼容性:适用于所有浏览器

方法六中的方法一计算公式如下:

子元素(conter)的left值计算公式:left=(父元素的宽 - 子元素的宽 ) / 2=(200-100) / 2=50px; 
子元素(conter)的top值计算公式:top=(父元素的高 - 子元素的高 ) / 2=(200-100) / 2=50px;

方法二计算公式: 
left值固定为50%; 
子元素的margin-left= -(子元素的宽/2)=-100/2= -50px; 
top值也一样,固定为50%

子元素的margin-top= -(子元素的高/2)=-100/2= -50px;

方法七:兼容低版本浏览器,不固定宽高

<!-- html -->
<div class="table">
    <div class="tableCell">
        <div class="content">不固定宽高,自适应</div>
    </div>
</div>

/*css*/
.table {
    height: 200px;/*高度值不能少*/
    width: 200px;/*宽度值不能少*/
    display: table;
    position: relative;
    float:left;
    background: yellow;
}      

.tableCell {
    display: table-cell;
    vertical-align: middle;
    text-align: center;        
    *position: absolute;
    padding: 10px;
    *top: 50%;
    *left: 50%;
}

.content {
    *position:relative;
    *top: -50%;
    *left: -50%;
    background: green;
}

详解:xiaolin111.blog.163.com/blog/static…

3.transition和animation的区别

详解:blog.csdn.net/makerbeen/a…

4.请简述浏览器渲染过程
1.处理 HTML 并构建 DOM 树。
2.处理 CSS 构建 CSSOM 树。
3.将 DOM 与 CSSOM 合并成一个渲染树。
4.根据渲染树来布局,计算每个节点的位置。
5.调用 GPU 绘制,合成图层,显示在屏幕上。
5.请简述前端事件流

详解:segmentfault.com/a/119000001…

6.请简述前端节流及防抖原理(代码实现更优)

详解:juejin.cn/post/684490…

7.ajax是什么?优势、劣势?应该注意的问题?

详解:xiaolin10.blog.163.com/blog/static…

8.js统计字符串'absgkhqiodjnfxcjhd'频率出现最高的字母?
// 第一种
function num (str){
    var a = {};
    var b = str.split("");
    // key为元素   值为个数
    for (let i = 0; i < b.length; i++) {
        if(a[b[i]]){
            a[b[i]]++;
        }else{
            a[b[i]] = 1;
        }
    }
    // 通过比较找出最大的
    var maxLetter = "";
    var levelNum = 0;
    for (const k in a) {
        if(a[k] > levelNum){
            levelNum = a[k];
            maxLetter = k;
        }
    }

    console.log(maxLetter + ":" + levelNum);

    return maxLetter;
}
var cc = "dafsfsfasfafaqertyyuuioll,mmnnbvvsfsdfqgsafsafgff";
num(cc);

// 第二种
function num(str) {
    let map={};
    let data={};
    let arr=[];
    str.split('').reduce((obj, item) => {
      if(map[item]) {
        data[item] ++;
      } else {
        map[item]=true;
        data[item]=1
      }
      return data
    }, data)
    for(let i in data) {
      arr.push({name: i, count: data[i]})
    }
    arr.sort(function(a, b){
      return a.count - b.count
    })
    let minCount=arr[0].count;
    let minArr=arr.filter(item=> item.count === minCount);
    console.log(minArr, 'minArr')
    console.log('高频字母:'+ arr[arr.length-1].name,'高频字母数目:'+ arr[arr.length-1].count);
  }
  let str = "sdddsssvvffgeei";
  num(str);
9.js计算数组arr中最大相差值?
var data = [1,2,8,-5,6];
function difference(data) {
    let min = data[0];
    let max = data[0];
    for (let i=0;i<data.length; i++) {
        if(data[i]>max) {
            max=data[i];
            console.log(max, '555',data[i])
        }
        if(data[i]<min) {
            min=data[i];
            console.log(min, '666',data[i])
        }
    }
    return max-min;
} 
console.log(difference(data), 'data');
10.请简述Vue双向数据绑定原理?

详解:www.cnblogs.com/wangjiachen…