导图社区 《计算机是怎样跑起来的》读书笔记
本图从计算机的三大原则、试着制造一台计算机吧、体验一次手工汇编、程序像河水一样流动着、与算法成为好朋友的七个要点、与数据结构成为好朋友地七个要点等方面进行阐述。根据书籍《计算机是怎样跑起来的》写的思维导图,内容齐全,基本所有计算机知识点都有涉及!
编辑于2020-03-05 10:20:50植物生殖生理,概述了植物生殖生理的复杂过程,从基本概念到具体机制,再到实际应用,做了全面而详细的阐述。描述了花朵在特定生长阶段的状态。探讨了影响花粉生活力的外界条件,如湿度、温度、CO2和O2的相对浓度等。描述了花粉萌发、花粉和柱头的相互识别,以及受精过程中雌蕊的生理变化。
C语言知识点整理,内容涵盖了C语言学习的多个重要方面,从简单的程序结构开始,逐步深入到数据类型、运算符、流程控制结构等核心概念。详细列出了C语言中的运算符,包括自加自减运算符、优先级和结合性等关键概念,帮助学习者理解和掌握这些运算符的使用方法。涵盖了“循环”、“表达式”、“流程结构”、“语句”、“选择判断”和“goto”等知识点,这些都是编写复杂程序时必须掌握的技能。还涉及了函数、数组、内存分区、多文件编程、内存管理、位运算、类型转换、文件操作、类型修饰符、预处理和其他高级主题,如类型重命名等。
计算机操作系统思维导图总结,内容包含操作系统引论、进程的描述与控制、处理机调度与死锁、存储器管理、虚拟存储器、输入输出系统、文件管理。
社区模板帮助中心,点此进入>>
植物生殖生理,概述了植物生殖生理的复杂过程,从基本概念到具体机制,再到实际应用,做了全面而详细的阐述。描述了花朵在特定生长阶段的状态。探讨了影响花粉生活力的外界条件,如湿度、温度、CO2和O2的相对浓度等。描述了花粉萌发、花粉和柱头的相互识别,以及受精过程中雌蕊的生理变化。
C语言知识点整理,内容涵盖了C语言学习的多个重要方面,从简单的程序结构开始,逐步深入到数据类型、运算符、流程控制结构等核心概念。详细列出了C语言中的运算符,包括自加自减运算符、优先级和结合性等关键概念,帮助学习者理解和掌握这些运算符的使用方法。涵盖了“循环”、“表达式”、“流程结构”、“语句”、“选择判断”和“goto”等知识点,这些都是编写复杂程序时必须掌握的技能。还涉及了函数、数组、内存分区、多文件编程、内存管理、位运算、类型转换、文件操作、类型修饰符、预处理和其他高级主题,如类型重命名等。
计算机操作系统思维导图总结,内容包含操作系统引论、进程的描述与控制、处理机调度与死锁、存储器管理、虚拟存储器、输入输出系统、文件管理。
计算机是怎样跑起来的
第一章 计算机的三大原则
三个问题
硬件和软件的区别
硬件:看得见摸得着的设备
软件:计算机所执行的程序,即指令和数据
字符串存储
不同的字符编码中所需字节数不同
什么是编码
编码:通常,为了便于计算机处理二经过数字化处理的信息;计算机内部会把所有信息都当作数字来处理。
1.1 计算机的三个根本特性
计算机是执行输入、运算、输出的机器
程序是指令和数据的集合
计算机的处理方式与人思维方式不同
1.2 输入、运算、输出是硬件的基础
从硬件上来看,可以说计算机是执行输入输出、运算是三种操作的机器
计算机的硬件由大量的IC组成
IC:Integrated Circuit 集成电路,带有许多引脚,这些引脚有的用于输入,有的用于输出,还有的用于控制。
IC会在内部对外部输入的信息进行运算,并把运算结果输出到外部。
应用:如果想用计算机做点什么的话,就该考虑如何进行输入、如何获取输出以及进行怎样的运算才能从输入得到输出。
1.3 软件是指令和数据的合集
软件
程序——即指令和数据的合集。
指令
就是控制计算机进行输入、输出、运算的命令
数据
输入数据
作为指令执行对象
输出数据
作为指令执行结果
程序
编译
执行
源文件
目标文件
机器语言
1.4 对计算机来说什么都是数字
计算机的饿目的
提高手工作业效率
用数字表示所有信息
文件
文件句柄
公钥
私钥
加密解密
1.5 只要理解三大原则,即使遇到难懂的最新技术,也能轻松应对
.NET技术
概念:
核心
SOAP——关于调用指令的规范
XML——定义数据格式的规范
计算机协同工作、XML Web服务
指的是输入到一台计算机中的数据,可以通过互联网传送到与这台计算机相连的其他计算机上执行运算,运算所输出的记过再返回给这台计算机,像这样部署在其他计算机上能执行某种运算的程序叫做XML Web服务。
1.6 为了贴近人类,计算机在不断的进化
进化目的
与人类更加相近
用户体验(user Experience)
编程
面向组件编程
面向对象编程
1.7 稍微预习一下第2章
计算机硬件组成
CPU
CPU是计算机大脑,在其内部可对数据执行运算并控制内存和I/O
内存
内存用于存储指令和数据
I/O
I/O负责把键盘、鼠标、显示器等周边设备和主机连在一起,实现数据的输入输出
第二章 试着制造一台计算机吧
三个问题
CPU的缩写
Hz是表示频率的单位
Z80CPU是8比特的计算机
2.1制作微型计算机所需元件
基础元件
CPU
CPU是计算机大脑,负责解释、执行程序
内存
内存负责存储程序和数据
I/O
I/O负责周边设备和主机连在一起,实现数据的输入输出
辅助元件
时钟发生器
负责驱动CPU运转
指拨开关
用来输入程序
2.2电路图读法
电路交叉
若只是交叉在一起,并不表示电路在交叉处构成通路
在交叉处画一个小黑点才表示构成通路
IC引脚
IC引脚按照逆时针方向依次从1开始递增
数引脚序号时,把表示正方向的标准,比如半圆形的缺口,朝向左侧
2.3连接电源、数据和地址总线
连接电源
将各个IC的Vcc和GND分别连接到5V和0V上
注意:
想成0V表示数字0、5V表示数字1,数字IC就是在用二进制形式收发信息
连接地址总线
CPU上的地址总线可以指定数据输入输出时的源头或目的地
连接数据总线
指定地址总线后,就可以使用数据总线进行数据的输入输出
2.4连接I/O
I/O内部结构
寄存器
寄存器是位于CPU和I/O的数据存储器
连接数据总线
将I/O设备的数据总线和CPU中的相应引脚连接
连接地址总线
将I/O设备上的寄存器引脚和CPU的地址总线引脚连接
2.5连接时钟信号
为了传输时钟信号,可把时钟发生器的引脚和CPU的时钟引脚连接
2.6连接用于区分读写对象是内存还是I/O的引脚
CPU中的MREQ引脚和IORQ引脚可用于解决访问的是内存还是I/O
CPU的RD引脚和WR引脚用于数据的输入和输出
2.7连接其他控制引脚
把CPU上的M1引脚(机器周期1)与周边设备上标有相同代号的引脚相连
用于同步
把CPU上的INT引脚(中断)与周边设备上标有相同代号的引脚相连
请求中断
把CPU上的RESET引脚(重置)通过电容与正负极相连
当RESET引脚从0到1时,CPU会被重置,重新从内存0号地址指令开始执行
把CPU上的BUSRQ引脚(总线请求)通过电容与正负极相连
总线是连接到CPU中数据引脚、地址引脚、控制引脚上电路的统称
当BUSRQ引脚值设置为0,CPU从电路中隔离,处于这种状态时,可以不通过CPU,手动向内存写入程序
不经过CPU直接从外部设备读写内存的行为叫作DMA(直接存储器访问)
CPU从电路中隔离后,BUSAK引脚(响应总线引脚)上的值就会变成0,然后就可以进行DMA
把CPU中的WAIT引脚和NMI引脚通过上拉电阻连接到电源正极
2.8连接外部设备,通过DMA输入程序
使用指拨开关和按键开关,向地址总线引脚和数总线引脚发送电信号,然后通过DMA将总线上的数据存储到内存
2.9连接用于输入输出的外部设备
将用于输入数据的指拨开关,输出数据的LED连接到电路中
第三章 体验一次手工汇编
三个问题
机器语言
由二进制代码构成的程序,CPU可以直接对其进行解释、执行
用C语言、Java等语言编写的程序,需先转化成机器语言才能被执行
标识内存或I/O的数字
标识内存或I/O中存储单元的数字叫做"地址"
CPU中标志寄存器
用于在运算指令执行后,存储运算结果的某些状态
标志寄存器不会存放运算结果的值,而是会把运算后某些状态存储起来。如运算结果是否为0、是否溢出
3.1从程序员的角度看硬件
CPU
CPU种类
使用哪种机器语言取决于CPU种类,即便是相同的机器语言,CPU不同,解释不同
时钟信号频率
就是由时钟信号发生器发送给CPU的电信号频率,单位是MHz
内存信息
地址空间
每个地址都标识着一个内存中的数据存储单元,而这些地址所构成的范围就是内存的地址空间
每个地址可以存储多少比特的信息
微型计算机中,地址空间为0~255,每个地址可以存储8比特的指令或数据
I/O信息
I/O的种类
只要用CPU控制I/O的寄存器,就可以设定I/O的功能,与周边设备进行数据的输入输出
地址空间
I/O的地址空间,是指用于指定I/O寄存器的地址范围。
在内存中,每个地址的功能都一样,即可用于存储指令又可用于存储数据,而I/O则不同,地址编号不同(即寄存器的类型不同),功能也就不同
3.2机器语言和汇编语言
3.3 Z80CPU的寄存器结构
既然数据的运算是在CPU中进行的,那么在CPU内部就应该有存储数据的地方,这种存储数据的地方叫作“寄存器”
与I/O寄存器不同,CPU寄存器不仅能存储数据,还具备对数据进行运算的能力
PC寄存器也叫作“程序指针”,存储着指向CPU接下来要执行的指令的地址
PC寄存器的值会随着滴答滴答的时钟信号自动更新,可以说程序就是依靠不断变化的PC寄存器的值运行起来的。
A寄存器也叫“累加器”,是运算的核心
F寄存器也叫“标志寄存器”,用于存储运算状态的结果,比如是否发生进位等
3.4
追踪程序的运行过程
一旦重置CPU,程序的起始地址值就被自动存储到PC寄存器中,这就意味着接下来CPU将要从该地址读取程序
通过反复进行"读取指令""解释、执行指令""更新PC寄存器值"这些操作,程序就能运行起来
第四章 程序像河水一样流动着
三个问题
Flow Chart的意思是流程图
河流的三种流动方式
向一个方向流淌,流着流着产生支流,卷成漩涡
程序的流程也分成三种
顺序执行
条件分支
循环
事件驱动
用户的操作等产生事件后,由事件决定程序的流程
Windows应用程序的运行就是由事件驱动的
4.1 程序的流程
为什么说程序是流动的?
计算机大脑CPU在同一时刻基本上只能解释、执行一条指令
把指令和作为指令操作对象的数据排列起来就形成了程序。CPU依次处理程序,这样看起来就好像程序流动起来了
计算机运作方式
计算机的硬件系统有CPU、I/O和内存三部分构成
内存中存储着程序,也就是指令和数据。CPU配合着由时钟发生器发出的滴答滴答的时钟信号,从内存中读出指令,然后再依次对其进行解释和执行。
PC寄存器
负责存储内存地址,该地址指向下一条即将执行的指令
每解释执行完一条指令,PC寄存器的值就会自动被更新为下一条指令的地址
顺序执行
是按照指令记录在内存中的先后顺序(从低地址到高地址)依次执行的一种流程。
循环
是在程序的特定范围内反复执行若干次的一种流程
条件分支
是根据若干个条件的成立与否,在程序的流程中产生若干个分支的一种流程
4.2 用流程图表示程序的流程
流程图的方便之处在于它并不依赖于特定的编程语言
编程语言只不过是将流程图上的流程用文字重现出来罢了
4.3表示循环程序块的"帽子"和“短裤”
程序块:就是程序中代码的集合。程序中要被处理的部分,就是一种程序块
循环结构
“帽子”和“短裤”把需要反复执行的步骤包围起来
4.4结构化程序设计
为了把程序编写得具备结构性,仅使用顺序执行、条件分支和循环表示程序的流程即可,而不再使用跳转指令
即使使用了结构化异常处理,在硬件上使用的也还是跳转指令,只是说在高级语言中不用再写相当于跳转指令的语句了
如果把用高级语言所编写的程序转换成机器语言,像结构化异常处理这样的语句还是会被转换为跳转指令
4.5 画流程图来思考算法
算法
算法(Algorithm),就是解决既定问题的步骤
想让计算机解决问题,就需要把问题的解法转换成程序的流程。
若被问到"这个程序的算法是怎样的"?
只需回答程序流程
画出程序流程图
程序流程图本身就能解释算法
粗略的流程
“初始化处理”——>"循环处理"——>"收尾处理"
4.6 特殊的程序流程——中断处理
中断处理程序
计算机使程序流程突然跳转到程序中的特定地方,这样的地方就叫做中断处理程序
这种跳转是通过CPU所具备的硬件功能实现的
中断处理流程
由于外部的原因使正常的流程中断,中断后再返回到之前流程的过程就是中断处理流程
在我们使用的计算机上,中断信号是从连接到周边设备上的I/O模块发出的
当用户按下键盘按键,键盘的I/O模块就会把中断请求信号发送给CPU
CPU通过这种方式就可以知道由按键按下,于是就从I/O设备读入数据
中断处理已从硬件发出的请求为条件,使程序的流程产生分支,因此可以说它是一种特殊的分支
处理中断请求的程序,或是内置于被烧录在计算机ROM中的BIOS系统中,或是内置于Windows等操作系统中
4.7 特殊的程序流程——事件驱动
事件驱动
官方解释
通常把用户在应用程序中点击鼠标或者敲击键盘这样的操作称作“事件”(Event)
负责检测事件的是Windows。Windows通过调用应用程序的WndProc()函数通知应用程序事件的发生。
应用程序则根据事件的类型做出相应的处理,这种机制叫事件驱动
通俗解释
让驴拉磨,它不拉,你用鞭抽一下,它就开始拉了。然后又停了,你再抽一下,它又继续拉了这叫用“鞭”驱动“驴”拉磨。
在程序里,程序停止在那不动,你点击一个按钮,它就有反应了,过一会,又没反应了,你再点一下,它又继续运行。这叫用“事件”去驱动“程序”运行。
简单地说就是你点什么按钮(即产生什么事件,如鼠标点击,文字改变,程序退出等),电脑执行什么操作(即调用什么函数)
事件驱动也是一种特殊的条件分支,它以从Windows送来的通知为条件,根据通知的内容决定程序下一步的流程
要实现事件驱动,就必须把应用程序中的WndProc函数(窗口过程Windows Procedure)的起始地址告诉Windows.这一步将在应用程序WinMain()中作为初始化处理被执行
使用环境
事件驱动适用于GUI环境的编程风格
在这种环境中用户可以通过鼠标和键盘来操作应用程序
总结
顺序执行是最基本的程序流程,这是因为CPU中的PC寄存器的值会自动更新
条件分支和循环
在高级编程语言中用程序块表示
在机器语言和汇编语言中用跳转指令来表示,
在硬件上是通过把PC寄存器的值设定为要跳转到目的地的内存地址来实现的
第五章 与算法成为好朋友的七个要点
三个问题
Algorithm的意思是算法
辗转相除法是用于计算最大公约数的算法
程序中的“哨兵”指的是一种含有特殊值的数据,可用于标识
字符串的末尾用0表示,链表的末尾用-1表示,像这种特殊的数据就是哨兵
5.1 算法是程序设计的"熟语"
七个要点
5.2 要点1:算法中解决问题的步骤是明确且有限的
把解决问题的步骤无一遗漏地用文字或图示表示出来
把“文字或图示表示”替换为“用编程语言表达”,算法就变成了程序
5.3 要点2:计算机不靠直觉而是机械地解决问题
注意三点
步骤是明确的、完全不依赖直觉的
步骤是机械的、不需要动脑筋就能完成的
使步骤终止的原因是明确的
计算机是无法实现自主思考的,也正式因为算法的存在,才能使得计算机能够解决很多各种各样的问题。
5.4 要点3:了解并应用典型算法
辗转相除法(求解最大公约数)
埃拉托斯特尼筛法(判定素数)
顺序查找(检索数据)
二分查找(检索数据)
哈希查找(检索数据)
冒泡排序(数据排序)
快速排序(数据排序)
5.5 要点4:利用计算机的处理速度
计算机与人最大的不同,虽然它无法独立进行思考,但是它拥有着人类无法比拟的运算速度,好好利用计算机的优势,我们可以实现一些大量机械重复却实用的算法
5.6 要点5:使用编程技巧提升程序执行速度
在算法技巧中有个著名的技巧叫作 “哨兵”.这个技巧多用在线性搜索(从若干个数据中查找目标数据)等算法中
5.7 要点6:找出数字间的规律
子主题
5.8 要点7:先在纸上考虑算法
思考算法的时候,要先在纸上用文字或图标描述出解决问题的步骤,而不要立即开始写代码
其中,画流程图(Flow Chart)就是最好的方式。所以一定养成良好的思考算法、画流程图的习惯
第六章 与数据结构成为好朋友地七个要点
三个问题
程序中的变量是是数据的容器
变量中所存储的数据是可以改变的。变量的实质是按照变量所存储数据的大小被分配的一块内存空间
把若干个数据沿直线排列起来的数据结构数组
使用了数组就可以高效地处理大量的数据。数组的实质是连续分配的一块特定大小的内存空间
栈和队列的区别:栈中数据的存取形式是LFO;队列中数据的存取形式是FIFO
LIFO( Last In First Out,后进先出)表示优先读取后存入的数据;FIFO( First In First Out,先进先出)表示优先读取先存入的数据
七个要点
6.1 了解内存与变量的关系
变量是储蓄中数据存储的最小单位,每个变量对应着一块物理上的内存空间
在高级语言中,我们都是通过使用变量把数据存储在内存中或从内存中把数据读出来
对程序员来说,我们并不知道变量被存储到内存空间中的哪个地址了。运行程序的时候,由操作系统为我们从尚未使用的内存空间中划分出一部分分配给变量
6.2 了解作为数据结构基础的数组
数组实际上是为了存储多个数据而在内存上集中分配的一块内存空间,并且为这块空间整体赋予了一个名字
数组是数据结构的基础
因为数组反映了内存的物理结构本身,它在内存中存储数据的空间是连续分布的
不同于单个变量,在内存中是空间是一个个单独的存在
6.3 了解数组的应用——作为典型算法的数据结构
冒泡排序算法实现数据的排列
6.4 了解并掌握典型数据结构的类型和概念
栈:数据的使用顺序与堆积顺序相反,后存储的数据先使用。这种存取方式叫LIFO(Last In First Out)
队列:数据的使用顺序与堆积顺序一致,先存储的数据先使用。这种存取方式叫FIF0(First In First Out)
链表:数据手拉手排成一排,某个松开拉住的那只手,再去拉另外的手,数据的排列顺序就改变了
二叉树:一个数据后面连接着两路数据。二叉树相当于链表的特殊形态
这些数据结构其实都是通过程序从逻辑上改变内存的 物理结构,即数据在内存上呈现出连续分布的状态
6.5 了解栈和队列的实现方法
二者相似点:它们都可以把不能立刻处理的数据暂时存储起来
二者不同点:栈对所存数据的存取方式是LIFO的,而队列对所存数据的存取方式是FIFO的
实现栈
组成结构
栈顶指针(始终指向的空数据)
栈数组
入栈函数
出栈函数
图示
实现队列
组成结构
队列数组
队头指针
队尾指针
入队函数
出队函数
图示
6.6 了解结构体的组成
在实现链表和二叉树之前,我们需要先知道什么是结构体
结构体,就是把若干个数据项汇集到一处并赋予其名字后所形成的一个整体
一旦定义完一个结构体,就可以把结构体当作一种数据类型,用它来定义变量
结构体数组示意图
6.7 了解链表和二叉树的实现方法
实现链表
代码
trcuct TestResult{ char Chinese; char Math; char English; struct TestResult* Ptr; # 指向其他元素的指针,Ptr存储了数组中另一个元素的地址 }
Ptr是指针:在C语言中,把存储着地址的变量称为指针
图示
实现二叉树
代码
strcuct TestResult{ char Chinese; char Math; char English; struct TestResult* Ptr1; struct TestResult* Ptr2; }
图示
二叉树的优势
二叉树多用于实现那些用于搜索数据的算法,比如二分查找法
第七章 成为会使用面向对象编程的程序员吧
三个问题
Object翻译成中文是“对象”
OOP是 Object Oriented Programmin(面向对象编程)的缩略语。
C++编程语言在C语言的基础上增加了对OOP的支持
++是表示自增的C语言运算符
之所以被命名为C++,是因为C++在C语言的基础上增加了面向对象的机制这一特点
7.1 面向对象编程
是一种编写程序的方法,旨在提升开发大型程序的效率,使程序易于维护。
与面向对象编程相对的,就是是面向过程编程
设计思路
将关注点置于对象本身,对象构成要素包含对象的行为及操作,以此为基础进行编程
这种方法使程序易于复用,软件的生产效率因而得以提升
使用的主要编程技巧有继承、封装、多态三种。
对OPP的7种理解
7.3 观点1:面向对象编程通过把组件拼装到一起构建程序
在面向对象编程中,使用了一种称为“类”的要素,通过把若干个类组装到一起构建一个完整的程序
从这一点看,可以说类是程序的组件。面向对象编程的关键在于能否灵活地应用类。
类:把有关联的函数和变量汇集到一起编成组就形成了类
7.4 观点2:面向对象编程能够提升程序的开发效率和可维护性
类库
在使用面向对象编程语言开发时,并非所有类都必须由程序员亲自写,大部分类都已内置于面向对象编程语言中,这些类可以为来自各个领域的程序员所使用,通常将像这样的一组类(一组组件)称作“类库”
企业级程序
指的是对可维护性有较高要求的程序。可维护性体现在当程序投入使用后对已有功能的修改和新功能的扩充上
创造类
对于创造类的程序员,他们考虑的是程序的开发效率和可维护性,并决定应该将什么抽象为类
接口
类的创造者和使用者之间需要事先商定类的使用规范。对于类的使用者而言“类看起来是什么样子的”这种关于规范的描述通常被称为“接口”(Interface)
7.5 观点3:面向对象编程是适用于大型程序的开发方法
在人的直觉中,大件物品都是由组件组装起来的。因此可以说面向对象编程方法把同样的直觉带给了计算机,创造了一种顺应人类思维习惯的先进的开发方法
7.6 观点4:面向对象编程就是在为现实世界建模
建模
在面向对象编程中,可以通过“这个是由什么样的对象构成的呢?”这样的观点来分析即将转换成程序的现实世界。这种分析过程叫作“建模”
两步走战略
组件化
就是将可看作是由若干种对象构成的集合的显示世界分割成组件
省略化
因为并不需要把现实世界100%地搬入到程序中,所以就可以忽略掉其中一部分事物
7.7 观点5:面向对象编程可以借助UML设计程序
UML
Unified Modeling Language,统一建模语言
为了把现实世界建模的结果以图形的形式表示出来,经常使用UML
7.8 观点6:面向对象编程通过在对象间传递消息驱动程序
消息传递
通过由一个对象去调用另一个对象所拥有的函数。这种调用方式被称为对象间的“消息传递”
7.9 观点7:面向对象编程中使用继承、封装和多态
三个基本特性
继承
指的是通过继承已存在的类所拥有的成员而新生的类
封装
指的是在类所拥有的成员中,隐藏掉那些没有必要展现给该类调用者的成员
多态
指的是针对同一种消息,不同的对象可以进行不同的操作
7.10 类和对象的区别
类是对象的定义,而对象是类的实例
通俗理解:类是做饼的模具,而使用这个模具做出来的饼就是对象
7.11 类有三种使用方法
仅调用类所持有的个别成员(函数和变量)
在类的定义中包含其他的类(这种方法被称为组合)
通过继承已存在的类定义出新的类
7.12 在Java和.NET中有关的OOP的知识不能少
框架
Java和.NET其实是位于操作系统之上,旨在通过隐藏操作系统的复杂性从而提升开发效率的程序集,这样的程序集也被称为框架
框架由两部分组成,一部分是负责安全执行程序的“执行引擎”,另一部分是作为程序组件集合的“类库”
第八章 一用就会的数据库
三个问题
数据库术语中的“表”是被整理成表格形式的数据
张表由若干个列和行构成。列也被称为字段( Field),行也被称为记录( Record)
DBMS是Database Management System(数据库管理系统)的简称
市面上的DBMS有 SQL Server、 Oracle、DB2等。无论是哪种DBMS都可以用基本相同的SQL语句操作
键和索引的区别是键用于设定表和表之间的关系,而索引是提升数据检索速度的机制
其上每个值都能够唯一标识一条记录的字段称为主键
为了在表和表之间建立关系而在表中添加的、其他表主键的字段称为外键
索引是与键无关的机制
8.1 数据库是数据的基地
数据库
所谓数据库就是数据的基地
关系型数据库
适合存储大规模数据的是关系型数据库
在关系型数据库中,数据被拆分整理到多张表中,同时表与表之间关系也可以被记录下来
8.2 数据文件、DBMS和数据库应用程序
DBMS
通过应用程序来控制DBMS请求操作数据,进而通过DBMS来实际操作数据文件
DBMS不但可以使应用程序轻松地读写数据文件,而且还具有“一致并且安全地存储”数据的功能
数据库系统的构成要素
数据库文件
DBMS
应用程序
常见的四种数据库系统
独立型系统
文件共享型系统
客户端/服务器型系统
Web型系统
设计数据库全流程四步
8.3 明确数据和其属性
知道需要哪些数据以及数据的属性
属性也称作模式(内模式),具体来说就是数据的类型(是数字还是字符串),数字的话是整数还是浮点小数,字符串的话最多允许包含多少个字符,是否允许NULL值
8.4 拆表实现规范化
将一张大表分割成多张小表,然后再在小表之间建立关系,以此来达到整理数据库结构的目的
规范化的要点是在一个数据库中要避免重复存储相同的数据
8.5 设置主键和外键(确保没有多对多关系)
键
为了在表间建立关系,就必须加入能够反映表与表之间关系的字段,为此所添加的字段就被称为键(Key)
主键
该字段的值能够唯一标识表中的一条记录
通常用“某某ID”表示
主键上绝对不能存储相同值,否则DBMS会报错
外键
是来自另外表的主键,对于该表来说是外键
连接表
在建立表与表之间关系的时候,如果当出现多对多关系时,将多对多关系分解成两个一对多关系,加入的这张表称为连接表
8.6设置参照完整性和索引
参照完整性
在设置数据库时,注意勾选设置实施参照完整性,能够有效避免数据被随意删除的情况发生
设置索引
设置索引能够大大提高数据检索的效率
索引是提升数据检索和排序速度的内部机制
通过对字段设置索引,DBMS就会自动为这个字段创建索引表
索引表:一种数据结构,存储着字段的值以及字段所对应记录的位置
只需对那些需要频繁检索和排序的字段才设置索引
8.7 设计用户界面
建立好数据库之后,我们需要设计一个带有用户界面、能够操作其中数据的应用程序
至少必须包括操作数据库的四大类——CRUD
Create 插入记录
Refer 获取记录
Update 更新记录
Delete 删除记录
当然也有其他方便用户操作的类,比如上一条、下一条、统计、打印等功能
8.8 向DBMS发送CRUD操作的SQL语句
访问数据库的中介是DBMS。为了对数据库进行CRUD操作,就必须向DBMS发送命令,即SQL语言(Structural Query Language,结构化查询语言)
8.9 使用数据对象向DBMS发送SQL语句
在windows应用程序中,向DBMS发送SQL语句时,一般下使用的都是被称为数据对象(Data Object)的软件组件
8.10 事物控制也可以交给DBMS处理
事物:事物由若干条SQL语句构成,表示对数据库一系列相关操作的集合
事务控制:在事务进行中发生问题时,把数据库中的数据恢复到事务开始前的状态
事务控制常见操作
开启事务
BEGINTRANSACTION语句
提交事务
COMMIT语句
事务回滚
ROLL BACK语句
第九章 通过七个简单实验理解TCP/IP网络
三个问题
LAN是局域网的缩写
TCP/IP是传输控制协议和网际协议的缩写
TCP/IP协议族是互联网的一套标准协议。TCP/IP这个名字意味着同时使用了TCP协议和IP协议。
MAC地址是能唯一标识网卡的编号
几乎所有的网卡都会在上市前被分配一个不可变更的MAC地址
重点
通常,人们把通过连接多台计算机所组成的、可用于交换信息的系统称为“网络”(Network)
互联网是网络的一种,可以使我们的计算机和远在千里之外的计算机连接在一起
因为信息可以以电信号的形式在网线中传播,所以计算机彼此之间就能够进行信息交换
为了交换信息,还必须在发送者和接收者之间事先确定发送方式。这种对信息发送方式的规定或约束就称为“协议”
9.1 实验环境
集线器:集线器(Hub)是负责把各台计算机的网线连接在一起的集线设备
路由器:路由器(Router)是负责把局域网和互联网连接起来的设备
路由器负责将LAN连接到WAN上。路由器的一端会先连接到互联网服务提供商的路由器上
在服务提供商那里,又会继续将他们的路由器连接到其他路由器上,通过这种方式最终接入到互联网的主干线缆上。
以企业内的LAN为一个基本单位,通过服务提供商的路由器把它们和其他企业LAN互联起来,而把这种联结方式延伸至世界各个角落的正是互联网。把像LAN这样的一张张小网都联结起来,就能织成一张叫作互联网的大网
9.2 查看网卡MAC地址
一台计算机收到电信号以后先做判断,如果是发送给自己的则选择接收,反之则选择忽略;可以用被称作MAC地址的编号来制定电信号接收者
每一块网卡所带有的ROM都预先烧录了一个唯一的MAC地址
进入命令提示符,输入:ipconfig/all 来查询自己电脑的MAC地址
CSMA/CD机制
载波监听:这套机制会去监听(Sense)表示网络是否正在使用的电信号(Career)
多路复用:多个设备可以同时访问传输介质
带冲突检测:表示这套机制会去检测(Detection)因同一时刻的传输而导致的电信号冲突(Collisions)
9.3 查看计算机的IP地址
既然有了MAC地址唯一标识计算机,那么为什么还要有IP地址
因为单纯的MAC地址会导致对计算机的分组管理不方便,而有了IP地址后,我们就可以像邮政编码一样快速寻找信息发送的目的地
平时所说的主机,就是指设定了IP地址的计算机
在TCP/IP网络中,传输的数据会带有MAC和IP两个地址
IP地址
32bit的整数,每8bit为一组,组间用"."分隔,分为4段表示
8bit所表示的整数换算成十进制后范围是0-255,因此可用IP地址整数是0.0.0.0——255.255.255.255
通过IP地址就可以轻松对计算机进行分组管理(网络地址+主机地址)
子网掩码
作用是标识出32bit的IP地址中,从哪一位到哪一位是网络地址,从哪一位到哪一位是主机地址
如子网掩码255.255.255.0转化为二进制,值为1对应着IP地址中的网络地址,值为0对应着主机地址,所以主机地址范围00000001-11111110
进入命令提示符,输入:ipconfig/all 来查询主机的IP地址
9.4 了解DHCP服务器的作用
DHCP:动态主机设置协议
DHCP服务器上记录着可以分配到LAN内计算机的IP地址范围和子网掩码
在勾选“自动获得IP地址”选项,计算机启动时会从DHCP服务器获取IP地址和子网掩码并自动配置它们
默认网关”的值一般为路由器的IP地址,路由器的IP地址也可以从DHCP获得
9.5 路由器是数据传输过程中的指路人
路由器也是跟其他计算机一样连在集线器上的
LAN内采用了CSMA/CD机制,所以所有发送出去的数据也会发到路由器上
路由器工作原理:查看附加到数据上的IP地址中的网络地址部分,发现这个数据不是发送给LAN内的计算机就把它发送到互联网中
路由表:用来记录应把数据转发到哪里的信息;一台路由器的路由表中只会记录通往相邻的路由器的路径
观察路由表:打开命令提示符输入 route print
9.6 查看路由器的路由过程
路由:数据经过路由器转发的过程称为"路由"
追踪路由过程:打开命令提示符输入 tracert 目标网址
9.7 DNS服务器可以把主机名解析成IP地址
DNS:Domain Name System 域名系统
DNS服务器能够将域名(www.baidu.com)解析成IP地址
FQDN:Fully Qualified Domain Name 完整限定域名,将主机名和域名结合起来
DNS服务器通常被部署在各个LAN中,里面记录着FQDN和IP地址的对应关系表
世界范围内的DNS服务器是相互合作的,一台无法解析域名,就会去询问其他DNS服务器
查看主机名:打开命令提示符输入 hostname
询问DNS服务器:打开命令提示符输入 nslookup
9.8 查看IP地址和MAC地址的对应关系
ARP:Address Resolution Protocol 地址解析协议;IP地址到MAC地址的转换
ARP缓存表:当向各个计算机询问完一轮后,就会把得到的MAC地址和IP地址对应关系缓存起来
查看ARP缓存表:打开命令提示符输入 arp-a
9.9 TCP的作用及TCP/IP网络的层级模型
IP协议用于指定数据发送目的地的IP地址以及通过路由器转发数据
TCP协议用于通过数据发送者和接收者相互回应对方发来的确认信号,可靠地传输数据;通常把像这样的数据传送方式称作“握手”
TCP协议还规定了发送者要先把原始的大数据分割成“包”为单位的数据单元,然后再发送,而接收者要把收到的包拼装在一起还原出原始数据
操作系统将实现了TCP/IP等协议的程序作为自身的一部分功能提供
实例
敲打键盘输入的电子邮件正文等数据,并非原封不动地发送出去的,而是先通过实现了TCP协议的程序附加上TCP约束所需的信息
然后再通过实现了IP协议的程序,进一步附加了遵守IP约束所需的信息
实际上计算机发送的是以包为单位的、附加了各种各样信息的数据。
硬件上发送数据的是网卡。在网卡之上是设备驱动程序(用于控制网卡这类硬件的程序)
设备驱动之上是实现了IP协议的程序,IP程序之上则是实现了TCP协议的程序,而再往上才是应用程序,比如Web或电子邮件
TCP协议使用被称作“TCP端口号”的数字识别上层的应用程序。TCP端口号中有一些事预先定义好的,比如Web使用80端口,电子邮件使用25端口(用于发送)和110端口(用于接收)
第十章 试着加密数据吧
三个问题
通常把还原加密过的文件这一操作叫作解密
在字母A的字符编码上加上3,可以得到D字母
在数字签名中使用的信息摘要是指从作为数字签名对象的文件整体中计算出的数值
对比由文件整体计算出的信息摘要,可以证明文件的内容有没有被篡改。加密处理过的信息摘要就是数字签名
基础知识
https协议:数据需要使用加密的方式进行传输
字符编码:将每个字符分配一个数字
字符集:定义应该把哪个编码分配给哪个字符的字符编码体系叫做字符集。字符集分为ASCII字符集、EUC字符集、Uniocde字符集等
明文与密文:未经加密的文本数据叫做明文;将明文进行加密处理得到密文
加密与解密:明文转换成密文的过程叫做加密;将密文还原成明文的过程叫做解密
10.1 何为加密
将构成明文的每个字符分别变换成其他的数值即为加密。通过反转这种变换过程,加密后的文本数据就可以还原
常用的加密技术
对称密钥加密技术 (秘密密钥加密技术)
特点
加密和解密的过程中使用相同数值的密钥
实例
如错开字符编码的加密方式
将文本数据中的每个字符所对应的字符编码一律向后错开3个
加上3的过程就是加密,减去3的过程就是解密,把像3这样用于加密和解密的数字称为“密钥”
缺陷
密钥本身在传递时也存在泄漏的可能,有着被人窃取的风险
公开密钥加密技术
特点
在公开密钥加密技术中,用于加密和解密的密钥并不是相同
用于加密的密钥并且可以公开给全世界的,叫做公钥
用于解密的密钥有且只有解密者本身知道的,叫做私钥
信息发送者将信息利用公钥加密,这份加密后的信息只能拥有私钥的信息接收者才能进行解密,大大防范了密钥本身在传递过程中的泄露问题
典型算法
RSA算法
10.5 数字签名
数字签名是一种公开密钥加密技术的实际应用,用来证明信息接收的有效性
数字签名用私钥加密,用公钥解密
信息摘要可以理解为一个数值,通过对构成明文的所有字符编码进行某种运算就能得出该数值
生成数字签名的步骤
文本数据的发送方
选取一段明文如NIKKEI
计算出明文内容信息摘要:(78+73+75+75+69+73)/100的余数=43
用私钥对信息摘要进行加密:43→66(字符B的编码)
把值B附加到明文后面再发送给接收者
文本数据的接收方
用公钥对信息摘要进行解密:B=66→43
计算出明文部分的信息摘要:(78+73+75+75+69+73)/100的余数=43
比较1和2步的两个值,二者相同则证明接收信息有效
第十一章 XML究竟是什么
三个问题
XML是可扩展标记语言(Extensible Markup Language)的缩写
HTML和XML的区别是HTML是用于编写网页的标记语言。XML是用于定义任意标记语言的元语言
在处理XML文档的程序组件中 DOM成为了3C的推荐标准
基础知识
标记语言:可以用标签为数据赋予意义的语言
元语言:通常把用于定义性语言的语言称作源语言。通过使用XML就可以定义出各种各样的语言
HTML:超文本标记语言(Hyper Text Markup Language ),用于编写网页的标记语言。而XML是用于定义任意标记语言的元语言
DTD: 文档类型描述(Document Type Definition),规定了每种标签里面可以有几类几个标签
11.1 XML是标记语言
把通过添加标签为数据赋予意义的行为成为“标记”
为这种给数据赋予意义的行为定义规则的语言就是“标记语言
实例(HTML)
< head > 表示网页的头部
< title > 表示网页的标题
< body > 表示网页的主体
11.2 XML是可扩展的语言
XML中允许使用者随心所欲创建标签,也就是“<>”中的单词可以是任意的,这就是所谓的“可扩展”
HTML中规定了标签的种类,我们并不能人为去改变设定标签,所以它是固定的标记语言
11.3 XML是元语言
通过自定义要使用的标签种类,我们可以创造出一门新的标记语言。这种能够创造新语言的语言,就叫做“元语言”
XML仅限定了进行标记时标签的书写格式,并没有限定标签的使用方式
11.4 XML可以为信息赋予意义
通过XML我们可以自定义给信息赋予意义,比如设定< productId >、< productName >、< price >标签来表示商品编号、商品名称、价格,从而方便数据信息的处理
11.5 XML是通用的数据交换格式
不同厂商之间可以通过XML文件来进行交换数据
11.6 可以为XML标签设定命名空间
所谓的命名空间,目的是为了防止同形异义的情况出现,也就是相同的标签却表示不同的含义
通常是一个能代表企业或个人的字符串,用于修饰限定标签的名字
实例
< cat >这个标签,有的人会用来表示猫(cat),有的人则会用来表示连接(concatenate)
这个时候我们就需要设定不同的命名空间来区分< cat >不同的含义
< cat xmlns=“www.grapecity.com/yazawa”> 这样就跟其他命名空间中的< cat >标签进行区分了
11.7 可以严格地定义XML的文档结构
一个完整的XML文档包括:XML声明、DTD、XML实例
11.8 用于解析XML的组件
DOM/SAX:该组件用于处理XML文档,已成为W3C标准
11.9 11.9 XML可用于各种各样的领域
第十二章 SE负责监管计算机系统的构建
三个问题
SE:System Engineer 系统工程师的缩略语
IT:Information Technology 信息技术的缩略语
软件开发过程的模型有“瀑布模型”、“原型模型”、“螺旋模型”等
SE VS 程序员
SE是自始至终参与系统开发过程的工程师
SE与程序员从本质上来讲并不是从属关系,只是所做的工作不同,所需要的技能不同
系统开发过程的规范 (主要介绍瀑布模型)
开发过程宛如瀑布一样,一级一级地自上而下流动,永不后退
各个阶段的工作内容及文档
需求分析:SE倾听客户的需求,调查、分析目前靠手工作业完成的业务内容
外部设计:系统处理的数据、显示在画面上的用户界面以及打印机打印的样式等
内部设计:将外部设计的内容具体化
程序设计:为了用程序将内部设计的内容实现出来而做出的更加详细的设计
编码实现:将程序设计书上的内容翻译成程序代码
测试:测试人员根据测试计划文档的内容确认程序的功能,在测试报告中还必须用数字表示出测试结果
部署维护:部署是将计算机系统安装到客户的环境中让客户使用;维护是定期检查计算机系统是否能正常工作
系统设计中的两大点
拆解:将庞大的项目进行拆解为细小项目,不断实现细小项目,再将其组合,最终完成庞大的项目
面向对象:在设计的时候采用面向对象的方式,方便后期系统维护