计算机组成原理复习(1)
考研复习第二天
计算机组成原理相关内容的复习
计算机基础
原码,补码,反码,移码
计算机基础计算机层次结构扔点错题上去:
完整的计算机系统应该包括 配套的硬件设备和软件系统。
存放当前执行指令的寄存器是 IR(Instruction Register)
运算器中不包含地址寄存器,地址寄存器集成在CPU中。
系列机的基本特性是:指令系统向后兼容。
计算机上层和下层的关系是:上层对下层扩展,下层是上层实现的基础。
计算机硬件能够直接执行的只有机器语言,硬件描述语言也需要经过一定的翻译才可以运行。
冯诺依曼计算机区分数据和指令主要是根据指令操作码的译码结果。
软件和硬件逻辑上等效,硬件执行速度比软件快。
计算机的性能指标
字长:计算机进行一次整数运算所能处理的数据位数,和寄存器位数,加法器有关,他们通常也相等。
数据通路带宽:外部数据的总线宽度,和内部寄存器数据总线宽度有区别。
主存容量:可以用字节表示,也可以用某数乘上字长表示,通俗点讲就是内存大小, MAR 的位数反映了存储单元的个数和可寻址的最大范围。
运算速度:
吞吐量:单位时间内处理请求的数量。
响应时间:发出请求后 ...
计算机网络复习(2)
物理层
通信基础概念数据、信号、码元
数据:传送信息的实体,传输方式有串行和并行
信号:数据的物理表现,如电信号和磁信号。
码元:在使用时间域(或简称为时域)的波形表示数字信号时,代表不同离散数值的基本波形。
通信上的概念信道按照传输信号形式的不同,可分为模拟信道和数字信道。按照传输介质划分可以分为有线信道和无线信道。
信号有基带信号(数字信号)和宽带信号(模拟信号)。
基带信号(即基本频带信号)—— 来自信源的信号。像计算机输出的代表各种文字或图像文件的数据信号都属于基带信号。基带信号往往包含有较多的低频成分,甚至有直流成分,而许多信道并不能传输这种低频分量或直流分量。因此必须对基带信号进行调制 (modulation)。
基带调制:仅对基带信号的波形进行变换,使它能够与信道特性相适应。变换后的信号仍然是基带信号。把这种过程称为编码 (coding)。
带通调制:使用载波 (carrier)进行调制,把基带信号的频率范围搬移到较高的频段,并转换为模拟信号,这样就能够更好地在模拟信道中传输(即仅在一段频率范围内能够通过信道) 。
带通信号:经过载波调制的信号。
通信 ...
2023的目标
2022年也快过去了,回想起2021年的最后一天,当时暗下决心要完成的目标,如今完成了多少?
2022目标完成情况:
CET4 pass(不挣扎了)
ZJCTF 一等√(check)
Linux 内核学习(根本没动过)
ACM省银(遗憾打铁,ICPC幸运拿铜)
CISCN FINAL√(二等)
期末考试考高点(根本不想学,甚至奖学金跟我已经没有关系了)
在 2022 这个特殊的时间,也发生了很多事,自己内心的想法也发生过很多改变。中间很长一段时间迷失过,做 web 安全,尝试挖洞,但是最终也是无果,浪费了小半年时间,直到身边很多的师傅提醒我,劝我,我才醒过来,这也让我更加坚定地往二进制安全的路上继续走。可能正是浪费的这些时间里,大部分的目标没能完成,但是现在还不晚,浪费的这些时间也跟让我看清了接下来的路该怎么走了。
2022的结束,2023的开始,将会有新的目标去追求,希望明年今日,我能一一完成。
学会lua和go语言的开发&逆向
深入学习一下 C++ 语言
CS:APP 刷完
继续去年的目标!ACM省银,或者是 ICPC 能冲一个牌子。
CISCN FINAL,趁着 ...
Golang入门学习(12)
Go的第12课——包管理
包包可以区分命令空间(一个文件夹中不能有两个同名文件),也可以更好的管理项目。go 中创建一个包,一般是创建一个文件夹,在该文件夹里面的 go 文件中,使用package关键字声明包名称,通常,文件夹名称和包名称相同。并且,同一个文件下面只有一包。
创建包新建一个文件夹,文件夹名就是包名,在里面所有的 go 文件中加入一句 package xxx。
比如我要创建一个 DAO 包。
1234567package DAOimport "fmt"func test() { fmt.Println("DAO:Test")}
导入包要使用某个包下面的变量或者方法,需要导入该包,导入包时,要导入从 GOPATH 开始的包路径,例如,在 service.go 中导入 DAO 包,但是需要点小小的操作。
注意事项
一个目录下只能有一个package
import 后面的其实是GOPATH 开始的相对目录路径,包括最后一段。但由于一个目录下只能有一个package,所以import 一个路径就等于是 imp ...
Golang入门学习(11)
Go的第11课——接口
接口基本用法接口像是一个公司里面的领导,他会定义一些通用规范,只设计规范,而不实现规范。
go 语言的接口,是一种新的类型定义,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。
语法格式和方法非常类似。
12345678910111213141516171819/*定义接口*/type interface_name interface { method_name1[return_type] method_name2[return_type] method_name3[return_type] ... method_namen[return_type]}/*定义结构体*/type struct_name struct{ /*variables*/}/*实现接口方法*/func(struct_name_variable struct_name)method_name1()[return_type]{ /*方法实现*/}fun ...
Golang入门学习(10)
Go的第10课——类型定义和结构体
类型定义定义语法跟之前的函数类型一样,使用 type 关键字
1type newtype oldtype
这里我们是给 oldtype 定义了一个别名,相当于是 typedef 只是 go 里面相对于 C 是反着写的。
123456789101112131415161718package mainimport "fmt"type pid_t intfunc main() { var pid pid_t pid = 1 if pid == 1 { fmt.Println("SYSTEM PROCESS") } else { fmt.Println("COMMON PROCESS") }}/*SYSTEM PROCESS*/
结构体基本介绍go语言没有面向对象的概念了,但是可以使用结构体来实现,面向对象编程的一些特性,例如:继承、组合等特性。
在这里我们结合上面的定义去创 ...
Golang入门学习(9)
Go的第9课——特殊语句&指针的基本应用
defer语句go语言中的 defer 语句会将其后面跟随的语句进行延迟处理。在 defer 归属的函数即将返回时,将延迟处理的语句按 defer 定义的逆序进行执行,也就是说,先被 defer 的语句最后被执行,最后被 defer 的语句,最先被执行。
下面给个例子:
123456789101112131415161718package mainimport "fmt"func main() { fmt.Println("start") defer fmt.Println(1) defer fmt.Println(2) defer fmt.Println(3) fmt.Println("end")}/*startend3 2 1 */
可以发现 defer 申明的语句一律是在最后执行,并且先被 defer 的语句最后执行。
它可以有以下用途:
关闭文件句柄
锁资源释放
数据库连接释放
这样就可以在打开一个文件句柄 ...
Golang入门学习(8)
Go的第八课——闭包
闭包基本介绍闭包就是一个函数和与其相的引用环境组合的一个整体(实体)
例子给一个这样的累加器的例子
123456789101112131415161718192021package mainimport "fmt"func Addupper() func(int) int { var n int = 10 return func(x int) int { n = n + x return n }}func main() { f := Addupper() fmt.Println(f(1)) fmt.Println(f(2))}/*1113*/
在 Addupper 中定义了一个 n 变量返回了一个匿名函数,匿名函数的作用就是和外部的 n 相加然后返回。
这个匿名函数和外部的变量 n 就构成了一个闭包,我们调用 Addupper 相当于是得到了一个对象,这个 n 就是对象的属性,返回的结果就是对象的方法。
一开始看着确 ...
Golang入门学习(7)
Go的第七课——函数
函数函数简介函数是 golang 中的一级公民,我们把所有的功能单元都定义在函数中,可以重复使用。函数包含函数的名称、参数列表和返回值类型,这些构成了函数的签名(signature),有点像 C++ 的名称粉碎机制。
函数的特性
go语言中有3种函数:普通函数、匿名函数(没有名称的函数)、方法(定义在struct上的函数)。receiver
go语言中不允许函数重载(overload),也就是说不允许函数同名。
go语言中的函数不能嵌套函数,但可以嵌套匿名函数。
函数是一个值,可以将函数赋值给变量,使得这个变量也成为函数。
函数可以作为参数传递给另一个函数。I函数的返回值可以是一个函数。
函数调用的时候,如果有参数传递给函数,则先拷贝参数的副本,再将副本传递给函数。
函数参数可以没有名称。
函数定义根据如下格式定义
123func function_name([parameter_list]) [return_list]{ //main logic}
最简单的一个加法函数:
123456789101112131415package m ...
Golang入门学习(6)
Go的第六课——复杂数据类型的定义和使用
数组(Array)定义数组是相同数据类型的一组数据的集合,数组一旦定义长度不能修改,数组可以通过下标(或者叫索引)来访问元素。
定义方法:
1var identifier [size]type
但是数组初始化又有点奇怪,并不能直接在后面等号,而是这样子去初始化
1var identifier = [size]type{val1, val2 ...}
当然,如果少了 var 那就要把等号变为 :=。如果是初始化,那么 size 可以填 ... 来让后面给的值决定前面的 size。
除此之外还可以指定下标初始化。
12345678package mainimport "fmt"func main() { var s = [...]int{0: 1, 2: 2, 1000: 9} fmt.Print(s[1000]) }
函数 len 可以返回一个数组的长度,目测不止,应该可以返回很多种的集合类数据的长度。
1234567891011packa ...