NathanHan1
NathanHan1
```javascript Promise.retry = function (task, retryTimes) { if(retryTimes { function runTask() { if(retryTimes === 0) { reject(new Error('have no retry times')) return } task() .then((v) => { resolve(`success ${v}`); })...
前面的答案都是直接来这些高级方法,其实我是面试官,可能更愿意看到: sort,你能直接写个快排 扁平化,知道使用递归 去重,知道set结构并且自己实现一个set 最后,用函数式把这些串起来 这才perfect呀
```javascript function multiRequest(urls, maxNum) { return new Promise((res, rej) => { const tasksLength = urls.length const result = [] let i = 0 let done = 0 function runTask() {...
> 在 HTTP/1 中,每次请求都会建立一次HTTP连接,也就是我们常说的3次握手4次挥手,这个过程在一次请求过程中占用了相当长的时间,即使开启了 Keep-Alive ,解决了多次连接的问题,但是依然有两个效率上的问题: > > * 第一个:串行的文件传输。当请求a文件时,b文件只能等待,等待a连接到服务器、服务器处理文件、服务器返回文件,这三个步骤。我们假设这三步用时都是1秒,那么a文件用时为3秒,b文件传输完成用时为6秒,依此类推。(注:此项计算有一个前提条件,就是浏览器和服务器是单通道传输) > * 第二个:连接数过多。我们假设Apache设置了最大并发数为300,因为浏览器限制,浏览器发起的最大请求数为6,也就是服务器能承载的最高并发为50,当第51个人访问时,就需要等待前面某个请求处理完成。 > > HTTP/2的多路复用就是为了解决上述的两个性能问题。 > 在 HTTP/2 中,有两个非常重要的概念,分别是帧(frame)和流(stream)。 > 帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流。 > 多路复用,就是在一个 TCP 连接中可以存在多条流。换句话说,也就是可以发送多个请求,对端可以通过帧中的标识知道属于哪个请求。通过这个技术,可以避免 HTTP 旧版本中的队头阻塞问题,极大的提高传输性能。 第二个问题里说到连接数过多?开了keep-alive怎么还连接数过多?复用了相同域名的连接,怎么还会过多呢?
```javascript Array.prototype.mySplice = function(start, deleteCount, ...items) { const preLen = this.length + items.length const rightArr = items.concat(this.slice(start + deleteCount)) let i = start while(rightArr.length) { this[i] = rightArr.shift() i++ }...
> ```js > Array.prototype.mySplice = function(start, deleteCount, ...items) { > const preLen = this.length + items.length > const rightArr = items.concat(this.slice(start + deleteCount)) > let i = start > while(rightArr.length)...
```javascript class LazyMan { constructor(name) { this.tasks = []; // 启动 tasks,利用 then的 异步原理拿到已经填充好的tasks Promise.resolve().then(() => { this.nextTick() }) console.log(`hi i am ${name}`); } sleep(delay) { this.tasks.push(() => { setTimeout(()...
```javascript class LazyManClass { constructor(name) { this.name = name this.sleepFirstAmount = 0 this.queue = [] Promise.resolve().then(() => { this.run() }) } async run() { this.hello(this.name) if(this.sleepFirstAmount > 0) { await...
> ## 关于O(n^3)怎么计算出来的 > ## 问题描述 > 原问题标题“React 和 Vue 的 diff 时间复杂度从 O(n^3) 优化到 O(n) ,那么 O(n^3) 和 O(n) 是如何计算出来的? ” > > 1. 这里的n指的是页面的VDOM节点数,这个不太严谨。如果更严谨一点,我们应该应该假设 > 变化之前的节点数为m,变化之后的节点数为n。 > 2....
```javascript function intersection(...arr) { // 注意 交集是集合概念,集合是不存在重复元素的 const map = {} const len = arr.length const result = [] for(let i = 0; i < len; i++) { const subArr...