31

1、sleep函数该如何实现的

sleep函数,将程序执行挂起一段时间,阻塞程序的运行

ES6方案:

function sleep(ms) {
  return new Promise(resolve => setTimeout(resolve, ms));
}
async function test() {
  console.log("Hello");
  await sleep(1000);
  console.log("World");
}
test();

ES5死循环阻塞:

function sleep(ms) {
  ms += new Date().getTime();
  while (new Date().getTime() < ms) {}
}

function test2() {
  console.log("Hello");
  sleep(1000);
  console.log("World");
}

test2();

2、HTTP状态码302和304的区别

  • 1** 信息状态码

    • 100 继续
    • 101 切换协议
  • 2** 成功状态码

    • 200 OK 请求成功
    • 201 已创建
    • 202 已接受
    • 203 非授权信息
    • 204 无内容
    • 205 重置内容
    • 206 部分内容
  • 3** 重定向

    • 300 多种选择
    • 301 Moved Permanently 永久重定向
    • 302 Found 临时重定向
    • 303 查看其它地址
    • 304 Not Modified 未修改
    • 305 使用代理
  • 4** 客户端错误

    • 400 Bad Request 请求的语法错误
    • 401 Unauthorized 要求身份验证
    • 403 Forbidden 服务器拒绝执行该请求
    • 404 Not Found 未找到资源
  • 5** 服务器错误

    • 500 Internal Server Error 服务器内部错误
    • 501 服务器不支持该功能,无法完成请求
    • 502 Bad Gateway 服务器作为网关服务器执行请求时,从远程服务器接收到了无效的响应
    • 503 Service Unavailable 系统维护
    • 504 Gateway Time-out 超时
    • 505 HTTP Version not supported 服务器不支持请求的HTTP协议版本

3、多路复用和长连接是什么意思,区别,以及如何设置长连接

HTTP1

  • 长连接
  • 若干个请求排队串行化单线程处理,后面的请求等待前面请求的返回才能获得执行机会,一旦有某请求超时等,后续请求只能被阻塞,毫无办法,也就是人们常说的线头阻塞

HTTP2

  • 多路复用
  • 多个请求可同时在一个连接上并行执行。某个请求任务耗时严重,不会影响到其它连接的正常执行

如何实现长连接?

  • WebSocket

clipboard.png


云中的猫
769 声望56 粉丝

生活是一个BUG。