前端面试概要(Vue开发)

JS 篇

闭包

定义:函数内部定义函数,内部函数持有外部函数参数

作用

  • 读取函数内部的变量
  • 让这些变量的值始终保持在内存中。不会再f1调用后被自动清除。
  • 方便调用上下文的局部变量。利于代码封装。

副作用:内存管理,可能会内存溢出

  • 原因:f1是f2的父函数,f2被赋给了一个全局变量,f2始终存在内存中,f2的存在依赖f1,因此f1也始终存在内存中,不会在调用结束

内存溢出的常见方式

  • 递归调用缺乏退出条件
  • vue、react 中 定时器和计时器 未消除,习惯在生命周期销毁阶段去清空;
  • 闭包使用过程中未及时销毁,fn=null 来清除变量的引用;
  • dom 操作完成后 绑定事件未销毁;
  • dom 操作中的事件委托未销毁;

参考:https://blog.csdn.net/qappleh/article/details/80337630

防抖与节流

  • 防抖是将多次执行变为最后一次执行;
  • 节流是将多次执行变为每隔一段时间执行
  • 实现函数节流我们主要有两种方法:时间戳和定时器
  • 参考:https://www.cnblogs.com/momo798/p/9177767.html

请求的取消

  • $ajax 取消的ajax的关键是调用XHR对象的.abort()方法
  • axios axios.CancelToken api 调用
  • 如何自己实现一个ajax请求(要点:步骤、状态、参数的处理、响应结果的处理、错误的处理)
  • 参考:https://www.cnblogs.com/qing-5/p/11368009.html

WebSocket 与http

  • HTTP 协议通信只能由客户端发起,通信是单向的,如果需要持续通信,常规通过轮询的方式发起请求;效率低,占用通信;
  • WebSocket是双向通信;服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息

其他特点包括:

  • 建立在 TCP 协议之上,服务器端的实现比较容易。
  • 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易 屏蔽,能通过各种 HTTP 代理服务器。
  • 数据格式比较轻量,性能开销小,通信高效。
  • 可以发送文本,也可以发送二进制数据。
  • 没有同源限制,客户端可以与任意服务器通信。
  • 协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

websocket的api与 心跳机制(重要)

flash 即将过期,有什么代替方案?

Function的命名区别

    var a=function(){ console.log(1) } 与 function  a () { console.log(2)} 的区别
  • var a=function 函数 表达式,变量命名初始化在前,函数主体初始话在函数调用时才进行;所以必须在申明之后才能调用a();
  • function a 函数申明,变量申明和函数主体初始话 一开始就完成,所以可以在a 申明之前去调用;
  • 当 执行 a();输出的是1

JS类型判断的方法

Promise 的实现原理

参考:http://liubin.org/promises-book/

常见问题

  • 状态 pedding、fulfilled、rejected 什么含义
  • promise 内部是如何捕获错误的(catch的实现原理);
  • finnaly 的作用是什么(实现原理)
  • resolve 与 reject 的作用是什么;
  • 多个 promise 链式调用中,如何执行( 什么情况会then,什么时候会catch )
    sendRequest('test1.html', '').then(function(data1) {
        console.log('第一次请求成功, 这是返回的数据:', data1);
        return sendRequest('test2.html', data1);
    }).then(function(data2) {
        console.log('第二次请求成功, 这是返回的数据:', data2);
        return sendRequest('test3.html', data2);
    }).then(function(data3) {
        console.log('第三次请求成功, 这是返回的数据:', data3);
    }).catch(function(error) {
        //用catch捕捉前面的错误
        console.log('sorry, 请求失败了, 这是失败信息:', error);
    }); 

async 函数

实现异步改为同步的方式有哪些

  • async await
  • Generator 与 yield* 实现
  • 常用的callback 在异步中回调

ES6 新增特性有哪些

常见问题

简述打开一个新页面时,浏览器如何实现页面渲染

  • 从js脚本、dom树、样式表 三个方面回答

HTTP 三次握手简述

https 为什么是安全的(http与https对比着说)?

JS 继承与原型、原型链

this指向问题

对象创建的方式有哪些,有什么区别(对象原型链问题)

第一种: 字面量
var Obj1 = {name:”o1”};
var Obj2 = new Object({name:”o2”});
// var a = {} 其实是 var a = new Object() 的语法糖
// var a = [] 其实是 var a = new Array() 的语法糖
//所以上面 Obj1 与 Obj2 的申明方式等价

