面试时长90mins+,面试官人很好,很帅很爱笑,项目 + 八股答得还不错,代码有点崩,数据结构和算法这边没太准备,面试官评价还可以,应该问题不大

  • 面试官自己部门的业务介绍

  • 自我介绍

    • 感觉项目经历很丰富,为什么选择来做前端?
  • 项目:

    • wecrush是跨端的一个应用,那当时为什么没有考虑使用一些跨端的技术,而是使用react去做一个web应用的开发?
      • 答了RN的移动端开发和web在并行的推进,然后根据后续产品的一些决策,把研发的精力投入到了web这边来
    • 组件库的设计和使用这边,为什么不使用Ant Design、ElementUI等更加成熟的组件,而是自己手写?
      • 答了开发过程中其实有参考这些组件的设计和代码,当时是为了满足一些定制化的需求。并且也有从人才培养的角度去回答,可以自己了解一些组件库的底层实现原理
    • 然后问到了这种公共组件如果需要修改,所有引用了这个组件的页面都需要重新做测试,这种问题是怎么解决的?
      • 回答了目前暂时没有太好的解决方案,只能对公共组件的编写、测试、CR等提出更加严格的要求,尽量不出问题,并且也要对之前的页面做全量的测试
      • 面试官有提出可以使用module wrapper + npm的技术把不同的页面、组件库等进行单独的封装,一定程度上可以解决这个问题
    • 问了项目中遇到的最大的困难以及如何解决的
    • 看到使用了hooks问我项目中是否主要使用的是函数式组件,得到肯定答复后,问了函数式组件相较于类式组件的好处
      • 答了更便于组件的拆分,可以把组件的粒度封装的很细,便于代码的编写、维护和组件的复用。
  • 八股:

    • 问了进程和线程的区别

    • 问了浏览器都有哪些进程

    • 问了JS代码的处理是在哪个进程中的?

    • 问了JS是单线程还是多线程

    • 问事件循环

    • 看代码说结果,就是Promise + setTimeout + 同步

    • 问闭包的概念

    • 看代码说结果

    • let x = 5
      function fn (x) {
        return function f (y) {
          console.log(y + ++x);
        }
      }
      const f = fn(6)
      f(7)
      console.log(x);
      
    • 问了HTTP和HTTPS的区别

  • 代码

    • 实现一个Math.sqrt(使用二分实现)
      • 面试官后面改要求,要把结果由整数改为保留两位(忘记toFixed这个api了,面试官提示后才想起来)
    • 问了知道哪些排序算法
      • 实现一个归并或者快排
      • 完全没准备,最后也没写出来,面试官就简单问了下思路然后就作罢了

  • 反问

    • 今天面试有哪些可以提升的点
      • 感觉其实今天发挥的很好,答得都还不错,也有一定的深度,然后也能感受到对前端的热情,说在项目中我应该会是那个积极推进的人,代码题虽然没有写出来,但是他更想看到的是如何去debug。然后有交流说这个webIDE不能打断点,log也看不太出来,然后尴尬一笑。有交流平时项目里面用断点和log还是很频繁的,面试官这边接话意思说遇到问题尽量要多去尝试,尽力用不同的方法去解决。