计算机本科 很多很多科目的总结

编程知识 更新时间:2023-04-28 13:37:46

CN:

  1. ip地址如何转换成物理地址?

    是通过ARP地址解析协议来完成的。每个主机都有一个ARP高速缓存,里面有一张ARP表,表里存放的是在本局域网上的各个主机和路由器的IP地址到MAC地址的映射。

工作的过程是:

在同一个局域网中:

当主机A想向本局域网中的某个主机B发送信息时----> 就先在ARPg高速缓存中查看有没有主机B的IP地址----> 如果有就可以找到对应的MAC地址,再将这个硬件地址写入mac帧,然后通过局域网将该MAC帧发往这个硬件地址 ----> 如果没有就通过广播的方式,使同一个局域网里的所有主机收到ARP请求,从而找到主机B

在不同的局域网中:

就要通过ARP协议找到一个位于本局域网上的某个路由器的硬件地址,然后把分组发送给这个路由器,再让路由把分组转给下一个网络。

 

2、 OSI参考模型与TCP/IP的区别

1) OSI有七层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。TCP/IP有五层,是将OSI的物理层和数据链路层合并为网络接口层,将会话层、表示层、应用层合并为了应用层。

         2)在网络层中:OSI模型是无连接和面向连接的,而TCP/IP是无连接的;

            在传输层中:OSI模型是面向连接的,而TCP/IP是无连接和面向连接的;

 

3、 什么是面向连接和无连接?

面向连接:面向连接有三个阶段,分别是建立连接、传输数据和释放连接

无连接:无连接只有一个阶段,即直接进行数据传输;

4、 5G的G是什么意思?

5、 安网线的啥?

 

6、 TCP和UDP的区别

 

7、 ARP和DNS有什么区别?

 

 

 

常见的

4 OSI参考模型(七层模型如何封装、解封装)(每一层的常见协议)

5 TCP/IP模型(是OSI的简化、简化了哪些层、相应的有什么好处)

6、 IP协议(主要特点)

7、TCP、UDP这两个协议的比较,TCP三次 握手(必问TCP UDP分别在哪一层)(三次握手为什么这样做)(TCP的拥塞阻塞协议、滑动窗口)

8、 常见的应用层协议(DNS、DHCP)

9、对称密钥、非对称密钥(要知道加密方式、两个什么时候应用、应用场景)

 

 

float x 与 0 的比较?

