美文网首页
记一次字节跳动面试题

记一次字节跳动面试题

作者: Aiq127 | 来源:发表于2020-06-22 23:45 被阅读0次

    今天三月份的时候,头脑一热投了几个包括头条和腾讯的大厂,emmmm像我这样的菜鸟结果显而易知。
    头条的两个面试题目倒是挺有趣的,简单又容易出错,记录一下。

    第一题
    var result = [];
    var a = 3;
    var total = 0;
    function foo(a) {
      var i = 0;
      for (; i < 3; i++) {
        result[i] = function() {
          total += i * a;
          console.log(i);
          console.log(total);
        }
      }
    }
    
    foo(1);
    result[0]();
    result[1]();
    result[2]();
    

    这题考的是作用域和闭包的知识,不认真想想,很容易做错。

    第二题
    console.log('begin');
    setTimeout(() => {
        console.log('setTimeout 1');
        Promise.resolve().then(() => {
            console.log('promise 1');
            setTimeout(() => {
                console.log('setTimeout2 between promise1&2');
            })
        }).then(() => {
            console.log('promise 2');
        });
    }, 0);
    console.log('end');
    

    这题考的是js运行机制,事件循环,宏事件微事件。
    最近看到另一个比较有趣的代码,和这个类似。

    document.getElementById('button').addEventListener('click',function(){
        // 记录任务开始时间
        let now = Date.now();
        // 插入一万条数据
        const total = 10000;
        // 获取容器
        let ul = document.getElementById('container');
        // 将数据插入容器中
        for (let i = 0; i < total; i++) {
            let li = document.createElement('li');
            li.innerText = ~~(Math.random() * total)
            ul.appendChild(li);
        }
        console.log('JS运行时间:',Date.now() - now);
        setTimeout(()=>{
          console.log('总运行时间:',Date.now() - now);
        },0)
     
        // print JS运行时间: 38
        // print 总运行时间: 957 
      })
    

    当我们点击按钮,会同时向页面中加入一万条记录,通过控制台的输出,我们可以粗略的统计到,JS的运行时间为38ms,但渲染完成后的总时间为957ms。
    简单说明一下,为何两次console.log的结果时间差异巨大,并且是如何简单来统计JS运行时间和总渲染时间:
    在 JS 的Event Loop中,当JS引擎所管理的执行栈中的事件以及所有微任务事件全部执行完后,才会触发渲染线程对页面进行渲染。
    第一个console.log的触发时间是在页面进行渲染之前,此时得到的间隔时间为JS运行所需要的时间。
    第二个console.log是放到 setTimeout 中的,它的触发时间是在渲染完成,在下一次Event Loop中执行的。
    挺神奇的,简单的利用异步可以大致算出页面重新渲染的时间。

    相关文章

      网友评论

          本文标题:记一次字节跳动面试题

          本文链接:https://www.haomeiwen.com/subject/foeqfktx.html