面试题

2020-09-24  本文已影响0人  yimi珊
axios和ajax的区别

axios是通过promise实现对ajax技术的一种封装
axios可以运行nodejs里边,ajax只能在js中使用
拦截请求和响应(Interceptors拦截器)
axios可以并发请求

h5+css3新特性有哪些

h5的新特性:
1.增加了语义化内容的元素,如header,footer,artical,section,nav
2.增加了用于绘画的canvas元素以及svg元素等
3.增加了用于多媒体的video和audio元素
4.增加了localstorage和secssionStorage
5.HTML5拥有更有效的服务器推送技术,Server-Sent Event和WebSockets就是其中的两个特性,这两个特性能够帮助我们实现服务器将数据“推送”到客户端的功能

CSS3的新特性:
1.新增属性选择器,伪元素选择器
2.新增边框圆角,边框阴影,文字阴影,2d,3d转换,渐变,动画等效果

LocalStorage,SessionStorage,Cookie的区别以及使用的场景

储存方式 储存大小 清除 使用场景
cookie 4K左右 可以设置失效时间 判断用户是否登陆过网站,记住密码等
localStorage 5M左右 除非被清除或者卸载浏览器,否则永久保存; 适合长期保存在本地的数据,比如说夜间模式,主题模式等
sessionStorage 5M左右 仅在当前会话下有效,关闭页面或浏览器后被清除 网上商城中的购物车,ajax的数据缓存

axios的二次封装

websocket

websocket--http协议的一个补丁,支持长久连接。http协议的服务器被动性,只有服务器不断发送请求,服务器才会返回response;而websocket协议的服务器具有主动性,只要客服端发起一次请求,就会一直连接,而服务器只要有response就可以主动给返回。

缺点:网络通信问题,若是中间网络信号等问题,互动通信的信息没有抵达接受方,由于是长连接,所以无法判断是否数据丢失。

call,apply,bind的区别

vue 组件通信

父-子 props
子-父 $emit $on
兄弟 vuex
路由传参

父组件调用子组件方法

ref $refs

子组件调用父组件方法

闭包(什么是闭包?什么情况下用到闭包?有什么优缺点?为什么不被垃圾回收机制回收?什么是垃圾回收机制?)

闭包就是函数内嵌套函数
在函数中定义的变量, 被内层函数应用后, 不会被垃圾将回收机制回收
优点: 可以使用函数内的变量, 并且不被回收 缺点: 过多使用, 会对内存造成压力
因为他们相互调用,所以不会被垃圾回收机制回收。
不被调用的方法或变量,就不会被垃圾回收机制回收。

跨域的解决方法

原型链

​ 当访问一个对象的某个属性时,会先从该函数本身属性上找,如果没有找到,则会在他的 _ proto _隐式属性(即构造函数的prototype)上去找,如果还没有找到的话,则就会再去prototyep的 _ proto _ 中去找,这样一层一层向上查找就会形成一个链式结构,就称之为原型链。

DNS是什么,解析域名的原理,过程是什么?

DNS( Domain Name System)是“域名系统”
DNS通过域名解析系统解析找到了对应的IP地址,域

具体过程如下:

介绍一下vue

mvvm , 单页面应用
有指令,支持双向绑定
组件化
面向对象
生命周期
vue-cli vuex vue-router
通过vue-cli搭建项目
路由
组件通信 props $emit $on vuex
vue ui

虚拟Dom及其作用/好处

虚拟DOM其实就是用JS来模拟DOM结构,把DOM的变化操作放在JS层来做,尽量减少对DOM的操作,然后对比前后两次的虚拟DOM的变化,只重新渲染变化了的部分,而没有变化的部分则不会重新渲染。
1.避免大量无谓的计算量,解决浏览器性能问题
2.操作虚拟dom即js对象远快于操作真实dom

引用数据类型和基础书类型的区别

常见的基本数据类型:Number、String 、Boolean、Null和Undefined。基本数据类型是按值访问的,因为可以直接操作保存在变量中的实际值。
引用类型数据:也就是对象类型Object type,比如:Object 、Array 、Function 、Data等。
基本数据类型,栈内存保存的是值。引用数据类型栈内存中保存的是key,内容放在堆内存中。

字符串有哪些方法

lenght,indexof,search

  1. String.fromCodePoint()
  2. String.raw()
  3. 实例方法:codePointAt()
  4. 实例方法:normalize()
  5. 实例方法:includes(), startsWith(), endsWith()
  6. 实例方法:repeat()
  7. 实例方法:padStart(),padEnd()
  8. 实例方法:trimStart(),trimEnd()
  9. 实例方法:matchAll()

