一面:
一位美女面试官,上来直接给了三道题让我做,主要涉及:
1、深复制和浅复制:Array.prototype中的slice和concat方法是一种浅复制,只适用于对不包含引用对象的一维数组的深拷贝

//slice方法的浅复制
var arr=[1,[10,10,10],2,3];
var ar=arr.slice(0,2);
console.log(arr);
console.log(ar);

ar[1][0]=11;

console.log(arr);
console.log(ar);

//concat方法的浅复制
var arr2=[[1]]
var ar2=[[1]];
var a=arr2.concat(ar2);
console.log(a);
console.log(arr2);
console.log(ar2);

arr2[0][0]=100;
ar2[0][0]=200;

console.log(a);
console.log(arr2);
console.log(ar2);

    2、扩展运算符   :题目如下面代码所示:请问输出什么。

var x=[1,2,{'a':1}];
y=x;
z=[...x];
y[0]=2;
y[2].b=2;
z[2].a=2;
console.log(x,y,z)

var arr=[1,[10,10,10],2,3];
console.log(...arr);
console.log('...',arr) //输出什么呢

    3、正则表达式中的replace :题目主要讲的替换,例如:str="hello{total}"  obj={total:'world'} ,用obj中对应的值进行替代。

function rep(str,obj) {
return str.replace(/{([a-zA-Z]+)}/g,function(s,1];
})
}

    4、最后问了我vue diff原理和源码:我只说了vue局部更新dom的流程,源码没细看。

二面:
一位很年轻的男面试官,主要问了:
1、单向链表的创建、插入、反转

    2、new实例化过程  

首先了解new做了什么,使用new关键字调用函数(new ClassA(…))的具体步骤:

1、创建一个新对象:

var obj = {};

2、设置新对象的constructor属性为构造函数的名称,设置新对象的proto属性指向构造函数的prototype对象;

obj.proto = ClassA.prototype;

3、使用新对象调用函数,函数中的this被指向新实例对象:

ClassA.call(obj);  //{}.构造函数()

4、将初始化完毕的新对象地址,保存到等号左边的变量中

注意:若构造函数中返回this或返回值是基本类型(number、string、boolean、null、undefined)的值,则返回新实例对象;若返回值是引用类型的值,则实际返回值为这个引用类型。

    3、url数组并发请求,尽可能快的按照数组顺序输出结果

三面:
hr面,主要谈谈一些老生常谈的,为什么选择拼多多?能接受工作强度吗?有女朋友吗?准备留在上海吗?面完拼多多,回去等结果,昨天晚上打电话过来,说是通过面试,后面会有hr谈offer。难道这就是苦尽甘来吗。。。。。。。。😭😭😭