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