知乎社招前端面试(一面)

基础题

  • 闭包;
  • 回流和重绘?如何规避带来的性能开销?;
  • cookie的samesite属性;
  • 浏览器缓存策略;
  • 强制缓存和协商缓存状态码区别;
  • 箭头函数和普通函数区别;
  • 状态码301和302区别
  • React v15和v16的区别 生命周期函数;
  • fiber理解;
  • 兄弟组件间通信方式;
  • context使用;
  • 受控组件和非受控组件区别;
  • webpack优化点;
  • hapyPack组件共享进程设置;
  • webpack增量更新设置;

笔试题

  1. 输出结果:
console.log(1);
setTimeout(() => {
    console.log(2);
});

new Promise((resolve) => {
    resolve();
    console.log(3)
}).then(() => {
    console.log(4);
}).then(() => {
    console.log(5);
});

console.log(6);
// 1,3,4,5,6
  1. a为何值时下述表达式成立:
var a = ?
if (a==1 && a==2 && a==3) {
console.log(1)
}
// a = {i:1, valueOf: () => a.i++}

3.手写Promise.all

// 思路解析
// 1.Promise.all()返回的肯定是一个promise对象,所以可以直接写一个return new Promise((resolve, reject) => {})(这应该是一个惯性思维)
// 2.遍历传入的参数,用Promise.resolve()将参数"包一层",使其变成一个promise对象
// 3.关键点是何时"决议",也就是何时resolve出来,在这里做了计数器(count),每个内部promise对象决议后就将计数器加一,并判断加一后的大小是否与传入对象的数量相等,如果相等则调用resolve(),如果任何一个promise对象失败,则调用reject()方法。
// 一些细节:
// 1.官方规定Promise.all()接受的参数是一个可遍历的参数,所以未必一定是一个数组,所以用Array.from()转化一下
// 2.使用for…of进行遍历,因为凡是可遍历的变量应该都是部署了iterator方法,所以用for…of遍历最安全

Promise.prototype.myAll = function(iterators) {
    // 可遍历参数转换为数组
    const promises = Array.from(iterators);
    const len = promises.length;
    // 执行成功标识
    let count = 0;
    let resultList = [];
    // 返回一个Promise对象
    return new Promise((resolve, reject)=>{
        promises.forEach((p,index) =>{
            Promise.resolve(p)
            .then((result)=>{
                count++;
                resultList[index] = result;
                if(count === len){
                    resolve(resultList);
                }
            })
            .catch(e=>{
                reject(e);
            })
        })
   })
}
#面经##知乎##社招##前端工程师#
全部评论
笔试题第一题错了 应该是1 3 6 4 5 2
4 回复 分享
发布于 2021-04-03 17:03
原来还有笔试题的
点赞 回复 分享
发布于 2021-03-26 11:33

相关推荐

Yushuu:你的确很厉害,但是有一个小问题:谁问你了?我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了😆
点赞 评论 收藏
分享
5 44 评论
分享
牛客网
牛客企业服务