第二种:构造函数
var M = function (name) { this.name = name };
var Obj3 = new M(“o3”) ;

第三种:Object.create(继承的原型对象)
var p = {name:”o4”}
var Obj4 = Object.create(p);

参考:https://blog.csdn.net/m0_37585915/article/details/80843945?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.channel_param

大体积文件上传(分片上传的实现)

敏捷开发模式(了解其概念)


CSS 篇

css 权重问题

!important>行内样式>id>class,伪类选择,属性选择器>>标签>继承》通配符
link>@important

css @import 与link 引入有什么不同,哪种方式更优?

参考链接:https://www.cnblogs.com/my--sunshine/p/6872224.html

less 与scss 的使用

常见问题

  • 两种中变量如何定义?
  • 如何实现样式的复用(混合)?

回流与重绘的概念

https://www.cnblogs.com/mdr86553/p/12048742.html

  • 常见问题:display:none与visiable:hidden 的区别

布局

如何实现居中

  • flex布局居中;
  • transform + translate;
  • margin:0 auto;
  • display:table ,借助于表格定位;
  • calc 计算居中;
  • text-aligin:center;
  • 高度与行高相同;

Css 中的BFC及消除方式

如何实现一个三角形?

如何实现响应式布局?

vm、rem、em 、px的区别

在vue 移动端开发过程中,如何设置字体、文字为响应式


VUE 篇

实现原理;

vue实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过Objct.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应监听回调。当把一个普通 Javascript 对象传给 Vue 实例来作为它的 data 选项时,Vue 将遍历它的属性,用 Object.defineProperty 将它们转为 getter/setter。用户看不到 getter/setter,但是在内部它们让 Vue 追踪依赖,在属性被访问和修改时通知变化。

参考:https://baijiahao.baidu.com/s?id=1614572521202569483&wfr=spider&for=pc

如何实现数据双向绑定,简述原理和具体实现方式?

参考:https://blog.csdn.net/yun_hou/article/details/86313212

vue的生命周期及先后顺序

  • created、watch、computed、mounted 的先后顺序(具体写案例测试);
  • 父子组件间 vue 的生命周期如何执行?

如何全局注册组件和过滤器?多个组件和过滤器如何注册?

//全局过滤器统一导出
conset fuction  filter1(){} 
conset fuction  filter2(){} 
conset fuction  filter3(){} 
export {filter1,filter2,filter3}
//统一导入
import * as filters from '@/common/filters' 
//循环生成过滤器
Object.keys(filters).forEach(key => {
    Vue.filter(key, filters[key])
})
//统一导入组件同理
import * as compontents from '@/common/compontents' 
//循环生成过滤器
Object.keys(compontents).forEach(key => {
    Vue.Compontent(key, compontents[key])
})

传参方式

  • 父传子 :props,ref 获取子组件实例、slot 插槽实现、$children 获取所有子组件实例
  • 子传父:$emit 向外分发、.async 修改父组件实例,
  • 兄弟之间(全局):vuex 状态管理器、$bus 中间总线方式;
  • 路由传参;
  • vue 根节点设置全局变量;
  • 本地存储方式实现数据共享;
  • 组件组合方式 : mixins 混合语法,extends 子组件实现构造、provide / inject (依赖注入)(参考 element-ui);

页面缓存keep-alive 的实现

  • include and exclude 的作用,钩子函数 activated、deactivated 的作用;
  • 如何实现 a、b、c 三个页面,a->b页面缓存,c->b页面不缓存;

如何实现组件的强制刷新功能;

  • v-if 设置false;在$nextTick(_=>更改状态变为true);
  • component 的is属性,动态改变挂载组件名称;
  • 设置key值,vue通过检查key值变化了自动刷新页面;
  • 调用foceUplate 的实例方法,强制刷新页面;

vue管理平台鉴权如何设置?

参考:https://www.cnblogs.com/zhengrunlin/p/8981017.html

菜单权限

1、常规系统设计分为菜单、角色、人员;
2、菜单和按钮分配给角色;角色分配给人员;
3、用户登录时获取角色对应的菜单树和按钮集合;通过遍历菜单树形成router树;
4、调用路由addrouters api 动态添加在路由对象中;用户菜单常规是按照路由表对应生成的;