数组有哪些方法?

isArray,forEach,map,filter,reduce,every,set

  1. 扩展运算符
  2. Array.from()
  3. Array.of()
  4. 数组实例的 copyWithin()
  5. 数组实例的 find() 和 findIndex()
  6. 数组实例的 fill()
  7. 数组实例的 entries(),keys() 和 values()
  8. 数组实例的 includes()
  9. 数组实例的 flat(),flatMap()
  10. 数组的空位
  11. Array.prototype.sort() 的排序稳定性

undefined和null区别

underfined :没有定义
null:定义了,未赋值

jQuery获取兄弟节点

$('#id').siblings() 当前元素所有的兄弟节点
$('#id').prev() 当前元素前一个兄弟节点
$('#id').prevAll() 当前元素之前所有的兄弟节点
$('#id').next() 当前元素之后第一个兄弟节点
$('#id').nextAll() 当前元素之后所有的兄弟节点

link和@import的区别

两者都是外部引用CSS的方式,但是存在一定的区别:
区别1:link是XHTML标签,除了加载CSS外,还可以定义RSS等其他事务;@import属于CSS范畴,只能加载CSS。
区别2:link引用CSS时,在页面载入时同时加载;@import需要页面网页完全载入以后加载。
区别3:link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。
区别4:link支持使用Javascript控制DOM去改变样式;而@import不支持。

同步,异步,延时加载

同步:一步步加载
异步:同时加载
延时加载:等到要用或者空闲时在加载

做项目的思路

看设计图,选择框架,选择ui
搭建框架,引入ui,定制项目规范(公共组件,模块,页面放哪里,命名方式),设计公共css模块
配置路由,axios
页面绘制和接口(封装公共组件,模块)

a标签的优先级

href 优先于点击事件

如何用js把一个很大的图片压缩

我们用的是一个叫compressor.js的插件去压缩的,没有自己写,就像我们项目用到了上传图片组件,就会去压缩图片

如何监听全局的异常,包括浏览器崩溃,服务器问题等等

errorHandler

vue如何定义全局变量

防抖和节流

解释单向数据绑定和双向数据绑定以及他们之前的区别

promise可以解决回调地狱的底层原理是什么

回调地狱是因为异步回调函数嵌套太多。
​ Promise的内部也有一个 defers 队列存放事件,而 .then 方法的作用和发布订阅模式的on方法一样是用来订阅事件的,每次调用 .then 方法就会往defers队列中放入一个事件,当异步操作完成时, resolve方法标示前一个异步过程完成并从defers队列中取出第一个事件执行并返回当前对象保证链式调用,以此类推,就完成了所有异步过程的队列执行。

vue的生命周期

钩子函数 说明
beforeCreate vue实例创建(newVue())之后, 初始化完成, 创建之前调用, 无数据, 无模板, 未挂载
created vue实例创建完成后调用, 有数据, 无模板, 未挂载
beforeMount vue实例挂载前调用, 有数据, 有模板, 未挂载
mounted vue实例挂载后调用, 有数据, 有模板, 已挂载
beforeUpdate 数据更新前
updated 数据更新后
activated keep-alive 组件激活时调用
deactivated keep-alive 组件停用时调用
beforeDestroy 实例销毁前
destroyed 实例销毁后
errorCaptured 当捕获一个来自子孙组件的错误时被调用

深复制、浅复制

数组去重

1.for循环
2.es6 的set方法

var arr = [1,1,2,3,5,6,8,412,112,0,0,5];
//方法一
console.log(Array.from(new Set(arr)));
//方法二
console.log([...new Set(arr)]);

数组排序

冒泡排序
选择排序
sort排序

为什么axios在vue可以直接使用,而vuex要使用vue.use的使用场景

因为axios没有install,开发者在封装axios的时候,没有install这一步。
vue.use使用场景:vuex,vue-router,Mint-ui
install是默认的方法,当外界在use这个组件的时候就会调用本身的方法,同时传一个vue这个类的参数。

es6有哪些新特性?说说除了then跟catch,还用过哪些方法?

try..catch,try正确执行,catch错误执行。
es6特性:
1.const,let,用于定义变量
2.箭头函数,减少代码,函数
3.for ...of 遍历数组
4.class,类继承
5.解构,减少代码量
6.剩余展开符,得到剩余遍历
7.字符串模板,不用字符串拼接那么麻烦
acync await 等待一个异步方法执行完毕,放回结果。

清除浮动

1.clear:both
2.overflow:hidden
3.伪元素+zoom

http状态码

http的 8 种请求方式

