作者: eastbaby | 来源:发表于2017-11-13 08:11 被阅读7次

    一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?

    分为4个步骤:

    (1),当发送一个URL请求时,不管这个URL是Web页面的URL还是Web页面上每个资源的URL,浏览器都会开启一个线程来处理这个请求,同时在远程DNS服务器上启动一个DNS查询。这能使浏览器获得请求对应的IP地址。
    (2), 浏览器与远程Web服务器通过TCP三次握手协商来建立一个TCP/IP连接。该握手包括一个同步报文,一个同步-应答报文和一个应答报文,这三个报文在 浏览器和服务器之间传递。该握手首先由客户端尝试建立起通信,而后服务器应答并接受客户端的请求,最后由客户端发出该请求已经被接受的报文。
    (3),一旦TCP/IP连接建立,浏览器会通过该连接向远程服务器发送HTTPGET请求。远程服务器找到资源并使用HTTP响应返回该资源,值为200的HTTP响应状态表示一个正确的响应。
    (4),此时,Web服务器提供资源服务,客户端开始下载资源。
    请求返回后,便进入了我们关注的前端模块

    简单来说,浏览器会解析HTML生成DOM Tree,其次会根据CSS生成CSS Rule Tree,而javascript又可以根据DOM API操作DOM

    如何解决跨域问题

    1. JSONP

    json+padding(内填充),顾名思义,就是把JSON(服务器给的参数)填充到一个盒子(callback)里。
    由于同源策略的限制,XmlHttpRequest只允许请求当前源(域名、协议、端口)的资源,所以为了跨域,原理:动态插入script标签,通过script标签引入一个js文件,这个js文件载入成功后会执行我们在url参数中指定的函数,并且会把我们需要的json数据作为参数传入。
    优点是兼容性好,简单易用,支持浏览器与服务器双向通信。缺点是只支持GET请求。

    1. CORS

    Cross-origin resource sharing。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
    浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
    第一类服务器响应允许Access-Control-Allow-Origin;第二类在发送AJAX请求之前,浏览器会先发送一个OPTIONS请求(称为preflighted请求)到这个URL上,询问目标服务器是否接受,浏览器确认服务器响应的Access-Control-Allow-Methods。

    XML和JSON的区别

    (1).数据体积方面。

    JSON相对于XML来讲,数据的体积小,传递的速度更快些。

    (2).数据交互方面。

    JSON与JavaScript的交互更加方便,更容易解析处理,更好的数据交互。

    (3).数据描述方面。

    JSON对数据的描述性比XML较差。

    (4).传输速度方面。

    JSON的速度要远远快于XML。

    谈谈你对webpack的看法

    WebPack 是一个模块打包工具,你可以使用WebPack管理你的模块依赖,并编绎输出模块们所需的静态文件。它能够很好地管理、打包Web开发中所用到的HTML、JavaScript、CSS以及各种静态文件(图片、字体等),让开发过程更加高效。对于不同类型的资源,webpack有对应的模块加载器。webpack模块打包器会分析模块间的依赖关系,最后 生成了优化且合并后的静态资源。

    对 CommonJS 、 AMD 、ES6的语法做了兼容/对js、css、图片等资源文件都支持打包/支持 SourceUrls 和 SourceMaps,易于调试

    说说TCP传输的三次握手四次挥手策略

    1. 三次握手

    发送端首先发送一个带SYN标志的数据包给对方。接收端收到后,回传一个带有SYN/ACK标志的数据包以示传达确认信息。
    最后,发送端再回传一个带ACK标志的数据包,代表“握手”结束。
    若在握手过程中某个阶段莫名中断,TCP协议会再次以相同的顺序发送相同的数据包。
    建立连接的最重要目是让连接的双方交换初始序号(ISN, Initial Sequence Number)。

    1. 四次挥手

    第一次挥手:主动关闭方发送一个FIN,用来关闭数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fIN包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可以接受数据。
    第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1。
    第三次第四次交换双方位置。

    如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。

    屏幕快照 2017-11-05 下午1.58.31.png 屏幕快照 2017-11-05 下午1.58.36.png 屏幕快照 2017-11-05 下午2.05.27.png

    TCP和UDP的区别

    TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来

    UDP(User Data Protocol,用户数据报协议)面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去! UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境如直播。

    创建ajax过程

    (1)创建XMLHttpRequest对象,也就是创建一个异步调用对象.

    (2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息.

    (3)设置响应HTTP请求状态变化的函数.

    (4)发送HTTP请求.

    (5)获取异步调用返回的数据.

    (6)使用JavaScript和DOM实现局部刷新

    HTTP和HTTPS

    HTTP协议通常承载于TCP协议之上,在HTTP和TCP之间添加一个安全协议层(SSL或TSL),这个时候,就成了我们常说的HTTPS。

    默认HTTP的端口号为80,HTTPS的端口号为443。

    Javascript垃圾回收方法

    标记清除(mark and sweep)/ 引用计数(reference counting)

    1. 标记清除。/最常见的方法/ 当变量进入执行环境的时候,比如函数中声明一个变量,垃圾回收器将其标记为“进入环境”,当变量离开环境的时候(函数执行结束)将其标记为“离开环境”。
      在运行的时候给存储在内存中的所有变量加上标记,然后去掉环境中的变量以及被环境中变量所引用的变量(闭包),在这些完成之后仍存在标记的就是要删除的变量了

    2. 引用计数。当声明了一个 变量并将一个引用类型赋值给该变量的时候这个值的引用次数就加1,如果该变量的值变成了另外一个,则这个值得引用次数减1,垃圾回收器会在运行的时候清理掉引用次数为0的值占用的空间。

    在IE中虽然JavaScript对象通过标记清除的方式进行垃圾回收,但BOM与DOM对象却是通过引用计数回收垃圾的,
    也就是说只要涉及BOM及DOM就会出现循环引用问题。

    谈谈性能优化问题

    代码层面:避免使用css表达式,避免使用高级选择器,通配选择器。减少css文件数量, 压缩css代码。避免reload的方法(减少DOM操作,不要一行行改变style等)。

    缓存利用:缓存Ajax,使用CDN,使用外部js和css文件以便缓存,添加Expires头,服务端配置Etag,减少DNS查找等

    请求数量:合并样式和脚本,使用css图片精灵,初始首屏之外的图片资源按需加载,静态资源延迟加载。

    请求带宽:压缩文件,开启GZIP

    图片预加载,将样式表放在顶部,将脚本放在底部 加上时间戳

    Doctype作用? 严格模式与混杂模式如何区分?它们有何意义?

    1)、<!DOCTYPE> 声明位于文档中的最前面,处于 <html> 标签之前。告知浏览器以何种模式来渲染文档。

    2)、严格模式的排版和 JS 运作模式是 以该浏览器支持的最高标准运行。

    3)、在混杂模式中,页面以宽松的向后兼容的方式显示。模拟老式浏览器的行为以防止站点无法工作。

    4)、DOCTYPE不存在或格式不正确会导致文档以混杂模式呈现。

    你知道多少种Doctype文档类型?

    该标签可声明三种 DTD 类型,分别表示严格版本、过渡版本以及基于框架的 HTML 文档。

    HTML 4.01 规定了三种文档类型:Strict、Transitional 以及 Frameset。

    XHTML 1.0 规定了三种 XML 文档类型:Strict、Transitional 以及 Frameset。

    Standards (标准)模式(也就是严格呈现模式)用于呈现遵循最新标准的网页,而 Quirks

    (包容)模式(也就是松散呈现模式或者兼容模式)用于呈现为传统浏览器而设计的网页。

    HTML与XHTML——二者有什么区别

    1.所有的标记都必须要有一个相应的结束标记

    2.所有标签的元素和属性的名字都必须使用小写

    3.所有的XML标记都必须合理嵌套

    4.所有的属性必须用引号""括起来

    5.把所有<和&特殊符号用编码表示

    6.给所有属性赋一个值

    7.不要在注释内容中使“--”

    8.图片必须有说明文字

    浏览器的渲染原理

    https://coolshell.cn/articles/9666.html

    GET和POST的区别,何时使用POST?

    GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符; POST:一般用于修改服务器上的资源,对所发送的信息没有限制。
    

    Get是通过地址栏来传值,而Post是通过提交表单来传值。

    在以下情况中,请使用 POST 请求:无法使用缓存文件(更新服务器上的文件或数据库);向服务器发送大量数据(POST 没有数据量限制);发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠

    相关文章

      网友评论

          本文标题:

          本文链接:https://www.haomeiwen.com/subject/zgbcmxtx.html