拼多多前端面经
一面:
一位美女面试官,上来直接给了三道题让我做,主要涉及:
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。难道这就是苦尽甘来吗。。。。。。。。😭😭😭