1.挑一个你在项目中遇到比较有挑战的问题,如何去解决的
2.开发小程序的过程,有没有遇到一些性能问题或技术问题
3.最近关注哪些技术社区的动态,哪些技术的发展 这边我自己回答了ts+vue3,小程序的taro
4.vue3相对于vue2升级了哪些功能 回答了体积减小,渲染速度变快,使用了proxy,API变成了组合式API,对脚手架更好的支持,diff算法优化(没有讲清楚)
diff算法的优化:
vue2 在单个节点对比时不知道那些是要对比的所以全部对比一次
vue3 知道那些属性是动态的(对动态的属性进行标记), 非动态的属性直接就跳过了,每次更新只对比动态的属性
5.vue3体积变小怎么办到的(没有了解过) 回答了tree-shaking优化
6.被反问tree-shaking是vue3才引入吗,tree-shaking是谁来做的(回答了脚手架),那跟vue版本有关系吗
在 Vue 2 中,由于 Vue 的源代码是使用 CommonJS 格式编写的,所以它不支持 tree shaking。这意味着即使你只使用了 Vue 的一部分功能,你的最终打包文件仍然会包含整个 Vue 库的代码。
在 Vue 3 中,Vue 的源代码被重写为使用 ES Modules 格式,这使得 Vue 3 支持 tree shaking。这意味着如果你只使用了 Vue 的一部分功能,那么你的最终打包文件只会包含你实际使用的那部分代码,未使用的代码会被移除。这可以帮助减小最终打包文件的大小,提高应用的加载性能。
此外,Vue 3 还引入了一种新的编译策略,可以更精确地分析模板中使用的特性,以进一步优化 tree shaking。
需要注意的是,要充分利用 tree shaking,你需要使用支持 tree shaking 的打包工具,如 Webpack 或 Rollup,并且需要正确配置它们。
7.面试官去查了一下,说vue3的代码量实际上比vue2是要大的 (回答了整体是小的)面试官说是因为项目变小了和vue没有关系
8.vue2的数据劫持和订阅-发布,vue3用的proxy,那还有用到订阅发布模式吗(没有讲清楚)
其实是都有用到订阅发布模式,proxy运用到的设计模式思想是代理模式。
在 Vue.js 中,观察者模式和发布订阅模式都被使用到,但它们在框架内部实现中有所不同。
Proxy本质是一个构造函数,用于创建一个对象的代理,从而实现对被代理对象操作的的拦截和自定义(如属性查找,赋值,枚举,函数调用等)。
9.vue为什么需要用vnode
在Vue中,vnode(Virtual Node)是一个虚拟的节点对象,用来描述DOM树中的节点信息,它主要有以下几个作用:
提高渲染性能:vnode可以减少真实DOM操作的次数,通过对比新旧vnode之间的差异,只对需要更新的部分进行操作,从而提高渲染性能。
实现组件化:vnode是Vue组件的基础,每个Vue组件都可以视为一个vnode树。
实现跨平台渲染:vnode可以作为抽象层,用于描述不同平台上的渲染对象,比如可以用vnode描述浏览器DOM,也可以用vnode描述原生App的UI组件。
实现动态组件:vnode可以动态地创建和销毁组件,即在运行时生成vnode,并将其插入到DOM树中。
vnode是Vue的核心概念之一,它可以实现高效的渲染和组件化,为Vue提供了很强的灵活性和扩展性。
10.ES module有没有了解过 和commonJS有什么区别
CommonJS和ES Module是两种不同的模块系统,它们有以下几个主要区别:
语法差异:CommonJS使用require()函数和module.exports对象来导入和导出模块,而ES Module使用import语句和export关键字来导入和导出模块。
加载方式:CommonJS是同步加载,因为它假设模块都在本地;而ES Module是异步加载,因为它可以从远程服务器加载模块。
静态分析:ES Module在编译时就可以进行静态分析,即可以在代码执行之前确定模块的依赖关系;而CommonJS只能在运行时确定依赖关系,因此在性能上不如ES Module。
变量绑定:ES Module中的变量绑定是动态的,即导入模块的变量会随着导出模块的变化而改变;而CommonJS中的变量绑定是静态的,即导入模块的变量只是导出模块变量的一个副本,不会随着导出模块的变化而改变。
总的来说,ES Module相对于CommonJS有更好的性能和静态分析能力,但是由于它的语法和加载方式比较新,一些旧的浏览器和Node.js版本可能不支持。因此,根据具体的应用场景和需求,开发者需要选择适合自己的模块系统。
11.有没有了解计算机网络相关的知识,http2.0和http3.0的区别
HTTP 2.0:HTTP 2.0将数据传输方式从文本格式改为二进制格式,并引入了多路复用技术。主要改进包括:
1.使用二进制帧替代了HTTP 1.x的文本格式,减少了数据量和解析开销。
2.引入了多路复用技术,可以在一个TCP连接上同时发送多个请求和响应,提高了并发性能。
3.支持服务器主动推送(Server Push),可以在客户端请求之前将相关资源主动推送给客户端。
HTTP 3.0:HTTP 3.0基于UDP协议,并使用QUIC(Quick UDP Internet Connections)传输协议。主要改进包括:
1.使用UDP协议替代了TCP协议,减少了延迟和拥塞控制的问题。
2.使用QUIC协议,提供可靠性、安全性(解决了丢包和网络抖动)和流量控制等功能。
3.使用TLS 1.3作为底层安全协议。
12.http的强缓存和协商缓存分别讲一下
HTTP 缓存是指 Web 浏览器和服务器之间的一种机制,用于减少 HTTP 请求的数量和提高网页加载速度。HTTP 缓存可以分为两种类型:强制缓存和协商缓存。
强制缓存:当浏览器发出请求时,服务器在响应头中设置了 Cache-Control 或 Expires 字段,告诉浏览器这个资源可以在一定时间内直接从本地缓存中获取,而无需再次向服务器请求。这种缓存方式被称为强制缓存,因为即使该资源已经过期,浏览器也会直接使用本地缓存。
协商缓存:当该资源的强制缓存过期后,浏览器会向服务器发送一个请求,服务器会根据该资源的 ETag 或 Last-Modified 字段检查该资源是否有更新。如果资源未更新,则返回一个 304 Not Modified 状态码,并告诉浏览器可以直接使用本地缓存。这种缓存方式被称为协商缓存,因为浏览器和服务器需要协商是否使用缓存。
可以将强制缓存和协商缓存看作是一种逐级降级的缓存策略。首先使用强制缓存,如果强制缓存过期了,就使用协商缓存。如果协商缓存也过期了,就重新从服务器请求资源。
需要注意的是,强制缓存和协商缓存都可以减少 HTTP 请求的数量和提高网页加载速度,但也存在一些缺点。例如,强制缓存可能会导致用户看到过期的内容,而协商缓存需要向服务器发送请求,增加了网络负担。因此,在使用 HTTP 缓存时,需要权衡缓存时间和缓存策略,以便提高用户体验和性能。
13.npm用过吗 pnpm用过吗(回答用的yarn比较多) pnpm和npm两者的差异 yarn为什么要比npm要快
npm、pnpm 和 Yarn 都是 JavaScript 包管理工具,用于管理 Node.js 项目中的依赖包。它们之间的主要区别如下:
安装速度:Yarn 和 pnpm 的安装速度比 npm 快,因为它们可以并行下载多个包。
存储方式:npm 和 Yarn 将每个依赖包都存储在项目根目录下的 node_modules 文件夹中,而 pnpm 采用类似软链接的方式将依赖包存储在一个全局的存储库中。这样做可以避免重复下载依赖包,节省磁盘空间和带宽。
缓存机制:Yarn 的缓存机制更加高效,可以避免重复下载相同的依赖包,节省磁盘空间和带宽。
兼容性:pnpm 只支持 Node.js 版本 >=12,而 npm 和 Yarn 支持更早期的 Node.js 版本。
命令行界面:Yarn 和 pnpm 的命令行界面比 npm 更加友好,提供了更多的交互式功能,例如检查依赖包的更新情况、列出已安装的依赖包等。
需要注意的是,尽管这些工具在某些方面存在差异,它们的目标都是为了提高 JavaScript 项目的开发效率和依赖包管理的可靠性。选择合适的包管理工具需要考虑项目需求和个人偏好,例如安装速度、缓存机制、存储方式、兼容性、命令行界面等方面。