大家好,我是,一个爱分享的老前端。前一段时间有很多小伙伴找我做经典Vue面试题解析。我整整花了1个月时间找题写答案,录视频,所有内容均为原创。本来打算全部写完再来发一篇鸿篇巨制,不过找我要学习材料的小伙伴太多,只好提前发布。这里是已经写完的前半部分,大家务必点赞
、收藏
保存一下,我后续还在这一篇更新下半部分,希望大家多多支持,感谢。
我组织了一个面试学习群,,二维码过期的话,请私信我,大家一起卷~;
vue是组件化开发框架,所以对于vue应用来说组件间的数据通信非常重要。 此题主要考查大家vue基本功,对于vue基础api运用熟练度。 另外一些边界知识如provide/inject/$attrs则提现了面试者的知识广度。
注意vue3中废弃的几个API
此题考查常识,文档中曾有详细说明|;也是一个很好的实践题目,项目中经常会遇到,能够看出面试者api熟悉程度和应用能力。
实践中不应该把v-for和v-if放一起
在vue2中,v-for的优先级是高于v-if,把它们放在一起,输出的渲染函数中可以看出会先执行循环再判断条件,哪怕我们只渲染列表中一小部分元素,也得在每次重渲染的时候遍历整个列表,这会比较浪费;另外需要注意的是在vue3中则完全相反,v-if的优先级高于v-for,所以v-if执行时,它调用的变量还不存在,就会导致异常
通常有两种情况下导致我们这样做:
这是一道必问题目,但能回答到位的比较少。如果只是看看一些网文,通常没什么底气,经不住面试官推敲,但像我们这样即看过源码还造过轮子的,回答这个问题就会比较有底气啦。
现有框架几乎都引入了虚拟 DOM 来对真实 DOM 进行抽象,也就是现在大家所熟知的 VNode 和 VDOM,那么为什么需要引入虚拟 DOM 呢?围绕这个疑问来解答即可!
虚拟dom顾名思义就是虚拟的dom对象,它本身就是一个 JavaScript
对象,只不过它是通过不同的属性去描述一个视图结构。
通过引入vdom我们可以获得如下好处:
将真实元素节点抽象成 VNode,有效减少直接操作 dom 次数,从而提高程序性能
vdom如何生成?在vue中我们常常会为组件编写模板 - template, 这个模板会被编译器 - compiler编译为渲染函数,在接下来的挂载(mount)过程中会调用render函数,返回的对象就是虚拟dom。但它们还不是真正的dom,所以会在后续的patch过程中进一步转化为dom。
挂载过程结束后,vue程序进入更新流程。如果某些响应式数据发生变化,将会引起组件重新render,此时就会生成新的vdom,和上一次的渲染结果diff就能得到变化的地方,从而转换为最小量的dom操作,高效更新视图。
必问题目,涉及vue更新原理,比较考查理解深度。
2.最初Vue1.x视图中每个依赖均有更新函数对应,可以做到精准更新,因此并不需要虚拟DOM和patching算法支持,但是这样粒度过细导致Vue1.x无法承载较大应用;Vue 2.x中为了降低Watcher粒度,每个组件只有一个Watcher与之对应,此时就需要引入patching算法才能精确找到发生变化的地方并高效更新。
3.vue中diff执行的时刻是组件内响应式数据变更触发实例执行其更新函数时,更新函数会再次执行render函数获得最新的虚拟DOM,然后执行patch函数,并传入新旧两次虚拟DOM,通过比对两者找到变化的地方,最后将其转化为对应的DOM操作。
4.patch过程是一个递归过程,遵循深度优先、同层比较的策略;以vue3的patch为例:
官网列举的最值得注意的新特性:
以上这些是api相关,另外还有很多框架特性也不能落掉。
另外,Vue3.0在框架层面也有很多亮眼的改进:
API题目,考查基础能力,不容有失,尽可能说的详细。
:id
就是路径参数
:
表示。当一个路由被匹配时,它的 params的值将在每个组件中以 this.$route.params
的形式暴露出来。
首先思考vue路由要解决的问题:用户点击跳转链接内容切换,页面不刷新。
一个SPA应用的路由需要解决的问题是页面跳转内容改变同时不刷新,同时路由还需要以插件形式存在,所以:
createRouter
函数,返回路由器实例,实例内部做几件事:
这是一道特别常见的问题,主要考查大家对虚拟DOM和patch细节的掌握程度,能够反映面试者理解层次。
上面案例重现的是以下过程
// oldCh全部处理结束,newCh中剩下的F,创建F并插入到C前面这道题及考察使用,有考察原理,nextTick在开发过程中应用的也较少,原理上和vue异步更新有密切关系,对于面试者考查很有区分度,如果能够很好回答此题,对面试效果有极大帮助。
是等待下一次 DOM 更新刷新的工具方法。
Vue有个异步更新策略,意思是如果数据变化,Vue不会立刻更新DOM,而是开启一个队列,把组件更新函数保存在队列中,在同一事件循环中发生的所有数据变更会异步的批量更新。这一策略导致我们对数据的修改不会立刻体现在DOM上,此时如果想要获取更新后的DOM状态,就需要使用nextTick。
开发时,有两个场景我们会用到nextTick:
所以我们只需要在传入的回调函数中访问最新DOM状态即可,或者我们可以await nextTick()方法返回的Promise之后做这件事。
在Vue内部,nextTick之所以能够让我们看到DOM更新后的结果,是因为我们传入的callback会被添加到队列刷新函数(flushSchedulerQueue)的后面,这样等队列内部的更新函数都执行完毕,所有DOM操作也就结束了,callback自然能够获取到最新的DOM值。
两个重要API,反应应聘者熟练程度。
computed特点:具有响应式的返回值
watch特点:侦测变化,执行回调
这题考查大家对创建过程的理解程度。
缓存组件使用keep-alive组件,这是一个非常常见且有用的优化手段,vue3中keep-alive有比较大的更新,能说的点比较多。
开发中缓存组件使用keep-alive组件,keep-alive是vue内置组件,keep-alive包裹动态组件component时,会缓存不活动的组件实例,而不是销毁它们,这样在组件切换过程中将状态保留在内存中,防止重复渲染DOM。
缓存后如果要获取数据,解决方案可以有以下两种:
keep-alive是一个通用组件,它内部定义了一个map,缓存创建过的组件实例,它返回的渲染函数内部会查找内嵌的component组件对应组件的vnode,如果该组件在map中存在就直接返回它。由于component的is属性是个响应式数据,因此只要它变化,keep-alive的render函数就会重新执行。
综合实践类题目,考查实战能力。没有什么绝对的正确答案,把平时工作的重点有条理的描述一下即可。
从0创建一个项目我大致会做以下事情:项目构建、引入必要插件、代码规范、提交规范、常用库和组件
目录结构我有如下习惯: .vscode
:用来放项目中的 vscode 配置
public
:用来放一些诸如 页头icon 之类的公共文件,会被打包到dist根目录下
src
:用来放项目代码文件
api
:用来放http的一些接口配置
assets
:用来放一些 CSS 之类的静态资源
layout
:用来放项目的布局
router
:用来放项目的路由配置
store
:用来放状态管理Pinia的配置
utils
:用来放项目中的工具方法类
views
:用来放项目的页面文件
看到这样的题目,可以用以下图片来回答:
我从编码风格、性能、安全等方面说几条:
问我们template到render过程,其实是问vue编译器
工作原理。
vue3编译过程窥探:
挂载过程完成了最重要的两件事:
把这两件事说清楚即可!
做小程序多少钱?这是很多想做小程序的人所好奇的问题。小程序的成本跟你所选用的开发方式有关,自己开发和找别人开发价格也是不一样的,对小程序的要求不同价格也不一样。下面就跟大家说说究竟做小程序多少钱。
做小程序多少钱?不同制作方法,不同价格:
定制开发小程序的价格一般都是以万起步,因为这个在开发前期一定要把自己的需求明确的跟技术团队反复沟通清楚,不要怕麻烦,因为是定制类型,如果后面开发出来之后的产品不是您需要的,或者是跟您最初的设想是不一致的,进行调整的话在技术成本上肯定会有所增加。
所以建议是沟通清楚您的具体使用需求,要求开发团队给出必要的功能清单,并针对每个清单给出能弄明白的解释或者是有效的沟通,不要似是而非,这样出来的小程序才是您最终想要的,给出的价格也会是最具体的,也方便对自己的预算做清晰的评估。
对于不懂代码知识的小白来说,目前比较常见的方式是选择模板类工具,这种开发方式成本很低,只需要支付一个小程序模板的成本。基础电商类模板一般在三四千左右,展示类小程序则是千元左右,如果是功能简单的文章阅读小程序,甚至可以免费。总之,功能越多的模板,费用也越高。
所谓源码购买的小程序,指的是小程序开发公司开发了一个小程序系统,授权给您使用,您只需要购买授权即可。
授权大家应该容易理解,就好比于在一些有版权图片素材网站上,购买一个图片的授权,授权一般也都是终身使用。
此种方法制作的小程序,方便且上线很快,且不用按年缴费,也不需要重新支付费用。若有合适的源码,那么这种方式是最省钱、最有保障的。
做小程序多少钱?通过以上内容,你是不是对小程序的价格有了大致了解。做小程序根据自己所在行业,根据自己需求,根据预算,进行选择即可。
未经允许不得转载,或转载时需注明出处