总结自书籍:https://weread.qq.com/web/reader/b9b324005dd9f0b9b9e6f17k0e6320502c60e65972dc52f#outline?noScroll=1
0 前提
计算机的三个根本性基础
- 计算机是执行输入、运算、输出的机器
- 计算机的硬件由大量集成电路(IC)组成,每块IC都有许多引脚,用于输入/输出,IC在其内部对外部输入的信息进行运算,并把运算结果输出到外部
- 程序是指令和数据的集合
- 软件即程序,程序由指令和数据组成,指令就是控制计算机进行输入、运算、输出的命令,数据就是指令执行的对象和结果
- 计算机的处理方式有时与人们的思维习惯不同
- 计算机用数字表示所有信息
1 基础
只要定义出了指令和数据的规范,装有符合规范的程序的计算机自然就可以相互协作了
- 计算机的协同工作指的是,输入到一台计算机中的数据,可以通过互联网传送到与这台计算机相连的其他计算机上执行运算,运算所输出的结果再返回给这台计算机。
计算机内部主要由IC组成,主要是:
- CPU:计算机的大脑,负责解释、执行程序,从内存或I/O输入数据,在内部进行运算,再把运算结果输出到内存或I/O
- 内存:用于存储指令和数据。
- I/O:负责把周边设备和主机连接在一起,实现数据的输入与输出。
除了CPU、内存、I/O以外的辅助元件:
- 时钟信号:一种电信号,每隔一定时间就变换一次电压的高低,用于驱动CPU运转。输出时钟信号的元件叫做“时钟发生器”,内部带有晶振,根据其自身的频率产生始终信号
- 频率就是振动的次数,通常用Hz表示时钟信号的频率,1秒发出1次时钟信号就是1Hz,100MHz(兆赫兹)的话就是100×100万=1亿次/秒。M(兆)代表100万。
其他概念:
- 总线:连接到CPU中数据引脚、地址引脚、控制引脚上的电路的统称
- DMA:Direct Memory Access,直接存储器访问,不经过CPU直接从外部设备读写内存
2 汇编
- 助记符:根据表示指令功能的英文单词来起一个相似的昵称,并将这个昵称赋予给指令的0 1组合,这样的昵称就是助记符(比如LD、OUT)
- 汇编语言:使用助记符的编程语言
- 汇编语言的语法:标签 操作码 操作数
- 标签:标签的作用是为该行代码对应的内存地址起一个名字
- 操作码:操作码就是表示“做什么”的指令
- 操作数:操作数表示的是指令执行的对象,汇编语言规定操作数必须是已存储在CPU寄存器中的数字
- 用汇编语言编写的程序是不能直接运行的,必须先转换成机器语言
- 汇编语言的语法:标签 操作码 操作数
3 算法
算法定义:被明确定义的有限个规则的集合,用于根据有限的步骤解决问题
4 数据结构
- 计算机所处理的数据都存储在了内存中,内存内部被分割成了多个数据存储单元,每个单元可以存储1字节数据,每个单元都被分配了地址
- 变量:程序中数据存储的最小单位,程序运行时操作系统从尚未使用的内存空间中划分一部分给变量
- 数据结构的基础:数组
- 数组:为了存储多个数据而在内存上集中分配的一块内存空间,数组名是这块空间整体的名字,数组反映了内存物理结构
- 数组是一种直接利用内存物理结构的最基本的数据结构,基于数组可以实现各种算法,从逻辑上改变内存的物理结构,从而实现别的数据结构,比如栈、队列、链表、二叉树等
5 面向对象
- 面向对象编程(OOP,Object Oriented Programming)是一种基于以下思路的程序设计方法:将关注点置于对象本身,对象的构成要素包含对象的行为及操作,以此为基础进行编程。其中所使用的主要编程技巧有继承、封装、多态三种。这种方法使程序易于复用,软件的生产效率因而得以提升。
- 继承:通过继承已存在的类的成员来生成新的类
- 封装:隐藏不必要展现给调用者的成员
- 多态:对同一种消息,不同的对象可以有不同的操作
- 消息传递:程序可以通过由一个对象去调用另一个对象的函数这种方式运行,这种调用方式称为对象间的“消息传递”
- 类:由有关联的函数和变量组成,函数和变量统称为“成员”,用于定义对象,对象是类的实例
- 接口:类规范的描述,即描述“类看起来是什么样的”
- 建模:将现实世界转换为程序中的类
- UML:统一建模语言 Unified Modeling Language,用于将建模结果图形化表示出来
- 框架:在操作系统智商,旨在通过隐藏操作系统的复杂性来提升开发效率的程序集
6 数据库
- SQL:Structured Query Language,结构化查询语言
- 数据库(Database)就是数据(Data)的基地(Base)
- DBMS:Database Management System,数据库管理系统
- DBMS实例:Access、Oracle、DB2 等
- 程序通过DBMS读取数据库的文件
- 数据库系统:包括“数据文件”、“DBMS”、“应用程序”
- 独立型系统:以上三者部署在同一台计算机
- 文件共享型系统:数据文件部署一台计算机,被多台部署了DBMS和应用程序的计算机共享
- 客户端/服务器型系统:数据文件和DBMS部署一台或多台计算机,应用程序部署其他计算机供用户访问
- Web系统:把服务器和客户端之间用互联网联结,应用程序也部署在服务器中,客户端只部署Web浏览器
- 关系型数据库:数据被拆分整理到多张表中,表与表之间的关系也可以被记录下来
- 设计数据库:
- 通过拆表和整理数据(在各表之间建立关系)实现“规范化”
- 用主键和外键在表间建立关系
- 当表之间出现多对多关系时,可以在这两张表之间再加入一张表,把多对多关系分解成两个一对多关系,加入的表被称作连接表(Link Table)
- 建立索引:索引仅用于提升数据检索和排序速度。一旦为字段建立了索引,DBMS就会自动为这个自动创建索引表
- 索引表:一种数据结构,存储字段的值以及字段所对应记录的位置。索引表中字段数更少,所以可以更快进行检索和排序,查询数据时,DBMS先在索引表进行数据检索和排序,然后再根据位置信息从原表取出完整记录
- 索引会降低数据插入和更新的速度,因为每次插入或更新数据时,DBMS都需要更新索引表
- CRUD:增删改查。对数据库进行的操作的种类通常称为CRUD,即记录的插入(CREATE)、获取(REFER)、更新(UPDATE)、删除(DELETE)。
- SQL语言:Structural Query Language,结构化查询语言,应用程序向DBMS发送的命令
- 事务:由若干条SQL语句构成,表示对数据库一系列相关操作的集合
7 网络
- 网络:把通过连接多台计算机所组成的、可用于交换信息的系统称为网络
- LAN:Local Area Network(局域网),通常把一栋建筑物内或一间办公室内的小规模网络称为LAN
- WAN:Wide Area Network(广域网),通常把互联网那样的大规模网络称为WAN,互联网就是用路由器把多个LAN连接起来所形成的大网
- 协议:信息可以以电信号的形式在网线中传播,因此计算机之间可以进行信息交换,但交换信息前需要规定信息发送方式,这种规定称为协议
- TCP/IP:Transmission Control Protocol/Internet Protocol(传输控制协议和网际协议),TCP/IP协议族是互联网所使用的一套标准协议
- IP协议:用于指定数据发送目的地的IP地址和通过路由器转发数据
- TCP协议:用于通过数据发送者和接收者互相回应对方发来的确认信号,来可靠地传输数据(握手);TCP协议还规定发送者要先把原始数据分割成以包为单位的数据单元再发送,而接收者要把收到的包拼装在一起还原出原始数据
- 遵循协议约束表现在统一数据格式上,要传输的数据线通过实现了TCP协议的程序附加上遵守TCP约束所需的信息,然后再通过实现了IP协议的程序,附加上遵守IP约束所需的信息,实际上计算机发送的是以包为单位的附加了各种信息的数据
- TCP/IP:Transmission Control Protocol/Internet Protocol(传输控制协议和网际协议),TCP/IP协议族是互联网所使用的一套标准协议
- 硬件相关
- MAC地址:能够标识网卡的编号,网卡带有ROM(Read Only Memory)只读存储器,其中预先烧录了全球唯一的MAC地址(不可变更),可以用MAC来指定电信号的接收者
- 集线器:负责把各台计算机的网线相互连接在一起的设备
- 路由器:负责把LAN连接到WAN上的设备,路由器的一端先连接到互联网服务提供商的路由器上,而在服务提供商那里,又会继续将路由器连接到其他路由器上,通过这种方式最终接入到互联网的主干线缆上
- 分布在世界各地的LAN中的路由器互相交换着信息,这种信息叫“路由表”,用来记录应该把数据转发到哪里,在一台路由器的路由表中只会记录通往与之相邻的路由器的路径,并不会记录世界范围内的所有传输路径
- 当从公司内的计算机向另一家公司的计算机发送数据时会发生什么呢?
首先,一个不属于LAN内计算机的IP地址会被附加到数据的发送目的地字段上。这样的数据虽然会被LAN内的计算机所忽略,但是不会被路由器忽略。因为路由器的工作原理就是查看附加到数据上的IP地址中的网络地址部分,只要发现这个数据不是发送给LAN内计算机的,就把它发送到LAN外,即互联网的世界中
- 软件相关
- IP地址:在TCP/IP网络中,为每台计算机设定的软件上的编号,设定了IP地址的计算机称为主机(Host),路由器也是计算机的一种,因此路由也有IP地址,在TCP/IP网络中,传输的数据都会携带MAC地址和IP地址
- 网络地址:IP地址中表示分组的部分称为网络地址
- 主机地址:IP地址中表示各台计算机的部分称为主机地址
- 子网掩码:用于标识出IP地址中的网络地址和主机地址,二进制1值对应的是网络地址,二进制0值对应的是主机地址
- 举例:IP地址是202.26.186.174,子网掩码是255.255.255.240,将子网掩码用二进制表示为11111111.11111111.11111111.11110000,则IP地址前28位是网络地址,后4为是主机地址,仅此主机地址是0000~1111,由于0000和1111有特殊用途,因此实际能使用的主机地址范围是0001到1110,所以该LAN内最多可配置14台计算机
- DHCP:Dynamic Host Configuration Protocol,动态主机设置协议,DHCP服务器上记录着可以被分配到LAN内的计算机的IP地址范围和子网掩码的值,作为DHCP客户端的计算机在启动时,可以从DHCP服务器中知道哪些IP地址还没分配给其他计算机(路由器的IP地址也可以从DHCP服务器获取)
- DNS:Domain Name System,域名系统。DNS服务器通常被部署在各个LAN中,里面记录着FQDN和IP地址的对应关系表,世界范围内的DNS服务器是通过相互合作运转的,如果一台DNS服务器无法解析域名,它就会去询问其他DNS服务器
- FQDN:Fully Qualified Domain Name,完整限定域名。计算机都有主机名,LAN都有域名,主机名+域名=FQDN,这个名字和IP地址等价(由于IP地址难以记忆,不便使用,所以使用FQDN)
- ARP:Address Resolution Protocol,地址解析协议,实现由IP地址转为MAC地址的程序
- 通过向LAN内所有计算机广播来实现,提供了缓存功能
- 网络层级:硬件上发送数据的是网卡,在网卡之上是设备驱动程序(用于控制网卡这类硬件的程序),设备驱动程序之上是实现了IP协议的程序,IP程序之上则是实现了TCP协议的程序,而再往上才是应用程序,比如Web或电子邮件。TCP协议使用“TCP端口号”识别上层的应用程序,TCP端口号中有些是预先定义好的,比如Web使用80端口
8 加密
- 字符编码:每个字符都被分配了一个数字,称为“字符编码”,定义了数字和字符对应关系的体系叫字符集,字符集分为ASCII字符集、JIS字符集、Shift-JIS字符集,EUC字符集、Unicode字符集等若干种。
- 对称密钥加密技术:也叫秘密密钥加密技术,特征是在加密和解密的过程中使用数值相同的秘钥
- 密钥:用于加密和解密的数字
- 公开秘钥加密技术:加密和解密的秘钥不同,用于加密的密钥可以公开,叫“公钥”,用于解密的密钥只有自己知道,叫“私钥”
9 XML
- 标记语言:可以用标签为数据赋予意义的语言
- 标记:把通过添加标签为数据赋予意义的行为称为标记,为标记行为定义规则的语言就是标记语言
- 标签:用 < 和 > 括起来的单词
- XML:Extensible Markup Language,可扩展标记语言。XML是可以定义任意标记语言的元语言,用于在互联网上为要交换的信息赋予意义
- XML本身不限定标签的种类,允许使用者随意创建标签,可以将任意单词用 < 和 > 括起来(这就是“可扩展”),XML只限定了标签的书写格式
- XML通过使用命名空间来确保标签含义的唯一性,在同一个命名空间中,一个单词只有一个含义,通常用全世界唯一的标识符作为命名空间的名称
- XML通过定义要标签种类,就可以创造出一门新的标记语言,这种用于创造其他语言的语言叫“元语言”
- 把遵循了XML约束写出来的文档叫XML文档,把保存XML文档的文件叫XML文件
- 完整的XML文档包含XML声明、XML实例、DTD(Document Type Definition文档类型描述)三部分
- XML声明:写在XML文档开头的、形如<?xml version="1.0" encoding="Shift_JIS"> 的部分
- XML实例:文档中使用标签来标记的部分
- DTD:定义XML实例的结构(XML Schema也可以用于定义XML实例的结构)
- 完整的XML文档包含XML声明、XML实例、DTD(Document Type Definition文档类型描述)三部分
- HTML:用于编写网页的标记语言,Web浏览器会解析HTML的标签,把它们标记的信息渲染成网页
- HTML限定了标签的种类,是固定标记语言,HTML规定的标签只能用来指定信息的呈现样式,不能表示信息是什么含义
- HTML限定了标签的种类,是固定标记语言,HTML规定的标签只能用来指定信息的呈现样式,不能表示信息是什么含义
- SOAP(Simple Object Access Protocol,简单对象访问协议)可用于分布式计算。分布式计算,就是把程序分散部署在用网络连接起来的多台计算机上,使这些计算机相互协作,充分发挥计算机整体的计算能力。SOAP就是使运行在A公司计算机中的A程序,可以调用运行在B公司计算机中的B程序。