请求方式 说明
GET 获取资源, 用来请求已被URI识别的资源
POST 传输实体, 向服务器传输数据
HEAD 获得报文首部, 用于确认URI的有效性及资源更新的日期时间等
PUT 传输文件, 用来传输文件,就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存在请求URI指定的位置
DELETE 删除文件, 服务器删除某个资源
OPTIONS 询问支持的方法, 查询针对请求URI指定资源支持的方法
TRACE 追踪路径, 让Web服务器端将之前的请求通信还给客户端的方法
CONNECT 要求用隧道协议连接代理, 要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信

vuex有几个属性

Vuex有五个核心概念:state, getters, mutations, actions, modules。

  1. state:vuex的基本数据,用来存储变量
  2. getter:从基本数据(state)派生的数据,相当于state的计算属性
  3. mutation:提交更新数据的方法,必须是同步的(如果需要异步使用action)。每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。
    回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数,提交载荷作为第二个参数。
  4. action:和mutation的功能大致相同,不同之处在于 ==》1. Action 提交的是 mutation,而不是直接变更状态。 2. Action 可以包含任意异步操作。
  5. modules:模块化vuex,可以让每一个模块拥有自己的state、mutation、action、getters,使得结构非常清晰,方便管理。

父子组件执行的顺序

你使用过的遍历方法 (哪些可以跳出循环)

for 和 for...in (使用break跳出循环)
Array.every() (使用return或者return false 跳出循环)
Array.some() (使用return true跳出循环)
forEach 和 Array.map (不能跳出循环)

$nextTick() $forceUpdate的用法

跨站脚本漏洞xss

https://www.jianshu.com/p/4fcb4b411a66
https://zhuanlan.zhihu.com/p/26177815

双向数据绑定原理

vue是采用数据劫持配合发布者-订阅者模式的方式,通过Object.definerProperty()来劫持各个属性的setter和getter,在数据变动时,发布消息给依赖收集器,去通知观察者,做出对应的回调函数,去更新视图。

mvvm作为绑定的入口,整合Observer,Compile和Watcher三者,通过Observer来监听model数据变化,通过Compile来解析编译模板指令,最终利用Watcher搭起Observer,Compile之间的通信桥梁,达到数据变化=>视图更新;视图交互变化=>数据model变更的双向绑定效果。


image.png

vuex的数据流向是怎么样的

1.用户触发行为actions 通过this.dispach(或者可以直接commit方法)
2.通过commit Mutations中的方法 改变state中 的值
3.最后通过this.$store.state.id的方法将值映射到页面上

vue-router的底层原理

vue-router通过hash与History interface两种方式实现前端路由,更新视图但不重新请求页面”是前端路由原理的核心之一,目前在浏览器环境中这一功能的实现主要有两种方式

1.hash ---- 利用URL中的hash(“#”)
2.利用History interface在 HTML5中新增的方法

在vue-router中,它提供mode参数来决定采用哪一种方式

axios的底层原理

axios 底层源码解析

promise的底层原理

webpack原理

发布订阅模式和观察者模式

发送ajax请求,浏览器做了什么

vue里边对于数组的处理,有bug(数组修改了,页面没有修改?数组有十个数据,然后让它=0,会怎么样?)

vue里面有什么抽取公共方法的操作,或者说实现公共方法的技术

写成公共方法插件

created 里面有this吗?有dom吗?可以操作dom吗?

created里面有this,就是vue
没有dom,那个时候还没生成dom
可以操作dom,但是需要写在$nextTick()里边

mounted里面有一个方法,created里面有一个方法,现在有三个组件要执行这两个方法,有什么解决方案?

mixin

keep-alive原理

深复制有什么方法,有什么bug

1.Object.assign()方法。ES6提供了Object.assign()方法用于深拷贝。(有bug)
bug:只实现一层深拷贝,如果里边还有下一级对象,就不会被拷贝
2.Json.parse(Json.stringify(obj))方式
bug:只能处理简单的属性和简单的属性数组,构造器信息会丢失
3.for
注意:需要用hasOwnProperty去判断key是否存在,以防止对象中的某个key调用自己,导致无限循环
https://blog.csdn.net/yiyan12/article/details/79447202

对象继承的方式有哪些

1、原型链继承
2、借用构造函数继承
3、组合继承(1、2)
4、原型式继承
5、寄生式继承
6、寄生组合式继承

在vue组件里边,css想改第三方的样式,但是我又想加scope,应该怎么办?

穿透>>>
Vue中的scoped及穿透方法,改变第三方组件库样式

上一篇下一篇

猜你喜欢

热点阅读