计算机三大原则
计算机的三大原则:
- 计算机是执行输入、运算、输出的机器。
- 程序是指令和数据的集合。
- 计算机的处理方式和人类的思维习惯并不相同。
从三大原则可以看出,对于计算机来说,无论多复杂多大型的项目都无所谓输入、计算、输出这三步,万物都是01。
而且计算机并不习惯按人的思维来处理,对于 CPU 来说只能处理一种语言 —— 机器语言,为了让人和机器能够更好的沟通协作,才有诞生出汇编和各种高级语言。
硬件
- 计算机三大件:CPU、内存、I/O。
- 比特是信息的最小单位,字节是信息的基本单位。
- 地址总线与数据总线,数据总线的个数代表 CPU 一次处理数据的大小。
- CPU 通过 MREQ 与 IORQ 引脚来区分数据的由内存读取还是 IO 读取。
- RD 表 输入;WR 表 输出;M1 表同步;INT 表中断。
- CPU 在时钟信号的控制下解释执行程序,再把执行结果输出到内存或 IO。
- 程序是指令和数据的集合。
程序
- 程序的三种流程分支:顺序、条件、循环。
- 写代码之前,现在做好流程图,考虑好各种情况,在写代码。
- 禁用 GOTO,goto 使代码可维护性降低,这也是 Swift 没有 goto 的原因。
- CPU 不会时刻监听键盘,而是通过键盘的中断事件来知道键盘要输入了。
- 变量的实质就是按照变量的类型在物理内存中开辟一块等同大小的空间来存储变量的值。
算法与数据结构
-
算法的定义:步骤明确且有限,执行结果唯一。
-
必须掌握的算法:辗转相除法、二分查找、哈希查找、冒泡排序、快排。
-
哨兵的作用:用于减少循环中的 if 判断。
-
数据结构:数组、链表、栈、队列、二叉树。
-
第六章的算法,冒泡示例书中说是降序,但看代码其实是升序😂。
var arr = [10, 2, 6, 4, 1, 80]
for i in 0..<arr.count {
for j in stride(from: arr.count - 1, to: i, by: -1) {
if arr[j - 1] > arr[j] {
arr.swapAt(j, j - 1)
}
}
}
print(arr)
// [1, 2, 4, 6, 10, 80]
OOP
- 意义:提升开发效率、是代码易维护。
- 三大特性:继承、封装、多态。
- 架构设计的工作:创建的系统和组件要开发效率高、可维护性强、抽象能力大。
- 建模的过程中要抽象归类和忽略部分细节。
数据库
- 类型:关系型数据库、非关系型数据库
- 表的行为记录;列为字段。
- 主键:唯一标识表中的一条记录;外键:建立表与表之间的关系。
- 索引:一种高效查找数据的机制。
- 事务:用于执行多条 SQL 语句,且有回滚功能。
网络
- DNS:使用域名来获取对应的 IP 地址;ARP:使用 IP 地址来获取 MAC 地址。
加密
- 加密解密本质是对数字的一种变形操作。
- 对称加密:加密和解密用同一个秘钥;非对称加密(RSA 算法):加密用公钥,解密用私钥。
- 数字签名:用于保证数据的发送者未被修改。