计算机导论学习-x1aochen
计算机导论学习-xiaochen
1.计算机的早期历史
用于计算():算盘,星盘,计算尺,时钟
费力的事更快,更简单,更精确,加强了我们的能力
计算机首先出现是作为一种职业
步进计算器 计算时间长,造价昂贵
计算表 战场-射程表 使用条件局限
差分机
打孔卡片制表机
2.电子计算机
机电计算机 依靠继电器,计算速度不尽人意,机器损耗成本大
1904年热电子管 损耗低运算速度更快(从机电转向电子)
1947年晶体管 由IBM公司将计算机带进家庭
3.布尔逻辑和逻辑门
"二进制"用开关来代表信息0,1
"NOT AND OR"
NOT 进行反转
AND 2个输入true才能输出true(串联)
OR 2个中的1个true则输出ture(并联)
XOR 2个都true则输出false,1个true1false则输出true
4.二进制
byte字节
32/64位计算机
32位表示最大数为43亿左右 第一位表示正负
64位表示最大数为9.2*10^18
浮点数,小数点可以在数字间浮动
IEEE754 十进制数
Ascll 早期标准 互用性 局限英文 8位
Unicode 解决语言问题 16位
5.算数逻辑单元
ALU(算数逻辑单元) 由一个算术单元和一个逻辑单元构成
算术单元:负责计算机的所有数字操作
半加器
全加器
溢出:两个数字的和太大了,超过用来表示的数位(导致错误)
避免溢出可以加更多的全加器 需要更多逻辑门 时间会延长一点(电子移动需要时间但电子移动速度快)
逻辑单元
6.寄存器&内存
寄存器由锁存器构成
锁存,就是把信号暂存以维持某种电平状态。锁存器的最主要作用是缓存,其次完成高速的控制器与慢速的外设的不同步问题,再其次是解决驱动的问题,最后是解决一个 I/O 口既能输出也能输入的问题。
存1电路
存0电路
门锁
多路复用器:将地址转换成行和列
内存(RAM):可以随时访问任何位置
7.中央处理器CPU
ALU和RAM组成CPU
CPU 取指令->解码->执行
CPU的状态切换速度也叫做时钟速度(单位用赫兹来表示)
时钟:负责管理 CPU 的节奏,以精确的间隔 触发电信号,控制单元会用这个信号,推进 CPU 的内部操作,确保一切按步骤进行
取指令阶段:负责拿到指令。
解码阶段:通过操作码和地址码解码
执行阶段:执行命令
8.指令和程序
指令表
指令寄存器中保存的是00101110。
前四位0010为操作码,通过指令表可知这个指令是LOAD A指令,就是将RAM中的值保存在寄存器A中。
后四位1110保存的是RAM地址,转成十进制就是14。
所以指令00101110的意思就是将RAM中第14位的数据(一共16个)保存到寄存器A中。
对于十进制的17似乎没办法用四位的二进制保存
可以继续往后延申 以至于出现16位 32位
解码:1000 是 ADD 指令,0100 不是 RAM 地址,而是 2 位 + 2 位分别代表 2 个寄存器
<1>2 位可以表示 4 个值,所以足够表示 4 个寄存器
<2>第一个地址是 01, 代表寄存器 B
<3>第二个地址是 00, 代表寄存器 A
执行程序
其需要注意到的地方类似于Python语言中的break和continue
Jump便是其一
Halt立即结束
可是ADDRESS_4 Jump指令跳到了ADDRESS_2以至于永远无法到达Halt结束
也就相当于一个循环与Python中的for while循环可以作出比较
10.早期的编程方式
穿孔纸 插线板 开关
机电计算机用插电板流行(慢,成本高)
冯诺依曼结构:程序和数据都存在的地方
冯诺依曼计算机的标志是一个处理器(有ALU+数据寄存器+指令寄存器+指令地址寄存器)
11.编程语言发展史
伪代码:对程序的高层次描述
(掌握汇编语言是学会逆向的充分必要条件)
汇编器:可以读懂文字指令自动转成二进制指令
汇编器读取"汇编语言"写的程序,然后转成"机器码"
优点:程序员可以专心编程,而不用管底层细节
变量:程序眼只需要创建代表内存地址的抽象
1960年代:ALGOL LISP BASIC
1970年代:Pascal C Smalltalk
1980年代:C++ Objective-C Perl
1990年代:Python Ruby Java
2000年代:Swift C# GO
12.编程原理
控制流语句
最常见if语句(条件语句)
For While Function
模块化编程不仅可以让单个程序员独立制作APP也让团队协作可以写更大型的程序
在现实中,程序员不会浪费时间写指数函数
库
通过库(预先写好的函数)可以提高程序员的工作效率
库类似于像Python里面的math库 random库
eg:From math import*
13.算法入门
算法是密码学和逆向工程的核心部分
算法在密码学和逆向工程中非常重要,因为它们涉及到加密和解密信息的方法。
在密码学中,算法被用来保护信息不被未经授权的用户阅读,例如使用对称密钥加密或非对称密钥加密。
在逆向工程中,算法用来分析和破解加密信息,以获取隐藏的敏感信息。
算法的复杂度:算法的输入大小和运行步骤之间的关系,用来表示运行速度的量级
归并排序算法:
(按序排列 取两个数组 较小在上)
307 239 214
239 -->>307 --->> 239
250 214 --->> 250
214 -->>250 307
复杂度为O(n*log N)
n是需要比较+合并的次数 log N是合并步骤的次数
Dijkstra算法:
是用于计算单源最短路径的图论算法。
它是一种贪心算法,通过不断更新到源点的距离来找到图中的最短路径。
复杂度为O(n^2),其中n是图中的结点数
选择排序法:
它的基本思想是:首先在未排序的数列中找到最小(大)元素,然后将其存放到数列的起始位置;接着,再从剩余未排序的元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
选择排序法的优点是它的实现简单,并且在某些情况下,选择排序法的时间复杂度比其他算法更低。但是,选择排序法的缺点是它不是一个稳定的排序算法,并且它的时间复杂度为O(n^2),因此它不适用于大规模数据的排序。
14.数据处理
数组:创建时有固定大小,不能动态增加大小
下标5表示的是数组[]中的第六个数,下标是从0开始算的
字符串
“”来写入字符串
strcat连接字符串,strcat接收两个字符串,把第二个放到第一个结尾
矩阵表格(可做任何维度)
结构体:由多个变量打包
节点(结构体):存一个变量一个指针
指针:是一种特殊变量,指向一个内存地址
链表:由多个节点构成,其灵活性通过每个节点指向下一个节点实现
循环链表:null代表循环的尽头
队列QUEUE:先进先出(入队,出队)
栈STACKS:后进先出(入栈,出栈)
"树"数据结构
最高节点为根节点
直属上连节点为母节点
其他为子节点
没有子节点的节点叫做叶节点
图状结构节点可以任意指向
15.阿兰·图灵
图灵完备:完整的计算系统
停机问题:运行出结果后停机
图灵测试:如果计算机能欺骗人类相信它是人类,才算智能
16.软件工程
面向对象编程:把函数打包成对象
把大型软件拆解更小的单元,由团队进行协作
API:定义好的程序编程接口(只需知道如何使用)
面对对象的核心:隐藏复杂度,选择性的公布功能
IDE:集成开发环境(eg:pycharm vim)
源代码管理(版本控制):可以跟踪代码变化
质量保证测试QA:通俗来讲就是找bug
17.集成电路和摩尔定律
集成电路和仙童半导体
集成电路:将多个组件封装成一个新的独立组件就叫做集成电路IC,仙童半导体公司让集成电路变成了现实,发明了印刷电路板PCB,通过刻蚀金属线的方式将零件连接到一起。
技术:光刻工艺
摩尔定律
每过两年,相同大小的集成电路,晶体管的数量翻倍,
过度小型化的问题
1、由于光的波长的限制,精度已经到达极限。
2、量子隧穿效应:当晶体管非常小的时候,电极之间可能只距离几个电子,电子会跳过间隙,产生漏电问题。
18.操作系统
“操作系统”的目的是让计算机自动运作
“操作系统”也是程序,有操作硬件的特殊权限,可以操作管理其他程序,开机第一个启动的程序
计算机规划程序的存放和使用是通过虚拟内存和内存保护
现代计算机的OS:
内核:操作系统的核心功能,如内存管理,多任务和输入输出处理
Unix:一堆有用的工具
19.内存 & 储存介质
声波储存
声波存储,定义将有声波信号识别为1,没有声波信号识别为0,通过0,1二进制来储存信息
电磁存储
将磁圈矩阵分布,就像内存的锁存矩阵那样,用两根线控制一个磁圈,XY确定磁圈地址,有线读取磁性信号
优点:
储存方便,大规模储存,可以选择指定的位置的信息
存储单价(下降推动了计算机的发展)
安迪比尔定律,表示存储单价会随着技术的进步,不断降低,同一单位面积能存储越来越多的数据
20.文件系统
ASCII
ASCII就是一种数据转换标准,27位表示一个ASCII码,共有128种不同的表示
UTF-8
解决标识不够用导致大家不同的标准在自己的系统上表示其它转码来源会发生乱码的情况
图形存储
图片颜色
图形是颜色构成的,颜色可以用三原色表示任意颜色。
RGB,一Byte为0-255,表示一个色,三元色就是3B,我们规定一种简单的图形存储格式为,
3B表示一个色块,所以(255,255,255)是白色,(255,255,0)是黄色,(0,0,0)是黑色
图片格式
在图形文件的前面会加上前缀和文件头
存储索引
关键信息
文件系统的头部目录中,存有一份文件得到起始位置和长度信息,通过关键信息就能准确的索引到文件的位置。
文件分布
通常文件系统是将内存分块,BLOCK0 BLOCK1······,文件存在指定的块中
音频采集
音频文件中,会根据声音音高的不同,采集不同的数值(声波采集越密集,信息就越准确)
通过数字存放再通过音频接口转音
21.压缩
同数据压缩
面对同一文件有些数据是重复出现,不必一次一次重复写入,如7次(255,255,0)黄色,我们只需要写一遍黄色,然后在前面写上重复的次数7,就能准确的表示这段数据,而且数据大小还压缩了
字典压缩
将所有的不同色块组合都列出来,分别是YY4,WY2,BY1,WW1,我们在这些组合中挑选频次最少的两种,将他们合为一个根下的分支,然后这个合并后的节点与剩下的组合,再取两个频次最小的合为一个节点下的分支,如此往复,直至完全合并。
22.命令行界面
命令行
早期的计算机交互界面,是黑底,输入指令,来完成计算机交互
23.屏幕 & 2D 图形显示
阴极射线管
把电子发射到涂有磷光涂层的屏幕上,当电子撞击涂层时会发光几分之一秒。
由于电子是带点粒子,路径可以用磁场控制,屏幕内用板子或线圈把电子引导到想要的位置。
绘制图形的方式:
矢量扫描和光栅扫描
矢量绘图
通过矢量指令,变化位置和强度,绘制出图画
26.图形用户界面
事件驱动编程
代码可以在任意时间执行以相应事件
图形界面
文件窗口可以重叠摆放
28·计算机网络
局域网
公司内部方便信息交换,网络之间是内部链接,这就是早期的局域网
信息传播
通过光纤,传递2进制信号,头部信息会包含要去往的MAC地址(计算机唯一的)
网关
将一片计算机之间交互频次多的划分到一个区域,每一片区域之间用交换器连接,当在自己区域的信息传播就不需要打开switch,这时即便是另一片区域的计算机也在发送同区域的信息,也不会受到影响,除非他们要跨区域沟通。
指数退避机制(能极大程度避免网络冲突)
当几台计算机想要发送信号时,检查网路中是否已经有信号在占用,如果有的话,就等待一段时间再发送
路由器
采用节点连接的形式发送的时候信息里面是包含要去往的目标的信息的,然后到达一个节点(路由器)会根据目标分配路径较短,较不拥挤的路径到达。当内容较大时,会把数据拆分成若干分包,这些分包打上标签,去往同一目的地,在目的地网络协议会把这些分包组装起来,再继续解析。
29.互联网
UDP(不提供数据修复重复机制)
数据包想在互联网上传输,要符合“互联网协议”的标准,简称IP,地址必须是独有的,内容的大小也是有限制的,IP是一个非常底层的协议,数据包的头部只有目标地址,头部存关于数据的数据也叫元数据。UDP,相对于IP,协议头部包含了端口号
域名(解决ip数字不好记的问题)
只需要记住要访问的网页的域名即可,网络会把我们访问的域名通过DNS查表,得到 域名对应的IP地址,然后访问真实的IP
OS七层参考模型
物理层(光纤电脑)
数据链路层(二进制电信号光信号)
网络层(IP协议)
传输层(UDP,TCP)
会话层
表示层
应用程序层(浏览器,HTML解码)
30.万维网
万维网和互联网是两回事,互联网是传递数据的管道,其中传输最多数据的程序是万维网。
万维网的最基本单位是单个页面,页面内容有去往其它页面的链接,叫超链接,这些超链接形成巨大的互联网络,这就是万维网的由来
超文本
指向另外一个网页
URL(统一资源定位器)
使网页能够相互连接,每个网页需要的唯一地址就是URL
HTTP(超文本传输协议)
通过GET指令以ascll编码发送到服务器再返回状态码和网页
HTML(超文本标记语言)
一种用于创建网页的标准标记语言。可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器来解析。
搜索
(早期搜索)通过存储在字典里面的关键字,比如我搜索猫,那存储在猫这个字典里面的网址就会被返回,那谁在前谁在后,看这个网站里面猫这个词出现的次数
谷歌采用关联性存储,指向性存储等等方式避免无意义搜索反馈
31.计算机安全
身份验证
admin/user 通过用户权限来控制用户行为,确定你在该服务器上的额权限
权限管理
不能向上读表示,你在低权限位置不能读取高权限的内容,这样能防止非管理员窃取到机密,不能向下写表示,你在高权限位置不能在低权限的区间写内容,这样能防止管理员权限的核心内容被泄露到低权限区域。
网络安全的目的(三个):
保密性,完整性,可用性
32.黑客&攻击
社会工程学
通过欺骗获取他人信息和配置电脑系统,生成社工字典,使易于攻击
钓鱼攻击
通过发送钓鱼链接获取受害者信息
边界检查
DDOS发送垃圾数据进行服务器攻击
- WEB安全
sql注入`、`XSS`、`CSRF`、`前端安全`、`SSRF`、`XXE`、`JSONP注入`、`SSTI`、`代码执行/命令执行`、`文件包含`、`文件上传/解析漏洞`、`逻辑漏洞`、`未授权访问/信息泄露`、`PRO`、`Web Cache`、`PHP相关`、`java-web`、`Python-web`、`Node-js`、`WAF相关
33.加密
排列加密
将一列数据字符,按照一定的矩阵排布,然后从矩阵的左下角往上,从左往右依次读取,这样原先的信息就被打乱了,难以发现里面的加密规则。
公钥加密
一个公开的密文,双方都知道,然后把这个公钥和自己的私钥按一定规则混合,形成新的自己的私钥,然后把这份新私钥发送给对方,对方再将这个新私钥混合自己的私钥,形成最终秘钥,这样一来双方都得到了一致的最终秘钥,外界无法知道。
密文转换(可能出现转换错误)
一个字符,经过转盘换成另一个字符,这个字符又经过新的转盘换成另一个字符,最终输出新字符。原先的内容就完全变化了。
34.机器学习&人工智能
决策模型
计算机擅长存放,整理,获取和处理大量数据
机器学习算法的目的:最大化正确分类,最小化错误分类。
方法:通过条件来划分界限,以界来判断
这种决策边界是简单的几个矩形空间,是非常简单的决策模型,也可以转化成条件判断语言。
人工神经网络
一个一个的节点是神经元,它不用电信号,而是吃进去数字,吐出数字,然后一层一层的形成神经元网络。
深度学习
深度学习是人工智能的一个分支,它使用多层次的非线性处理,通过一系列可学习的算法来实现复杂的目标和任务。它使用深层神经网络来进行模型训练,从而让计算机能够从数据中发现规律和模式,并且能够做出更加精准的预测。它不需要人工提供特征,可以从原始数据中发现潜在的特征,从而让机器学习更加强大。
35.计算机视觉
像素色
每一格像素都是三种色值决定的,通过三种原色的强度,可以得到任何颜色,RGB值
垂直边缘算法
将照片转成灰度图,放大,很容易发现哪是柱子的边缘,因为有垂直的颜色变化,某像素是否是垂直边缘取决于左右两边像素的差异程度,差异程度越大,越可能是边缘,如果色差很小就不是边缘。
这种算法是核过滤器,中间栏是0,左侧是-1,右侧是1, 如果加入每像素的灰度值计算求和,得到中心核的数值,这个数值越小说明越可能是边界。
人脸识别
卷积:把核应用于像素块
"卷积神经网络"用一堆神经元处理图像数据,每个都会输出一个新图像,本质上是被不同的核处理了,输出会被后面一层神经元处理,卷积卷积再卷积
36.自然语言处理
使用短语结构规则用于计算机,句子可以由一个名词短语和一个动词短语组成,可以给一门语言指定出一堆规则,用这些规则,可以做出分析树。
40.奇点,天网,计算机的未来
计算机处理能力
正如摩尔定律所描述的,在本世纪中页,计算机的处理能力就能超过人类。然后人的参与会越来越少,人工智能会开始改造自己,智能科技的失控性发展叫奇点。
职业
“技术性失业”:很多工作被计算机替代
未来:
人们可能肉体死去,意识传入计算机,数字永生