与资源限制有关的题目

news2024/11/15 16:21:01

文章目录

  • 0、资源限制技巧汇总
  • 1、题目一:40亿个数,内存限制为1G,如何找到出现次数最多的数
  • 2、题目二:40亿个数,内存限制为10MB,找到所有未出现过的数
    • 进阶问题1:40亿个数,内存限制为3KB,但是只用找到一个没出现过的数即可
    • 进阶问题2:40亿个数,只用有限的变量,找到一个没有出现过的数即可
  • 3、题目三:100亿个URL,找出所有重复的URL
  • 4、题目四:40亿个数,内存限制为1GB,找出所有出现了2次的数
  • 5、题目五:40亿个数,内存限制为3KB,找到这40亿个数的中位数
  • 6、题目六:内存限制5GB,给10GB大小的文件排序
  • 7、题目七:求出一个给定的大文件中出现次数最多的前 100 名

0、资源限制技巧汇总

  1. 布隆过滤器用于集合的建立与查询,并可以节省大量空间
  2. 一致性哈希解决数据服务器的负载管理问题
  3. 利用并查集结构做岛问题的并行计算
  4. 哈希函数可以把数据按照种类均匀分流
  5. 位图解决某一范围上数字的出现情况,并可以节省大量空间
  6. 利用分段统计思想、并进一步节省大量空间
  7. 利用堆、外排序来做多个处理单元的结果合并

1、题目一:40亿个数,内存限制为1G,如何找到出现次数最多的数

题目描述

我们都知道,32位无符号整数的范围是 0 0 0 ~ 4 , 294 , 967 , 295 4,294,967,295 4,294,967,295(即 0 0 0 ~ 2 32 − 1 2^{32} - 1 2321)。

现在有一个正好包含 40 亿个无符号整数的文件,可以使用最多 1GB 的内存,怎么找到出现次数最多的数?

分析

【思路1】

直接提取40亿个整数放入一个数组中进行排序,但是40亿无符号整数,占用内存大小是 160亿Bytes = 16GB,但是题目只给定了 1GB 的内存,所以不可能将所有的数都提取出来进行排序,这种方案不可行。

【思路2】

使用哈希表,而哈希表到底要使用多少内存,和数字的个数无关,而和到底出现了多少种不同的数字有关。

假设 40 亿个数全部都是 1,那么哈希表中只有一条记录(1,40亿),即记录了1出现的次数为40亿,其中 key 和 value 都是无符号整数,所以仅需要 8 字节。

最极端的情况,是这 40 亿个数全都不同,因为数字个数 < 无符号整数范围,所以这种可能性是存在的。这样的话,哈希表需要的空间就是 40 40 40亿 × 8 = 320 \times 8 = 320 ×8=320亿Bytes = 32 = 32 =32GB,甚至不如直接提取所有数字进行排序占用的空间少,更不必说哈希表中可能有一些数据结构连接的索引开销。所以题目的 1GB 内存肯定是不行的,哈希表会爆掉。

【思路3】

如果1GB内存全部用来做哈希表,每条记录(数字, 出现次数)占用 8字节内存,则可以存储 1 G B / 8 ≈ 125 , 000 , 000 1GB/8 ≈ 125,000,000 1GB/8125,000,000 条记录,但是可能存在其他开销,则保守点估计 1GB 内存只能存储 1亿 条记录,超过 1亿 哈希表就爆掉。(也可以更保守点,存更少的记录)

题目给定的大文件中的40亿个数 / 1亿 = 40,然后处理40亿个数,每个数通过哈希函数得到一个哈希值,然后 模40,根据结果放到这40个不同的文件中。例数字17,假设 h a s h ( 17 ) % 40 = 3 hash(17) \% 40 = 3 hash(17)%40=3,则将17这个数字发送到 3 文件。

因为哈希函数具有均匀性,在模操作后依然具有均匀性,所以可以认为40亿个数即便全部都不同,也会几乎均分地放到各自的文件中。

如此一来,就有 40 个文件,每个文件中的数字个数不知道,但是每个文件中数字种类数绝对不会太超过1亿,哪怕超过,也只会超过一点点。而且同一种数只会被分到同一个文件中。

