Skip to content
On this page

怎么回答问题

技术性答题要点

如:什么是 xx / 谈谈你对 xx 的理解 / 为什么使用 xx /

  • 概念:概念性的知识要用精炼的语言解释清楚
  • 核心:框架/方案等需要讲出核心原理或思路
  • 用途:说技术的用途和应用场景(实践/方案)
  • 对比:列出优缺点和其他方案对比(相同点/不同点)
  • 引申:牵扯到自己擅长的知识点

概核用比引 谐音记忆:改革用笔引

答题要点根据具体问题调整,回答问题要有重点,有层次。

例题

1.什么是闭包

  • 概念:当函数可以访问并记住所在的词法作用域时,就产生了闭包,即使函数在当前词法作用域之外执行。闭包和作用域链相关(函数内部是可以读取外部作用域的变量的,但是从函数外部不可以之间读取内部的局部变量的);函数内部定义一个函数使用了局部变量并返回和被引用,这个局部变量会始终保存在内存中。
  • 用途:一般用于私有化变量,缓存数据,比如防抖节流函数等
  • 实践:早期 IE 由于 GC 使用的引用计数算法,会有循环引用问题造成内存泄漏。现代浏览器使用标记清除法不会有这个问题。
  • 引申:内存泄漏和 GC 机制

2.为什么使用 Vite,和 Webpack 有什么区别

  • 核心思想:Vite 自身定义为下一代的前端工具链,利用浏览器原生 ES 模块的支持,实现开发阶段的 Dev Server,进行模块的按需加载,而不是先整体打包再进行加载。对第三方依赖使用 ESbuild 预构建(速度快),生产模式使用 rollup 进行打包(有生态),
  • 实践:第三方依赖的 common-js 转 ESM 可能会有问题
  • 对比:vite 有开箱即用的语法支持 scss 等,基于 ESM esbuild 冷启动速度快,开发体验好,兼容性不如 webpack,webapck5 用 cache 提高了二次启动的速度,使用 rust / go 等原生语言(并行计算),进行构建提高效率的趋势,势不可挡 esbuild(Bundler/Compiler) swc(Bundler/Compiler ) turbopack rspack
  • 引申:构建工具的功能,模块的加载和兼容,编译高级语法和兼容浏览器,产物的打包和压缩,开发服务器。在前端工程化中的地位。

3.说一下你对前端工程化的理解

  • 概念:前端工程化是一个体系,以项目迭代过程中的前端开发为主要服务对象,涉及开发、构建、部署等环境,通过一系列和工具和规范,目标是提高效率、规范和性能。
  • 实践:脚手架(init/cli/linter/pack),CICD

4.怎么做性能优化

  • 概念:性能优化首先要有度量体系,从输入 URL 到页面显示角度分析,依赖 performance api,分为加载过程和渲染过程
  • 方案
    • 网络请求和静态资源优化
    • 构建优化
    • 代码优化
  • 引申:性能监控