记录第二次面试,面试官很好,时长45min
1。自我介绍
2.你为什么从上一家公司离职,有没有想过继续待在上家公司,为什么选择深圳
3.vue
1.问:vue生命周期
答:从Vue实例创建、运行、到销毁期间,伴随着的各种事件,这些事件统称为生命周期
生命周期函数分类:
-
创建期间的生命周期函数:
-
-
beforeCreate:实例刚在内存中被创建出来,此时还没有初始化好data和methods属性
-
created: 实例已经在内存中创建出来,此时的data和methods以及创建完成,但是还没有开始编译模板
-
beforeMount: 此时已经完成了模板的编译,但是还没有挂载到页面上
-
mounted: 已经将编译好的模板,挂载到了页面指定的容器中显示
-
-
运行期间的生命周期函数:
-
-
beforeUpdate: 状态更新之前执行此函数,此时data中的状态值是最新的,但是界面上显示的数据还是旧的,因为此时还没有开始重新渲染DOM节点
-
updated: 实例更新完毕之后调用此函数,此时data中的状态值和界面上显示的数据,都已经完成了更新,界面已经被重新渲染好了
-
-
销毁期间的生命周期函数:
-
注意 !!!vue3,则是beforeunmount和unmount
-
- beforeDestory: 实例销毁之前调用,在这一步,实例仍然完全可用
- destroyed: Vue实例销毁之后调用。调用后,Vue实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁
2.问:vue组件之间的传递方式有哪些
答:### 父组件向子组件传值
- 父组件发送的形式是以属性的形式绑定值到子组件身上。
- 然后子组件用属性props接收
- 在props中使用驼峰形式,模板中需要使用短横线的形式字符串形式的模板中没有这个限制
子组件向父组件传值
- 子组件用
$emit()触发事件 $emit()第一个参数为 自定义的事件名称 第二个参数为需要传递的数据 $(event)来接收- 父组件用v-on 缩写为@ 监听子组件的事件
兄弟之间的传递
-
兄弟之间传递数据需要借助于事件中心,通过事件中心传递数据
-
提供事件中心 var hub = new Vue() -
传递数据方,通过一个事件触发hub.$emit(方法名,传递的数据)
-
接收数据方,通过mounted(){} 钩子中 触发hub.$on()方法名
-
销毁事件 通过hub.$off()方法名销毁之后无法进行传递数据
3.问:v-if和v-show,v-show和v-if优先级
答:v-show原理是修改元素的css属性display:none来决定是显示还是隐藏
v-if则是通过操作DOM来进行切换显示
4.问:说一下computed和watch区别和具体使用
5.问:vue 路由守卫
6.问:vue指令有哪些
7.问:路由懒加载
8.问:mixin优先级
9.问:JWT路由权限
4.js
js 检测数组的方法,
js数据类型并介绍,
答:string、number、null、defined、boolean、object、symbol、bigint
怎么判断js数据类型
闭包及作用
答:闭包就是函数中包含另一个函数,可以让你在函数外部读取到内部的变量(就是在函数内部再定义一个函数),让这些变量的值始终保持在内存中,可以达到延长变量生命周期的效果,过多使用会导致内存泄漏的问题
(在创建私有变量和想延长变量的生命周期时会用到闭包)
浅拷贝和深拷贝
答:浅拷贝,指的是创建新的数据,这个数据有着原始数据属性值的一份精确拷贝
如果属性是基本类型,拷贝的就是基本类型的值。如果属性是引用类型,拷贝的就是内存地址
在JavaScript中,存在浅拷贝的现象有:
- Object.assign
- Array.prototype.slice()
- Array.prototype.concat()
- 使用拓展运算符实现的复制
深拷贝开辟一个新的栈,两个对象属完成相同,但是对应两个不同的地址,修改一个对象的属性,不会改变另一个对象的属性
常见的深拷贝方式有:
- _.cloneDeep()
- jQuery.extend()
- JSON.stringify()
- 手写循环递归
this指向,
箭头函数,
promise
5.css
flex布局怎么实现页面垂直水平居中,怎么实现上下两头固定的三栏布局
6.项目
介绍你的项目,项目中的难点及怎么攻克的
你在工作中如果遇到解决不了的问题怎么办