接着对0号文件使用哈希表求其中出现次数最多的数字,然后将哈希表空间释放去求 1 号文件中出现次数最多的数字,又将哈希表空间释放去求 2 号文件中出现次数最多的数字,…,这样就得到了 40 个文件中各自出现的次数最多的数字,最后看这 40 个最多次数里的Top1。

这就是哈希函数把数据按照种类均匀分流的应用。

推广

如果有一个大文件,但是给定一个限制的内存,要在大文件中找到某个内容出现次数最多。

原大文件中的数据通过哈希函数 f1,模 m1,根据结果放到若干个不同的小文件中;若每个小文件的内存仍然大于限制的内存,则通过哈希函数 f2,模 m2,根据结果放到若干个更小的文件中,一直到小小文件的内存达到限制的内存。

然后再用HashMap对每个小小文件进行处理(每次处理下一个文件时,要将原先的哈希表空间释放掉,即空间复用),找出每个小小文件中的出现次数最多的内容,最后在找出的结果里找到最大值即可。

总结来说,就是不断哈希,不断取模,以达到限制的内存要求。

2、题目二:40亿个数,内存限制为10MB,找到所有未出现过的数

题目描述

我们都知道,32位无符号整数的范围是 0 0 0 ~ 4 , 294 , 967 , 295 4,294,967,295 4,294,967,295(即 0 0 0 ~ 2 32 − 1 2^{32} - 1 2321)。

现在有一个正好包含 40 亿个无符号整数的文件,可以使用最多 1GB 的内存,怎么找到所有未出现过的数?

分析

位图的应用

【思路1】

如果用哈希表HashSet统计每种数是否出现过,需要的空间是 40亿 × \times × 4 = 160亿字节 = 16GB,然后再从头开始遍历每种数字是否出现。这种方法已经超过了限制的内存1GB,不可取。

【思路2】

使用位图。

准备一个 bit 类型的数组,因为32位无符号整数的范围是 0 0 0 ~ 2 32 − 1 2^{32} - 1 2321,那就准备 2 32 2^{32} 232 个 bit,那么实际占用的空间是 2 32 / 8 2^{32} / 8 232/8 Byte < 1 < 1 <1GB,符合题目要求。即用 bit 标记数字是否出现过,出现过为1,没出现过为0。

如何实现 bit 数组呢?

用基础数据类型来构建。比如申请了一个整型数组 int arr[10],每个元素都是int类型,占 32 位,则相当于申请了一个长度为 320 的bit数组。

那么当访问到数字 i i i 时,那就是 a r r [ i / 32 ] arr[i/32] arr[i/32] 这个元素应该填充bit位,然后将 i % 32 i \% 32 i%32 就能知道应该将 a r r [ i / 32 ] arr[i/32] arr[i/32] 的第 i % 32 i \% 32 i%32位 bit 修改为1。

public class Test {
	public static void main(String[] args) {
		int[] arr = new int[10];
		//arr[0] .... arr[9] 都是int类型,有32位bit
		//提取bit的第179位 
		int i = 179;
		//提取第179位的状态,即取出 arr[i/32] 这个数字的第 i%32 位
		int status = (arr[i/32] & (1 << (i%32))) == 0 ? 0 : 1;
 	}
}

总结一下整个过程:准备一个大位图( 2 32 2^{32} 232 bit) ,遍历40亿个数的这个文件,遍历到每个数字就将位图中相应的位置标记状态为1,遍历完整个文件后,位图中哪位为 0,就是哪个数字没有出现过。

这是 位图解决某一范围上数字的出现情况 的应用。

进阶问题1:40亿个数,内存限制为3KB,但是只用找到一个没出现过的数即可

【思路】
3KB的内存如果都用来做无符号的整型数组,数组最长能有 3000 / 4 = 750 3000/4 = 750 3000/4=750 的长度。

然后找一个离 750 最近的 2 的某次方,即 2 9 = 512 2^9 = 512 29=512,那如果无符号整型数组申请 512 长度是不会超过限制内存的,即int arr[512],不会爆掉。

无符号整型整数的范围是 0 0 0 ~ 2 32 − 1 2^{32} - 1 2321,整个范围是 2 32 2^{32} 232,将这个范围均分为 512 份,即 2 32 / 512 = 8388608 2^{32} /512 = 8388608 232/512=8388608,每份包含的范围是一样大的。也就是第一份负责统计 0 ~ 8388608这个范围的数字出现的次数,第二份统计 8388609 ~ 8388609+8388608 这个范围出现的次数,以此类推。又因为数组长度为 512,所以 arr[0] 统计第一份的范围每个数字出现几个(用位信息统计),arr[1]统计第二份的范围每个数字出现的次数,以此类推。

