计算机原理
内容一 CPU
记住运算的结果是存入累加器里的
操作码和地址码是存入指令寄存器里的,而且它是小透明
PC除了下一条指令地址,也负责送到地址总线上
内容二 计算
末尾减起始记得加1
内容三 原反补码
补码的补码是原码
8位整数补码的范围是-128-127
内容四 浮点数
阶码用移码,尾数用原码,阶码提高数的大小,尾数提高精度
相加要做的事情就是小阶对大阶,尾数向右移动
定点小数和定点整数的范围,假设为8位
原码=反码 补码=移码
定点整数 -2的7次方 - 1 到 2的7次方减一 -2的7次方 到 2的7次方减一
定点小数 -(1-2的-7次方) 到 (1-2的-7次方) -1 - (1-2的-7次方)
浮点数转换就是阶码,尾数变原码算
内容五 寻址
先说结论,没有结论
内容六 效验码
海明码为1啥也不是,为2牛逼一点了,可以检错,为3就不得了了,可以纠错
循环冗余码距为2
然后就是经典公式
k是校验位,n是数据位 2的k次方-1 要大于 n+k
内容七 RISC和CISC
RISC是硬布线(组合逻辑),CISC是微程序
RISC的通用寄存器很多,CISC一般
RISC支持流水线,CISC不支持
最长的指令流水线是操作周期
吞吐量是各流水线操作时间总和的倒数
吞吐量的公式为 (执行一条指令的时间 + (n-1)*最长时间段)/n
内容八 存储器
相联存储器是按内容访问的
按寻址方法划分有
随机存储器:访问任何一个存储单元时间相同
顺序存储器:与存储位置相关
直接存储器:介于上面2个
SRAM静态是Cache
DRAM是要刷新的,动态适合于主存
多次访问同一地址是时间局部性,访问相邻地址是空间局部性
内容九 Cache
冲突最小的是全相联映像,可以随意装入cache
cache和主存的地址影像有硬件完成,因为cache是透明的
内容十 中断
记几个点就会了
中断向量:提供一个东西,是中断服务程序的入口地址,也是闯入第一关了
中断响应时间:从中断请求开始到中断服务程序,延迟这一块
保存现场:返回原来执行的原程序,回家了,当然也是为了能返回到原程序继续执行
多级中断嵌套可以用堆栈先进先出实现,有意思
内容十一 IO控制方式
这里就比较恶心了,直接记忆!
程序查询方式:CPU和IO只能串行工作,CPU要一直查有没有好,比较捞,而且一次只读写一个字,还要cpu把数放入内存,捞中之捞,cpu给你查询真是日了狗了
中断驱动方式:CPU和IO终于可以并行工作了,因为只要给CPU中断信号告诉它io完成了就行,但还是有些缺点,比如之前的读写一个字和cpu把数放入内存还是没改,依旧捞
直接存储器存取方式:并行工作不可能少,而且在传送数据块的开始和结束时才要cpu,更牛逼的是外设写入数据到内存,一次读写是块而不是字!
内容十二 总线
数据,地址,控制总线
内存为32GB,则地址总线宽度为32位,字长为32则数据总线为32位
小公式:传送一个字除以几个时钟周期再乘以时钟频率(MHz)可以算出总线的带宽MB/s
内容十三 加密技术
公钥:挂个奥秘,加密!
是什么奥秘呢,点一下认证一下,原来是以眼还眼
私钥:终于到我的回合了,嘻嘻,让我好好解密里面的奥秘吧!
盯!你已经触发奥秘,请签名。。
数字签名的作用是防止假冒和否定,也就是说我这个奥秘就是以眼还眼,必须给你一拳才行,所以叫做真实性
甲和乙要进行通信,甲发送的信息有数字签名(甲的私钥),乙收到后用甲的公钥来验证真实性,这就是真实性
下面是重量级人物CA
用户A从CA获得用户B的数字证书,该证书用CA的私钥作为数字签名,用CA的公钥来验证数字证书的真实性
内容十四 加密算法
对称加密也就是私钥也可以叫共享密钥加密算法(什么玩意啊):DES,3DES,RC-5,IDEA,AES,RC4,这些都别记
非对称加密就是公钥:记!RSA,ECC,DSA,怎么记?
RSA R星的SA
ECC eccentric古怪的。。。
DSA D星的SA(什么jb)
还有其他的一些东西:Hash函数,MD5是摘要算法,SHA-1是安全散列算法,杀!
内容十五 可靠性公式
并联就 1-(1-R1)(1-R2)(1-R3)。。。,串联就乘
R * (1-(1-R)(1-R)) *(1-(1-R)(1-R))
内容十六 流水线公式
还有个流水线的公式我其实已经在上面写完了
内容十七 杂题
过
程序设计语言
内容十八 编译和解释程序
先看解释器:
翻译源程序时不生产独立的目标程序
解释程序和源程序要参与到程序的运行过程中
虽然不产生中间的目标程序,但解释程序和源程序还是要那个参与,听我解释!
编译器
翻译源程序产生独立的目标程序
机器上运行的是与源程序等价的目标程序
源程序和编译程序都不再参与目标程序的运行过程
恰恰相反了属于是
内容十九 语言基本成分
顺序,选择,循环 基本控制结构
数据必须具有类型,为什么呢
因为可以合理分配存储单元 分配!
因为可以对参与表达式计算的数据的检查 检查!
因为可以规定取值范围然后能进行运算 范围!
内容二十 值和地址调用
是实参传形参
传值不能实现双向传递数据结果
引用传递不能是常量,表达式
传过去之后,x不变,a会变,来算,x=11,a=1+11 = 12,回去的时候,main的x发生变化,12
内容二十一 编译解释翻译阶段
这个内容相当恶心,来背!
编译有词法,语法,语义分析,中间代码,代码优化,目标代码
解释有词法,语法,语义分析
他们俩的词法,语法,语义不可省略也不可交换顺序
编译器的中间代码和代码优化可以不要
内容二十二 符号表
先明白符号表是干什么的
不断收集,记录,使用源程序的相关符号的类型和特征
纪律源程序的各个字符的必要信息,辅助语义的正确性检查和代码生成
也就是符号表和源程序杠上了,寄生虫一样
内容二十三 词法语法语义
也是给相当恶心的内容呢,开背!!
先词法分析一下,输入的是源程序,输出的记号流
作用是分析程序的字符,字符构成的符号是否符合程序语言规定
哎哟wc,这是要把字符怎么样
语法分析继续哈,输入记号流,输出语法树(分析树)
呵呵,变成树了是吧,可以发现程序中所有!!什么!所有的语法错误!!
对各条语句结构分析和句子结构是否正确
语义分析 输入 语法树
是进行类型的分析和检查,这次是类型了
可以分析静态语义错误,不能分析动态语义,动态语义是运行才能发现的
目标代码生成
与机器密切相关,比如寄存器的分配工作就是处于目标代码的生成
内容二十四 动态语义初值
不多说啊,就是和上面的差不多
内容二十五 中间代码生成
中间代码生成有后缀式,三地址码,三元式,四元式,树和图的形式
中间代码与具体机器无关,可以用不同高级程序语言翻译成同一种中间代码
中间代码可以跨平台 中间代码,你是自由的
因为和机器无关,所以可以有利于进行与机器无关的优化处理和提高编译程序的移植性
内容二十六 正规式
就注意点 *可以是0个也可以是多个,记住这个很重要的
内容二十七 有限自动机
有限自动机是(不确定的)NFA或(确定的)DFA,它是词法分析的适当工具
倒3是空的意思
内容二十八 上下文无关
大多数语法规则用上下文无关描述就可以了
内容二十九 语法树
后缀表达式(逆波兰表达式)罢了,用栈求值,优先级:括号>关系运算>与>或
x-(y+c)*8 -> x-"yc+"*8 -> x-"yc+8*" -> "xyc+8*-"
如果遇到树,要求后缀表达式,就后缀遍历就行了
内容三十 杂题
编译过程中用的地址是逻辑地址,程序运行时是物理地址
递归下降和预测分析法是自顶向下的
算符优先和LR分析和移进-归约是自底向上的
脚本语言与动态语言和解释语言挂钩
预处理 - 编译 - 汇编 - 链接
数据结构
内容三十一 复杂度
记得 n的x次方 小于 2的n次方 小于 n!拿n=10举例就行
内容三十二 递归式复杂度
又是一个强力的公式
T(n) = aT(n/b) + f(n) 请特别关注a和b的位置
若f(n) = n的logb“a-x” 那T(n)就是n的logb“a”,这里x随便取只要能满足f(n)
如果不是就在后面加上lg“k"n
若f(n) = n的logb“a”lg“k"n ,T(n)就是n的logb“a”lg“k+1"n这里有+1
A要快于B的算法,那A的复杂度就要小于B
内容三十三 线性表
这章得靠理解了
如尾结点删除和插入的复杂度分别On和O1
因为删除尾指针就不知道上一个节点是什么了,所以就On了,如果采用顺序表就全是O1,因为尾节点我们很容易就知道
常量级就是O1,顺序表就查是O1,其他On,线性表就捞完了,全是On
内容三十四 栈
嵌套调用(递归调用)用的是栈
内容三十五 队列
要求队头元素指针(Q.rear - Q.len + 1 + M) % M
队尾元素指针(Q.front + Q.len - 1 + M) % M
求长度 (Q.rear - Q.front + M)%M
理解公式
+M防止下溢出
%M防止上溢出
双端队列这里有个混淆点,那就是队列是先进先出,而此处的双端队列进出队列在同一端口,单端口就会像栈一样后进先出了,可以想象成这个管子中间做了一个隔断
内容三十六 队列与栈
入队与出队序列一定相同,入栈与出栈不一定相同
内容三十七 串
主串是n , 模式串是 m
kmp最好的时间复杂度 Om m次 一次就出来了
最坏Onm(n-m+1)m次倒霉倒霉倒霉
平均是On+m (n+m)/2值得记忆一下
然后就是喜欢靠什么next
举个例子
abaabaca 一开始什么都没有 就0
这里就一个a 不存在左右对称 就 1
然后是ab 左右没有对称的地方,1
aba,a和a一部分对称了 2
abaa,a和a一部分对称了 2
abaab ab和ab对称了 3
abaaba aba和aba对称了 4
abaabac 没有对称的地方 1
abaabaca 结束
答案就是01122341
内容三十八 数组计算
一个数组是arr[M,N]按列的话,就是j的大小为M了
按行存储 i>=j 下三角 从0开始的公式 2/(i(i+1)) + j + 1
i<=j i和j反过来
按行存储 i>=j 下三角 从1开始的公式 2/(i(i-1)) + j
i<=j i和j反过来
求具体位置时 0开始的公式 2i + j +1
1开始 2i + j -2
内容三十九 树
若想求一个树的结点总数,那它一定是所有结点的度数之和 + 1
还有一个方法大家想不想听啊(无人在意)
好吧,就是n0(叶子结点) + nk(度为k) = n
内容四十 二叉树
满二叉树算层数公式 log2n + 1
还有一个二叉树经典公式 n0 = n2 + 1
4个节点的二叉树有14种形态,因为 (n+1)/C上n下2n
内容四十一 树的遍历
我是高手,我不说
内容四十二 二叉排序树
又叫二叉查找树
小的左边放,大的右边放
任意一个节点,节点的关键字有序排列
内容四十三 哈夫曼
最优二叉树叫哈夫曼树
采用的是贪心策略
如果遇到 下面2个最小节点是17,24,而之前合起来的那个节点是17,则17与17和一块,然后24
如果遇到 最小节点为13,17,那么就这2个就和一块,因为越小越牛逼
内容四十四 线索二叉树
先说结论,还是没有结论
内容四十五 图的性质
无向图中,顶点的度数之和始终为2e (画图就知道)
内容四十六 邻接矩阵和邻接表
知道邻接矩阵怎么画吗!立即展示!
所以非0个数,有向图是e个,无向图是2e个
邻接矩阵适合稠密图(边多)
邻接表适合稀疏图(边少)
内容四十七 图的遍历
时间复杂度 矩阵是O(n2)不必多想
邻接表是O(n+e)
深度优先:前进!不要后退,没路了再退
广度优先:先访问一个把能访问的都访问了
内容四十八 拓扑结构
没有入度就可以删除,而且没有回头箭头的拓扑结构
内容四十九 折半查找
二分不能链式,谁在链式二分我笑谁
要有序!要顺序存储!
然后是它是静态查找,什么你还想知道谁是静态??
可以,我让你明明白白,还有顺序,折半,分块 ,怎么样,分块也是静态哦
其他全部动态吧,累了
最多会找log2n + 1次
平均查找长度是经典的2/(n+1)
然后是构建关键字的比较序列
这个记住,只能出现
大大大大大
小小小小小
小大小大小
大小大小大
想想就知道的
内容五十 哈希表
装填因子越大冲突越大,它取决于装入的记录除以哈希长度
构造时,要尽量所有组成部分都起作用
而装填因子p取<=n的质数!!这个挺重要
而且只学了线性侦探
同义词就是取模一样。。太n