计算机网络
计算机网络体系结构计算机网络的定义
一些相互连接的、自治的计算机的集合,互连是指计算机之间可以通过有线或者无线的方式进行数据通信,自治是指独立的计算机,它有自己的软硬件,集合是指至少两台计算机。计算机网络由若干节点和连接这些节点的链路组成,节点可以是计算机,集线器,路由器,交换机等。
计算机网络的功能
数据通信。数据通信是计算机网络最基本和最重要的功能,用来实现联网计算机之间的各种信息传输。
资源共享。资源共享可以是软件共享、数据共享、硬件共享,使计算机网络中的资源互通有无、分工协作,提高资源利用率。
分布式处理。当计算机网络中某个计算机负载过重时,可将其处理的某个复杂任务分配给网络中的其他计算机系统,利用空闲计算机资源提高整个系统的利用率。
提高可靠性。也是在分布式场景,计算机网络中的各台计算机可以互为代替机器。
负载均衡。将任务均匀的分配给计算机网络中的计算机。
计算机网络中的交换技术电路交换最典型的电路交换往就是传统的电话网,电路交换主要分为三步:建立连接、数据传输和释放连接。在进行数据传输之前两个节点之间需要先建立一条专用的物理路径,在传输过程中始终被用户独占,直到通信结束后 ...
leetcode 1-10
1.两数之和给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
123456789101112131415161718class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> res; unordered_map<int,int> m; for (int i = 0; i < nums.size(); i ++ ) { int another = target - nums[i]; if (m.count(another)) { ...
异常和中断
异常和中断的基本概念由 CPU 内部产生的意外事件被称为异常,有些地方也叫做内中断。由来自 CPU 外部的设备向 CPU 发出的中断请求被称为中断,有些地方会称为外中断。异常时 CPU 执行一条指令时,由 CPU 内部检测到的、与正在执行的指令相关的同步事件。中断师一种典型的由外部设备触发的、与当前正在执行的命令无关的异步事件。异常和中断处理过程的描述基本一致:若 CPU 在执行用户程序的第 i 条指令时检测到一个异常事件/中断请求信号,则 CPU 打断当前程序,然后转去执行相应的异常/中断处理程序。若异常/中断处理程序可以解决相应问题,则在异常/中断处理程序的最后,CPU 通过执行异常/中断返回命令,回到被打断的第 i 条或者第 i+1 条指令继续执行。若若异常/中断处理程序不能解决相应问题,则终止程序。通常对于异常/中断的具体处理由操作系统完成。
异常的分类异常分为硬故障异常和程序性异常。硬故障是由硬连线出现的异常引起的,比如存储器校验错、总线错误等。程序性异常也称为软件中断,是指在 CPU 内部因执行指令而引起 ...
中央处理器CPU
CPU 的功能和基本结构中央处理器(CPU)由运算器和控制器组成,控制器负责协调并控制计算机各部件执行程序的指令序列,运算器负责对数据的加工处理。CPU 的具体功能包括:
指令控制。完成取指令、分析指令和执行指令。
操作控制。产生完成一条指令所需要的操作信号,把各种操作信号送到相应部件,从而控制这些部件按指令的要求执行。
时间控制。严格控制各种操作信号的出现时间、持续时间和出现顺序。
数据加工。对数据进行算术运算和逻辑运算。
中断处理。对运行过程中出现的异常情况和中断请求进行处理。
运算器主要由算数逻辑单元(ALU)、暂存寄存器、累加寄存器(ACC)、通用寄存器组(GPRs)、程序状态字寄存器(PSW)、移位寄存器(SR)、计数器(CT)等组成。功能是根据控制器送来的命令,对数据完成算数运算、逻辑运算和条件判断。
控制器主要有程序计数器(PC)、指令寄存器(IR)、指令译码器(ID)、存储器地址寄存器(MAR)、存储器数据寄存器(MDR)以及一些时序电路和信号发生器。主要功能是根据指令的操作码和条件信号,生成当前计算机各部件的控制信号,让整个硬件系统协调运行。
通用寄存器组:用于存 ...
HDU-7276 City Upgrading
City UpgradingThe city where crazyzhk resides is structured as a tree. On a certain day, the city’s network needs to be upgraded. To achieve this goal, routers need to be deployed. Each router covers the node it is placed on and its neighboring nodes. There is a cost $ a_i $ associated with placing a router at each node. The question is: How can the routers be deployed at minimum cost to ensure that every node is covered?
题目大意crazyzhk 所居住的城市被构建成一棵树。在某一天,城市的网络需要升级。为了实现这个目标,需要部署路由器。每个路由器覆盖其所放置的节点及 ...
指令系统
指令又称为机器指令,是指示计算机执行某种操作的命令,一台计算机所有指令的集合构成该机的指令系统,也称指令集。
指令格式指令是一组有意义的二进制代码,通常包括操作码字段和地址码字段。根据地址个数,又分为零地址指令,一地址指令,二地址指令等。
操作码指出该指令应该执行什么操作,具有什么功能,地址码给出被操作的信息的地址。
指令字长是指一条指令所包含的二进制代码的位数,取决于操作码的长度、地址码的长度和地址码的个数。指令字长和机器字长没有固定的关系,可以大于,可以等于,可以小于。
一般可以根据指令字长将指令分为半字长指令、单字长指令、双字长指令。指令字长也会影响取指令的时间开销,单字长指令只需要一次访存就能将指令完整取出,而双字长指令需要两次。
零地址指令只给出操作码,没有显式地址。有些指令不需要操作数,比如空操作指令、停机指令或者关中断指令等,也有在堆栈计算机中的一些运算类指令,会将操作数利用堆栈存取,不需要给出地址。
一地址指令一地址指令一般就两种情况
只有目的操作数的单操作数指令,按地址码读取操作数后,操作完成将结果存回原地址
隐含阅读的目的地址的双操作指令,比如累加器累加,最后运算 ...
高速缓冲存储器
由于程序的转移概率不会很低,数据分布也比较离散,单纯依靠双端口 RAM 和多体交叉编址提高主存系统的效率是有限的,CPU 和磁盘读写速度的矛盾依旧存在。高速缓冲存储器(Cache)拥有比主存更快的存储速度,在主存和 CPU 之间设置 Cache 可以显著提高存储系统的效率。
为什么 Cache 可以提高存储系统的效率?程序访问局部性原理
程序访问局部性原理包括时间局部性和空间局部性。
时间局部性是指最近未来要用到的信息,很可能是现在正在使用的信息。
空间局部性是指指最近未来要用到的信息,很可能与现在使用的信息在空间上是连续的。
高速缓冲技术就是利用局部性原理,把正在使用的部分数据存放在一个高速的小容量 Cache 中,使得 CPU 的大部分操作都是针对 Cache 进行,从而达到提高数据读写效率的目的。
看看一下两段代码
程序 A
123456789int sum(int a[m][n]) { int res = 0; for(int i = 0; i < m; i++) { for(int j = 0; j < n; ...
Codeforces 570D. Tree Requests
题目描述Roman 种植了一棵由 n 个顶点组成的树。每个顶点包含一个小写英文字母。顶点 1 是树的根,其余 n - 1 个顶点在树中都有一个 父顶点。顶点与其父顶点之间有一条边相连。顶点 i 的父顶点是顶点 pi ,父顶点的索引总是小于顶点的索引(即 pi < i )。
顶点的深度是指从根到 v 的路径上沿边的节点数。其中,根的深度等于 1 。
如果我们可以从顶点 u 到达父顶点 v ,那么我们说顶点 u 位于顶点 v 的子树中。其中,顶点 v 位于其子树中。
罗马给出了 m 个查询,其中第 i 个查询由两个数字 vi 、 hi 组成。让我们考虑位于深度 hi 的子树 vi 中的顶点。请判断能否用这些顶点上的字母组成一个 palindrome 字符串。写在顶点上的字母可以按任何顺序重新排列,以组成一个重码字符串,但应使用所有字母。
样例1234567896 51 1 1 3 3zacccd1 13 34 16 11 2
12345YesNoYesYesYes
启发式合并记录每一层节点的信息,判断是否可以组成回文串,检查的话很简单,维护一个cnt[N][26]统计每一层各个字母 ...
Spring Boot 自动装配原理
Spring Boot 的自动装配是在他的核心注解 @SpringBootApplication 实现的,@SpringBootApplication 大概可以看成@Configuration、@EnableAutoConfiguration、@ComponentScan 注解的集合。其中@EnableAutoConfiguration 就算启用 Spring Boot 的自动装配机制,@EnableAutoConfiguration 通过 @Import 导入了 AutoConfigurationImportSelector 这个类,AutoConfigurationImportSelector 类中的 getCandidateConfiguration 方法会将所有自动配置类的信息以 List 的形式返回,并交由 Spring 容器做 bean 来管理。最后,通过@Conditional等条件注解按需加载的配置类,其他的将被过滤掉。
参考 SpringBoot 的启动过程:
当启动 Spring Boot 应用程序的时候,会先创建 SpringApplication 的对象,在对象 ...
做题记录Atcoder-Beginner-Contest-328
A Not Too Hard1234567891011121314151617181920212223242526272829303132#include<bits/stdc++.h>using namespace std;#define int long longint read(){ int x = 0, f = 1; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { x= x * 10 + ch - '0'; ch = getchar(); } return x * f;}signed main(){ int n = read(), x = ...