而提给定的数的个数是40亿,而整数范围是0~约43亿,那么就会导致某个区间的词频统计不到 8388608(注意是词频统计,不是数字个数!!),找到那个不满 8388608 的小区间,在这个小区间中找到没有出现过的数即可。而在这个小区间中怎么找没有出现过的数呢?将小区间分成 512 份更小的区间,在这个更小区间中一定又有不满的,又将该不满的区间分成512份,只需几次就能定位到没有出现过的数。

总结:3KB内存的情况时,进行 512 分。

进阶问题2:40亿个数,只用有限的变量,找到一个没有出现过的数即可

一开始,准备三个变量, L L L 在0位置, R R R 2 32 − 1 2^{32}-1 2321 位置, m i d mid mid L L L ~ R R R 中间的位置,如此一来, L L L ~ m i d mid mid m i d mid mid ~ R R R 范围都应该是 2 31 2^{31} 231,但是因为只有 40 亿个数,那么必然存在左右两侧其中一侧范围词频统计不足 2 31 2^{31} 231 的情况,将不足的这一侧范围又进行二分,递归该过程,直到找到没有出现过的数。

总结:有限几个变量的时候,进行二分。

两个进阶问题都用到了分段统计思想

3、题目三:100亿个URL,找出所有重复的URL

题目描述

有一个包含 100 亿个URL 的大文件,假设每个 URL 占用 64B,请找出其中所有重复的 URL。

【补充】某搜索公司一天的用户搜索词汇是海量的(百亿数据量),请设计一种求出每天热门Top100词汇的可行办法。

分析

要找URL是否重复,可以用布隆过滤器,但是如果不允许有失误率,用哈希函数分流的方法。

先将大文件中的每个URL通过哈希函数分到小文件中,如果小文件还大,再用第二个哈希函数将其分到更小的文件中,以此类推。因为同一个URL是会进同一个文件的,所以检查每个小文件中是否有重复的URL即可。

4、题目四:40亿个数,内存限制为1GB,找出所有出现了2次的数

题目描述

32位无符号整数的范围是 0 0 0 ~ 4 , 294 , 967 , 295 4,294,967,295 4,294,967,295,现在有 40 亿个无符号整数,可以使用最多 1GB 的内存,找出所有出现了两次的数。

分析

用两个比特位信息表示一个数出现的次数。最后看哪两个比特位的结果是10,就表示这个数出现了 2 次。

这种方法实际使用的内存是 2 32 / 8 × 2 > 1 2^{32} / 8 \times 2 > 1 232/8×2>1GB,超过了限制的1GB内存,就使用位图 + 分段统计的方法。先用位图计算 0 0 0 ~ 2 31 2^{31} 231 范围数字的出现次数,然后计算 ( 2 31 + 1 ) (2^{31} + 1) (231+1) ~ ( 2 32 − 1 ) (2^{32} - 1) (2321) 范围,第一次遍历如果发现是后半范围的数据,则不管。

5、题目五:40亿个数,内存限制为3KB,找到这40亿个数的中位数

题目描述

32位无符号整数的范围是 0 0 0 ~ 4 , 294 , 967 , 295 4,294,967,295 4,294,967,295,现在有 40 亿个无符号整数,可以使用最多 10MB 的内存,怎么找到这 40 亿个整数的中位数。

分析

实现使用分段统计思想

3KB可以 750 个整型数据,离 750 最近的 2的某次方是 2 9 = 512 2^9 = 512 29=512

将 0 ~ 2 32 2^{32} 232-1 这个范围均分为 512 份(或叫区间),然后申请一个长度为 512 的整型数组 int arr[512]。

那么能用 arr 统计出每个范围上数字出现的次数。

40亿个数,那么中位数就是第 20 亿个数。

