谈谈近段时间的前端面试

近段时间忙于工作和准备辞职的事忙的不可开交,现在对近段时间的面试情况进行一次总结,感觉收获良多,很感谢面试我的各位面试官们,好了,闲话不多说了,开始谈谈近段时间的面试情况。(由于时间不充裕暂时给出现有答案,往后会继续更新)

公司一:

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),是否能够进入此页面,如果不能则提示错误或重定向到其他页面,在后台管理系统中这种场景经常能遇到。

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章