一 HTML

    1.html语义化即html具有可读性,更容易读懂,一些特殊的标签例如radio,button,h2,input之类的,即使没有样式,也可以让人一眼看出是做什么的。这也让搜索引擎更容易读懂,有利于爬虫抓取更多信息。

   2.script标签的defer和async属性

    <script></script>  html按顺序解析,遇到此标签时,会先请求标签涉及的脚本资源,并且立即执行,执行完成之后再继续解析接下来的html标签

    <script async></script> html按顺序解析,遇到此标签时,会先异步请求标签涉及的脚本资源,因为是异步的,所以html解析过程是继续进行的,等到异步请求回来之后,会暂停html解析,先立即执行此脚本,执行完成之后再继续解析html。多个script async脚本执行顺序以异步请求先结束的为优先

    <script defer></script> html按顺序解析,遇到此标签时,会先异步请求标签涉及的脚本资源,同时继续解析html,知道html解析完成,才会在最后执行异步请求完成之后的脚本。多个script defer脚本执行顺序以出现的顺序为准

3.从url输入到页面展示发生了什么

 3.1 url分析

 以此连接为例 https://www.baidu.com/baidu?tn=monline_3_dg&ie=utf-8&wd=%E5%8D%9A%E5%AE%A2%E5%9B%AD

  http https是 因特网协议服务类型,常见的有http,https   http与https的区别,https是进行加密的网络传输类型,常用于正式环境,http常用于本地开发环境

  www 主机  http的·默认主机是www

  baidu.com 域名

  此链接无端口号

  baidu  服务器上的文档路径

  tn=monline_3_dg&ie=utf-8&wd=%E5%8D%9A%E5%AE%A2%E5%9B%AD  查询参数

  3.2访问步骤

    DNS域名解析,此链接中,DNS协议通过域名baidu.com找到对应的ip地址,一般是迭代查询

   CDN  content delivery network利用了DNS的负载均衡(重定向)实现原理,这个原理是DNS服务器为同一个主机配置多个IP地址,这样客户端访问时,DNS解析过程就将不同的客户引导导不同ip地址去,这样可以让不同的客户端访问不同的服务器,从而达到负载均衡的目的。

  DNS-prefetch  就是当客户浏览一个网页时,浏览器会在加载网页时对这个网页中的域名进行解析,这样在点击这个网页中的连接时就无需再进行DNS解析,减少用户等待时间。

3.3 OSI参考模型

     1.物理层--2.数据链路层--3.网络层--4.传输层--5.会话层--6.表示层--7.应用层

3.4 TCP/IP四层模型

      物理层和数据链路层组成了TCP/IP低层一层,有以太网  无线lan

      网络层组成了TCP/IP的第二层,有ipv4 ipv6

      传输层组成了TCP/IP的第三层,层有TCP UDP协议

      会话层,表示层,应用层组成了TCP/IP的第四层,这部分有HTTP,HTML,SSL TLS FTP MIME HTML

3.5 TCP的三次握手过程

     第一次握手,客户端---发送SYN=1 Seq=X 到服务端,告知服务器浏览器要发请求了

     第二次握手,服务端返回一个SYN=1 Seq=X  ACK=X=1 告诉客户端,服务端准备好接受请求了,并且确认数据包是不是第一次发送的那样

     第三次握手,客户端回传一个ACK=Y+1 Seq=Z到服务端表示握手结束

 3.6 TCP三次握手结束之后,开始发送HTTP请求报文

 3.7 服务器处理请求并返回http报文

      MVC

      view层发生变化触发controler,并且将变化的数据传给controler

      controler拿到数据变化触发model,并且将变化的数据传给model,

      model将数据存取更新并且触发view视图层更新

     MVVM

     model层数据发生变化自动同步到view层

     view层发生变化自动同步到model层

     Mvc模式和MVVM模式的区别

     1.MVC是单向数据绑定,MVVM是双向数据绑定,且是自动的,减少了dom操作,提升了渲染速度,有更好的用户体验

     2.MVVM view和model完全分离,耦合性低

3.8浏览器解析渲染页面

    浏览器是多进程的,每一个tab页面都是一个新的进程,浏览器也是多线程内核,每一个tab页面进程中都是多线程的,线程包括以下几个分类

     GUI线程

     JS引擎线程

     事件触发线程

     定时器线程

     网络请求线程

     html解析构成dom树--------]

                                                  两个合并变成render tree---layout对render tree进行布局,计算尺寸,位置,像素---绘制render tree

     css解析构成style rules tree---]

      浏览器将html字节类型的内容转化为字符,这些字符会按照html的规范转化为不同的token,每个token都有自己的规则,然后再把这些token转化为node对象。最终由node对象构建成dom

3.9 TCP四次挥手

     浏览器发送fin seq=x+2 ack 告知服务器请求发送完了,没有数据发送了,准备关闭,浏览器进入FIN_WAIT_1状态

     服务器收到后发送ack seq到浏览器,告知同意关闭,浏览器收到后进入FIN_WAIT_2状态

     服务器再次发送报文端fin seq ack  请求关闭连接,服务器进入last-ack状态

     浏览器收到后,向服务器发送seq ack,浏览器进入time_wait状态,服务器收到后关闭连接,浏览器等一段时间未收到回复,正常关闭