前端工程师面试题2

一、对于MVVM的理解?

MVVM 是 Model-View-ViewModel 的缩写。
Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。
View 代表视图,它负责将数据模型转化成视图展现出来。
ViewModel 虚拟模型,监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View 和 Model的对象,连接Model和View。
在MVVM架构下,View 和 Model都是通过ViewModel进行交互,iewModel 通过双向数据绑定把 View 层和 Model 层连接了起来。View 数据的变化会同步到Model中,而Model 数据的变化也会立即反应到View 上。View 和 Model之间的同步是程序自动处理的,因此开发者只需关注业务逻辑,不需要手动操作DOM,不需要关注数据状态的同步问题,复杂的数据状态维护完全由 MVVM 来统一管理。

二、Vue实现数据双向绑定的原理?

Object.defineProperty()。Vue.js是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调。
具体步骤:
第一步:需要observe的数据对象进行递归遍历,包括子属性对象的属性,都加上 setter和getter
这样的话,给这个对象的某个值赋值,就会触发setter,那么就能监听到了数据变化

第二步:compile解析模板指令,将模板中的变量替换成数据,然后初始化渲染页面视图,并将每个指令对应的节点绑定更新函数,添加监听数据的订阅者,一旦数据有变动,收到通知,更新视图

第三步:Watcher订阅者是Observer和Compile之间通信的桥梁,主要做的事情是:
1、在自身实例化时往属性订阅器(dep)里面添加自己
2、自身必须有一个update()方法
3、待属性变动dep.notice()通知时,能调用自身的update()方法,并触发Compile中绑定的回调,则功成身退。

第四步:MVVM作为数据绑定的入口,整合Observer、Compile和Watcher三者,通过Observer来监听自己的model数据变化,通过Compile来解析编译模板指令,最终利用Watcher搭起Observer和Compile之间的通信桥梁,达到数据变化 -> 视图更新;视图交互变化(input) -> 数据model变更的双向绑定效果

三、Vue的生命周期

beforeCreate(创建前) 在数据观测和初始化事件还未开始
created(创建后) 完成数据观测,属性和方法的运算,初始化事件,e****l属性还没有显示出来beforeMount(载入前)在挂载开始之前被调用,相关的render函数首次被调用。实例已完成以下的配置:编译模板,把data里面的数据和模板生成html。注意此时还没有挂载html到页面上。mounted(载入后)在el被新创建的vm.el 替换,并挂载到实例上去之后调用。实例已完成以下的配置:用上面编译好的html内容替换el属性指向的DOM对象。完成模板中的html渲染。一般在这里进行数据的处理,接口请求。
beforeUpdate(更新前) 在数据更新之前调用,可以在该钩子中进一步地更改状态,不会触发附加的重渲染过程。
updated(更新后) 在由于数据更改导致的虚拟DOM重新渲染之后调用。在大多数情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环。该钩子在服务器端渲染期间不被调用。
beforeDestroy(销毁前) 在实例销毁之前调用。实例仍然完全可用。
destroyed(销毁后) 在实例销毁之后调用。调用后,所有的事件监听器会被移除,所有的子实例也会被销毁。该钩子在服务器端渲染期间不被调用。

四、Vue.js 的优点是什么?

Vue.js性能好,非常容易优化。
Vue.js体积小,包含了 Vuex + Vue Router 的 Vue 项目 (gzip 之后 30kB) 。
Vue.js更加灵活,Vue 官方提供了构建工具来协助你构建项目,但它并不限制你去如何组织你的应用代码。
Vue.js容易上手。要学习 Vue,你只需要有良好的 HTML 和 JavaScript 基础,API也比较少。
Vue.js生态系统丰富,很多开源组件和UI框架。

五、Vue.js的template模板编译的理解?

