快手前端面经
一面:1.简历项目 2. 考察数组的基本方法, 哪些方法会改动原数组哪些不会
3. 一道递归遍历对象手撕题
function fn(tree, name){
// 请在这里实现
if(tree.name == name){
return tree;
}
let ans = null;
if(tree.children && tree.children.length != 0){
tree.children.forEach((node)=>{
ans = ans || fn(node,name);
})
}
return ans;
}
var tree = {
name : '中国',
children : [
{
name : '北京',
children : [
{
name : '朝阳群众'
},
{
name : '海淀区'
},
{
name : '昌平区'
}
]
},
{
name : '浙江省',
children : [
{
name : '杭州市',
code : '0571',
},
{
name : '嘉兴市'
},
{
name : '绍兴市'
},
{
name : '宁波市'
}
]
}
]
};
var node = fn(tree, '杭州市');
console.log(node); // { name: '杭州市', code: 0571 }
4. 手撕事件总线(没写出来)
二面:
- 代码输出
setTimeout(() => {
console.log(1);
}, 0);
console.log(2);
new Promise((resolve, reject) => {
console.log(3);
resolve();
}).then(() => {
console.log(4);
new Promise((resolve, reject) => {
resolve();
}).then(() => {
console.log(6);
});
});
console.log(5);
2.css
<style type="text/css">
#a {
font-size: 12px
}
div p {
font-size: 13px
}
.a .b .c {
font-size: 15px
}
#b {
font-size: 15px
}
div .c {
font-size: 15px
}
</style>
<div id="a" class="a">
<div id="b" class="b">
<p id="c" class="c">I’am here</p>
</div>
</div>
请问在标准模式下显示的 I’am here 字符会是多大的字体?命中的是哪一条规则?
3.请写出下列代码的输出结果:
var a = 0, b = 0;
function A(a) {
A = function (b) {
console.log(a + b++);
};
console.log(a++);
}
A(1);
A(2);
4.实现一个函数 find(obj, str),满足:如var obj = {a:{b:{c:1}}};find(obj,'a.b.c') //返回1find(obj,'a.d.c') //返回undefined
答错了不少,然后二面挂,尝试二战快手,结果一面来了个高手,没顶住压力
二战的一面:
为什么选择前端项目
八股:css: flex布局, 现场出题
Es6:说了解的新功能
考察promise运行顺序: forEach包裹asnyc函数和async for in循环体里await的运行顺序
考察this指向, 普通对象的函数和箭头函数,你说箭头函数的this指向是在编译的时候确定的,那js的编译和c,c++的编译有什么区别
变量提升和暂时性死区的相关概念
说一下你了解的http状态码, 401和403区别。
你之前提到304是协商缓存,请你说一下http缓存机制, cache-control 的nostore和nocache的区别
算法题 240. 搜索二维矩阵 II - 力扣(LeetCode)当时知道要二分但是没做过这种二维的二分,没撕出来
答出来了七八成吧,面试官都是现场编题,水平很高,后来面试官虽然对我有一点正向评价,但还是给我挂了,不过整体面试过程很愉快,学到了一些东西。累了,不会再战了,总归还是无缘手子了,毕竟还是自己太菜了
#快手信息集散地#