题纲

91 阅读4分钟

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加密传输协议。HttpHttps使用的是完全不同的连接方式用的端口也不一样,前者是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、性能调优经验

题纲