JS核心面试题(obsoleted)

566 阅读4分钟

@HTTP协议相关

URL回车后发生什么?

  • URL解析: 协议段 + 域名/IP段 + 端口段(HTTP协议默认端口80/HTTPS协议默认端口443)+ 路径段 + 查询参数段 + 哈希段;浏览器执行URL解析;
  • DNS查询:域名映射为IP+端口;IP=宇宙中的唯一主机(host);端口=该主机上的唯一进程(应用程序);
  • TCP连接:宗旨稳定连接+可靠传输;三次握手实现稳定连接;四次挥手实现可靠传输;稳定连接=服客双方确保彼此能发能收;可靠传输=服客双方确保对方数据发送完毕才能断开连接;三次挥手图形=客户端出发的N字形;四次挥手=客户端出发的V字形+服务端出发的V字形;
  • HTTP请求发送:请求报文的构成=请求行+请求头+空行+请求体;
  • HTTP响应返回:响应报文的构成=状态行+响应头+响应体;
  • TCP连接断开:要经历四次挥手;
  • 浏览器渲染页面:要会画渲染示意图;

简述TCP原理

  • 宗旨稳定连接+可靠传输;
  • 三次握手实现稳定连接;
  • 四次挥手实现可靠传输;
  • 稳定连接=服客双方确保彼此能发能收;
  • 可靠传输=服客双方确保对方数据发送完毕才能断开连接;
  • 三次挥手图形=客户端出发的N字形;
  • 四次挥手=客户端出发的V字形+服务端出发的V字形;
  • PS:一蹴而就原则:三次握手和四次挥手都必须一次性完成,否则作废重来;
  • PS:UDP=没有握手加挥手=连接+收发+断开=注重性能;
  • PS:TCP/UDP工作在OSI七层网络模型的传输层;
  • PS:OSI七层网络模型=物数网(IP)传(TCP/UDP)会表应(HTTP/FTP/SMTP)

GET请求与POST请求异同

  • 数据携带方式:GET只能是查询参数;POST/PUT/PATCH还可以请求体携带数据;
  • 数据量:查询参数K级别;请求体携带数据量理论上无限;
  • 安全性:查询参数(完全暴露)不能携带敏感数据;请求体中的数据相对安全;
  • 安全性:HTTPS协议接近绝对安全;HTTPS协议的通信数据全部使用加密;
  • PS: HTTPS协议使用非对称加密; 服务器持有公钥(网站证书),客户端给服务器发送的数据使用该公钥加密;服务端用自己配对的私钥解密;

HTTP常见的状态码有哪些?

  • 100+=请求继续;

什么是事件委托

  • 概念:子元素委托事件给父元素去处理;
  • 好处:节约内存+方便管理+防内存泄漏;
  • 节约内存:事件监听器的数量少;
  • 方便管理:无需考虑子元素动态增减时事件监听器的动态增减问题;
  • 防内存泄露:子元素被删除时无需删除其对应的事件监听器;
  • PS:追问=哪些情形会造成内存泄露?

ES6有哪些新特性?

变量层面:

  • let:var弊病=变量提升+重复声明+作用域穿透;
  • const:通常将不希望修改地址的对象声明为常量;

数据结构层面

  • 数组:解构+展开;
  • 对象:解构+展开+简写;
  • 字符串:模板字符串;
  • Map:方便增删改产的键值对存储器;
  • Set: 有序且不重复的元素集;

函数层面

  • 箭头函数:this从父级作用域继承;
  • PS:this的可能情形;

类层面

  • class系列语法:class(构造函数+原型属性) + constructor(构造函数) + static静态成员 + super调用父类方法;super(name)调用父类构造器; super.xxx()调用父类实例方法;

请说出10个请求头

请说出10个响应头

@JS基础

什么是深拷贝/浅拷贝

什么是值传递/引用传递

this的所有可能情形

  • 普通函数的this就是调用者;(显式主语+无主语时为window+DOM事件监听器的主语恒为事件源e.currentTarget)
  • 箭头函数的this从父级作用域继承;
  • 普通函数可以通过 fn.call/apply/bind 绑定this
  • 构造器里的this为正在构建的实例
  • 实例方法中的this为当前实例
  • 静态方法中的this为当前类

谈谈对事件传播/派发机制的理解

画出浏览器渲染示意图

内存泄露的可能情形有哪些?

  • 用完的事件监听器:DOM元素删除时忘记删除其事件监听器;
  • 用完的事件监听器:离开页面时没有释放各种事件监听器;(div.onclick=null,div.removeEventListener...)
  • 用完的定时器:定时器用完没有clear;
  • 用完的全局变量:用完没释放的全局变量(obj=null)
  • 用完的闭包:用完未释放的闭包(innerFn = null)
  • 总结:【用毕未释放】的【事件监听器】+【定时器】+【全局变量】+【闭包】;

谈谈对闭包的理解