1.WEB应用从服务器主动推送Data到客户端有那些方式?

Javascript数据推送

§ Commet:基于HTTP长连接的服务器推送技术

§ 基于WebSocket的推送方案

§ SSE(Server-Send Event):服务器推送数据新方式


    2.对前端界面工程师这个职位是怎么样理解的?它的前景会怎么样?

    前端是最贴近用户的程序员,比后端、数据库、产品经理、运营、安全都近。
        1、实现界面交互
        2、提升用户体验
        3、有了Node.js,前端可以实现服务端的一些事情
    前端是最贴近用户的程序员,前端的能力就是能让产品从 90分进化到 100 分,甚至更好,
     参与项目,快速高质量完成实现效果图,精确到1px;
     与团队成员,UI设计,产品经理的沟通;
     做好的页面结构,页面重构和用户体验;
     处理hack,兼容、写出优美的代码格式;
     针对服务器的优化、拥抱最新前端技术。


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

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


        4.avascript对象的几种创建方式

        1,工厂模式
        2,构造函数模式
        3,原型模式
        4,混合构造函数和原型模式
        5,动态原型模式
        6,寄生构造函数模式
        7,稳妥构造函数模式


          5.创建ajax的过程

          (1)创建`XMLHttpRequest`对象,也就是创建一个异步调用对象.
          
              (2)创建一个新的`HTTP`请求,并指定该`HTTP`请求的方法、`URL`及验证信息.
          
              (3)设置响应`HTTP`请求状态变化的函数.
          
              (4)发送`HTTP`请求.
          
              (5)获取异步调用返回的数据.
          
              (6)使用JavaScript和DOM实现局部刷新.
          
              var xmlHttp = new XMLHttpRequest();
          
           
          
              xmlHttp.open('GET','demo.php','true');
          
              xmlHttp.send()
          
             xmlHttp.onreadystatechange = function(){
          
                  if(xmlHttp.readyState === 4 & xmlHttp.status=== 200){
          
                  }
          
              }


            6.异步加载和延迟加载

            1.异步加载的方案: 动态插入script标签
            2.通过ajax去获取js代码,然后通过eval执行
            3.script标签上添加defer或者async属性
            4.创建并插入iframe,让它异步执行js
            5.延迟加载:有些 js 代码并不是页面初始化的时候就立刻需要的,而稍后的某些情况才需要的。


              7.请解释一下 JavaScript 的同源策略。

              概念:同源策略是客户端脚本(尤其是Javascript)的重要的安全度量标准。它最早出自Netscape Navigator2.0,其目的是防止某个文档或脚本从多个不同源装载。
              这里的同源策略指的是:协议,域名,端口相同,同源策略是一种安全协议。
              指一段脚本只能读取来自同一来源的窗口和文档的属性。


                8.为什么要有同源限制?

                我们举例说明:比如一个黑客程序,他利用Iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名,密码就轻松到手了。
                缺点:
                现在网站的JS 都会进行压缩,一些文件用了严格模式,而另一些没有。这时这些本来是严格模式的文件,被 merge 后,这个串就到了文件的中间,不仅没有指示严格模式,反而在压缩后浪费了字节。


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

                  GET:一般用于信息获取,使用URL传递参数,对所发送信息的数量也有限制,一般在2000个字符
                      POST:一般用于修改服务器上的资源,对所发送的信息没有限制。
                      GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值,
                      也就是说Get是通过地址栏来传值,而Post是通过提交表单来传值。
                  然而,在以下情况中,请使用 POST 请求:
                  无法使用缓存文件(更新服务器上的文件或数据库)
                  向服务器发送大量数据(POST 没有数据量限制)
                  发送包含未知字符的用户输入时,POST 比 GET 更稳定也更可靠


                    10.谈谈你对重构的理解

                    网站重构:在不改变外部行为的前提下,简化结构、添加可读性,而在网站前端保持一致的行为。也就是说是在不改变UI的情况下,对网站进行优化, 
                    在扩展的同时保持一致的UI。
                    
                    对于传统的网站来说重构通常是:
                    
                    表格(table)布局改为DIV+CSS
                    
                    使网站前端兼容于现代浏览器(针对于不合规范的CSS、如对IE6有效的)
                    
                    对于移动平台的优化
                    
                    针对于SEO进行优化
                    
                    深层次的网站重构应该考虑的方面
                    
                    减少代码间的耦合
                    
                    让代码保持弹性
                    
                    严格按规范编写代码
                    
                    设计可扩展的API
                    
                    代替旧有的框架、语言(如VB)
                    
                    增强用户体验
                    
                    通常来说对于速度的优化也包含在重构中
                    
                    压缩JS、CSS、image等前端资源(通常是由服务器来解决)
                    
                    程序的性能优化(如数据读写)
                    
                    采用CDN来加速资源加载
                    
                    对于JS DOM的优化
                    
                    HTTP服务器的文件缓存