前端 vue 2024最新面试题

本文介绍了Vue.js中的MVVM架构、组件使用、动态路由设置、Vuex状态管理、自定义指令、keep-alive缓存、模板编译原理、首屏加载优化策略、SCSS在VueCLI中的使用,以及前端性能提升和学习资源分享。
摘要由CSDN通过智能技术生成
  • 场景:数据操作比较多的场景,更加便捷
MVVM
  • Model代表数据模型,也可以在Model中定义数据修改和操作的业务逻辑。

  • View 代表UI 组件,它负责将数据模型转化成UI 展现出来。

  • ViewModel 监听模型数据的改变和控制视图行为、处理用户交互,简单理解就是一个同步View 和 Model的对象,连接Model和View。

  • 在vue中,使用了双向绑定技术,就是View的变化能实时让Model发生变化,而Model的变化也能实时更新到View。

  • MVC有厚重的View Controller,无处安放的网络逻辑,较差的可测试性

请说出vue.cli项目中src目录每个文件夹和文件的用法?
  • 答:assets文件夹是放静态资源;components是放组件;router是定义路由相关的配置;view视图;app.vue是一个应用主组件;main.js是入口文件
vue.cli中怎样使用自定义的组件?有遇到过哪些问题吗?
  • 第一步:在components目录新建你的组件文件(smithButton.vue),script一定要export default {

  • 第二步:在需要用的页面(组件)中导入:import smithButton from

  • 第三步:’/components/smithButton.vue’

  • 第三步:注入到vue的子组件的components属性上面,components:{smithButton}

  • 第四步:在template视图view中使用,

  • 问题有:smithButton命名,使用的时候则smith-button。

怎么定义vue-router的动态路由?怎么获取传过来的动态参数?
  • 答:在router目录下的index.js文件中,对path属性加上/:id。 使用router对象的params.id
vue-router有哪几种导航钩子?
  • 答:三种,一种是全局导航钩子:router.beforeEach(to,from,next),作用:跳转前进行判断拦截。第二种:组件内的钩子;第三种:单独路由独享组件
组件参数传递
  • 父组件传给子组件:子组件通过props方法接受数据;

  • 子组件传给父组件:$emit方法传递参数

  • Vuex多组件共享状态(数据的管理) 组件间的关系也没有限制 功能比pubsub强大, 更适用于vue项目

Slot通信是带数据的标签

  • Pubsub第三方库(消息订阅与发布)适合于任何关系的组件间通信

  • hash模式 history模式

  • hash模式:在浏览器中符号“#”,#以及#后面的字符称之为hash,用window.location.hash读取

  • history模式:history采用HTML5的新特性;且提供了两个新方法:pushState(),replaceState()- 可以对浏览器历史记录栈进行修改,以及popState事件的监听到状态变更

vue-loader是什么?使用它的用途有哪些?
  • 答:解析.vue文件的一个加载器,跟template/js/style转换成js模块。

  • 用途:js可以写es6、style样式可以scss或less、template可以加jade等

请说下封装 vue 组件的过程?
  • 答:首先,组件可以提升整个项目的开发效率。能够把页面抽象成多个相对独立的模块,解决了我们传统项目开发:效率低、难维护、复用性等问题。

然后,使用Vue.extend方法创建一个组件,然后使用Vue.component方法注册组件。子组件需要数据,可以在props中接受定义。而子组件修改好数据后,想把数据传递给父组件。可以采用emit方法。

vuex
  • State:存放数据状态,不可直接修改里面数据

  • Mutations:定义的方法动态修改Vuex的store中的状态或数据

  • Getters:类似vue的计算属性,主要用来过滤一些数据。

  • Action:可以理解为通过将mutations里面处理数据的方法变成可异步的处理数据的方法,简单的说就是异步操作数据。view 层通过 store.dispath 来分发 action。

  • Modules:项目特别复杂的时候,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。

自定义指令(v-check、v-focus)的方法有哪些?它有哪些钩子函数?还有哪些钩子函数参数?
  • 答:全局定义指令:在vue对象的directive方法里面有两个参数,一个是指令名称,另外一个是函数。组件内定义指令:directives

  • 钩子函数:bind(绑定事件触发)、inserted(节点插入的时候触发)、update(组件内相关更新)

  • 钩子函数参数:el、binding

keep-alive
  • Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
vue.js的两个核心
  • 数据驱动

  • 组件系统

vue修饰符
  • .prevent: 提交事件不再重载页面;

  • .stop: 阻止单击事件冒泡;

  • .self: 当事件发生在该元素本身而不是子元素的时候会触发;

  • .capture: 事件侦听,事件发生的时候会调用

vue的key值

用于管理可复用的元素。因Vue 会尽可能高效地渲染元素,通常会复用已有元素而不是从头开始渲染。这么做使Vue变得非常快,为了高效的更新虚拟DOM

route & router & routes
  • router是VueRouter的一个对象,通过Vue.use(VueRouter)和VueRouter构造函数得到一个router的实例对象,这个对象中是一个全局的对象,他包含了所有的路由包含了许多关键的对象和属性。(管理所有路由)

  • route是一个跳转的路由对象,每一个路由都会有一个route对象,是一个局部的对象,可以获取对应的name,path,params,query等 (一条路由)

  • routes 一组路由 (一组路由)

computed & watch
  • computed是一个计算属性,类似于过滤器,对于绑定到view的数据进行处理,具有缓存性,简化了计算和处理过程 有get和set

  • watch是一个观察动作,监听props,$emit等异步操作,无缓存性

  • computed的话是通过几个数据的变化,来影响一个数据,而watch,则是可以一个数据的变化,去影响多个数据

当一个属性受多个属性影响的时候就需要用到computed

当一条数据影响多条数据的时候就需要用watch

Vue-router 和location.href
  • 使用location.href=’/url’来跳转,简单方便,但是刷新了页面;

  • 使用history.pushState(’/url’),无刷新页面,静态跳转;

聊聊你对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节点,里面有(标签名、子节点、文本等等)

传参
  • 路由传参:

  • router.js 后边跟:id配置参数

  • query 方法传参

  • name 方法传参

  • vue自带标签标签传参

  • 组件传参:

  • 父传子 props

  • 子传父 this.$emit()

  • 子传父 this.emit非父子组件eventHub中转站this. emit非父子组件 eventHub 中转站 this.emit非父子组件eventHub中转站this.on

  • vuex state 存的变量,mutations改变的状态 actions 触发的行为(方法)

组件的引入

导入组件import Vheader from ‘./components/Vheader.vue’

挂载组件在export default 中 定义一个key为components,值为一个对象,这个对象中放着导入键值对;键为变量名,值为组件名,在es6中,键值相同时,可以缩写为一个单一的值。比如:components:{ Vheader }

在template模板中使用组件:

如何优化SPA应用的首屏加载速度慢的问题?
  • 将公用的JS库通过script标签外部引入,减小 app.bundel 的大小,让浏览器并行下载资源文件,提高下载速度;

  • 在配置 路由时,页面和组件使用懒加载的方式引入,进一步缩小 app.bundel 的体积,在调用某个组件时再加载对应的js文件;

  • 加一个首屏loading图,提升用户体验;

scss是什么?在vue.cli中的安装使用步骤是?有哪几大特性?
  • 答:css的预编译。

  • 使用步骤:

  • 第一步:用npm 下三个loader(sass-loader、css-loader、node-sass)

  • 第二步:在build目录找到webpack.base.config.js,在那个extends属性中加一个拓展.scss

  • 第三步:还是在同一个文件,配置一个module属性

  • 第四步:然后在组件的style标签加上lang属性 ,例如:lang=”scss”

  • 有哪几大特性:

  • 可以用变量,例如($变量名称=值);

  • 可以用混合器,例如()

  • 可以嵌套

前端如何优化网站性能?
  • 减少 HTTP 请求数量

  • 在浏览器与服务器进行通信时,主要是通过 HTTP 进行通信。浏览器与服务器需要经过三次握手,每次握手需要花费大量时间。而且不同浏览器对资源文件并发请求数量有限(不同浏览器允许并发数),一旦 HTTP 请求数量达到一定数量,资源请求就存在等待状态,这是很致命的,因此减少 HTTP 的请求数量可以很大程度上对网站性能进行优化。

  • CSS Sprites

  • 国内俗称CSS精灵,这是将多张图片合并成一张图片达到减少HTTP请求的一种解决方案,可以通过CSS的background属性来访问图片内容。这种方案同时还可以减少图片总字节数。

  • 合并 CSS 和 JS 文件

  • 现在前端有很多工程化打包工具,如:grunt、gulp、webpack等。为了减少 HTTP 请求数量,可以通过这些工具再发布前将多个CSS或者多个JS合并成一个文件。

  • 采用 lazyLoad

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

一个好的心态和一个坚持的心很重要,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。

分享一些简单的前端面试题以及学习路线给大家,狂戳这里即可免费领取

来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!**

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

[外链图片转存中…(img-8SbpsDNt-1713698171577)]

最后

一个好的心态和一个坚持的心很重要,很多冲着高薪的人想学习前端,但是能学到最后的没有几个,遇到困难就放弃了,这种人到处都是,就是因为有的东西难,所以他的回报才很大,我们评判一个前端开发者是什么水平,就是他解决问题的能力有多强。

分享一些简单的前端面试题以及学习路线给大家,狂戳这里即可免费领取

[外链图片转存中…(img-eonWkYDB-1713698171577)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值