PDD 前端 一面 面筋(附答案)
整理了一份PDD前端面筋,答案记录在评论里~
时长65min,问问题45min,手撕代码20min
1、BFC是什么?BFC能用来干什么?怎么才能触发BFC?
2、浏览器的重排和重绘是什么意思?重绘的触发条件?如何避免重绘重排?
3、http状态码?304 / 301 / 401 / 403 分别代表什么
4、什么叫做同源策略,服务端向服务端请求会产生跨域吗?
5、函数防抖,函数节流
6、看代码输出
第一道 输出/闭包
for (var i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i);
}, i * 1000);
}
思考:
1.改为输出0-4
1)用let声明i
2)匿名函数立即执行实现闭包
for (var i = 0; i < 5; i++) {
(function (i) {
setTimeout(function () {
console.log(i);
}, i * 1000);
})(i)
}
2.改为立即输出0-4
将setTimeout里的函数改为立即执行
第二道 事件循环
setTimeout(function () {
console.log(1);
new Promise(function executor(resolve) {
console.log(7);
for (var i = 0; i < 10000; i++) {
i === 9999 && resolve();
}
console.log(8);
}).then(function () {
console.log(9);
});
}, 0);
setTimeout(function () {
console.log(6);
}, 0);
new Promise(function executor(resolve) {
console.log(2);
for (var i = 0; i < 10000; i++) {
i === 9999 && resolve();
}
console.log(3);
}).then(function () {
console.log(4);
});
console.log(5);
7、如何判断元素是否在可视区域ViewPort
8、如何实现简单的hash路由
9、手写一个倒计时xx时xx分xx秒
一开始用setTimeout搞定,问我有什么不足,面试官说会有误差,问我如何解决
最后在每次setTimeout里算和上一次的误差,补充在下一轮setTimeout的delay参数里
#我的实习求职记录##23届找工作求助阵地##拼多多2023春招##前端面试[话题]##牛客创作充电计划#