当前位置: 首页 > 面试经验 >

字节AML前端日常一面

优质
小牛编辑
90浏览
2023-07-13

字节AML前端日常一面

  1. 自我介绍
  2. 说项目
  3. 说一下js基本类型
  4. 说一下bind, call, apply的区别
  5. 说一下原型链
  6. 说一下new发生了什么,没说出来
function mynew(func, ...args) {
    const obj = {}
    obj.__proto__ = func.prototype
    let result = func.apply(obj, args)
    return result instanceof Object ? result : obj
}
  1. 说一下async await怎么实现,我答的generator函数
  2. 说一下闭包,实现一个计数器
  3. 实现一个request,可以在失败的时候重试,有interval和maxCount参数
async function request(options, interval, maxCount) {
    let alreadyRetryCounts = 0
    let result
    
    const fetchData = async () => {
        await fetch(options)
        .then(res => result = res)
        .catch(() => {
            alreadyRetryCounts++
            if (alredayRetryCounts <= maxCount) {
                setTimeout(fetchData, interval)
            }
        })
    }
    
    await fetchData()
    
    return result
}
  1. 浏览器的事件循环和Nodejs的事件循环的区别
  2. 输出题,哪些是宏任务,微任务?
async function async1() { 
    console.log('async1 start'); 
    await async2(); 
    console.log('async1 end'); 
  } 
  
  async function async2() { 
    console.log('async2'); 
  } 
  
  console.log('script start'); 
  
  setTimeout(function() { 
      console.log('setTimeout'); 
  }, 0); 
  
  async1(); 
  
  new Promise(function(resolve) { 
      console.log('promise1'); 
      resolve(); 
    }).then(function() { 
      console.log('promise2'); 
  }); 
  
  console.log('script end'); 

出了点小问题,没做过await相关的,都是Promise.then,之类的同步写法

script start
async1 start
async2   // 正确的
promise1
script end
async1 end
promise2
setTimeout

// 我把awiat 语句包括下面那行当成微任务处理了,所以我面试的时候说的是
script start
async1 start
promise1
script end
async2    // 错误的
async1 end
promise2
setTimeout

  1. 算法题,爬楼梯,斐波那契秒了
const fib = (n) => {
    const nums = [0, 1]
    if (n <= 1) return n
    
    for (let i = 2; i <= n; i++) {
        nums[i] = nums[i - 1] + nums[i - 2]
    }
    
    return nums[n]
}

反问:

  1. 技术栈,假如要入职的话会做什么工作
  2. 对我有什么建议

面试官说我还不错,许愿二面

 类似资料: