vue常见面试题

本文详细探讨了Vue.js的特性,包括数据驱动、组件化、优缺点。还深入讲解了SPA(单页面应用)的概念、优缺点以及解决首屏加载速度慢的方法。此外,文章覆盖了MVVM模式、数据双向绑定原理、Vue生命周期、组件通信、路由传参和路由守卫等核心概念,并介绍了Vue-router的使用技巧和Vue的路由模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、vue的两大特点

1、数据驱动

2、组件化

 二、vue的优缺点

优点:

1、轻量级框架:只关注视图层

 2、双向数据绑定:保留了angular的特点,操作数据更为简单

3、组件化:保留了react的优点

4、视图、数据、结构分离:更改数据更为简单,不需要进行逻辑代码的修改,只需要操作数据就能完成相关操作

5、虚拟DOM:DOM操作非常耗费性能,不再使用原生的dom操作节点,极大解放了dom操作,但具体操作的还是dom,只不过是换了一种方式

6、运行速度快

缺点:

1、不支持低版本的浏览器,最低只支持到IE9

2、不利于SEO的优化(如果要支持SEO,建议通过服务器端来渲染组件)

3、第一次加载首页耗时较长

4、不可以使用浏览器的导航按钮,需要自行实现前进后退

三、谈谈你对SPA的理解,它的优缺点是什么

介绍:

1、仅在页面初始化时加载相应的html,js,css,页面一旦加载完成,不会因为用户的操作进行页面的重新加载或跳转,页面变化是利用路由机制实现HTML内容的变换

优点: 

1、用户体验好,内容的改变不需要重新加载整个页面,避免了不必要的跳转和重复渲染

2、减少了不必要的跳转和重复渲染,相对减轻了服务器的压力

3、前后端职责分离,前端进行交互逻辑,后端负责数据处理

缺点:

1、初次加载耗时多

2、不能使用浏览器的前进后退功能,因为单页面应用在一个页面中显示所有的内容

3、不利于搜索引擎

四、SPA首屏加载速度慢怎么解决

介绍:从用户输入网址到首屏内容渲染完成的时间

加载慢的原因:

1、网络延时

2、资源文件体积过大

3、资源发送请求重复

4、加载脚本的时候,渲染内容堵塞了

解决方式:

1、减小入口文件体积

2、静态资源本地缓存

3、按需加载UI框架

4、压缩图片资源

5、使用SSR

五、对MVVM的理解 

介绍:MVVM由Model、VIew、ViewModel三部分构成,Model代表数据模型,可以在Model中操作数据及业务逻辑;View代表UI组件,它负责将数据模型转换成UI展现出来;ViewModel是同步View和Model的桥梁对象

六、Vue数据双向绑定原理 (响应式原理)

原理:采用数据劫持结合发布者-订阅者模式,通过Object.defineProperty()l来给各个属性添加setter,getter并劫持监听,在数据变动时发布消息给订阅者,触发相应的监听回调

七、data为什么是一个函数而不是一个对象

 函数让数据相互独立,互不影响,如果是对象,引用同一块内存地址,组件使用的时候数据会相互影响(在一个组件内改变了数据,在其他组件引用的同一个数据也会变化)

八、scoped的作用

介绍:样式独立,互不影响,该样式只在当前页面有效

vue常用的指令

v-bind

v-model

v-for

v-if

v-show

v-on

九、v-for和v-if能不能一起使用?为什么?

 原因:v-for的优先级比v-if的高,如果一起使用的话,会带来性能方面的浪费,每次渲染都会先循环再进行条件判断

如果要解决这种情况有两种方式

方式一:外层嵌套template,在这一层进行v-if判断,然后在内部进行v-for循环

示例:

<template v-if="isShow">
    <p v-for="item in items">
</template>

 方式二:如果条件在循环内部,可通过计算属性computed处理数据

示例:

computed:{
    items:function(){
        return this.list.filter(function(item){
            return item.isShow
        })
    }
}

十、v-if和v-show的异同点

相同点:条件渲染,条件为真显示,条件为假隐藏1

不同点:

v-for:动态创建或删除节点控制元素的显示隐藏,适用于切换不频繁的场景

v-show:通过元素的display属性控制元素的显示隐藏,适用于频繁切换

十一、vue中computed和watch的区别

computed:计算属性(通过return返回处理的数据,可以包含大量的逻辑运算),有依赖性,具有缓存性

watch:监听数据的变化

十二、过滤器

 介绍:文本格式化,处理数据格式

分类:局部过滤和全局过滤

示例:

// 全局使用
Vue.filter('globalFilter', function(){
    // ...
})
​
// 局部使用
filters: {
    formatMoney(num) {
        // ...
    },
}
<p>过滤器{{ money | formatMoney }}</p>

十三、插槽(在另一篇里有详解)

十四、vuex 

介绍:数据管理中心

核心:

state:vuex中的数据,辅助函数mapState

getters:类似于计算属性,辅助函数mapGetters

mutations:更改vuex中的store中的唯一方法,是同步的,辅助函数mapMutations

actions:包含任意异步操作,acton提交的是mutation,而不是直接变更状态,辅助函数mapActions

modules :模块,Vuex允许我们将store分割成模块,每个模块有自己的state,getters,actions,mutations

页面上如何调用五大核心

调用state:this.$store.state.变量名

调用mutations:this.$store.commit('mutations中定义的方法')

调用actions:this.$store.dispatch('actions中定义的方法')

调用getters:this.$store.getters('getters中定义的方法')

actions调用mutations中的方法:

fn(context){

        context.commit('mutations中定义的方法')

}

十五、vue生命周期

介绍:从创建到消亡的过程,到了一定时期会自动调用

阶段:

生命周期说明
beforeCreate创建之前,无法获取数据,无法调用方法
created创建之后,可以在这进行数据请求
beforeMount挂载前
mounted挂载后,可以获取dom
beforeUpdate数据更新前
update数据更新后
beforeDestroy销毁前
destroyed销毁后,组件已删除,获取不到dom

 第一次页面加载时会触发beforeCreate  created  beforeMount  mounted这几个钩子

十六、组件通信方式

父传子:props

子传父:$emit

同级:eventBus,vuex

十七、router和route的区别

router:全局路由对象,里面含有很多属性和子对象如history,经常用到的路由跳转this.$router.push

route:当前路由对象(路由信息),可以从里面获取name,path,params,query等 

十八、路由跳转方式

方式一:声明式跳转(标签跳转)

示例:

  <router-link :to="{name:'home'}"></router-link>
  <router-link :to="{path:'/home'}"></router-link>

 方式二:编程式跳转(js跳转)

示例:

this.$router.push('/home')
this.$router.push({name:'home'})
this.$router.push({path:'/home'})

十九、vue-router路由传参

 

url拼接参数:"/a?a1=a1",接收页面:this.$route.query.a1

query传参:{path: 'a', query: {a2:'a2'}},接收页面:this.$route.query.a2

params传参:{name: 'a', params: {a3:'a3'}},接收页面:this.$route.params.a3

动态路由传参:/path/a4 ,接收页面:this.$route.params.id,路由:path: "/a/:id"

二十、keep-alive组件

介绍:是vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染dom

特点:

1、保留组件状态

2、包裹动态组件,会缓存不活动的组件实例,而不是销毁它们

二十一、路由守卫有哪些

 介绍:页面的访问权限

分类:

1、全局路由守卫:beforeEach(登录拦截) 、afterEach()

2、路由独享守卫:beforeEnter(部分路由的登录拦截)

示例:

routes: [
         {
            path: '/file',
            component: File,
            beforeEnter: (to, from ,next) => { 
             //do something
            }
         }
        ]

3、组件内守卫:beforeRouteEnter(权限管理),  beforeRouteUpdate()、  beforeRouteLeave()

当从a页面离开进入b页面时触发的生命周期
    1.beforeRouteLeave:路由组件的组件离开路由前钩子,可取消路由离开。
    2.beforeEach: 路由全局前置守卫,可用于登录验证、全局路由loading等。
    3.beforeEnter: 路由独享守卫
    4.beforeRouteEnter: 路由的组件进入路由前钩子。
    5.beforeResolve:路由全局解析守卫
    6.afterEach:路由全局后置钩子
    7.beforeCreate:组件生命周期,不能访问this。
    8.created:组件生命周期,可以访问this,不能访问dom。
    9.beforeMount:组件生命周期
    10.deactivated: 离开缓存组件a,或者触发a的beforeDestroy和destroyed组件销毁钩子。
    11.mounted:访问/操作dom。
    12.activated:进入缓存组件,进入a的嵌套子组件(如果有的话)。
    13.执行beforeRouteEnter回调函数next。

二十二、hash和history模式

hash模式:

1、URL后面带有#锚点

2、hash值变化不会导致浏览器向服务器发出请求,而是触发hashchange事件

3、hash发生变化的URL会被浏览器记录下来,浏览器的前进后退可以用了

history模式:

1、只能兼容到IE8

2、不仅可以在URL里放参数,还可以将参数存放在一个特定的对象中

3、怕刷新 

二十三、路由懒加载

介绍:等需要的时候加载页面

语法:

component: () => import('./Foo.vue')
// 或者
component: resolve => require(['@/components/home'],resolve)

 二十四、动态路由

通过addRoutes()添加路由信息 

内容概要:本文档详细介绍了在三台CentOS 7服务器(IP地址分别为192.168.0.157、192.168.0.158和192.168.0.159)上安装和配置Hadoop、Flink及其他大数据组件(如Hive、MySQL、Sqoop、Kafka、Zookeeper、HBase、Spark、Scala)的具体步骤。首先,文档说明了环境准备,包括配置主机名映射、SSH免密登录、JDK安装等。接着,详细描述了Hadoop集群的安装配置,包括SSH免密登录、JDK配置、Hadoop环境变量设置、HDFS和YARN配置文件修改、集群启动与测试。随后,依次介绍了MySQL、Hive、Sqoop、Kafka、Zookeeper、HBase、Spark、Scala和Flink的安装配置过程,包括解压、环境变量配置、配置文件修改、服务启动等关键步骤。最后,文档提供了每个组件的基本测试方法,确保安装成功。 适合人群:具备一定Linux基础和大数据组件基础知识的运维人员、大数据开发工程师以及系统管理员。 使用场景及目标:①为大数据平台建提供详细的安装指南,确保各组件能够顺利安装和配置;②帮助技术人员快速掌握Hadoop、Flink等大数据组件的安装与配置,提升工作效率;③适用于企业级大数据平台的建与维护,确保集群稳定运行。 其他说明:本文档不仅提供了详细的安装步骤,还涵盖了常见的配置项解释和故障排查建议。建议读者在安装过程中仔细阅读每一步骤,并根据实际情况调整配置参数。此外,文档中的命令和配置文件路径均为示例,实际操作时需根据具体环境进行适当修改。
在无线通信领域,天线阵列设计对于信号传播方向和覆盖范围的优化至关重要。本题要求设计一个广播电台的天线布局,形成特定的水平面波瓣图,即在东北方向实现最大辐射强度,在正东到正北的90°范围内辐射衰减最小且无零点;而在其余270°范围内允许出现零点,且正西和西南方向必须为零。为此,设计了一个由4个铅垂铁塔组成的阵列,各铁塔上的电流幅度相等,相位关系可自由调整,几何布置和间距不受限制。设计过程如下: 第一步:构建初级波瓣图 选取南北方向上的两个点源,间距为0.2λ(λ为电磁波波长),形成一个端射阵。通过调整相位差,使正南方向的辐射为零,计算得到初始相位差δ=252°。为了满足西南方向零辐射的要求,整体相位再偏移45°,得到初级波瓣图的表达式为E1=cos(36°cos(φ+45°)+126°)。 第二步:构建次级波瓣图 再选取一个点源位于正北方向,另一个点源位于西南方向,间距为0.4λ。调整相位差使西南方向的辐射为零,计算得到相位差δ=280°。同样整体偏移45°,得到次级波瓣图的表达式为E2=cos(72°cos(φ+45°)+140°)。 最终组合: 将初级波瓣图E1和次级波瓣图E2相乘,得到总阵的波瓣图E=E1×E2=cos(36°cos(φ+45°)+126°)×cos(72°cos(φ+45°)+140°)。通过编程实现计算并绘制波瓣图,可以看到三个阶段的波瓣图分别对应初级波瓣、次级波瓣和总波瓣,最终得到满足广播电台需求的总波瓣图。实验代码使用MATLAB编写,利用polar函数在极坐标下绘制波瓣图,并通过subplot分块显示不同阶段的波瓣图。这种设计方法体现了天线阵列设计的基本原理,即通过调整天线间的相对位置和相位关系,控制电磁波的辐射方向和强度,以满足特定的覆盖需求。这种设计在雷达、卫星通信和移动通信基站等无线通信系统中得到了广泛应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值