近段时间忙于工作和准备辞职的事忙的不可开交,现在对近段时间的面试情况进行一次总结,感觉收获良多,很感谢面试我的各位面试官们,好了,闲话不多说了,开始谈谈近段时间的面试情况。(由于时间不充裕暂时给出现有答案,往后会继续更新)
公司一:
1. 工作中主要用的html标签是什么?以及他们的作用?
答:<title>,<meta>,<header>,<nav>,<footer>,<button>,<h>系列的标签,<p>,<img>,<a>,<ul>,<li>等语义化标签,
他们的优点是有利于seo以及语义化,同时在样式没有加载成功时,语义化的标签能够提供一定的可
阅读性,另外对于一些特殊的设备也有帮助。(我是从整体的作用去叙述,个人有个人的看法)
2. apply,call,bind的区别。
答案:
(1)用于指定函数内部的this指向的问题,这三个方法都差不多,只是存在形式上的差别,然后根据指定的作用域,调用该函数。
(2)都可以在函数调用时传递参数。call,bind方法需要直接传入,而apply方法需要以数组的形式传入
(3)call,apply方法是在调用之后立即执行函数,而bind方法没有立即执行,需要将函数再执行一遍
(4)如果第一个参数设为null或undefined或者this,则等同于指定全局对象
var arr = ['1','2','3']
var obj = {value:1,label:'番茄'}
function doMain(a, b, c){
console.log(a + b + c)
}
doMain.call(null, 1, 2, 3) // 这里是一个一个加参数的,注意
doMain.call(obj)
doMain.apply(null, arr)
doMain.apply(arr)
doMain.bind(null, 1, 2, 3)// 返回doMain() 传参跟call 的形式一样
doMain.bind(null, 1, 2, 3)() // 6
3. 箭头函数的指向
答: 箭头函数的this是继承父级执行上下文里面的this
4. webpack的使用场景
5. Cookie与LocalStorage,sessionStorage的区别
6. post与get的区别
7. 是否了解es6语法?说说了解那些?
8. 介绍一下盒子模型?怎么变成一个标准的盒子模型?
9. 什么是原型链?
10. js 中 this 闭包 作用域?
11. javascript 中 this 的指向问题。
vue部分:
1. 双向绑定的原理是什么?
答案:
VUE 实现双向数据绑定的原理就是利用了 Object.defineProperty() 这个方法重新定义了对象获取属性值(get)和设置属性值(set)的操作来实现的。
Vue3.0 将用原生 Proxy 替换 Object.defineProperty
题外话:为什么要替换 Object.defineProperty?(Proxy 相比于 defineProperty 的优势)
答案:
在 Vue 中,Object.defineProperty 无法监控到数组下标的变化,导致直接通过数组的下标给数组设置值,不能实时响应。
Object.defineProperty 只能劫持对象的属性,因此我们需要对每个对象的每个属性进行遍历。
2. 分别解释vue的生命周期函数。
答案:
(1) beforeCreate 初始化实例后 数据观测和事件配置之前调用
(2) created 实例创建完成后调用
(3) beforeMount 挂载开始前被用
(4) mounted el 被新建 vm.$el 替换并挂在到实例上之后调用
(5) beforeUpdate 数据更新时调用
(6) updated 数据更改导致的 DOM 重新渲染后调用
(7) beforeDestory 实例被销毁前调用
(8) destroyed 实例销毁后调用
3. <keep-alive>是用来做什么的?
答案:keep-alive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染。
<keep-alive>
<component>
<!-- 该组件将被缓存! -->
</component>
</keep-alive>
4. vuex存储数据的流程?vuex 有哪几种属性?
答:
vuex的State特性
A、Vuex就是一个仓库,仓库里面放了很多对象。其中state就是数据源存放地,对应于一般Vue对象里面的data
B、state里面存放的数据是响应式的,Vue组件从store中读取数据,若是store中的数据发生改变,依赖这个数据的组件也会发生更新
C、它通过mapState把全局的 state 和 getters 映射到当前组件的 computed 计算属性中
· vuex的Getter特性
A、getters 可以对State进行计算操作,它就是Store的计算属性
B、 虽然在组件内也可以做计算属性,但是getters 可以在多组件之间复用
C、 如果一个状态只在一个组件内使用,是可以不用getters
· vuex的Mutation特性
Action 类似于 mutation,不同在于:Action 提交的是 mutation,而不是直接变更状态;Action 可以包含任意异步操作。
5. vue中,怎么拦截路由?
6. 为什么避免 v-if 和 v-for 用在一起?
答案:
当 Vue 处理指令时,v-for 比 v-if 具有更高的优先级,这意味着 v-if 将分别重复运行于每个 v-for 循环中。通过 v-if 移动到容器元素,不会再重复遍历列表中的每个值。取而代之的是,我们只检查它一次,且不会在 v-if 为否的时候运算 v-for。
7. vue-cli 工程升级 vue 版本
答案:
在项目目录里运行 npm upgrade vue vue-template-compiler,不出意外的话,可以正常运行和 build。如果有任何问题,删除 node_modules 文件夹然后重新运行 npm i 即可。(简单的说就是升级 vue 和 vue-template-compiler 两个插件)
8. computed与watch的区别?
答案:
watch 主要作用是监听某个数据值的变化。和计算属性相比除了没有缓存,作用是一样的。
借助 watch 还可以做一些特别的事情,例如监听页面路由,当页面跳转时,我们可以做相应的权限控制,拒绝没有权限的用户访问页面。
9. vue怎么实现页面的权限控制
答案:
利用 vue-router 的 beforeEach 事件,可以在跳转页面前判断用户的权限(利用 cookie 或 token),是否能够进入此页面,如果不能则提示错误或重定向到其他页面,在后台管理系统中这种场景经常能遇到。