1、http状态码
- 200("OK")
一切正常。实体主体中的文档(若存在的话)是某资源的表示。 - 400("Bad Request")
客户端方面的问题。实体主题中的文档(若存在的话)是一个错误消息。希望客户端能够理解此错误消息,并改正问题。 - 500("Internal Server Error")
服务期方面的问题。实体主体中的文档(如果存在的话)是一个错误消息。该错误消息通常无济于事,因为客户端无法修复服务器方面的问题。 - 301("Moved Permanently")
当客户端触发的动作引起了资源URI的变化时发送此响应代码。另外,当客户端向一个资源的旧URI发送请求时,也发送此响应代码。 - 404("Not Found") 和410("Gone")
当客户端所请求的URI不对应于任何资源时,发送此响应代码。404用于服务器端不知道客户端要请求哪个资源的情况;410用于服务器端知道客户端所请求的资源曾经存在,但现在已经不存在了的情况。
304协商缓存开始吧。我一般会这么答:浏览器缓存分为强制缓存和协商缓存,优先读取强制缓存。
强制缓存分为expires和cache-control,而expires是一个特定的时间,是比较旧的标准和cache-control通常是一个具体的时间长度,比较新,优先级也比较高。
而协商缓存包括etag和last-modified,last-modified的设置标准是资源的上次修改时间,而etag是为了应对资源修改时间可能很频繁的情况出现的,是基于资源的内容计算出来的值,因此优先级也较高。
协商缓存与强制缓存的区别在于强制缓存不需要访问服务器,返回结果是200,协商缓存需要访问服务器,如果命中缓存的话,返回结果是304。
2、http跟https的区别
Http是超文本传输协议,数据明文传输,所以会被抓包导致信息泄露,有安全风险问题!Https 则是具有安全性的SSL加密传输协议。Http和Https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。Http的连接很简单,是无状态的。HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议。Https协议需要到CA付费申请证书
3、微任务、宏任务与Event-Loop
JavaScript是一个单线程的脚本语言
微任务:Promise.then catch finally | MutationObserver
宏任务:setInterval、setTimeout
setTimeout(_ => console.log(4))
new Promise(resolve => {
resolve()
console.log(1)
}).then(_ => {
console.log(3)
})
console.log(2)
setTimeout就是作为宏任务来存在的,而Promise.then则是具有代表性的微任务,上述代码的执行顺序就是按照序号来输出的。
也就是说new Promise在实例化的过程中所执行的代码都是同步进行的,而then中注册的回调才是异步执行的。
在同步代码执行完成后才回去检查是否有异步任务完成,并执行对应的回调,而微任务又会在宏任务之前执行。
所以就得到了上述的输出结论1、2、3、4
4、事件冒泡、事件委托机制
事件冒泡
微软提出了名为事件冒泡(event bubbling)的事件流。事件冒泡可以形象地比喻为把一颗石头投入水中,泡泡会一直从水底冒出水面。也就是说,事件会从最内层的元素开始发生,一直向上传播,直到document对象。
因此上面的例子在事件冒泡的概念下发生click事件的顺序应该是****
p -> div -> body -> html -> document
事件捕获
网景提出另一种事件流名为事件捕获(event capturing)。与事件冒泡相反,事件会从最外层开始发生,直到最具体的元素。
上面的例子在事件捕获的概念下发生click事件的顺序应该是****
document -> html -> body -> div -> p
5、闭包是什么?怎么理解? 闭包就是能够读取其他函数内部变量的函数 比较好的一篇文章
let version = ''
return function () {
if (!version) {
version = native.getVersionSync() || ''
}
return version
}
})()
6、BFC是什么?能解决什么问题?
BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。
7、性能调优经验