假设刚刚分出的 512 个区间中的第一个区间范围的数字有1亿个,因为要找到第20亿个数,那么就知道中位数绝对不是在这个区间里;假设第二个区间范围的数字出现了 4 亿个,则两个区间数字个数为 5 亿,则就知道中位数既不来自第一个区间,也不来自第二个区间;一直将每个区间范围的数字出现次数依次相加,直到加到某个区间 x x x 后数字个数为 19 亿,再加区间 x + 1 x + 1 x+1 的数字个数到达了 23 亿,那么中位数一定来自 x + 1 x +1 x+1 这个区间,且该区间中的第 1 亿个数就是中位数。 接着再遍历一遍文件,只关心 x + 1 x+1 x+1 这个范围的数字,找到第 1 亿个数即可。

举个小例子:假设要找的中位数是排好序后的第 200 个数
在这里插入图片描述
将每个区间的数字个数相加,到30 ~ 39 这个范围时总个数才超过200,所以中位数在 30 ~ 39 这个范围中;

且前三个区间个数相加为117,则30~39这个范围的第83小的数就是中位数;

然后再遍历一遍文件,只关心 30 ~ 39 这个范围的数字,找到第83小的数即可。

6、题目六:内存限制5GB,给10GB大小的文件排序

题目描述

32位无符号整数的范围是 0 0 0 ~ 4 , 294 , 967 , 295 4,294,967,295 4,294,967,295

有一个 10G 大小的文件,每一行都装着这种类型的数字,整个文件是无序的,给你 5G 的内存空间,请你输出一个 10G 大小的文件,就是原文件所有数字排序的结果。

分析

该题使用堆来做多个处理单元的结果合并

先举个极端的例子:10G的文件,只能保存三条记录的容器,如何排序。

10G的文件,有一个容器可以保存 3 条记录 “(值,出现的次数)”, 当容器中的3条记录满了时,接下来遍历到的数 x x x,将 x x x 与容器中最大的值 m a x max max 比较,如果 x < m a x x < max x<max,则淘汰容器中的最大值那条记录,将 x x x 放入容器中。 这样的结果就是,当遍历完10G文件后,最小的前三名及其出现的次数都正确统计了。

假设遍历完一遍后,容器中存储的三条记录是 ( a , c n t 1 ) 、 ( b , c n t 2 ) 、 ( c , c n t 3 ) (a, cnt1)、(b, cnt2)、(c, cnt3) (a,cnt1)(b,cnt2)(c,cnt3)(其中 a < b < c a < b < c a<b<c),就生成一个文件 file 其中 a a a c n t 1 cnt1 cnt1 遍, b b b c n t 2 cnt2 cnt2 遍, c c c c n t 3 cnt3 cnt3 遍,然后用一个变量 t t t 记录其中的最大值 c c c,即 t = c t = c t=c,释放掉容器中的空间,再遍历一遍 10G 的文件,但是 ≤ c \le c c 的数忽略,就能得到 > 13 >13 >13 的最小前三名,假设遍历完10G文件后容器中的记录是 ( d , c d ) 、 ( e , c e ) 、 ( f , c f ) (d, cd)、(e, ce)、(f, cf) (d,cd)(e,ce)(f,cf)(其中 d < e < f ) d < e < f) d<e<f,则接着在文件 file 后面写 c d cd cd d d d c e ce ce e e e c f cf cf f f f,写完之后将 t t t 更新成 f,即 t = f t = f t=f,又将容器中的空间释放,再遍历 10G 的文件,重复上述的操作直到容器中不满 3 条记录为止。那么最终文件 file 就是原文件排序后的结果。

现在题目给定的是 5GB内存,就计算容器利用这个 5GB 内存可以存放多少条记录,然后执行上面的操作。

这个容器就是使用的 大根堆

7、题目七:求出一个给定的大文件中出现次数最多的前 100 名

分析

先将大文件使用哈希函数拆成若干个小文件,然后每个小文件中求Top100。

举个简易的例子——求出现次数最多的Top3。

如大文件使用哈希函数拆成 3 个小文件。

文件1的Top3:

数字出现次数
a17
b16
c10

文件2的Top3:

数字出现次数
X23
Y21
P6

文件3的Top3:

数字出现次数
z9
k9
F9

如何在这多个 Top3 中选出最终的 Top3 呢?

方法1:直接外排序。先三个 Top1 比较,得到 (X, 23) 最大,就是最终的 No.1,然后将它从比较数组中除去;然后此时每个文件中的Top1开始比较,得到 (Y, 21)最大,就是最终的 No.2,将它从比较数组中去除;接着又将此时每个文件中的 Top1 比较,得到 (a, 17)最大,就是最终的 No.3。

