前端基础知识

1.深拷贝与浅拷贝的区别

  浅拷贝是指创建一个对象,这个对象有着原始对象属性值的一份精确拷贝。如果属性是基本类型,那么拷贝的就是基本类型的值,如果属性是引用类型,那么拷贝的就是内存地址,所以如果其中一个对象修改了某些属性,那么另一个对象就会受到影响。
  深拷贝是指从内存中完整地拷贝一个对象出来,并在堆内存中为其分配一个新的内存区域来存放,并且修改该对象的属性不会影响到原来的对象。

 

2.深拷贝与浅拷贝的实现方式

  浅拷贝:(1) Object.assign的方式 (2) 通过对象扩展运算符 (3) 通过数组的slice方法 (4) 通过数组的concat方法。
  深拷贝:(1) 通过JSON.stringify来序列化对象 (2) 手动实现递归的方式。

 

3.简述无缝轮播的实现思路

  多张图片从左至右依次排列,点击左右侧按钮切换图片的时候,让图片的父级容器的left偏移值增加或减少单张图片的宽度大小,同时配合CSS3 transition过渡或者手写一个动画函数,这样可以实现一个比较平滑的动画效果。对于无缝轮播,我当时的思路是再拷贝一个图片的父级容器出来,例如原来一个<ul><li></li><li></li></ul>对应两张图片,现在变为两个ul对应4张图片,同时ul的父容器监听自身的scrollLeft,如果值已经大于等于一个ul的宽度,则立即将自身的scrollLeft值重置为0,这样就又可以从起点开始轮播,实现无缝的效果。

 

4.前端性能优化方案

  这个其实方案还是比较多的,可以从DOM层面CSS样式层面JS逻辑层面分别入手,大概给出以下几种:

  (1) 减少DOM的访问次数,可以将DOM缓存到变量中;

  (2) 减少重绘回流,任何会导致重绘回流的操作都应减少执行,可将多次操作合并为一次

  (3) 尽量采用事件委托的方式进行事件绑定,避免大量绑定导致内存占用过多;

  (4) css层级尽量扁平化,避免过多的层级嵌套,尽量使用特定的选择器来区分;

  (5) 动画尽量使用CSS3动画属性来实现,开启GPU硬件加速;

  (6) 图片在加载前提前指定宽高或者脱离文档流,可避免加载后的重新计算导致的页面回流;

  (7) css文件在<head>标签中引入,js文件在<body>标签中引入,优化关键渲染路径

  (8) 加速或者减少HTTP请求,使用CDN加载静态资源,合理使用浏览器强缓存协商缓存,小图片可以使用Base64来代替,合理使用浏览器的预取指令prefetch预加载指令preload

  (9) 压缩混淆代码删除无用代码代码拆分来减少文件体积;

  (10) 小图片使用雪碧图,图片选择合适的质量尺寸格式,避免流量浪费。

 

5.git多人协作时如何解决冲突

  冲突主要是出现在多人在修改同一个文件的同一部分内容时,对方当你之前push,然后你后push的时候git检测到两次提交内容不匹配,提示你Conflict,然后你pull下来的代码会在冲突的地方使用=====隔开,此时你需要找到对应的开发人员商量代码的取舍,切不可随意修改并强制提交,解决冲突后再次push即可。

 

6.JS中==与===的区别。

  ==表示抽象相等,两边值类型不同的时候,会先做隐式类型转换,再对值进行比较;
  ===表示严格相等,不会做类型转换,两边的类型不同一定不相等。

 

7.冒泡排序

  简单实现,代码如下:

//冒泡排序 从大到小
function sort(arr){
     // 一共几个数就循环几回
     for(var i = 0; i < arr.length; i++){
         // 一回要比较多少次
       for(var j = 0; j < arr.length - i; j++){
             if(arr[j] < arr[j+1]){
                var temp;  //声明一个临时变量帮助交换两个数
                temp = arr[j];
                 arr[j] = arr[j+1];
               arr[j+1] = temp;
            }
         }
     }
    return arr;
}

 

posted @ 2019-11-06 15:08  银泰。。  阅读(111)  评论(1)    收藏  举报