1.数据结构
1.1 线性表1.2 栈和队列1.3 串1.4 树与二叉树1.5 图1.6 查找1.7 排序 2. 操作系统
2.1 进程管理2.2 内存管理2.3 文件系统2.4 输入输出(I/O)管理 3. 计算机组成原理
3.1 绪论3.2 数据的表示和运行3.3 存储系统3.4 指令系统3.5 中央处理器3.6 总线3.7 I/O 4. 计算机网络
4.1 计算机体系网络结构4.2 物理层、数据链路层4.3 网络层4.4 传输层4.5 应用层 5. 数据库
5.1 数据库5.2 数据库的并发操作
6. 软件工程7. 编译原理8. 其他问题
注:本博客内容部分来自王道书和各个前辈的博客整理而成
- 数据结构的4种逻辑结构各有什么特点?
(1)集合结构:结构中的数据元素之间除了同属于一种类型外,无其他关系。
(2)线性结构:结构中的数据元素之间存在一对一的关系。
(3)树形结构:结构中的数据元素之间存在一对多的关系。
(4)图状结构或网状结构:结构中的数据元素之间存在多对多的关系
- 算法的五个特征
1.1 线性表1.可行性 2.确定性3.有限性 4.输入 5.输出
- 顺序表和链式表的区别*
存取方式上来说,顺序表可以顺序存取,也可以随机存取。链表只能从表头顺序存取元素逻辑结构与物理结构上来说,顺序表逻辑上相邻,对应的物理位置也相邻。链表逻辑上相邻,物理存储位置不一定相邻,对应的逻辑关系是通过指针链接实现。两者对于数据的操作,对于插入和删除,链表是比较合适的(关键在与找到插入删除的点,O(1)),而对于顺序表来说,插入和删除是比较麻烦的,因为需要移动一部分的数据。对于按序号查找,顺序表比较合适,O(1)。从内存存储空间来看,数组从栈中分配空间,对于程序员来说比较方便,但自由度小。而链表从堆中分配空间,自由度大但是申请管理比较麻烦。
- 单链表中,增加头结点的目的*
使链表的第一个元素与其他位置的元素的操作一致无论链表是否为空,其头指针都指向头结点的非空结点,使空表和非空表的处理一致。
- 如何确定单链表是一个环?
1.2 栈和队列1.双指针:首先创建两个指针1和2,同时指向这个链表的头节点。然后开始一个大循环,在循环体中,让指针1每次向下移动一个节点,让指针2每次向下移动两个节点,然后比较两个指针指向的节点是否相同。如果相同,则判断出链表有环,如果不同,则继续下一次循环。
- 栈和队列的共同点
都是一种操作受限的线性表,栈是只在一个端点插入、删除(先进后出),队列是在一个端点插入,另外一个端点删除(先进先出)。
- 循环队列如何区分队满还是队空
牺牲一个队列单元用来区分队满和队空,入队时少用一个单元。约定以队头指针在队尾指针的下一个位置作为队满的标志。
队满:(Q.rear + 1)%MaxSize == Q.front
队空:Q.rear == Q.front
队列中元素个数:(Q.rear - Q.front + MaxSize) % MaxSize
- 栈和队列的应用
1.3 串 1.4 树与二叉树栈:括号匹配,表达式求值,递归时存储环境
队列:缓冲区
树是一种逻辑结构
结点的度:结点的孩子个数
树的度:树中结点的最大度数
- 二叉树与度为2的结点的有序树的区别*
度为2的结点的树至少有3个结点,而二叉树可以为空
(度为2的树要求每个节点最多只能有两棵子树,并且至少有一个节点有两棵子树。二叉树的要求是度不超过2,可以是1或者0。)度为2的结点的树的孩子的左右次序是相对于另一孩子而言的,没有左右孩子的区别。
二叉树有左右孩子的区别,二叉树的结点次序是确定的
- 线索二叉树
在含n个结点的二叉树中,有n+1个空链域。指向结点前驱和后继的指针称为线索,加上线索的二叉树称为线索二叉树。
先序线索二叉树有左孩子的情况时,找不到前驱
后序线索二叉树有右孩子的情况时,找不到后继
- 简述一下二叉排序树
若左子树非空,左子树的结点的值小于根结点的值若右子树非空,右子树的结点的值小于根结点的值左右子树也分别是一颗二叉排序树
- 哈夫曼树与二叉树的区别
哈夫曼树不一定是二叉树,若哈夫曼树的度为m,则只有度为m的结点和度为0的结点
1.5 图补充:
哈夫曼树的定义:在含有n个带权叶子结点的二叉树中,其中带权路径长度(WPL)最小的二叉树称为哈夫曼树。
结点的带权路径长度:从根结点到该结点经过的边数与该结点上权值的乘积,称为该结点的带权路径长度。
树的带权路径长度:树中所有带权路径长度之和。
- 图的存储结构*
1.邻接矩阵 2.邻接表 3.十字链表(有向图) 4.邻接多重表(无向图)
- 图与线性表、树的区别
线性表和树可以是空表,但图不能是空图。图的边集可以为空,但顶点集一定非空。
- 树的遍历和图的遍历有什么不同?*
图的遍历: 从某一结点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次且仅访问一次。
遍历方法:
1.深度优先遍历(DFS)
2.广度优先遍历(BFS)
树的遍历:树是一种特殊的图,树的遍历实际上也可以视为一特殊的图的遍历。
遍历方法:
1.前序、中序、后序遍历,其实都采用的是DFS思想,DFS思想常用递归实现;
2.层次遍历,采用的是BFS思想,采用队列这种数据结构实现。
- dfs和bfs的区别*
描述一下图的深度优先遍历和广度优先遍历
深度优先遍历:首先访问图中某一起始顶点v,然后由v出发,访问与v邻接且未被访问的任一顶点w1,再次访问与w1邻接且未被访问的顶点w2,重复上述过程,当不能继续向下访问时,依次退回到最近被访问过的顶点,从该点重复上述过程,直至图中所有顶点被访问。
广度优先遍历:首先访问图中某一起始顶点v,由v出发,依次访问v的各个未访问过的顶点w1,w2,…,wi,然后访问这些顶点的所有未被访问的邻接顶点,直至图中所有顶点被访问。
- Prim算法和Kruscal算法的区别
Prim:时间复杂度O(V2),适合边稠密的图
Kruscal:时间复杂度O(ElogE),适合边稀疏顶点较多的图
补充:什么是最小生成树?
连通图的包含图中的所有顶点的极小连通子图,最小生成树是边的权值之和最小的生成树。
- 描述一下Prim算法和Kruscal算法
Prim算法:从图中任取一顶点加入树T,再选择一个与当前T中顶点集合距离最近的顶点,并将该顶点和响应边加入T,直至所有顶点都并入T。
Kruscal算法:初始时只有n个顶点而无边的非连通图T,每个顶点都自成一个连通分量,按边的权值由小到大的顺序,不断选取当前未被选取过且权值最小的边,若该边依附的顶点落在T中不同的连通分量上,则加入T,否则选择下一条权值最小的边,直至T中所有顶点都在一个连通分量上。
- Dijkstra算法和Floyd算法的区别?
Dijkstra: 求从某一源点到各个顶点间的最短路径问题(单源最短路径),时间复杂度为O(V2)
Floyd:求各个顶点之间最短路径问题,时间复杂度O(V3)
- 描述一下Dijkstra算法
- 关键路径是什么?关键活动是什么?什么情况下才会有关键路径?
AOE网:带权有向图中,以顶点表示事件,以边表示活动,边上的权值表示完成该活动的开销的图
关键路径:AOE网中,从源点到汇点的所有路径中具有最大路径长度的路径。
关键活动:关键路径中的活动
- 怎么确定有向图中存在环*
1.6 查找1.深度遍历
2.拓扑排序
若有向图不能被拓扑排序输出一个线性序列,则存在环。
- B树和B+树的区别?
从关键字上来说,B+树的叶子结点包含了所有关键字,即在非叶结点中出现的关键字也会出现在叶子结点中。
而B树中,叶子结点和其他结点包含的关键字是不重复的。从指向记录的指针上来说,B+树只有叶子结点带有指向记录的指针,非叶结点只起索引作用;
而B树所有结点都带有。B+树能支持顺序查找
- 冲突和聚集的区别
冲突:同义词之间
聚集:非同义词之间
- 散列表的建立方法,散列表会不会发生冲突,解决冲突的方法
1.直接定址法
2.除留余数法
3.数字分析法
4.平方取中法
会发生冲突,解决方法:
1.开放定址法
线性探测法、平方探测法、再散列法、伪随机序列法
2.拉链法
把所有同义词存储在一个线性链表中
- hash表的特点,适合存储什么类型的数据
是根据关键字值而访问的数据结构
特点:
1.访问速度快
2.需要额外空间
3.无序
4.可能会发生冲突
适合存储快速查找且关键字很少重复甚至不重复的数据。
- 影响hash表平均查找长度的因素
1.7 排序1.散列函数
2.处理冲突的方法
3.装填因子
- 一些会问到的排序:
1.当表元素距离最终位置不远,为节省时间,可以采用直接插入排序
2.当数据规模小的时候,选择直接插入排序或者选择排序
3.当基本有序的时候,,选直接插入排序和直接选择排序
4.当数据规模较大的时候,选择快速排序,快速排序的平均时间最短,但是在最坏情况时,是O(n2)
5.堆排序所需要的辅助空间比快排要小,但是这个两个排序都不是稳定的。
- 时间复杂度为O(nlogn)的排序算法
快速排序、堆排序、二路归并
- 时间复杂度最坏情况和平均情况相同的排序算法
直接插入、折半插入、冒泡排序、简单选择、堆排序、二路归并、基数排序
- 时间复杂度最好情况和平均情况相同的排序算法
2. 操作系统 2.1 进程管理折半插入、简单选择、堆排序、二路归并、基数排序
- 进程和线程的区别?*
1.调度,未引入线程前,进程只作为拥有资源和独立调度的基本单位;
引入线程后,线程是独立调度的基本单位,进程是拥有资源的基本单位。
2.拥有资源,无论有无引入线程,进程都是拥有资源的基本单位,线程不拥有系统资源。
3.并发性,一个进程可以有多个线程,这些线程也可以并发执行。
4.地址空间和其他资源,进程的地址空间之间相互独立,同一进程的线程间共享进程的资源,某进程内的线程对其他进程不可见。
- 进程有哪几种状态?
1.就绪态 2.运行态 3.阻塞态
1.就绪态:进程除了处理机资源外的其他资源都已经准备好了
2.运行态:进程在处理机上运行的状态
3.阻塞态:进程由于某些资源消失或被抢占而从处理机上下来的状态
- 进程的通信方式有哪些?
1.管道:互斥的使用管道
2.共享内存区 :互斥的访问
3.信号量:实现同步
4.消息队列:
- 进程调度算法有哪些
1.先来先服务(fcfs):对长作业有利,对短作业不利
2.短作业优先(SJF):对长作业不利,导致长作业饥饿
3.优先级调度算法:
4.高响应比算法:非抢占
5.时间片轮转算法:抢占
6.多级反馈队列调度算法:抢占
- 调度算法抢占式和非抢占式的区别?
当一个进程在处理机上运行时,即使有某个更为重要的进程进入就绪队列,
非抢占式:仍然让正在运行的进程运行,直到由于自身原因而主动让出处理机。
抢占式:立即暂停正在运行的进程,将处理机分配给更重要的进程。
- 进程同步的方法有哪些*
1.临界区 2.信号量 3.互斥量 4.事件
- 为禁止两个进程同时进入临界区,同步机制的准则*
1.空闲让进
2.忙则等待
3.有限等待
4.让权等待
- 什么是死锁,死锁的必要条件:
死锁就是多个进程因竞争资源而造成的僵局(互相等待),若无外力作用,这些进程都无法向前推进。
1.互斥条件(不能破坏)
2.不剥夺条件
3.请求并保持条件
4.循环等待条件
- 死锁的处理策略
1.死锁预防:破坏死锁的4个必要条件之一
2.避免死锁:防止系统进入不安全状态,如银行家算法
3.死锁的检测及解除
- 死锁和饥饿的区别
同:都是因为竞争资源引起的
异:
1.首先最大的区别在于死锁的话的一定是涉及到两个或两个以上的进程,而饥饿可能是一个或者是多个进程。
2.处于饥饿的进程可以是一个就绪进程,而处于死锁的进程必定是阻塞进程。
3. 死锁一定发生了循环等待,而饥饿不一定。这也表明通过资源分配图可以检测死锁存在与否,但却不能检测是否有进程饿死;
- 进程同步、互斥的区别和联系
互斥:并发进程之间竞争使用临界资源,只能让他们逐个使用,是一种竞争关系
同步:并发进程之间协同完成任务,在关键点上等待另一个进程发来消息,以便协同一致,是一种协作关系。
- 什么是银行家算法*
2.2 内存管理银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。
- 内部碎片和外部碎片的区别
内部碎片:已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;
外部碎片:还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。
- 分页和分段有什么区别?
1.目的:页是信息的物理单位,分页是为了实现离散分配方式提高内存利用率;
段是信息的逻辑单位,分段是为了满足用户需要
2.长度:页的大小固定;段的大小不固定
3.地址空间:页的作业地址空间是一维的;段的作业地址空间是二维的
分页:给出地址A,根据页面大小就可以算出页号和页内偏移地址,所以是一维线性。
分段:必须给出段号,根据段表找出此段的起始地址,再根据段内地址进行定位,所以是二维的。
4.碎片:分页有内部碎片,无外部碎片;
分段有外部碎片,无内部碎片
- 什么是虚拟存储器?及其相关页面置换算法
虚拟存储器:基于局部性原理,在程序装入时,将程序的一部分装入内存,而将其余部分留在外存,在程序执行过程中,若程序所访问的信息不在内存,则将内存中不使用的内容换出,将所需要的部分调入内存。系统好像为用户提供了一个比实际内存大得多的存储器。
局部性原理:
1.时间局部性:某条指令一旦执行,不久后该指令可能再次执行。某数据被访问后,不久后该数据可能再次被访问。
2.空间局部性:一旦程序访问了某一存储单元,不久后,其附近的存储单元也会被访问。程序在一段时间内所访问的地址,可能集中在一定范围内。
页面置换算法:
1.最佳置换算法(OPT)
2.先进先出(FIFO):会出现Belady异常
3.最近最久未使用置换算法(LUR):性能较好,需要寄存器和栈的硬件支持
4.时钟置换算法(CLOCK)
Belady异常:
所分配的物理块数增大而页故障数不减反增。
- 什么是抖动?发生抖动的原因
2.3 文件系统刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出内存。
原因:某个进程频繁访问的页面数高于可用的物理页帧数。
- 文件的逻辑结构
1.无结构文件(流式文件)
2.有结构文件(记录式文件)
- 硬链接和软链接的区别
硬链接:多个指针指向一个索引结点,只要还有有一个指针指向索引结点,索引结点就不能删除。
软链接:把共享文件的路径记录下来,根据路径寻找文件。
- 文件的分配方式
1.连续分配
2.链接分配
3.索引分配
- 文件存储空间管理的方法
1.空闲表法
2.空闲链表法
3.位示图法
4.成组链接法
- 磁盘的调度算法
2.4 输入输出(I/O)管理1.先来先服务
2.最短寻找时间优先
3.扫描算法
4.循环扫描算法
- I/O控制方式有哪些?
1.程序直接控制方式:每次读一个字
2.中断驱动方式:每次读一个字,加入中断,使CPU与I/O可以并行
3.DMA方式:每次读数据块,必须连续的读,存入内存也必须连续
4.通道控制方式:实现Cpu、I/O、通道三者并行
- 什么是SPOOLing技术(假脱机技术)
为了缓和CPU的高速性与I/O设备低速性的矛盾。
在磁盘上开辟出两个存储区域:输入井、输出井,暂存数据
- 什么是设备独立性?
3. 计算机组成原理 3.1 绪论用户编程序时使用的设备与实际使用的设备无关
- 计算机系统由哪两部分组成?计算机系统性能取决于什么?
计算机系统是由软件和硬件组成的,衡量一个计算机系统的优劣是根据多个指标综合确定的,有包含硬件部分的功能,也有包含软件部分的。
- 冯诺依曼机器的主要特点?
1.硬件系统由运算器,存储器,控制器,输入输出这五大部件组成
2.指令和数据以二进制形式存储在存储器中,并可按地址访存
3.指令有操作码和地址码
4.整个系统以运算器为中心
5.指令按顺序存在,以按一定顺序执行
- 计算机系统5层层次结构从下到上由哪五层组成?哪些是物理机,哪些是虚拟机?
1.微程序机器层、传统机器语言层、操作系统层、汇编语言层、高级语言层
2.微程序机器和传统机器是物理机,其他是虚拟机。
- 编译程序和解释程序的区别?*
编译程序:一次性将源程序翻译成可执行的目标代码,执行可执行程序文件,翻译与执行是分开的。
解释程序:逐条地取出源程序中的语句,边解释,边执行。
- 主存储器中,什么是MAR,什么是MDR,存储器的最大容量由什么决定?
MAR是地址寄存器,位数对应存储单元的个数
MDR是数据寄存器,位数与存储字长相等
存储器的最大容量由地址寄存器和数据寄存器的位数来决定的
- 什么是机器字长,什么是存储字长,什么是指令字长?
3.2 数据的表示和运行机器字长是CPU执行一次操作的二进制位数,
存储字长是一个存储单元存的最长位数,
指令字长是机器指令中二进制的最长位数
- 并行加法器的原理是什么?
并行加法器由多个全加器组成,其位数与机器的字长相同,各位数据同时运算。
- 常见的存储器的层次结构有哪两种?
1.Cache-主存层次:解决cpu和主存速度不匹配的问题
2.主存-辅存层次:解决存储系统的容量问题
- 存储器按存取方式,可以分成哪几类?哪些属于随机访问存储器,哪些属于串行访问存储器?
1.随机存储器(RAM):顺序存取
2.只读存储器(ROM):只能随机读出,不能写入,信息一旦写入存储器就固定不变。
3.串行访问存储器:包括顺序存储器(SAM)和直接存储器(DAM);
随机存储器和只读存储器属于随机存储器,即存取时间与物理地址无关;
顺序存储器(典型的如磁带)和直接存储器(典型的如磁盘)属于串行存储器,即存取时间与物理地址有关。
- SRAM和DRAM的比较
| SRAM | DRAM | |
|---|---|---|
| 存储信息 | 触发器 | 电容 |
| 破坏性读出 | 非 | 是(需要重启) |
| 需要刷新 | 不要 | 需要 |
| 送行列地址 | 同时送 | 分两次送(地址线复用技术) |
| 运行速度 | 快 | 慢 |
| 主要用途 | 高速缓存cache | 主机内存 |
- 什么是cache?
在计算机存储系统的层次结构中,介于中央处理器和主存储器之间的高速小容量存储器。
作用:利用程序访问的局部性原理,把程序中正在使用的部分放在高速的、容量较小的cache中,使cpu的访存操作大多针对cache进行,从而提高程序的执行速度。
- cache和主存的映射方式*
1.直接映射:主存中的每一块只能装入Cache中的唯一位置。若该位置已有内容,则产生冲突的块被换出。
地址结构: 标记、cache行号、块内地址
2.全相联映射:主存中的每一块可以装入Cache中的任何位置。每行的标记用于该行取自哪一块。
地址结构: 标记、块内地址
3.组相联映射:将Cache空间分成大小相同的组,主存的每一块可以装入一组内的任何位置,即组间采用直接映射,组内采用全相联映射
地址结构: 标记、组号、块内地址
- cache中主存块的替换算法
1.随机算法
2.先进先出算法
3.近期最少使用算法(LRU),为每一个cache行设置一个计数器。
4.最不经常使用算法
- 数据在存储器中存储时,为什么要按照边界对齐?
为了减少访存次数
- 南桥芯片和北桥芯片的作用分别是什么?*
3.4 指令系统(1)南桥芯片(主外):负责I/O总线之间的通信,主要管理中低速外部设备,集成了中断控制器、DMA控制器等部件。
(2)北桥芯片(主内):主要负责CPU与内存、CPU与AGP之间的通信。掌控项目多为高速设备。如:CPU、Host Bus。后期北桥集成了内存控制器、Cache高速控制器。
- 当使用寄存器代替指令字中的地址码字段后,有哪些优点?
1.减少访存次数
2.提高寻址范围
- 什么是形式地址?什么是有效地址?
形式地址:指令的地址码字段通常都不代表操作数的真实地址,成为形式地址,记为A;
有效地址:操作数的真实地址,记为EA,由寻址特征和形式地址共同决定;
- 什么是RISC和CISC,他们的区别和特点
CISC:复杂指令系统计算机
RISC:精简指令系统计算机
| CISC | RISC | |
|---|---|---|
| 指令数目 | 几百个 | 小于100个 |
| 寻址方式 | 复杂 | 简单 |
| 指令周期 | 变化很大 | 大部分单周期 |
| 指令长度 | 变长 | 定长 |
| 程序所需指令数 | 少 | 多 |
| 寄存器数目 | 少 | 多 |
| 是否利于流水线 | 不利于 | 利于 |
- 指令周期分为哪几个周期?
1.取值周期
2.间址周期
3.执行周期
4.中断周期
- 影响流水线的因素有哪些?
3.6 总线1.数据冲突:下条指令会用到当前指令计算出的结果。
解决:把遇到数据冲突的指令及其后续指令都暂停一个到几个时钟周期。
2.资源冲突:硬件资源竞争造成的冲突
3.控制冲突:在执行转移、调用、返回时会改变PC的值,造成断流。
解决:对转移指令进行分支预测。
- 计算机系统中的总线分为哪三类?系统总线又分为哪三类?
1.片内总线
2.系统总线:分为数据总线、地址总线、控制总线
3.通信总线
- 简述下串行接口和并行接口
3.7 I/O1.从发送的数据位数来看,串行通信一次发送一位数据;并行通信一次发送多位数据
2.从传输距离来看,串行通信传输距离远,占用资源少;并行通信传输距离短,占用资源多。
3.从发送速度来看,串行通信发送速度慢,并行通信发送速度快
实际速度:由于并行8位通道之间相互干扰,传输速度会受到限制,而且传输出错后要重发8位数据。而串行没有这种干扰,所以串行接口比并行接口快
- 异常和中断
异常:CPU内部异常引起的意外事件
中断:来自CPU外部、与CPU执行指令无关的事件引起的中断。
- 中断的处理过程
1.关中断
2.保存断点
3.引出中断服务程序:实质是取出中断服务程序的入口地址(即中断向量)并传送给pc
1、2、3步称为中断隐指令,由硬件实现
4.保存现场和屏蔽字:现场信息是指用户可见的工作寄存器的内容
5.开中断
6.执行中断服务程序
7.关中断
8.恢复现场和屏蔽字
9.开中断、中断返回
- 什么是中断向量,和中断向量地址有什么区别?*
中断向量:中断服务程序的入口地址
中断向量地址:中断服务程序的入口地址的地址
- CPU和外设之间数据交换有哪几种?*
(1)程序查询方式。其特点是主机与I/O串行工作。CPU启动I/O后,时刻查询I/O是否准备好,若设备准备就绪,CPU便转入处理I/O与主机间传送信息的程序;若设备未做好准备,则CPU反复查询,“踏步”等待直到I/O准备就绪为止。可见这种方式CPU效率很低。
(2)程序中断方式。其特点是主机与I/O并行工作。CPU启动I/O后,不必时刻查询I/O是否准备好,而是继续执行程序。当I/O准备就绪时,向CPU发中断请求信号,CPU在适当的时候响应I/O的中断请求,暂停现行程序为I/O服务。这种方式消除了“踏步”现象,提高了CPU的效率。
(3)DMA方式。其特点是主机与I/0并行工作,主机与I/O之间有一条直接数据通路。CPU启动I/O后,不必查询I/O是否准备好
(4)通道方式。通道是一个具有特有功能的处理器,CPU把部分权利下放给通道,由它实现对外围设备的统一管理和外围设备与主存之间的数据交换,大大提高了CPU的效率,但它是以花费更多的硬件为代价的。
(5)I/O处理机方式。它是通道方式的进一步发展,CPU将I/O操作及外围设备的管理权全部交给I/O处理机,其实质是多机系统,因而效率有更大提高。
- 什么是DMA?
直接存储器存取
主存和DMA接口之间有一条直接数据通路,不需要经过cpu。I/O与主机之间并行工作,程序和传送并行工作。
- DMA和中断方式的区别?
4. 计算机网络 4.1 计算机体系网络结构1.中断是程序的切换,需要保护和恢复现场。
DMA方式除了预处理和后处理,其他时候不占用cpu资源
2.对中断请求的响应只能发生在每条指令执行完毕时(即指令的执行周期后)。
而对DMA请求的响应可以发生在每个及机器周期结束时,只要cpu不占用总线就可被响应。
3.中断传送过程需要cpu干预;
DMA传送过程不需要cpu干预
4.DMA请求的优先级高于中断请求
5.中断方式具有对异常事件的处理能力,DMA方式仅限于传送数据块的I/O操作。
6.从数据传送来看,中断方式主要靠程序传送,DMA方式靠硬件传送。
- 网络中的三网是指?
电信网、有线电视网、计算机网络
- osi参考模型*
| 层次 | 功能 | 对应的协议数据单元 | 协议 |
|---|---|---|---|
| 应用层 | 包含了用户通常需要的各种各样的协议 | A-报文 | 基于UDP: DHCP(给主机动态分配地址) RIP DNS(端口:53) 基于TCP: BGP(边界网关) FTP(端口:控制21,数据20) SMTP(端口:25) HTTP:80 |
| 表示层 | 关注传递信息的语法和语义 | P-报文 | |
| 会话层 | 允许不同机器上的用户建立会话,通常提供各种服务 | S-报文 | |
| 运输层 | 接收来自上一层的数据 | T-报文 | UDP、TCP |
| 网络层 | 控制子网的运行 | 分组 | IP ICMP(差错报告) OSPF(IP数据包传送) |
| 数据链路层 | 将一个原始的传输设施转变成没有漏检传输错误的线路 | 帧 | ARP(IP=>MAC地址) 局域网: CSMA/CD(带冲突检测的载波侦听多路访问协议) 广域网: PPP HDLC |
| 物理层 | 传输原始位流 | 位流(bits) |
点对点:网络层、数据链路层、物理层;
端到端:其余层
- TCP/IP参考模型,为什么没有物理层
至于为什么没有物理层,这要从二者的区别说起,主要原因有一下两点:
① OSI虽然比较完善,但是它非常复杂,很难实现,而TCP/IP模型删除了很多不必要的层次,达到简化了的作用;
② 主推OSI的人是各种专家,模型出来后却没有产品所以无法把握市场,而TCP/IP是几大IT寡头共同推出,直接占领了市场。即TCP/IP模型出来时,OSI和很多通讯方面已经定义好底层的协议,不适合也没必要再改,同时TCP/IP协议为了向后兼容未来的设备和开放性,故留了个模棱两可的网际接口层。
- osi模型和TCP/IP模型的区别
1.osi在网络层支持无连接和面向连接的通信,但在传输层仅有面向连接的通信;
tcp/ip在网际层仅有无连接的通信,但在传输层支持无连接和面向连接的通信。
- 组成网络协议的三个要素
语义:对构成协议元素的解释
语法:数据与控制信息的结构和格式
同步:规定事件的执行顺序
- 端到端通信和点对点通信的区别
点到点:直接相连的结点之间的通信
端到端:建立在点对点通信的基础上,由一段段的点到点通信信道构成。
端:是指用户程序的端口
- 网络各层的设备是什么?*
物理层:集线器、中继器
数据链路层:交换机、网桥
网络层:路由器
- 集线器、交换机、路由器三者的区别*
| 设备 | 能否隔离冲突域 | 能否隔离广播域 |
|---|---|---|
| 集线器 | 不能 | 不能 |
| 交换机 | 能 | 不能 |
| 路由器 | 能 | 能 |
- 计网中有哪些地址?*
4.2 物理层、数据链路层(1)IP(IPV4、IPV6)地址
(2)MAC地址
- 简述下电路交换、报文交换与分组交换的区别
电路交换:面向连接,适合传送数据量大且传送时间大于呼叫时间
报文交换:无须建立连接,报文不固定长度
分组交换:同报文交换一样,采用存储转发,适合端到端,由多段链路组成的通路
- 简述下流量控制的三种协议
1.停等协议:每发送一个分组就停止发送,等待对方的确认,收到确认后就再发送下一个分组。
若发送方一段时间后未收到确认,则认为刚才发送的分组丢失,就重传;
另一种情况,数据帧正确而确认帧被破坏,发送方收不到确认帧会重传,则接收方收到同样的数据帧后丢弃该重传分组,并发送确认帧。
2.后退N帧协议:发送方即连续发送帧,当接收方检测到失序的信息帧后,要求发送方重发最后一个被正确接受帧后的所有未被确认的帧。
捎带确认:对某一数据帧的确认表明该数据帧和此前所有的数据帧均已正确无误地收到。
3.选择重传ARQ协议:接收方先收下发送序号不连续但仍处于发送窗口的帧,等到所缺序号的数据帧收到后再一并送交主机。
- 数据链路层的三个基本问题和解决办法
1.组装成帧:就是在一段数据的前后分别添加首部和尾部,这样就构成了一个帧。首部和尾部的控制信息用来确定帧的界限。
2.透明传输:不管传输数据是什么样的比特组合,都应当能在链路上传输。
当
问题:如果数据中的某个字符的二进制代码恰好和SOH或EOT这种控制字符一样,数据链路层就会错误地找到帧的边界,把部分帧收下。
解决方法:
字符填充:发送方在数据段中出现EOT或者SOH字符,发送方在每个EOT或SOH字符前再插入一个ESC字符,若转义字符ESC也出现在数据中,也在ESC字符前插入一个转义字符。
3.差错检测:
传输差错:可分为两大类,一类就是最基本的比特差错,另一类就是收到的帧并没有出现比特错误,但却出现了帧丢失、帧重复或帧失序。
比特差错:就是比特在传输过程中可能会产生差错,即1可能会变成0,0可能会变成1。
解决方法:
在数据链路层使用循环冗余检验CRC检验,能够实现无比特差错的传输,但这还不是可靠传输。
交换机能不能用在大型的网络中?
答:不能
信道划分介质访问控制
目的:把时域和频域资源合理分配给网络上的设备
1.频分多路复用
2.时分多路复用
3.波分多路复用
4.码分多路复用
- 随机访问介质访问控制
目的:解决用户同时发送信息的帧的冲突
1.ALOHA协议:不侦听信道,冲突后让各站等待随机时间,再进行重传
2.时隙ALOHA协议:所有各站时间上同步起来,把时间划分为一段段登场的时隙,规定只能在每个时隙开始时才能发送一个帧
3.CSMA协议:发送前侦听信道,若信道空闲再发送
(1)1-坚持CSMA:侦听到信道忙时一直侦听,若空闲立即发送
(2)非坚持CSMA:若信道空闲则发送,若忙放弃侦听,等待随机时间重复上述过程
(3)p-坚持CSMA:信道忙,持续侦听,信道空闲,以概率p发送,概率1-p推迟到下一个时隙
4.CSMA/CD协议:发送前侦听,空闲则发送,在发送数据同时侦听信道。
应用于半双工网络,有线局域网。
5.CSMA/CA:应用于无线局域网,碰撞避免
- 已经有交换机了,还要用CSMA/CD协议吗?
4.3 网络层不需要,交换机是全双工环境,CSMA/CD应用于半双工
- 路由协议有哪些?
域内:
1.RIP协议(路由信息协议):
基于距离矢量算法。距离矢量协议,最多15跳,用UDP传送数据,仅和相邻路由器交换信息,且交换的是整个路由表,是应用层协议
2.OSPF协议(开放最短路由协议):
基于链路状态算法。链路状态协议,基于IP,向自治域中所有路由器发送信息,且发送的是链路状态表,是网络层协议
域间:
3.BGP协议:
不同自治系统的路由器之间交换路由信息,是应用层协议,用TCP传送数据
- IPv4和IPv6的位数
IPv4:32位
IPv6:128位
- 路由器的工作原理
路由器先检查源主机与目标主机是否连接在同一个网络上。
若在同一个网络上:直接交付而无需通过路由器
不在同一个网络上:路由器按照转发表将指出的路由将数据报转发给下一个路由器。
- 子网掩码的作用
子网掩码是一种用来指明一个IP地址所标示的主机处于哪个子网中。
子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码是一个32位地址,是与IP地址结合使用的一种技术。
它的主要作用有两个:
一是用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
二是用于将一个大的IP网络划分为若干小的子网络。(将某个IP地址划分成网络地址和主机地址两部分)
- 都知道Ipv4的地址是不够用的,有什么解决方法?
1.修改子网掩码
2.增加路由器,可以通过路由器后面再接路由器来分成多个网段
3.划分vlan,设置虚拟局域网“VLAN”,将局域网里面的电脑分成多个虚拟的局域网,
4.从Ipv4过渡到Ipv6
- 什么是mac地址?为什么要有mac地址
是硬件地址,48位。
mac地址用于标识一个帧从哪个接口出发,到达哪个物理相连的其他接口。
- mac地址和ip地址如何互相转换?
ip=>mac:
ARP协议,主机A向本局域网上的主机B发送IP数据报,
1.先在ARP高速缓存中查看有无主机B的IP地址,有则查出mac地址,若无则广播ARP请求分组,使同一局域网的主机收到ARP请求
2.主机B收到ARP请求,向主机A发出响应ARP分组,分组中包含主机B的IP与mac地址的映射关系,主机A在收到后将此映射写入ARP缓存。
mac=>ip:RARP协议
- 既然主机之间的连接最终通过MAC地址连接的为什么还要IP地址?
(1)ARP用来寻找同一个局域网中的主机,同一个局域网的IP地址的网络号相同。每个主机的IP地址并不固定,MAC地址固定,最终归结于根据目标主机的MAC地址寻找。
(2)不同局域网的主机通信时,通过IP地址的网络号可以减少查找的次数,快速找到目标主机。
- 路由表中有哪些字段?路由器内部有什么协议?用了什么算法?
标准的路由表有4个项目:目的网络IP地址、子网掩码、下一跳IP地址、接口。
路由器内部协议有
- 网络层的设备有哪些?
路由器、三层交换机、防火墙
- 为什么网络地址用IP地址而不用Mac地址?
4.4 传输层(1)IP地址是网络层使用的地址,其分配根据的是网络的拓朴结构,它能唯一地确定一台主机在网络中的位置,另外它有一种办法来区分不同的网络;MAC地址是数据链路层使用的地址,它也能唯一地确定一台主机在网络中的位置。但是它没有一种办法很好地区分不同的网络。
(2)将IP地址和MAC地址分离,使得网络地址的管理更加的灵活,使得逻辑地址和物理地址充分解耦。如果一个以太网卡坏了,可以被更换,而无须取得一个新的IP地址。如果一个IP主机从一个网络移到另一个网络,可以给它一个新的IP地址,而无须换一个新的网卡。
(3)数据包在这些节点之间的移动都是根据MAC地址进行的,由ARP负责将IP地址映射到MAC地址。
(4)全世界存在着各种各样的网络,他们使用不同的硬件地址,要让这些网络能够互相通信就需要非常复杂的硬件转换工作,让用户和用户主机来完成这项工作几乎不可能。但是,统一的IP地址就可以将这个复杂的问题完全解决。就像联通一个网络一样方便,地址转换由ARP自动进行,十分方便。
- UDP和TCP的区别*
| 协议 | UDP | TCP |
|---|---|---|
| 是否面向连接 | 不面向连接 | 面向连接 |
| 传输可靠性 | 不可靠 | 可靠 |
| 应用场合 | 大量数据 | 少量数据 |
| 传输速度 | 快 | 慢 |
- TCP如何实现可靠传输
1.序号
2.确认:Tcp采用累计确认
3.重传:超时和冗余ACK会导致TCP对报文段重传
- TCP如何实现拥塞控制
网络拥塞的处理方法:
拥塞判断:发送方未按时收到确认
无论在慢开始还是在拥塞避免阶段,当发送方判断网络出现拥塞时,就要把门限值设置为此时发送方的拥塞窗口值的一半,再把拥塞窗口值设置为1,执行慢开始算法。
拥塞控制的4种算法:
1.慢开始:在TCP开始发送报文段时将拥塞窗口设置为1,每经过一个传输轮次,拥塞窗口加倍
当拥塞窗口增大到门限值时,采用拥塞避免算法
2.拥塞避免:,每经过一个传输轮次,拥塞窗口+1
快重传和快恢复是对慢开始和拥塞避免算法的改进
3.快重传:当发送方连续收到3个冗余ACK时,直接重传对方尚未收到的报文段,不必等待那个报文段设置的重传计时器超时。
4.快恢复:当发送方连续收到3个冗余ACK时,把慢开始门限设置为此时发送方拥塞窗口的一半,并且把拥塞窗口值改为门限值改变后的数值,然后开始执行拥塞避免算法
- 简述TCP的三次握手*
1.第一次,客户端发送连接请求到服务端。
2.第二次,服务端收到连接请求后,若同意建立连接,则发送确认。
3.第三次,客户端收到确认报文段后,还要向服务端给出确认。
补充:
服务端的资源是在完成第二次握手时分配的,客户端的资源是完成第三次握手时分配的。
- 简述下TCP的四次挥手*
4.5 应用层1.第一次,客户端打算关闭连接时,向服务端发送连接释放报文段,并停止发送数据,主动关闭TCP连接。
2.第二次,服务端收到连接释放报文段后,发出确认报文段。
3.第三次,若服务器已经没有要向客户端发送的数据,就向客户端发送来连接释放报文段。
4.第四次,客户端收到连接释放报文段后,发出确认报文段。此时TCP连接还未释放,必须经过时间等待计时器设置的时间2MSL后,客户端才进入连接关闭状态。
- http协议中包括什么请求
GET:对服务器资源的简单请求
POST:用于发送包含用户提交数据的请求
HEAD:类似于GET请求,不过返回的响应中没有具体内容,用于获取报头
PUT:传说中请求文档的一个版本
DELETE:发出一个删除指定文档的请求
TRACE:发送一个请求副本,以跟踪其处理进程
OPTIONS:返回所有可用的方法,检查服务器支持哪些方法
CONNECT:用于ssl隧道的基于代理的请求
- get和post的区别
从原理性看:
根据HTTP规范,GET用于信息获取,而且应该是安全和幂等的
根据HTTP规范,POST请求表示可能修改服务器上资源的请求
从表面上看:
GET请求的数据会附在URL后面,POST的数据放在HTTP包体
POST安全性比GET安全性高
- http与https的区别
最主要的区别还是在于安全性。
1.http是超文本传输协议,信息是明文传输的,而https则是加密传输协议
2.http和https的传输端口也不一样,一个是80,一个是443
- 在浏览器中输入网址之后执行会发生什么?
5. 数据库 5.1 数据库输入网址—DNS域名解析—建立TCP连接—发送HTTP请求—服务器处理并返回结果—浏览器生成页面。
(1)域名解析:先查找本地host文件,如果有则跳过查询直接访问对应网站的IP地址,如果无则由本地dns服务器向根dns服务器发送查询请求,并逐级向下最后查询到具体的网址IP。
(2)建立TCP连接:三次握手(客户端向服务器发送带有syn标识的数据包、服务端返回ack/syn数据包、客户端发送ack数据包)确保建立连接。
(3)发送http请求:发送请求报文(报文首部、空行、主体),报文首部包含请求行和首部信息,十分重要。
(4)服务器处理:如果是首次访问则直接返回页面资源,非首次则判断缓存文件是否需要更新,返回响应报文和相关文件。
(5)浏览器生成页面:先解析html、渲染布局。
- 什么是索引?数据库中索引的作用是什么?
索引是数据库中专门用于帮助用户快速查找数据的一种数据结构。类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置,然后直接获取,加快查找速度。
索引可以帮助用户快速地查找数据,利用索引可以快速访问数据库表中的特定信息。
- 数据库中有几种索引?
1.顺序文件的索引:针对表中属性值升序或者降序的索引
2.B+索引
3.散列索引:按照对应的散列函数进行索引
4.位图索引:用位向量记录索引的值,每一个位向量对应一个索引的值
- 索引是越多越好吗?
更多的索引意味着更多的空间,更高的维护成本
1.合理地建立索引能加速数据读取效率,不合理的索引反而会拖慢数据库的响应速度。
2.索引越多,更新数据的速度越慢。
- 超键、候选键、主键、外键分别是什么?*
超键:在关系中能唯一标识元组的组合属性
候选键(candidate key): 不含有多余属性的超键称为候选键。也就是在候选键中,若再删除属性,就不是键了!
主键(primary key): 用户选作元组标识的一个候选键程序主键
外键(foreign key):如果关系模式R中属性K是其它模式的主键,那么k在模式R中称为外键
例:学生信息(学号 身份证号 性别 年龄 身高 体重 宿舍号)和 宿舍信息(宿舍号 楼号)
超键:只要含有“学号”或者“身份证号”两个属性的集合就叫超键,例如R1(学号 性别)、R2(身份证号 身高)、R3(学号 身份证号)等等都可以称为超键!
候选键:不含有多余的属性的超键,比如(学号)、(身份证号)都是候选键,又比如R1中学号这一个属性就可以唯一标识元组了,而有没有性别这一属性对是否唯一标识元组没有任何的影响!
主键:就是用户从很多候选键选出来的一个键就是主键,比如你要求学号是主键,那么身份证号就不可以是主键了!
外键:宿舍号就是学生信息表的外键
- 关于范式*
第一范式(1NF):数据库表中的字段都是不可再分的。
确保每列保持原子性。
第二范式(2NF):在1NF的基础上,所有非主属性都完全函数依赖于R的任一候选键
确保表中的每列都和主键相关。
第三范式(3NF):在2NF的基础上,数据库表中每一个非关键字段都不传递依赖于任何候选键。
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。
补充:
函数依赖:若对X的每一个具体值,Y都只有一个具体值与之对应,则称,Y依赖于X,记作X->Y
学生信息表R(学号,身份证号,姓名),学号取值唯一,在R关系中,(学号,身份证号)->(姓名),(学号)->(姓名),(身份证号)->(姓名),姓名部分函数依赖于(学号,身份证号);
学生信息表R(学号,班级,姓名),不同的班级中学号有相同的,班级内学号不同,在R关系中,(学号,身份证号)->(姓名),(学号)->(姓名)不成立,(班级)->(姓名)不成立,姓名完全函数依赖于(学号,身份证号);
传递函数依赖:在关系R中,X、Y、Z是R的三个不同的属性或属性组,如果X->Y,Y->Z,但Y!->X且Y不是X的子集,则称Z传递依赖于X
- 什么是触发器
用户在关系表上的一类由事件驱动的特殊过程。对数据库的增删改查会激活响应的触发器。触发器经常用于加强数据的完整性约束和业务规则等。
- 关于drop,delete,turncate的操作*
1.drop是直接删除这张表。
2.delete是删除表中部分或者全部的数据,并且可以通过commit提交或者rollback回滚。
3.turncate是保留表并直接删除此表中所有的数据。
- 什么是基本表?什么是视图?它们之间的区别是什么?*
基本表是本身独立存在的表,在SQL中一个关系就对应一个表。一个(或多个)基本表对应一个存储文件,一个表可以带若干索引,索引也存放在存储文件中。
视图是从一个或几个基本表(或视图)导出的表。它与基本表不同。视图就像一个窗口,透过它可以看到数据库中自己感兴趣的数据及其变化,它可以和基本表一样被查询、被删除。也可以在一个视图之上再定义新的视图,但对视图的更新(增、删、改)操作则有一定的限制。
视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。
- 是什么E-R图?E-R模型向关系模型的转换规则是什么?E-R图的设计原则是什么?
- 数据库中的C/S和B/S的区别是什么
cs:客户端/服务器:
基于企业内部网络的应用系统。
不依赖企业外网环境。只适用于局域网。
优点是能充分发挥客户端pc的处理能力,客户端响应速度快
缺点是维护成本高
bs:浏览器/服务器:
随Internet技术的兴起,对cs模式应用的扩展。
运行维护比较简便,
缺点是对企业外网环境依赖太强。
- varchar2和char的区别
其实就是关于长度的区别,varchar是长度可变的,而char的长度是固定的
- 关系模型的完整性约束有哪些?
实体完整性:关系数据库中的每个元组即一行数据的主键不能为空值。
参照完整性:外键必须和对应表的属性一一对应或者为空。
用户定义完整性:即用户自己定义的一些约束条件。
- 数据库中dba是什么?
数据库管理员(Database Administrator,简称DBA),是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于运维工程师的一个分支,主要负责业务数据库从设计、测试到部署交付的全生命周期管理。
- 数据库的基本操作有哪些?
5.2 数据库的并发操作增删改查
insert、delete、update、select
- 什么是事务?什么是事务的ACID特性
事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
事务是恢复和并发控制的基本单位
ACID特性:
1.原子性:要么执行,要么不执行。
2.隔离性:一个事务的执行不能被其他事务干扰。
3.一致性:事务执行的结果必须是使数据库从一个一致性状态变
到另一个一致性状态。
4.持久性:一旦事务提交,对系统进行的修改就是永久性的。
- 在SQL中,定义事务的一般有哪些?
(1)BEGIN TRANSACTION /标记一个显式本地事务的起始点/
(2)COMMIT /提交事务/
(3)ROLLBACK /回滚事务/
- 数据库的并发操作带来的问题
脏读:事务T1更新了数据R,然后事务T2读取了更新的数据R,但是事务T1由于某些原因被撤销,修改无效,R重新变成了更新前的,所以T2读取到的数据和在数据库中的数据不一样,这就是脏读
不可重复读:事务T1读取了数据R,然后事务T2也读取了数据R,并且将其更新,之后T1再去读取的时候,会发现R和他之前的数据不一样,这就是不可重读
丢失更新:事务T1和T2同时对数据R进行了修改,但是T1把T2或者T2把T1所修改的结果覆盖掉了,导致数据的丢失,这就是丢失更新
幻像读:事务T1按一定条件从数据库中读取某些数据记录后未提交查询结果,事务T2删除了其中部分记录,事务T1再次按相同条件读取数据时,发现某些记录神秘地消失了;
- 事务的隔离级别
怎么解决并发问题?
1.封锁(Locking)
锁的基本类型:排它锁(Exclusive Locks,简记为X锁)又叫写锁
若事务T对数据对象A加上X锁,则只允许T读取和修改A,其它任何事务都 不能再对A加任何类型的锁,直到T释放A上的锁保证其他事务在T释放A上 的锁之前不能再读取和修改A共享锁(Share Locks,简记为S锁)又叫读锁
若事务T对数据对象A加上S锁,则事务T可以读A,但不能修改A,其它事务 只能再对A加S锁,而不能加X锁,直到T释放A上的S锁,保证其他事务可 以读A,但在T释放A上的S锁之前,不能对A做任何修改
2.时间戳
3.乐观控制法
4.多版本并发控制
- 封锁协议
6. 软件工程一级封锁协议:事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。一级封锁协议可防止丢失修改,并保证事务T是可恢复的,它不能保证可重复读和不读“脏”数据。
二级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,读完 后即可释S锁。
二级封锁协议可以防止丢失修改和读“脏”数据
三级封锁协议:一级封锁协议加上事务T在读取数据R之前必须先对其加S锁,直到 事务结束才释放。
三级封锁协议可防止丢失修改、读脏数据和不可重复读。
- 程序和软件的区别
软件,无形的,没有物理形态,只能通过运行状况来了解功能、特性、和质量;软件渗透了大量的脑力劳动,人的逻辑思维、智能活动和技术水平是软件产品的关键。
程序,以某些程序设计语言编写,运行于某种目标结构体系上。
软件,运行时,能够提供所要求功能和性能的指令或计算机程序集合;程序能够满意地处理信息的数据结构。
程序,识别和执行的指令,满足人们某种需求的信息化工具。
- 软件工程生命周期的划分
三个时期:
软件定义:
软件开发:
软件维护:八个阶段:
目的和实质:
可行性研究:
需求分析:
概要设计:
详细设计:
编码和单元测试:
综合测试:
集成测试:
验收测试:
软件维护:
- 什么是模块间的耦合度?
软件工程中对象之间的耦合度就是对象之间的依赖性。
耦合程度由低到高分为6种:
①无直接耦合(不传递任何消息)。
②数据耦合(传递的是值)。
③标记耦合(传递的是数据结构)。
④控制耦合(传递的是控制变量,例如开关、标志等)。
⑤外部耦合(传递的是I/O环境)
⑥公共耦合(传递的是在公共数据环境中的数据)。
⑦内容耦合(传递的是一个模块的内部数据,往往出现在汇编语言中)。
- 简述一下瀑布模型
特点:自顶向下,逐层细化
从上一项活动中接受该项活动的工作成果(工作产品),作为输入。
给出该项活动的工作成果,作为输出传给下一项活动
对该项活动实施的工作进行评审。若其工作得到确认,则继续下一项活动。
优点:强度开发的阶段性
缺点:瀑布模型过于依赖早期进行的唯一一次需求调查,不能适应需求的变化;
- 简述一下增量模型
从给定需求开始,通过构造一系列中间版本来实施开发活动,依次类推,直到系统完成。
- 简述一下喷泉模型
该模型认为软件开发过程自下而上周期的各阶段是相互重叠和多次反复的。各个开发阶段没有特定的次序要求,并且可以交互进行,可以在某个开发阶段中随时补充其他任何开发阶段中的遗漏。
- 系统结构描述
HIPO图:由一张HC图+IPO图组成
HC图:(层次图)。用于表示软件的层次结构。
IPO图:用来描述HC图中的每一个模块,由输入、处理和输出三个框组成。
- 什么是数据流图?
数据流图(DFD):
是软件系统逻辑模型的一种图形表示,是从数据传递和加工的角度,以图形的方式刻画数据流从输入到输出的移动变换过程的工具。
- 简述一下黑盒测试和白盒测试
白盒测试:(结构测试)测试者对被测试程序的内部结构是清楚的,从程序的逻辑结构入手按照一定的原则来设计测试用例,设定测试数据。
黑盒测试:(功能测试)测试者把被测试程序看成一个黑盒,完全用不着关心程序的内部结构,设计测试用例时,仅以程序的外部功能为根据,一方面检验程序能否完成一切应做的事情,另一方面要考察它能否拒绝一切不应该做的事情。
- 什么是软件危机?产生原因是什么?
软件开发技术的进步未能满足发展的要求。在软件开发中遇到的问题找不到解决的办法,问题积累起来,形态尖锐的矛盾,导致了软件危机。
产生原因:
⑴ 软件规模越来越大,结构越来越复杂。
⑵ 软件开发管理困难而复杂。
⑶ 软件包开发费用不断增加。
⑷ 软件开发技术落后。
⑸ 生产方式落后,仍采用手工方式。
⑹ 开发工具落后,生产率提高缓慢。
- 什么是软件工程专业?
就是利用管理和技术的方法来研究更好对软件开发和维护的一门学科
- 什么是软件过程
7. 编译原理完成高质量的软件开发过程当中的一系列操作
- 编译的过程分为哪些阶段,其中哪几个阶段必不可少*
8. 其他问题1.词法分析(lexical analysis or scanning):自动分词,词性标注。
从左到右扫描将一个一个字符读入源程序,对构成源程序的字符流进行扫描和分解,从而识别一个单词。
2.语法分析(syntax analysis):在词法分析的基础上,将单词分解成各类语法词语,并表示成"语法树"。判断由词构成的短语的排列顺序是否符合对应编程语言的语法。
语法分析特点:
1.每一种“高级语言”都有自己的语法规则
2.每一种“高级语言”的编译(解释)程序都将一定将他的语法规则内嵌在其中。
3.语义分析(semantic analysis):按照语法树的层次关系和先后顺序,进行类型审查,审查每个算法是否符合语言规范,不符合时应报告错误。(类型审查,作用范围检查)类型分析如,java语言中,public,private,protected的区别
特点:分为静态语义分析和动态语义分析,并且静态语义分析可以在编译时被实现,而动态的则不可以。
4.中间代码生成:在语法和语义分析完成后,将源程序变换成一种“内部表示形式”,该代码是一种简单的记号系统,三元组或者四元组。
5.代码优化:对中间代码进行变换,使代码更加高效。
6.目标代码生成:将中间代码变换成特定机器上的绝对指令或者可重定位的汇编指令代码。主要与硬件系统和指令含义有关。
- static的特点*
1.随着类的加载而加载
static修饰的变量和方法都会放在方法区中静态区,是属于类的。
2.静态变量属于类不属于对象
对象也可以使用静态变量
当没有对象时可以直接用类来调用静态变量
3.被类的所有对象共享
静态的内容存在于方法区的静态区
- 讲一下java python C C++的区别*
python比较容易学习,语法很简单,融入了很多现代编程语言的特性。python的库非常丰富,可以迅速地开发程序,无论是网站还是小游戏都非常方便。不过,python的脚本的运行效率较低,不适合对运行效率要求较高的程序。
Java的语法比较规则,采用严格的面向对象编程方法,同时有很多大型的开发框架,比较适合企业级应用。Java的学习曲线较长,不仅要学习语言相关的特性,还要面向对象的软件构造方法,在此之后要学习一些框架的使用方法。
C++不仅是C和java特点的结合。实际上C++是多范式编程语言。它不仅支持传统的面向过程编程,也支持面向对象编程,最初C++发明的时候就叫做C with class (带类的C),随着时间推移,C++又接受了泛形编程的思想,像STL库就是一个例子。C++的语法风格不一而同,大部分人在写C++的时候还是当作带类的C来使用,其实C++可以写出像python一样现代的风格。C++运行效率较高,同时能够比较容易地建立大型软件,适合对效率要求高的软件,比如机器学习中的神经网络,大型游戏编程等等。C++的内容非常复杂,同时语言经过了几十年的演化,所以学习起来难度较大,开发效率较低。
C是几种语言中最古老的。C是C++的子集。C的最初出现是为了代替运行效率高但是开发效率低下的汇编语言。C语言现在多应用于操作系统编程,或者驱动开发。比如著名的Linux系统就是使用C语言开发的。C++也可以开发操作系统但是太过于笨重。像python 或者java这样的语言不适合这样低级的开发。
- java的三个特征,继承多态是什么意思
封装、继承、多态
继承就是保持已有类的特性而构造新类的过程。继承后,子类能够利用父类中定义的变量和方法,就像它们属于子类本身一样。
多态就是使用父类类型的引用指向子类的对象
该引用只能调用父类中定义的方法和变量
如果子类中重写(覆盖)了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法
变量不能被重写(覆盖),重写只针对方法,如果在子类中重写了父类的变量,编译时会报错
public class file {
public long size;
public String name;
public void info()
{
System.out.println("name : " + name + " size : " + size);
}
}
public class vediofile extends file{
public int duration;
public void play()
{
System.out.println("播放" + this.name);
}
public void stop()
{
System.out.println("停止" + this.name);
}
@Override
public void info() {
// TODO Auto-generated method stub
super.info();
System.out.println("time : " + duration);
}
}
public class HelloWorld {
public static void main(String[] args) {
vediofile v = new vediofile();
v.size = 20000;
v.name = "abc.mp4";
v.duration = 70;
file f = v;
f.info(); //调用的子类的info
}
}
- java和C++的区别
(1)JAVA中没有显式的指针,但是C++中有
(2)JAVA只能支持单继承,但是C++支持多继承(一个类可以继承多个类)
(3)JAVA中有自动的垃圾回收机制,用完一个内存之后无需自己释放,但是C++需要自己delete或者free,所以可能出现内存泄漏



