美文网首页
阿里前端面试题(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