所以浮点数不能够判断相等,像 if(x==0)的这样的编码是不总是正确的,我们在判断浮点数相等时,推荐用范围来确定,若x在某一范围内,我们就认为相等,至于范围怎么定义,要看实际情况而已了,float,和double 各有不同

     所以const float EPSINON = 0.00001;

  if ((x  >= - EPSINON) && (x  <= EPSINON) 这样判断是可取的

     至于为什么取0.00001,可以自己按实际情况定义

 

输入输出文件这么表示?

文件方面一般包含:(fgetc,fputc)(括号表示这是一组,在一起使用的),(fgets,fputs),(fread,fwrite),(fscanf,fprintf)。

fgetc和fputc是对单个字符(类似char ch)进行调用的:

     fgetc的函数结构如下:fgetc(fp)(fp是定义的指针,如,FILE *fp; fp是指向一个文件的),fgetc是将文件中的字符进行调出,一般是ch=fgetc(fp),将里面的字符赋值给ch中。

   fputc的函数结构如下:fputc(ch,fp),fputc是将字符输入到fp所指向的文件中。

 

 

 

 

 

对前端的理解?

在网络平台上,展示、传递信息给用户,或可以跟用户进行交流的界面;

前端开发最基础的技术 html(5) css(3) javascript

做一个页面,html是基本,通过html语言 记各种标签 把文字、图片等信息展示出来,

用css ,加以修饰,让内容的展示更美观,有需要的时候用javascript 让用户可以跟页面进行“交流”;

html css javascript 的作用,也是一个前端开发最基础的工作;

 

图像处理方向?

对这个方向的理解:

在实际应用场合,采集的信息很多都是图像信息,比如指纹、条码、人脸、虹膜、车辆等等。

在应用场合,医学图像这一块,医疗器械的主要功能是成像,都会涉及到对图像的处理;

还有就是计算机视觉和模式识别方向,比如指纹识别、人脸识别、虹膜识别;

 

比方说一个成像设备,在输出图像之前需要对原始图像进行增强或者去噪处理,存储时需要对图像进行压缩,成像之后需要对图像内容进行自动分析,这些内容都是图像处理的范畴

 

 

带宽对计算机的意义?

带宽就是传输速率,是指每秒钟传输的最大字节数(MB/S),即每秒处理多少兆字节,高带宽则意味着 系统的高处理能力。

 

类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。在面向对象的程序设计语言中,类是对一类“事物”的属性与行为的抽象。举一个例子说明下类,比如Person(人)就是一个类,那么具体的某个人“张三”就是“人类”这个类的对象,而“姓名、身高、体重”等信息就是对象的属性,人的动作比如“吃饭、穿衣”等就是对象的方法。总之类就是有相同特征的事物的集合,而对象就是类的一个具体实例。同时类有多态和继承,例如“人类”可以分为“男人、女人”,“老人、小孩”那么“男人、女人”就是“人类”的子类等等。

 

结构体

由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构体(struct)。”

 

 

 

 

 

 

 

OS

进程、线程

  1. 为什么引入进程?
  1. 为了实现多道程序的并发执行
  2. 多道程序下需要共享资源,程序在执行过程中会出现相互制约的关系,程序的执行就会出现间断性
  3. 而程序本身是一个静态的概念,所以就引入了进程这个动态的概念。从而更好的支持多道程序的并发执行。
  1. 什么是进程?
  1. 进程是系统中正在运行的一个程序,程序一旦运行就是进程。
  2. 进程是系统资源分配的独立实体,每个进程都拥有独立的地址空间
  1. 进程组成?
  1. 每个进程都由程序段,数据段及PCB三部分组成
  2. PCB是一个进程存在的唯一标志,程序段是进程运行的程序的代码,数据段就是程序运行的一些相关数据
  1. 共享存储和管道的区别?
  1. 共享存储概念:通信进程共享一个存储空间
  2. 管道:是一个缓冲区,进程对管道进行读写操作
  3. 共享存储:可以同时被两端的进程读,而管道:不能同时被访问
  4. 共享存储:两端都能进行读或写,而管道:只能一端读,一端写,是半双工通信
  1. 程序和进程的区别?
  1. 进程:是系统中正在运行的一个程序;程序:是有序代码的集合
  2. 1个程序可以对应多个进程,但1个进程只能对应1个程序;
  3. 进程是动态的,而程序是静态的
  1. 进程和作业的区别?
  1. 作业:是从外存放到内存的一个过程,它可以包含一个或多个进程;进程:只是作业中的一部分
  2. 一个作业通常包括几个进程,几个进程共同完成一个任务,即作业
  3. 他们的区别是:进程是一个程序在一个数据集上的一次执行,而作业是用户提交给系统的一个任务
  4. 从调度来看:作业的调度属于高级调度,进程的调度属于低级调度
  1. 进程和线程的区别?
  1. 一个进程里面有多个线程;
  2. 在单位方面:进程:资源分配的基本单位,线程:CPU调度的基本单位
  3. 在资源方面:进程:拥有资源,线程:不拥有资源,同一个进程中的所有线程共享进程中的所有资源
  4. 在并发度方面:进程:同一进程内,不同进程间可以并发;线程:引入线程后系统并发度提高,吞吐量更大
  5. 在系统开销方面:进程:进程切换需要保留进程现场,线程:线程切换需要保留CPU线程,比进程开销小
  1. 高级调度、中级调度、低级调度?
  1. 高级调度【作业调度】:将后备队列的作业调度到内存中(外存à内存),等待进程调度
  2. 中级调度【内存调度】:将暂时不能允许的进程,调至外存,在满足运行条件时再调回来,即虚拟内存中的交换
  3. 低级调度【进程调度】:从就绪队列选择一个进程,分配处理机,即从就绪队列àCPU执行

 

 

 

 

 

 

 

死锁

  1. 死锁的必要条件
  1. 互斥
  2. 不可剥夺
  3. 请求和保持
  4. 循环等待
  1. 死锁处理?
  1. 死锁预防:限制申请资源的顺序

破坏四个必要条件

破坏不可剥夺:进程阻塞时要释放自己的资源,以后重新申请

破坏请求和保持:进程运行前要一次性申请完所需的所有资源(可能造成饥饿)

破坏循环等待:给系统中的资源编号,每个进程只能按照编号递增的顺序请求资源

  1. 死锁避免:限制分配资源的顺序

银行家算法:在资源的动态分配中防止系统进入不安全状态

  1. 死锁的检测和解除:

检测:通过化简资源分配图,有剩余边则存在死锁,没有剩余边则没有死锁

解除:通过释放资源的方法

      资源剥夺法、撤销进程法、进程回退法

  1. 死锁和饥饿的区别?
  1. 死锁:是指多个进程相互等待对方的资源而造成死锁;饥饿:是指进程一直得不到资源的分配而持续等待的过程
  2. 在资源方面:死锁:是指两个及两个以上的进程参与,强调的是资源分配的问题;饥饿:一个进程也可能饥饿,强调资源总体不足问题
  3. 在进程状态方面:死锁:死锁的进程一定是阻塞态;饥饿:饥饿的进程可能是就绪态可能是阻塞态

 

内存

  1. 大量数据如何存储
  1. 分配更多内存
  2. 用更小的样本

有时候并不是需要用到全部数据,可以先试着用这个小样本解决问题

  1. 更多内存:比如租用云端有数十几个G的机器,我个人认为这个方法比较实际
  2. 转换数据格式:以更紧凑的形式存储数据
  3. 使用关系数据库:关系数据库为存储、访问大型数据集提供了标准化的方法,我了解到这种方法对大型表格式数据集非常有效率
  1. 为什么要进行内存管理?
  1. 为了多道程序的并发执行
  2. 如果不对内存进行管理,容易导致内存数据混乱,以至于限制进程的并发执行
  1. 内存管理的功能?
  1. 内存空间的分配与回收:连续分配、非连续分配
  2. 地址转换:逻辑à物理
  3. 内存空间的扩充:覆盖、交换、虚拟
  4. 存储保护:比如利用界地址寄存器,来保证各道的运行互不干扰
  1. 进程运行的基本原理、要求?

编译、链接、装入

  1. 什么是覆盖技术?
  1. 作用:扩充内存
  2. 思想:用户程序分为固定区和覆盖区,将经常使用的活跃的部分放在固定区,即将要访问的段放到覆盖区,其余的放在外存中,在需要调用前再调入覆盖区
  3. 打破了之前必须将一个进程的全部信息装入主存后才能运行的限制
  1. 什么是交换技术?
  1. 作用:扩充内存
  2. 思想:分为文件区和交换区,主要是换入换出的过程,将处于等待状态的程序换出,将即将要用CPU的进程换入
  1. 覆盖 vs 交换?

覆盖是在一个进程或程序之间进行,而交换是在不同的进程之间进行的

  1. 什么是虚拟技术/虚拟存储?
  1. 定义:

将程序的一部分调入内存,其余部分留在外存,当需要访问的信息不存在内存时,由操作系统将需要的部分调入内存,然后继续执行

  1. 特征:

多次性、对换性、虚拟性

  1. 实现方式:

请求分页、请求分段、请求段页

  1. 大小如何决定?

虚拟内存的大小要小于内存容量与外存容量之和,要小于计算机的地址位数所能容纳的最大容量

  1. 为什么引入虚拟存储?

扩充内存

  1. 虚拟存储怎么解决问题?会带来什么问题?
  1. 方法:虚拟内存使用了外存上的空间来扩充内存的空间,通过一定的换入换出方式
  2. 问题:有可能发生抖动,就是在换入换出上如果选用了不合适的替换策略,就可能导致频繁地换入换出,大大降低系统性能
  1. 什么是局部性原理?
  1. 时间局部性:程序中的某条指令执行后,在不久之后还可能再次执行

实现:将近来使用的指令和数据保存到高速缓存中

  1. 空间局部性:程序中的某个存储单元一旦访问了,在不久之后其附近的存储单元也可能被访问

实现:使用较大的告诉缓存,将预取机制集成到高速缓存控制逻辑中

  1. 缺页中断和一般中断的区别?
  1. 缺页中断在指令执行期间产生和处理中断信号,而一般的中断是在一条指令执行完后才中断属于内部中断
  2. 一条指令在执行期间可能产生多次缺页中断
  1. 什么是抖动?

抖动是频繁地页面调度,刚刚换出的页面马上也有换入主存,刚刚换入的页面马上又要换出主存

主要原因是某个进程频繁访问的页面数目高于可用的物理块数

  1. 引入Cache的原因?

解决CPU与主存之间速度不匹配的问题;

  1. 什么是Cache?
  1. 是高速缓存,解决CPU与主存之间速度不匹配的问题
  2. 思想:Cache和主存都被分为若干大小相等的块,Cache容量远小于主存,它仅保存主存中最活跃的若干块的副本,Cache按照某种策略,预测CPU未来一段时间内想要访问的数据,并装入Cache中
  3. 工作原理:CPU发出读内存的请求时

如果Cache命中,就将地址直接转换为Cache地址

如果Cache不命中,则访问主存,并将这个块调入Cache中

  1. 什么是写策略?

由于CPU写Cache时,把Cache中的某个单元的内容改变了,但是这个单元对应的主存中的内容并没有改变,所以需要使用写策略处理这个现象

命中的写策略:写回法、全写法

未命中的写策略:写分配法、非写分配法

  1. Cache – 主存地址映射?

地址映射是将主存中的映射到Cache中

  1. 全相联映射:任意放
  2. 直接映射:只能放在规定的唯一位置
  3. 组相联映射:组内全相联映射,组间直接映射
  1. 虚拟内存 vs Cache

相同处:

    1. 目的都是为了提供系统的性能
    2. 都有地址映射、替换算法等
    3. 都依据程序访问的局部性原理,将相对活跃的数据放在相对高速的部件中

不同处:

  1. 解决问题:虚拟内存解决的是主存容量问题;Cache是解决CPU与主存速度不匹配问题
  2. 实现部件:虚拟内存由OS 和硬件共同实现,仅对应用程序员透明;Cache是完全由硬件实现,对所有程序员透明
  3. 速度:CPU速度是主存的10倍 à 主存的速度是硬盘的100倍;
  4. 直接通路:CPU与cache,CPU与主存都有直接访问的通路,而CPU与辅存没有;

Cache不命中时,CPU可以直接和主存通信,同时将数据调入Cache中;但虚拟内存不命中时,只能先由硬盘调入主存中,而不能直接和CPU通信

 

 

 

 

文件管理

  1. 文件的内部逻辑结构?文件的内部数据是怎样组织起来的?

按照逻辑结构,文件分为无结构文件、有结构文件

有结构文件又分为顺序文件、索引文件、索引顺序文件

  1. 文件之间怎样组织起来的?

按照目录,目录是特殊的有结构文件

  1. 文件应如何存放在外存?

操作系统以块为单位为文件分配存储空间,外存分为一个个块且相等,操作系统将逻辑地址转换为外存的物理地址

  1. 什么是文件?

文件是存储在计算机上的信息集合

文件的形式很多样,可以是文档、图片、程序等等

  1. 什么是文件系统?

是操作系统中负责管理和存储文件信息的软件机构

文件系统由三部分组成:与文件管理有关的软件、被管理的文件、以及文件管理所需要的数据结构

  1. 文件系统应该完成哪些功能?
  1. 从用户角度出发:实现对文件的操作,比如可以让用户按名存取,查找文件等等
  2. 从文件角度出发:文件共享、文件保护的功能
  1. 有什么方法可以实现文件共享和保护?

文件共享:

  1. 硬链接:通过索引结点的方式
  2. 软链接:类似于快捷方式

文件保护:

  1. 加密保护
  2. 口令保护
  3. 让问控制
  1. 为什么要有文件共享这个功能?

因为文件共享使得用户(或者是进程)共享同一份文件,系统中只需要保留该文件的一份副本

如果没有这个共享功能,那每个需要使用这个文件的用户都要有对应的文件副本,就会使得存储空间极大,且造成存储空间的浪费

  1. open打开文件的操作过程?
  1. 通过文件路径找到相应的目录文件(即这是一个目录)
  2. 通过目录找到文件名对应的目录项(也就相当于找到了这个文件)
  3. 然后检查这个用户是否有相应的文件的权限
  4. 将目录项复制到内存的“打开文件表”中,并返回文件的编号
  5. 之后用户就不再使用文件名而是使用这个编号来指明要操作的文件
  1. 目录中查找某个文件可以使用什么方法?

目录实现的方法有线性表和哈希表,也就对应有线性查找和散列查找

  1. 线性查找

线性表就是把文件名组织成一个线性表,查找的时候一次与线性表的每个表项进行比较

  1. 散列查找

哈希表是用文件名通过哈希函数得到的,这种方式比较快但是有可能有冲突

  1. 文件的逻辑结构、物理结构有什么区别?

逻辑结构:是在用户的角度看的,文件内部数据应该如何组织起来

物理结构:是操作系统的角度看的,文件应该如何存储在外存

 

 

 

 

I/O

  1. I/O控制器是什么

I/O设备分为机械部件和电子部件,电子部件就是I/O控制器,又叫设备控制器

CPU无法直接控制I/P设备,需要一个CPU与I/O设备之间的中介用于实现CPU对设备的控制

I/O控制器功能:

  1. 接受和识别CPU发出的命令
  2. 向CPU报告设备状态
  3. 数据交换
  4. 地址识别
  1. I/O控制方式有哪些?分别是什么意思?怎么从I/O设备获取数据到内存?

程序直接控制方式、中断驱动方式、DMA方式、通道控制方式

程序直接控制方式:计算机从外设读取数据到内存,对于读入的每个字,CPU需要对外设状态进行循环检查,直到这个字已经在I/O控制器的数据寄存器上;

中断驱动方式:首先CPU发出读信号,然后I/O接收到这个信号开始准备数据,这个时候CPU不用一直等待而是转而去做其他的事,等I/O准备      好数据了就会像CPU发送一个中断信号,CPU收到中断信号就会做出响应,向I/O请求数据,再将数据放到CPU寄存器中。每传输一个字就会经过一次CPU,频繁的使用CPU。

DMA方式:在I/O设备与内存之间开辟直接的数据减缓通路,仅在传送一个或多个数据块的开始和结束时才需要CPU的干预

通道控制方式:I/O通道是指专门负责输入/输出的处理机,在DMA的基础上,在传送一组数据块之后才需要CPU的干预

  1. 每种方式的相对上一种的改进在哪?

中断驱动方式ß程序直接控制方式:CPU不用轮询等待I/O的数据准备过程

DMAß中断驱动方式:不用每次发一个字的数据就访问一次CPU,而是在传送一个或多个数据块的开始和结束时才需要CPU的干预

通道控制方式ß DMA:在传送一组数据块之后才需要CPU的干预

  1. 中断控制方式与DMA的区别?

中断:每个字在I/O设备与内存之间的传输,都需要经过CPU,而频繁的中断处理会消耗较多的CPU时间

DMA:相比中断方式进一步降低了CPU的介入,在I/O和内存之间开辟了一个直接的数据交换通路

  1. I/O通道与普通处理机的区别?

I/O通道是一种硬件,是较为低级别的CPU

相比CPU通道执行的指令很单一,并且通道程序是放在主机内存中的,通道和CPU共享内存

  1. DMA与通道的区别?

DMA和通道都是在CPU和I/O之间开辟了直接的数据交换通路,但是DMA在传送一个或多个数据块的开始和结束时才需要CPU的干预,而通道在传送一组数据块之后才需要CPU的干预

  1. 高速缓存与缓冲区的区别?(高速缓存又分为内存和CPU之间的Cache  与  内存和磁盘之间的磁盘Cache)

相同点:都是介于高速设备、低速设备之间

区别:

  1. 从存放数据的角度:高速缓冲上面存放的是低速设备的数据的副本,高速缓存上面有的数据在低速设备上面一定也有

                  缓冲区上存放的是低速设备和高速设备之间相互传递的数据,并不是低速设备数据的备份

  1. 从目的的角度:高速缓存存放的是高速设备经常要访问的数据,如果数据不在告诉缓存中就要访问低速设备

              缓冲区的存在,使得高速设备和低速设备之间的通信必须要经过缓冲区,而不能直接互相访问

  1.  
  1.  

 

 

常考的

1、 进程和线程的区别和联系

  1. 常见的调度算法
  1. 死锁的产生和解决(死锁产生的必要条件、银行家算法)

4、虚拟内存、页面置换算法(概念、为什么会产生虚拟内存、常见的置换算法)

5、磁盘的调度

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

DS       

什么是数据结构?你怎么理解数据结构?

排序

  1. 快排的复杂度?为什么是这么多的复杂度?如何计算的?为什么要这么计算?
  1. 时间复杂度:最好情况nlog2n,最坏n^2,平均时间复杂度nlog2n

空间复杂度:最好log2n,最坏n

  1. 如何计算:

时间复杂度

最坏情况

已排序数组,

 

平均情况

然后就是递推:解一个一阶非线性齐次方程

最后得到最高阶是O(nlog2n)

  1. 为什么这么计算

因为时间复杂度是这条语句重复执行的次数

  1. 希尔排序的思想

 

 

线性表——顺序表、链表

  1. 顺序表和数组的区别?
  1. 联系:顺序表和数组都是数据结构,只是描述的角度不同

    顺序表是数据结构中的逻辑结构,数组是数据结构中的物理结构

  1. 顺序表:表示元素之间一对一的相邻关系,线性表采用顺序存储的方式存储就称之为顺序表
  2. 数组:是从物理存储的角度来说的
  3. 区别:数组是一个更大的概念,数组可以存储线性表,也可以存储树、图等其他数据结构

      线性表可以用数组存储也可以用链表存储

  1. 链表和数组的优缺点?
  1.  数组的特点:
  1. 数组是什么:在内存中,数组是一块连续的区域
  2. 使用数组前:使用前要先申请占内存的大小
  3. 数组的插入删除:插入数据和删除数据效率低,插入数据时,这个位置后面的数据在内存中都要向后移。
  4. 数组的读取:随机读取效率很高
  5. 扩展性:不利于扩展
  1. 链表的特点:
  1. 链表的存储:不要求连续
  2. 链表的插入删除:增加数据和删除数据很容易
  3. 链表的查找:查找数据时效率低,因为不具有随机访问性,所以访问某个位置的数据都要从第一个数据开始访问
  4. 扩展性:不指定大小,扩展方便
  1. 数组:

优点:随机访问性强、查找速度快

缺点:插入和删除效率低、不易于扩展、内存空间要求高,必须有足够的连续内存空间

  1. 链表:

优点:插入删除速度快、方便扩展、内存利用率高,不会浪费内存

缺点:不能随机查找,必须从第一个开始遍历,查找效率低

  1. 循环链表的特点
  1. 单链表中最后一个结点的指针不是 null,而改为指向头结点,从而整个链表形成一个环
  2. 判空条件:头结点的指针是否等于头指针
  3. 可以从表中任意一个结点开始遍历整个链表
  4. 循环单链表不设置头指针而仅设置尾指针的操作效率更高

 

 

 

 

 

 

 

  1. 树的遍历、森林的遍历

树的遍历有两种:

    1.  先序遍历:先访问根结点,再访问子树
    2. 后序遍历:先访问子树,再访问根结点

森林的遍历:

    1. 先序遍历:先访问第一棵树根结点,再访问其子树,再访问其他子树
    2. 后序遍历:先访问第一棵树的子树,再访问其根结点,再访问其他子树

树----森林----二叉树

先序---先序---先序

后序---中序---中序

  1. 什么是二叉树
  1. 二叉树是一棵树
  2. 二叉树每个结点最多只有两棵子树,即二叉树中结点的度智能为0,1,2
  3. 二叉树的子树有左右顺序之分,不能颠倒
  1. 二叉树的作用

二叉树有很多类

  1. 哈夫曼树,应用于哈夫曼编码,数据压缩编码
  2. B树和B+树应用于文件系统的目录中:B树的高度是磁盘的存取次数,B+树应用于数据库中
  3. 二叉排序树BST:二叉排序、查找
  1. n层高的满二叉树一共有多少个结点?

2^(n) – 1

  1. 二叉树第n层最多有多少结点?

2^(n-1)

  1. 有n个结点的二叉树,最小高度为?

log2(n+1)向上取整

log2n向下取整 +1

  1. 线索化二叉树为什么遍历更高效?

因为二叉树的线索化不会用到递归,就避免了系统栈的使用,也不会用到自己定义的栈,而是将二叉树的遍历过程线性化了;

二叉树被线索化之后金熙宇一个线性结构,就转化为了近似于线性结构的遍历操作,用过线索的辅助,使得寻找当前结点前驱或者后继的平均效率大大提高

  1. 什么是红黑树?

是平衡二叉树的一种

定义:红黑树是满足以下条件的二叉查找树

  1. 每个结点要么是红色,要么是黑色
  2. 根结点必须是黑色
  3. 红色结点不能连续,红色结点的孩子和父亲都不能是红色
  4. 每个结点从该结点到最后的叶子节点的任何路径都含有相同个数的黑色结点

 

AVL相比的好处是:

  1. 每个结点不用再存左右子树的高度差了,存的就不是一个int而是bool的二进制位,把它要用的额外空间做到了最简
  2. 操作的频次更少

 

 

 

STL的set/map底层都是用红黑树(平衡二叉树的一种)实现的

  1. AVL  vs  红黑树
    1. 查询速度:AVL的查询更快,因为平衡二叉树的平衡更严格一点,但是付出的单价就是AVL每个结点所存的信息更多,

同时为了让他更好的平衡,AVL调整的频次也更多

    1. 插入删除:红黑树插入和删除更快,因为调整的频次较低
    2. 所占空间:AVL所占用的空间更大,因为要存一个int型,而红黑树只用一位二进制位来标记即可
    3. 实践:高级语言都是用的红黑树;数据库一般用的是AVL,因为数据库中的查询远大于他的修改
  1. 什么是二叉排序树BST?应用在哪?
    1.  定义:左子树的结点值小于根结点,右子树的结点值大于根结点,且左右子树本身也分别是一棵二叉排序树

       二叉排序树中序遍历是一个递增的序列

    1. 时间复杂度:BST查找算法的平均查找长度主要取决于树的高度

单支树:On

平衡二叉树:Ologn

二叉排序树平均:Ologn

    1. 应用:
  1. BST与二分查找的区别?
    1. 树的形状:BST的插入顺序不同树形不同,而二分查找的判定树树形唯一
    2. 时间复杂度:BST的插入删除Ologn,仅需修改指针即可,无需移动结点;二分查找的删除插入为On,因为对象是一个有序顺序表
  1. 什么是平衡二叉树AVL?应用在哪?
    1. 定义:任意结点的左右子树的高度差不超过1 的二叉树,且左子树右子树都是平衡二叉树

平衡因子只有可能是-1,0,1

(AVL是对二叉排序树的改进,所以AVL是二叉排序树)

    1. 时间复杂度:n个节点的AVL最大深度Ologn

            平均查找长度Ologn

    1. 应用:AVL使得树的结构较好,提高查找运算的速度
  1. 什么是哈夫曼树?应用在?
    1. 带权路径长度:从根结点到该结点的边数 * 该结点的权值
    2. 定义:在含有n个结点的二叉树中,其中带权路径长度最小的二叉树称为哈夫曼树,最右二叉树
    3. 应用:哈夫曼编码,没有一个编码是另一个编码的前缀

 

 

    1. 什么是连通图、强连通图、非连通图

连通:无向图中,从定点v到w有路径存在则是连通的

连通图:图中任意两个顶点都是连通的,则是连通图

强连通:有向图中,从v到w,或者w到v之间都有路径

强连通图:任何一对顶点都是强连通的

    1.  不用递归的,图的深度、广度遍历?

广度优先搜索:

  1. 概念:广度优先搜索是采用非递归的方式,需要用到队列来记录正在访问的顶点的下一层
  2. 基本思想:首先访问起始顶点v à 然后从v出发,一次访问v的各个未访问过的邻接顶点w1、w2…. à 再一次访问w1、w2…这些邻接结点的邻接结点 à 依次类推,直到图中所有的顶点都被访问过为止;
  3. 广度优先搜索的性能:在空间上因为开辟了一个队列所以是Ov,在时间上,如果采用邻接表存储时间复杂度是O(v+e),如果采用邻接矩阵存储时间复杂度是O(v2);
  4. 应用:广度优先搜索类似于二叉树的层次遍历,类似的思想还应用于Dijkstra单元最短路径算法和Prim最小生成树算法

深度优先搜索:

  1. 概念:深度优先搜索是采用递归的方式,需要借助栈实现递归
  1. 基本思想:首先访问图中的某一起始顶点v à 然后由v出发访问与v邻接且未被访问过的任意一个结点w1 à 再访问与w1邻接的顶点w2 à然后重复刚刚的过程 à 在不能再继续向下访问的时候(出栈),依次退回到最近被访问的顶点,如果这个顶点还有没有被访问过的邻接点,就从这个邻接点继续刚刚的搜索过程 à依次类推,直到图中所有的顶点都被访问过为止;
  2. 深度优先搜索的性能:在空间上因为开辟了一个工作栈所以是Ov,在时间上,如果采用邻接表存储时间复杂度是O(v+e),如果采用邻接矩阵存储时间复杂度是O(v2);
  1.  深度搜索、广度搜索(图的数据结构的遍历方法)

图的遍历算法可以用来判断图的连通性

如果图是连通的,则从任一结点出发,只需一次遍历就能够访问图中所有顶点;

  1.  BFS求单源最短路径

非递归

  1. 思想:定义一个一维数组d,和开辟一个队列,d[i]表示从源点出发到现在这个顶点的距离 à 假设u是最开始出发的点,d[u]初始化为0

à 并且u入队之后在循环中遍历,每往下走一层,对应的d[i]就会+1 à 最后要找哪一个顶点的最短路径就输出对应的d[i]的值就可以了

  1. 怎么生成最小生成树?

生成树:连通图的生成树包含图中所有顶点的一个极小连通子图(包含所有顶点,但是边数最少)

        如果图中有n个顶点,则是生成树n-1条边

Prim算法、克鲁斯卡尔算法

  1. prim算法

prim算法是从顶点开始拓展最小生成树

  1. 基本思想:从顶点v1出发,找与v1相连的权值最小的边,找到对应的v2, à 再从v1、v2出发,找与这两个顶点相连但权值最小且不构成环路的边,找到对应的v3 à 依次刚刚的操作,直到连接到所有的结点
  2. 性能:时间复杂度是Ov2
  3. 不依赖于边,所以适用于边多的稠密图
  1. 克鲁斯卡尔算法
  1. 克鲁斯卡尔算法是按照权值递增的次序选择合适的边来构造最小生成树
  2. 基本思想:从整个图中按照权值递增的顺序依次选择边,且不构成回路,直到选中了n-1条边,也就是选中了所有顶点为止
  3. 性能:时间复杂度是Oeloge
  4. 适用于边少的稀疏图
  1. 迪杰斯特拉算法

求图中某一顶点到其余各个顶点的最短路径

  1. 基本思想:
  1. 设有两个集合S、T,集合S中存放已找到最短路径的顶点,T中存放剩余的顶点
  2. 在最开始的时候,S中只包含出发的点v0,然后不断的从T中选取到顶点v0路径最短的顶点vu到集合S中
  3. 集合S中每并入一个顶点,都要修改顶点v0到集合T中的顶点的最短路径长度
  4. 重复这个过程直到全部并入S为止
  1. 算法的过程:dist[ ] path[ ] set[ ]  天勤P199
  2. 性能:时间复杂度On2
  1. 弗洛伊德算法

天勤 P204

  1. 递归是什么,什么情况下使用递归?递归的优缺点?
  1. 递归:把一个规模大的、较难解决的问题变成规模较小的、易解决的同一问题,规模较小的问题又变成规模更小的问题,并且小到一定程度可以直接得出它的解,从而得到原来问题的解。 

一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法

  1. 什么情况下使用递归:可以把一个问题转化为一个新的问题,而这个新的问题的解决方法仍与原问题的解法相同,只是所处理的对象有所不同
  2. 优点:简单、易于理解
  3. 缺点:
      1. 递归通常会出现许多的重复计算,导致时间复杂度较高
      2. 递归需要用到栈,每一次函数调用都会在内存中分配空间,而栈的容量是有限的,调用层次太多就有可能溢出
  1. 从起点到终点有多条路径怎么实现最快的过去?

 

10、迪杰斯特拉 算法,具体实现?

      

 

 

 

 

 

查找

  1. 常见查找算法

顺序查找:从一端开始顺序扫描,时间复杂度On

二分查找(折半查找):先从中间结点开始比较,比中间结点小查找左边,大的话查找右边,递归下去,复杂度一直是Olog2n

斐波那契查找:也是二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率。大部分比小部分:1:0.618

树表查找:二叉树查找树、平衡二叉树、红黑树、b树b+树

分块查找:块内无序,块间有序

哈希查找:地址映射、解决冲突

  1. 顺序查找

基本思想:从表的一端开始,顺序扫描线性表,一次与关键值k进行比较,如果相等则查找成功,如果扫描结束了都没有找到相等的,则查找失败

性能:ASL成功=(n+1)/2   ASL失败 = n+1

      时间复杂度:一直是On

  1. 什么是折半查找?二分查找?

二分查找仅适用于有序的顺序表(这里假设是递增有序的)

基本思想:首先将给定的值与表中的中间位置元素进行关键字比较,如果相等则查找成功,如果比中间结点小则查找的区间,比中间结点大的话查找右边的区间,处理新的区间的时候和一开始的操作一样,也是从中间位置元素开始比较

判定树:可以得到描述折半查找的判定树

性能:复杂度一直是Olog2n

     ASL近似于log2(n+1)-1

  1. 分块查找?索引顺序查找?

将线性表分成若干块,每一块中的元素在块内的存储是无序的,但是块与块之间是有序的

  1. 斐波那契查找
  1. 二叉排序树BST?

定义:左子树的结点值小于根结点,右子树的结点值大于根结点,且左右子树本身也分别是一棵二叉排序树

       二叉排序树中序遍历是一个递增的序列

查找基本思想:BST的查找类似于二分查找,先从根结点开始和关键字k进行比较,如果相等则查找成功,如果根结点的值小于k,则在右边的子树上开始查找,如果根结点的值大于k,则在左边的子树上开始查找,然后在当前的子树重复刚刚的过程,如果最后来到了结点的空指针域,则说明查找失败;

时间复杂度:BST查找算法的平均查找长度主要取决于树的高度

单支树:On

平衡二叉树:Ologn

二叉排序树平均:Ologn

  1. 平衡二叉树?

AVL是对二叉排序树的改进,所以AVL是二叉排序树;

定义:任意结点的左右子树的高度差不超过1 的二叉树,且左子树右子树都是平衡二叉树

平衡因子只有可能是-1,0,1

查找基本思想:与BST相同,但AVL使得树的结构较好,查找的速率更快;

时间复杂度:n个节点的AVL最大深度Ologn

            平均查找长度Ologn

  1.  BST与二分查找的区别?

树的形状:BST的插入顺序不同树形不同,而二分查找的判定树树形唯一

时间复杂度:BST的插入删除Ologn,仅需修改指针即可,无需移动结点;二分查找的删除插入为On,因为对象是一个有序顺序表

  1. 2-3树?了解红黑树之前了解一下2-3树

2-3搜索树有两种结点:有两个分支的结点和有三个分支的结点­——

有两个分支的节点中,左子节点比父节点小,右子节点比父节点大。

有三个分支的节点中,左子节点比父节点里的所有数小,右子节点比父节点所有数大,中子节点介于父节点的两个数之间

  1. 什么是红黑树?

是平衡二叉树的一种

定义:红黑树是满足以下条件的二叉查找树

    1. 每个结点要么是红色,要么是黑色,分别代表这个结点与他的父节点的联系是红色或是黑色
    2. 根结点必须是黑色,且每个空结点是黑色
    3. 红色结点不能连续,红色结点的孩子和父亲都不能是红色
    4. 一个结点的做结点和有节点不能同时为红色
    5. 每个结点从该结点到最后的叶子节点的任何路径都含有相同个数的黑色结点

    时间复杂度:红黑树的平均高度为logn

AVL相比的好处是:

AVL是严格的平衡二叉树,红黑树是弱平衡二叉树

AVL适用于插入与删除的次数比较少,但是查找多的情况;红黑树适用于插入删除比较多的情况

每个结点不用再存左右子树的高度差了,存的就不是一个int而是bool的二进制位,把它要用的额外空间做到了最简,操作的频次更少

 

STL的set/map底层都是用红黑树(平衡二叉树的一种)实现的

  1. AVL  vs  红黑树
      1. 查询速度:AVL的查询更快,因为平衡二叉树的平衡更严格一点,但是付出的单价就是AVL每个结点所存的信息更多,

同时为了让他更好的平衡,AVL调整的频次也更多

      1. 插入删除:红黑树插入和删除更快,因为调整的频次较低
      2. 所占空间:AVL所占用的空间更大,因为要存一个int型,而红黑树只用一位二进制位来标记即可
      3. 实践:高级语言都是用的红黑树;数据库一般用的是AVL,因为数据库中的查询远大于他的修改
  1. b树b+树?

b树查找具体步骤:b树的查找分为两步,1在b树中找结点,2在结点内找关键字;

先让根结点的值与关键字比较,如果相等则查找成功,如果不相等则按照对应的指针信息所指的子树中去查找,如果查找    到了叶节点,说明树中没有对应关键字,查找失败;

m阶b树:

      1. 树中结点孩子数目最多的是m个孩子
      2. m个孩子m个指针
      3. 每个结点最多m-1个关键字,m个孩子
      4. 非叶结点:子树个数:m/2向上取整 ~ m

结点内关键字个数:m/2向上取整 - 1 ~ m-1

      1. 根结点至少2个子树,至少1个关键字
      2. 叶节点不是结点,不带有信息,所有叶节点在同一层

 

m阶b+树:

  1. 树中结点孩子数目最多的是m个孩子
  2. m个孩子m个指针
  3. 每个结点最多m个孩子,m个关键字
  4. 非叶结点:子树个数:m/2向上取整 ~  m

          结点内关键字个数:m/2向上取整 ~  m

  1. 叶子结点包含所有关键字,分支结点包含各个子结点中的关键字最大值及其指向子节点的指针,有一个指针指向关键字最小的结点,所有叶子节点连接成一个线性链表
  2. 所有非叶节点仅起到索引作用

 

蓝色是b-树b+树相同的,黑色是b树b+树不同的

 

  1. 哈希算法如何进行查找、常见的哈希函数

哈希表(散列表)思想:根据给定的关键字计算出关键字在表中的地址

哈希表与其他查找的不同之处:在其他的查找方法中,关键字的地址与关键字之间不存在确定的关系;

                            而在哈希表中,关键字和关键字的地址是有确定关系的,可以用哈希函数计算出来;

查找过程:首先根据hash函数计算出一个地址,然后用关键字与这个地址上的关键字进行比较,这时分为以下三种情况:

          如果计算出来的地址上为空,则查找失败

          如果计算出来的地址上的关键字相同,则查找成功

          如果当前地址上的值与关键字不相同,则根据冲突处理方法到下一个地址继续比较,直到相同为止,则查找成功

如果这过程中又遇见空地址,则查找失败;

    性能分析:

哈希函数构造方法:除留余数法

冲突处理方法:开放地址法、链地址法

冲突:当关键字1不等于关键字2,但是通过哈希函数映射到同一个地址,则称为冲突

  1. 字符串模式匹配?

BF算法(简单的模式匹配)、kmp算法

BF算法思想:假设有一个主串和一个子串;

             先从主串的第一个位置起和模式串的第一个字符开始比较,如果二者相等,则逐一往后比较后续字符串;

             否则从主串的第二个字符开始,模式串回到自己的第一个字符,再重新上一步的比较;

以此类推,直到比较完模式串中的所有字符为止;

如果匹配成功,则返回模式串在主串中的位置;

    BF时间复杂度:O(n*m)

Kmp算法思想:kmp算法中有一个next[ ]数组,这个数组指导了模式串的下一步应该用几号位置的关键字去匹配;

               每次匹配不成功时,都是从主串失配处重新开始,主串不回溯,只有模式串回溯;

               先从主串的第一个位置起和模式串的第一个字符开始比较,如果二者相等,则逐一往后比较后续字符串;

否则从主串失配处的字符开始,模式串回到next[ ]数组中对应的位置,再重新上一步的比较;

如果模式串的首字符就与主串不匹配,则子串直接回到自己的第一个字符处

 

 

 

 

 

 

常见的

1、常见的排序算法过程、口述出来、时间复杂度、空间复杂度(最好最坏平均)

  1. 深度搜索、广度搜索(图的数据结构的遍历方法)
  1. prim算法、迪吉克斯拉算法、怎么生成最小生成树

5、二叉树的应用(哈夫曼编码、哈夫曼树)、遍历方式(中、前、后、层次、线索)

6、 常见查找算法(b+树、b树的区别、红黑树、平衡二叉树、哈希算法如何进行查找、常见的哈希函数)

7、快排的过程、时间复杂度

 

 

 

 

 

 

 

 

 

 

OC

数据的表示和运算

  1. 二进制的补码怎么求
  1. 八位数的补码的最大值和最小值分别是?
  1.  校验码有哪些?

奇偶校验码:在信息码的基础上加以为校验码,分为奇校验,偶校验

  1. 奇校验:添加一位校验码,使得整个码字里面1的个数为奇数;当接收端接收到数据后就校验数据里的1的个数,如果正好是奇数则没有出错,偶数个1就是出错了,需要重发
  2. 偶校验:添加一位校验码,使得整个码字里面1的个数为偶数;当接收端接收到数据后就校验数据里的1的个数,如果正好是偶数则没有出错,奇数个1就是出错了,需要重发
  3. 性能:奇偶校验并不能知道哪一位出错了

海明校验码:

  1. 思想:在信息字段中插入若干位数据,用于监督码字里的哪一位数据发生了变化
  2. 性能:在接收端不仅能检查出错误,还能将检查出来的错误纠错

循环冗余校验码:应用的比较广泛,他的检错率高,开销小,易实现

 

 

 

 

 

 

 

 

 

 

存储系统

  1. RAM和ROM

共同点:

都是采用随机存取的方式;都是通过对地址进行译码,再选择某个单元进行读写。

不同点:

  1. RAM是随机存取存储器,ROM是只读存储器
  2. RAM的读写比较方便,使用灵活,RAM通常用做主存或者cache;ROM只能读出;
  3. 断电丢失方面:RAM断电易丢失,ROM断电不丢失
  1. 存储器的功能?

主要是存储信息、读数据和写数据;

  1. 存储器的层次化结构

Cpu ----- 寄存器 ----- cache高速缓存 ------ 主存 ----- 磁盘

速度:快 -----------------------------------------------------------------------  慢

容量:小 -----------------------------------------------------------------------  大

价格:高 -----------------------------------------------------------------------  低

  1. 什么是半导体存储器?

半导体存储器最主要的是半导体存储芯片

半导体存储芯片主要是由存储矩阵、读写电路、译码驱动电路组成;并且包括了地址线、数据线、片选线、读写控制线;

  1. SRAM和DRAM的区别(静态随机存储器和动态随机存储器的区别)?
  1. 从工作原理:SRAM是使用双稳态触发器来存储数据;DRAM是使用电容来存储数据;
  2. SRAM是非破坏性读出;DRAM是破坏性读出;
  3. SRAM不要刷新;DRAM需要刷新;
  4. 应用:SRAM常用作Cache高速缓存;DRAM常用作主存;
  1. 什么是刷新?

刷新的实质就是在读出后再按原样写入;

刷新一行的时间就是一个存储周期

  1. 刷新的方法?
  1. 集中刷新:在2ms内集中安排一段时间进行刷新,会产生死区

         优点:读写操作的时候不会受刷新操作的影响,系统的存取速度比较高;

         缺点:会产生死区,在死区时间段里面就不能访问存储器;

  1. 分散刷新:每次读写完就刷新一行,即每个存储周期都刷新一行,存储周期变为读或者写周期 再加上 刷新一行的时间;
  2. 异步刷新:将刷新时间平均的分配到2ms中,一般是用刷新周期除以行数,得到两次刷新操作之间的时间间隔

         优点:不会产生死时间,避免CPU连续等到过长的时间,而且提高了计算机的工作效率;

  1. 读周期?读时间?写周期?写时间?存储周期?存储时间?

读周期:对芯片两次连续读操作的最小时间间隔;

读时间:进行一次存储器读操作的时间;

写周期:对芯片两次连续写操作的最小时间间隔;

写时间:进行一次存储器写操作的时间;

存储周期:读周期、写周期都是存储周期;

存储时间:读时间、写时间都可以是存储时间;

  1. 提高(CPU)访存的速度有哪些方法?

双端口存储器  or  多模块存储器

相同点:都是属于并行技术;

不同点:双端口存储器是空间上并行,而多模块存储器是时间上并行;

 

双端口存储器:在一个存储器的左右有两个独立的端口,分别具有独立的地址线、数据线和读写控制线,允许两个独立的控制器同时异步的访问存储单元

多模块存储器:

  1. 单体多字存储器:

思想:单体多字存储器把存储器的存储字字长增加了n倍,以存放n个指令字或数据字,于是单体多字存储器就比单体单字存储器的最大带宽提高了n倍;

缺点:单体多字必须要凑齐n个数据字之后,才能作为一个存储字一次写入存储器;

      并且指令和数据必须连续存放,如果存在转移指令就没有速度优势了;

  1. 多体并行存储器:采用多个模块组成的存储器,每个模块可以看做是一个独立的存储器;

   高位交叉编址的多体存储器:高位交叉编址是用高位地址表示体号,低位地址来定位体内的地址;

                             优点:有利于存储器扩充;

                             缺点:各个模块的工作方式是串行地工作,因此存储器的带宽收到了限制;

   低位交叉编址的多体存储器:低位交叉编址是用低位地址表示体号,高位地址来定位体内的地址;这样的话连续的地址是分布在相邻的不同模块中;

                             优点:对于连续的成块传送,低位交叉编址的多体存储器可以实现多模块流水线式的存取,大大的提高了存储器的带宽;

 

  1. Cache的基本结构由哪几大部件构成?

 

  1. CPU送来的主存地址怎么能转换成Cache地址?(主存地址如何映射到Cache中?)

通过地址映射的方式

  1. 直接映射:通过取模的方式,将主存数据块装入到Cache中的唯一位置;如果这个位置已经有内容,则产生块冲突,原来的块将无条件地被替换出去(无需使用替换算法)

        优点:实现起来比较简单;

        缺点:不够灵活,并且直接映射的块冲突率很高,空间利用率是最低的;

  1. 全相联映射:允许主存中的每一个块映射到Cache中的任意位置

     优点:Cache块的命中率很高;因为可以映射到Cache中的任意位置;也就减小了块的冲突率,提高了Cache的利用率;

     缺点:地址变换速度慢,实现成本高;

  1. 组相联映射:将Cache空间分成大小相同的组,组间采取直接映射,在组内采取全相联映射;

     这是对两种方式的一种折中

  1. Cache内容已经满的时候,怎么让cache腾出位置来存放来自主存的块?

替换算法

  1. 先进先出算法:换出的时候,选择最早调入Cache的字块进行替换
  2. 最近最少使用算法:这个方法很好地而利用了局部性原理替换出近期用的最少的字块,
  3. 随机法:随机的确定一个被替换的块
  1. 什么是写策略?

由于CPU写Cache时,把Cache中的某个单元的内容改变了,但是这个单元对应的主存中的内容并没有改变,所以需要使用写策略处理这个现象

命中的写策略:写回法、全写法

未命中的写策略:写分配法、非写分配法

通常写回法适合写分配法一起使用,全写法是和非写分配法一起使用;

 

写回法:当cpu写cache时,只修改cache的内容,而不立即写入主存,只有当此行被换出时才写回主存;

       优点:可以减少访问主存的次数;

       缺点:可能导致cache中和主存中内容的不一致

全写法:当cache命中时,cache如果被修改,那cache和主存会同时被修改;

       优点:可以较好的保持cache与主存内容的一致性

  1. 什么是虚拟技术/虚拟存储?

 

  1. 为什么引入虚拟存储?

 

  1. 虚拟存储怎么解决问题?会带来什么问题?

 

  1. 什么是局部性原理?

 

  1. 虚拟内存 vs Cache

 

  1. 请求分页管理、请求分段管理、请求段页式管理

又称为:页式虚拟存储器、段式虚拟存储器、段页式虚拟存储器

页式虚拟存储:

段式存储:

段页式:

  1. 页面置换算法
  1. 引入快表的原因?
  1.  
  1.  

 

 

 

 

指令系统

  1.  
  1.  

 

  1. 什么是指令?

指令就是要计算机执行某种操作的命令

  1. 什么是指令系统?

一台计算机所有机器指令的集合,称为这台计算机的指令系统

  1. 为什么要引入指令系统?

因为引入指令系统,避免了用户与二进制代码直接接触,使用户编程更加方便

  1. 对于一个指令系统来说,寻址方式的多、少有什么影响?

寻址方式多样化能让用户编程更方便,但这也会造成CPU的复杂化,也不利于指令流水线的运行

寻址方式太少,能够提升CPU的效率,但是对于用户而言,使得编程变得更复杂

  1. 基址寻址 vs 变址寻址

两种方式的有效地址形成都是寄存器内容+偏移地址

基址寻址:面向OS,寄存器中的内容是由OS控制的,寄存器内容不变,程序员操作的是偏移地址

变址寻址:面向程序员,偏移地址固定不变,程序员操作的是变址寄存器

  1. CISC VS RISC

复杂指令系统计算机 vs 精简指令系统计算机

 

 

 

 

 

CPU

  1. CPU分为哪几部分?分别执行什么功能?

CPU主要由运算器和控制器组成

运算器功能:对数据进行加工,对数据进行逻辑运算和算术运算

控制器功能:是整个系统的指挥枢纽,对整个计算机进行控制,包括指令控制、操作控制、中断处理

其中指令控制就是协调计算机的各个部件执行程序的指令序列,包括取指令、分析指令和执行指令

  1. 什么是指令周期、机器周期、时钟周期?他们之间有何关系?

指令周期:CPU从主存中取出并执行一条指令所需要的时间 = CPU完成一条指令的时间,称为指令周期

机器周期:执行指令周期中的一步操作需要的时间

时钟周期:完成一个微操作需要的时间,是CPU操作的最基本单位

指令周期通常包含若干的机器周期,机器周期里面又包含若干时钟周期

  1. 指令有哪些执行方案?

单指令周期:每条指令都在相同的时钟周期内完成,时间取决于最长的指令的执行时间,指令之间串行执行

多指令周期:不同类型的指令他的时钟周期不同,并不再要求所有指令占用相同的执行时间,指令之间串行

流水线方案:指令直接可以并行执行的方案

  1. 控制器设计的几种方式?

根据控制器产生未操作控制信号的方式的不同,控制器可分为硬布线控制器和微程序控制器

  1. 硬布线、微程序控制的区别?

硬布线原理:根据不同的指令要求,当前的时序,按照时间顺序发送一系列微操作控制信号;

            是由复杂的组合逻辑门电路与一些触发器构成的

微程序控制器原理:采用存储逻辑实现的,把微操作的信号代码化,使每条机器指令转化为一段微程序并存入控制存储器中

1机器指令à1微程序àn微指令1àn微操作命令

  1. CPU的控制方式?

【背景:控制器中有控制单元,控制单元控制一条指令执行的过程,也就是控制一次执行一个确定的微操作系列的过程。不同指令的微操作序列不同,复杂程度不同,所需的执行时间也不同,所以有三种控制的方式】

同步控制方式:通常以最长的微操作序列作为标准,采取的是相同的时间间隔作为机器周期来运行不同指令

异步控制方式:各个部件按照自己固有的速度工作,通过应答方式来进行联络

联合控制方式:同步和异步的折中,大部分采用同步控制,小部分采用异步控制

  1. 控制器如何指挥整个系统工作?

指令

  1. 什么是微指令?和指令有什么关系?

微指令:是一组微命令的组合

许多微指令构成了微程序,而微程序可以完成对指令的执行

  1. 为什么引入流水线?

流水线是把一个重复的过程分解成若干子过程,每个子过程与其他子过程并行执行,是一种并行处理技术

流水线技术可以只增加少量硬件的基础上就把计算机的运行速度提高几倍

  1. 影响流水线的因素?

控制相关(控制冲突):流水线遇到了转移指令造成断流

结构相关(资源冲突):多条指令在同一时刻使用同一资源形成的冲突

数据相关(数据冲突):前一条指令产生的结果后一条指令的输入

  1. 什么是指令流水线?指令流水线相对于传统计算机体系结构的优势是什么?

指令流水线:一条指令的执行过程可以分多个阶段,比如取指、分析、执行

优势:

  1. 能够实现并行工作来缩短程序执行时间
  2. 流水线每一个功能段部件后面都有一个缓冲存储器,保存本流水段的执行结果,提供给下一流水段使用
  3. 只增加少量硬件的基础上就把计算机的运行速度提高几倍
  1. 超标量流水线的定义、超流水线技术、超长指令字

超标量流水线:每个时钟周期可以并发多条指令,以秉性操作的方式执行

超流水线技术:在一个时钟周期内再分段,一个时钟周期内一个功能部件使用多次

  1.  

总线

    1. 带宽对于计算机的意义

 

    1. 总线特点?

分时、共享

    1. 引入总线有什么好处?
  1. 简化系统结构,方便系统设计
  2. 减少了连线的数目,便于布线,减小体积,提高系统的可靠性
  3. 便于系统的扩充、更新与配置
  4. 便于接口设计,所有与总线连接的设备均采用类似的接口
    1. 引入总线会导致什么问题?如何解决?

可能会导致总线上多个设备同时要求使用总线,产生总线的冲突;

解决这个问题应采用总线仲裁部件,以某种方式比如链式查询、计数器查询等方式选择一个主设备优先获得总线控制权

    1. 占用总线的一对设备如何进行数据传输?

第一步:首先是一个设备要发送传输请求,然后总线进行仲裁,选择一个合适的设备使用总线

第二步:寻址阶段。获得总线使用权的设备通过总线发出本次要访问的模块的地址和命令,启动另一个从模块

第三步:传输阶段。主从设备进行数据交换

底色不:结束阶段。主模块的有关信息均从系统总线上撤出,让出总线使用权

 

 

 

常见的

1、冯诺依曼体系

2、 指令寻址过程

3、cache的作用是什么

 

 

C

  1. 面向对象、面向程序?
  1. 面向对象的特征?
  1. float、double、int、char

float、double在32位计算机中占相同字节,都是32位

int 有2个字节和4个字节,分别是16位和32位

float是4个字节,32位

double是8个字节,64位

char是1个字节,8位

 

 

数据库

  1. 怎么连接数据库
  1. 首先导入mysql的驱动jar包

方法是新建一个lib文件夹,然后把mysql的jar包放在里面

  1. 注册数据库的驱动
  2. 获取数据库的连接

使用jdbc提供的方法getConnection,里面有三个参数,分别是URLmysql路径、账户、密码

  1. 预编译sql

使用PreparedStatement

  1. 执行sql

ExecuteQuery() executeUpdate()就是增删查改的操作

  1. 处理结果集

使用Resultset方法获取数据

  1. 处理异常,关闭jdbc对象资源

关闭所有使用的jdbc对象,以释放jdbc,关闭顺序和声明顺序相反

 

 

 

 

常见的

  1. 数据库三大范式

 

 

 

 

前沿技术 必须要懂一些

机器学习常见算法、概念

  1. 逻辑回归
  1. 决策树
  1. SVM
  1. 神经网络
  1. KNN
  1. K-Means
  1. 过拟合和欠拟合(什么意思,如何避免过拟合和欠拟合)
  1. 聚类、回归、分类这些算法(哪些属于聚类、哪些属于回归、哪些属于分类)
  1. 监督学习、非监督学习

10、深度学习和一些前沿问题(如何看待无人驾驶、AI是否能够代替人类)

11、说说傅里叶变换、矩阵的秩是什么、怎么求的

12、你对AI怎么看

13、你常用的语言是什么 为什么

 

 

 

 

 

 

 

 

 

 

 

 

物联网

  1. 怎么理解物联网?
    1.  万物互联,人与人之间的通信,人与人之间的协同,物与物之间的相连无处不在。

物联网在生活中的应用:上学时使用的一卡通,高速上的ETC,近些年流行的智能手环可穿戴设备等。

物联网+AI:如扫地机器人,就是一个典型的智能家居的入门产品;还有智能音箱,主要的是语音交互,可以用语音控制家庭中的其他产品,使得产品之间可以相互通信,这也是智能家居未来发展的最终目标,即在物联网时代,把人为主体换成了物为主体。

2) 物联网主要分为三个组成部分:分别是传感器、网络连接、数据处理。

