2018VUE面试题总结
Vue面试题
一:什么是MVVM
MVVM是是Model-View-ViewModel的缩写,Model代表数据模型,定义数据操作的业务逻辑,View代表视图层,负责将数据模型渲染到页面上,ViewModel通过双向绑定把View和Model进行同步交互,不需要手动操作DOM的一种设计思想。
二:MVVM和MVC区别?和其他框架(jquery)区别?那些场景适用?
MVVM和MVC都是一种设计思想,主要就是MVC中的Controller演变成ViewModel,,MVVM主要通过数据来显示视图层而不是操作节点,解决了MVC中大量的DOM操作使页面渲染性能降低,加载速度慢,影响用户体验问题。主要用于数据操作比较多的场景。
三:Vue的优缺点是什么
优点:低耦合,可重用性,独立开发,可测试,渐进式
缺点:不利于SEO,社区维护力度不强,相比还不够成熟
三:组件之间传值
父向子传值:属性传值,父组件通过给子组件标签上定义属性,子组件通过props方法接收数据;
子向父传值:事件传值,子组件通过$emit(‘自定义事件名’,值),父组件通过子组件上的@自定义事件名=“函数”接收
非父子组件传值:全局定义bus,var bus=new Vue() ; 发送者, bus.$emit(‘自定义名’,值) ;接受者,bus.$on(‘自定义名’,(值)=>{})
四:路由之间传参
路由字典中:routes={path:’/detail/:id’,component:Detail}
标签中:<router-link :to=”‘/detail/’+item.id ”>
Js中:this.$route.params.id
五:axios的特点和使用
特点:基于promise的Http库,支持promise的所有API,用来请求和响应数据的,而且对响应回来的数据自动转化为json类型,安全性较高,客户端支持防御XRSF(跨站请求伪造),默认不携带cookie;
使用:下载包后引入 import axios from ‘axios’ , 让其携带cookie ,axios.defaults.withCredentials=true, 然后添加到prototype中,Vue.prototype.$axios=axios ,组建中不用引入直接使用this.$axios.get(url,{params:{id:1}})。
六:Vuex是什么?怎么使用?用于哪些场景?
Vuex是框架中状态管理;新建目录store...export,然后main.js引入store再注入到vue实例中;用于购物车,登录状态,单页应用等。
七:Vuex有哪几种属性?
五种:state,action,mutation,getter,module
State:数据源存放地,数据是响应式的
Action: 逻辑处理,提交的是mutation,包含任意异步操作
Mutation: 修改state里的公共数据
Getter: 相当于计算属性,可以复用,可缓存
Module: 模块化
八:Vuex取值
This.$store.state.city
This.$store.commit(‘getData’)
this.$store.dispath(‘getData’)
This.$store.getters.getData
九:不使用vuex会带来什么问题?
可维护性下降,可读性下降,增加耦合
十:v-show和v-if指令的共同点和不同点
V-show指令是通过修改元素的display的css样式使其显示隐藏
V-if指令是销毁和重建DOM达到让元素显示隐藏
十一:如何让css只在当前组件中起作用?
将当前组件的<style>修改为<style scoped>
十二:<keep-alive></keep-alive>的作用是什么,如何使用?
包裹动态组件时,会缓存不活动的组件实例,主要用于保留组件状态或避免重新渲染;
使用:简单页面时
缓存: <keep-alive include=”组件名”></keep-alive>
不缓存:<keep-alive exclude=”组件名”></keep-alive>
使用:复杂项目时
路由字典中定义{path:’/detail’,meta:{keepAlive:false/true}} 是否缓存
根目录中:
<keep-alive><router-view v-if=”$route.meta.keepAlive”></router-view></keep-alive>
<keep-alive><router-view v-if=” ! $route.meta.keepAlive”></router-view></keep-alive>
十三:Vue数据双向绑定原理
Vue数据双向绑定是通过数据劫持结合发布者-订阅者模式方式来实现的,语法主要有{{}}和v-model。首先用递归方法遍历所有的属性值,再用Object.defineProperty()给属性绑定getter和setter方法添加一个observe(val)监听器对数据进行劫持监听;然后创建一个订阅器来在getter里收集订阅者并创建和绑定watcher,如果数据变化,订阅者就会执行自己对应的更新函数;watcher就是在自身实例化的时候往订阅器里添加自己,自身必须有一个update的数据,是监听器和模板渲染的通信桥梁;最后创建解析模板指令compile,替换数据,初始化视图。最终observer来监听自己的model数据变化通过compile解析编译模板指令,利用watcher搭起observer和compile之间的通信桥梁,达到数据变化->视图更新双向绑定效果。
十四:Vue生命周期
vue生命周期就是从开始创建,初始化数据,编译模板,挂载DOM,渲染->更新->渲染,销毁等一系列过程。生命周期钩子如下:
组件实例周期:
BeforeCreate:实例初始化后,无法访问方法和数据;
Created:实例创建完成,可访问数据和方法,注意,假如有某些数据必须获取才允许进入页面的话,并不适合;
beforeMonut:挂载DOM之前
Mounted :el被新创建的vm.$el替换,可获取dom,改变data,注意,beforeRouterEnter的next的钩子比mountend触发靠后;
beforeUpdate:数据更新时调用,发生在虚拟DOM重新渲染前;
Updated:数据更改后,可以执行依赖于DOM的操作,注意,应该避免在此期间更改状态,可能会导致更新无限循环;
beforeDestroy:实例销毁之前,这一步还可以用this获取实例,一般在这一步做重置操作,比如清定时器监听dom事件;
Destroyed:实例销毁后,会解除绑定,移除监听。
十五:路由钩子
全局路由钩子:
Router.beforeEach((to,from,next)=>{... next()})
注意:一定要调用next(),否则页面卡在那,一般用于对路由跳转前进行拦截,参数:
To:即将要进入的目标路由对象 From:当前导航正要离开的路由
Next():跳转下一个页面 next(‘/path’):跳转指定路由
Next(false):返回原来页面 next((vm)=>{}):且在beforeRouterEnter用
比如根据登录状态跳转页面判断(to.name->name是路由名)
Router.beforeEach(function(to,from,next){if(to.name==’login’){..}next();})
Router.afterEach((to,from)=>{}) 跳转后调用没有next方法
组件路有钩子:
beforeRouteEnter(to,from,next){next(vm=>{...})} 路由跳转时
注意:此钩子在beforeCreate之前执行,但是next在组件mounted周期之后,无法直接调用this访问组件实例,可用next访问vm实例,修改数据;
beforeRouteLeave(to,from,next){...next()} 离开路由时
注意:可以直接访问this,next不可回调
beforeRouteUpdate 路由切换时
十六:指令周期
Bind:一次初始化调用 inserted:被绑定元素插入父节点调用
Update:模板更新调用 unbind:指令与元素解绑时
Vue.nextTick:在dom更新后执行,一般用于dom操作
Vue.$nextTick:一直到真实的dom渲染结束后执行
Ex:created(){this.$nextTick(()=>{...})}
十七:生命周期的作用是什么?
它的生命周期有多个事件钩子,让我们在控制整个Vue实例的过程时更容易形成好的逻辑。
十八:第一次加载会触发哪几个钩子?
会触发beforeCreate , created ,beforeMount ,mounted
十九:说出至少4种vue当中的指令和用法?
V-if:判断是否隐藏 v-for:数据循环 v-bind:绑定属性
v-model:双向绑定 v-is:动态组件特殊特性 v-on:事件绑定
二十:vue-loader是什么?用途有哪些?
是解析vue文件的一个加载器,用途是js可以写es6,style样式可以scss或less,template可以加jade
二十一:active-class是那个组件属性?
Vue-router模块的router-link组件,设置激活时样式
二十二:vue中使用插件的步骤是什么?
Inport ... from ... 引入插件,Vue.use(...)全局注册
二十三:为什么使用key?
当有相同标签名和元素切换时,需要通过key特性设置唯一的值来标记让vue区分它们,否则vue为了效率只会替换相同标签内部的内容
二十三:为什么避免v-if和v-for用在一起?
当vue处理指令时,v-for比v-if具有更高的优先级,通过v-if移动到容器的元素,不会在重复遍历列表中的每个值,取而代之的是,我们只检查它一次,且不会v-if为否的时候运算v-for
二十四:VNode是什么?虚拟DOM是什么?
Vue在页面上渲染的节点,及其子节点称为虚拟节点,简称VNode;虚拟DOM时由组件树建立起来的整个VNode树的称呼
二十五:scss是什么?有哪些特性?怎么使用?
是css的预编译,特新有可以用变量($变量名=值),可以用混合器(),可以嵌套,可以继承,可以运算,安装先装css-loader,node-loader,sass-loader,在webpack.base配置,style标签上加lang=”scss”
二十五:Vue router如何实现跳转
<router-link></router-link> router.push(‘/’) router.go(0)
二十六:vue router跳转和location.href有什么区别?
Router是hash改变;location.href是页面跳转,刷新页面
二十七:v-model原理
<input v-model="sth">
==相当于通过oninput(用户输入时触发)把表单值给到变量
<input v-bind:value="sth" v-on:input="sth=$event.target.value">
二十八:vue的template的理解
通过compile编译template生成AST语法树,AST语法树经过generate转化为render function字符串后返回虚拟DOM节点(Vnode)的过程
二十九:vue和react区别
相同点:
都鼓励组件化,都有’props’的概念,都有自己的构建工具,Reat与Vue只有框架的骨架,其他的功能如路由、状态管理等是框架分离的组件。
不同点:
React:数据流单向,语法—JSX,在React中你需要使用setState()方法去更新状态
Vue:数据双向绑定,语法--HTML,state对象并不是必须的,数据由data属性在Vue对象中进行管理。适用于小型应用,但对于对于大型应用而言不太适合。
三十:单页面和多页面的区别
单页面:
整个项目中只有一个完整的HTML页面,其它"页面"只是一段HTML片断而已
优: 请求少
缺: 不利于搜索引擎优化
页面跳转本质:把当前DOM树中某个DIV删除,下载并挂载另一个div片断
多页面:
项目中有多个独立的完整的HTML页面
缺: 请求次数多,效率低
页面跳转本质:
删除旧的DOM树,重新下载新的DOM树
三十一:Vue的SPA如何优化加载速度
减少入口文件体积,静态资源本地缓存,开启Gzip压缩,使用SSR,nuxt.js
三十二:Axios发送post请求
Import qs from ‘qs’
Var data=qs.stringify({
Number : ’1’
})
Axios.post(url,data).then()
VUE如何自定义属性
全局自定义:
Vue.directive(‘focus’,{
Inserted:function(el){
el.focus() //聚焦函数
}
})
三十三:组件自定义
directive{
inserted:function(el){
el.focus()
}
}
三十四:Vue和vuex 有什么区别
Vue是框架,vuex是插件,vuex是专门为vue应用程序开发的状态管理模式
三十五:.Vuex中actions和mutations的区别
Mutations的更改是同步更改,用于用户执行直接数据更改,this.$store.commit(‘名’)触发
Actions的更改是异步操作,用于需要与后端交互的数据更改,this.$store.dispath(“名”)触发
注意:
1):定义actions方法创建一个更改函数时,这个函数必须携带一个context参数,用于触发mutations方法,context.commit(‘修改函数名’ , ’异步请求值’);
2):mutations第一个参数必须传入state,第二个参数是新值
2018VUE面试题总结的更多相关文章
- .NET面试题系列[8] - 泛型
“可变性是以一种类型安全的方式,将一个对象作为另一个对象来使用.“ - Jon Skeet .NET面试题系列目录 .NET面试题系列[1] - .NET框架基础知识(1) .NET面试题系列[2] ...
- 关于面试题 Array.indexof() 方法的实现及思考
这是我在面试大公司时碰到的一个笔试题,当时自己云里雾里的胡写了一番,回头也曾思考过,最终没实现也就不了了之了. 昨天看到有网友说面试中也碰到过这个问题,我就重新思考了这个问题的实现方法. 对于想进大公 ...
- 对Thoughtworks的有趣笔试题实践
记得2014年在网上看到Thoughtworks的一道笔试题,当时觉得挺有意思,但是没动手去写.这几天又在网上看到了,于是我抽了一点时间写了下,我把程序运行的结果跟网上的答案对了一下,应该是对的,但是 ...
- 从阿里巴巴笔试题看Java加载顺序
一.阿里巴巴笔试题: public class T implements Cloneable { public static int k = 0; public static T t1 = new T ...
- JAVA面试题
在这里我将收录我面试过程中遇到的一些好玩的面试题目 第一个面试题:ABC问题,有三个线程,工作的内容分别是打印出"A""B""C",需要做的 ...
- C++常考面试题汇总
c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...
- .NET面试题系列[4] - C# 基础知识(2)
2 类型转换 面试出现频率:主要考察装箱和拆箱.对于有笔试题的场合也可能会考一些基本的类型转换是否合法. 重要程度:10/10 CLR最重要的特性之一就是类型安全性.在运行时,CLR总是知道一个对象是 ...
- 我们公司的ASP.NET 笔试题,你觉得难度如何
本套试题共8个题,主要考察C#面向对象基础,SQL和ASP.NET MVC基础知识. 第1-3题会使用到一个枚举类,其定义如下: public enum QuestionType { Text = , ...
- 我设计的ASP.NET笔试题,你会多少呢
本笔试题考查范围包括面向对象基础.HTML.CSS.JS.EF.jQuery.SQL.编码思想.算法等范围. 第1题:接口和抽象类有何区别? 第2题:静态方法和实例方法有何区别? 第3题:什么是多态? ...
随机推荐
- openstack环境-解决windows虚机重启后比当前时间晚8小时问题
背景: 生产环境下,发现windows虚机每次重启,时间都会倒退到虚机的格林威治时间(+8小时才是北京时间),也就是比当前时间晚8小时.测试发现,windows虚机所用的镜像,缺少了一个os_type ...
- nginx 工作原理总结
1. Nginx的模块与工作原理 Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,仅仅通过查找配置文件将客户端请求映射到一个location block(locat ...
- jmeter XLSX 读取
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFSheet; i ...
- Feign【开启GIZP压缩】
SpringCloudFeign支持对请求和响应进行gzip压缩,以此来提高通信效率. 1.搭建gzip-demo工程 1.1.工程依赖: <parent> <groupId> ...
- python爬虫框架scrapy 豆瓣实战
Scrapy 官方介绍是 An open source and collaborative framework for extracting the data you need from websit ...
- Go语言学习笔记(6)——指针
指 针 指针: 存储另一个变量的内存地址的变量: Go语言的取地址符号也是& 1. 声明指针: var needle_name *type var b int = 10 var a *int ...
- SQL语句中加中括号[ ]的作用
有些可能是SQL里面的保留字,但是你又用了它做字段名 比如Action,用[Action] 就可以避免这个问题,如果直接Action SQL就要报错了. 解决较长的中文名表名可能会被不识别的问题.
- delete删除数据造成归档日志增加,操作系统空间不足导致数据库hang住
业务需求,对日志表历史数据进行清理.历史表均很大,使用delete 操作删除90天前的数据. 第一部分:快速删除数据 SQL> alter table CC.F_LOG parallel ; S ...
- 红帽linux系统开机自启动脚本。
其实很多东西在最后完成以后会觉得也就那样,有意思的是探究的过程. 前段时间老板要求把一个程序做成linux系统开机自启动脚本的模式. 首先你需要写一个脚本. 我这边建立了一个.sh的脚本,就是用脚本启 ...
- hdu 1114需要装满的完全背包 重点是背包初始化的问题
.,. 最近在看背包九讲 所以就刷了一下背包的题目 这道题目是一个典型的完全背包问题 而且要求满包 在这里 我就简单整理一下背包初始化问题吧 对于没有要求满包的问题 也就是背包可以不取满的问题 在背包 ...