首页 > 其他分享 >计算机科学速成

计算机科学速成

时间:2022-10-21 20:56:28浏览次数:67  
标签:计算机 计算机科学 程序 速成 算法 指令 内存 数据

计算机科学速成课

[http://【【计算机科学速成课】[40集全/精校] - Crash Course Computer Science】https://www.bilibili.com/video/BV1EW411u7th?p=36&vd_source=0c8a4e7e526129271bae331d2e96defc]

1:计算机早期历史

最早的计算机:算盘,发明于美索不达米亚,BC2500 。

星盘:计算经纬度

优势:计算设备让原先很费力的事情变得更快、更简单、更精确 、降低了门槛、加强了人们的能力。

computer发展:

计算者(职业)——步进计算机(里程表)—— 射程表(大炮)——差分机—— 分析机——打孔卡片制表机(1890美国人口普查)——IBM(企业开始研发机器替代人工,提高效率)

2:电子计算机

  • 房间大小的计算机
  • 哈佛马克一号,IBM在二战时期建造,。大脑是“继电器”, 速度慢,齿轮磨损。

3:布尔逻辑和电门

电路闭合,电流流过,代表真。电路断开,无电流流过,代表假。

晶体管是电控制开关、晶体管还可以通过不同大小的电流,表示不同的进制数。

乔治-布尔用逻辑方程,证明数学逻辑分析。在布尔代数中,变量的值是true和false,且能进行逻辑操作,变量的基本操作:NOT、AND、XOR(异或运算:A、B结果不同时,运算结果为1,否则为0)。

4:二进制

1个二进制可以代表一个数,可以增加位数表示更多信息,意味着每个左侧乘数必须是右侧乘数的两倍。

1字节即8bits表示范围:0~255,即8位都是0或8位都是1。能表示256个不同的值,即8位游戏色彩范围有256种。

32位和64位电脑指电脑最小内存地址大小,第一位表示正负。

ASCII和Unicode编码是都用计算机代码表示字符的标准库。

图像、音乐、视频都是二进制储存在电脑中。

5:算数逻辑单元

ALU:计算机里负责运算的组件(1个算术单元和1个逻辑单元),简单的ALU电路没有乘除法。

算数单元

HALF ADDER image-20221021192036885

FULL ADDER 8位行波进位加法器

image-20221021192345080

如果第9位有进位,就会“溢出”。

逻辑单元

逻辑单元执行逻辑操作,如AND,OR,NOT

ALU单元

  • 2个8bit输入
  • 4bit操作码
  • 8bit输出
  • 结果标志flag
    • OVERFLO 溢出标志
    • ZERO结果为0标志,结果为0时标志为真。
    • NEGATIVE 结果为负标志,结果为负数时标志为假。

image-20221021192530804

6:寄存器和内存

计算机内存

随机存取存储器(Random Access Memory, RAM),其只能在有电的情况下存储东西

另一种存储称为持久存储(Persistent Memory),电源关闭时数据也不会丢失,它用来存其他东西。

锁存器AND-OR

通过OR逻辑单元将储存1和储存0的电路结合,得到能锁住1位(1bit)信息的电路。

两个输入,设置输入把输出变成1,复位输入把输出变成0;image-20221021193114247

门锁:GATED LATCH

为锁存器添加门锁得到能储存1bit的部件。

image-20221021193206576

image-20221021193427816

寄存器

preview

如果我们并排8个锁存器,就能存储8位信息。一组这样的锁存器称为寄存器(Register)

寄存器能够存一个数字,这个数字的位数称为寄存器的位宽(Width)

写入寄存器之前,要先启动里面所有的锁存器,可以将所有锁存器的允许写入线都连接在一起,把它设为1,然后用8条数据线发送数据,然后将允许写入线设回0,就能将8位数据存储在寄存器中

门锁矩阵

对于256位的门锁矩阵(即锁存器矩阵),需要35条线:

  • 1条“数据线”连接所有锁存器传递数据,每次只有一个锁存器会存取数据,
  • 一条允许写入线,
  • 一条允许读取线,
  • 16行16列的线用于选择锁存器

img

多路复用器multiplexer

将地址转成锁存器矩阵的行和列。

256位寄存器

即对256位寄存器进行封装,输入是一个8位地址(1字节),4位代表列,4位代表行。

img

对其再进步一扩展,可以将8个256位内存拼在一起,这样就能一次读写8bit数据,也就是一个字节数据

由于每个256位内存都使用相同的8位数据线,因此8位数据会存在每个256位内存的相同地址中,并且第一个256位内存存放第一位,第二个256位内存存放第二位,以此类推。

这个模块可以在256个地址中存储256个字节

(由于这种设计,所以计算机中以一个字节为寻址的最小单位)

img

7:中央处理器 CPU

  • RAM:内存
  • 寄存器:存储临时数据
  • 指令地址寄存器:存储当前指令的内存地址(追踪程序运行到哪里)。前四位是操作码,后四位是地址或寄存器。
  • 指令寄存器:

CPU运行过程:

image-20221021193813019

image-20221021193843350

  1. 取指令阶段:将指令地址寄存器连到RAM,将指令地址寄存器里的地址在RAM里的对应返回值复制到指令寄存器。
  2. 控制单元解码阶段:根据指令表解码指令寄存器得到的指令,
  3. 执行阶段:启用对应寄存器的“允许写入线”,存取数据,把“指令地址寄存器”+1.
  4. 结束

CPU“取指令→解码→执行”的速度叫“时钟速度”,单位是赫兹,是用来表示频率的单位。

一赫兹代表1秒1个周期

计算机超频:修改始终速度,加快CPU速度,但是会让CPU过热,信号跟不上时钟速度,产生乱码。

当电脑待机或跑性能要求较低的程序时,需要降频,所以需要CPU“动态调整频率

8:指令和程序

  • ADD:加法指令

  • SUB:减法指令

  • JUMP:跳转指令,让程序转到新位置,改变指令顺序或跳过指令。

    • JUMP 0:跳回开头
    • 底层原理:把指令后4位代表的内存地址的值,覆盖掉“指令地址寄存器”里的值。
  • JUMP_NEG:在ALU的“负数标志”为真时,进行JUMP

  • JUMP IF EQUAL (如果相等)

  • JUMP IF GREATER(如果更大)

  • HALT:停止指令,能区分指令和数据

❤指令和数据存在同一个内存里,本质上没有区别,都是二进制数

因为4位指令地址寄存器只能最多表示16个值,即只能操作16个地址,现代CPU采用两种策略:

  1. 增加指令长度:32位/64位
  2. 可变指令长度

立即值:指令地址较长,指令包含操作码和指令地址,无需解码。

9:高级CPU设计

CPU缓存|CACHE:加快CPU从RAM读取数据的速度,缓存也可以当临时空间,为长/复杂运算储存中间值。

当想要的数据已经在缓存中叫做CACHE HIT, 如果不在叫做CACHE MISS

当缓存中的数据和RAM中不一致时 ,缓存每块空间有一个叫“DIRTY BIT”(脏位)的特殊标记。当缓存满了而CPU又要缓存时,在清理缓存腾出空间之前,会先检查“DIRTY BIT”,如果是DIRTY,在加载新内容之前会把数据写会RAM。

乱序执行:高端CPU动态排序 有依赖的关系的指令。

“推测执行”、“分支预测”:高端CPU遇到JUMP指令时,提前把可能执行的指令放进流水线。

多核处理器:一个CPU里有多个独立处理单元,同时运行多个指令流。

10:早期的编程方式

程序存在插线板→程序存在内存(储存程序计算机)

程序易于修改、方便CPU快速读取。如果内存足够不进可以存要运行的程序,还可以存程序需要的数据。

程序和数据存在一个地方,叫“冯诺依曼结构”

→一个处理器(有算数逻辑单元)+数据寄存器+指令寄存器+指令地址寄存器 +内存(负责存数据和指令 )


11:编程语言发展史

机器语言/机器码:二进制

计算机早期阶段,必须用机器码写程序,先在纸上对程序进行高层次描述,然后用“操作码表”把伪代码转换成二进制机器码。

汇编器:一个可以重复使用的二进制程序,能读懂“汇编语言”写的文字指令,将其自动转成二进制指令(机器码)。一般来说,一条汇编指令对应一条机器指令。

伪代码:对程序的高层次描述

“助记符”:操作码的简单名字,助记符后面紧跟数据,形成完整的指令。

编译器:将高级语言转换成可以直接执行的机器语言,不用管寄存器或内存位置等底层细节,程序员只需要创建,代表内存地址的抽象,叫“变量”,给变量赋予变量名。

  • 1960s:ALGOL,LISP,BASIC
  • 1970s:PASCAL,C,SMALLTALK
  • 1980s:C++,Objective-C,Perl
  • 1990s:Python,Ruby,Java
  • 2000s:Swift,C#,Go

12:编程原理

赋值语句: 把一个值赋给一个变量。

“初始化”:设置最开始的值。

控制流语句:如“if”

条件语句:判断是否执行控制流的语句

循环语句:如while

for循环:不判断条件,累计判断次数,会循环特定次数。

函数:为了隐藏复杂度,其他地方想用这个函数,直接写函数名就可以。函数结束,需要用return语句把结果交给使用这个函数的代码,指明返回什么。

库:预先编写好的函数集合

13:算法

算法:解决问题的具体步骤

记载最多的算法:"排序",如“选择排序”,是一种非常基础的算法。

选择排序“伪代码”示例:

image-20221021194323087

“算法复杂度”:算法的输入大小和运行步骤之间的关系,表示运行速度的量级

选择排序算法复杂度:O(N^2)

归并排序算法复杂度:O(n*log n),比选择排序更加高效。

图搜索算法:O(n log n+1)如地图线路规划

14:数据结构

数组:用[ ]括起来。 把多个连续的值存在数组变量里,拿出数组中的某一个值时,需要指定一个下标。数组下标从0开始计算。

字符串:用“ ”括起来。字符串在内存里以二进制0结尾,即null。

strcat:连接两个字符串,把第二个放到第一个结尾。

矩阵:数组的数组,为了取一个值,需要两个下标,比如 a= j [2] [1]

结构体(Struct):把几个有关系的变量打包在一起,结构体和数组一样在创建时有固定大小,不能动态增加大小。

指针:指向一个内存地址

链表Linked list:链表是一种灵活的数据结构,能存多个节点node。可以用包含“指针”和"变量“的结构做链表。链表大小可以动态增减,可以创建一个新节点,通过改变指针的值,把新节点插入链表。

image-20221021194708538

循环链表:链表最后一个指针指向第一个变量。

一个指针的链表:

  • 队(queue):先进先出(FIFO)

  • 栈(stack):后进先出(LIFO)

两个指针的链表:树(tree)

  • 根节点:Root
  • 子节点:children nodes
  • 母节点:parent node,任何子节点的直属上层节点。
  • 叶节点:leaf nodes ,没有任何“子节点”的节点.
  • 二叉树:binary tree,节点最多有两个子节点

image-20221021194856287


15:阿兰-图灵 Alan Turning

解决可判断性问题

图灵机:

  • 有无限长的纸带,纸带可以储存符号
  • 有一个读写头,可以读取和写入纸带上的符号
  • 有一个状态变量,保存当前的状态
  • 有一组规则,描述及其做什么,规则根据当前状态+读写头看到的符号,决定机器做什么。结果可能是在纸带上写入一个符号,或改变状态,或把读写头移动一格,或执行这些动作的组合。

image-20221021195020469

证明了计算机的计算能力是有限的

图灵测试:如果计算机能欺骗人类相信它是人类,才算是智能。


16:软件工程

面向对象编程(Object Oriented Programming):把函数打包成层级,把相关代码都放在一起,打包成对象(Objects ),再将其放入相关的父类对象。

面向对象的核心:通过封装组件,隐藏复杂度,选择性的公布功能。

代码文档(doucumentation):帮助理解不同层级的代码功能

API(程序编程接口):通过定义public和private,控制哪些函数和数据让外部访问,哪些仅供内部。帮助不同程序员合作。

IDE(Integrated Development Environments 集成开发环境):集成了帮助写代码、整理、编译、调试和测试代码的工具。

文档/注释:帮助开发者理解代码,提高代码复用性。

源代码管理(版本控制):跟踪所有变化,如果新添加的代码发现BUG,可以回滚到之前的稳定版本。

测试Quality Assurance(QA):质量保证测试。

alpha版本:在beta版之前的版本,错误很多,只在公司内部测试。


17:集成电路&摩尔定律

早期的计算机都由独立的部件组成,用线连在一起。

1950s中期,晶体管开始商业化用于计算机。晶体管比电子管更小、更快、更可靠。将电子管全部替换晶体管后的新机器,IBM7090 速度快6倍,价格只有一半。

晶体管的出现标志着“数字2.0“,但还是没有解决”数字暴政“的问题。

集成电路IC(Integrated Circuits ):把多个组件包在一起,变成一个新的独立组件。

集成电路材料从锗→

❤印刷电路板—PCB:可以大规模生产,无需焊接或用一大堆线,他通过蚀刻金属线的方式连接零件。把PCB和IC结合使用,可以大幅减少独立组件和电线,但做到相同功能。

❥光刻电路板:用光把复杂图案印到材料上,比如半导体。 由硅制成的半导体晶圆,可以控制其导电时机。因此可以用晶圆做基础,把复杂金属电路放上面,集成所有东西。

光刻电路板制作步骤

  1. 硅片表面清洗烘干

  2. 涂底

    image-20221021200104682

  3. 旋涂光刻胶

    image-20221021200039598

  4. 软烘

    image-20221021200011149

  5. 对准曝光

    软烘后用另一种化学物质,通常是一种酸,可以洗掉氧化层露出的部分,蚀刻到硅层,而氧化层会被光刻胶保护住,再用另一种化学药品洗掉光刻胶。

  6. 后烘

    image-20221021200544266

    再使用几轮光刻法来做晶体管,与之前一样先盖氧化层,再盖光刻胶,再用新的光掩膜,在掺杂区域上方开一个缺口。

  7. 显影

    再洗掉光刻胶。

  8. 硬烘

    然后用另一种气体掺杂,把一部分硅转换成另一种形式。

  9. 刻蚀

    image-20221021201747793

    image-20221021201857765

  10. 光刻胶去除

    image-20221021202000816

用类似的步骤,光刻可以制作其他电子元件,比如电阻和电容,都在一片硅上。

1968年,罗伯特·诺伊斯和戈登·摩尔成立Intel(Intergrated和Electronics)。

集成电路的出现开启了计算3.0 ,现代集成电路由软件自动生成芯片设计。

摩尔定律的终结:

  1. 用光掩膜把图案弄到晶圆上,因为光的波长,精度已达极限。科学家在研制波长更短的光源,投射更小的形状。
  2. 当晶体管非常小,电极之间可能只有原子的距离,电子会跳过间隙,这叫:量子隧道贯穿,容易造成晶体管漏电。

18:操作系统-Operation Systems

当CPU越来越快,放程序的时间比程序运行的时间还要长,所以需要一种方式让计算机自动运作。

操作系统:简称OS,其实也是程序,但它有操作硬件的特殊权限,可以运行和管理其他程序。

当出现越来越多不同配置的计算机,需要操作系统充当软件和硬件之间的媒介,实现程序和不同型号外部设备的交互。

操作系统提供API来抽象硬件,叫"设备驱动程序",程序员可以用标准化机制和输入输出硬件(I/0)交互。例如,程序员只需要调用print方法,操作系统会处理输出到纸上的细节。

多任务处理:多个程序可以同时运行,在单个CPU上共享时间。给每个程序分配专属的内存块,每个程序在运行时都会占用一些内存,当切换到另一个程序时,我们不能丢失数据。

虚拟内存:程序可能会被分配到很多非连续的内存块,导致程序很难被追踪,为了隐藏这种复杂性,操作系统会把内存地址进行“虚拟化",程序可以假定内存总是从0开始,而实际物理地址,被操作系统隐藏和抽象了。

动态内存分配:操作系统会自动处理虚拟内存和物理内存之间的映射。这种机制使程序的内存大小可以灵活增减。

内存保护:给程序分配专用内存,方便隔离。防止程序出错,或恶意软件(如病毒)。

"内核恐慌"(kernel panic):计算机发生错误,把当前流程包装到panic函数,当流程被调用时,机器崩溃。

19:内存&储存介质-Memory&Storage

任何写入“储存器”的数据会一直存着,直到被覆盖或删除,断电不会丢失。

“顺序存储器”、“循环存储器”

  • “延迟线存储器”
  • 磁带

“随机存取存储器”:可以随时访问任何位置

  • 磁芯存储器
  • 磁鼓存储器
  • 磁盘
  • 软盘
  • CD
  • DVD
  • 机械硬盘
  • 固态硬盘SSD

寻道时间:磁盘访问数据的时间

20:文件系统-File System

文件在底层都是一样的:一长串二进制,由ASCII字符编码标准翻译。

WAV音频文件:

  • 码率(bit rate)
  • 单声道/立体声

元数据:在文件开头,在实际数据前面,也叫文件头(Header),储存文件属性。

目录文件:在文件最开头,位置0,记录其他文件的起始位置和长度,文件的名字,文件其他元数据。

计算机文件数据早期从头存到尾,连续存储。储存器没有文件的概念,只是储存大量的位。

现代计算机文件数据把空间分成一块块,导致有一些“预留空间”,可以方便改动。允许文件拆分存在多个“块”里。

删除文件数据:只需要在目录文件删除那条记录,这一块空间就变成了可用,但是并没有擦除数据,直到那些块被新数据覆盖。

碎片整理 :计算机把数据来回移动,排列成正确顺序,增删改查导致。

分层文件系统:目录文件不仅要指向文件,还要指向目录 。最顶层叫根目录,移动文件时,只需要改两个目录文件,一个文件删除记录,另一个文件里加一条记录。

21. 压缩-Compression

压缩方法:"消除冗余"、“用更紧凑的表示方法”

无损压缩:

  • 游程编码
  • 字典编码

有损压缩:用不同精度编码不同频段

  • 感知编码:删除人类无法感知的数据的方法
  • temporal redundancy:视频数据只保存前后帧不同的部分。
  • 更高级视频压缩格式:找出帧与帧之间相似的补丁,然后用简单效果实现。

22. 命令行界面-Keyboards&Command Line Interfaces

打字机→电传打字机→屏幕打字机→命令行

23. 屏幕&2D 图形显示

阴极射线管CRT:原理是把电子发射到有磷光体图层的屏幕上,当电子撞击图层时,会发光几分之一秒。由于是带电粒子,路径可以用磁场控制.

  1. 矢量扫描:屏幕内用板子或线圈把电子引导到想要的位置。因为发光只持续一小会,如果重复的足够快,可以得到由线段组成的清晰图像。

  2. 光栅扫描:按固定路径,一行一行,从上向下,从左到右,不断重复,只在特定点打开电子束,以此绘制图形。

早期计算机不存像素表现图形,而是存符号。不是技术做不到,而是因为像素占太多内存。

字符生成器:基本算第一代显卡。早期计算机从内存读取字符,转换成光栅图形显示在屏幕上。内部的ROM中储存着每个字符的图形,叫“点阵图案”。显卡将看到的8位二进制代表的字符的点阵图案光栅扫描显示到屏幕的适当位置。这是一种省内存的技巧,但没办法绘制任意形状。

屏幕缓冲区:内存里专为图形显示保留的一块区域,程序想显示文字时,修改这块区域里的值就行。也可以实现交互式图形。

位图显示:像素计算机和显示器,内存中的bit对应屏幕上的像素。

24.冷战和消费主义

政府资金,推动了计算机的早期发展,让计算机行业活得足够久,使技术成熟到可以商用。公司和消费者把计算机变成了可以家用的主流。

25. 个人计算机革命

第一台取得商业成功的个人计算机——Altair 8800,比尔·盖茨为其写了BASIC代码解释器

“解释器”和“编译器”类似,区别是“解释器”运行时转换,而“编译器”提前转换。

Apple-Ⅰ:苹果公司出售的主板,用户需要自己加键盘、电源和机箱。

Apple-Ⅱ:苹果公司第一个提供全套设备的产品,提供简单彩色图形和声音输出。

1970s末,计算机公司的营销策略开始针对普通消费者而不是企业和爱好者。

IBM PC:IBM的首个个人电脑,没用IBM的CPU和操作系统,选了Intel的芯片和微软的DOS系统。使用“开放式架构”,有较好的文档说明和扩展槽,使第三方可以做硬件/外设,激发了创新、竞争,产生了巨大的生态系统。

苹果选择“封闭式架构”,需要提高自身水平,提供比PC和DOS更好地用户体验。

Macintosh:苹果的一台突破性,价格适中的一体式计算机,普通人可以买到的第一台图形用户界面的计算机。 那时的计算机全是命令行,图形界面是个革命性进展。

26. 图形用户界面-Graphical User Interface

道格拉斯·恩格尔巴特:现代图形界面的先驱,创造了第一个鼠标。1968年“秋季计算机联合会议”上展示了他的系统demo(位图图像、视频会议、文字处理、实时协作编辑文件,鼠标和多窗口)。

桌面隐喻:道格拉斯·恩格尔巴特其团队成员开发了第一台带真正GUI的计算机,为了让计算机易于使用,需要借助一些人们已经熟悉的概念,将2D屏幕当做“桌面”,用户可以打开多个程序,每个程序都在一个框里,叫“窗口”,就像桌上的文件一样,窗口可以重叠,挡住后面的东西。

Windows95:微软第一个有精美GUI界面的系统,有当时Mac OS没有的“多任务”和“受保护内存”。

27. 3D图形

3D投影:3D图像中,点的坐标不是两点而是三点,图形算法负责把3D坐标显示到2D屏幕上。

线框渲染:所有的点都从3D转成2D后,就可以用2D线段的函数来连接这些点。

正交投影:正方体的各个边在投影中互相平行。

image-20221021202102278

透视投射:在真实3D世界中,平行线段会在远处收敛于一点。

image-20221021202221666

三角形适合画复杂图形:空间中,三点定义一个平面

image-20221021202247547

一堆多边形的集合叫网格(mesh),网格越密集,表面越光滑,细节越多,但意味着更多的计算量。设计者需要平衡角色真实度和三角形的数量,防止帧数过低,因此有算法用来简化网格。

3D图像填充算法叫“扫描线渲染”,填充的速度叫“fillrate”(填充速率)。先找出最大和最小的Y值,然后在这两点间从上到下计算每一行和多边形相交的两个点,填满两个相交点之间的像素。 这样的三角形边缘满是锯齿

image-20221021202336411

抗锯齿:判断多边形切过像素的程度来调成颜色,如果像素在多边形内部,就直接涂颜色,如果多边形划过像素,颜色就浅一些。

遮挡:3D场景中,到处都是多边形(polygons),但是只有一部分能被看见,其他的被挡住了。

画家算法:渲染重叠的3D物体, 用一种排序算法从远到近排列,然后从远到近渲染。

深度缓冲: 这个算法会记录场景中每个像素和摄像机的距离,在内存里存一个数字矩阵。开始,每个像素的距离被初始化为“无限大”,然后算法从列表里第一个polygon开始处理,把polygon的距离和算法里记录的距离进行对比,他总是记录更低的值,当两个polygon距离相同时,哪一个画在上面是不可预测的。

背面剔除:3D游戏优化,游戏角色的头部或地面,只能看到朝外的一面,为了节省处理时间,会忽略polygon背面,减了一半的polygon面数。BUG是进入模型内部往外看,地面和头部会消失。

表面法线:物体上不同位置的polygon面对的方向。

明暗处理:每个polygon被照亮的程度不同,反射到观察者的光线也不同。

平面着色:基本的照明算法。

image-20221021202458546

高洛德着色/冯氏着色:

image-20221021202508820

纹理:在图形学中指外观,而不是手感。

纹理映射:结合多边形坐标和纹理坐标。纹理算法会查询纹理,从对应区域取平均颜色,并填充多边形。

28. 计算机网络

早期的计算机共享物理资源(如打印机)和储存空间。

局域网(LAN):计算机近距离构成的小型网络。

以太网:一条以太网电线连接数台计算机,当一台计算机要传数据给另一台计算机时,以电信号的形式,将数据传入电缆。因为电缆是共享的,连在同一个网络里的其他计算机也看得到数据,所以以太网需要每台计算机有唯一的媒体访问控制地址,简称MAC地址(Media Access Control)。这个唯一的地址放在头部,作为数据的前缀发送到网络中。所以计算机监听以太网电缆,只有看到自己的MAC地址,才处理数据。

载波侦听多路访问CSMA(Carrier Sense Multiple Access):多台电脑共享一个传输媒介。载体指运输数据的共享媒介。

带宽:载体传输数据的速度。

冲突:例如不同路线的计算机同时执行写入操作,计算机能够通过监听电线中的信号检测这些冲突。

指数退避:计算机网络线路冲突时,指数级增长等待时间。

交换机:为了减少同一载体中设备的数量,交换机将其分为两个不同的冲突域,交换机记录所有网络设备的MAC地址,必要时才在两个网络间传数据。

电路交换:人为把电路连接到专有线路

报文交换:有多个固定站点,可以用不同路由,使通信更可靠更能容错。 报文格式由“互联网协议”Internet Protocol(IP)定义。

报文交换的缺点:报文较大时会堵塞网络,因为要把整个报文从一战传到下一站后才能继续传递其他报文。

路由:网络数据中转站

阻塞控制:路由器会平衡与其他路由器之间的负载均衡,确保传输快速可靠。

数据包:将大报文分成很多小块,每个数据包都有目标地址,因此路由知道发到哪里。

分组交换:数据拆分为小数据包,通过路由灵活传递。好处:去中心化,没有权威机构,没有单点失败问题。

TCP/IP协议:同一个报文的多个数据包经过不同线路,到达顺序和拆分时可能不一样。TCP/IP可以解决乱序问题。

跳数(hop count):消息沿着路由跳转的次数

跳数限制(Hop Limit):防止路由的错误选择

29. 互联网

广域网WAN(Wide Area Network):广域网的路由器一般属于“互联网服务提供商”。

互联网主干由一群超大型、带宽超高路由器组成。例如一个观看一个流媒体视频,其数据包要先到互联网主干,沿着主干到储存对应视频文件的服务器,期间要经过数次跳转。

IP协议

:定义数据包的头部的元数据格式。即,IP把数据包送到正确的计算机。

UDP协议

(用户数据报协议): 储存端口号port number,每个想要访问网络的程序都要向操作系统申请一个端口号,当数据包到达时,接收方的操作系统会读UDP头部,读里面的端口号,根据程序请求的端口号匹配数据。即,UDP把数据包送到正确的程序。

UDP头部里有16进制的checksum“校验和”,用于检查数据是否正确。如果算出来的和,超过了16位能表示的最大值,高位数会被省略,保留低位。当接收方电脑收到这个数据包,它会重新将数据包的数据加在一起,如果结果和头部中的校验和一致,代表一切正常,如果不一致,数据肯定坏掉了。

image-20221021202617177

TCP协议:

UDP不提供数据修复或重发机制,不能知道数据包是否到达,如果所有数据必须到达,就用“传输控制协议”Transmission Control Protocol(TCP)。TCP/IP组合就是把网络数据送到正确计算机的正确程序。

TCP-UDP的不同:

  1. TCP数据包有序号

  2. TCP要求接收方的电脑收到数据包并且“校验和”checksum检查无误后给发送方发一个确认码(简称ACK),代表收到了。得知上一份数据包成功抵达后,发送方会发下一份数据包。

  3. TCP可以同时发多个数据包,收多个确认码

    确认码的成功率和来回时间可以推测网络拥堵程度,即测试丢包率网络延迟

当计算机访问一个网站时,需要:

  1. IP地址
  2. 端口号

DNS域名系统:解析域名,负责把域名和IP地址一一对应。浏览器访问网站时,先访问互联网供应商的DNS服务器,若服务器的列表中存在其域名就会返回对应的IP地址。

域名为树状结构:顶级域名→二级域名→次域名

image-20221021202715132

OSI开放式系统通信模型

image-20221021202756150

物理层:电信号,无线信号

数据链路层:负责控制“物理层”,有MAC地址,指数退避等底层协议。

网络层:负责报文交换和路由

传输层:UDP、TCP等点到点传输协议

会话层:TCP、UDP创建连接,传递信息,关掉连接。

表示层、应用层:浏览器,HTML解码,在线流媒体。

30.万维网 World Wide Web

万维网不等于Internet,互联网是传输数据的管道,其中传输最多数据的是万维网。其基本单位是单个页面。

URL:统一资源定位器(Uniform Resource Locator)

HTTP超文本传输协议

当访问一个网站时,1️⃣ 计算机先会做"DNS查找",返回对应的IP地址后,2️⃣ 浏览器会打开一个TCP连接到这个IP地址存在的“网络服务器”,网络服务器的标准端口是80端口。3️⃣向服务器发送GET指令(HTTP协议)请求要访问的页面。4️⃣ 该指令以“ASCII编码”发送到服务器,服务器会返回该地址对应的网页,然后浏览器会渲染到屏幕上。5️⃣状态码在请求之前,状态码400~499代表客户端错误,如“404网页不存在”。

HTML超文本标记语言:是一种用于创建网页的标准标记语言。可以使用 HTML 来建立自己的 WEB 站点,HTML 运行在浏览器上,由浏览器来解析。

网页浏览器可以和网页服务器沟通,浏览器不仅获取网页和媒体,获取后还负责显示。

网络中立性network neutrality:应该应该平等对待所有数据包

限流Throttled:故意给更少带宽和更低的优先级。

31. 计算机安全

计算机安全即保护系统和数据的:

  1. 保密性:仅有权限的人才能读取计算机系统和数据
  2. 完整性:仅有权限的人才能使用和修改系统和数据。
  3. 可用性:有权限的人应该随时可以访问系统和数据

身份认证:

  1. 你知道什么
  2. 你有什么
  3. 你是什么

生物识别

访问控制:

沙盒:隔离程序,给程序独有的内存块。

32.黑客&攻击

白帽子:寻找并修复软件漏洞,让系统更安全。

缓冲区溢出buffer overflow:重要数据的值被垃圾数据覆盖会造成系统崩溃。解决办法:

  1. 边界检查:可以在值复制到缓冲区之前检查其长度防止溢出。
  2. 金丝雀:程序也可以放到缓冲区之后,留一些不用的内存空间,即金丝雀,然后跟踪里面的值,如果发生变化,说明有攻击者。

代码注入Code Injection:攻击数据库

image-20221021202912910

第零日漏洞zero day vulnerability:未被开发者发现的漏洞

蠕虫:黑客掌握足够多有漏洞的电脑,可以让恶意程序在电脑间传播,这些电脑组在一起可以成为僵尸网络。可以用别人的电脑发送垃圾邮件,用别人的电脑算力和电费挖比特币,或发起"DDoS攻击"(拒绝服务攻击Distribute Denial of Service),攻击服务器。

DDoS攻击:僵尸网络里的所有电脑发送一大堆垃圾信息,堵塞服务器。

33. 加密

世上不存在100%安全的系统。

加密:用加密算法把明文转为密文。

  • 替换加密
  • 移位加密
  • 对称加密:双方用一样的密钥加密和解密消息
  • 非对称加密::有公钥和私钥,公钥只能加密,私钥才可以解密;私钥加密后,也可以用公钥解密。一般用于签名(如RSA加密)。

英格玛(Enigma):纳粹在战时使用的替换加密,有3个替换转子。字母加密后一定会变成另一个字母。

DES“数据加密标准”(Date Encrption Standard):1977年IBM和NSA开发,56bit长度的二进制密匙。

AES“高级加密标准”(Advanced Encryption Standard):2001年,128位/192位/256位二进制密匙,AES将数据分成一块一块,每块16字节 。

密钥交换:

  • 密钥1+公匙+密钥2
  • 密钥2+公匙+密钥1

Diffie-Hellman单项函数:公开基数和模数 ,A把 “基数密钥1”发给B,B把“基数密钥2”发给A。A和B把拿到的数进行模幂运算,最终得到一样的数。

image-20221021203007252

34.机器学期&人工智能

机器学期算法让计算机可以从数据中学习,然后自行做出预测和决定。机器学期是为了实现人工智能这个宏大目标的技术之一。

分类器:做分类的算法

很多算法会减少复杂性,把数据简化成“特征”。

机器学习的目的是最大化正确分类+最小化错误分类

image-20221021203053592

决策边界可以猜测飞蛾的种类,决策空间可以转换为“决策树”,

image-20221021203120113

支持向量机:3D散点图

image-20221021203205322

人工神经网络:神经元是细胞,用电信号和化学信号来传输和处理消息

35.计算机视觉

计算机视觉算法:例如跟踪一个物体,先记下物体颜色,保存最中心像素的RGB值,检查图像中最接近这个颜色的像素就可能是被跟踪物体,然后在视频的每一帧图片跑这个算法。

做智能避障时,需要知道图片中物体的边缘, 如果是垂直物体有垂直的颜色变化,图片中某像素是垂直边缘的可能性,取决于左右两边像素的颜色差异程度,如果颜色差异很小,就不是边缘。

卷积:把核应用于像素块

image-20221021203330108

可以用加权法算出垂直边缘的像素值很高,如果要计算水平边缘需要用不同的敏感“核”。此类边缘增强的核叫“Prewitt”,它能做很多种图像转换。

image-20221021203411259

卷积神经元网络 (深度学习):一般有很多层,来识别复杂物体和场景,例如人脸识别

image-20221021203500061

36.自然语言处理

有很多一词多义的词,解决这种模糊的问题,电脑需要知道语法。因此开发了计算机专用的“短语结构规则”和其他把语言结构化的方法,可以用来生成句子。当数据存在已有的语义信息网络中时,信息网络中的实体标签互相连接,这种方法尤其有效。

现代的聊天机器人使用机器学习,参考人与人的实际对话,让机器人与机器人对话,甚至可以发展处机器人自己更高效的语言。

语音识别:计算机性能大幅提升后,实时语音识别变得可行,同时出现了处理自然语言的新算法。

image-20221021203600131

将声音波形装换为频率算法:Fast Fourier Transform(FFT)。

image-20221021203624262

音素:以上构成单词的声音片段,英语中有44中音素。

语音合成:把一段文字分解成多个声音,然后播放。

37. 机器人

机器人的潜在含义是存在于现实世界中的机器

机器人简单运动如:在轨道上来回移动的机器爪子,可以指定它移动到特定位置。因为在不断缩小当前位置和目标位置的距离,所以这个控制模块叫“负反馈回路”。

控制回路负责把机器人的属性(如当前位置)变成期望值。软件负责做出计划并让机器人执行动作。

比例-积分-微分控制器proportional-integral-derivative controller(PID控制器):即复杂的控制逻辑解决,解决机器人实际会受到各种外力的影响。

无人驾驶汽车、机器狗。

38.计算机心理学

易用度Usebility:指人造物体达到目的的效率有多高。

人类擅长给颜色强度排序,不同强度的颜色可以用来排序 ;然而不同颜色可以用来分类。

直观功能affordances:用户只需要看一眼就知道怎么做,不需要图片、文字等说明。

CMC以计算机为媒介沟通:比起面对面沟通,人们更愿意在网上透露自己的信息。

增强凝视:心理学研究表明,如果想说服,讲课,或引起注意眼神注释非常重要,这被证明可以促进参与感,帮助实现谈话目标。计算机视觉和图形软件可以纠正讲座录像中老师的眼睛和头部,让看视频的人觉得对方在看着他们,有更多参与感。

人机交互Human-Robot Interaction,简称HRI:研究人类和机器人交互,比如人类如何感受机器人的不同形式和不同行为,或者机器人如何明白人类的社交暗示等。

39.教育科技

MOOC

匹配算法,匹配学习伙伴。

部分作业机器打分

智能辅导系统:Intelligent Tutoring Systems: 个性化学习推荐,“判断错误规则”+选择算法,组合在一起成为“域模型”,帮助学习者解决特定问题。

学生已经知道某项技能的概率是多少=之前已经学会的概率+做题过程中学会的概率

40. 奇点,天网,计算机的未来

几十年来,大多数界面和计算机设计,都是朝着“戏剧性方向前进”。想把计算机做的超级好,让人一刻也不想离开,把计算机整合到所有东西里,用的时候很自然,完全注意不到。

如果现在的处理器处理能力增长趋势保持,人的参与会越来越少,人工超级智能会开始改造自己,智能科技的失控性发展叫“奇点”singularity。

“技术性失业”:除了非重复性思维型工作,其余60%的工作可能被自动化代替。

虚拟助手

标签:计算机,计算机科学,程序,速成,算法,指令,内存,数据
From: https://www.cnblogs.com/horuschen/p/16814713.html

相关文章

  • 毕业论文速成指南来了!
     Datawhale干货 作者:汪健麟,电子科技大学;审稿:牧小熊转眼间硕士毕业半年有余,想起肝毕业论文时的通宵达旦和不知被抓掉了多少的头发,心有余悸。又值一年论文季,总结一下我当时......
  • 在一个新的领域如何快速成长
    当我们决定投身某一领域的时候,如何才能快速成长为独当一面的好手?首先,打好基础。基础的牢固程度,决定了发展的高度上限,当然,基础后面也可以补足。如果经常遇到很难学......
  • 计算机科学概论与程序设计第七周学习总结
    教材学习内容总结计算机科学概论第八章主要讲述了抽象数据类型:数据结构,容器。其中数据结构中含有栈,队列,列表,树等概念,了解了二叉树检索以及三种检索方式;了解了参数的传递,形......
  • 【chainer速成】chainer图像分类从模型自定义到测试
    文章首发于微信公众号《有三AI》​​【chainer速成】chainer图像分类从模型自定义到测试​​欢迎来到专栏《2小时玩转开源框架系列》,这是我们第八篇,前面已经说过了caffe,tens......
  • 【MatConvnet速成】MatConvnet图像分类从模型自定义到测试
    欢迎来到专栏《2小时玩转开源框架系列》,这是我们第10篇,前面已经说过了caffe,tensorflow,pytorch,mxnet,keras,paddlepaddle,cntk,chainer,deeplearning4j。今天说MatConvnet,本文所用......
  • 【DL4J速成】Deeplearning4j图像分类从模型自定义到测试
    文章首发于微信公众号《有三AI》​欢迎来到专栏《2小时玩转开源框架系列》,这是我们第九篇,前面已经说过了caffe,tensorflow,pytorch,mxnet,keras,paddlepaddle,cntk,chainer。今天说......
  • 算法竞赛入门【暑期速成计划】(一)
    算法竞赛入门【暑期速成计划】(一)文章目录​​算法竞赛入门【暑期速成计划】(一)​​​​前言​​​​为什么突然想学算法了?​​​​一、程序设计入门​​​​(一)、变量及其输入......
  • 计算机科学概论(第7版)第一章总结
    第一章全景图目标学完本章之后,你应该能够:·描述计算机系统的分层;·描述抽象的概念以及它与计算的关系;·描述计算机硬件和软件的历史;·描述计算机用户转换的角色......
  • 传奇单机版新手速成技术指导
    给新人讲解下5分钟速成技术指导1.如何设置GM名单M2-查看-列表信息-管理员列表。写上GM的角色名(权限等级必须设置为10。)2.如何查看GM命令GM命令也是在M2server里面。M2-选项-游......
  • 十分钟速成DevOps实践
    摘要:以华为云软件开发平台DevCloud为例,十分钟简单体验下DevOps应用上云实践——H5经典小游戏上云。本文分享自华为云社区《《DevOps实践秘籍》十分钟速成DevOps实践》,作者......