传感器被安装在各种产品中,这些传感器或者是芯片让产品拥有感知能力和数据处理能力。产品在收集完了数据之后,就要上传到云端进行集中处理,这个过程就是通过网络连接来完成的,物联网需要的是低功耗、长距离的传输协议,即低功率广域网络。数据处理的目的在于将原始的数据转换为有用的信息,数据处理一般都是在云服务器上完成的,这些服务器就是智能音箱的大脑,数据在这里经过处理之后再以直观易懂的形式返回给用户,

 

3) 嵌入式理解:把软件直接烧录在硬件里,而不是安装在外部的存储介质上。

我的理解就是给冷冰冰的机器注入了灵魂,而这个灵魂可以被人类以简单便捷的方式操控;它起源于单片机技术,发展到现在已经融入生活的方方面面。手机有了嵌入式技术,不仅可以打电话还可以视频、拍照,手表有了嵌入式技术可以监控你的健康状态。

进入物联网时代计算机应用的各行各业中的百分之九十左右的开发都涉及到嵌入式开发。嵌入式特点:功能更专一、功耗更低、专业性更强、定制性更突出。

智能家居系统,智能医疗系统,物联网系统等,这些系统的核心技术都有嵌入式。

虽然物联网具体给我们带来多大的改变现在还不清楚,但是他的发展是令人期待的,在4G时代,我们已经看到很多物联网的雏形,如今5G已经正式开始商用,似乎离理想中的物联网又近了一步。

 

