字节前端面经一二面---8.10
一面
1. 下面的输出
var a = {
name: 'bytedance',
func: function() {
console.log(this.name);
}
};
Var fun1 = a.func;
fun1();
2. 一秒后输出1,两秒后输出4,三秒后输出5...
let a = [1, 4, 5, 7, 9] // 1s 1 // 2s 4 // 3s 5
3. display都有哪些属性?
inline、inline-block、block的区别?像是margin、padding和宽高都是哪些可以设置?
4.
注意1.45版本大于1.5。因为45版肯定大于第五版。
5. 数据类型都有哪些?Symbol怎么创建的?
6. vue的v-if和v-for
7. 回答下闭包吧,你对闭包的理解
第一轮还有几题,我给忘了,想起来再补。
第二轮
1. 封装个简单版的axios();
2. 封装个可以检测所有数据类型的函数
//我答的
function testType(type){
if(typeof type !='object'){
return type;
}
if(type===null) return null;
let str = Object.prototype.toString.call(type);
return str.slice(8,str.length-1);
}
console.log(testType({}));
3. 下面的输出
log(1);
setTimeout(()=>{log(2)}, 0);
Promise.resolve().then(()=>{log(3)})
var p = new Promise(res=>{
log(4)
setTimeout(()=>{
res(5)
log(6)
},0)
})
p.then(e=>{log(e)})
4. 说一下原型链?
原型链继承的弊端?
怎么避免?
我答了用Object.create(),这样可以复制一个原型链,不影响原本的父链。 又问还有其他方法嘛? 我说ES6继承 ES6继承会不会影响父链? 我答:不会,ES6继承源码就是用Object.create()实现的。
5. 数组扁平化输入:
[1,2,[3,4,[5,{a:1},[6]]]]
输出:[1,2,3,4,5,{a:1},6]
function flat(arr){
arr = JSON.stringify(arr).replace(/\[|\]/g,'');
arr = '['+arr+']';
return JSON.parse(arr);
}
console.log(flat([1,2,[3,4,[5,{a:1},[6]]]]));
function flat(arr){
if(typeof arr !='object') return arr;
if(Object.prototype.toString.call(arr)=='[object Object]'){
console.log(arr);
return arr
}
let res=[];
for(let i=0;i<arr.length;i++){
res[i] = flat(arr[i]);
}
return res;
}
console.log(flat([1,2,[3,4,[5,{a:1},[6]]]]));
6. tcp建立的过程?
讲了三次握手
为什么要三次握手呢?
两次握手不也可以建立链接嘛?
提示:tcp是全双工的通信
讲讲你对udp的理解?
7. 你都知道哪些http状态码?
200、301、304、307、403、404、500、503
