# 一面

# 自我介绍

# 平时怎么提升自己的前端水平

# github 上面主要写什么

# 笔试题

  1. // 任务
    // 面试官提出的问题将出现在这里。
    
    // 写出下面这段代码打印的结果
    async function async1() {
      console.log('async1 start');
      await async2();
      console.log('async1 end');
    }
    
    async function async2() {
      console.log('async2 start');
      return new Promise((resolve, reject) => {
        resolve();
        console.log('async2 promise');
      })
    }
    
    console.log('script start');
    
    setTimeout(function() {
      console.log('setTimeout');
    }, 0);
    
    async1();
    
    new Promise(function(resolve) {
      console.log('promise1');
      resolve();
    }).then(function() {
      console.log('promise2');
    }).then(function() {
      console.log('promise3');
    });
    
    console.log('script end');
    

# 浏览器渲染机制的理解

# 性能优化方面的理解

# 二面

# 自我介绍

# 你觉得最有挑战的系统

# 整个系统中如何解决各个模块之间关联的问题

# 测试上线流程是怎样

# 如何保证在改动过程中不影响别的模块

# 阐述一下在系统中哪个模块比较复杂

# 了解整个模块是怎么进行设计的吗

# 场景题

# 如果一个电商的页面,有很多的商品列表,用户在加载这个页面的时候很慢,你会从哪个方面解决问题

# 假如用户明确反馈在渲染列表的时候明显卡顿,如何解决

# 你会如何分析具体的问题出现的位置

# 阐述一下重绘与重排

# 什么时候需要重排

# 有一个页面,可以在后台输入商品内容展示给用户查看,你会怎样进行设计

# 公共组件你会怎么进行设计

# 算法题

/*
 给定一个整数数组,长度不定,如:[1, 2, 3, 4],设计一个算法,要求你计算出每一项元素中,除了它以外其它元素的乘积。
 要求,算法中不能使用除法,同时时间复杂度必须控制在O(n)。
 demo:
 var list = [1, 2, 3, 4]
 return [24, 12, 8, 6]
*/

function helper(list) {
  var n = list.length
  var before = [1]
  var after = Array(list.length).fill(1)
  
  var i = 1
  
  while(i < n) {
    before[i] = before[i - 1] * list[i - 1]
    i++
  }
  
  i--
  while(i >= 0) {
		if(i === n - 1) {
      i--
      continue
    }
    after[i] = after[i + 1] * list[i + 1]
    i--
  }
  
  var result = []
  for(var j = 0; j < n; j++) {
    result.push(before[j] * after[j])
  }
  return result
}