项目相关
1. 垃圾回收机制
当一个对象可被程序引用时,他就是活跃的
function f() {
var obj = {x: 12};
return obj.x;
}
如果一个对象可经由某个被定义为活跃对象的对象,通过某个指针链所访问,则它就是活跃的。其他的都被视为垃圾。
标记清除 引用计数
2. vue react 数据流的流向 引出的 -> vue双向绑定(react源码不是很熟)
响应式原理 大概说一下吧(可以看一下之前发的文章)
vue响应式原理 对象篇
3. https
-
客户端发送报文给服务器端开始ssl通信,报文中包含客户端支持的ssl版本,加密组件列表,算法和密钥长度 -
如果服务器确定了可以使用SSL通信,就会发送响应报文给客户端,报文中包含SSL版本和加密组件 -
服务器把公开密钥 正式发送给客户端 -
服务器端发送报文通知客户端,最初的SSL握手协商接受 -
客户端生成随机密码串 ,并用之前客户端发过来的公钥证书加密 ,再通过报文发送给服务器端 -
客户端继续发送报文,告诉服务器端,之后客户端发送的报文,都会使用刚才发送过去的随机密码串进行加密 -
客户端发送结束报文,包含连接至今的全部报文,如果服务器端可以正确解密该报文,则本次握手成功 -
服务器端也会发送报文,告诉客户端,之后服务端响应的数据都会使用随机密码串进行加密 -
服务器端发送结束报文,包含连接至今的全部报文的整体校验值。如果客户端可以正确解密该报文,则本次握手协商成功
之前写的有关http的知识文章
4. 浏览器缓存
强缓存 协商缓存 一些具体的说一下
5. 数据类型 -> 引出的 浮点数
有关0.1 + 0.2 不等于0.3的问题
console.log(0.1+0.2===0.3)
JavaScript Number 采用的是 IEEE 754 定义的 64 位双精度浮点型来表示
function formatNum(num, fixed = 17) {
console.log(num.toFixed(fixed))
return parseFloat(num.toFixed(fixed))
}
var a = 0.1 + 0.2;
console.log(formatNum(a));
function add(num1, num2) {
var Len1 = (num1.toString().split('.')[1] || '').length;
var Len2 = (num2.toString().split('.')[1] || '').length;
var baseNum = Math.pow(10, Math.max(Len1, Len2));
return (num1 * baseNum + num2 * baseNum) / baseNum;
}
console.log(add(0.1, 0.2));
6. 树对象转数组/对象转树
树组件通用知识点:树结构打平为一维数组
给定如下数据结构:
const tree = [
{
id: "1",
label: "1",
children: [
{ id: "1-1", label: "1-1" },
{ id: "1-2", label: "1-2" },
{ id: "1-3", label: "1-3" }
]
},
{
id: "2",
label: "2",
children: [
{ id: "2-1", label: "2-1" },
{ id: "2-2", label: "2-2" },
{ id: "2-3", label: "2-3" }
]
}
];
实现一个函数:flatTree(tree)
[{id: "1",label: "1"},{id: "1-1", label: "1-1",parentID: "1"}..]
输出:一维数组
[{id:"1",label:"1"},{id:"1-1", label:"1-1", parentId:"1"},{.....}]
答案:
let resArr = [];
function flatTree(tree,parentId = '') {
tree.forEach((item) => {
const obj = {};
obj.id = item.id;
obj.label = item.label;
if (parentId) obj.parentId = parentId
if (item.children) {
resArr.push(obj);
flatTree(item.children,item.id);
} else {
resArr.push(obj);
}
});
}
flatTree(tree)
console.log(resArr);
|