关闭

青桃传媒

全国

只写后台管理的前端要怎么提升自己

青桃传媒·2025-03-13 16:38:46·阅读

说到源码, Vue,React 这些基本是每次必问,也有太多大佬们的总结我就不多说了。

除此之外,我想大家每次面试应该都会被问,你写了什么亮点的项目,困难的项目,你会说什么?哦,都是表单表格,都用 UI 实现的,没什么难度。那估计你面试也就到这里了。

那说什么,后台管理就这些啊?!

如果你用了 UI 你可以说写了什么自定义 UI 表单组件, UI 表单源码是什么原理,怎么通信的?用了 Axios 可以说 Axios 的原理,它的拦截器怎么实现的?用了编辑器 diff 那你知道 diff 算法是什么吗?用了 那你知道他底层是用什么绘制的吗?用了 husky ?husky的原理是什么?用了Vite,它为什么快?是怎么打包的?写过插件吗?

可能有人觉得我离谱,事实上上面每一个问题都是我在面试中真实被问到的。当然,如果全部去了解,肯定不现实,每个人的精力有限,不可能每个用到的每个工具每个库都去了解原理,不过只要有一两个你去了解过,就可以在面试中引导面试官来问,要学会表现出你擅长的点。

至于怎么读源码?以前我不知道,现在嘛…… 为什么不问问神奇的 呢?

讲一下 Axios 源码中,拦截器是怎么实现的?

Axios 的拦截器实现基于 Axios 的核心原理,即 Axios 实例是一个包含请求和响应拦截器堆栈的对象。当发出请求或接收响应时,Axios 会遍历这些拦截器,并按照添加的顺序执行请求拦截器,以及按照相反的顺序执行响应拦截器。

在 Axios 的源码中,拦截器是通过一个 ger 实例来管理的,它维护了一个拦截器数组。每个拦截器都是一个包含 和 函数的对象。这两个函数分别对应于拦截器成功处理和拦截器处理出错的情况。

以下是 Axios 拦截器管理器的一个简化版本,展示了其核心实现思路:

class InterceptorManager {
  constructor() {
    this.handlers = []; // 存储拦截器的数组
  }
  use(fulfilled, rejected) {
    this.handlers.push({
      fulfilled: fulfilled,
      rejected: rejected
    });
    return this.handlers.length - 1; // 返回拦截器的ID
  }
  eject(id) {
    if (this.handlers[id]) {
      this.handlers[id] = null; // 移除拦截器
    }
  }
  forEach(fn) {
    this.handlers.forEach((h) => {
      if (h !== null) {
        fn(h);
      }
    });
  }
}

在发送请求或接收响应时,Axios 会创建一个 链,并通过 方法将拦截器中的 和 函数添加到这个链中。这样,每个拦截器都可以对请求或响应进行处理,然后将结果传递到链的下一个拦截器,或者在出错时结束链的执行。

axios.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
  chain.unshift(interceptor.fulfilled, interceptor.rejected);
});
axios.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
  chain.push(interceptor.fulfilled, interceptor.rejected);
});

在 Axios 的完整实现中,这个拦截器机制被集成到了 Axios 的请求发送和响应处理流程中。通过这种方式,Axios 可以在发送请求之前和接收响应之后,但在用户定义的 .then 或 .catch 执行之前,插入自定义的逻辑。

请注意,这里提供的代码只是为了说明 Axios 拦截器的实现原理,并不是 Axios 源码的完整复制。如果你对 Axios 的拦截器实现细节感兴趣,建议查看 Axios 的官方 仓库中的源码。

前端基建

当我们工作时间久了面试难免会遇到这些问题,前端工程化,前端监控,工作流,部署,性能等等。其实我们在工作中绝大部分时间都在写代码,对于这些不是所有人都有机会接触到,不过这些和所做的业务无关,是我们提升自己很好的一个思路。

技术选型

技术栈选 Vue 还是 React?Vue 选 Vue2 还是 Vue3?组件库选 还是 Ant ?微前端有没有使用过?打包工具用 Vite 还是 ?有那么多表单怎么实现的,有没有什么表单配置化方案,比如?

对于我这种菜鸡,我这种只写简单的表单表格的人,这些都……无所谓……

只写后台管理的前端要怎么提升自己

不过为了应对面试我们还是需要了解下未选择技术栈的缺点,和已选择技术栈的优点(有点本末倒置…但是常规操作啦)

Vue 你可以说简单高效轻量级,面试必会问你为什么,你就开始说 Vue 的响应式系统,依赖收集等。

React 你可以说 JSX、Hooks 很灵活,那你必然要考虑 JSX 怎么编译, Hooks 实现方式等。

总体而言,对于技术选型,依赖于我们对所有可选项的理解,做选择可能很容易,给出合理的理由还是需要花费一些精力的。

开发规范

这个方面,在面试的时候我被问到的不多,我们可以在创建项目的时候,配置下 ,, , 等。

前端监控

干了这么多年前端,前端监控我是……一点没做过。

只写后台管理的前端要怎么提升自己

前端监控,简单来说就是我们在前端程序中记录一些信息并上报,一般是错误信息,来方便我们及时发现问题并解决问题。除此之外也会有性能监控,用户行为的监控(埋点)等。之前也听过有些团队分享前端监控,为了出现问题明确责任(方便甩锅)。

对于实现方案,无论使用第三方库还是自己实现,重要的都是理解实现原理。

对于错误监控,可以了解一下 ,原理简单来说就是通过 . 和 .('', ...) 去分别捕获同步和异步错误,然后通过错误信息和 来定位到源码。

对于性能监控,我们可以通过 .、 等 API 收集页面性能相关的指标,除此之外,还需要关注接口的响应时间。

最后,收集到信息之后,还要考虑数据上报的方案,比如使用 . 还是 Fetch、AJAX?是批量上报,实时上报,还是延迟上报?上报的数据格式等等。

CI/CD

持续集成( , CI)和 持续部署( , CD),主要包括版本控制,代码合并,构建,单测,部署等一系列前端工作流。

场景的工作流有 、 CI 等。我们可以配置在合并代码时自动打包部署,在提交代码时自动构建并发布包等。

这块我了解不多,但感觉这些工具层面的东西,不太会涉及到原理,基本上就是使用的问题。还是需要自己亲自动手试一下,才能知道细节。比如在 CI 中, 、Stage和Job 分别是什么,怎么配置,如何在不同环境配置不同工作流等。

了解技术动态

这个可能还是比较依赖信息收集能力,虽然我个人觉得很烦,但好像很多领导级别的面试很愿意问。

比如近几年很火的低代码,很多面试官都会问,你用过就问你细节,你没用过也会问你有什么设计思路。

还有最近的两年爆火的 AI,又或者 Vue React的最新功能,,还有一些新的打包工具 Vite Bun 什么的,还有鸿蒙开发……

虽然不可能学完每一项新技术,但是可以多去了解下。

总结

写了这么多,可能有人会问,如果能回到过去,你会怎么做。

啊,我只能说,说是一回事,做又是另一回事,事实上我并不希望回到过去去卷一遍,菜点没关系,快乐就好,一切都是最好的安排。

只写后台管理的前端要怎么提升自己

加载中~

你可能感兴趣的