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