首页 > 「前端」招银网络科技一面(已约线下二面)
头像
Mush3r
发布于 09-09 15:04 江苏
+ 关注

「前端」招银网络科技一面(已约线下二面)

  1. 你提到重新封装了axios,你具体是怎么做的?
    1. 解释了一下就是封装了一些get请求,post请求,拼接url之类的函数,项目用的时候不用裸写url了
    2. (这个点俩月下来了从来没人问,这两天疯狂被问,我已经打算把这条撤下来了,毕竟重新封装别人一问就是拼了个url有点幽默了🤣)
  2. 后端返回的错误码有做处理吗?
    1. 响应拦截器,拿到错误之后直接前台弹对应的错误信息
  3. 响应式布局中的单位以及区别
    1. vw vh rem em,八股复读
  4. 项目中实际遇到的困难
  5. 前面提到了防抖,这里又问了一下节流
  6. 前面提到你用useRef存计时器id,那可以干什么,可以拿到最新值吗
    1. 可以用来保持对DOM元素的引用,.current永远是最新的
  7. 除了能拿到最新的值以外,useRef跟useState有什么区别?
    1. 后者会触发视图重新渲染,前者不会
  8. 了解类组件吗
    1. 讲了一下自己学的时候已经在写函数组件了,但是还是介绍了一下类组件的生命周期,为什么类组件不用了,现在的函数式组件又是怎么替代原来的生命周期中的一些行为的
  9. 你提到 useState 是异步更新的,那具体过程是什么样的?(准备过的问题,爽!)
    1. React将一次渲染分为两个阶段:render (Reconciler 工作), commit (Renderer 工作),具体来说:
      1. Render 阶段(可以打断)
        1. setState 创建一个 update,将 Update 对象入队到 updateQueue 中
        2. Scheduler 查看是否有更高优先级的任务,并将创建的更新加入任务队列,等待调度
        3. 在 requestIdleCallback 空闲时执行任务
        4. 从根节点开始遍历 FiberNode,并且构建 WorkInProgress Tree (用于处理 FiberNode 中间状态)
        5. Reconciler(协调器) 阶段生成 EffectList(用于纪录副作用,比如 DOM 更新,生命周期方法等)
      2. Commit 阶段(不可打断)
        1. Renderer 根据 effectList 对 DOM 进行实际更新
  10. 你提到了Fiber,那Fiber架构里面有什么东西?
    1. Stack Reconciler → Fiber Reconciler
    2. 使用FiberNode管理节点信息/状态等
  11. 介绍一下Fiber Tree中的双缓存
    1. 没听过这个词儿,有点懵,答非所问了
    2. 去网上一搜,结果就是前面说过的东西,就是一个实际的current tree,一个Work Tree,Work Tree完成计算后去跟current tree进行diffing,然后把差异patch上去
  12. redux 的原理
    1. 响应式部分跟state一样,不同的部分是 redux 的数据并不存储在 React 中,所以需要通讯,可以借助 react-redux 的 connectuseSelector 来通知 React 组件发生改变
  13. useContext是干什么用的
  14. 下面开始问八股了
    1. js中的数据类型
    2. Number的精度丢失以及如何解决
    3. undefined和null的区别
    4. 隐式类型转换是什么
    5. 如何进行显式类型转换
    6. 如何区分一个object具体是function还是array
    7. 闭包
    8. 内存泄露
    9. 垃圾回收机制
  15. 又问回到项目相关,打包的时候做过什么优化?
    1. 利用了一些Tree-shaking之类的特性
    2. 部分包可以通过CDN提供
  16. 如何进行性能优化
  17. ts中的泛型是什么
  18. 什么是泛型约束
    1. 这个当时确实没答上来,毕竟ts用的少

    2. 就是除了class可以extends,泛型T也可以extends一个对象或者一个接口,那这个泛型就必须包含这个对象/接口中的属性,比如

      function logLength<T extends { length: number }>(item: T): void {
        console.log(item.length);
      }
      

      这个函数传入的参数必须是一个对象,需要包含number类型的length属性

  19. 类型断言是什么
    1. 明确告诉编译器一个变量的类型
  20. 什么是工具类型
    1. 没答出来
    2. 用于对现有的类型进行转换,比如Partial,将类型中的所有属性变为可选,Required变为必选

全部评论

(8) 回帖
加载中...
话题 回帖

近期热帖

近期精华帖

热门推荐