美文网首页
阿里前端面试题(2)

阿里前端面试题(2)

作者: 正义国王 | 来源:发表于2020-02-26 20:08 被阅读0次

    0226

    1. 关于Promise的说法, 下述正确的是(不定选型)

    a. Promise.resolve 返回一个 Promise 并把状态置为 fullfilled
    b. Promise.reject 返回一个 Promise 并把状态置为 rejected
    c. Promise.all 中如果当前数组中所有的Promise的状态置为 fullfilled 或 rejected, 自己的状态即置为 fullfilled
    d. Promise.race 中如果当前数组中率先改变状态的 Promise 为 fullfilled, 则自己的状态即置为 fullfilled
    e. Promise.all 中数组项必须为 Promise
    f. Promise.race 中数组项必须为 Promise

    (a,b,d,e,f)

    1. (c)Promise.all 所有状态均为 fullfilled 则结果为 fullfilled , 任意一个状态为rejected 则结果为 rejected。fullilled 的结果会返回一个数组,这个数组中的结果顺序和传入的promise数组的promise顺序一致
    Promise.all([promise1, promise2, promise3])
      .then(res => {
        console.log(res); //['data1', 'data2', 'data3']
      })
      .catch(e => {
        console.log(e);
      });
    

    2.(d)Promise.race 只要有一个Promise对象状态变为解决或拒绝,返回的 promise就会解决或拒绝


    2. 关于浏览器网络知识,以下说法正确的是(不定选型)

    a. JSONP/CORS 支持使用 GET/POST/PUT/DELETE 请求方式实现跨域
    b. 现代浏览器支持使用 Fetch/XMLHttpRequest 两种方式发送 Ajax 请求
    c. HTTP 500 代表用户传入的参数错误,禁止访问
    d. HTTP 协议在OSI七层模型中属于会话层,用于实现两台主机间的通信
    e. WebSocket 有同源限制,因此会有跨域的问题
    f. 使用 Gzip 方式,可以有效压缩响应的体积

    (b,f)

    1. (a)Web页面上调用js文件时则不受跨域的影响(不仅如此,我们还发现凡是拥有”src”这个属性的标签都拥有跨域的能力,比如<\script>、<\img>、<\iframe>),所以JSONP跨域支持的请求只有GET没有POST。CORS支持各种请求

    2. (c)HTTP 500是 服务器内部错误;参数错误应该是 400(Bad Request)

    3. (e)WebSocket 没有同源限制

    4. (f)

    • 客户端请求中增加Accept-Encoding: gzip表示客户端支持gzip;

    • 服务端接收到请求后,将结果通过gzip压缩后返回给客户端并在响应头中增加Content-Encodin:gzip 表示响应数据已被压缩

    • 客户端接收请求,响应头中有Content-Encodin:gzip表示数据需解压处理

    客户端也可以发送压缩数据给服务端,通过代码将请求数据压缩即可,规范起见同样要在请求中加入Content-Encodin:gzip



    3. 编程题:实现一个金额展示格式化的函数 formatAmount,金额展示规则为整数部分每三位用逗号分割,小数部分展示两位。输入数据不是数字时返回 "-"

    举例:
    formatAmount(2688) => "2,688.00"
    formatAmount("2e6") => "2,000,000.00"
    formatAmount(-2.33333333) => "-2.33"
    formatAmount("Alibaba") => "-"

    function formatAmount(num){
      //判断是否是数字
      if(!isNum(num)){
        return '-'
      }
      num = Number(num);
      numStr = String(num);
      [integer,decimals] = numStr.split('.');
    
      //整数部分
      let integerRes = "";
      for(let i=integer.length-1;i>=0;i--){
        if(i%3===0 && i!==integer.length-1 && integer[i]!=='-'){
          integerRes =  integer[i] + ',' + integerRes;
        }
        else{
          integerRes = integer[i] + integerRes;
        }
      }
      //小数部分
      decimals = decimals ? decimals.substring(0,2):"";
      let result = decimals ? integerRes + '.' + decimals : integerRes + '.00';
      return result;
    }
    
    function isNum(num){
      if(!isNaN(num) && typeof num !== "boolean" && num !==""){
        return true;
      }
      return false;
    }
    

    相关文章

      网友评论

          本文标题:阿里前端面试题(2)

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