【前端刷题笔记01】 - 字节跳动2019春招面试题

一、sleep函数该如何实现的

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

ES6方案:javascript

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

ES5死循环阻塞:java

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

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

test2();

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

  • 1** 信息状态码服务器

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

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

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

    • 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协议版本

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

HTTP1代理

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

HTTP2code

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

如何实现长链接?blog

  • WebSocket

clipboard.png