《计算机是怎样跑起来的》读书笔记

第一章 计算机的三大原则

  1. 计算机是执行输入、运算、输出的机器。
  2. 程序是指令和数据的集合。
  3. 计算机的处理方式有时与人类的思维习惯不同
  • 输入、运算、输出是计算机硬件的基础,输入、输出的都是数据,运算是对数据的计算、加工处理。
  • 对计算机来说什么都是数字,然后通过编码技术才能转换成人类能直接识别的信息。
  • 任何新技术的产生都离不开计算机的三大原则,为提升效率而贴合人类习惯。

第二章 试着制作一台计算机吧

第二章内容看的是云里来雾里去,各种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)


    石头剪刀布.png
  • 结构化程序设计:良好的程序设计都是通过程序的基本三大操作流程完成,但是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%整体设备利用率

你可能感兴趣的:(《计算机是怎样跑起来的》读书笔记)