美文网首页
前端面试题

前端面试题

作者: 风之伤_3eed | 来源:发表于2018-11-24 17:31 被阅读0次

    1.请描述一下 cookies sessionStorage和localstorage区别
    相同点:
    都存储在客户端
    不同点:
    1.存储大小· cookie数据大小不能超过4k。· sessionStorage和localStorage 虽然也有存储大小的限制,但比cookie大得多,可以达到5M或更大。
    2.有效时间· localStorage 存储持久数据,浏览器关闭后数据不丢失除非主动删除数据;· sessionStorage 数据在当前浏览器窗口关闭后自动删除。· cookie 设置的cookie过期时间之前一直有效,即使窗口或浏览器关闭
    3. 数据与服务器之间的交互方式· cookie的数据会自动的传递到服务器,服务器端也可以写cookie到客户端· sessionStorage和localStorage不会自动把数据发给服务器,仅在本地保存。
    2.ajax的步骤什么是ajax?
    ajax(异步javascript xml) 能够刷新局部网页数据而不是重新加载整个网页。
    如何使用ajax?
    第一步,创建xmlhttprequest对象,var xmlhttp =new XMLHttpRequest();XMLHttpRequest对象用来和服务器交换数据。var xhttp;if (window.XMLHttpRequest) {//现代主流浏览器xhttp = new XMLHttpRequest();} else {// 针对浏览器,比如IE5或IE6xhttp = new ActiveXObject("Microsoft.XMLHTTP");}
    第二步,使用xmlhttprequest对象的open()和send()方法发送资源请求给服务器。
    第三步,使用xmlhttprequest对象的responseText或responseXML属性获得服务器的响应。
    第四步,onreadystatechange函数,当发送请求到服务器,我们想要服务器响应执行一些功能就需要使用onreadystatechange函数,每次xmlhttprequest对象的readyState发生改变都会触发onreadystatechange函数

    1. react和vue有哪些不同,说说你对这两个框架的看法
      相同点· 都支持服务器端渲染· 都有Virtual DOM,组件化开发,通过props参数进行父子组件数据的传递,都实现webComponent规范· 数据驱动视图· 都有支持native的方案,React的React native,Vue的weex
      不同点· React严格上只针对MVC的view层,Vue则是MVVM模式· virtual DOM不一样,vue会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树.而对于React而言,每当应用的状态被改变时,全部组件都会重新渲染,所以react中会需要shouldComponentUpdate这个生命周期函数方法来进行控制· 组件写法不一样, React推荐的做法是 JSX + inline style, 也就是把HTML和CSS全都写进JavaScript了,即'all in js'; Vue推荐的做法是webpack+vue-loader的单文件组件格式,即html,css,jd写在同一个文件;· 数据绑定: vue实现了数据的双向绑定,react数据流动是单向的· state对象在react应用中不可变的,需要使用setState方法更新状态;在vue中,state对象不是必须的,数据由data属性在vue对象中管理
      4.什么是mvvm mvc是什么区别 原理
      一、MVC(Model-View-Controller)MVC是比较直观的架构模式,用户操作->View(负责接收用户的输入操作)->Controller(业务逻辑处理)->Model(数据持久化)->View(将结果反馈给View)。MVC使用非常广泛,比如JavaEE中的SSH框架
      二、MVVM(Model-View-ViewModel)如果说MVP是对MVC的进一步改进,那么MVVM则是思想的完全变革。它是将“数据模型数据双向绑定”的思想作为核心,因此在View和Model之间没有联系,通过ViewModel进行交互,而且Model和ViewModel之间的交互是双向的,因此视图的数据的变化会同时修改数据源,而数据源数据的变化也会立即反应view。
      5.什么是闭包,如何使用它,为什么要使用它?
      闭包就是能够读取其他函数内部变量的函数。
      由于在Javascript语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成“定义在一个函数内部的函数”。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。闭包可以用在许多地方。
      它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
      使用闭包的注意点:· 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。· 闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
    2. 什么是跨域?跨域请求资源的方法有哪些?
      1、什么是跨域?
      由于浏览器同源策略,凡是发送请求url的协议、域名、端口三者之间任意一与当前页面地址不同即为跨域。存在跨域的情况:

    网络协议不同,如http协议访问https协议。

    端口不同,如80端口访问8080端口。

    域名不同,如qianduanblog.com访问baidu.com。

    子域名不同,如abc.qianduanblog.com访问def.qianduanblog.com。

    域名和域名对应ip,如www.a.com访问20.205.28.90.
    2、跨域请求资源的方法:
    (1)、porxy代理
    定义和用法:proxy代理用于将请求发送给后台服务器,通过服务器来发送请求,然后将请求的结果传递给前端。
    实现方法:通过nginx代理;
    注意点:1、如果你代理的是https协议的请求,那么你的proxy首先需要信任该证书(尤其是自定义证书)或者忽略证书检查,否则你的请求无法成功。
    (2)、CORS 【Cross-Origin Resource Sharing】
    定义和用法:是现代浏览器支持跨域资源请求的一种最常用的方式。
    使用方法:一般需要后端人员在处理请求数据的时候,添加允许跨域的相关操作。如下:

    res.writeHead(200, {
    "Content-Type": "text/html; charset=UTF-8",
    "Access-Control-Allow-Origin":'http://localhost',
    'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
    'Access-Control-Allow-Headers': 'X-Requested-With, Content-Type'
    });

    (3)、jsonp
    定义和用法:通过动态插入一个script标签。浏览器对script的资源引用没有同源限制,同时资源加载到页面后会立即执行(没有阻塞的情况下)。
    特点:通过情况下,通过动态创建script来读取他域的动态资源,获取的数据一般为json格式。
    实例如下:

    <script>
    function testjsonp(data) {
    console.log(data.name); // 获取返回的结果
    }
    </script>
    <script>
    var _script = document.createElement('script');
    _script.type = "text/javascript";
    _script.src = "http://localhost:8888/jsonp?callback=testjsonp";
    document.head.appendChild(_script);
    </script>

    缺点:
      1、这种方式无法发送post请求(这里)
      2、另外要确定jsonp的请求是否失败并不容易,大多数框架的实现都是结合超时时间来判定

    相关文章

      网友评论

          本文标题:前端面试题

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