# 面试笔记
ES6 新特性
forin forof
set map weakMap weakSet
xss csrf
https://www.jianshu.com/p/af78964c33e2 https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/104148444
# 字节跳动
- 斐波那契 递归实现/dp 实现/空间优化
- 书写一个闭包
- 事件循环判断输出顺序(async/ promise / setTimeout)
- 进程线程区别
- http 状态码/重定向
- 两个不均匀的香 一个烧完 1 个小时,如何计算 15 分钟
- 虚拟 dom 原理
- vue 数据劫持
- 深拷贝
- css 选择器
- css 权重问题
- 层次遍历一个树
- http 状态码
- 强缓存/协商缓存
- Etag 生成的原理
- vue 中组件通信方法
- OSI 网络七层模型
- TCP 超时重传,滑动窗口,慢启动快重传
- 常见的网络攻击以及解决方法
- vue 中 key 的作用
- TCP 三次握手四次挥手
- 如何界定跨域
- cookie 属性 httponly/secure
- http 头部 Only 字段
- 找出 sum 大于大于 target 的最短连接数组的长度
- vue 双向绑定
- vue data 为什么一定是函数
- 没有 data 中注册为什么不能视图更新
- 如果非想不注册就得到数据更新,怎么办
- 64 匹马,8 个赛道,决出最快的四匹马
- 虚拟 dom diff 算法原理 复杂度
- css 提升性能的方式
- 浏览器进程线程
- https 原理
- localstorage 存储数据格式和 sessionStorage 区别
- 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);
考点:
- IIFE->匿名自执行函数,此时创建闭包
- 函数的提升比变量要前
- 作用域和连等问题
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>
- 闭包解决:函数作为返回值、函数作为参数传递,保护变量。【内存泄露可以把参数置空】
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);
}
- 块级作用域和全局作用域,使用 let
var list_li = document.getElementsByTagName("li");
for (let i = 0; i < list_li.length; i++) {
list_li[i].onclick = function() {
console.log(i);
};
}
- 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