很好的前端笔试题,知识点考察的也都挺到位的
# 浏览器内核
Trident, Blink, Webkit, Gecko都是流行的浏览器内核
# Http 协议
HTTP1.1实现了持久连接和管线化操作以及主动通知功能,相比HTTP1.0有大福性能提升- post 请求一般用于修改服务器上的资源,对发送的消息数据量没有限制,通过表单方式提交
 - 可以通过 206 返回码实现断点续传
 
状态码 301 Moved Permanently 表示永久重定向,请求的资源已经被分配了新的 url, 以后就会用新,SEO 也会抓取新的 url
使用场景 👇
当想换个域名时,旧域名不用了,则当用户访问旧域名时就用 301 重定向到新的域名
302 Found 是临时重定向
使用场景 👇
- 没有登录的用户访问网站时要重定向到登录界面
 - 比如网站有活动,那用户访问网站首页时,会先跳转到活动界面
 
# CSRF
CSRF获取不到用户的信息,也拿不到其他用户的 Cookie, 它只是借助用户权限,模拟用户发出请求,不能接收返回的内容
可以向站点注入恶意代码
# CSS 选择器
- 类和伪类选择器的权重一样
 - 内敛样式的权重是最高 —— 不算 !important 声明
 - input: checked 选择每个被选中的 input 元素
 
# 原型
__proto__用来读取实例构造函数的原型对象
# webpack
file-loader: 把文件输出到一个文件夹中,在代码中通过相对URL去引入输出的文件style-loader: 把CSS代码注入到JavaScript中,通过DOM操作去加载CSScss-loader: 加载CSS,支持模块化,压缩,文件导入等特性url-loader: 和file-loader类似,但是能在文件很小的情况下以base64的方式把文件内容注入到代码中
# 代码输出
class FunClass {
  count = 0;
  fun1 = () => {
    return () => {
      this.count++;
      var tempCount = this.count;
      setTimeout(() => {
        if (tempCount === this.count) {
          console.log("good");
        } else {
          console.log("bad", this.count);
        }
      }, 2000);
    };
  };
}
const obj = new FunClass();
const fun1 = obj.fun1();
setTimeout(() => {
  fun1();
}, 1000);
new Promise((resolve) => {
  fun1();
  resolve();
});
fun1();
fun1();
输出👇
3 秒后同时输出三个 bad 4,然后 1 秒后输出 good
bad 4
bad 4
bad 4
good
分析👇
同步代码
new promise构造函数中的fun1(); this.count ++, tempCount = 1放入宏任务一个 2s 后执行的setTimeoutfun1(), this.count ++, tempCount = 2放入宏任务一个 2s 后执行的setTimeoutfun1(), this.count ++, tempCount = 3放入宏任务一个 2s 后执行的setTimeout宏任务代码
this.count ++, tempCount = 4, 放入宏任务一个 1s 后执行的setTimeout
执行完毕
此时宏任务里的状态是四个 settimeout 执行时间分别是 2s 2s 2s 1s
1s 的得等前面的执行完了之后 过 1s 再执行
四个 settimeout 里的 tempCount 都是固定值了,但是因为里面访问的是 this.count, 最后一次访问后变成了 4
所以四个 settimeout 里的 this.count 都变成了 4
- 输出: 
2s后输出 3 个bad 4过 1s 后输出 1 个good 
# 定位
- 相对定位会提升元素的层级
 - 绝对定位,如果不设置偏移量,元素位置不发生任何变化,会提升元素的一个层级,同时,会使元素脱离文档流(行内元素会变成块元素,块元素会撑开内容)
 - 固定定位永远参考于浏览器的视口定位 —— 视口就是固定不动,不会随网页的滑轮滚动而滚动
 
# 杂
- IPv4 环回地址 127.0.0.1
 - IPv6 环回地址 0:0:0:0:0:0:0:1/128 或 ::1/128
 - CSS 的注释为 
/**/ - TCP 协议的端口号范围为 0-65535
 - 有向图的算法 Floyd Dijkstra, 无向图的算法 Prim Kruskal
 
