如何实现并发请求数量控制?
如何实现并发请求数量控制?
前言本文为转载文章,原文地址:关于前端:如何实现并发请求数量控制?
对文章作者表示感谢。
文章代码实现部分根据理解做了部分修改,整体效果无差异。
场景假设有这么一个场景:现在有20个异步请求需要发送,但是由于某些原因,要求我们必须将同一时刻的并发请求数量控制在3个以内,并且还要尽可能快速的拿到响应结果。其实这个场景在一些大厂的面试题中也有过提及,如下:
1234实现一个并发请求函数 concurrencyRequest(urls, maxNum),要求如下:• 要求最大并发数 maxNum• 每当有一个请求返回,就留下一个空位,可以增加新的请求• 所有请求完成后,结果按照 urls 里面的顺序依次打出(发送请求的函数可以直接使用fetch即可)
设计思路首先来看将上面的文字转化为图之后的效果:
这样就直观的看到,有一个最大并发数maxNum,20个异步请求的urls集合和并发返回之后的results集合。
下面就开始演示这个思路是如何开始的,如下:
首先按照每次只能并发3个请求的要求,这里就对应A、B、C,当其中有一个请求完之后就会再从urls里面再 ...
使用JS生成UUID的常用方法
使用JS生成UUID的常用方法
UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。
一、使用 Math.random()1234567function getUuid() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { var r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8; return v.toString(16); });}
二、使用crypto提供的randomUUID方法
MDN Cropto API
1const UUID = crypto.randomUUID();
三、使用crypto提供的getRandomValues方法123functio ...
腾讯云服务器部署 code-server
腾讯云服务器部署 code-server背景在2021年12月份,经历了人生第一次『毕业』,面临着马上要回家过年,希望在回家前可以把新工作确定下来,于是乎进入比较繁忙的准备面试和找工作的阶段,博客也就很少更新了。所幸在回家过年前找到了工作。
确定工作之后,计划写点什么,但是有不知道怎么去表达这个东西,所以就没了下文。后来有一天发现博客的图片全都成了裂图。后来才知道码云(Gitee)上托管的图片都加了防盗链;想起博客部署在github-page上打开速度又比较慢,因此在这种背景下决定自己重新搞一下博客,于是有了以下准备:
购买云服务器(腾讯云)
购买域名
申请七牛云图片存储空间(免费)
在工作之余慢慢的把博客做了迁移,之前的博客虽然没有下掉,但是也不再更新了。
之所以会部署 code-server 主要是之前就知道这个在线的VScode编辑器,但是苦于没有服务器一直没有搞(记得第一次在B站了解到这个东西的时候还想着可以用ipad写代码)。因此在博客迁移结束之后,就想着搞一把,爽一把。哈哈哈~(此处是杠铃般的笑声)
天也不早了,咱言归正传,说一下部署过程及遇到的问题和相应的解法。
冲冲 ...
Linux软链接和硬链接
Linux软链接和硬链接Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。
关于硬链接在之前的node模块fs中的fs.link()有过介绍。
硬链接硬链接指通过索引节点来进行链接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种链接就是硬链接。硬链接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬链接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的链接。只删除一个链接并不影响索引节点本身和其它的链接,只有当最后一个链接被删除后,文件的数据块及目录的链接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬链接文件均被删除。
软链接另外一种链接称之为符号链接(Symbolic Link),也叫软链接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号链接中, ...
Web Speech API
Web Speech API前言前几天在看阮一峰老师的科技爱好者周刊173期时看到一篇关于语音识别的文章——Voice to Text with Chrome Web Speech API。网页、语音识别、语音合成感觉挺好玩的,了解了一下。
正文Web Speech API 有两个部分:SpeechSynthesis 语音合成 (文本到语音 TTS) 和 SpeechRecognition 语音识别 (异步语音识别)。
语音识别通过 SpeechRecognition 接口进行访问,它提供了识别从音频输入(通常是设备默认的语音识别服务)中识别语音情景的能力。一般来说,你将使用该接口的构造函数来构造一个新的 SpeechRecognition 对象,该对象包含了一系列有效的对象处理函数来检测识别设备麦克风中的语音输入。
SpeechRecognition兼容性
语音识别对象SpeechRecognition有许多属性、方法和事件处理程序。有关完整接口列表,请参阅https://w3c.github.io/speech-api/#speechreco-section
12345678910 ...
扩展欧几里德算法
扩展欧几里德算法欧几里德算法欧几里德算法又称辗转相除法,用于计算两个整数a, b的最大公约数。基本算法:设$a=bq+r$,其中a, b, q, r都是整数,则:
\gcd(a,b)=\gcd(b,r)即$\gcd(a,b)=\gcd(b,a\%b)$。
证明引自离散数学课本:
先看一个整除定理与推论
接下来是证过程:
代码实现:
123456function gcd(a, b) { if (b===0) { return a; } return gcd(b, a%b);}
扩展欧几里德算法扩展欧几里德算法是欧几里德算法的扩展。
定理:若$a$和$b$为正整数,则存在整数$x,y$使得$\gcd(a,b)=ax+by$;
换句话说$\gcd(a,b)$可以表示为$a,b$的线性组合,例如:$\gcd(6,14)=2$,而 $2=(-2)*6+1*14$。
已知整数$a,b$,扩展欧几里德算法可以在求得$a,b$的最大公约数的同时,找到整数$x,y$(其中一个很可能是负数),使它们满足等式$ax+by=\gcd( ...
RSA加密原理(二)
RSA加密原理(二)本文转载与阮一峰老师的RSA算法原理(二)
正文开始!
上一次,我介绍了一些数论知识。
有了这些知识,我们就可以看懂RSA算法。这是目前地球上最重要的加密算法。
密钥生成的步骤我们通过一个例子,来理解RSA算法。假设爱丽丝要与鲍勃进行加密通信,她该怎么生成公钥和私钥呢?
第一步,随机选择两个不想等的质数p和q。
爱丽丝选择了61和53。(实际应用中,这两个质数越大,就越难破解。)
第二步,计算p和q的乘积n。
爱丽丝就把61和53相乘。
n=61*53=3233n的长度就是密钥长度。3233写成二进制是110010100001,一共有12位,所以这个密钥就是12位。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。
第三步,计算n的欧拉函数$\phi(n)$
根据公式:
\phi(n)=\phi(pq)=\phi(p)*\phi(q)=(p-1)(q-1)爱丽丝算出$\phi(n)$等于$60*52$,即3120。
第四步,随机选择一个整数e,条件是$1<e<\phi(n)$,且e与$\phi(n)$互质。
爱丽丝就在1到31 ...
RSA算法原理之数论知识
RSA算法原理(一)之数论知识本文转载于阮一峰老师的RSA算法原理(一)
正文开始!
如果你问我,哪一种算法最重要?
我可能会回答“公钥加密算法”。
因为它是计算机通信安全的基石,保证了加密数据不会被破解。你可以想象一下,信用卡交易被破解的后果。
进入正题之前,我先简单介绍一下,什么是”公钥加密算法”。
一点历史1976年以前,所有的加密方法都是同一种模式:
甲方选择某一种加密规则,对信息进行加密;
乙方使用同一种规则,对信息进行解密。
由于加密和解密使用同样规则(简称”密钥”),这被称为“对称加密算法”(Symmetric-key algorithm)。
这种加密模式有一个最大弱点:甲方必须把加密规则告诉乙方,否则无法解密。保存和传递密钥,就成了最头疼的问题。
1976年,两位美国计算机学家Whitfield Diffie 和 Martin Hellman,提出了一种崭新构思,可以在不直接传递密钥的情况下,完成解密。这被称为“Diffie-Hellman密钥交换算法”。这个算法启发了其他科学家。人们认识到,加密和解密可以使用不同的规则,只要这两种规则之间存在某种对应关系即 ...
单向加密&双向加密
单向加密、双向加密前言在之前的文章Web页面子资源完整性校验详细指南有涉及到将文件进行sha384加密后base64编码来检验文件是否被篡改。对其中用到的工具openssl比较感兴趣,所以顺带了解了加密算法,算是加密算法的一些常识。
以下为正文。
加密算法一般可分为两种,即单向加密算法和双向加密算法。
双向加密是加密算法中最常用的,它将可以直接理解的明文数据加密为不可直接理解的密文数据,在需要的时候,又可以使用一定的算法将这些加密以后的密文数据解密为原来的明文数据。双向加密适合于隐秘通讯,比如,比如在网络上注册用户或者购买商品时,提交的真实姓名、身份证号码、银行账号、信用卡密码等信息,应当通过双向加密算法加密以后,再在网络上传输,这样,可以有效的防止黑客的“偷听”,保证数据的安全,同时,网站接收到我们的数据以后,可以通过解密算法来获得准确的信息。
双向加密既可以加密,又可以解密。而单向加密则刚好相反,它只能对明文数据进行加密,而不能对加密了的密文数据再解密成原来的明文数据。可能读者会认为,不能解密的加密算法有什么作用呢?在实际应用中,对软件系统数据库中的系统用户信息(如用户密码)加密, ...
Node.js中的console.log()输出彩色字体
Node.js中的console.log()输出彩色字体前言最近在写脚本的时候发现在控制台输出的信息不够显眼,比较单调。但是又没必要为了这一个小需求再引入一个第三方库(chalk),于是就想着研究一下控制台输出彩色字体的原理是什么。
请注意,此篇文章中的颜色仅适用于仿真器(putty、secureCRT、XShell),以及unix终端,不适用于CMD(但依然可用于WIN下的仿真器)
简介
在终端或仿真器中输入下面的代码,并回车,预览最直接的效果。
1echo -e "\033[1;31mI ♡ You \e[0m"
请注意,引号内的\e等同于\033;\033、\x1b和\e效果是一样,对应键盘左上角Esc键对应的ASCII码(8进制);
在nodeJS环境下只有\033和\x1b生效。
12console.log('\x1b[1;31;46mI ♡ You \033[0m');console.log('\033[31;43mI ♡ You \x1b[0m');
控制台输出为:
通用的控制文本颜色的转义序列 ...