网易雷火前端一面面经
全程33min,整体比较简单,秋招的第一个面试,很多细节还没复习到。奇怪没有问任何项目相关
1.看代码说输出
const a = 10; function bar () { let b = 10; function foo () { console.log(a + b); } return foo; } b = 20; const x = bar(); x();考察闭包,作用域链。答案是20。
一开始面试有点紧张,答成了NaN,我说foo闭包里面没有a,按照作用域链向外查找,bar里面也没有,所以a是undefined,答案是NaN.然后面试官问为什么不继续向外找一层呢?我恍然大悟,真的脑子抽了。
2.闭包的理解。手写一个闭包。
我本来想手写react-thunk的thunkMiddleware函数秀一波,但面试官说简单随便写个就行,可恶。
3.dom2级事件
- 详细问了参数构成,想要在捕获阶段触发事件怎么写。
- target和currentTarget什么区别。
- 冒泡和捕获都监听的话,执行顺序是什么。(答错了,没复习到)
4.浏览器安全
XSS,CSRF常规八股,但我加了一些实际碰到过的案例进行讲解,比如喜马拉雅官网前几年出的一个bug,qq邮箱为什么默认情况下阻止图片的加载,面试官觉得很不错。
5.fiber的理解(讲了10min)
从react15的结构开始讲起,react15存在的问题,为什么会存在这样的问题。react16新架构是怎样的,做了哪些优化,工作流程是怎样的。
深入到了数据结构和源码讲了一下,面试官比较满意
6. hooks的理解(也讲了很久)
从代数效应,hooks设计理念,与类组件的差别,函数式编程,源码等角度讲了一下。
7.做题
数组去重,考虑空对象的情况,还有NaN的情况.
[1, 1, '1', '1', {}, {}, {age: 10}, {age: 10}, NaN, NaN]; => [1, '1', {}, {age: 10}, NaN]