各部分逻辑联系:
因为冯诺伊曼说程序可以和数据一样放在内存中,所以程序应该是二进制组成的,既然可以被描述被二进制,那么程序就是可以通过数字编写的,而不用通过改变接线来“写”程序。现在认同的编程概念(敲代码)算是从这里来的。这个小的改变呢,却蝴蝶效应般地加速了计算机科学的发展速度。人们有记载的编程是从1700年的打孔织布机开始,经历了200年,计算机科学的发展十分缓慢。在冯诺伊曼模型提出后的近70年间,计算机科学的发展成果是惊人惊叹的 。现在,计算机已经统治了全世界。
因为程序是可以编写的,所以产生了程序设计语言这条发展线,程序设计语言的不断改进,使得开发出大规模的软件得以成为可能,于是产生了操作系统和其他的系统软件/应用软件。这些通用软件/专用软件,已经正在不断地改变我们的生活,改变世界的面貌,加速人类文明前进。
随着微机芯片制造技术的改进,计算机变得越来越实惠,也越来越小。在采用大规模集成后,个人计算出现,于是有了将多台个人计算机连通的需求。美国军队内部使用的局域网,放开给民用后,逐渐扩大,就变成了城域网,广域网。在多个国家的广域网相互连通后,产生了可以达到全球各个角落的互联网。
因为早期的互联网是借用已布局的电话/电报线路进行通信的,所以带宽很小,在网络上传送大数据非常不便,因此,需要一种数据压缩算法,将本地数据压缩后再进行网络传输。在网络上进行传输数据,为了数据的安全,很自然有了对数据加密的需求。
知识结构:
1 数据 //数据表示>>>数据运算>>>数据结构>>>数据管理
1.1 数据的二进制表示
数据>>>>位模式>>>>数据输出
1.1.1 数据的表示 //用位模式去表示数据
文本:编码标准:ASCII和ASCII扩展(加0补足8位)、Unicode、ISO
音频:采样(n次/s)>>>>量化(用有符号整数赋值)>>>>位模式存储
图像:位图图形(位模式对应像素点)、矢量图(由几何图形组成,数学函数即时生成尺寸)
视频:图像的有序序列。
×位长度与状态数: 2的次幂。而内存空间是以字节为单位的,位长不足八位则补0补到8位,但实际用
位长保持不变。
1.1.2 数的表示及运算:
整数://为了更好地存储和运算数据,逐渐发展到补码的表示
无符号数(适用计数/寻址)>>>>反码表示(引入符号位,有符号数由原码取反得到)>>>>
补码表示(沿袭符号位,有符号数由原码取补码得到,0只有一个正0)
整数运算:注意溢出问题的处理。计算结果溢出的,溢出后数值的计算根据取值圆和溢出值来计算。
-128 ~ 127 ,如果结果为130,则溢出量为3,值的变化127到 - 128 到 -127 到 -126.
二进制码为1000 0010(-128+2).
图
浮点数:IEEE标准:符号位×指数幂×小数
浮点数运算: 相同符号的,先将数成立成2的指数幂形式,然后通过小数移位对其指数,再对小数部分
进行二进制运算。
图 不同符号的,绝对值大减去小的,符号归绝对值打的,如-3 + 1 = - 2
1.2 位运算 //位的运算法则和应用
1.2.1 算术运算:补码表示的数值可化归为加法运算。 (乘法:多加几次;除法:多减几次)
1.2.2 逻辑运算:NOT、AND、OR、XOR(异或) //XOR只是在改了OR的一个端点值,1 XOR 1 =0.
应用:复位(置0),用AND的0去置0;
置位(置1),用OR的1去置1;
反转(取反),用XOR的1去取反; //与NOT取反不同的是它是二元运算,局部取反。、
1.2.3 移位运算:左移乘2,右移除2.(二进制的位权)
×有符号数的移位问题: 右移补1,左移留1.
1.2 数据的物理存储 //数据物理存储结构+逻辑结构 = 数据结构
1.2.1 顺序存储:一个挨着一个,占用一段连续的内存空间。
优点:有独立索引地址,存取效率高些。
缺点:容易因内存空间不够,发生数组越界问题。用指针替代数组申请一段连续的内存空间更安全。
1.2.2 链式存储:不挨着,分散的存放,依靠指针做链接实现。
优点:充分利用内存空间。
缺点:没有独立的索引地址,靠指针一次一次检索,存取效率低些。但可通过为节点node命名新指针
来实现索引地址。局部优化可用。
1.3 数据的逻辑关系
1.3.1 线性关系:一个数据前后都只有一个数据。用物理的顺序存储或单一指针都可以实现。
数组:可以在任何位置进行存取,增删操作。
队列:只能在队头进行删除,队尾进行添加。 链式队列只能从头开始跑,存取数据。
栈 :只能在栈顶进行增删操作。链式栈只能从头开始跑,存取数据。
//栈和队列既可以用顺序存储实现,也可以用链式存储实现。但用顺序存储实现的话,会受限与结点
固定的情况。而且增删操作效率低。经常是用链表存储实现
图
1.3.2 树形关系:一个数据前有一个数据,后有不止一个数据。用结构体+多指针域来实现该逻辑关系。
树概念:空树与N叉树 //像现实的树的分叉
根-节点-叶
入度与出度:进入结点和从结点分叉出去的树枝数量
高度:
深度:
二叉树:
遍历:
深度遍历:前序遍历(根-左-右)、中序遍历(左-根-右)、后序遍历(左-右-根)
//以接触根结点的先后来区分这三种遍历
广度遍历:从根到叶的方向,一层一层遍历。
图
操作:
增删、存取、查找取值、反转二叉树
待补充
1.3.3 网状关系:一个数据前后都有不止一个数据。用数组(邻接矩阵)/ 链表实现。
分类:有向图/无向图
操作:
增删:
存取:
查找:
应用:
1.4 数据管理
1.4.1 文件结构 //根据存取方式分类
顺序文件:
随机文件: //解决独立内存地址问题,做到索引的效果。
索引文件:独立的索引地址
优点:地址不冲突
缺点:占用空间
哈希文件:函数计算出内存地址
优点:即时生成内存地址,减少空间占用
缺点:生成的内存地址冲突
×哈希冲突解决:加1法、哈希桶法(冲突的地址放在一个桶里+1)
图
1.4.2 数据库 //将集合的数据 集中到 数据库中管理。
概念:5个组成(硬件-数据-软件-用户-规则)
3个层(内层、概念层、外层) //从软件里划分出三层
3个模型(层次模型、网络模型、关系模型) //从概念层里划分出三种基本模型
2个派生模型:分布式模型、
发展:层次模型--网络模型--关系模型 //数据组合的数量越来越多
关系模型: //二维表的模式,将繁杂的网络结点组合变成简洁的坐标系点组合
概念:属性(列)、元组(行)
实现:结构体
操作:增删改
选择、投射:选择属性/成员 //一元操作
和并交差:jion、OR、AND、取不同。 //二元操作
SQL查询语句实现:
图
#(数据的物理存储即数据的存储结构,数据的逻辑关系则是数据的逻辑结构,而数据结构指的更多是逻辑结构)
#(数据结构和对它的操作一起,称为抽象数据类型,即数据+操作。在C中的Int float double都是抽象数据类型)
#(抽象数据类型和面向对象的对象概念相似。对象的属性就是对象特征的描述,这点与对数据逻辑关系的描
术一样; 对象的方法就是对这个对象可以进行的操作,类比地,就是对某个数据结构可以进行的操作;对象
可以进行具体化,称为实例。像定义一个对象,属性是富含维生素C,方法有吃,榨汁,烘干。具体到事物
就可以是柠檬、西红柿等符合这两个特征的东西。 对象的方法体现目的,不同目的采用不同方法去实现。)
2 数据处理机 //基于冯诺依曼模型
2.1 计算机硬件
2.1.1 工作原理
图
2.1.2 总线问题:
组成:数据总线、地址总线(一般最大)、指令总线。
宽度:数据总线的大小依据ALU一次可以处理的位长的定。如64位为2的6次方,6根线足以。
地址总线:根据所支持的最大内存量来确定大小。每种状态表示一个内存地址。
如1M内存空间,需要log 2(1024*1024)条两态线。
指令总线:CUP与内存指令总线、CPU与输入输出设备的指令总线。
2.1.3 输入输出设备:
控制器:串口、火线、USB
控制方式:程序控制、中断程序控制、DMA(硬盘)
2.2 计算机软件
2.2.1 操作系统 //4个基本管理子系统
内存管理:单道程序系统>>>多道程序系统(分区文件调度>>分页文件调度>>请求分页调度>>请求分段调度)
//从程序全部载入内存,到只有即将执行部分载入内存,为提高效率,按逻辑段载入内存。
×虚拟内存的概念:当程序部分载入内存执行,将其他留在硬盘上的程序片段占用的空间成为虚拟内存
//程序是怎么被执行和被结束的
进程管理:图
文件管理:
设备管理:
2.2.2 算法
定义:循序渐进解决问题的步骤
表示:流程图、伪代码、结构图(模块图)
基本算法:
算术算法:累加累乘、求请均值
逻辑算法:比较、排序、查找
2.2.3 程序设计语言
机器语言:0和1,用二进制指令操控计算机。
符号语言:用助记符些编写指令序列,操控计算机。因要经过汇编的过程,又称汇编语言。
//从机器语言到符号语言你,将人们的注意力从怎么操控计算机转移到怎么解决问题上(1)
高级语言:
过程性语言:Fortan (科学计算)、Pacal (教材语言)、C (操作系统) //操控计算机硬件
面向对象:C++、JAVA、C#、Python、Go等等。//操控对象
//从面向过程到面向对象,将人们的注意力从怎么操控计算机转移到怎么解决问题上(2)
函数式语言:Lisp、Scehme(MIT)
//同C的模块,将程序看成是黑盒子
逻辑语言:
//用于逻辑判断的语言
专门性语言:
结构查询语言(SQL)
HTML+CSS
PHP
Javascipt
Perl
2.2.4 软件工程: //怎样更好更快地开发软件
软件生命周期:开始--while(使用--修改)--结束
×软件结束的情况:不能满足需求、效率低下、
4个阶段:需求分析阶段
设计阶段:按切分需求设计模块,大模块切分笑模块。
实现阶段:
测试阶段:程序员进行白盒测试
测试人员进行黑盒测试
开发模型:瀑布开发:一个接一个模块的开发,拼接。软件像瀑布一样,从小变大。
增量开发:先是拼接所有空模块,看模块间的连接情况,再进行往模块里填充数据。
相关概念:
模块化:
质量:
文档:
3 计算机网络
3.1.1 网络模型:
OSI模型:
IP/TCP协议:
协议应用:FTP、SMPT、HTTP
3.1.2 网络组建:
连接设备
3.1.3 数据压缩:
无损压缩:
有损压缩:
3.1.3 数据安全:
4 计算机理论
4.1.1 简单语言
4.1.2 图灵机