浏览器常见面试题

一、缓存机制

1. 概念

3. 强缓存

4. 协商缓存

5. 操作流程

浏览器缓存

二、同源、跨域

  1. 同源:两个页面有相同的协议、域名、端口
  2. 同源策略:是浏览器提供的一个安全策略,他规定了:
  1. 跨域 :浏览器的同源策略不允许非同源的URL之间进行交互

​ 浏览器访问本地服务器,因为是同源的,所以会访问成功,再通过本地服务访问远程服务器,服务器和服务器之间没有跨域问题,一次可以请求成功,接着把请求的数据通过本地服务器,传递给浏览器。

反向代理

//具体配置
vue.config.js

devServer: {
	proxy: {
		'/api': {
			target: '接口url地址'
        }
	}
}

三、常见状态码

状态码

四、进程和线程

进程:是程序的一次是动态执行的过程。

线程:有的进程需要同时处理多个任务,传统的进程只能串行的执行,会导致阻塞的问题,所以需要引入线程,增加它的并发度。

五、地址栏敲回车的时候发生了什么

  1. 先找本机的域名映射,如果有本地 host 那么就走本地的服务。
  2. 如果本地没有,那么就去DNS服务器,根据DNS服务器解析ip地址,如果也没有,那么就404,如果有就找到对应服务器找到对应的资源进行加载。
  3. tcp连接:三次握手
  4. 发起http请求
  5. 响应请求
  6. 页面渲染:敲回车之后打开了一个进程,对应的HTML、CSS利用GUI引擎进行页面的渲染,JS利用V8JS引擎来处理JS。异步或者点击 事件的回调放到事件处理线程中等待JS线程的空闲处理。定时器在触发事件之前,会放到定时器线程中进行处理。
  7. 断开连接:在HTTP1.0中判断是否有 keep-alive
    • 有:只有页面关闭时才会断开,如果进行新的请求则不会断开。
    • 没有:请求完毕之后就会断开连接。
  8. 四次挥手:
    • 客户端发出断开/等待,客户端进程发出连接释放报文。
    • 服务端同意,如果同意断开就发回一个ACK确认字符然后带上一个随机生成的序列号seq=v。此时处于半链接,有可能有数据没发送完,继续发送未发送完的数据。
    • 服务端发送完成/等待状态。
    • 客户端确认收到数据,服务器只要收到客户端发出的确认就进入关闭状态。服务器结束TCP连接的时间要比客户端早
  9. 当敲回车时候会发请求,涉及到了三次握手,四次挥手

六、浏览器渲染原理

  1. 解析HTML生成DOM树 - 渲染引擎首先解析HTML文档,生成DOM树。
  2. 构建Render树 - 接下来不管是内联式,外联式还是嵌入式引入的CSS样式会被解析生成CSSOM树,根据DOM树与CSSOM树生成另外一棵用于渲染的树-渲染树(Render tree)。
  3. 布局Render树 - 然后对渲染树的每个节点进行布局处理,确定其在屏幕上的显示位置。
  4. 绘制Render树 - 最后遍历渲染树将每一个节点绘制出来以上步骤是一个渐进的过程,为了提高用户体验,渲染引擎试图尽可能快的把结果显示给最终用户。它不会等到所有HTML都被解析完才创建并布局渲染树。它会在从网络层获取文档内容的同时把已经接收到的局部内容先展示出来。

七、图片懒加载

八、重绘与回流

1. 重绘

概念:页面中的元素样式发生改变,并没有影响结构,未影响在文档流中的位置,浏览器会对==元素==进行重新绘制。

导致重绘的事件:

2. 回流(重排)

概念:页面中的部分或者全部元素尺寸、结构、或者属性发生变化时,浏览器会重新渲染==部分或者全部文档==。

导致回流的事件:

==注意:== 触发回流的时候,由于浏览器渲染页面基于流失布局,当触发回流时候,会导致周围的DOM元素重新排列:

3. 解决办法