方法2:堆上堆。每个文件中的 Top3 组成大根堆,每个大根堆的堆顶再组成总的大根堆,则总的大根堆的堆顶就是最终的No.1,将总的大根堆的堆顶(X, 23)弹出,这个弹出的记录来自文件2,将文件2的下一个记录 (Y, 21) 放到总的大根堆,重新调整堆,此时的堆顶(Y, 21)就是最终的No.2,周而复始,找到TopK个。

最终的Top3 :

数字出现次数
X23
Y21
a17

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/171113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【计算机体系结构-02】机器模型

1. 机器模型 (Machine Model) 计算机的基本工作就是进行运算&#xff0c;那么计算就需要有用来处理计算方法的处理单元和提供或保存数值的存储单元。一般将用来处理计算方法的处理单元称为 算术逻辑单元 (ALU--Arithmetic Logic Unit)。在一个计算过程中可能会是这样的一个流程…

springboot整合flowable

自动部署 流程图提前画好&#xff0c;放入 指定文件夹 配置&#xff1a; spring.datasource.usernameroot spring.datasource.passwordroot # nullCatalogMeansCurrenttrue 自动生成表 spring.datasource.urljdbc:mysql:///flowable_process?serverTimezoneUTC&nullCat…

CISP_VULHUB_HACK ME PLEASE

vulhub_HACK ME PLEASE简介扫描开放端口探测web服务搜集seedms的信息登录mysql&#xff0c;尝试获得seeddms的密码利用RCE漏洞提权简介 靶机链接&#xff1a;https://www.vulnhub.com/entry/hack-me-please-1,731/难度&#xff1a;简单描述&#xff1a;一个完全为OSCP设计的简…

数据结构之经典八大排序的实现(万字详谈)

