Vue
对mvvm的理解
mvvm分为model、view、viewmodel三者
model代表数据模型
view代表视图
viewmodel代表连接视图和模型,实现了vue数据的双向绑定
viewmodel主要职责就是
数据变化后更新视图,视图变化后更新数据
它有两个重要的部分Observer(监听器)、Compiler(解析器)
监听器对所有的数据属性进行监听,
解析器对每个元素节点进行扫描,替换数据以及绑定相应的更新数据
vue中的el代表什么?
vue中的el代表Vue实例挂载的元素节点
(值可以是css选择器,id选择器)
vue-router是什么?有哪些组件?
Vue Router 是 Vue的路由管理器。它和 Vue的核心深度集成,让构建单页面应用更加容易。
<router-link>和<router-view>和<keep-alive>
怎么定义vue-router的动态路由?怎么获取传过来的值?
动态路由的创建,主要是使用path属性过程中使用动态路径参数,用冒号设置参数名
{
path: '/jdb/:id'
name: 'jdb'
components: jdb
}
访问jdb目录下的文件,如果jdb/a1,jdb/a2等,都会映射到jdb组件上
参数值会被设置到this.$route.params下,通过这个属性就可以获取动态参数了
console.log(this.$route.params.id)
vue父组件向子组件传递数
props
子组件向父组件传递事件
$emit
$refs
props的函数闭包用法
vue如何获取dom
给dom元素加ref=‘refname’,然后通过this.$refs.refname进行获取dom元素
为什么用key
给每个dom元素加上key作为唯一标识 ,使页面渲染更加迅速。虽然index也是下标
但key是给每一个vnode的唯一id,可以依靠key,更准确,
更快的拿到oldVnode中对应的vnode节点。所以渲染更快
vue在双向数据绑定是如何实现的?
vue双向数据绑定是通过数据劫持、组合、发布订阅模式的方式来实现的,
也就是说数据和视图同步,数据发生变化,视图跟着变化,
视图变化,数据也随之发生改变
核心:关于vue双向数据绑定,其核心是Object.defineProperty()方法
什么是 vue 生命周期?有什么作用?
每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,
需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。
同时在这个过程中也会运行一些叫做 生命周期钩子 的函数,
用户可以在不同的阶段根据不同的需求添加相应的代码
第一次页面加载会触发哪几个钩子?
beforeCreate, created, beforeMount, mounted
对vue生命周期的理解
总共分为8个阶段
创建前/后,
载入前/后,
更新前/后,
销毁前/后。
创建前/后: 在beforeCreated阶段,vue实例的挂载元素$el和数据对象data都为undefined,
还未初始化。
在created阶段,vue实例的数据对象data有了,$el还没有。
载入前/后:在beforeMount阶段,vue实例的$el和data都初始化了,
但还是挂载之前为虚拟的dom节点,data.message还未替换。
在mounted阶段,vue实例挂载完成,data.message成功渲染。
更新前/后:当data变化时,会触发beforeUpdate和updated方法。
销毁前/后:在执行destroy方法后,对data的改变不会再触发周期函数。
vuex是什么?
vuex是对vue提供全局状态管理系统,用于组件之间的数据共享和缓存
vuex有哪几种属性?
有五种,State、 Getter、Mutation 、Action、 Module
state: 基本数据(数据源存放地)
getters: 从基本数据派生出来的数据
mutations : 提交更改数据的方法,同步!
actions : 像一个装饰器,包裹mutations,使之可以异步。
modules : 模块化Vuex
vue 事件中如何使用 event 对象?
获取事件对象,方法参数传递 $event 。注意在事件中要使用 $ 符号
<button @click="Event($event)">事件对象</button>
Vuex 页面刷新数据丢失怎么解决?
需要做 vuex 数据持久化,一般使用本地储存的方案来保存数据,
可以自己设计存储方案,也可以使用第三方插件。
推荐使用 vuex-persist (脯肉赛斯特)插件,
它是为 Vuex 持久化储存而生的一个插件。不需要你手动存取 storage,
而是直接将状态保存至 cookie 或者 localStorage中。
为何组件 data 必须是一个函数?
防止组件重用的时候导致数据相互影响。根本上 .vue 文件编译出来是一个类,这个组件是一个class,我们在使用这个组件的时候相当于对class 实现实例化,在实例化的时候执行data,如果 data不是函数的话拿每个组件的实例结果都一样了,共享了,如果 data不是函数的话在一个地方改了,另一个地方也改了。如果data是函数在左边实例化一个右边实例化一个都会执行这个函数,这两个data都在闭包中,两个不会相互影响
前端三件套、web前端基础
元素的分类
元素分为inline(行内元素)、block(块元素)、inline-block(行内块元素)、flex(弹性元素),
其中flex弹性元素更加灵活
flex弹性布局
当一个元素的类型被改为flex --- display:flex;
我们管这个元素称为flex容器
在这个容器里float失效
内部的div容器不会独占一行了(布局会更加简单)
justify-content:flex-start(开始对齐--内容在左侧--默认)
justify-content:flex-end(结尾对齐--内容在右侧)
justify-content:center(中心对齐--内容居中)
justify-content:space-between(两端对齐)
justify-content:space-around(自动分配间隔,每个元素的边距一致)
主轴变换:
flex-direction:row ---默认水平排列
flex-direction:column ---内容变为垂直排列
用flex弹性布局,布局会特别的方便
== 和===的区别
==是非严格意义上的相等
值相等就相等
===是严格意义上的相等,会比较两边的数据类型和值大小
值和引用地址都相等才相等
js数据类型
基本数据类型
Number、String、Boolean、Null、Undefined、Symbol、bigInt
引用数据类型
object、Array、Date、Function、RegExp
如何实现浏览器响应式布局?
常用如下
使用媒体查询(@media)
使用flex弹性布局
使用百分比单位
使用rem单位
推荐一种冷门万能自适应方式:tranfrom:scale(动态比值)
项目性能优化方案
1.对象层级不要太深,
2.不需要响应的数据不需要放在data中
3.图片和路由懒加载
4.异步路由
5.可以适当采用keep-alive缓存组件
6.减少 HTTP 请求数
7.避免重定向
8.减少Dom操作
9.css放在顶部,js放在底部
软件开发的流程(这是一个前后端通问的题)
1.市场调研需求
2.需求探讨评价
3.UI设计
4.编程开发
5.调整测试
6.交付验收
7.上线发布
8.后期运营
请描述⼀下 cookies , sessionStorage 和 localStorage 的区别?
防抖与节流
防抖与节流函数是⼀种最常⽤的 ⾼频触发优化⽅式,能对性能有较⼤的帮助。
防抖 (debounce): 将多次⾼频操作优化为只在最后⼀次执⾏
uni-app小程序
优点:
小程序是个单页面应用,基于微信平台开发,享受微信自带的流量,
这个优点最大,无需安装,有微信即可,不占内存,开发周期短,
开发资金是原生App的一半不到,容易上手,不需要考虑兼容性,
只要你的手机可以运行微信,那就肯定可以运行小程序,
缺点:
但是缺点也很明显
局限性很高,页面大小不能超过1M,不能打开超过5层级的页面,
后台调试麻烦,API接口必须是https请求,且后台代码必须发布到服务器上
才可以访问数据
小程序页面间传递数据的方式
1.全局遍历实现数据传递
2.页面跳转重定向时,使用url带参数传递
3.使用组件模板template传递参数
4.缓存传参
那些方法可以提高小程序的应用速度
1.减少默认data的大小
2.组件化方案,减少重复代码的编写
小程序和H5的区别
1.运行环境不同(小程序在微信运行,H5在浏览器运行)
2.h5需要兼容不同的浏览器
简述微信开发者工具的调试工具(*这题是我去一家公司面试原题)
1.查看状态码
2.检查请求路径、方式
3.查看是否传递参数,检查参数格式
4.查看通过接口获取的数据
最后整理一些面试常问的问题吧
先到这里吧,,,看到合适的题会不断更新的