# 一面

  • 手写 删除链表的第 k 个节点
  • 手写 Funtion.prototype.bind
  • 手写 instanceof(a, b)
  • 实现大数相加: add('294732947329847328947328947382', '11') // 返回'294732947329847328947328947393'
  • 解释浏览器缓存
  • 网络分层,知道多少? 解释 https / TCP ,自己知道多深说多深
  • 跨域的方案解释一遍 (CORS, POST Massage, jsonP, 反向代理
  • 解释简单请求和非简单请求? 跨域如何带上cookie?
  • React 事件系统理解,尽量多看一些文章去理解透彻
   componentDidMount() {
    this.parent.addEventListener('click', (e) => {
      console.log('dom parent');
    })
    this.child.addEventListener('click', (e) => {
      console.log('dom child');
      
      // 1 加了这个之后会怎么样 ? e.stopPropagation()
    })
    document.addEventListener('click', (e) => {
      console.log('document');
    })
  }

  childClick = (e) => {
    console.log('react child');
    
    // 2 加了这个之后又会怎么样 ? e.stopPropagation()
  }

  parentClick = (e) => {
    console.log('react parent');
  }

  render() {
    return (
      <div onClick={this.parentClick} ref={ref => this.parent = ref}>
        <div onClick={this.childClick} ref={ref => this.child = ref}>
          test
        </div>
      </div>)
  }

  • React.useEffect 和 useLayoutEffect 的执行顺序
const App = () => {
  const [count, setCount] = React.useState(0);
  
  React.useLayoutEffect(() => {
    console.log('1')
    
    return () => {
      console.log('2')
    }
  }, [count])
  
  React.useEffect(() => {
    console.log('3')
    
    return () => {
      console.log('4')
    }
  }, [count]);

  return (
      <div onClick={() => setCount(2)}>{count}</div>
  );
}

ReactDOM.render(<App/>, document.getElementById('app'));

// 顺序应该是 2 => 1 => 画面变成2 => 4 => 3

# 二面

  • 解释箭头函数 和 this 指向
var a = 99
var obj = {
  a: 1024,
  say: () => console.log(this.a)
}

obj.say() // 打印的是?

obj.say.apply({a: 8989}) // 打印的是 ?
  • 考察类型转化
var obj = {a:1}

var foo = {}
foo[obj] = true

Object.keys(foo) // 返回的是什么?

  • 接着吹项目,吹比。。。。 40分钟完事