文章目录前言1.插入排序2.希尔排序3.选择排序4.堆排序5.冒泡排序6.快速排序hoare方式版本快排实现非递归方式实现快排挖坑法实现快排前后指针法(双指针法&#xff09;快排的各种优化1.减少后几层的递归调用(小区间优化&#xff09;2.三数取中优化3.三路划分(处理大量重复数据&a…

信息论复习—信息的度量

目录 离散信源信息的度量&#xff1a; 离散信源的信息量&#xff1a; 单符号离散无记忆信源&#xff1a; 离散无记忆信源及熵&#xff1a; 自信息&#xff1a; 信息量的定义&#xff1a; 信息熵的定义&#xff1a; 熵的性质&#xff1a; 离散信源的最大熵定理&#xf…

Elasticsearch高级查询—— 关键字精确查询文档

目录一、初始化文档数据二、字段匹配查询文档2.1、概述2.2、示例一、初始化文档数据 在 Postman 中&#xff0c;向 ES 服务器发 POST 请求 &#xff1a;http://localhost:9200/user/_doc/1&#xff0c;请求体内容为&#xff1a; {"name":"张三","age&…

LINUX学习之了解系统目录结构(一)

前言 Linux 系统目录结构是一个由各种目录和文件组成的树形结构&#xff0c;每个目录都有特定的用途。在这篇文章中&#xff0c;我们将讨论 Linux 系统中最常见的目录&#xff0c;并解释它们的用途 登录系统后输入ls命令查看系统目录 树状目录结构图 系统常用目录 目录名描述…

单目相机标定实现--张正友标定法

文章目录一&#xff1a;相机坐标系&#xff0c;像素平面坐标系&#xff0c;世界坐标系&#xff0c;归一化坐标系介绍1&#xff1a;概述公式二:实现1&#xff1a;整体流程4&#xff1a;求出每张图像的单应性矩阵并用LMA优化5&#xff1a;求解理想无畸变情况下的摄像机的内参数和…

SpringBoot项目集成liquibase,数据库版本控制解决方案

liquibase 数据库版本留痕解决方案&#xff0c;在实际生产过程中如何高效管理数据库的DDL与DML语句&#xff0c;对这些语句留痕处理。如果能将sql的执行与SpringBoot项目启动结合在一起&#xff0c;每次启动项目自动执行新增的sql语句&#xff0c;这样就可以使得项目组成员各个…

在 VMware Workstation 16 Pro 中安装 Ubuntu Server 22.04.1 并配置静态 IP 地址

文章目录1.下载 Ubuntu Server 22.04.12.新建虚拟机向导3.编辑虚拟机设置4.开启此虚拟机并配置Ubuntu系统5.设置 root 用户的密码6.允许远程连接 root 用户7.配置静态 IP 地址7.1 查看 Windows 的网络信息7.2 查看 Ubuntu 的网络信息7.3 修改配置文件7.4 测试 Windows 能否互相…

springcloud--xxl-job

xxl-job 虽然java自带定时器&#xff0c;但是在springcloud内&#xff0c;如果对多个模块进行统一任务调度&#xff0c;这是自带的定时器就显得不够用&#xff0c;这时就可以使用xxl-job。 xxl-job是一个轻量级分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习…

智能门锁-手机应用相机国产、非国产统计参数对比分析

智能门锁-手机应用相机国产、非国产统计参数对比分析 智能门锁应用 从2019年1月1日至2020年12月31日&#xff0c;3D人脸识别智能门锁在全市场统计中&#xff0c;总销量已接近20万套。其中德施曼以其先发优势&#xff0c;良好的市场定位和大力度的推广&#xff0c;成为市场发展…

C语言萌新如何使用printf函数?

&#x1f40e;作者的话 如果你搜索输入输出函数&#xff0c;那么你会看到输入输出流、Turbo标准库、标准输出端、stdout什么什么乱七八糟的&#xff0c;作为一个萌新&#xff0c;哪懂这些&#xff1f; 本文介绍萌新在前期的学习中&#xff0c;常用的输入输出函数及其功能~ 跳跃…

【Python标准库】LZ77编码的基本原理和lzma模块

文章目录lz77编码lzma模块调用lz77编码 Python标准库总共提供了三种压缩算法&#xff0c;分别是zlib, bz2以及lzma&#xff0c;并且位这三个模块提供了高度相似的API&#xff0c;考虑到zlib中已经对很多定义做了详尽的解读&#xff0c;本文主要介绍一下lzma算法&#xff0c;然…

vue使用rem, vscode使用px to rem工具

一、使用px2rem-loader实现pxtorem 1、安装 首先&#xff0c;我们使用 vue 的脚手架 vue-cli 初始化一个 webpack 项目&#xff08;前提是已经安装过 vue-cli&#xff0c;具体不再阐述&#xff09;&#xff0c;一些选项根据自己项目需要选择。 vue init webpack my-app命令执…

深度学习算法数据-网络-算法总结

深度学习算法数据-网络-算法总结 1 数据集大全 通用2D检测数据集、交通标志、车道线、行人检测、3D目标检测、ReID等数据集 2 Backbone知识汇总 该部分主要是针对常见CNN结构以及ViT结构进行汇总&#xff0c;同时也包含轻量化CNN Backbone以及轻量化Transformer模型等高性…

详解pandas的read_excel函数

一、官网参数 pandas官网参数网址&#xff1a;pandas.read_excel — pandas 1.5.2 documentation 如下所示&#xff1a; 二、常用参数详解 1、io 一般指读取文件的路径。【必须指定】 import pandas as pddf pd.read_excel(r"C:\Users\wwb\Desktop\data3.xlsx")p…

chromecast激活

小白误入旁路由添加dns解析&#xff08;1&#xff09;外部网络设置不动&#xff0c;内部网络设置第一个dns服务器指向旁路由自己&#xff0c;第二个dns服务器用常用的保证能用就行&#xff08;2&#xff09;添加dns解析&#xff0c;把安卓ntp&#xff0c;更新时间的服务器链接成…

一文读懂CPU工作原理、程序是如何在单片机内执行的、指令格式之操作码地址码

文章较长,大家可选择性阅读,嘎嘎细 计算机结构 CPU的运行原理 CPU的控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指令读到指令寄存器进行译码。由运算器执行对应的机器指令,并将结果通过地…

如何用C++扩展NodeJS的能力?

文章目录前言C结合NodeJS的魅力C和NodeJS怎么结合通过Addon增强NodeJS环境的准备1. node-gyp2. nan (Native abstraction for NodeJS)编写Addon的C代码JS方法的C表示JS方法的传入参数 v8::Argument进阶进阶1: 输出一个JS包装类型进阶2: 使用多线程异步计算最后前言 Javascript…