【柳比歇夫时间管理】 前端优化篇
前言
最近面试老被问CDN, 我心想这玩意不是以前用来引js文件的吗? 现在用npm + webpack代替了. 之前公司也只是用来配合oss做图片、视频这些资源的分发.
难道现在前端要自己实现内容分发系统?后来被提及到可以做优化, 我印象中优化主要是靠code split做按需加载, 以及被弃用的dll.
so google it
Js里的调用栈(call stack)、消息队列(message queue) 、工作队列(job queue)、process.nextTick()、setImmediate()
消息队列(message queue)里的任务也被称作宏任务(macrotask)
I/O操作、fetch、event(onClick)、渲染任务都是宏任务
工作队列(job queue)里的任务也被称作微任务(microtask)
MutationObserver、和Promise属于微任务
process.nextTick()和setImmediate()是node独有的插队方法
好的散列函数(hash function)有什么要求?
先说答案
- 确定性如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。
- 散列碰撞(collision)散列函数的输入和输出不是唯一对应关系的,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同。
- 不可逆性一个哈希值对应无数个明文,理论上你并不知道哪个是。
“船长,如果一样东西你知道在哪里,还算不算丢了。”
“不算。”
“好的,那您的酒壶没有丢。”
- 混淆特性输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值。
nginx 开启 http2
起因
今天学网络相关的资料,看到http2对比http1.1,有以下几个好处
- 多路复用 (Multiplexing)
- 二进制分帧
- 首部压缩(Header Compression)
- 服务端推送(Server Push)
一言蔽之, 快了很多~
【数据结构】链表(chain)学习笔记
简述
说链表我决定还是扯上数组一起,它们都是线性存储结构,区别在于数组在内存上是连续的,有序的.而链表则是通过节点内的指针指向下个节点,最后把所有节点串起来.就好比数组是长椅、链表是板凳;你开辟一个长度为5的数组好比搬了一个5人坐的长椅过来,1个人坐是占那么多空间, 5个人坐亦然;链表则是1个人坐就搬1个板凳,十分灵活. 且如果你现在中间插了一个人. 长椅组只能去找6人坐的新长椅了, 板凳组的只用再搬一个板凳就好了. 所以链表的插入成本是O(1).但是数组也有优势, 即通过标号搜索的成本是O(1),而链表需要从头(head)开始遍历,成本是O(n)