简而言之,就是先转化成AST树,再得到的render函数返回VNode(Vue的虚拟DOM节点)
首先,通过compile编译器把template编译成AST语法树(abstract syntax tree 即 源代码的抽象语法结构的树状表现形式),compile是createCompiler的返回值,createCompiler是用以创建编译器的。另外compile还负责合并option。
然后,AST会经过generate(将AST语法树转化成render funtion字符串的过程)得到render函数,render的返回值是VNode,VNode是Vue的虚拟DOM节点,里面有(标签名、子节点、文本等等

六、Vue.js常用指令?

v-model 双向数据绑定
v-bind 绑定属性
v-for 循环
v-if 判断
v-show 显示
v-on 绑定事件
v-text 渲染字符串
v-html 渲染html跟字符串

七、Vue.js常用修饰符有哪几类?

事件修饰符、按键修饰符、系统修饰符和鼠标按钮修饰符。

八、Vue.js常用事件修饰符有那些?

.stop: 阻止单击事件继续传播
.prevent:提交事件不再重载页面
.capture :即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理
.self:只当在 event.target 是当前元素自身时触发处理函数
.once:点击事件将只会触发一次

九、Vue组件间的参数传递

1父传递子如何传递

在父组件中给子组件标签上绑定一个属性, 属性上挂载需要传递的值

在子组件通过props:[“自定义属性名”]来接收数据

2子传递父如何传递

(1) 在父组件中给子组件标签绑定一个自定义事件,给这个事件挂载需要调用的方法

(2) 在子组件的方法通过this.$emit(‘自定义事件名’)来调用这个方法

3兄弟组件如何通信

(3) 创建一个空的vue实例BUS

(4) 通过BUS.$emit(‘事件名’)传到空的vue实例中

(5) 通过BUS.$on(‘事件名’,(参数)=>{挂载从子1传来的数据})来接收

十、如何让Vue组件中css只在当前组件起作用?

在style标签中写入scoped即可

十一、v-if 和 v-show 区别?

v-if按照条件是否渲染,v-show是display的block或none;

v-if:判断是否有dom

v-show:判断隐藏/显示dom

十二、Vue.js中 key 值的作用?

当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。key的作用主要是为了高效的更新虚拟DOM。

十三、keep-alive的作用是什么?

keep-alive是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。include和exclude都支持”,”分割字符串、数组或正则表达式,include表示只有名称匹配的组件会被缓存。

十四、router-view组件的作用?

router-view可以实现嵌套路由。如果不想跳转到新页面,只在当前页面切换着显示,router-view组件就非常适合。可以配合 和 使用。如果两个结合一起用,要确保在内层使用 :

十五、 r o u t e 和 route和 routerouter的区别是什么?

emit方法传递参数2.非父子组件间的数据传递,兄弟组件传值eventBus或者使用store来做状态管理,eventBus项目比较小比较合适。¨K12K在style标签中写入scoped即可¨G0G¨K13Kv−if按照条件是否渲染,v−show是display的block或none;¨K14K当Vue.js用v−for正在更新已渲染过的元素列表时,它默认用“就地复用”策略。如果数据项的顺序被改变,Vue将不会移动DOM元素来匹配数据项的顺序,而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。key的作用主要是为了高效的更新虚拟DOM。¨K15Kkeep−alive是Vue内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。include和exclude都支持”,”分割字符串、数组或正则表达式,include表示只有名称匹配的组件会被缓存。¨K16Krouter−view可以实现嵌套路由。如果不想跳转到新页面,只在当前页面切换着显示,router−view组件就非常适合。可以配合和使用。如果两个结合一起用,要确保在内层使用:¨K17Kroute是“路由信息对象”,包括path,params,hash,query,fullPath,matched,name等路由信息参数。而$router是“路由实例”对象包括了路由的跳转方法,钩子函数等。

十六、vue-router路由之间跳转?

1、使用 创建 a 标签来定义导航链接
2、编程式导航 router.push(‘index’)等等

十七、vue路由的钩子函数有哪些?

beforeEach,afterEach等,一般用于页面title标题的修改或者登陆的全局验证。
beforeEach主要有3个参数to,from,next:
to:route即将进入的目标路由对象,
from:route当前导航正要离开的路由
next:function一定要调用该方法resolve这个钩子。执行效果依赖next方法的调用参数。可以控制网页的跳转。

十八、vuex是什么?

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。状态改变使用同步的mutations提交,异步操作请使用actionti,Action 提交的是mutation,而不是直接变更状态。
state
Vuex 使用单一状态树,即每个应用将仅仅包含一个store 实例,但单一状态树和模块化并不冲突。存放的数据状态,不可以直接修改里面的数据。
mutations
mutations定义的方法动态修改Vuex 的 store 中的状态或数据。
getters
类似vue的计算属性,主要用来过滤一些数据。
action
actions可以理解为通过将mutations里面处里数据的方法变成可异步的处理数据的方法,简单的说就是异步操作数据。view 层通过 store.dispath 来分发 action

十九、Vue.js UI组件库用过哪些?

这个结合自己的个人情况。比如ElementUI、IView、Vant等UI组件库。

# 高校智慧校园解决方案摘要 智慧校园解决方案是针对高校信息化建设的核心工程,旨在通过物联网技术实现数字化校园的智能化升级。该方案通过融合计算机技术、网络通信技术、数据库技术和IC卡识别技术,初步实现了校园一卡通系统,进而通过人脸识别技术实现了更精准的校园安全管理、生活管理、教务管理和资源管理。 方案包括多个管理系统:智慧校园管理平台、一卡通卡务管理系统、一卡通人脸库管理平台、智能人脸识别消费管理系统、疫情防控管理系统、人脸识别无感识别管理系统、会议签到管理系统、人脸识别通道管理系统和图书馆对接管理系统。这些系统共同构成了智慧校园的信息化基础,通过统一数据库和操作平台,实现了数据共享和信息一致性。 智能人脸识别消费管理系统通过人脸识别终端,在无需接触的情况下快速完成消费支付过程,提升了校园服务效率。疫情防控管理系统利用热成像测温技术、视频智能分析等手段,实现了对校园人员体温监测和疫情信息实时上报,提高了校园公共卫生事件的预防和控制能力。 会议签到管理系统和人脸识别通道管理系统均基于人脸识别技术,实现了会议的快速签到和图书馆等场所的高效通行管理。与图书馆对接管理系统实现了一卡通系统与图书馆管理系统的无缝集成,提升了图书借阅的便捷性。 总体而言,该智慧校园解决方案通过集成的信息化管理系统,提升了校园管理的智能化水平,优化了校园生活体验,增强了校园安全,并提高了教学和科研的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值