按钮权限

通常后台返回的按钮是存在于菜单树下的;需要单独遍历成一个按钮权限code集合;
通过自定义指令的形式来控制按钮节点的生成与删除
import Vue from 'vue';
import store from '@/vuex/store';
//权限按钮指令
Vue.directive('has', {
    inserted: function(el, binding) {
        if(!store.state.permissionButton[binding.value]){
            el.parentNode && el.parentNode.removeChild(el);
        }
    }
})
//使用 add 权限码判断
<el-button v-has="'add'">新增<el-button/>

Token 的使用

一种前后台权限验证手段;通常在请求的header中进行添加;
当缺少或者过期后,请求会返回401状态码;需要重新获取token或者重新登录;
***特殊业务***
token过期后跳转至登录,重新授权获取登录和再回跳至之前过期页面

//asios Response响应拦截
switch (error.response.status) {
                case 401:
                    // 返回 401 清除token信息并跳转到登录页面
                    store.commit(types.LOGOUT);
                    router.replace({
                        path: 'login',
                        query: {redirect: router.currentRoute.fullPath}//保持页面地址
                    })
            }
//登录
methods:{
    login(){
        let redirect=decodeURIComponent(this.$router.query.redirect);
        if(redirect){
            this.$router.push(redirect);
            return 
        }
        this.$router.push('/login')
    }
}

Vue 语法忽略盲区(vue、vue-router、vuex、vue-cli、webpack)

watch 与computed 的区别?

  • watch 如何实现对对象的监听?
  • watch 中deep:true 的作用是什么?(案例测试)
  • watch 中immediate :true 的作用是什么?(案例测试)

如何在methods 中使用filter的方法?

参考:https://blog.csdn.net/qq_35430000/article/details/92795438

修饰符有哪些?

  • .async 修饰符的作用及实现原理;

指令有哪些以及如何实现自定义指令?

参考:https://cn.vuejs.org/v2/guide/custom-directive.html
  • on-clock 的使用方式;

<transition> 的使用

参考:https://cn.vuejs.org/v2/api/#transition

虚拟dom createElement()与JSX 写法;

vue-router 的使用

简述 vuex 的构成及各部分功能(state、action、getter、mutation、module、plugins(很少用到))

  • vuex 提供的Map方法有哪些?
  • vuex 在常规业务中处理哪些数据?
    • 登录信息、baseCode(码表)、路由信息、菜单信息等全局状态;
  • 如何实现数据的持久化(页面刷新,如何保持store仓库数据不变)?

你还了解哪些状态管理的解决方案

  • 早期的flux;
  • react中官方推荐使用 redux
  • vuex中官方推荐使用 vuex
  • mobxmobx-vuemobx-react(mobx-*在react中使用较多,推荐深入学习下);
  • Rematch(很少用到)
  • ++自行百度搜索查看原理++

solt 语法的具体实现 ?

vue-router 前置钩子函数中next()有哪些用法?

简述webpack 的实现原理(基本构成、流程概括)?

webpack 中plugin与loader 的区别?

vue 中v-for 在遍历数组和对象时,循环参数(item、index、value、name、index)代表什么?

//data 
object: {
      title: 'How to do lists in Vue',
      author: 'Jane Doe',
      publishedAt: '2016-04-10'
    }
 items: [
      { message: 'Foo' },
      { message: 'Bar' }
    ]
//循环数组
<ul id="example-2">
  <li v-for="(item, index) in items">
    {{ parentMessage }} - {{ index }} - {{ item.message }}
  </li>
</ul>    
//循环对象
<div v-for="(value, name, index) in object">
  {{ index }}. {{ name }}: {{ value }}
</div>

v-for 中添加key的作用是什么?

v-if 与v-show 的区别及在哪些情况下使用?

set( )、nextTick( ) 的作用是什么?

vue3 与 vue2 相比有哪些改动?

Vue element-ui 键盘回车事件表单自动提交造成页面刷新问题(使用element-ui 有没实际的经验)

项目搭建做哪些工作?(结合实际来说)

  • 需求了解、原型图、设计图;
  • vue-cli改造(环境配置、常用css、js等脚本文件编写);
  • 请求封装、路由设置、组件封装、服务部署(打包构建);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342