原型和原型链 
javascript是一门通过原型实现继承的语言。原型就是给其他对象提供共有属性的对象。- 每个 
函数都有一个名为prototype的属性,它指向的是一个prototype对象。 - 每个对象都有一个 
[[prototype]]的隐式引用,它指向它的原型对象,并从中继承数据和方法等,而原型对象也是对象,也会有[[prototype]]的隐式引用, 这样一层一层,最终指向null,这种关系就是原型链。 
闭包 
- 什么是 
闭包 
闭包就是能够访问到其他函数内部变量的函数。
闭包的作用
- 隐藏一个变量。
 - 延长变量的生命周期。
 
vue 生命周期 
- 生命周期之间是不会产生阻塞的,比如在 
created钩子函数前添加async,在函数中调用异步请求,在mounted中并不一定能拿到异步请求的结果。 - 可以在 
created钩子中,在异步请求完成后使用this.$emit(xxx),然后在mounted中使用this.$on(xxx)来监听,这样一定能获取到异步请求的结果。 
vite 和 webpack 
vite利用了浏览器的原生ESModlue功能,在浏览器请求相应 URL 时才提供文件,实现了根据路由的懒加载。- 对比于 
webpack的热更新,webpack会把所有改动过的模块的相关依赖全部重新编译一次。 vite的unbundle机制在devServer取得巨大的性能提升,但是首屏和懒加载的性能有所下降。
webpack 的工作流程 
- 从入口文件开始,递归的进行解析依赖的所有模块,每找到一个模块,都会去寻找对应的
loader进行转换,对模块转换完毕之后,再开始解析当前模块所依赖的模块。 - 这些模块会以入口为单位进行分组,一个入口和其所依赖的模块分到一个组(
chunk),最后webpack会将所有的chunk转换成文件进行输出。 webpack会在适当的时机执行plugin中定义的逻辑(事件机制)。
http 状态码 
1xx 请求已被接受,需要继续处理。
2xx 请求已成功被服务器接收。
- 200:请求已经成功,请求所希望的响应头或数据体将随此响应返回。
 - 201:请求成功并且服务器创建了新的资源。
 - 202:请求以接受,但是尚未处理。
 - 204:请求已经成功,但是没有内容。
 
3xx 代表客户端采取进一步的操作才能完成请求,这些状态码用来重定向,后续的请求地址在本次响应的 Location 域中指明。
- 301:永久重定向。
 - 302:临时重定向。
 - 304:自从上次请求后,请求的网页未被修改过。
 
4xx 表示请求错误,代表客户端可能发生了错误。
- 401:请求要求身份验证。
 - 403:服务器已经理解请求,但是拒绝执行它。与 
401响应不同的是,身份验证并不能提供任务帮助。 - 404:未找到资源。
 
5xx 表示服务器在处理请求的过程中有错误或发生了异常状态。
- 500:服务器遇到了一个未曾预料的状况,导致它无法完成对请求的处理。
 - 503:临时的服务器维护或者过载,服务器当前无法完成对请求的处理。
 
图形渲染管线 
将一堆具有三维信息的数据点最终转换到二位屏幕空间的像素。
- 顶点处理 将所有的顶点数据进行 
Model,View,Projection的变换(MVP变换),最终得到二维平面的坐标信息(使用ZBuffer保留深度 z 值)。 - 三角形处理 将所有的顶点,按照原几何信息,变成三角面,每个面由三个顶点组成,这样就得到了许许多多的三角形。
 - 光栅化 把顶点数据转换为片元的过程,确定哪些像素在三角形内。
 - 片元处理 确定每个像素点或者片元的颜色。(需要顶点的信息,对三角形内的点进行属性插值)(使用 
ZBuffer确定哪些像素点应该显示在屏幕上,哪些点被遮挡) FrameBuffer的处理 将所有的像素颜色信息整合到一起,输送给显示设备加以显示
Map 
js
const map1 = new Map();
const map2 = new Map([
  ["key", "value"],
  ["key2", "value2"],
]);
map1.set("key", "value");
map1.get("key");
map1.delete("key");
map1.clear();- 与 
Object只能使用数值,字符串不同,Map能够使用任何 JS 的数据类型作为键。 Map实例会维护键值对的插入顺序。Map实例可以提供一个迭代器(Iterator),可以通过entries方法(或者Symbol.iterator) 取得这个迭代器。
WeakMap 
WeakMap的键只能使Object或者 继承自Object的类型。- 这些键并不属于正式的引用,不会阻止垃圾回收。
 - 不可迭代。
 
Set 
js
cosnt set = new Set()
set.add(1)
set.has(1)
set.delete(1)
new Set([...array]) //用于数组去重Set类似于数组,但是成员的值都是唯一的,可以用于数组去重。- 写入 
Set中的数据不会自动转换类型。 - 在 
Set中相同的对象并不相等。 - 在 
Set中NaN是相等的。 
WeakSet 
- 与 
Set类似,区别在于值只能存储对象。 - 不能遍历,多用于存储 
DOM对象。 
cookie, session, stoken 
为了解决 http 无状态特性所带来的问题。
cookie 
- 是文本数据,形式上是键值对。键值对之间用分号隔开。
 - 存储在浏览器。
 - 通过 
document.cookie可以设置和访问。 - 缺点: 1. 大小被限制在 4K 以内,所以无法保存过多的信息。 2. 容易被劫持和伪造。 3. 会加大传输压力。
 
session 
- 是服务器为了保存用户状态而创建的一个特殊对象。
 - 当客户端于服务端第一次建立连接后 ,服务端会创建一个 
session对象。此对象有一个sessionId,客户端保存这个sessionId, 在之后的通信中带上这个sessionId, 服务器通过sessionId就可以找到对应的session, 就可以对客户端进行身份识别并获取一些会话记录! session基本上依赖于cookie。- 缺点: 1. 当一个服务的业务越来越大,无论是分布式还是集群,都可能有这样一个问题:就是 
session可能在服务器 A 中创建 , 但是下一个请求,可能访问了服务器 B 。 但是服务器 B 没有这个session, 也就是对服务器 B 来说 ,此时的请求,它是不认识的! 
token 
- 用户登录后,服务器颁发给客户端一个令牌。该令牌保存了用户的基本信息和签名等,经过加密后才会发给浏览器。
 - 完全由应用所管理,所以能避开 
同源策略。 - 可以避免 
CSRF攻击。 - 能在多个服务器间共享。
 
网络七层模型 
- 应用层,表示层,会话层,传输层,网络层,通信链路层,物理层
 
事件循环 
- 浏览器是多进程、多线程的应用程序。
 JavaScript是一门单线程语言,运行在浏览器的渲染进程中的渲染主线程中。- 渲染主线程同时还要负责 
HTML、CSS等的解析,以及页面的渲染。 - 执行 
JavaScript和 渲染 是互斥的,所以不能让JavaScript长时间的占用渲染主线程。 - 事件队列:在执行 
JavaScript时,遇到宏任务就放入宏任务队列,遇到微任务就放入微任务队列, 然后渲染主线程继续执行剩下的代码。 - 当渲染主线程执行完后,将从 
微任务队列中取出任务继续执行,直到微任务队列清空,然后从宏任务队列中取出一个宏任务,执行完后继续清空微任务队列,一直这样循环。