1.TCP(Transmission Control Protocol)

TCP传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。通讯双方建立一次tcp连接,需要经过三次步骤1、客户端发送syn包(syn=j)到服务器,并入SYN_SEND状态,等待服务器确认。2、服务器收入syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),既SYN+ACK包,此时服务器进入SYN_RECV状态。3、客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。(tcp在握手过程中并不携带数据,而是在三次握手完成之后才会进行数据传送)

SYN:synchronous 建立联机

ACK:acknowledgement 确认

SYN_SENT 请求连接

SYN_RECV 服务端被动打开后,接收到了客户端的SYN并且发送了ACK时的状态,再进一步接收到客户端的ACK就进入ESTABISHED状态。

UDP(User Datagram Protocol )用户数据报协议

UDP是非面向连接协议,使用udp协议通讯并不需要建立连接,它只负责把数据尽可能发送出去,并不可靠,在接收端,UDP把每个消息断放入队列中,接收端程序从队列中读取数据。
TCP/IP是位于传输层上的一种协议,用于在网络中传输数据;


    2.socket(嵌套字)

    socket是一组实现TCP/UDP通信的接口API,既无论TCP还是UDP,通过对scoket的编程,都可以实现TCP/UCP通信。(TCP或UDP是一种计算机网络通信中在传输层的一种协议,可以简单的理解成是一种约定,只有履行合同才是实质性的行动,所以无论是TCP还是UDP要产生作用,都需要有实际性的行为去执行才能体现协议的作用。socket就是实现这种作用的方法)socket作为一个通信链的句柄,它包含了网络通信必备的5种信息。1、连接使用的协议。2、本地主机的IP地址。3、本地进程的协议端口。4、远地主机的IP地址。5、远地进程的协议端口。即可知道,socket包含了通信本方和对方的ip和端口以及连接使用的协议(TCP/UDP)。通信双方中的一方(客户端)通过socket对另一方(服务端)发起连接请求,服务端在网络上监听请求,当收到客户端发来的请求之后,根据socket里携带的信息,定位到客户端,就相应请求,把socket描述发给客户端,双方确认之后连接就建立了。
    
    socket连接过程的三个步骤
    
    1、服务器监听:服务器实时监控网络状态等待客户端发来的连接请求
    
    2、客户端请求:客户端根据远程主机服务器的IP地址和协议端口向其发起连接请求
    
    3、连接确认:服务端收到socket的连接请求之后,就响应请求,把服务端socket描述发给客户端,客户端收到后一但确认。则双方建立连接,进行数据交互。
    
    socket连接一旦建立就保持连接状态,而HTTP连接则不一样,它基于tcp协议的短连接,也就是客户端发起请求,服务器响应请求之后,连接就会自动断开,不会一直保持。


      3.URL(Uniform Resource Locator)

      URL是因特网上标准的资源地址
      
      URL标准格式:协议类型:[//服务器地址[:端口号]][/资源层级UNIX文件路径]文件名?查询
      
      URL的语法规则:scheme://host/domain:port/path/filename  (1、scheme:定义因特网服务的类型,最常见的有http。2、host:定义域主机(http默认主机是www)。3、domain:定义因特网域名,比如“www.baidu.com”。4、path:定义服务器上的路径。5、filename:资源名)
      
      scheme类型
      
      1、http 超文本传输协议:以http://开头的不同网页,不加密
      
      2、https 安全超文本传输协议。安全网页,加密所有信息交换
      
      3、ftp 文件传输协议 用于将文件下载或上传
      
      4、file 本地文件
      
      HTTP协议是应用层协议,基于TCP协议,用于包装数据,程序使用它进行通信,可以简单高效的处理通信中数据的传输和识别处理


        4.DNS(Domain Name Server)

        DNS是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名。
        
        在浏览器输入域名后的解析过程
        
        浏览器根据地址去本身缓存中查找dns解析记录,如果有,则直接返回IP地址,否则浏览器会查找操作系统中(hosts文件)是否有该域名的dns解析记录,如果有则返回。
        
        如果浏览器缓存和操作系统hosts中均无该域名的dns解析记录,或者已经过期,此时就会向域名服务器发起请求来解析这个域名。
        
        请求会先到LDNS(本地域名服务器),让它来尝试解析这个域名,如果LDNS也解析不了,则直接到根域名解析器请求解析
        
        根域名服务器给LDNS返回一个所查询余的主域名服务器(gTLDServer)地址。
        
        此时LDNS再向上一步返回的gTLD服务器发起解析请求。
        
        gTLD服务器接收到解析请求后查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server通常就是你注册的域名服务器(比如阿里dns、腾讯dns等)
        
        Name Server域名服务器会查询存储的域名和IP的映射关系表,正常情况下都根据域名得到目标IP记录,连同一个TTL值返回给DNS Server域名服务器
        
        返回该域名对应的IP和TTL值,Local DNS Server会缓存这个域名和IP的对应关系,缓存的时间有TTL值控制。
        
        把解析的结果返回给用户,用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。


          5.HTTP请求发起和响应

          在一个web程序开发中,一般都有前端和后端之分,前端负责向后端请求数据和展示页面,后端负责接收请求和做出响应发回给前端,他们之间的协作桥梁是API,而API其实就是一个URL,作为HTTP连接的一种具体载体。
          
          用户输入URL到浏览器显现给用户页面经过了什么过程
          
          用户输入URL,浏览器获取到URL
          
          浏览器(应用层)进行DNS解析(直接输入IP地址既跳过该步骤)
          
          根据解析出的IP地址+端口,浏览器(应用层)发起HTTP请求,请求中携带(请求头header(也可细分为请求行和请求头)、请求体body)
          
          请求到达传输层,tcp协议为传输报文提供可靠的字节流传输服务,它通过三次握手等手段来保证传输过程中的安全可靠。通过对大块数据的分割成一个个报文段的方式提供给大量数据的便携传输。
          
          到网络层, 网络层通过ARP寻址得到接收方的Mac地址,IP协议把在传输层被分割成一个个数据包传送接收方。
          
          数据到达数据链路层,请求阶段完成
          
          接收方在数据链路层收到数据包之后,层层传递到应用层,接收方应用程序就获得到请求报文。
          
          接收方收到发送方的HTTP请求之后,进行请求文件资源(如HTML页面)的寻找并响应报文
          
          发送方收到响应报文后,如果报文中的状态码表示请求成功,则接受返回的资源(如HTML文件),进行页面渲染。
          
          (header:1、请求的方法(get、post、put..)2、协议(http、https、ftp、sftp…)3目标url(具体的请求路径已经文件名)4一些必要信息(缓存、cookie之类)。)
          
          (body包含请求的内容)


            6.页面渲染过程

            内容解释
            
            HTML parser:HTML解析器,其本质是将HTML文本解释成DOM tree。
            
            CSS  parser:CSS解析器,其本质是讲DOM中各元素对象加入样式信息
            
            JavaScript引擎:专门处理JavaScript脚本的虚拟机,其本质是解析JS代码并且把逻辑(HTML和CSS的操作)应用到布局中,从而按程序要的要求呈现相应的结果
            
            DOM tree:文档对象模型树,也就是浏览器通过HTMLparser解析HTML页面生成的HTML树状结构以及相应的接口。
            
            render tree:渲染树,也就是浏览器引擎通过DOM Tree和CSS Rule Tree构建出来的一个树状结构,和dom tree不一样的是,它只有要最终呈现出来的内容,像或者带有display:none的节点是不存在render tree中的。
            
            layout:也叫reflow 重排,渲染中的一种行为。当rendertree中任一节点的几何尺寸发生改变了,render tree都会重新布局。
            
            repaint:重绘,渲染中的一种行为。render tree中任一元素样式属性(几何尺寸没改变)发生改变了,render tree都会重新画,比如字体颜色、背景等变化。


              7.href与src

              href (Hypertext Reference)指定网络资源的位置,从而在当前元素或者当前文档和由当前属性定义的需要的锚点或资源之间定义一个链接或者关系。(目的不是为了引用资源,而是为了建立联系,让当前标签能够链接到目标地址。)
              
              src source(缩写),指向外部资源的位置,指向的内容将会应用到文档中当前标签所在位置。
              
              href与src的区别
              
              1、请求资源类型不同:href 指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的联系。在请求 src 资源时会将其指向的资源下载并应用到文档中,比如 JavaScript 脚本,img 图片;
              
              2、作用结果不同:href 用于在当前文档和引用资源之间确立联系;src 用于替换当前内容;
              
              3、浏览器解析方式不同:当浏览器解析到src ,会暂停其他资源的下载和处理,直到将该资源加载、编译、执行完毕,图片和框架等也如此,类似于将所指向资源应用到当前内容。这也是为什么建议把 js 脚本放在底部而不是头部的原因。


                8.link和@import的区别

                两者都是外部引用 CSS 的方式,但是存在一定的区别:
                
                (1)link是XHTML标签,除了能够加载CSS,还可以定义RSS等其他事务;而@import属于CSS范畴,只可以加载CSS。
                
                (2)link引用CSS时,在页面载入时同时加载;@import需要页面完全载入以后再加载。
                
                (3)link是XHTML标签,无兼容问题;@import则是在CSS2.1提出的,低版本的浏览器不支持。
                
                (4)link支持使用Javascript控制DOM改变样式;而@import不支持。


                  9.iframe有那些缺点?

                  iframe会阻塞主页面的Onload事件;
                  搜索引擎的检索程序无法解读这种页面,不利于SEO;
                  iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。
                  使用iframe之前需要考虑这两个缺点。如果需要使用iframe,最好是通过javascript动态给iframe添加src属性值,这样可以绕开以上两个问题


                    10.如何实现浏览器内多个标签页之间的通信? (阿里)

                    WebSocket、SharedWorker;
                    也可以调用localstorge、cookies等本地存储方式;
                    
                    localstorge另一个浏览上下文里被添加、修改或删除时,它都会触发一个事件,
                    我们通过监听事件,控制它的值来进行页面信息通信;
                    注意quirks:Safari 在无痕模式下设置localstorge值时会抛出 QuotaExceededError 的异常


                      11.HTML5的离线储存怎么使用,工作原理能不能解释一下?


                        12.CSS选择符有哪些?哪些属性可以继承?

                        1.id选择器( # myid)
                            2.类选择器(.myclassname)
                            3.标签选择器(div, h1, p)
                            4.相邻选择器(h1 + p)
                            5.子选择器(ul > li)
                            6.后代选择器(li a)
                            7.通配符选择器( * )
                            8.属性选择器(a[rel = "external"])
                            9.伪类选择器(a:hover, li:nth-child)
                        
                        *   可继承的样式: font-size font-family color, UL LI DL DD DT;
                        
                        *   不可继承的样式:border padding margin width height ;


                          13.CSS优先级算法如何计算?

                          优先级就近原则,同权重情况下样式定义最近者为准;
                          *   载入样式以最后载入的定位为准;
                          
                          优先级为:
                              同权重: 内联样式表(标签内部)> 嵌入样式表(当前文件中)> 外部样式表(外部文件中)。
                              !important >  id > class > tag
                              important 比 内联优先级高