今天我们来说说常见的vue面试题,其实这个技术已经出现了几年时间,每个城市的问法也都八九不离十,因为vue也就那么些技术,问不出什么太新鲜的东西。目前vue3.0兴起,可能会有一些面试官顶多问下与2.0的区别,那么今天我们就简单说说关于vue的一些面试题。
其实博主自己也是不爱背题,在面试前从来不怎么看题,一般都是用到的东西说一说。但事实上面试官就看你回答得怎么样,很少有面试官真正能感觉出你到底是不是背的,所以博主在这方面就很吃亏,先说一下经常被问到的知识,简单些,回答上你们可以更好。我给你们学一下大部分的面试官:️注意:本人简历中有本人博客链接,若面试官看到此篇文章就当作没看见就可以了。自己头脑不好使,这些都是随笔记录,写完也经常记不住的
--- 开始:
0、vue用了多久了?说一下自己所做的项目情况。
根据自己的情况说。
1、vue中的通信都有哪些?
父子通信,兄弟通信,vuex。
2、嗯,那你说说父子通信都怎么传值的?
父传子用props接收参数进行传值,在子组件中定义一个props,来接受父组件传过来的值,并在子组件中使用。
3、那如果想传参严谨一些怎么实现呢?比如只接受某些类型的参数?
我们在props中可以定义参数的类型,比如我就固定接收一个数字类型,我可以定一个变量为num,设置一些类型。
props:{
num:Number
}
4、嗯,那子传父呢?
子传父,用一个回调函数,通过this.$emit()
的方法。它有两个参数,第一个是父组件中监听的方法名,第二个是方法。父组件监听这个方法名即可。
5、嗯,那还有没有其他方法可以实现的呢?
vue中新增了两个新增事件,一个是v-bind="$attrs"
,一个是v-on='$listeners'
。当我们在创建一些组建的时候,这两个事件可以帮助我们监听到子组件的改变,从而实现了父组件的变化。
6、那这两个方法分别是什么用途呢?v-bind="$attrs"
它包含了父作用域中不作为 prop 被识别的特性绑定;v-on='$listeners'
它包含了父作用域中的事件监听器,可以触发父组件中的事件。
7、好,那你介绍一下vueX吧,说说其中都有什么。
vueX是处理复杂的父子通信时,需要用到的技术。
state中可以定义一些常量,getters中写触发state改变的方法,通常用到getters比较少。
还有两个可以存放方法的地方是actions和mutations,一个是异步,一个是同步,我们一般都用mutations存放一些方法,在页面中通过this.$store.commit()
方法来触发mutations,从而改变state中的值。
复习vuex可以点击这里
8、自己怎么封装一个组件?(或者问如果页面有相同的功能块怎么办?)
很简单啊,在components文件夹中创建一个 .vue
组件,我们标准命名首字母大写。写上公用的组件和样式,内部的值都用动态绑定。并且创建props接收方法即可。不过现在的UI库也都特别多,我们一般都直接使用UI库就可以了,简单还方便,有不同的地方,简单封装一下就可以了。
9、你们路由都怎么封装的?
我们都是使用公司给的框架,vue-cli在创建路由时,会直接引入路由组件的,我们只需要在 views
文件夹下创建自己的页面,在路由 path
中定义页面路径;写个 name
名称;在 component
中可以用个箭头函数写上页面的路径即可。并且我们一般会定义一个重定向 redirect
到一个指定页。
10、那你们环境都怎么配置的?
(虽然说公司都是配置好的,不过也要简单的说说,点此跳转vue框架配置)
目前我们用的都是vue-cli3.0的配置,下载完框架后,自建 vue.config.js
文件,其中可以引入node中的 path
来打包一些样式文件等,是他们压缩到一个盘下。vue-cli3.0提供了一个 publicPath
属性,之前2.0叫 baseURL。在这我们可以进行测试环境或上线环境的配置,可以通过 process.env.NODE_ENV === 'production' ? '/自己项目的路径path/' : '/'
进行三目判断,我们还可以配置各种 loader ,以及配置 proxy 来解决跨域请求。
11、嗯,那你再说一下vue中常用的生命周期有哪些,分别是干什么的
常用的有8个(生命周期不仅仅是8个),都是成对出现。分别是:
beforeCreate阶段、created阶段;
beforeMount阶段、mounted阶段;
beforeUpdate阶段、updated阶段;
beforeDestroy阶段、destroyed阶段;
分别为:创建前/后,载入前/后,更新前/后,销毁前/后。
12、那实例是在哪个阶段创建完的?
在mounted阶段实例创建完成。
13、实例初始化是在哪个阶段?
在created阶段实例初始化,但还未完成。
14、有没有了解过vue的实现原理?
vue采用的是数据劫持,结合发布者和订阅者模式,通过 Object.defineProperty()
,来对于每个属性的 getter
和 setter
进行劫持,在数据更改时,发布消息给到订阅者,重新渲染页面。
(具体的步骤有兴趣的可以去看源码)
15、知不知道hash和history两种模式?简单说说:
直观上的区别就是差一个“#”
,hash中的地址是写在“#”
后边的;但history没有。
要是使用hash模式,hash之前的内容会包含在请求中;history模式URL就要和后端进行一致,所以要改为history也需要后端的配合,否则会报错。
所以hash模式在每次刷新页面时是直接更改“#”
后的东西,history每次刷新会重新像后端请求整个网址,也就是重新请求服务器。如果后端没有及时响应,就会报错404!。history的好处是可以进行修改历史记录,并且不会立刻像后端发起请求。不过如果对于项目没有硬性标准要求,我们可以直接使用hash模式开发。
16、在开发时,有没有遇到过什么问题印象深刻?
(按照自己的情况说。)
17、好的,准备入职
文章写到这里,希望大家可以有所收获!
weChat:VillinWeChat