一面

面试类型 面试时长
技术面 1.5 小时
  1. 说出你知道的所有的 HTTP 协议的状态码;
  2. 浏览器缓存机制、强缓存、协商缓存等;
  3. Promise 有几种状态;
  4. Promise 有什么优缺点;
  5. 为什么要使用 redux 进行状态管理,你在哪些业务中使用了 redux ;
  6. 不使用状态管理的话,还可以通过什么方式去实现组件的状态共享;
  7. Context 及 use Context 的使用;
  8. react 中你用过哪些 hooks ;
  9. useEffect 有哪些参数,如何使用 useEffect 去实现类组件的部分生命周期方法;
  10. Hooks 执行顺序问题(不要在条件语句里使用 hooks );
  11. webpack 你用过哪些插件,介绍一下各个插件;
  12. 编程题:
    1. 编写一个函数,将给定数组中的对象 [{ a: 1 }, { b: 2 }, .... 合并成 { a: 1, b: 2, ... }
    2. 能不能用一些原生的方法去实现呢?
  13. 编程题:
    1. 实现函数 removeElement( arr, target ) 将数组 arr 中的 target 元素全部移除;
    2. 要求使用原地算法;

二面

面试类型 面试时长
技术面 2 小时
  1. 主要是业务面试相关问题:
    1. 你在开发中遇到了哪些问题,你是怎么查找原因的,最后用了什么方式去解决的;
    2. 涉及了 webpack 打包效率提升、打包结果优化等;
  2. 再就是对前端行业的一些看法,为啥选择做前端等问题;
  3. 编程题:
    1. 给定数组 arr = [ [ 2, 6, -1 ], [ 1, 5 ], [ 7, 7, [ 2, 3 ] ] ]
    2. 调用 sum(arr) 返回结果为 32 ,即将给定数组完全拍扁平并求和;
    3. 请实现该 sum() 函数;
  4. 编程题:
    1. 已提供一个方法 function add(a, b, callback) {} ,该方法接收三个参数;
    2. 第三个参数 callback 中传入的回调函数可以拿到前两个参数 ab 的和;
    3. add(3, 5, (result) => { console.log(result) }) 最终会在控制台输出 8 ;
    4. 并不是要求你实现 add 方法,要求调用 sum(1, 2, 3, 4).then(result => { console.log(result) }) 最终在控制台打印 1 + 2 + 3 + 4 的结果,即打印 10
    5. 限制条件:
      1. add 始终都只能计算两个数的和,并作为第三个参数回调函数的参数;
      2. sum 方法参数接收到的参数个数是不固定的;
      3. sum 方法的方法体内必须使用前面提供的 add 方法来实现求和;
      4. sum 方法最终会返回一个 Promise 对象,最终要在返回的这个 Promisethen 方法的 resolve 回调中接收到计算结果;

三面

面试类型 面试时长
Leader 面 0.5 小时
  1. 为什么从上家公司离职;
  2. 为什么选择前端技术栈;
  3. 对将来职业发展的规划;
  4. 假如我是一个还在用 jQuery + Bootstrap 的开发人员,你觉得你会怎么来说服我使用 React;
  5. 你离开上家公司之后,你所做的项目中,你觉得还有哪些东西是你想完善但是没有完善的,从项目整体优化角度来说,不要从具体的需求有哪些没做完来说;
  6. 你有什么问题想问我的吗;

    四面

    | 面试类型 | 面试时长 | | :—-: | :—-: | | HRBP 面 | 0.5 小时 |
  1. 为什么离职?(这点会问的非常细)
  2. 在上家公司的日常开发流程;
  3. 个人基本情况;
  4. 未来的职业规划;

    结果

    已收 Offer ;