vue面试题:
https://www.jianshu.com/p/8c679b82eaa7
https://www.jianshu.com/p/6c8395d34bf6
vue双向数据绑定:
采用数据劫持结合发布者-订阅者模式的方式
Object.defineProperty
get: 一旦目标属性被访问就会调回此方法,并将此方法的运算结果返回用户。
set:一旦目标属性被赋值,就会调回此方法。
通过Object.defineProperty()来劫持各个对象属性的setter和getter操作,在数据变动时发布消息给订阅者,触发相应的监听回调。
原生javaScript面试题:
promise API:
Promise是一种异步编程的处理方案,有三种状态,pending(进行中)、resolved(已完成)、rejected(已失败)。当Promise的状态由pending转变为resolved或者reject时,会执行相应的方法.Promised的特点是只有异步操作的结果,可以决定当前是哪一种状态,任务其余操作都无法改变这个状态,状态一旦改变,就无法再次改变状态
1. Promise.resolve()—— 返回一个promise对象
2. Promise.reject()——返回一个状态为失败的promise对象
3. Promise.all(iterable)—— 所有成功才成功,一个失败即失败(多个promise 任务同时执行,返回所有promise 任务的执行结果。)
4. Promise.race(iterable)——竞速,最快的一个(多个promise 任务同时执行,只返回最先执行完的 Promise 任务的结果。)
// 原型方法:
1. Promise.prototype.then(resolved,rejected)
2. Promise.prototype.catch()
3. Promise.prototype.finally()
深拷贝~浅拷贝:
浅拷贝:对于浅拷贝来说,如果拷贝基本类型,那么就等于赋值一样,会直接拷贝其本身;但如果拷贝的是引用类型,就只会拷贝一层,如果 原对象发生改变,那么拷贝对象也会发生改变。
深拷贝:深拷贝的话就会拷贝多层,嵌套的对象也会被拷贝出来,相当于开辟一个新的内存地址用于存放拷贝的对象。
如何区分深拷贝与浅拷贝,简单点来说,就是假设B复制了A,当修改A时,看B是否会发生变化,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。
深拷贝实现方法:
第一种:ES6的Object.assign()方法
// 针对于对象只有一层的,不能实现真正的深拷贝。对象有多层的不能使用此方法。
var obj1 = {name:'lily'};
var obj2 = Object.assign({},obj1);
obj2.name = 'bob';
console.log(obj1.name); //lily
console.log(obj2.name); //bob6
第二种:将对象转成字符串再转换回来
// 用JSON.stringify把对象转成字符串,再用JSON.parse把字符串转成新的对象。
var obj1 = JSON.parse(JSON.stringify(obj));
第三种:递归方法实现深拷贝
1.3 一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
1.浏览器根据请求的URL交给DNS域名解析,找到真实IP;
2.浏览器根据 IP 地址向服务器发起 TCP 连接,与浏览器建立 TCP 三次握手
a.客户端向服务器发送一个建立连接的请求
b.服务器接到请求后发送同意连接的信号
c.客户端接到同意连接的信号后,再次向服务器发送了确认信号,然后客户端与服务器的连接建立成功
3.浏览器发送HTTP请求
浏览器根据 URL 内容生成 HTTP 请求,请求中包含请求文件的位置、请求文件的方式等等;
4.服务器处理请求并返回HTTP报文(HTTP响应报文也是由三部分组成: 状态码, 响应报头和响应报文。):
a…服务器接到请求后,会根据 HTTP 请求中的内容来决定如何获取相应的 HTML 文件;
b.服务器将得到的 HTML 文件发送给浏览器;
c.在浏览器还没有完全接收 HTML 文件时便开始渲染、显示网页;
d在执行 HTML 中代码时,根据需要,浏览器会继续请求图片、CSS、JavsScript等文件,过程同请求 HTML 。
5.断开连接
1.4 浏览器缓存
1.sessionStorage
优点:可以临时存储,关闭页面标签自动回收,不支持跨页面交互
缺点:只能作为临时存储,不能存储持久化
2.localStorage
优点:用于长久保存整个网站的数据,保存的数据没有过期时间,直到手动去删除。
缺点:存在大小限制,IE8以上的IE版本才支持这个属性;目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换
3.cookie
优点:兼容性最好,几乎所有的浏览器都支持
缺点:大小有限制,而且每次发送请求,请求头里会带着cookie一起发过去,现在基本大多数登录的合法性验证都是用cookie验证的
4.userData
优点:出现的时间比sessionStorage要早
缺点:IE专门的存储方式,存储大小有限,单个文件的大小限制是128KB,一个域名下总共可以保存1024KB的文件,文件个数应该没有限制。在受限站点里这两个值分别是64KB和640KB
css面试题:
CSS实现水平垂直居中:
一、绝对定位元素+transform 中 translate 居中实现(未知宽高的元素)
.content{
background: orange;
position: absolute;
top: 50%;
left: 50%;
transform: translate( -50%, -50%);
}
二、绝对定位元素+margin: auto 居中实现
.content{
width: 100px;
height: 100px;
background: orange;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
三、相对定位( margin: 0 auto;+transform: translateY(-50%);)
.content{
width: 300px;
height: 300px;
background: orange;
margin: 0 auto;/*水平居中*/
position: relative;
top: 50%;
transform: translateY(-50%);
}
四、弹性布局