面试总结

47 阅读4分钟

一、刷题

二、源码

三、知识点总结

1、webpack 知识点

  • 1.1 常用loader
vue-loader、style-loader、css-loader、ts-loader、babel-loader、post-css-loader、sass-loader、less-loader、thread-loader
  • 1.2 常用plugin
define-plugin // 定义变量
html-webpack-plugin // 设置入口静态文件 静态链接注入
compression-plugin // 开启gzip
minicss-extract-plugin // 设置css hash 值
clear-webpack-plugin // 清空dist目录
  • 1.3 webpack执行
从命令行和配置文件 获取到配置信息
然后生成 complie 对象
之后加载 插件plugin
然后开始从入口文件递归调用loader进行编译
然后生成一个个chuck
然后再根据配置的输入文件路径 输出到文件系统中
  • 1.4 webpack 和 vite的区别
webpack 
1、先编译打包后运行
2、需要配置很多loader和plugin 配置复杂
3、热更新 需要将那个模块的所有依赖项编译一遍
vite 
先运行后打包 
使用了go 写的esbuild 进行编译更新
热更新 通过socket通知浏览器 重新请求该模块就行
开包即用

vue3面试点

vue3 和 vue2 对比

vue3
  • 组合式API
  • 使用了 Proxy 对数据进行惰性监听 定义使用 ref 或 reactive 定义响应式数据
    惰性监听解释:只有当访问到响应式数据时才会进行监听,而不是在初始化时就监听所有数据;
    ref 和 reactive 的区别:
    1 ref 可以定义基本类型和对象
    2 核心:就是 ref 会判断类型如果是对象就用reactive 定义响应式 如果是基本类型就用 class 的 get set 定义响应式。
    3 reactive 定义只能对象
  • 支持Typescript 类型检查
  • 使用了Tree Shaking 优化了打包体积
  • 新增了 Fragment 组件 可以返回多个根节点
  • 新增了 Teleport 组件 可以将组件渲染到指定的 DOM 节点
  • 新增了 Suspense 异步组件 可以在组件加载前和加载后显示不同的内容
  • diff 算法优化
  • 1、使用了最长递增子序列 优化了虚拟 dom 对比过程,只对比相同标签名的节点,减少了对比次数
  • 2、使用了静态标记 优化了静态节点的对比过程,减少了对比次数
  • 3、使用了静态模板提升 优化了静态节点的渲染过程,减少了渲染次数
  • 4、使用了事件缓存 减少了事件绑定次数
  • 5、给列表添加了唯一 key 属性 优化了列表渲染过程,减少了渲染次数
vue2
  • 选项式API
  • 使用Object.defineProperty 对data 里面的对象属性进行递归监听

vue3生命周期

setup 函数在组件实例创建之前调用
onBeforeMount 函数在组件实例挂载之前调用
onMounted 函数在实例挂载之后调用
onBeforeUpdate 函数在组件更新之前调用
onUpdated 函数在组件更新之后调用
onBeforeUnmount 函数在组件实例卸载之前调用
onUnmounted 函数在组件实例卸载之后调用


vue3组件通信

props + emits 父子组件通信
provide + inject 跨组件通信
eventBus 事件总线通信
refs子组件实例访问refs子组件实例访问 parent 访问父组件实例
$children 访问子组件实例
Pinia 状态管理


Tree Shaking 优化的原理

1、使用了 ES6的模块静态性 可以在编译的时候就确定模块的依赖关系
2、只保留被使用的代码
3、移除未使用的代码


小程序的生命周期

onLoad -> onShow -> onReady -> onHide -> onUnload


对称加密和非对称加密的区别

对称加密:加解密使用同一套密钥,速度快。常用于接口传输数据加密 非对称加密:分为公钥和私钥,公钥可公开,速度慢,安全性更高。常用于加密重要的数据 比如签名之类的

遇到考 var 和 function 同名的题

记住:function 会在运行的时候提到最上面 然后被 var 定义的覆盖掉

遇到考 promise 和 setTimeout 的题

先执行同步代码按顺序从上往下(包括 new Promise 里的代码) 然后执行微任务代码 then 和 watch 里的代码 然后再执行 宏任务setTimeout 里面的代码

页面首屏时间长的原因

原因:

1、CSS加载时间过长 导致的
2、JS加载时间过长或执行过长或者报错 导致的

解决方法

添加DNS预解析
首屏CSS 优先加载 或 直接把首屏样式写入html
减少css js 文件体积 就是分包