-
NAT地址转换实验
2020-07-31 17:40:22由于IP地址有限,又分为私网和公网地址,为了节省IP地址,私网地址可与公网地址重复,但不能出现在公网当中,当需要与公网数据通信时,则出现了一种地址转换技术,即NAT地址转换,通过在路由器上的配置实现。...NAT地址转换
由于IP地址有限,又分为私网和公网地址,为了节省IP地址,私网地址可与公网地址重复,但不能出现在公网当中,当需要与公网数据通信时,则出现了一种地址转换技术,即NAT地址转换,通过在路由器上的配置实现。数据出路由器转换的是源IP地址,数据进路由器转换的是目标IP地址。
NAT类型
- 静态NAT:一个私网IP地址对应一个公网IP地址,并未节省IP地址
- 动态NAT:多个私网IP地址对应多个公网IP地址,并不节省IP地址
- EasyIP:多个私网IP地址对应外网口公网IP地址,最节省IP地址
- NAT Server(映射)如下图:
实验拓扑
PC1采用静态NAT地址转换,在R1上配置,进入外网端口,配置如下:
[R1-GigabitEthernet0/0/0]nat static global 8.8.8.8 inside 192.168.10.10
PC2和PC4采用动态NAT地址转换,建立地址池1,在池中获取公网IP,配置如下:
[R1]nat address-group 1 212.0.0.100 212.0.0.200
[R1]acl 2000
[R1-acl-basic-2000]rule permit source 192.168.20.0 0.0.0.255
[R1-acl-basic-2000]rule permit source 11.0.0.0 0.0.0.255
[R1-acl-basic-2000]q
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]nat outbound 2000 address-group 1 no-patPC3采用EasyIP,配置如下:
[R1]acl 3000
[R1-acl-adv-3000]rule permit ip source 192.168.30.0 0.0.0.255
[R1-acl-adv-3000]q
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]nat outbound 3000服务器上用NAT sever
[R1-GigabitEthernet0/0/0]nat server protocol tcp global 9.9.9.9 www inside 192.168.10.100 www
所有配置如下图所示:
R1
[R1]int g0/0/1 [R1-GigabitEthernet0/0/1]ip add 11.0.0.1 24 [R1-GigabitEthernet0/0/1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 12.0.0.1 24 [R1-GigabitEthernet0/0/0]q [R1]ip route-static 192.168.10.0 24 11.0.0.2 [R1]ip route-static 192.168.20.0 24 11.0.0.2 [R1]ip route-static 192.168.30.0 24 11.0.0.2 [R1]ip route-static 0.0.0.0 0.0.0.0 12.0.0.2 [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]nat st [R1-GigabitEthernet0/0/0]nat static global 8.8.8.8 inside 192.168.10.10 [R1-GigabitEthernet0/0/0]q [R1]nat address-group 1 212.0.0.100 212.0.0.200 [R1]acl 2000 [R1-acl-basic-2000]rule p [R1-acl-basic-2000]rule permit s [R1-acl-basic-2000]rule permit source 192.168.20.0 0.0.0.255 [R1-acl-basic-2000]rule permit source 11.0.0.0 0.0.0.255 [R1-acl-basic-2000]q [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]nat outbound 2000 address-group 1 no-pat [R1-GigabitEthernet0/0/0]q [R1]acl 3000 [R1-acl-adv-3000]rule permit ip source 192.168.30.0 0.0.0.255 [R1-acl-adv-3000]q [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]nat outbound 3000 [R1-GigabitEthernet0/0/0]nat server protocol tcp global 9.9.9.9 www inside 192.168.10.100 www
R2
[R2]int g0/0/0 [R2-GigabitEthernet0/0/0]ip add 12.0.0.2 24 [R2-GigabitEthernet0/0/0]int g0/0/1 [R2-GigabitEthernet0/0/1]ip add 13.0.0.1 24 [R2-GigabitEthernet0/0/1]q [R2]int loop 0 [R2-LoopBack0]ip add 114.114.114.114 32 [R2]ip route-static 11.0.0.0 24 12.0.0.1 [R2]ip route-static 192.168.10.0 24 12.0.0.1 [R2]ip route-static 192.168.20.0 24 12.0.0.1 [R2]ip route-static 192.168.30.0 24 12.0.0.1 [R2]ip route-static 8.8.8.8 32 12.0.0.1 [R2]ip route-static 9.9.9.9 32 12.0.0.1 [R2]ip route-static 212.0.0.0 24 12.0.0.1
SW1
[SW1]int g0/0/1 [SW1-GigabitEthernet0/0/1]p l a [SW1-GigabitEthernet0/0/1]p d v 40 [SW1-GigabitEthernet0/0/1]int g0/0/2 [SW1-GigabitEthernet0/0/2]p l a [SW1-GigabitEthernet0/0/2]p d v 10 [SW1-GigabitEthernet0/0/2]int g0/0/3 [SW1-GigabitEthernet0/0/3]p l a [SW1-GigabitEthernet0/0/3]p d v 20 [SW1-GigabitEthernet0/0/3]int g0/0/4 [SW1-GigabitEthernet0/0/4]p l a [SW1-GigabitEthernet0/0/4]p d v 30 [SW1-GigabitEthernet0/0/4]int g0/0/5 [SW1-GigabitEthernet0/0/5]p l a [SW1-GigabitEthernet0/0/5]p d v 20 [SW1-GigabitEthernet0/0/5]int g0/0/6 [SW1-GigabitEthernet0/0/6]p l a [SW1-GigabitEthernet0/0/6]p de v 10 [SW1-GigabitEthernet0/0/6]q [SW1]int vlanif 10 [SW1-Vlanif10]ip add 192.168.10.1 24 [SW1-Vlanif10]int vlanif 20 [SW1-Vlanif20]ip add 192.168.20.1 24 [SW1-Vlanif20]int vlanif 30 [SW1-Vlanif30]ip add 192.168.30.1 24 [SW1]ip route-static 0.0.0.0 0.0.0.0 11.0.0.1 [SW1]int vlanif 40 [SW1-Vlanif40]ip add 11.0.0.2 24
-
操作系统之内存管理(内存地址的转换,内存的扩充,内存的保护,内存的分配与回收)
2020-04-18 20:25:06内存管理可分为四部分 内存地址的转换(逻辑地址到物理地址) 1.绝对装入(早期单道批操作系统) 2.静态重定位(多道批操作系统) 3.动态重定位 内存的扩充(虚拟内存) 内存的保护 内存的分配与回收 1.连续分配...内存管理是一个很大的概念,那么让我们开始进入内存的世界吧
内存管理可分为四部分
- 内存地址的转换(逻辑地址到物理地址)
1.绝对装入(早期单道批操作系统)
2.静态重定位(多道批操作系统)
3.动态重定位 - 内存的扩充(虚拟内存)
- 内存的保护
- 内存的分配与回收
1.连续分配管理方式(重点)
2.非连续管理方式(大重点 点击查看)
前三点只需要了解即可,第四点内存的分配为重点
内存地址的转换
小冯:
乔老师 什么时候会用到内存地址的转换啊?
乔哥:
要说这个问题,就必须谈谈程序的编写到运行间发生了什么
程序在被编写后,需要进行编译,链接 和装入。编译: 本质上是将源程序(.c)编译成若干个目标模块(就是将高级语言转化为机器码 .obj ),每一个目标模块指令中的地址都是逻辑地址,并且每个逻辑地址都是从零开始的。
链接: 将各个目标模块整合为一个装入模块(.exe),并且将逻辑地址合并
装入: 将目标模块放入内存的相应位置即可但!!!问题是目标模块的地址是逻辑地址,但内存中地址是物理地址,这该怎么转换呢?
小冯:
对呀,该怎么办呢乔哥 这里有三种方法
1.绝对装入 这种方法是在编译阶段,就已经知道了程序要放到内存的那个位置,直接将指令中的逻辑地址改为实际的物理地址,常用于单道批操作系统
2.静态重定位装入 在装入时将逻辑地址改为物理地址,但需要一次性分配所需全部的内存空间,且不可再修改地址
3.动态重定位装入(常用 之后的分页分片都是这种) 在装入时并不修改逻辑地址 ,只有在程序运行时再写改为物理地址。怎么修改呢? 系统会设置一个重定位寄存器(该寄存器会储存程序在内存中的起始地址),将起始地址与逻辑地址相加即可得到物理地址了小冯: 能讲讲链接吗
乔哥:
小冯: 哇,知识点还是很多啊,需要都记住吗。
乔哥: 不需要的,这里考试主要是选择题,重在理解
内存的扩充
小乔:老师我不太理解 。。。。。。。。。。。
乔哥: 很简单的啦 通常是两种方法 覆盖 和 对换
.
覆盖:将程序分为多个模块,将常用的模块常驻内存,不常用的使用是在调入内存。
将内存分为固定区和若干覆盖区.
“”固定区“”:常驻内存。“”覆盖区“”:使用时调入内存,不使用时掉出内存。例如有A块调出,B块便可调入,就可以使"小内存"使用"大程序"啦.
缺点就是: 覆盖结构需程序员声明,对用户不透明,增加了编程负担
.
对换: 在内存不足时,将内存中某些进程按照一定规则放入外存。之前讲的进程调度就是为了实现该动能。点击查看内存的保护
两种方式
1.CPU中设置一对上,下限寄存器,存放用户作业在主存中的下限和上限,每当CPU要访问一个地址时,分别和两个寄存器的值相比,判断有无越界。
2.通过采用重定位寄存器(或基址寄存器)和界地址寄存器(又称限长寄存器)来实现这种保护,重定位寄存器含最小的物理地址值,界地址寄存器含逻辑地址的最大值,每个逻辑地址值必须小于界地址寄存器,内存管理机构动态的将逻辑地址与界地址寄存器进行比较,如果未发生地址越界。则加上重定位寄存器的值后映射成物理地址,再送交内存单元。
内存的分配与回收
连续分配管理方式
-
单一连续分配
内存中只能有一道程序
无外部碎片,有内部碎片 -
固定分区分配
将内存分为大小相等的分区。
无外部碎片,有内部碎片 -
动态分区分配
-
不会预先建立分区,会根据进程的大小动态分配分区
-
无内部碎片,有外部碎片,外部碎片可以通过紧凑技术来解决
-
系统会提供空闲分区链(表),用于存储分区信息
分区回收:回收后有相邻分区合并
1.首次适应算法(效果最好)
2.最佳适应算法(可能导致产生许多小的外部碎片)
3.最差适应算法(可能导致大分区不足)
4.临近适应算法(可能导致大分区不足)
-
小冯:不是说这个知识点很重要吗,为什么讲的这么少
乔哥:这里很多知识单用一个文字很难讲明白,主要供大家梳理框架和复习使用,记住下去一定要看书哦.
创作不易,点个赞吧,亲。
-
为了帮助当前和潜在的多伦多居民更好地了解他们可获得的租金选择,我们创建了一个数据库,其中包含最新的...
2021-02-18 04:01:33为了帮助当前和潜在的多伦多居民更好地了解他们可获得的租金选择,我们创建了一个数据库,其中包含最新的租金清单以及每个地址的居住状况其他指标。 下面概述了提取,转换数据并将数据加载到数据库中的过程。 提炼... -
静态重定位和动态重定位
2016-08-02 11:02:58对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态重定位。 静态重定位:是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的地址。对每...程序执行时,必须将地址空间变为绝对地址才能访问系统分配的内存
地址重定位:操作系统把用户程序指令中的相对地址变换成为所在存储中的绝对地址的过程
地址重定位实现了:从逻辑地址到物理地址的转换
1. 地址的静态重定位
定义:在程序运行之前,为用户程序实行了地址重定位工作
一般由操作系统中的重定位装入程序完成
重定位装入程序的输入:用户把自己的作业链接装配成一个相对于 0 编址的目标程序
过程:
重定位装入程序根据当前内存的分配情况,按照分配区域的起始地址逐一调整目标程序指令中的地址部分。目标程序在经过重定位装入程序加工之后,不仅进入到分配给自己的绝对地址空间中,而且程序指令中的地址部分全部进行了修正,反映出了自己正确的存储位置,保证了程序的正确运行
特点:
在装入前实现调整
地址要有标识
每次装入都要进行定位
装入后地址不再改变(静态)
2. 地址的动态重定位
定义:在程序执行寻址时进行重定位,访问地址时,通过地址变换机构改变为内存地址
用户程序原封不动的装入内存,运行时再完成地址的定位工作
动态重定位需要硬件的支持,要求系统中配备定位寄存器和加法器
特点:
程序可装入任意内存区域(不要求占用连续的内存区)
只装入部分程序代码即可运行
改变系统时不需要改变程序(程序占用的内存空间动态可变,只需要改变定位寄存器中的值即可)
程序可方便共享
对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态重定位。静态重定位:是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的地址。对每个程序来说,这种地址变换只是在装入时一次完成,在程序运行期间不再进行重定位。
优点:是无需增加硬件地址转换机构,便于实现程序的静态连接。在早期计算机系统中大多采用这种方案。
缺点:(1)程序的存储空间只能是连续的一片区域,而且在重定位之后就不能再移动。这不利于内存空间的有效使用。(2)各个用户进程很难共享内存中的同一程序的副本。
动态重定位:是在程序执行期间每次访问内存之前进行重定位。这种变换是靠硬件地址变换机构实现的。通常采用一个重定位寄存器,其中放有当前正在执行的程序在内存空间中的起始地址,而地址空间中的代码在装入过程中不发生变化。
优点:(1)程序占用的内存空间动态可变,不必连续存放在一处。(2)比较容易实现几个进程对同一程序副本的共享使用。
缺点:是需要附加的硬件支持,增加了机器成本,而且实现存储管理的软件算法比较复杂。
现在一般计算机系统中都采用动态重定位方法。 -
操作系统---静态重定位和动态重定位
2018-03-10 16:28:49对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态重定位。静态重定位:是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的地址。对每个...对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态重定位。
静态重定位:是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的地址。对每个程序来说,这种地址变换只是在装入时一次完成,在程序运行期间不再进行重定位。
优点:是无需增加硬件地址转换机构,便于实现程序的静态连接。在早期计算机系统中大多采用这种方案。
缺点:(1)程序的存储空间只能是连续的一片区域,而且在重定位之后就不能再移动。这不利于内存空间的有效使用。(2)各个用户进程很难共享内存中的同一程序的副本。
动态重定位:是在程序执行期间每次访问内存之前进行重定位。这种变换是靠硬件地址变换机构实现的。通常采用一个重定位寄存器,其中放有当前正在执行的程序在内存空间中的起始地址,而地址空间中的代码在装入过程中不发生变化。
优点:(1)程序占用的内存空间动态可变,不必连续存放在一处。(2)比较容易实现几个进程对同一程序副本的共享使用。
缺点:是需要附加的硬件支持,增加了机器成本,而且实现存储管理的软件算法比较复杂。
现在一般计算机系统中都采用动态重定位方法。 -
NAT的类型
2010-04-17 00:10:00NAT设置可分为静态地址转换、动态地址转换、复用动态地址转换三种。静态地址转换将内部本地地址与内部合法地址进行一对一的转换,且需要指定和哪个合法地址进行转换。静态地址转换经常在一个固定的外部的IP地址访问... -
【操作系统】存储管理
2017-04-08 15:47:34重定位就是把逻辑地址转换为绝对地址的工作。其可分为两种: 静态重定位:装入作业前已经转换好动态重定位:程序运行过程中要访问数据时,再进行现场转换 【第三部分】 在存储管理中,单 -
操作系统习题00796.docx
2020-12-12 15:55:32操作系统期末复习资料 一填空每空0.5分共10分请在答题纸上写出各空对应的答案 存储分配方式分为 _分区 分页 _分段 三种...重定位是指程序的 虚拟地址 到实地址的转换根据定位时机可分为静态重定位和 动态地址_重定位两 -
操作系统基础(存储管理)
2018-09-20 04:10:50一、填空 1.将作业相对地址空间的相对地址...4.地址重定位可分为 静态重定位 和 动态重定位 两种方式。 5.在可变分区存储管理中采用最佳适应算法时,最好按 尺寸 法来组织空闲分区链表。 6.在分页式存储管理的... -
第三章
2020-11-28 16:06:26地址转换 内存空间的扩充 覆盖技术 :分固定区和覆盖区 对用户不透明 交换技术 虚拟存储技术 存储保护 设置上下限寄存器 利用重定位寄存器、界地址寄存器进行判断 进程运行基本原理 编译 链接 静态链接 ... -
NAT学习总结~~
2011-07-28 10:44:56NAT网络地址转换;优点:节省IP地址;隐藏内部的IP地址;缺点:增加延迟、丢失端到端IP跟踪过程;需要更多内存存储NAT表,更多CPU处理;NAT分为: 1、 静态NAT 2、 动态NAT;一对多:一个地址可以映射成多个可 -
程序进行重定位的技术按重定位的时机分类
2018-07-02 16:35:00对程序进行重定位的技术按重定位的时机可分为两种:静态重定位和动态重定位。 静态重定位:是在目标程序装入内存时,由装入程序对目标程序中的指令和数据的地址进行修改,即把程序的逻辑地址都改成实际的地址。对每... -
【计算机网络】应用层
2020-05-31 20:43:25顶级域可分为国家和通用两种类型,.com代表公司,.net代表网络服务机构,.gov代表政府机构,.org代表组织。 DHCP协议(动态主机设置协议) DHCP协议提供了即插即用的连网方式,用户不再需要手动配置 IP 地址等信息... -
HAProxy---HAProxy调度算法
2021-02-22 20:07:56HAProxy的调度算法分为静态和动态调度算法 ...其他算法:可基于(hash-type consistent一致性hash) 从静态(hash-type map-base取模法)转换至动态 source #基于源地址hash uri #基于用户请求的URI url -
Gcc 编译的背后(2)链接
2020-03-25 21:36:05因此链接是处理可重定位文件,把它们的各种符号引用和符号定义转换为可执行文件中的合适信息(一般是虚拟内存地址)的过程。 链接又分为静态链接和动态链接,前者是程序开发阶段程序员用 ld(gcc 实际上在后台调用了... -
Go语言基础之反射
2019-04-26 21:02:00Go语言基础之反射 本文介绍了Go语言反射的意义和基本使用。...程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可... -
Golang语言基础之反射
2020-03-06 20:04:31程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到... -
go--反射
2019-06-02 09:32:00程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在编译器就将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可... -
Go语言 反射
2020-02-11 15:02:11程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合... -
Go 语言 反射
2020-03-18 08:51:59程序在编译的时候,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息?(自身的信息包括哪些?) 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、... -
golang碎片整理之反射
2019-09-18 05:22:17本文介绍go语言反射的...程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期将变量的反射信息,如字段名称,类型... -
通过反射修改强转值类型_学习静态语言必须掌握的技能:Go语言反射的意义和基本使用...
2020-12-16 19:47:24程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信... -
18. Go语言基础之反射
2020-12-07 20:05:21程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到... -
十八、Go语言基础之反射
2020-11-11 15:59:22程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到... -
【搞定Go语言】第2天17:反射
2020-11-25 22:07:34程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。因此在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等... -
go语言反射
2020-06-07 21:48:03程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到... -
Golang学习 5
2021-01-08 14:26:43程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可... -
Visual C++开发实战1200例(第1卷).(清华出版.刘锐宁.梁水.李伟明).part1
2016-06-16 01:35:39PDF格式扫描版,全书分为4篇15章,共839页。2011年1月出版。 注:原电子版图书,为阅读方便,本人耗费大量时间添加了详细完整的书签。 全书压缩打包成2部分,这是第1部分。 注:本系列图书的第I、II卷再版时均相应... -
Visual C++开发实战1200例(第1卷).(清华出版.刘锐宁.梁水.李伟明).part2
2016-06-16 01:38:19PDF格式扫描版,全书分为4篇15章,共839页。2011年1月出版。 注:原电子版图书,为阅读方便,本人耗费大量时间添加了详细完整的书签。 全书压缩打包成2部分,这是第2部分。 注:本系列图书的第I、II卷再版时均相应... -
Visual Basic开发实战1200例(第Ⅰ卷).(清华出版.孙秀梅.巩建华).part1
2016-06-14 11:19:42PDF格式扫描版,全书分为6篇20章,共874页。2011年1月出版。 全书压缩打包成2部分,这是第1部分。 注:本系列图书的第I、II卷再版时均相应改名为《xxx开发实例大全》(基础卷)及(提高卷),但内容基本无变化,需要的...
-
1105 Spiral Matrix (25 分)
-
基于电商业务的全链路数据中台落地方案(全渠道、全环节、全流程)
-
智能停车场云平台(附vue+SpringBoot前后端项目源码)
-
2. SpringMVC组件解析
-
Mycat 实现 MySQL的分库分表、读写分离、主从切换
-
基于SSM实现的房屋租赁系统【附源码】(毕设)
-
零基础极简以太坊智能合约开发环境搭建并开发部署
-
NFS 实现高可用(DRBD + heartbeat)
-
物联网基础篇:快速玩转MQTT
-
《ARMv8-A编程指南》.pdf.zip
-
用微服务spring cloud架构打造物联网云平台
-
vc禁用Window的Ctrl+Alt+Delete组合键.visual c++
-
2021年 系统架构设计师 系列课
-
vc游戏手柄操纵杆程序.visual c++
-
(蓝桥杯)拉马车 题解 两种判定游戏无法结束的方法
-
使用vue搭建微信H5公众号项目
-
ESP8266+OLED屏实现天气预报+温度显示+NTP时间同步6屏带中文显示V9.1
-
LeetCode 5689. 统计匹配检索规则的物品数量
-
rdm-2021.0.0.0.exe
-
oduleNotFoundError: No module named ‘encodings‘