智能家居联网方式有三种:wifi、蓝牙、zigbee

 

 

mqtt

1、原理

mqtt是一个协议的名称,主要是应用在物联网中

mqtt本质上是一种消息队列,整个工作方式是基于订阅和发布

比如有一个MQTT服务端,会有客户端连接进来,比如客户端C1 C2,

如果C1朝一个topic主题发布消息,C2如果订阅了这个主题topic就会接收到这个消息

2、Qos

针对物联网,MQTT做了一些相关的设定,比如有一个参数Qos,Qos决定了这个消息的质量

Qos有0 1 2 三种设定,在0的时候发送端只发送一次,不管服务端有没有收到,都只发送一次

1的时候就是至少发送一次,反正服务端一定能收到,不一定收到一次,可能收到多次

2的话就是能保证服务端能收到且仅收到一次

0 1 2 就是消息保证的质量越来越高

 

大多数在采集端会设置Qos是0,因为采集的时候是每秒1次,在某一秒数据丢失了其实并不在意

关键性的数据可能设置1 2

随着消息质量的升高,底层TCP的数据交互次数会变多,所以Qos越小是对网络占用越低的,能耗也越低

3、 server实现方式

http的服务端有很多种实现方式比如阿帕奇的httpd

mqtt的server实现方式是emq,在官网下载emqx然后使用终端开启emq start,然后就可以进入dashboard后台

 

