阿里前端面试题(2)

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;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 面试题一:https://github.com/jimuyouyou/node-interview-questio...
    R_X阅读 1,638评论 0 5
  • PNG 有PNG8和truecolor PNG PNG8类似GIF颜色上限为256,文件小,支持alpha透明度,...
    hudaren阅读 1,566评论 0 0
  • 特别说明,为便于查阅,文章转自https://github.com/getify/You-Dont-Know-JS...
    杀破狼real阅读 660评论 0 3
  • 本文旨在加深对前端知识点的理解,资料来源于网络,由本人(博客:http://segmentfault.com/u/...
    风起云帆阅读 334评论 0 0
  • 本文中讲述到的面试题: 说说对闭包的认识, 它解决了什么问题?跨域问题有哪些处理方式?for...in 和 for...
    写代码的胖猴子阅读 1,107评论 0 5