# 面试笔记

ES6 新特性 forin forof
set map weakMap weakSet xss csrf

https://www.jianshu.com/p/af78964c33e2 https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/104148444

# 字节跳动

    1. 斐波那契 递归实现/dp 实现/空间优化
    1. 书写一个闭包
    1. 事件循环判断输出顺序(async/ promise / setTimeout)
    1. 进程线程区别
    1. http 状态码/重定向
    1. 两个不均匀的香 一个烧完 1 个小时,如何计算 15 分钟
    1. 虚拟 dom 原理
    1. vue 数据劫持
    1. 深拷贝
    1. css 选择器
    1. css 权重问题
    1. 层次遍历一个树
    1. http 状态码
    1. 强缓存/协商缓存
    1. Etag 生成的原理
    1. vue 中组件通信方法
    1. OSI 网络七层模型
    1. TCP 超时重传,滑动窗口,慢启动快重传
    1. 常见的网络攻击以及解决方法
    1. vue 中 key 的作用
    1. TCP 三次握手四次挥手
    1. 如何界定跨域
    1. cookie 属性 httponly/secure
    1. http 头部 Only 字段
    1. 找出 sum 大于大于 target 的最短连接数组的长度
    1. vue 双向绑定
    1. vue data 为什么一定是函数
    1. 没有 data 中注册为什么不能视图更新
    1. 如果非想不注册就得到数据更新,怎么办
    1. 64 匹马,8 个赛道,决出最快的四匹马
    1. 虚拟 dom diff 算法原理 复杂度
    1. css 提升性能的方式
    1. 浏览器进程线程
    1. https 原理
    1. localstorage 存储数据格式和 sessionStorage 区别
    1. indexDB

# - pg01

+(function() {
  alert(a); // 1. function a(){alert(2)}
  a();
  var a = function() {
    alert(1); // 4. 1
  };
  function a() {
    alert(2); // 2. 2
  }
  alert(a); // 3. function (){alert(1)}
  a();
  var d = a;
  var c = d; // error
})();
alert(d); //erroe
alert(c);

考点:

    1. IIFE->匿名自执行函数,此时创建闭包
    1. 函数的提升比变量要前
    1. 作用域和连等问题
var a = { n: 1 };
var b = a;
a.x = a = { n: 2 }; // !=   a={n:2}  a.x=a;   此时的 a 是 undifined变量
alert(a.x); // undefined  1. a={n:2}  2. a.x = a;
alert(b.x); // {n:2}
this.a = 20;
var test = {
  a: 40,
  init: () => {
    console.log(this.a);
    function go() {
      console.log(this.a);
    }
    go.prototype.a = 50;
    return go;
  },
};
new (test.init())();

考点:

  • this 的指向问题,this 只有执行的时候才能确认下来,谁调用,就指向谁,没人调用就指向 window
  • 当函数当做构造函数的时候,原型链里 this 对属性的赋值要低于函数内部指向

# - pg2

如何正确输出 li 里的值

<ul>
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
  <li>5</li>
</ul>
<script type="text/javascript">
  var list_li = document.getElementsByTagName("li");
  for (var i = 0; i < list_li.length; i++) {
    list_li[i].onclick = function() {
      console.log(i);
    };
  }
</script>
    1. 闭包解决:函数作为返回值、函数作为参数传递,保护变量。【内存泄露可以把参数置空】
var list_li = document.getElementsByTagName("li");
for (var i = 0; i < list_li.length; i++) {
  list_li[i].onclick = (function(i) {
    return function() {
      console.log(i);
    };
    i = null;
  })(i);
}
    1. 块级作用域和全局作用域,使用 let
var list_li = document.getElementsByTagName("li");
for (let i = 0; i < list_li.length; i++) {
  list_li[i].onclick = function() {
    console.log(i);
  };
}
    1. this.innerHTML
var list_li = document.getElementsByTagName("li");
for (var i = 0; i < list_li.length; i++) {
  list_li[i].onclick = function() {
    console.log(this.innerHTML);
  };
}

# for in 和 for of 的区别

  • for..of