1883端口是mqtt协议的tcp版

8883是mqtt协议tcp+ssl版

18083端口是后台管理界面的

web socket 端口是8083

 

连接1883端口:

node-red启动mqtt

在刚刚的终端界面下载nodered,是个框架,nodered是个图形化工具

然后运行node-red,

然后就会在本机的1880端口:localhost:1880  进入到nodered界面

 

nodered是针对物联网的 对mqtt有支持

 

  1. esp8266利用mqtt搭建物联网通信
  1. 下载mqtt服务器,在emqx网站
  2. 搭建服务器:

搭建的是linux服务器,ubuntu18.04的环境,在阿里云购买

购买了之后阿里云的配置安全组(实例à添加安全组规则)

然后通过ftp发送安装包到服务器(使用xshell工具里面)

解压安装

dashboard控制台查看:服务器地址+18083端口

  1. esp8266 在Arduino里面写代码

esp8266里面使用mqtt协议要引入一个PubSubClient的头文件

然后是无线网的名字,无线网密码,服务器的ip

下一步是设置wifi:

          里面包括 消息回调,处理消息payload

              断开重连 reconnect()

                       初始化 setup:连接wifi、配置mqtt服务器地址、设置订阅消息回调

循环任务loop:重连机制、不断监听信息、每2s发布一次消息、发送消息

