计算机科学导论


第一章:绪论

  • 图灵模型

  • 把计算机当成黑盒:接受输入,输出结果。(分为数据处理器和可编程处理器)
  • 通用图灵机:机器只要提供合适程序就能进行任何运算。

    冯诺依曼模型

  • 计算机组成部分

  • 数据:
  • 软件:
  • 计算机简史-省略

    社会问题与道德问题

  • 第二章:数字系统

  • 数字系统概念

  • 常见位置化系统(数字所在位置表示其值):十进制,二进制,八进制,十六进制。
  • 常见非位置化系统:罗马数字系统。

    各进制及转换-省略

    第三章:数据存储

  • 数字系统概念

  • 多媒体:计算机中定义包含数字,文本,音频,图像,视频的信息。
  • 存储数字-省略

  • 包括整数存储,小数存储,补码余码系统等,详情见计算机组成原理

    存储文本

  • 存储音频

  • 音频是模拟数据(时间度量中的值不可能无限存在计算机内存中):
  1. 先进行采样:间隔一段时间记录值,用这些值表现模拟信号。
  2. 再进行量化:把样本数据截取为最接近的整数值。
  3. 然后进行编码:把样本值编码为位模式。

    存储图像

  • 图像仍然需要采样,但其模拟数据随空间变化,样本成为像素。(解析度越高,每英寸方块需要记录像素越多,色彩深度也就越高)
  • 像素编码技术之一——真彩色,24位编码一个像素,每个三原色RGB表示8位,可以编码2的24次方个颜色。(还存在其他不常用方法)

    存储视频

  • 视频是图像在时间上的表示,后续讨论MPEG(视频压缩技术)

    第四章:数据运算

  • 逻辑计算

  • 位层次:非,与,或,异或
  • 移位运算

  • 算数运算

  • 加减乘除,适用于整数与浮点数
  • 第五章:计算机组成-省略

    第六章:计算机网络-省略

    第七章:操作系统-省略

    第八章:算法

  • 算法是一组明确步骤的有序集合,它产生结果并在有限的时间内终结。即一组定义良好且有序的指令集合。

    算法三种结构

  • 顺序,判断,循环
  • 算法的表示

  • 一般通过UML(算法流程图)或者伪代码来表示算法
  • UML:
  • 伪代码:

    基本算法-省略

  • 详情见数据结构(排序,查找等)

    子算法

  • 递归是自我调用的过程,算法出现在它本身定义中即为递归算法。
  • 而迭代是不包含本身的。

    第九章:程序设计语言

  • 程序设计语言的演化

  • 计算机语言就是编写程序时,根据事先定义的规则写初的规定语句集合。
  • 机器语言:计算机发展早期唯一的程序设计语言,每台计算机都有自己的机器语言(01序列组成),计算机唯一能事别的语言就是机器语言。
  • 汇编语言:带符号或助记符的指令和地址代替二进制码的机器语言,最重要翻译成机器语言执行。
  • 高级语言:提高汇编语言效率,提高编程效率,产生了高级语言。高级语言可以移植到不同机器上,但必须转化为机器语言(成为接释和编译)。

    程序设计语言的翻译

  • 高级语言程序被称为源程序,被翻译的机器语言成为目标程序。
  • 两种方法用于翻译:编译和解释。
  • 编译:把整个源程序翻译成目标程序。
  • 解释:使用解释器把源程序翻译成目标程序(逐行进行翻译)。
    ①解释的第一种方法:源程序每行被翻译成被其使用的计算机上的机器语言,立即执行,但在翻译执行中出错就从头解释执行,所以这种方法非常慢。
    ②解释的第二种方法:java到来后新的解释过程被引入,java可以向任何计算机移植,所以把源程序分为两步进行翻译(编译和解释)。java源程序首先编译为字节码(看起来像机器语言但不是任何特定计算机的目标代码,而是虚拟机的目标代码,该虚拟机称为JVM),字节码可以被任何运行JVM的计算机进行编译和解释。
  • 编译和解释都有相同的翻译过程:
  • 词法分析器:一个个符号读取源代码,创建源程序中的助记符表。比如while就是c/c++/java中的循环符号。
  • 语法分析器:分析一组助记符,找出其指令。比如:x,=,0,就是c语言中赋值语句“x=0”。
  • 语义分析器:检查语法分析器创建的句子,保证它们不含二义性。
  • 代码生成器:对每条指令转化为在其上运行的计算机的机器语言。

    程序设计语言的编程模式

  • 过程式模式:把程序当作主动主体,使用称为数据/数据的被动对象,为了操纵数据,主动主体发出动作,称为过程。过程模式中对象和过程是完全独立分开的实体。三部分构成:对象创建,过程调用,每个过程的一组代码。
  • 面向对象模式:处理活动对象,执行的动作都包含在对象中,对象只需要接收合适的外部请求来执行动作。类中的方法被所有相同类型对象共享,也被从这些对象继承的其他对象共享。
  • 拥有继承性,多态性。
  • 函数式模式:程序看作数学函数,看作黑盒。提供一些原子函数并且可以组合创建新的函数。比如LIST,Scheme等语言。
  • 说明式模式:根据逻辑推理的原则响应查询。需要大量事实来推理,迄今为止只局限于AI领域。比如Prolog语言。
  • 程序设计语言的共同概念

  • 数据类型:定义一系列值以及应用这些值的一系列操作。分为简单数据类型(原子性,不可分为更小数据类型)和复合数据类型(一组数据,每个元素都说简单/复合数据类型)。
  • 变量:存储单元,每个内存单元对应计算机中一个地址。
  • 变量声明:变量使用前需要声明,即赋予名字和类型,留出存储区域。
  • 常量:可存储值的命名的位置,但在程序开始处被定义后就不能被改变。
  • 输入输出
  • 表达式:由一系列操作数和运算符简化后的一个单一数值,比如2*5+3
  • 语句:执行响应对坐,被翻译成一条/多条计算机可执行指令。存在赋值语句,判断语句,选择语句,循环语句。
  • 子程序:完成单一任务的子集集合在一起,放在自己程序单元中就是子程序,使得程序更加结构化,一次编写多次使用。
  • 参数:主程序使用参数传递数据,主程序中称为实际参数,子程序称为形式参数。主程序通过两种方式传参:传值和传引用。

    第十章:软件工程

  • 概念

  • 利用合理的工程方法和原则来获得在真实机器上工作的可靠软件
  • 开发过程模型

  • 瀑布模型:前一个阶段结束才能开始后一个阶段,即只有一个方向流动。缺点是过程出现问题需要检查全过程。
  • 增量模型:首先开发系统的简化版本,然后增加更多细节,知道所有功能全部被加入。
  • 分析阶段

  • 开发过程始于分析阶段,生成规格说明书,存在两种方法:面向过程分析与面向对象分析。
  • 面向过程分析使用多种建模工具:数据流图,实体关系图,状态图。
  • 面向对象分析使用多种建模工具:用例图,类图,状态图。

    设计阶段

  • 实现阶段

  • 语言选择进行评估。
  • 测试阶段

  • 目的就是发现错误bug,良好的测试能发现最多的错误。
  • 文档

  • 包括用户文档,系统文档,技术文档等。

    第十一章:数据结构-省略

  • 详情见数据结构篇。

    第十二章:抽象数据类型-省略

  • 详情见数据结构篇。

    第十三章:文件结构

  • 引言

  • 文件存储在辅助存储设备中(磁盘磁带等),设计一个文件时,关键在如何从文件中检索信息,有时需要快速存取特定数据。
  • ①顺序文件:按照顺序从头到尾存取记录,以EOF为文件末尾标志。
  • ②索引文件:随机存取记录,需要记录的地址。由数据文件组成,是带索引的顺序文件,索引只占两个字段:顺序文件的键和磁盘相应记录的地址。
  • ②散列文件:用散列/哈希函数来完成映射,用户给出键,函数把其映射为地址,无需额外的索引文件。
  • 散列方法:
    ①直接散列法:
  • ②求模法/除余散列法:
  • ③数字析取散列法:
  • 冲突

  • 解决方法:
    ①开放寻址法:冲突数据存在下个地址
    ②链表解决法(Java中哈希MAP使用):冲突数据存在下个链表结点
    ③桶散列法:
  • 目录

  • 第十四章:数据库-省略

  • 详见数据库原理

    第十五章:数据压缩

  • 概念

  • 通过消除数据中内在的冗余来减少发送/存储的数据量,分为有损和无损压缩。
  • LZ编码详情搜索:https://blog.csdn.net/weixin_42570192/article/details/122353257

    第十六章:安全-省略

  • 安全三个目标:机密性,完全性,可用性。

    第十七章:计算理论-省略

  • 第十八章:人工智能-省略


文章作者: FFFfrance
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 FFFfrance !