记一次公司前端的面试题

353 阅读4分钟

最近老板让我负责前端面试,然后我就出了以下题目。公司业务偏向小程序这块,所以vue啥的基本上没问,都是偏基础问题。因为也没这方面的经验,所以有问题,希望各位大佬指正。
话不多说,直接上题

题目

  • JavaScript的数据类型

值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol(ES6)。
引用数据类型:对象(Object)、数组(Array)、函数(Function)。

个人认为这个是很简单的问题了,但是可惜的是八成的人都答不全。 希望听到的答案是:分为值类型和引用类型,分别是巴拉巴拉的。

  • 深拷贝和浅拷贝的区别,以及怎么实现对象的深拷贝

希望的答案:
1.通过 JSON.stringfy 对象将对象转成字符串,再将字符串用JSON.parse解析成对象(弊端:值包含undefined、function、symbol时会被忽略)。
2.递归复制。

    //递归复制
function deepCopy(obj) {
      var result = Array.isArray(obj) ? [] : {};
      for (var key in obj) {
        if (obj.hasOwnProperty(key)) {
          if (typeof obj[key] === 'object') {
            result[key] = deepCopy(obj[key]);   //递归复制
          } else {
            result[key] = obj[key];
          }
        }
      }
      return result;
    }

3.各种库(lodash、jQuery之类)都有深拷贝相关的方法
七成以上甚至连引用类型都不知道,所以走不到这一题上面来。然后部分知道的,只能基本上只能说出一种方法,已经算不错的了。

  • 简述一下js的闭包作用和实现

简单讲就是形成一个不被销毁的栈环境。可以用来实现变量私有化和创建静态方法(直接通过类名调用,而不需要实例化)。
简单的实现:

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();
 
add();
add();
add();
// 最后counter的值为3
  • var let const之间的区别。

区别也挺多的,还是多多益善,一般人都能说出几个。比如作用域区别,const是常量。其实这些已经差不多了,但是如果能再说点其他的,会非常加分。

  1. 暂时性死区:只要块级作用域内存在let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。
    下面代码会报错就是因为暂时性死区,定义很绕口,但是能知道下面情况什么时候会发生,就好了,或者知道存在这个。
var tmp = 123;
if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}
  1. letconst不允许重复声明。并且const只能在声明的时候赋值(这个比较简单,但是很多人真的不知道)。
  • ES6和ES5差异,或者说ES6相较于ES5增加了哪些内容

非常多,基本上没人能全部说出来,但是多多益善,尽量多说几个吧。
可以在这里看看,es6.ruanyifeng.com/ 如果能说出几个不常见的点,也是非常加分的。

  • css选择器权重方面的:

最基本的:!important(无限大)>内联(1000)>ID选择器(100)>class选择符(10)>标签选择(1)
加分项:属性选择器或伪类(10)、伪元素(1),通配选择器*(0)等等。

  • 说一下微信小程序的性能优化(微信小程序是公司主要的业务)

这个也很多,懒加载、减少setData的次数和不必要的setData,列表渲染的时候加上key,合理使用缓存,合理利用事件通信等等。

  • token和cookie的区别

又是一个能说很久的话题,尽量多说吧,这里不做赘述,推荐一个文章,www.jianshu.com/p/c33f5777c… 。也可以自己百度

  • 简单说一下vue双向绑定的实现

考一下对框架底层的了解,没人指望你实现一个vue,但是学习别人的思想和原理,对于自己平时技能的提升,很有帮助。
简单点答就是:vue3.0之前是利用Object.defineProperty重写get和set,vue3.0是利用Proxy。 具体实现原理,这里也不赘述了,以后会出文章专门写。

写在最后

用这套题面试了十个人左右了,大部分都是三年左右的前端,最厉害的也只能答出来六七成,大部分人只能答出三成,我都怀疑是不是题目太难了。唉~心累。

个人感觉都是一些基础知识,很少问框架相关的,因为我觉得基础好了,框架应该没啥大问题。这些题目,也是我以前面试经常遇到的一些,所以才出的这些。