面试:领保科技

预计阅读时间: 5 分钟

一面 45min

自我介绍

面试开始

当我们从浏览器地址栏键入一个URL之后发生了什么?

由上面键入URL的问题引出了重新渲染DOM与CSSOM,然后又谈到了重排与重绘的问题

在html中一般script标签放在哪个位置?

如果在页面中加载大量的数据,执行大量的计算,script标签该怎么处理?

页面加载完成后再去计算,交给异步任务处理,requestAnimate优化

使用过哪些ES6的哪些新特性?

  • 展开运算符
  • 数据结构map set
  • Promise
  • async await
  • 生成器generator,迭代器iterator
  • 箭头函数
  • 类的概念
  • 模板字符串

展开运算符,是深拷贝还是浅拷贝?

如果展开的对象是一个null或者undefined会怎么样?

Promise有哪几个状态?

Promise捕获错误可以在catch方法中,那async await 中该如何?

生成器函数的结果?

说一下你对数组中迭代器的理解?

数组实际上就是一个对象,只不过数组实现了[Symbol.Iterator]方法,这个方法返回一个对象,对象中有一个next方法,每次迭代的时候会调用next方法,返回一个对象,对象中 有一个done属性,用来判断迭代是否结束,如果为true则迭代结束 ,否则就返回这个对象的value属性的值作为结果返回。

let range = { from: 1, to: 5, // 1. for..of 调用首先会调用这个: [Symbol.iterator]() { // ……它返回迭代器对象(iterator object): // 2. 接下来,for..of 仅与下面的迭代器对象一起工作,要求它提供下一个值 return { current: this.from, last: this.to, // 3. next() 在 for..of 的每一轮循环迭代中被调用 next() { // 4. 它将会返回 {done:.., value :...} 格式的对象 if (this.current <= this.last) { return { done: false, value: this.current++ }; } else { return { done: true }; } } }; } }; // 现在它可以运行了! for (let num of range) { alert(num); // 1, 然后是 2, 3, 4, 5 }

TS用的多吗?我们也主要是标注一下类型,使用一些泛型,type、interface这些,还有Omit,Pick这些

React中使用过哪些hooks ?

  • 定义状态使用的useState

  • 处理副作用的useEffect

  • 缓存大量计算结果的useMemo

  • 缓存函数的useCallback

  • 较复杂的状态更新场景用的useReducer

  • 用于子组件向父组件暴露方法的useImperativeHandle

  • 用于进行上下文传递的useContext

这里就比较尴尬,把比较重要的useRef忘记说了,所以就有了下面一个情景题

假如我现在一个组件,里面有两个useEffect函数,第一个依赖数组为空,第二个依赖数组监听一个状态A,但是这个A状态的hook我想在组件第一次挂载的时候不触发,应该怎么实现?

面试当时第一反应就是利用锁的机制解决,定义一个变量,为Boolean值,通过if判断,在第一次挂载的时候更改这个变量的值就可以实现了。后来面试官还问那这个变量应该放在组件里面还是组件外面?再后面面试官就说了利用useRef定义一个就可以了

在使用axios请求的时候,我需要在请求头部携带一些信息,然后在请求响应中再处理一些响应信息,该怎么做呢?

其他的问题就都不是很难了,聊的也比较不错,很快就进入到反问环节了

反问

  • 咱们这个面试有几个流程?

  • 了解了一下公司的日常简介,大致是做什么的

  • 最后请面试官对我做一个面评

面试结束后一个多小时就收到了二面邀请