第一章 计算机的三大原则
- 计算机是执行输入、运算、输出的机器。
- 程序是指令和数据的集合。
- 计算机的处理方式有时与人类的思维习惯不同
- 输入、运算、输出是计算机硬件的基础,输入、输出的都是数据,运算是对数据的计算、加工处理。
- 对计算机来说什么都是数字,然后通过编码技术才能转换成人类能直接识别的信息。
- 任何新技术的产生都离不开计算机的三大原则,为提升效率而贴合人类习惯。
第二章 试着制作一台计算机吧
第二章内容看的是云里来雾里去,各种IC元件组装成一台微型计算机,主要的三大件是CPU、内存、I/O,其他元件都是辅助作用。计算机中最小的信息单位是比特,二进制数中一位就是1比特,信息中基本单位是字节,1字节=8比特,K=2^10=1024,2K字节=8×1024×2
第三章 体验一次手工汇编
汇编:一种使用助记符的编程语言,很简单,但不适合编写大型程序,因为计算机三大件的每步操作都要处理非常细致。
助记符:每种CPU都可能有不同的操作指令,而且CPU所能识别的任何指令合数据都是二进制格式,很不便于人们记忆和识别,所以就用固定的英文单词符号表示每个指令(为什么是英文?因为是说英语的人发明的)。手工汇编就需要对照CPU说明书,每个指令所对应的二进制格式,然后在计算机中运行。
第四章 程序像流水一样流动着
- 程序执行流程:顺序、循环、分支
- VBScript小游戏:石头剪刀布.vbs
Dim gesture(2)
gesture(0) = "石头"
gesture(1) = "剪刀"
gesture(2) = "布"
wins = 0
Randomize
MsgBox "石头剪刀布游戏 Ver.1.00 by Eugene"
For i = 1 To 5
user = CInt(InputBox("0:石头。1:剪刀。2:布"))
computer = CInt(Rnd * 2)
s ="玩家:" & gesture(user) & "、计算机:" & gesture(computer)
If user = computer Then
MsgBox s & "...平局!"
ElseIf computer = (user+1) Mod 3 Then
MsgBox s & "……玩家获胜!"
wins = wins + 1
Else
MsgBox s & "……计算机获胜!"
End If
Next
MsgBox "玩家获胜次数: " & wins
-
流程图(Flowchart)
- 结构化程序设计:良好的程序设计都是通过程序的基本三大操作流程完成,但是CPU中存在跳转操作指令
goto
,会导致程序变得混乱,所以在很早就有学者戴克斯特拉结构化程序设计**思想。但其本意并不是摒弃CPU的goto
指令,而是在一些高级语言中不推荐有类似的功能语法,比如Java中的goto语句,只是保留了这个关键字,但是并没有用到。 - 特殊的程序流程:
-
- 中断处理:Interrupt,计算机硬件具有的一种处理中断的能力。
-
- 事件驱动:这是一种适用于GUI编程的一种设计风格,通过事件的产生触发程序的执行。
第五章、第六章 算法与数据结构
- 从计算机的机械式的工作方式介绍了算法、数据结构的作用,介绍了典型的算法,最基本的数据结构:数组和链表,还介绍的哨兵技巧,是在线性查找中所使用的一种技巧。
- 算法:计算机的工作方式不能跟人比,只能依靠数据机械式的尽量逻辑推理,所以算法并不是单纯的数学公式,一段简单的代码程序也可以称为算法,但是有了数学公式的基础可以实现更为高效的代码程序。
- 数据结构:计算机的存储是靠连续的物理介质存储的,比如最基础的数组和链表类型数据结构,为什么它们在不同的数据操作性能完全不同,最主要的原因就是数组存储在连续的物理内存中,而链表不需要,只需要随机存储,依靠指针相连,数组虽然查找数据很快,但是如果想插入数据,则需要挪动插入位置后面的所有数据,甚至可能需要重新分配连续的内存空间,这个开销还是很大的,而链表性能表现则是想反的,当然也是跟它的数据存储根本方式有直接的原因。
第七章 面向对象编程
- 这本书已经很老了,以至于在读这个章节的时候回觉得面向对象编程才刚刚开始……
- 面向对象:三大特性:继承、封装、多态。书中也截取了很多学者的领悟,来阐述什么是面向对象。面向对象只是一种编程思想,主要是为了解决大工程项目那已维护和扩展的问题,就好像与其对立的面向过程编程思想,在项目达到一定规模就会变得难以维护,而面向对象则会充分体现出它的特性的优势,不论是是分工协作还是代码组织上都会变得简单可行,正是有了这种编程思想才有了众多出色的面向对象编程语言,最具代表性的就是Java语言,经久不衰这么多年,似乎也快被Kotlin所替代,个人也体验了一段时间,确实比Java灵活、便捷、安全,我觉得他的精髓就在于类型推导,才能写出各种灵活便捷的lamda高阶函数,以及各种便捷的语法特性。
第八章 数据库
想当初在学校的时候SQL语句还是很6的,如今都还给老师了……
- DBMS:Data Base Management System,数据库管理系统,用于协助应用程序对数据库进行操作,保证数据一致且安全的存储。
- 数据库设计:拆表实现规范化、设置主键和外键、确保没有多对多的关系(连接表实现一对多)、根据需要设置参照完整性(数据安全机制)和索引(提升排序和检索效率)。
- CRUD:CREAT、REFER(SELETE)、UPDATE、DELETE
- 事务控制:由多条SQL语句构成数据库操作,为防止意外发生,可以保证数据一致性,事务操作主要有:BEGIN TRANSACTION(开启事务)、COMMIT(提交事务)、ROLL BACK(事务回滚)
第九章 TCP/IP
- 通过几个小实验,了解计算机网络大概全貌,计算机网络大致分为局域网、城际网、广域网等等,不论哪种计算机网络,最终都是通过线缆将计算机设备连接到一起,而且从物理形态或虚拟形态看都是切切实实的网状,每个交叉节点或是一台计算机、或是集线器、或是路由器。
- 网络有了,计算机互相之间想要通信就需要有规则,而TCP/IP就是这个规则之一,规则就好像汉语、英语等语法,说不同语言的人就好比是计算机,如果想互相沟通无障碍,就得按规则进行表达发音,这里的发音就好比是网卡将数字信息转化出的电信号,然后通过集线器、路由器传达给其他计算机。
- 其实网络通信协议非常复杂,而书只是蜻蜓点水的对协议进行描述,如果想了解网络数据是如何从计算机1->运营商网络->计算机2,可以先看一下《网络是怎样连接的》,如果只想了解通信协议,可以看其他TCP/IP系列丛书。
- TCP/IP实际上是两个协议,IP是计算机的地址协议,是一个虚拟地址,最终信号传输还需要通过物理(MAC)地址进行确认,举个例子:快递员第一次去你家送快递,但是找不到门,就会打电话联系你确认具体地址怎么找,然后问清楚之后就会把快递送给你。这里的电话就好比IP地址,而具体地址就好比MAC地址。
第十章 加密数据
- 对称加密:在加密和解密过程中共用同一个秘钥串,秘钥的安全性决定了数据的安全性。
- 非对称加密:加密过程中使用公钥,解密过程用私钥,公钥需要被公开使用,私钥只能是授权人才能获取,安全性相比对称加密要安全。
- 数字签名:数字签名可以验证发送方身份,以及数据的完整性,防止收到未授权用户或者被串改的数据。
第十一章 XML
- Extensible Markup Language,可扩展的标记语言。HTML就是其中一种,可以用html编写网页,XML是标记语言的元语言,可以定义各种新语言。W3C组织为其制定了一系列标准,还退出了XHTML网页标记语言。XML也可以用于通用数据格式在互联网中传输,早期还有CSV(Comma Separated Value,逗号分隔值),但是CSV不便于解读,不如XML每个字段值都定义标签,为其赋予意义,但是如今有更火的JSON数据格式,json结合了XML和CSV的优点,便于解读,数据体量小。
- 适用领域
名称 | 用途 |
---|---|
XSL | 为XML中的信息提供显示格式 |
MathML | 描述数学算式 |
SML | 把多媒体数据嵌入到网页中 |
MML | 描述电子病历 |
SVG | 用向量表示图形数据 |
JepaX | 表示电子书 |
WML | 表示移动终端上的数据 |
CHTML | 表示手机上的内容 |
XHTML | 用XML定义HTML4.0 |
SOAP | 实现分布式计算 |
第十二章 SE负责监管计算机系统的构建
- SE:system engineer,系统工程师。《日经计算机术语辞典2002》解释:SE指的是在进行业务信息化时,负责调查、分析业务内容,确定计算机基础设计及其详细规格的技术人员。同时SE也负责系统开发的项目管理和软件的开发管理、维护管理工作。由于主要的工作是基础设计,所以不同于编写程序的程序员,SE需要具备从硬件结构、软件的构建方法乃至横跨整个业务的广泛知识以及项目管理的经验。也就是说SE未必写过程序,但要对计算机相关知识有一定了解,比如前十一个章节的内容,然而更多的是对项目需求的分析、设计和管理。
- IT:information technology,信息技术。很多时候提到IT这个词更多想到的是计算机(电脑),毕竟计算机的普及,代替和提高了很多行业中手动处理信息的方式,但事实上计算机并不能代表IT,任何一个能有效处理信息的工具和方法都可以称为IT,只不过当今最广泛所使用的就是计算机。如果哪天量子技术或生物技术有了突破,计算机可能还叫计算机,但形态和组成未必是现在的样子。(想想都觉得科幻)
- 软件开发过程模型:瀑布模型、螺旋模型、原型模型等等。书中主要以瀑布模型为例进行讲解,回想实际工作中的规范流程,似乎大部分都是从瀑布模型演变而来,尽管并没有完全按照规范执行,但规范毕竟是规范。瀑布模型流程:开始->需求分析->外部设计->内部设计->程序设计->编码实现->测试->部署、维护->目标。需要说明的可能主要是外部和内部设计,外部设计主要是面向用户的设计,比如UI(用户界面)、功能流程等等,内部设计主要面向程序员,比如架构模型、技术选型等。
- 设计:所谓设计,就是拆解。任何事物流程都可以拆解成细小的子任务,然后再将每个子任务组合起来,并且能有效地运作起来,这便能成为系统。但是否是一个成功的系统并不是系统实现有多完美,而是系统能否解决用户问题,这就取决于最开始的需求分析,老话说得好,万事开头难。设计方法也有很多种:
设计方法 | 拆解时关注的事物 |
---|---|
通用功能分割法 | 在整个系统中通用的功能 |
STS法 | 数据流(输入、变换、输出) |
TR法 | 事务(数据的处理单位) |
Jackson法 | 输入数据和输出数据 |
Warnier法 | 输入数据 |
面向对象法 | 构成计算机系统的事物(对象) |
一个结论:将计算机系统的构成要素设计成多机备份,可以大幅提升设备利用率。
例如:90%利用率设备a ✖️ 80%设备利用率b = 72%整体设备利用率
(90%利用率设备a✖️2) ✖️ (80%设备利用率b✖️2) = 95%整体设备利用率