串口初试波特率115200

  1. 订阅连接

在控制面板dashboard里输入订阅,控制台可以发消息,esp8266也可以发

 

数电模电 嵌入式开发 整体把握

电阻 led 三极管放大电路 买芯片有参考电路

手册

 

esp8266

  1. esp8266特点

低功耗、高集成度的 Wi-Fi 芯片。

最小系统仅需 7 个元器件

超宽工作温度范围:-40°C 至 +125°C

ESP8285 : ESP8266 内封 8 Mbit Flash。

ESP8266EX 有三种运行模式:激活模式、睡眠模式和深度睡眠模式,能够延长电池寿命

 

 

 

zigbee vs mqtt

1、zigbee与mqtt的区别

2、zigbee

zigbee要借助工具才能联网,这个工具就是网关,网关就是一个桥梁。网关先自己连上网,再帮助zigbee设备去联网,zigbee设备用的是zigbee网关

 

2、为什么不直接用wifi联网,还要搞一个zigbee去联网,岂不是很麻烦?

因为用wifi的话,如果使用的人,接入这个网的人很多,会导致网速变得很慢,而且如果有线路故障,wifi就直接不能够使用了,所以wifi在一些情况下并不可靠。

而zigbee相对来说有一些优点,比如第一zigbee比较省电,不用插电,用电池工作就可以了,第二就是zigbee可以脱离网络,自己组建独立的网络,连接到zigbee网关的所有设备就是一个小网络,就算家里路由器坏了,zigbee网络里的设备是都可以正常工作的。

总结就是:wifi的连接距离较远,隔墙都没有问题,蓝牙比较简单,zigbee优势就是只需要很少的电,还可以建立自己的小网络不受到宽带的影响。

目前的智能家居中,这几种方式是和谐相处的,不同的设备采用不同的联网方式。

 

 

 

互联网在疫情中的应用

  1. 健康码是

我个人认为健康码系统的推出在这次疫情中起到了很重要的作用,无论是对疫情的防控还是复工复产都提供了重要的支撑

健康码系统的核心特色在于一人一个健康码且动态更新,一次登记之后全市范围都可以使用,并且一套系统可以支撑多个场景,比如企业复工、小区出入等等

 

我了解的比较多的是支付宝健康码,有以下几个我个人觉得互联网应用很重要的点:实名制+大数据

1是支付宝是建立在实名体系上的,融合多个平台,如本地发热门诊、社区电子通行证等,他推动市民在线申请健康码,可以快速发现异常人员和掌握异常人群的活动范围。

2是大数据的综合处理能力,采用了同步异步相结合,实时和离线相结合的机制,通过融合多个平台实时更新数据库,做到通过数据批处理每日更新,确保数据的时效性大数据分析。并且结合当地的防控节奏和方向不断的调整,实现健康码的自动分配和动态更新。

 

它在经济上能极大节约城市治理成本,提升国家治理效率,稳定社会秩序,让人们更有安全感,对未来也更有美好的预期。

更多推荐

计算机本科 很多很多科目的总结

本文发布于:2023-04-21 08:35:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/746c9c5ad69013ee40533e0c30e23ab2.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:科目   本科   计算机

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 92897文章数
  • 23618阅读数
  • 0评论数