一、数据库部分

数据库绪论
1、简述三层模式、两级映射,分别有什么作用?
模式(逻辑模式):是数据库中全体数据的逻辑结构和特征的描述,是数据库系统模式结构的中间层,即不涉及数据的物理存储细节,也与具体应用程序开发工具语言无关。
外模式(用户模式):是用户能看见和使用的局部数据的逻辑结构和特征描述,是与某一应用有关的数据的逻辑表示,是模式的子集,一个数据库可以有多个外模式。
内模式(存储模式):数据物理结构和存储方式的描述,是数据在数据库内部的表示方式,如存储方式是按照某个属性升序存储,什么索引等。
外模式模式映像:当模式发生改变,数据库管理员对外模式模式映像作相应改变,可使外模式不变,从而应用程序不用修改。保证数据与程序的逻辑独立性。
模式内模式映像:当数据库的存储结构改变了,由数据库管理员对模式内模式映像作相应改变,可以保持模式不变,从而应用程序也不必改变,保证了数据与程序的物理独立性。
三级模式使用户能逻辑地抽象地处理数据而不关心数据在计算机内具体表示方式与存储方式,两级映像保证了数据库系统中的数据有较高的逻辑独立性和物理独立性。

2、说出至少三种数据库类型(层次,网状,关系)并简要解释了一下
层次模型:用树形结构来表示各类实体以及实体间的联系,有且只有一个节点没有双亲节点(根节点),其他的都有且只有一个双亲节点。只能直接表示的是一对多联系。
优点:效率高结构清晰,性能优于关系数据库,不低于网状。
缺点:现实世界很多联系都不是层次的,如节点间多对多联系,还有一个节点具有多个双亲的情况都不好表示。

网状模型:对于非层次关系的联系,用层次表示非树形结构是很不直接的,网状模型可以很好的表示,它允许有一个以上的节点没有双亲,一个节点也可以有多个双亲,可以更直接地描述现实世界。
优点:更直接描述现实世界,性能也较好,存取效率也较高。
缺点:结构比较复杂不利于掌握,用户编程还得了解系统结构细节,加重了编程的负担。

关系模型:通常来看关系就是一张规范二维表,实体还是实体间的联系都用关系来表示,对数据的检索和更新结果也是关系。
优点:概念单一,用户易懂易用,而且存取路径是对用户透明的,从而有更高的数据独立性和安全性,也简化程序员的工作。
缺点:查询效率往往不如格式化数据模型,为了提高性能,增加开发DBMS难度。

关系数据库
3、简述关系与关系模式的区别。
关系实质是一张二维表,关系模式是对关系的描述,关系是关系模式在某一时刻的状态或内容。
关系模式是静态的、稳定的,而关系是动态的,随时间不断变化的,因为关系操作不断更新数据库中的数据。
通俗的说:关系是一张二维表,关系模式是表格的描述(表头),关系名是表名,元组是一行,属性是列,分量是一条记录中的一个列值。

4、什么是关系数据库?关系和二维表有什么区别?
关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据。
在关系模型中,数据结构表示为一个二维表,一个关系就是一个二维表(但不是任意一个二维表都能表示一个关系。表中的第一行通常称为属性名,表中的每一个元组和属性都是不可再分的,且元组的次序是无关紧要的。

5、关系的完整性(实体完整性、参照完整性、用户自定义)和数据库主键的约束性
实体完整性:关系的主码不能取空值,如果主码由若干属性组成都不能为空。实体以主码作为唯一性标识。
参照完整性:一个关系中的外码,或者取空值(若属性组全为空),或者等于它参照的那个关系的主码值。
用户自定义完整性:针对具体关系数据库的约束。

数据库语言SQL
6、什么是DDL、DML、DCL?(数据库语言有哪几种?)
数据定义语言(DDL):Create、Drop、Alter
数据操纵语言(DML):Insert、Update、Delete
数据控制语言(DCL):Grant、Revoke
数据查询语言:Select

7、什么是视图,有什么作用?在数据库哪层?
视图:是从一个或几个基本表导出的表,是一个虚表,数据库只存放视图的定义,不存放视图对应的数据,数据仍放在原来的基本表,基本表数据改变,通过视图查询也改变了,

数据库设计
8、简述数据库设计的几个阶段
需求分析:详细调查现实世界要处理的对象,充分了解各种需求,在此基础确定新系统的功能。
概念结构设计:经常采用自顶向下需求分析,自底向上概念结构设计。对需求分析收集到的数据进行分类组织形成实体、实体的属性,确定实体之间联系,设计分E-R图。逐一设计分E-R图,最后将所有分E-R图综合成一个系统的E-R图。
逻辑结构设计:一般来讲把E-R图向关系模型转换,一个实体型转换为一个关系模式。一个一对一联系可以独立也可以和任意一端合并,一个一对多联系可以独立也可以和N端对应的关系模式合并,一个多对多联系独立转换为一个关系模式。对数据模型规范化,还根据具体需求设计相应的视图。
数据库物理设计:关系模式存取方法的选择,比如索引、聚簇、哈希等存储方式。还应该确定数据库的存取结构,目前许多计算机有多个磁盘或磁盘阵列,因此可以将表和索引放在不同的磁盘上,在查询时磁盘驱动器并行工作,可以提高物理IO读写效率,也可以将比较大的表放在两个磁盘上,以加快存取速度。
数据库的实施与维护:比如备份与恢复等待。

9、什么是E-R图
E-R图:实体-联系图,在概念结构设计中,对需求分析收集到的数据进行分类组织,形成实体的属性,确定实体之间联系,设计E-R图。

10、分别解释1NF、2NF、3NF、BCNF、4NF
范式:关系数据库中的关系是要满足一定要求的,满足不同程度的要求的为不同范式。
规范化:一个低一级范式关系模式通过模式分解可以转化为若干个高一级范式的关系模式的集合。
1NF:满足最低要求的叫第一范式,每一个分量必须是一个不可分的数据项。
2NF:消除关系中的部分函数依赖就称为第二范式,部分函数依赖就是非主属性不完全依赖于码。
3NF:每一个非主属性既不部分依赖于码,也不传递依赖于码。
BCND:所有非主属性对每一个码都是完全函数依赖,没有任何属性完全依赖于非码的任何属性,就是除了码外一定不能有决定因素。

数据库并发控制
11、什么是事物,并发控制是保证事物的?
事物:是一系列的数据操作,这些操作要么全不做,要么全做,不可分割。运行过程中发生某种故障不能继续执行,全部回滚到开始状态。
并发控制中多个用户存取数据库时候可能会产生多个事物同时存取同一个数据的情况,不加控制就会破坏事物的一致性,为了保证事物的一致性所以进行并发控制。

12、ACID(事物的四个性质)
A原子性:要么都做,要么都不做。
C一致性:如果运行中发生故障,必须回滚。不能让数据不一致。比如两人转钱,一半坏了,不一致俩人都没有钱。
I隔离性:一个事物不能被其他事物干扰。
D持续性:事物一旦提交,他对数据库的改变就应该是永久的。接下来的操作和故障不应该对刚才结果有任何影响。

13、数据库中锁有什么作用?什么是只读锁、什么是只写锁?
一个事物对数据加锁可以保证事物的四个特性,加锁后其他事物不能更新此数据对象,不会产生数据不一致性。
写锁(排他锁/ X锁):加写锁其他事物不能在对这个数据加任何类型锁,释放之前不能读取和修改。
读锁(共享锁/ S锁):事物对数据加读锁,其他事物可以读但不可以修改,可以加读锁不能加写锁。

14、什么是触发器,有什么作用?
用户定义在关系表上的一类由事件驱动的特殊过程,一旦定义了,用户对表的增、删、改操作均有数据库系统自动激活相应触发器
触发器可以分为语句触发器和行级触发器,触发器动作体是一个匿名PL/SQL过程块,语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。行触发器用户可以用new和old引用数据,语句级不能。
15、什么是脏读?幻读?不可重复读?
1、脏读:事务 A 读取了事务 B 更新的数据,然后 B 回滚操作,那么 A 读取到的数据是脏数据
2、不可重复读:事务 A 多次读取同一数据,事务 B 在事务 A 多次读取的过程中,对数据作了更新并提交,导致事务 A 多次读取同一数据时,结果 不一致。
3、幻读:系统管理员 A 将数据库中所有学生的成绩从具体分数改为 ABCDE 等级,但是系统管理员 B 就在这个时候插入了一条具体分数的记录,当系统管理员 A 改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
不可重复读侧重于修改,幻读侧重于新增或删除(多了或少量行),脏读是一个事务回滚影响另外一个事务。
补:什么是活锁和死锁?解决办法是什么?
1、 活锁:由于系统调度原因,某些事务的加锁请求得不到响应而永远等待下去,称为
活锁。
解决办法:采用合理的调度方法,如先来先服务策略。
2、死锁:两个或多个事务都已封锁了一些数据对象,然后又都请求对方被封锁的数据对象,两个事务永远不能结束,形成死锁。
预防:一次封锁法:要求每个事务必须一次将所有要使用的事务加锁,否则不能继续执行。
顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实行封锁。
诊断与解除:超时法:如果一个事务的等待时间超过了规定的时限,就认为发生了死锁。
等待图法:等待图是一个有向图,正运行的事务表示节点,事务等待的情况表示边,如果图中存在回路,则表示系统中存在回路。

二、数据结构部分

线性表
15、单链表的就地逆置
将头结点摘下,然后从第一节点开始,头插法建立单链表,直到最后一个节点为止。

16、单链表可以用什么实现?
指向结构体的指针实现,结构体中有两个成员,每个节点分为数据域和指针域,除了最后一个节点,每个节点指针域都指向下一个节点的地址,最后一个节点指针域指向NULL。
也可以用结构体数组模拟这种操作,数组中每个下标都对应一个数据元素和游标,游标是下一个元素在数组中的下标,把未被使用的数组元素作为备用链表,下标为0的元素游标存放备用链表第一个节点的下标。数组最后一个元素游标存放第一个有效数值元素的下标,相当于头结点作用,游标为0表示指向为空。

栈和队列
17、实现一个队列的方法?为什么队列的顺序存储需要留一个空位?循环有什么好处?
链式存储:把链表改装一下,加尾指针作为队列的尾部可以插入节点,头指针可以删除节点,相当于出队。
顺序存储:正常的顺序存储想要利用空出的空间就必须移动元素,不移动还会浪费空间,循环队列可以解决这个问题,把这段连续的地址空间,想象成逻辑上的环,所以只要有空闲空间就能使用。
但是当front和rear指针相等的时候有两种情况,一种是满,一种是空,为了区分这种情况,保留一个元素空间,我们假定当rear+1与front相等队列就满了。而空的时候是rear等于front。又因为是环也可能存在rear>front的情况,所以取模操作。
另外计算队列长度的时候,rear>front队长为rear-front,但当rear<front队长为两段相加,所以通用公式为(rear-front+队列的总长度)%队列总长度

树与二叉树
18、什么是完全二叉树?
完全二叉树是由满二叉树而引出来的。对于深度为K的,有N个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。

19、什么是二叉排序树,简述它的查找过程,二叉排序树的时间复杂度,遍历后得到什么样的序列?
二叉排序树是一种二叉树,具有了一些独特性质,若左子树不为空,则左子树上所有节点的值均小于它的根节点的值,右子树不为空,则右子树上所有节点的值均大于它的根节点的值,而且它的左右子树也是二叉排序树。构造一个二叉排序树是为了提高动态查找中插入和删除的速度。
查找过程:递归查找二叉排序树中是否存在要查关键字,若成功则指针指向该数据元素的节点,返回成功,如果关键字小于树中这个节点,则去它左子树中继续查找,大于则去右子树中查找。如果树中没有要查的关键字,则指针指向访问的上一个节点,以便于插入。
插入过程:如果当查找失败且指针p为空,则新建根节点,如果要插入的关键字小于p指向节点的数据,则插入到左孩子,否则右孩子。
删除过程:1叶节点直接删除2只有左或右子树删了接下面3左右子树都有的,找到要删除的节点的直接前驱或后继,用这个节点替换要删除的节点,然后在删除这个节点。
二叉排序树,以链接的方式存储,有在执行插入或删除操作时候不用移动元素的优点,插入删除性能较好,而查找的时间复杂度取决与二叉排序树的形状。中序遍历后得到升序系列,所以也称为二叉排序树。

20、什么是平衡二叉树?
为了解决二叉查找树,查找时间依赖于形状的问题,平衡二叉树就是在建立二叉排序树的时候,对它做了一定的限制,使它保持平衡,使每一个节点的左子树和右子树的高度差至多为1。
具体做法:找出距离插入节点最近且平衡因子绝对值大于一的节点,把它当为根的子树叫做最小不平衡子树,进行相应旋转,使之平衡。
插入节点:LL型,向右旋转。RR型,向左旋转。RL型,先右转,再左转。LR型,先左转,再右转。

21、什么是哈夫曼树?哈夫曼树的作用是什么?
哈夫曼树:带权路径长度为从该节点到树根之间的路径长度与节点上权的乘积,带权路径长度WPL最小的二叉树称作哈夫曼树。
构造过程:把带有权值的叶子节点按照从小到大的顺序排列成一个有序序列,取出前两个最小权值的节点作为一个新节点的两个子节点,左孩子一般比右孩子小,新节点权值为两个叶子的和,将新节点插入刚才有序序列适当位置,重新选出头两个最小的,重复上面过程。
哈夫曼编码:为了解决当年远距离电报的数据传输的最优化问题,发明了哈夫曼编码,比如多英文文章传输,假设每个字母固定用一个二进制串表示,文章很长那传送的串会非常长。但英文字母每个字母出现的频率是不一样的,所以可以根据字母频率设定权值,用哈夫曼树来规划它们,构造哈夫曼树以后,把左分支用0表示,右分支用1表示,然后从根到叶子所经过的路径的数字用来编码,当双方约定好同样的哈夫曼树后,发送信息的时候能明显减少串长度。

图的应用
22、什么是有环图,连通图,强连通图?
连通图:无向图任意两点都是连通的,图中极大连通子图(极大子图还是连通的)成为连通分量。
强连通图:有向图从vi到vj和从vj到vi都存在路径称为强连通图,有向图中极大连通子图称作强连通分量。
连通图的生成树:是一个极小连通子图,含有图中全部n个顶点,但只有足以构成一棵树的n-1条边,少于是非连通图,多余必定构成环。
有向树:有向图中一顶点入度为0,其余入度为1
第一个顶点到最后一个顶点相同的路径称为环或回路。序列中顶点不重复出现的路径称为简单路径,除了第一个顶点和最后一个顶点之外,其余顶点不重复出现的回路,称为简单环。

23、图的存储方式有哪些简要叙述(邻接矩阵和邻接表)?
邻接矩阵:将顶点和边分别存储,顶点用一维数组存储,边用二维数组。可以根据这个二维数组获取图中的信息。比如判定两顶点是否有边,只需读取二维数组值。想知道某个顶点的度就是将这一行的值相加。求他的临界点也只需遍历一行,值为1的就是。无向图的边数组是对称的,有向图入度看列,出度看行。
邻接表:对于边数较少,顶点较多的图,如果还用邻接矩阵那是对空间的极大浪费,所以用邻接表,顶点还是一维数组存储,此外数组每一个数据元素还存储指向第一个邻接点的指针,以便于查找边的信息,图中每个顶点的所有邻接点构成一个链表。边表每个节点存储这个顶点在顶点表中的下标,和一个指向下一个节点的指针。想知道某顶点的度,就查找这个顶点的边中节点的个数,要判断是否存在边也只需遍历相应边表。但是对于有向图能得到每个顶点出度,为了便于确定入度可以再建立一个逆邻接表。

24、什么是DFS,遍历后形成什么?时间和空间复杂度多少?遍历节点顺序是否唯一?
DFS:图的深度优先遍历,是一种递归过程,是对树的先序遍历的推广,从某个顶点开始访问,然后对尚未访问的邻接点出发,继续深度优先遍历,直到所有和初始顶点路径相通的顶点都被访问到。对于非连通图,只需对它的连通分量分别进行DFS。
BFS:图的广度优先遍历,类似于树的层序遍历,先初始化一辅助队列,从某个顶点开始访问,访问节点后入队,队列不为空则队列元素出队列,然后判断当前出队列顶点邻接点是否访问过,没有则访问入队,重复这一过程。

25、什么是迪杰斯特拉算法?
用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。并不是一下子就求出最短路径,而是一步步求他们之间顶点的最短路径,在这个过程中都基于已经求出的最短路径的基础上。

26、什么是拓扑排序?什么图可以拓扑排序?
这种用顶点表示活动,用弧来表示活动间的优先关系的有向图叫做顶点表示活动的网络简称为AOV网。通常,在AOV网中,将所有活动排列成一个拓扑序列的过程叫做拓扑排序,而且每个顶点出现且只出现一次,若顶点a在序列中排在顶点b前面,则在图中不存在从顶点b到顶点a的路径。
(1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它.
(2)从网中删去该顶点,并且删去从该顶点发出的全部有向边.
(3)重复上述两步,直到剩余的网中不再存在没有前趋的顶点为止.
判定网中是否存在环的方法:对有向图构造其顶点的拓扑有序序列,若网中所有顶点都出现在它的拓扑有序序列中,则该AOV网中一定不存在环。

27、什么是普里姆算法?什么是克鲁斯卡尔算法?
最小生成树:权值之和最小的那颗生成树称为最小生成树。
普里姆算法:在所有“其一个顶点已经落在生成树上,而另一个顶点尚未落在生成树上”的边中取一条权值为最小的边,逐条加在生成树上,直至生成树中含有 n-1条边为止
克鲁斯卡尔:新建一个图G,G中拥有原图中相同的节点,但没有边,将原图中所有的边按权值从小到大排序,从权值最小的边开始,如果这条边连接的两个节点于图G中不在同一个连通分量中,则添加这条边到图G中,重复,直至图G中所有的节点都在同一个连通分量中。

28、什么是关键路径?
用顶点表示事件,弧表示活动,弧上的权值表示活动持续的时间的有向图叫AOE网。
在项目管理中,关键路径最长的那个路径,决定了整个项目的最短完成时间。把关键路径上的活动成为关键活动,关键活动影响了整个工程的时间,即如果关键活动不能按时完成的话,整个工程完成时间就会受到影响。
事件最早发生时间:从开始顶点到下一个顶点最长路径长度。它决定了它后面的活动的最早发生时间。
事件最迟发生时间:工程不推迟的前提,该事件最迟必须发生的时间,从后往前计算,边值最小的。
活动的最迟发生时间:活动终点所表示事件最迟发生时间与该活动所需时间之差。
补:请简述一下迪杰斯特拉算法的过程?
1.数组d中存放源点到其他点的最短距离,每次从数组d中选一个值最小且没有被访问过的点;
2.如果经过此点到其他点距离更短,则更新数组d;
3.标记此点已访问过,遍历其他点,直到所有点被访问完。

查找与排序
29、什么是折半查找?时间复杂度多少?前提条件是什么?过程如何?
1.必须采用顺序存储结构 2.必须按关键字大小有序排列。
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
时间复杂度:其算法复杂度为O(log n)
30、什么是哈希表?什么是冲突?
普通的查找方法,查找关键字都需要比较,时间较长,而哈希表的方法是欲查找关键字的存储位置是由某个函数计算出来的,它把记录的存储位置和它的关键字之间建立一个确定的对应关系,使得每个关键字对应一个存储位置。这种关系称为散列函数。
查找步骤:存储数据时候存储在通过散列函数计算的地址,当查找记录时通过同样的散列函数计算地址。
适用情况:一个关键字对应很多不适合,范围查找不适合,排序也不可能。
冲突:两个不同的关键字用散列函数计算出了相同的存储地址称为冲突。
处理冲突的方法:
开放定址法:空闲地址,同义词表项可以存,非同义词也可以。
1.线性探测法:有冲突就顺序查看下一个单元,可能造成堆积。
平方探测法:1方,-1方,2方,-2方。。。这个不堆积但是只能探测一半。
再散列:用别的函数再试试。
伪随机数法:
拉链法:把所有同义词存在一个线性链表中。
31、什么是折半插入排序?时间空间复杂度多少?
正常插入排序插入时候,从后往前查找待插入位置,而折半插入是用折半的方法找到插入的位置,然后插入。仅仅是减少了比较元素的次数,时间复杂度仍为O(N方)

32、什么是快速排序?时间空间复杂度多少?简述基本过程
一般用第一个元素用作基准数,但如果是有序花费时间将是二次。一般可以使用三数取中值分割法。快速排序是对冒泡排序的改进,属于交换排序,基本思想基于分治法,在待排序表中取一个元素作为基准,通过一趟排序将待排序表划分为独立的两部分。左边部分小于基准,右边大于,这个过程称为一趟排序,而后分别递归地对两个子表重复上述过程,直到每部分内只有一个元素或为空,即所有元素放在最终位置上。
当i<j 时且 j对应的值大于基准跳过,碰到小于基准停下来,i小于j且i从前向后跳过小于基准的值。如果i小于j,交换然后缩小区间(i++,j- -) 继续 回到开始但前提i小于j

33、什么是堆?有什么用?什么是堆排序?
堆可以看成是一棵完全二叉树,如果任意一节点都小于它的子孙,称为小项堆,任意节点大于它子孙称为大顶堆。
作用:可以对一组数据进行排序。大数据中找出最大的几个值,用堆比较快。
堆排序:构造堆先自下往上调整,如果建立大根堆,从下往上,从右往左,每个有孩子的节点(如果从数组角度是n/2处向前到1)的关键字小于左右子树中关键字大者,则交换。反复利用上述调整堆的方法建堆,直到根节点。这样将R[1…n]构造为初始堆,将当前初始堆顶记录R[1]和该区间的最后一个记录交换,然后将新的无序区调整为堆(亦称重建堆)。
与直接选择区别:直接选择排序中,为了从R[1…n]中选出关键字最小的记录,必须进行n-1次比较,然后在R[2…n]中选出关键字最小的记录,又需要做n-2次比较。事实上,后面的n-2次比较中,有许多比较可能在前面的n-1次比较中已经做过,但由于前一趟排序时未保留这些比较结果,所以后一趟排序时又重复执行了这些比较操作。
堆排序可通过树形结构保存部分比较结果,可减少比较次数。

34、你认为哪种排序算法最优?
没有最好,只有最适合,若n较小,用简单的排序算法较好比如简单选择,直接插入,如果数据初始状态已经按关键字基本有序,则选用直接插入或冒泡较好。如果n较大应该考虑用那几个时间复杂度较好的算法,快速排序是被认为是目前基于比较的内部排序算法中最好的方法,当待排序关键字是随机分布时,快速排序的平均时间最短。如果对负辅助空间有限制则可以考虑堆排序,另外求大数据的最大的几个数,堆排序最适合。如果要求排序稳定可以考虑归并排序。如果n很大,记录的关键字位数较少且可以分解,采用基数排序较好。当记录本身信息量很大,为了避免移动,可以考虑链表。

三、操作系统部分

操作系统概述
35、操作系统用到了那些数据结构?举例说明
进程调度后备队列,先进先出算法
短进程优先算法用了堆
动态分区分配,首次适应算法。在此算法中,空闲区链按起始地址递增顺序排列,在进行内存分配时,从链首开始顺序查找,直到找到一个能满足其大小要求的空闲区为止。循环首次适应算,循环链表。
目前广泛流行公用缓冲池,池中的缓冲区可供多个进程共享。它把相同类型的缓冲区链成一个队列
索引顺序文件:记录分组,索引表中为每组中的第一个记录建立一个索引项,组与组之间关键字必须有序,组中关键字可以无序。通过索引表找到所在组。
散列文件:没有 顺序特征。
文件分配磁盘块方式:链接分配,索引分配。
系统调用的过程?操作系统的组成?
内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(system call)的接口呈现给用户。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。
系统调用通常包括:进程控制、文件系统控制、内存管理、网络管理,进程通信等。
基本功能:处理机管理,处理器的分配和运行实施有效的管理,如进程控制,同步,通信,调度。存储器管理,对内存分配、保护、扩充。设备管理,对计算机系统内的所有设备实施有效管理,比如设备分配,缓冲和虚拟,设备传输控制,设备独立性。文件管理,有效的支持文件的存储、检索和修改等操作,解决文件的共享、保护问题,比如文件存储空间管理、目录管理、文件操作管理。用户接口,方便用户使用操作系统,通常有命令接口,程序接口,图形接口。

36、什么是微内核? 什么是shell?
操作系统:操作系统是控制和管理整个计算机系统硬件和软件资源,并合理组织调度计算机的工作和资源分配。进程管理 存储管理 设备管理 文件管理
微内核:操作系统的一种体系结构,将最基本的功能保留在内核,基于客户服务器模式的微内核结构,将操作系统划分两大部分,微内核和服务器,把操作系统绝大部分功能都放在服务器中实现,交互借助于微内核通信。优点:每个服务进程允许在独立用户进程中,即每个服务器失败不会引起系统其他服务器崩溃,可靠性好。还具有良好的灵活性,可以方便增删服务功能,便于维护修改服务器代码不会影响其他部分,适合分布式处理的计算环境。缺点:效率不高,所有用户进程都要通过微内核相互通信。
Shell:编程人员通过系统调用,api接口来使用操作系统提供的功能,普通用户不编程,所以操作系统给普通用户提供一个shell与用户交互,shell就是覆盖在操作系统上的一个用户界面,可以是图形的比如window,也可以是文本,比如linux,用户可以输入命令操作系统,不是进行直接系统调用。

进程管理
37、作业与进程的区别
一个进程是一个程序对某个数据集的执行过程,是分配资源的基本单位。作业是用户需要计算机完成的某项任务,是要求计算机所做工作的集合。

38、进程和程序有什么区别?
进程是程序及其数据在计算机上的一次运行活动,是一个动态概念,而程序是一组有序的指令集合,是一种静态的概念
进程是程序的一次执行过程它是动态地创建和消亡的具有一定的生命周期是暂时存在的,程序则是一组代码集合,是永久存在可长期保存的。
进程可以创建进程,程序不能创建新程序。

39、进程和线程有什么区别?什么是进程树?
进程是资源拥有的基本单位,线程是独立调度的基本单位,而不用有系统资源,当可访问其隶属进程的系统资源,不仅进程之间可以并发,同一进程内的多个线程也能,进一步提高了并发度,由于创建和撤销进程系统都要为之分配或回收资源,保存当前环境等开销远大于创建或撤销线程。
进程树是一个形象化的比喻,比如一个进程启动了一个程序,而启动的这个进程就是原来那个进程的子进程,形成的一种树形的结构。

40、简述进程的状态与转换
新建完进程分配了必要资源,进入就绪状态,这时只需要得到处理就进程就能运行,进入运行状态后,需要等待某个资源进入阻塞状态,资源到位了进入就绪队列等待处理机。运行完事进入终止状态,资源回收。

41、进程间的通信有几种方式?
共享存储:在通信进程之间存在一块可直接访问的共享空间,通过对这段空间的读写实现进程之间的信息交换,在对共享空间进行写/读操作时,需要使用同步互斥工具。
消息传递:数据交换是以格式化的消息为但单位,操作系统提供的消息传递方式,有直接通信方式和间接通信方式。
管道通信:管道就是连接一个读进程和一个写进程以实现他们之间通信的一个共享文件,向管道提供输入的发送进程以字符流形式将大量数据送入管道,接受管道输出的进程,则从管道中接受数据,为了协调双方通信,管道机制需提供互斥、同步和确定对方的存在。

42、什么叫饥饿?
短作业优先算法时候,长作业一直得不到处理机

43、进程的调度算法有哪些?分别简述
先来先服务,缺点短作业可能等待很长时间,平均响应时间很慢。
短任务优先算法:平均响应时间最优,分为抢占和非抢占,容易饿死长任务。
高响应比:优先权=等待时间+要求服务时间/要求服务时间既照顾了短作业,又不会使长作业得不到服务。
分时(时间片):选择适当时间片,过大退化成FCFS过小切换所用时间多。
优先级:静态优先级不变,动态优先级,执行了降低优先级。
多级反馈队列调度算法:设置多个就绪队列,并为各个队列赋予不同优先级,第一个队列优先级最高,依次降低,各队列中进程内时间片的大小也不相同,最高优先级的时间片最小,依次升高。当一个进程进入内存后,先进入优先级最高队尾,等待调度,当运行时候如果在该时间片结束,便可撤离了,没完成就进入第二个队列末尾等待,依次进行,如果在最后一个队列执行一次还没完成,就在这队列继续排队。仅当第一队列空闲时候,调度程序才会调度第二队中进程运行,优先级高的队列空闲,优先级低才会被调度,如果优先级低的队列正在执行,优先级高队列有进程进入,则调度程序把正在执行的进程放在这队的末尾,优先级高的先执行。
实时最早截止时间优先(EDF):开始截止时间确定优先级。
最低松弛度优先(LLF):根据任务紧急程度来确定优先级。
44、什么是软实时,什么是硬实时?
硬实时系统有一个刚性的、不可改变的时间限制,它不允许任何超出时限的错误。超时错误会带来损害甚至导致系统失败、或者导致系统不能实现它的预期目标。
软实时系统的时限是一个柔性灵活的,它可以容忍偶然的超时错误。失败造成的后果并不严重,仅仅是轻微的降低了系统的吞吐量。

45、什么是PV操作?简述PV操作要点及注意事项。
信号量是最早出现的用来解决进程同步与互斥问题的机制,包括一个称为信号量的变量及对它进行的两个原语操作p操作和v操作,这两个操作是不可中断的程序段,称为原语。
P原语操作的动作是:信号量减1;若减1后仍大于或等于零,则进程继续执行;若减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中V原语操作的动作是:信号量加1;若相加结果大于零,则进程继续执行;若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程。
信号量必须成对使用。且在P,V愿语执行期间不允许有中断的发生。P,V原语不但可以解决进程管理当中的互斥问题,而且我们还可以利用此方法解决进程同步与进程通信的问题。同步时候信号量初始为0,互斥时候为1。

46、什么是死锁?有什么解决办法?
死锁:多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将无法向前推进。原因:是资源的争夺,或进程推进顺序非法。
必要条件:资源为临界资源、进程所获得资源在用完之前不可强行夺走,只能主动释放,进程已经保持了至少一个资源,但有提出了新的资源请求,但该资源以被占用了,循环等待条件,存在一种进程资源的循环等待链。
预防死锁:这是一种较简单和直观的事先预防的方法。方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或者几个,来预防发生死锁。但是由于所施加的限制条件往往太严格,可能会导致系统资源利用率和系统吞吐量降低。
避免死锁:该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的的四个必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。
检测死锁:这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,此方法允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当措施,从系统中将已发生的死锁清除掉。
解除死锁:这是与检测死锁相配套的一种措施。当检测到系统中已发生死锁时,须将进程从死锁状态中解脱出来。常用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。

内存管理
47、简述内存的连续分配管理方式
固定分区分配,划分若干个固定大小区域,建立分区说明表,容易产生内部碎片。
动态分区分配,又称可变分区分配,是一种动态划分内存的分区方法。不预先划分,而是在进程装入内存时候,根据进程大小动态的建立分区。并使分区大小正好适合进程的需要。因此系统中分区的大小数目是可变的。会产生外部碎片。可用紧凑技术解决,不时的动态整理。
首次适应,空闲分区以地址递增次序链接,找到一个能满足要求的分区。
最佳适应:分区按容量递增形成分区链。
最坏适应:分区按容量递减形式分区链。
临近适应:循环首次适应,从上次查找结束位置开始继续查找。
48、程序装入和链接。
编译:将源代码编译成若干个目标模块
链接:链接程序将编译后形成的目标模块,以及所需库函数链接在一起,形成一个完整的装入模块。链接分为静态,装入时动态,运行时动态
装入:由装入程序装入模块装入内存中运行。分为绝对装入,可重定位,静态重定位一次性完成,动态重定位。
49、常用内存保护方法有哪些?
页表机制里,页表寄存器中有页表起始地址,和页表长度,比较页号和页表长度如果大于页表长度则产生越界中断。

50、什么是交换技术?什么是覆盖技术?及其区别
覆盖:把一个用户空间分成一个固定分区和若干个覆盖区,活跃部分放入固定区,其余部分先放即将访问的进覆盖区,其他需要时候在调入覆盖原有的段。
交换:把处于等待状态的程序从内存移到外存,腾出空间这叫换出,然后把准备好竞争CPU运行的程序从外存调入内存,这叫换入。

51、什么是拼接技术?
就是紧凑技术:动态分区分配回收时候,将其余空闲分区合并为一个大的空闲分区。

52、简述内存的非连续非配管理方式(段、页)
非连续分配根据分区大小是否固定分为,分页存储管理和分段存储管理。分页存储管理方式又根据是否要把作业的所有页面都装入内存分为基本分页存储方式,和请求分页存储方式
基本分页存储管理方式:把主存空间分为大小相等且固定的块,相对较小,作为主存的基本单位,每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间。与固定分区技术的区别是块的大小相对于分区较多,而且进程也按照块进行划分,进程运行时按块申请主存可用空间并执行,只会在最后一个不完整块产生内部碎片。
进程在执行过程中需要申请主存空间,就是要为每个页面分配主存中的可用叶框,这就产生了页和叶匡的一一对应。页面大小要适中,太小页表长,页内碎片增大,降低内存的利用率。一般每页大小4KB,所以页内偏移量12位,页号20位,地址最多2的20此方页。
页表:为了便于在内存中找到进程的每个页面所对应的物理块,系统为每个进程创建一张页表,记录页面在内存中对应的物理块号,页表一般在内存中。页表作用是实现从页号到物理块号的映射。页表寄存器PTR存放页表在内存地址,和页表长度。进程未执行放在进程控制块中,执行存入。
TLB快表:若页表全部放在内存中,则存取一个数据或一条指令至少要访问两次内存,一次是访问页表,确定物理地址,一次是取数据和指令。这显然比通常执行指令慢一倍,所以增加一个具有并行查找能力的高速缓存存储器–快表。又称联想寄存器,用来存放当前访问的若干表项,比较的时候是将页与块表中的所有页号同时进行比较,找到取出,如果没有则访问主存中页表,读出后同时放入快表中,以便后面可能再次访问,但若块表以满则按着一定算法对旧页表进行替换。
页表占空间太大可以用两级页表,进程执行只需调入最高级页表就可以,进程的页表和进程本身的页面,可以再后面的执行中再调入。
分段管理:分页是从计算机角度考虑设计,提高内存利用率,而且通过硬件机制,对用户完全透明,分段管理方式的提出考虑了用户程序员以满足编程方便,信息保护和共享等多方面需求。段内要求连续,段间不要求连续,作业地址空间是二维的。最大段长64KB,段号为16位,段内偏移量为16位。段式系统中段号和段内偏移量必须由用户显示提供。段表映射了逻辑空间和内存空间。段表项记录了起址和段长。分段系统共享是通过两个作业的段表中相应表指向被共享的段的同一个物理副本实现的。不能修改的代码称为纯代码和可重入代码这样代码不能修改数据是可以共享的。
段页式:将两种存储管理方法结合起来,形成了段页式存储管理方式。作业地址空间首先分成若干逻辑段,每段都有自己段号,然后每一段分成若干大小固定的页。对内存空间管理仍然和分页一样。逻辑地址三部分,段号,页号,偏移量。段表项报考段号,页表长度,页表起始地址。页表项包括页号和块号。
53、简述虚拟存储器的原理
传统存储管理方式一次性,驻留性不换出。局部性原理,空间局部性,一旦程序访问了某个存储单元,在不久之后,其附近的存储单元页将被访问,指令通常说顺序存放,顺序执行的,数据也一般以数组等方式簇聚存储的。时间局部性,某一指令一旦执行,不久以后该指令可能再次执行,数据被访问过,不久以后数据有可能再次被访问。原因是程序有循环。基于局部性原理,在程序装入时候,可以将程序的一部分装入内存,其余部分留在外存,就可以启动程序执行,在程序执行过程中,访问的信息不存在内存,由系统将所需的部分调入内存然后继续执行程序,另一方面将暂时不使用的内存换出道外存。从而腾出空间存放将要掉入内存的信息,这样系统好像为用户提供了一个比实际内存大的多的存储器,称为虚拟存储器。
实现:请求分页,请求分段,请求段页式存储管理
硬件支持:内存外存,也表机制,中断机构,地址变换机构。
请求分页管理方式:建立在基本分页管理方式,为了支持虚拟存储器功能,增加了请求调页和页面置换功能。每当要访问的页面不在内存时候,便产生了一个缺页中断,请求操作系统将所缺的页面调入内存,此时将缺页进程阻塞,调完唤醒,内存有空闲块则分配,将要掉入的页装入该块,并修改页表中相应表项,若此时没有空闲块,则按着一定算法置换。修改过还写回,与一般中断比可以再指令执行期间产生和处理中断信号。
54、简述各种页面置换算法(LRU、CLOCK)LRU是如何实现的?
最佳,以后不会使用的淘汰。不可能实现。
先进先出:优先淘汰最早进入内存的页面。
最近最久未使用LRU置换算法:淘汰最近最长时间未访问过的页面,该算法未每个页面设置一个访问字段,来记录页面自上次被访问以来所经历的时间,淘汰页面时候选择现有页面中值最大的。需要栈支持。可利用一个特殊的栈来保存当前使用的各个页面的页面号。每当进程访问某页面时,便将页面的页面号从栈中移出,将它压入栈顶。因此,栈顶始终是最新被访问页面的编号民,而栈底则是最近最久未使用的页面的页面号。
Clock算法:LRU接近最佳置换算法,性能好但是开销大,FIFO简单但是性能差,CLOCK算法比较小的开销接近LRU的性能,最近未用(NRU),给每一帧关联一个附加位,称为使用位,当某一页首次装入主存,该帧使用位设置1,随后再被访问页被置1,替换算法把候选帧集合看成一个循环缓冲区,并且有一个指针与之关联, 当某一页被替换时该指针被设置成指向缓冲区的下一帧。当需要替换一页时候,操作系统扫描缓冲区,以查找使用位为0的一帧,每当遇到为1的改0,如果所有都为0则替换第一个,所有都为1则全改0一圈回来后替换第一个,由于循环检查各页情况,所以CLOCK。
优化:加一个修改位,改了的为1, 系统先找没访问过页没修改过的,不对使用位修改,找不到的找没访问,改了的,这次过去使用位改0,找不到,回原点从新来,这回一定能找到了。由于修改的页面需要写回。这样节省时间。

55、什么是TLB(快表)?有什么用?原理?
TLB块表:若页表全部放在内存中,则存取一个数据或一条指令至少要访问两次内存,一次是访问页表,确定物理地址,一次是取数据和指令。这显然比通常执行指令慢一倍,所以增加一个具有并行查找能力的高速缓存存储器–快表。又称联想寄存器,用来存放当前访问的若干表项,比较的时候是将页与块表中的所有页号同时进行比较,找到取出,如果没有则访问主存中页表,读出后同时放入快表中,以便后面可能再次访问,但若块表以满则按着一定算法对旧页表进行替换。

IO管理和文件
56、什么是设备无关性?
应用程序独立于具体使用的物理设备。为了实现设备独立性,在程序中使用逻辑设备名来请求,使用某类设备,在系统中设置逻辑设备表。用于将逻辑设备名映射为物理设备名。这样多个进程可以分时使用同一个设备了。

57、磁盘调度算法有哪些?
先来先服务:仅适用于请求磁盘IO的进程数目较少的场合最简单的一种磁盘调度算法,根据进程请求访问磁盘的先后次序进行调度。优点:简单,公平,每一个请求的进程都能够得到处理,不会出现长期得不到处理的进程。缺点:未对寻道进行优化,致使平均寻道时间可能较长。
最短寻道时间优先:该算法选择这样的进程,其要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,但这种算法不能保证平均寻道时间最短优点:较FCFS有更好的寻道性能缺点:可能导致老进程饥饿,可能会出现磁臂黏着
扫描算法:也叫电梯调度算法在SSTF算法基础上优化而得到,可以防止老进程饥饿。该算法不仅考虑到被访问磁道和当前磁头之间的距离,更优先考虑的是磁头当前的移动方向。(应该选取同方向且距离最近的磁道访问。)优点:磁头双向移动,不会产生饥饿,平均寻道时间短。缺点:可能会出现磁臂黏着
循环扫描算法:为了减少延迟,CSCAN规定磁头单向移动,当从里到最外后,磁头立即返回到最里的欲访问磁道,然后继续向外。优点:磁头单向移动,不会产生饥饿,平均寻道时间短。
58、文件共享的方式又哪些?
硬连接:基于索引节点的共享方式,诸如文件的物理地址以及其他的文件属性等信息,不再是放在目录项中,而是放在索引节点中。文件目录只设置文件名以及指向相应索引节点的指针,索引节点还应有一个链接计数。
软连接:符号链为让B共享用户A的一个共享文件F,可以由系统创建一个LINK类型的新文件也取名为F,并将文件F写入用户B的目录中,指向这个链接文件,其实就是快捷方式。
59、文件分配方式有哪些?
连续分配:每个文件在磁盘上占一组连续块,支持顺序访问和直接访问,优点是简单,存取速度快。缺点是文件长度不宜动态增加。增加需大量移动。
链接分配:采取离散分配,消除外部碎片,提高了磁盘利用率,根据当前需要分配必需的盘块,当文件动态增长时,可以动态再为它分配盘块。隐式链接:每个文件对应一个磁盘块的链表,磁盘块分布在磁盘的任何地方,除最后一个盘块外,每个盘块都由指向下一个盘块的指针。显示连链接:把指针显式存放在内存中一张连接表中,该表在整个磁盘设置一张,每个表项中存放链接指针,即下一个盘块号。显著提高了检索速度,大大减少了访问磁盘的次数,由于分配给文件的所有盘块号都放在该表中,故称该表为文件分配表(FAT)
索引分配:把每个文件的所有盘块号都集中放在一起构成索引块表。为了处理大文件,可以链接多个索引块,也可以多层索引。
混合索引:把多种索引分配方式相结合的分配方式。
60、文件存储空间管理
空闲表法:与内存动态分配相似
空闲链表法:将所有空闲盘区拉成一条空闲链。
位示图:磁盘上每个盘块都有一个二进制位与之对应

61、简述缓冲池原理
缓冲池:由多个系统公用的缓冲区组成,缓冲区按其使用情况可以形成三个队列,空缓冲队列、装满输入数据的缓冲队列(输入队列)和装满输出数据的队列(输出队列),还有四个缓冲区:用于收容输入数据缓冲区、用于提取输入数据的工作缓冲区、用于收容输出数据的工作缓冲区以及用于提取输出数据的工作缓冲区。
当输入进程需要输入数据时,从空缓冲队列队首摘下一个空缓冲区,把它作为收容输入工作缓冲区,然后把输入数据输入其中,装满后再挂到输入队列末尾。当计算机进程要输入数据时,便从输入队列取得一个空缓冲区作为提取输入工作缓冲区,计算进程从中提取数据,数据用完后再将它挂到空缓冲队列尾。当计算机进程需要输入数据时,便从空缓冲队列的队首取得空缓冲区,作为收容输出工作缓冲区,当其中装满输出数据后,再将它挂到输出队列队尾。当要输出时,有输出进程从输出队列中取得一个装满输出数据的缓冲区,作为提取输出工作缓冲区,提取完挂到空缓冲队列队尾。

四、计算机网络部分

计算机网络概述
62、三网融合,指哪三网?
电信网络:主要业务是电话,传真等。
有线电视网络:单向电视节目传输网络。
计算机网络:我们现在用的很多的局域网和Internet等。

63、组成网络协议的三个要素
语法:用户数据与控制信息的结构和格式
语义:需要发出何种控制信息,完成何种动作以,解释比特流每一部分的意义
时序:对事件实现顺序的详细说明

64、OSI参考模型和TCP/IP模型有几层,简述各层原理及作用,TCP/IP有哪些协议?
OSI物理层,透明的传输比特流。
数据链路层,两个相邻节点间的链路上,透明地传送帧中的数据,数据传送时,数据链路层将网络层交下来的IP数据包组成帧,每个帧包括数据和必要控制信息,以使得接收端能够知道从哪开始和结束,进行硬件地址寻址进行硬件地址寻址,还使接收端能检测到所收到的帧中有无差错,有就丢失。
网络层,为分组交换网上的不同主机提供通信服务,把运输层产生的报文段或用户数据报封装成分组,关键问题是逻辑地址寻址,实现不同网络之间的路径选择。
运输层,运输层负责端到端的通信,对一个主机同时运行的多个进程提供服务,这是复用,运输层把收到的信息分别交付给上面应用层相应进程,为高层提供可靠透明有效的数据传输服务,实现进程到进程的传输管理,差错控制,流量控制等。
会话层(Session Layer):建立、管理、终止会话。(在五层模型里面已经合并到了应用层)
表示层(Presentation Layer):数据的表示、安全、压缩。(在五层模型里面已经合并到了应用层)
应用层 (Application): 网络服务与最终用户的一个接口。协议有:HTTP FTP TFTP SMTP SNMP DNS
TCP/IP协议不是TCP和IP这两个协议的合称,而是指因特网整个TCP/IP协议族。TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet ,TCP,UDPIP,ICMP,OSPF,EIGRP,IGMP,RIP,PPP,MTU,ARP,RARP

65、计算机网络通信过程,什么是同步通信和异步通信?
同步通信:同步通信是一种比特同步通信技术,要求发收双方具有同频同相的同步时钟信号,只需在传送报文的最前面附加特定的同步字符,使发收双方建立同步,此后便在同步时钟的控制下逐位发送/接收。
异步通信:相对于同步通信,异步通信在发送字符时,所发送的字符之间的时隙可以是任意的。但是接收端必须时刻做好接收的准备,发送端可以在任意时刻开始发送字符,因此必须在每一个字符的开始和结束的地方加上标志,即加上开始位和停止位,以便使接收端能够正确地将每一个字符接收下来。

66、各设备(集线器、交换机、路由器)在那层工作,分别是什么?
中继器:中继器从一个网络电缆里接收信号, 放大它们,将其送入下一个电缆。
集线器:相当于多接口中继器,可将各节点连接成一个局域网,但任何时刻都只能有一个节点通过公共信道发送数据。逻辑上仍然是一个总线网,使用CSMA/CD协议。不能隔离碰撞域。不能连接不同技术和速率的网络。
网桥:相比较而言,网桥对从关卡上传下来的信息更敏锐一些。网桥是一种对帧进行转发的技术,根据MAC分区块,可隔离碰撞。网桥将网络的多个网段在数据链路层连接起来。
交换机:工作在数据链路层相当于多端口的网桥,允许端口之间建立多个并发连接,实现多个节点之间并发传输,每个端口所占带宽不会因为端口数量增加而减少
路由器:使用物理层或数据链路层的中继系统时只是把一个网络扩大了,而从网络层的角度看,它仍然是通一个网络,一般并不称之为网络互连,网络互联通常是指用路由器进行网络互联和路由选择。

67、网络按地理位置划分为几种?分别介绍
广域网WAN,城域网MAN,局域网LAN,个人区域网WPAN

物理层
68、什么是基带信号?什么是宽带信号?什么是模拟信号?什么是数字信号?
基带信号:将数字信号1或0直接用不同的电压来表示,然后送到电路上去传输。
宽带信号:将基带信号调制后形成的频分复用模拟信号。由于基带信号经过调制,其频谱移动到较高的频率处。由于每一路基带信号的频谱都被移动到不同的频段上,因此合在一起后并不会互相干扰,这样可以在一条电缆中传送多路的数字信号,因而提高了线路的利用率。
模拟信号:连续信号,例如:话音信号和广播信号
数字信号:离散信号,二进制代码0、1组成的信号

69、简述电路交换、报文交换、分组交换,比较优缺点
电路交换:源节点和目的节点之间建立一专用通路,用于传送数据,包括建立连接,传输数据,断开连接,优点:延迟小。缺点:利用率低
报文交换:将数据加上源地址,目的地址等信息,封装成报文,存储转发每个报文可以单独选择到达目的节点的路径,优点利用率较好,缺点是增加了资源开销,和缓冲延迟,缓冲难以管理,因为报文大小不确定。
分组转发:将数据分成较短的固定长度的数据块,每个块上加上目的地址,源地址等辅助信息组成分组,以存储转发的方式传输,除具备报文的优点,还有缓冲易于管理,平均延迟更小。
70、分组交换的方式有哪些?
数据报方式:不需要建立连接,发送方可以随时发,接收方也可以随时接受,网络尽最大努力交付传输,不保证可靠性,分组中有发送端和接受端完整地址,以便独立传输。
虚电路方式:将数据报方式与电路交换给结合起来,建立逻辑上的虚电路。与物理电路不同,节点可以共用,不时真实建立物理连接了。
71、什么是信宿和信源?
信源:在通信中,向另一部件(信宿)发出信息的部件。
信宿:从另一部件(信源)接收信息的部件
72、简述单工,半双工,全双工
单工:信息在两点之间只能单方向发送的工作方式。
半双工:信息在两点之间能够在两个方向上进行发送,但不能同时发送的工作方式。
全双工:通信允许数据在两个方向上同时传输
73、异步通信的信源和信宿没有时钟同步信号,怎么解决这个问题?
采用曼彻斯特或者差分曼彻斯特。简述这两个的原理

数据链路层
74、比较一下BSC协议和HDLC协议
BSC是面向字符的同步控制协议而HDLC是面向比特的同步控制协议,BSC使用字符填充的首尾定界符法。该法用一些特定的字符来定界一帧的起始与终止.协议依赖特定字符集,HDLC使用比特填充的首尾定界符法。该法以一组特定的比特模式(如01111110)来标志一帧的起始与终止。协议不依赖特定字符集。
由于BSC是一个半双工协议,它的链路传输效率很低。HDLC支持全双工通信,传输效率高。

75、数据链路层的作用
链路管理:链路的建立、维持、释放。
帧定界:又称帧同步,指接收方能从接收到的比特流中准确提取数据帧。
流量控制:发送与接收数据同步
差错控制:采用编码技术(如CRC)来检测或纠正传输中的错误。其中前向纠错具有检测与纠错的功能、开销大。差错检测只检错,不纠错,并通知发送方重传出错帧。
进行硬件地址寻址 进行硬件地址寻址

76、列举数据链路层的协议,至少两个
HDLC:是一个在同步网上传输数据、面向比特的数据链路层协议,该协议不依赖于任何一种字符编码集,数据报文可透明传输,用于实现透明传输的0比特填充法易于硬件实现,全双工通信,较高的数据链路传输效率。
PPP:是使用串行线路通信的面向字节的协议,协议应用在直接连接的两个节点的链路上,主要用来通过拨号或专线方式建立点对点连接发送数据,因特网用户连接到ISP就是使用PPP协议。PPP协议功能帧定界,以便接受端能找到帧的开始和结束位置,在同一条物理链路上支持多种网络层的协议,差错检测。Ppp协议将一个IP数据报封装成帧,既支持异步也支持同步面向比特流,还有一个用来建立、配置和测试数据链路连接的链路控制协议LCP,和一套网络控制协议NCP,其中的每一个协议支持不用的网络层协议。

77、什么是流量控制?在那几层有流量控制?
数据链路层:流量控制设计对链路上的帧的发送速率的控制,以使接收方有足够的缓冲空间来接受每一个帧。由接收方控制发送方的速率,常见方式有停止等待协议,发送方每发送一帧,都要等待接受对方应答,之后才能发送下一帧,接收方每接受一帧都要反馈一个应答信号,如果没有应答一直等待,效率很低。
滑动窗口,在任意时刻发送方都维持一组连续连续的允许发送的帧的序号,称为发送窗口,同时接收方页维持一组连续允许接受的帧序号,称为接受窗口,发送窗口用来对发送方进行流量控制,发送窗口大小代表还没有收到对方确认情况下,发送方最多还可以发送多少数据帧,接受窗口为了控制可以接收哪些数据帧而不可以接收哪些帧。当接收方收到的数据帧是接受窗口内的序号才收。不是丢弃。发送端每收到一个确认帧,发送窗口就向前滑动一个帧的位置,当发送窗口都没确认就停止发送,直到接收方发送来的确认帧使窗口移动才可以发送。数据链路层滑动窗口大小是固定的。
自动重传请求ARQ有三种:
单帧滑动窗口(停止等待协议),可保证有序。后两种后退N帧ARQ和选择重传ARQ是滑动窗口与请求重发的结合。由于窗口尺寸足够大,帧可以再线路上连续流动,又称连续ARQ。
后退N帧ARQ:接收窗口等于1。允许发送方可以连续发送信息帧,但是,一旦某帧发生错误,必须重新发送该帧及其后的n帧。这种方式提高了信道的利用率,但允许已发送有待于确认的帧越多,可能要退回来重发的帧也越多。
选择重传ARQ:当发送方接收到接收方的状态报告指示报文出错,发送方只发送传送发生错误的报文。
数据链路层可靠传输只有超时重传。传输层TCP连接中传送的数据流中每一个字节都编上一个序号,确认号是期望收到对方的下一个报文段的数据的第一个字节的序号。超时重传和冗余确认(ACK),可以缩短时间发送方收到同一个报文段的三个冗余确认,就重传,也成为快重传。
传输层TCP流量控制:接收方根据自己接受缓存的大小,动态调整发送方的发送窗口大小,这就是接受窗口rwnd,来限制发送方向网络注入报文的速率,同时发送方根据其对当前网络拥塞程序的估计而确定的窗口值,成为拥塞窗口cwnd。rwnd是接收方允许连续接收的最大能力,单位字节,发送法根据最新收到的rwnd限制自己发送窗口大小。实际取rwnd和cwnd最小值。
传输层与数据链路层的流量控制区别在于,传输层定义了端到端用户之间的流量控制,数据链路层定义了两个中间的相邻节点的流量控制。

78、简述CSMA/CD的原理,如果有两端同时发信息会出现什么情况?什么叫冲突?解决冲突的办法都有哪些
载波监听多路访问/碰撞检测:载波监听就是发送前先侦听,每一个站在发送数据之前要先检测一下总线上是否有其他站点在发送数据,如果有,则暂时不发送数据,要等待信道变为空闲时再发送。只支持半双工。
碰撞检测:边发送数据边检测信道上信号电压的变化情况,以便判断自己在发送数据时其他站点是否也发送数据。
如果传输了整个帧没有检测到来自其他适配器的信号能量,这个适配器完成该帧的传输,否则适配器就必须停止传输它的帧,传输一个拥塞信号。在停发后适配器采用截断二进制指数退避算法来等待一段随机时间后重新先听后发。
争用期:由于总线有传播时延,你检测到空闲,其实可能有数据没到你这呢,单程端到端传播时延为t,适配器发送帧后至多经过2t时间就可以知道所发送数据是否遭到碰撞,之所以是2t是因为最多在最那边,在返回来超不过2t。每一个站在发数据之后一小段时间内,都存在遭遇冲突的可能,只有经过争用期这段时间还没检测到冲突才能确定不会发生冲突,
截断二进制指数退避:从集合0到2的k此方减一中随机取出一个数,k是重传次数,最大等于10超过也是10。选出一个乘以争用期2t得出的时间。
前64没发生冲突就不会,规定最短有效帧长64,小于的就是异常终止的无效帧
79、简述IEEE 802.3协议
是一种基于总线型的局域网标准描述物理层和数据链路层的MAC子层的实现方法。采用CSMA/CD方式对总线访问控制。
以太网MAC帧,每一块网络适配器有一个地址,物理地址,MAC地址长6字节,高24位厂商代码,低24位厂商自行分配。

80、计算机网络使用的通道共享技术有哪些?简述频分复用、时分复用、波分复用、码分复用。时分复用的时隙怎么确定?频分复用如何避免各路信号间干扰?
介质访问控制:将使用介质的每个设备与来自同一信道上的其他设备通信隔离开,使资源合理分配给网络上的设备,采用多路复用技术可以把多个输入通道的信息整合到一个复用通道,在接受端把收到的信息分离出来传送到对应的输出通道。
频分复用FDM:就是将用于传输信道的总带宽划分成若干个子频带(或称子信道),每一个子信道传输1路信号。频分复用要求总频率宽度大于各个子信道频率之和,同时为了保证各子信道中所传输的信号互不干扰,应在各子信道之间设立隔离带,这样就保证了各路信号互不干扰(条件之一)。频分复用技术的特点是所有子信道传输的信号以并行的方式工作,每一路信号传输时可不考虑传输时延,因而频分复用技术取得了非常广泛的应用。
时分复用TDM:是采用同一物理连接的不同时段来传输不同的信号,也能达到多路传输的目的。同步(Synchronous)时分多路复用TDM,它的时间片是预先分配好的,而且是固定不变的,因此各种信号源的传输定时是同步的。但是计算机数据传输的突发性,利用率不高。STDM又称统计时分复用,异步时分多路复用,当终端数据要传送时才会分配时间片,因此可以提高线路的利用率。
波分复用WDM:就是光的频分复用,在一根光纤中传输多种不同波长的光信号,由于波长不同,所以各路光信号互不干扰,最后在用波长分解复用器将各路波长分解出来。
码分复用CDM:是靠不用的编码来区分各路原始信号的一种复用方式,是用一组包含互相正交的码字的码组携带多路信号。每个发送者有自己不同的密码,接受者在接到不同信号,通过密码过滤掉自己无法解码的信号,留下和自己密码对应的信号。码分多址,每个用户在同一时间使用同样的频带进行通信。

网络层
81、二层交换机是哪一层的设备,与三层交换机之间的区别?
二层交换技术是发展比较成熟,二层交换机属数据链路层设备,可以识别数据包中的MAC地址信息,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。
三层交换机就是具有部分路由器功能的交换机,三层交换技术就是二层交换技术+三层转发技术。传统交换技术是在OSI网络标准模型第二层——数据链路层进行操作的,而三层交换技术是在网络模型中的第三层实现了数据包的高速转发,既可实现网络路由功能,又可根据不同网络状况做到最优网络性能。

82、连接两个局域网需要用什么设备,在哪层?
网络层。

83、路由器与交换机有什么区别?
(1)工作层次不同
  最初的的交换机是工作在数据链路层,也就是第二层,路由器工作在的网络层。
  (2)数据转发所依据的对象不同
  交换机是利用物理地址或者说MAC地址来确定转发数据的目的地址。而路由器则是利用不同网络的IP地址来确定数据转发的地址。IP地址是在软件中实现的,描述的是设备所在的网络,有时这些第三层的地址也称为协议地址或者网络地址。MAC地址通常是硬件自带的,由网卡生产商来分配的,而且已经固化到了网卡中去,一般来说是不可更改的。而IP地址则通常由网络管理员或系统自动分配。
  (3)传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域。由交换机连接的网段仍属于同一个广播域,广播数据包会在交换机连接的所有网段上传播,在某些情况下会导致通信拥挤和安全漏洞。连接到路由器上的网段会被分配成不同的广播域,广播数据不会穿过路由器。交换机是连接同一网段的设备。互联网是由无数个路由器组成的,几个交换机组成的是同一个局域网。

84、路由的原理
RIP路由协议:基于路径向量,经过一个路由器跳数加1,认为好的路由就是它通过的路由器树最少,超过15认为不可到达,网络规模不能大,只能适合小型互联网,任意两个使用RIP协议的路由之间每30秒广播一次更新信息,特点仅和相邻的路由交换信息,交换信息是当前本路由器所知道的全部信息,固定时间30秒一交换。优点是简单开销小。缺点是规模不能大,出现故障收敛慢啊。使用UDP传送数据。不一定时间最短但是跳数最少。
距离向量算法:每一个相邻路由器发送过来的RIP报文,把所有下一跳都修改成那个路由器,距离加一,然后更新自己,没有到目的网络的之间加,有的且下一跳是那个路由的直接改不是那个路由的看短就改。
OSPF协议:链路状态路由算法,它使用洪泛法向本自治系统中所有路由器发送信息,RIP只是向相邻的。发送的信息是与本路由器相邻的所有路由器的链路状态,但这是部分信息,包括链路的代价,RIP是本路由器知道全部信息就是真个路由表,只有当链路发生变化时候才用洪泛法向所有路由发送信息,收敛快不会坏消息传的慢。RIP是固定30秒。它使用IP数据报之间传送。特点是根据IP分组不同服务类型设置不同代价。时分灵活。所有路由器最终都直接得到一个全网拓扑结构,每个路由可以用迪杰斯特拉算法计算自己到目的最优路径,以此构造自己路由表。为了能够用于更大网络,还可将一个自治系统划分为若干个区域,好处是交换信息只在区域内。减少网络通信量。
85、路由的协议有哪些?分别简述(RIP、OSPF、BGP)
BGP协议:是不同自治系统的路由器之间交换路由信息的协议,它是一种外部网关协议,边界网关协议常常应用于互联网的网关之间,它力求寻找一种到达目的网络比较好的路由不能兜圈子,而不是最佳。采用路径向量路由选择协议,基于TCP的。原理:每一个自治系统的管理员选择至少一个路由器作为该自治系统的BGP发言人,与其他BGP发言人交换信息建立TCP连接,建立BGP会话交换信息。当所有BGP发言人都相互交换网络可达性的信息后,各BGP发言人就可找到达各自治系统的比较好的路由。
86、IPV4有什么替代方案?与IPV6有什么区别?IPv4和IPv6怎么互相通信?
采用无分类编址CIDR可以使IP地址分配更合理,使用网络前缀概念代替子网概念。使用斜线记法,IP地址/网络前缀占几位。
网络地址转换:局域网内部使用专用本地IP地址,对外可以只有一个全球IP就可以,大大提高了IP的重用性,必须利用NAT把私有IP地址转换为全球IP。大大节省全球IP。
采用具有更大地址空间的新版本的IPV6,前两种只是延迟了地址分配结束时间,IPV6从根本上解决了IP地址耗尽的问题。主要特点是:地址空间大,从32位增加到了128位,更灵活的首部格式,包含8个段(IPv4包含12个段),这一改变使得路由器可以尽快地处理
分组,从而可以改善吞吐率,更好的选项支持,以前必要现在可选了,所以加快了分组处理速度。
从IPv4向IPv6过渡可以采用双协议栈和隧道技术。双协议栈:在完全过渡到IPv6之前,使一部分主机(或路由器)装有两个协议栈。即一个IPv4和一个IPv6,通过双协议栈进行转换。隧道技术:是将整个IPv6数据报封装到IPv4数据报的数据部分,这样,使得IPv6数据报可以在IPv4网络的隧道中传输。

87、简述网际控制报文协议ICMP
为了提高数据报交付成功的机会,在网络层使用了网际控制报文协议来允许主机或路由报告差错和异常情况,ICMP作为IP数据报的数据部分加上首部,组成IP分组发送出去。有两种一种是差错报告报文,一种是询问报文。
询问报文常用的有:回送请求和回答报文、时间戳请求和回答报文。
PING命令用来探测两主机之间连通性,使用了回送请求与回答报文,tracert使用了ICMP时间超过报文,用于确定 IP 数据包访问目标所采取的路径。

传输层
88、什么是拥塞控制?有哪些算法?与流量控制什么区别?
网络拥塞:拥塞现象是指到达通信子网中某一部分的分组数量过多,使得该部分网络来不及处理,以致引起这部分乃到整个网络性能下降的现象,严重时甚至会导致网络通信业务陷入停顿即出现死锁现象。
TCP拥塞控制:就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载,当出现拥塞时候,端点并不能了解到拥塞发生的细节,对通信连接的端口来说拥塞往往表现为通信时延的增加。拥塞控制室让网络能承受现有负荷,是一个全局过程,涉及所有主机和路由器。流量控制只是点对点的通信量控制。
发送方维持一个拥塞窗口cwnd的状态变量,大小取决于拥塞程度,并且动态变化。慢开始算法,先令拥塞窗口cwnd=1,最大报文长度为1,每收到一个确认增大一倍。呈指数增长,当增大到规定好的阀值就改用拥塞避免算法,每次加一不时加倍了。当网络出现拥塞时,就是超时事件发生后把阀值减半,拥塞窗口cwnd重新设置为1,执行慢开始算法。迅速减少发送到网络中的分组数,使发生拥塞的路由器有足够时间处理完积压的分组。当发送方连续收到三个重复确认报文,就直接重传对方尚未收到报文段,不必等待计时器。快恢复就是把阀值减半,把窗口cwnd设置为减半后的数值直接加法增大。

89、TCP连接和UDP连接有什么区别?分别适用什么情况?
TCP在不可靠的IP层之上实现的可靠数据传输协议,主要解决可靠的、有序、无丢失和不重复的问题。是面向字节流的把应用程序交付下来的数据看成一连串无结构的字节流。传送的数据单元称为报文段。TCP是面向连接的服务,在传送数据之前必须建立连接,数据传送结束后要释放链接,TCP不提供广播或组播服务,开销较大如确认,流量控制,计时器等。不仅使数据单元头部增大很多,还占用许多处理机资源。TCP提供的是可靠传输,连接采用客户服务器方式,连接建立需要三次握手。主要用于可靠传输如FTP,HTTP。
UDP无需建立连接,首部开销小,没有拥塞控制,某些应用要求以稳定的速度发送,能够容忍一些数据丢失,但不允许有较大时延,正好UDP满足。提供最大努力支付,不保证可靠交付,UDP是面向报文的,直接把应用层报文增加首部就交IP层不经过合并和拆分,接受IP层交来的UDP数据报直接去除首部给应用层进程一次交付完整报文。

应用层
90、简述应用层的协议(HTTP、DNS、FTP、DHCP、SMTP、POP3)
DNS:用来把便于人们记忆的含有特定含义的主机名转换为便于机器处理的IP地址,DNS使用了大量域名服务器,他们以层次方式组织,没有一台域名服务器具有因特网上所有主机的映射,采用分布式设计,分为根域名服务器,知道所有顶级域名服务器的IP地址,不管哪个本地域名服务器,只要自己无法解析,就求助于它,它会告诉你应该找哪个顶级域名服务器。顶级域名服务器负责管理在该顶级域名服务器注册的多有二级域名,当收到DNS查询请求,就给出相应回答,可能是结果,也可能是下一个应该找的域名服务器地址。每一个主机都必须在权限域名服务器处登记,它总能将管辖的主机名转换为该主机IP地址。每一个ISP服务提供商都有一个本地服务器,查询先送给本地域名服务器。主机向本地域名服务器采用递归查询,或者返回结果或者报错。本地域名服务器向根域名服务器查询采用迭代查询。要么给出地址,要么告诉你去哪找。
FTP:文件传输协议,提供交互式的访问,允许客户指明文件类型与格式,它屏蔽了各计算机系统的细节,因而适合于在异构网络中任意计算机之间传送文件,采用客户服务器工作方式,使用TCP可靠的传输服务。一个FTP服务器进程可同时为多个客户进程提供服务。在工作时使用两个并行连接,一个是控制连接用来传输控制信息,如连接请求。一个是数据连接,完成实际文件传送。
SMTP:邮件发送协议,用于用户代理向邮件服务器发送邮件或在邮件服务器之间发送邮件。采用TCP连接,它连接时候不使用中间服服务器,不管多远就与目的服务器建立连接, 然后传输邮件,然后释放。
POP3:邮件接收协议,当用户读取邮件时,用户代理向邮件服务器发出请求,使用POP3协议将自己的邮件从接收方邮件服务器的用户邮箱中取回。也采用TCP。
MIME:多用途网络邮件扩充,没改动SMTP只是定义传送编码。
HTTP:超文本传输协议,定义了浏览器怎样向服务器请求网页文档,以及服务器怎么样把文档传送给浏览器,是面向事务的应用层协议,规定了在浏览器和服务器之间的请求和响应的格式和规则,是万维网上能够可靠交换文件的重要基础。域名解析后浏览器通过TCP向服务器发送建立连接请求,然后浏览器向服务器发送请求,服务器通过HTTP响应把请求的文件发送给浏览器,连接释放
DHCP:动态主机配置协议,用于给主机动态分配IP地址,是应用层协议,基于UDP的,需要IP的主机在启动的时候就广播发送发现报文,这时该主机就成为DHCP客户,所有主机都收到这个报文,但只有DHCP服务器才回答此广播报文,在其数据库中查找该计算机的信息,如果找到,就返回。没有就从服务器IP地址池中取一个地址分配给该计算机。回答报文叫提供报文,地址是临时的,这段时间成为租用期,数值由服务器自己决定。
91、简述P2P协议
P2P思想是整个网络中的传输内容不再保存在中心服务器上,每个节点都同时具有上传下载功能,每个节点即作为客户访问其他节点资源,也作为服务器提供资源给其他节点访问,当前比较流行的P2P应用如PPLive。
优点:减轻了服务器压力,消除对某个服务器的完全依赖,可以将任务分配到各个节点上。可扩展性好,传统服务器有响应和带宽限制,只能接受一定数量请求,网络健壮性强,单个节点失效也不会影响其他部分的节点。
缺点:占用用户过多内存资源,影响整机速度,也使网络变得非常拥堵。

92、网络安全性有哪些方面,网络服务质量包括哪些方面?什么是QoS?
QoS:(QualityofService)服务质量是一种安全控制机制,它提供了针对不同用户或者不同数据流采用相应不同的优先级,或者是根据应用程序的要求,保证数据流的性能达到一定的水准。在正常情况下,如果网络只用于特定的无时间限制的应用系统,并不需要QoS,比如Web应用,但是对关键应用和多媒体应用就十分必要。当网络过载或拥塞时,QoS能确保重要业务量不受延迟或丢弃,同时保证网络的高效运行。
网络安全:是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断。网络安全从其本质上来讲就是网络上的信息安全。从广义来说,凡是涉及到网络上信息的保密性、完整性、可用性、真实性和可控性的相关技术和理论都是网络安全的研究领域。网络安全是一门涉及计算机科学、网络技术、通信技术、密码技术、信息安全技术、应用数学、数论、信息论等多种学科的综合性学科。

五、计算机硬件部分

计算机硬件概述
93、什么是冯诺依曼体系结构?有什么特点?
之前存储器只存放数据,不存程序,后来冯诺依曼提出了存储程序的概念,此概念为基础的各类计算机统称为冯诺依曼机。特点是计算机由运算器,存储器,控制器,输入输出设备5大部件组成,指令和数据以同等地位保存于存储器内,并可按地址访存。指令和数据均用二进制代码表示。指令在存储器内按顺序存放。机器以运算器为中心,输入输出设备与存储器之间的数据传送通过运算器完成。

94、什么是三态门?
三态门:逻辑门的输出端除有高低电平两种状态以外,还有第三种高阻态,相当于隔断状态。比如内存中一个存储单元,写低电平,读高电平,但不读不写就要用高阻态,就像把存储单元隔离开来一样。

95、什么是386保护模式?
80386有的一种工作模式,在这种模式下80386处理器才能充分发挥它的高性能特点。保护模式的特点:在保护模式下80386采用了全新的分段和分页内存管理技术,不仅允许直接寻址4GB内存空间,而且允许使用虚拟存储器。支持多任务工作方式。可以使用0-3级优先级保护功能,实现程序与程序之间,用户与操作系统之间的保护与隔离,为多任务操作系统提供优化支持。而8086只支持单任务。还引入优先级概念。每个存放程序和数据的存储段都被赋予不用的优先级。0为最高3为最低,实际上是某一任务使用处理器资源的权利,0级可以使用整个处理器资源,操作系统核心为0级,1级赋予外设驱动,系统服务等,2级用来保护一下子系统,如数据库系统。一般用户只能拥有3级权利,也称用户级。

96、PC机端口是同步还是异步?什么是异步?异步通信有没有时钟信号?
同步传输方式:该方式的数据传输在一个共同的时钟信号控制下进行,时钟通常由时钟发生器发出,经分频电路送到总线上的所有模块,总线操作有固定时序,所有信号与时钟的关系在时序上是固定的,主控模块和受控模块之间没有其他应答、控制信号。
同步传输:系统采用一个统一的时钟信号来协调发送和接受双方的传送定时关系,优点是传输速率快,缺点是必须按最慢的模块设计公共时钟,当差别大时,损失总线效率。
异步通信:不要求所有部件严格的统一操作时间,而是采用应答的方式,不互锁:没有相互制约关系,不必等待回答等一段时间默认从模块收到请求信号,撤销请求信号。半互锁必须等回答才撤销。全互锁:主模块发出请求信号后,等待从模块回答才撤销,从模块发出回答后也必须等接受到主模块的应答信号才撤销回答信号。

97、什么是指令周期、时钟周期、总线周期?之间有什么关系?一条指令有几个机器周期?
时钟周期:处理操作的最基本单位。(CPU的主频)
指令周期:取出并执行一条指令的时间。
机器周期:计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作。完成一个基本操作所需要的时间称为机器周期。时钟周期:处理操作的最基本单位。(CPU的主频)
指令周期、机器周期和时钟周期之间的关系:指令周期通常用若干个机器周期表示,而机器周期时间又包含有若干个时钟周期。
总线周期:通常把CPU通过总线对微处理器外部(存贮器或I/O接口)进行一次访问所需时间称为一个总线周期。一个总线周期一般包含4个时钟周期,这4个时钟周期分别称4个状态即T1状态、T2状态、T3状态和T4状态,必要时,可在T3、T4间插入一个至数个Tw。

指令和汇编
98、8086微处理器的组成和寻址方式,有哪些段寄存器?什么作用
总线接口部件BIU:指令队列缓冲器、地址加法器、4个段寄存器、16位的指令指针寄存器和输入输出控制电路。BIU是8086与外部设备的借口负责处理所有总线操作。包括提供20位地址总线、16位数据总线和所有的控制总线信号,并且生成2位物理地址,负责从内存指定地址处取出指令,送到指令队列缓冲器中排队,当需要操作数时,也由BIU从内存的指定地址中取出、传送给EU进行运算。
执行部件EU:包括4个通用寄存器、四个专用寄存器、标识寄存器、算数逻辑单元和EU控制电路。EU负责指令的译码执行,指令规定的运算器都由EU完成。指令执行过程中取指令和译码执行阶段是分别由不同部件完成的。当EU执行一条指令时,BIU就可以取出下一条指令,送往指令流队列中排队。在一条指令执行完以后,即可以立即执行吓一跳指令,减少CPU为取指令而等待的时间,提高了CPU利用率和整个微处理器的运行速度。
寻址方式:立即寻址、直接寻址、寄存器寻址、寄存器间接寻址、寄存器相对寻址、基址変址寻址、相对基址変址寻址。
CS代码段寄存器,存放当前程序所在段的首地址。DS数据段寄存器,存放当前程序所用数据段的首地址。SS堆栈段,存放当前程序所用堆栈段的首地址。ES附加段寄存器,存放附加数据所在段的首地址。
99、call和return具体做了哪些工作
call:参数压栈、返回地址压栈、保护现场
return:返回地址、恢复现场

100、什么是RISC和CISC,比较一下两者区别和优缺点
CISC:指令系统复杂庞大,80%的程序使用其20%的指令,使用频率差距太大,难以优化编译生成高效目标代码程序。由于指令丰富有专门指令完成特定功能,因此,处理特殊任务效率高。
RISC:设计者主要把精力放在那些经常使用的指令上,尽量使用它们具有简单、高效的特性。对不常用的功能,常通过组合简单指令来完成。因此RISC机器上实现也属功能时,效率可能较低,但可以利用流水线技术和超标量技术加以改进和弥补。

101、算术右移,逻辑右移,循环右移区别
算数右移最高位不变,其他和逻辑右移一样。循环右移右边移出的到左边来。

存储器系统
102、高速缓存(Cache)的工作原理以及替换算法更新策略
根据局部性原理,可以在主存和CPU之间设置一个高速的容量相对较小的Cache,如果当前正在执行的程序和数据存放在Cache中,程序运行不必从主存储器取指令和数据,而是访问这个Cache即可。Cache中保存的内容是CPU对主存储器当前访问频度较高区域中内容的映像。操作时将所访问存储器的物理地址同时送主存储器和Cache,Cache控制器对CPU输出的地址进行检测比较,若Cache标记区中所对应的地址码则称为命中,否则称为失效。命中了CPU就从Cache中读取需要的指令或数据,失效CPU从主存储器中读取指令代码或数据的同时将当前被访问主存储器相邻单元中的内容复制到Cache中,保证CPU所执行的访问操作主要集中在CPU和Cache之间。
工作原理:把Cache和主存分成若干块,块大小要保持相同,Cache与主存之间是以块为单位进行数据交换的。块的大小通常以在主存的一个读、写周期中能访问的数据长度为限。Cache容量远小于主存容量,所以Cache中字块远少于主存中的块数,只有一小部分的内容可以放到Cache中,保存主存中最活跃的若干块的副本,在Cache中的每一块都有一个标记,用于指明它是主存哪一块副本的映像,所以该标记的内容相当于主存中快的编号。当CPU发出请求时候,将主存地址或一部分与Cache块的标记字段比较,相等就命中了。不相等访问失效,根据替换算法,将该数据所在的整个字块从主存一次掉进Cache中。
直接映像:一般是主存地址对Cache块数取模得到Cache中的块地址,相当于主存的空间按Cache尺寸分区,每区内将相同块号映像到Cache中相同位置。访问时候根据主存中块号读出块表中的组号,并与当前地址的区号进行比较,结果相同表示Cache命中。成本低易实现地址变换速度快,但是不够灵活有空地方也去不了。
全相联映像:就是主存中任何一个字块均可以映像装入到Cache中任何一个块的位置上,也允许从被占满的Cache存储器中替换任何一个。但它地址变换需要与Cache的全部标记进行比较才能判断出所访主存地址的内容是否已在Cache中。这种比较速度慢,成本高。
组相连映像:对直接和全相连映像的折中,该方式是将主存空间按Cache大小等分成区后,再将主存空间的每一区和Cache空间都分成大小相等的组,每组再等分成大小相等的块。让主存各区中某组中的任何一块,均可以之间映像装入Cache中对应的任何一块位置上。
替换算法:先进先出、最近最少使用LRU算法、随机。
写策略:直写法,CPU对Cache和主存同时写操作。回写法:换出时候写回。
103、比较SRAM、DRAM、ROM、EPROM、EEPROM、闪存
RAM:随机存储器,内容可读可写,主要用来存放程序、输入的数据以及结果。当断电会全部丢失。
SRAM:静态随机存取存储器:速度非常快,基本存储电路为6个MOS管组成一位,依靠双稳态电路内部交叉反馈的机制存储信息,集成度低,结构复杂,功耗大,成本高一般用于高速缓存Cache。
DRAM:依靠电容存储电荷的原理存储信息,如单管存储电路由一个MOS管以及一个电容组成,因此必须周期性地对其刷新,集成度高,成本低,功耗低,但必须外加刷新电路,一般PC机上内存。
MROM:掩膜ROM是由半导体厂家用掩膜技术写入程序,其内容只能读出,不能改变。
PROM:是由使用特殊方法对它进行编程,但只能写一次,一次编程就不能修改。
EPROM:光可擦除可编程存储器,固化的程序可以用紫外线光照射存储器芯片上的透明窗口,使芯片内容被删除,擦出后又可以重新固化新的程序和数据。只能整个芯片擦除。
EEPROM:电可擦除可编程存储器:在不同引脚加不同电压就可以实现全片或字节擦写。
FLASH存储器:闪存,虽然属于内存的一种,但是断电不丢失。U盘里就是。Flash存储器都是按块来读取数据的,不是字节。

104、简述RAM和ROM的原理和区别
RAM是随机存储器,可读可写断电数据消失,内存就是。
ROM是只读存储器:内容只能读不能写的存储器,制造时候写入。通常存放固定不变的程序,断电信息不会丢失。

105、什么是RAID(磁盘阵列),简述一下
RAID:(廉价冗余磁盘阵列)是指由多个小容量磁盘代替一个大容量的磁盘,可以将数据交错存放在多个磁盘上,使之可以并行存取,RAID0是最简单的阵列架构,写入资料分成数个小块,在同时送到不同的磁盘内存储,读取资料时也需要从不同的磁盘内读取,然后再重新组合。存取速度大大加快,缺点就是如果有一个磁盘数据损坏了,整个资料不完整无法读取了。
RAID1:镜像备份,把所有资料保持一份完全相同的备份,使得资料完全一样。写入时,相同的资料会同时写入到磁盘阵列中的每一个磁盘,读取仅从其中一个读取即可。

输入输出系统
106、简述IO接口
设置接口原因:1、IO设备速度较慢,与CPU速度严重不匹配,通过接口可以实现数据缓冲。2、一台机器通常配有多台IO设备,他们各自有其设备编号,通过接口可以实现IO设备选择3、某些设备是串行传输、而CPU是并行传送,通过接口可以实现数据串一并格式的转换。
IO接口功能:1、设备选择功能,通过设备选择线上的设备码来确定,该设备码送至所有设备接口,与本设备码相符合,发出设备选择中信号。那么这个信号便可以控制这个设备通过命令线、状态线、和数据线与主机交换信息。2、传送命令功能,IO接口中设有存放命令的命令寄存器以及命令译码器,当选择电路输出SEL信号,命令寄存器才接收命令码。3、传送数据功能,还应该具有数据缓冲的能力。4、反映IO设备工作状态,比如没准备好。
IO编址有两只方式:统一编址和不统一编址。统一编址是将IO的地址码和主存的地址码统一起来,指令和访问内存的一样。统一编址占用了存储空间,减少主存容量。不统一编址就是IO设备的访问有专用IO指令,不影响主存容量,但需要专用指令。

107、简述程序查询方式
查询方式又称为程序控制IO方式,查询环节主要通过读取状态寄存器的标识位来检查外设是否就绪。若没有就绪则程序不断循环,直到就绪后才继续进行下一步工作。如果多个端口状态需查询,可定义多个标识位采用轮流查询控制程序容易编写,且工作可靠,适应面宽,但由于需要不断测试状态信息,CPU浪费。

108、简述程序中断查询方式和流程,中断可不可以被打断?哪些情况?断点问题
中断方式:CPU启动IO后,不必停止现行程序的运行,而IO接到启动命令后,进入自身的准备阶段。当准备就绪,就向CPU提出请求,此时CPU立即中断现行程序,并保存断电,转至执行中断服务程序,为IO服务。中断服务程序结束后,CPU又返回到程序的断电处,继续执行源程序。这种方式CPU效率得到了提高。
保护现场:保存程序断点,保存通用寄存器和状态寄存器的内容。将个寄存器内容推入堆栈中保存。
中断的流程:1中断请求和响应阶段,CPU在每条指令执行的最后一个机器周期采样中断请求信号,在执行完当前指令后,进入是否响应中断的判断流程,如果是内部中断或NMI非屏蔽中断,CPU自动形成中断类型号,如果是INTR可屏蔽中断,进入中断响应周期从数据线总线获取中断类型号。INTR还要看IF是否允许中断。2、中断自动处理阶段:标识寄存器入栈,令TEMP=TF,暂存TF状态,然后IF和TF清零,CS和IF入栈,根据中断类型号查中断向量表,这些都是硬件自动完成。3、中断服务阶段:主要执行相应中断服务子程序,所做的处理视应用场合而定。4、中断返回:当执行IRET时,自动弹出IP和CS以及标识寄存器,返回中断前程序位置,执行下一条指令。

109、什么是DMA,DMA控制器的组成和工作原理
程序中断方式虽然减少CPU等待时间,使设备和主机在一定程度上并行工作,但在这种方式下,每传送一个字或字节都要发送一次中断,去执行一次中断服务程序,并且保护现场也要花费一定时间。
DMA方式是一种完全由硬件进行成组信息传送的控制方式,具有程序中断方式的优点,即在数据准备阶段,CPU与外设并行。它还降低了CPU传送数据时的开销,这是因为信息传送不再经过CPU,而在外设和内存之间直接进行,因此成为直接存储器存取方式,由于数据传送不经过CPU,也不需要保护现场。数据块传送结束给CPU结束信号。

110、简述通道方式
IO通道是指专门负责输入输出的处理机。IO通道方式是DMA方式的发展,可以进一步减少CPU的干预,即把对一个数据块的读为单位的干预,减少为对一组数据块的读写及有关的控制和管理为单位的干预,同时又可以实现CPU、通道和IO设备三者的并行操作,从而更有效地提高整个系统的资源利用率。
例如当CPU要完成一组相关的读写操作及有关控制时,只需向IO通道发送一条IO指令,已给出其所要执行的通道程序的首地址和要访问的IO设备,通道接到该指令后,通过执行通道程序便可以完成CPU指定的IO任务,数据传送结束时向CPU发中断请求。
通道与一般处理机的区别是通道指令单一,没有自己内存,通道所执行的通道程序是放在主机的内存中的,也就是说通道与CPU共享内存,与DMA区别是DMA方式需要CPU控制传输的数据块大小、传输的内存位置、而通道方式中这些信息是由通道控制的。
111、简述显卡作用,原理。
显卡:又叫显示适配器,是个人电脑最基本组成部分之一,是将计算机系统所需要的显示信息进行转换驱动,并向显示器提供行扫描信号,控制显示器正确显示,是连接显示器和个人电脑主板的重要元件,是“人机对话”的重要设备之一。
工作原理:1、将CPU送来的数据送到北桥(主桥)再送到GPU(图形处理器)里面进行处理。2、将芯片处理完的数据送到显存。3、从显存读取出数据再送到RAMDAC进行数据转换的工作(数字信号转模拟信号)。4、将转换完的模拟信号送到显示屏。
112、中断的一些概念,软件中断,硬件中断
中断:计算机在执行程序的过程中,由于某种特殊原因,向CPU输入一定特定信号,使之执行完现行一条指令后,终止现程序转去执行相应中断服务子程序,当中断服务子程序执行完毕在回来执行被中止的程序。
中断源:可引起中毒的原因称为中断源。中断的作用:实现CPU与IO设备并行工作,具有处理器应急事件能力,可实现实时处理,实现人机对话等。
软件中断:不是随机产生的中断是程序以指令形式产生的中断,由它可以引出一段具有特定功能的程序,通常有三种情况引起。1、由中断指令INT引起的中断2、由CPU的某些运算错误引起的中断3、由调试程序debug设置的中断。都是不可屏蔽。IF也无效。
硬件中断:是随机产生的不是程序事先安排好的,当这种中断发生后,由中断系统强迫CPU终止现行程序并转入中断服务子程序。中断源可能来源:硬件故障或外设引起的中断。只有可屏蔽中断看IF标准。
向量中断:事先将系统所有中断服务子程序的首地址集中组织存放在一个内存空间,叫中断向量表,每四个字节存放一个中断服务子程序的入口地址,一共可存放256个中断向量,较高地址的两个单元存放中断服务子程序的入口地址,较低地址两个单元存放段内偏移量,其值就是中断类型吗乘以4。
响应中断后,先将标识寄存器内容压栈,然后执行一个段间间接调用指令CALL相当的过程来启动一个中断过程,该过程中CPU将CS和IP压栈,以保存断点地址,然后将重点向量表中相应4个字节放入IP和CS转入中断过程。
非向量中断:中断服务子程序入口地址不能直接提供,由CPU查询之后得到。
可屏蔽中断:微处理器内部能够禁止的中断,是CPU响应各种外部设备中断的最常用的方法,是通过INTR引脚产生的。它受CPU内部中断允许标识IF控制。
不可屏蔽中断:处理器内不能禁止的中断,是一种为外部紧急请求提供服务的中断,它通过CPU的NMI引脚产生的,不受IF屏蔽,优先权比可屏蔽中断高。
中断嵌套:CPU在处理某个中断服务程序的过程中CPU又响应级别更高的中断请求。
多级嵌套中断过程:CPU响应中断后,首先关中断以保护程序的断点和现场,就是把断点处有关寄存器内容以及标识寄存器状态,压入堆栈中保存,判断中断源,并转入相应中断服务子程序,并开中断,可以响应更高优先级,实现嵌套。执行服务子程序完成中断服务,然后关中断恢复断点处有关寄存器数据,关中断为了保证恢复现场完整。然后恢复现场,与前面入栈过程对应。然后开中断,中断返回。
中断请求触发器:当触发器为1,该中断源向CPU发出中断请求信号。

控制单元
113、什么是组合逻辑设计和微程序设计?比较两者区别和优缺点
组合逻辑控制:基本的门电路组合实现,这种方式实现的控制器的处理速度快,当电路庞杂,制造周期长,不灵活,可维护性差。
微程序控制:仿照程序设计的方法编写每个机器指令对应的微程序,每个微程序由若干条微指令构成,各微指令包含若干条微命令。所有指令对应的微程序放在只读存储器中,当执行到某某指令时,取出对应微程序中的各条微指令,译码产生对应微命令,送到机器响应地方,控制其动作,微程序控制方式控制单元设计简单、指令添加灵活,可维护性好,但速度慢。

114、什么是芯片组?有什么用?
芯片组(Chipset)是构成主板电路的核心。一定意义上讲,它决定了主板的级别和档次。它就是"南桥"和"北桥"的统称,就是把以前复杂的电路和元件最大限度地集成在几颗芯片内的芯片组。芯片组是整个身体的神经,芯片组几乎决定了这块主板的功能,进而影响到整个电脑系统性能的发挥,芯片组是主板的灵魂。芯片组性能的优劣,决定了主板性能的好坏与级别的高低。这是因为目前CPU的型号与种类繁多、功能特点不一,如果芯片组不能与CPU良好地协同工作,将严重地影响计算机的整体性能甚至不能正常工作。主板芯片组几乎决定着主板的全部功能。
北桥芯片:是主板芯片组中起主导作用的最重要的组成部分,也称为主桥。北桥芯片就是主板上离CPU最近的芯片,这主要是考虑到北桥芯片与处理器之间的通信最密切,为了提高通信性能而缩短传输距离。因为北桥芯片的数据处理量非常大,发热量也越来越大,所以现在的北桥芯片都覆盖着散热片或风扇用来加强北桥芯片的散热。
提供对CPU类型和主频的支持、系统高速缓存的支持、主板的系统总线频率、内存管理(内存类型、容量和性能)、显卡插槽规格,ISA/PCI/AGP插槽、ECC纠错等支持;
南桥芯片:一般位于主板上离CPU插槽较远的下方,PCI插槽的附近,这种布局是考虑到它所连接的I/O总线较多,离处理器远一点有利于布线。相对于北桥芯片来说,其数据处理量并不算大,所以南桥芯片一般都没有覆盖散热片。它提供了对I/O的支持,提供对KBC(键盘控制器)、RTC(实时时钟控制器)、USB(通用串行总线)、Ultra DMA/33(66)EIDE数据传输方式和ACPI(高级能源管理)等的支持,以及决定扩展槽的种类与数量、扩展接口的类型和数量(如USB2.0/1.1,IEEE1394,串口,并口,笔记本的VGA输出接口)等。

六、程序语言、软件工程、编译原理

程序语言

115、C语言里面指针问题,指针有哪几种?(比如指针的指针)
指向指针的指针**p,指向函数的指针(*p)(int, int)、指针数组(用于玩字符串)int *p[3];
指向数组的指针int (*p) [3]

116、C语言中结构体和共同体区别
结构体变量所占内存长度是各成员占的内存长度之和,每个成员分别占用自己内存单元。而共用体变量所占用的内存长度等于最长的成员的长度,几个变量共享一个段内存。不能一起初始化三个成员。

117、面向对象的定义和特征
面向对象是一种编程思想,把复杂的问题简单化,把我们编程时候的角色从执行者,变成指挥者,以后开发就是找对象使用,没有对象就创建一个用。并维护对象之间的关系。最大限度的重用代码,适合开发大型软件,把编程人员的精力主要放在现实世界的业务逻辑上。

118、C++和C有什么区别,什么是面向对象,面向过程?
是两种编程语言,C是面向过程,C++是面向对象。C与C++的最大区别在于它们的用于解决问题的思想方法不一样。
面向过程:就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
面向对象:面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

119、Java与C++有什么区别?
Java中对内存的分配是动态的,它采用面向对象的机制,采用运算符new为每个对象分配内存空间,而且,实际内存还会随程序运行情况而改变.程序运行中,每个, Java系统自动对内存进行扫描,对长期不用的空间作为”垃圾”进行收集,使得系统资源得到更充分地利用.按照这种机制,程序员不必关注内存管理问题,这使Java程序的编写变得简单明了,并且避免了了由于内存管理方面的差错而导致系统出问题.而C语言通过malloc()和free()这两个库函数来分别实现分配内在和释放内存空间的,C++语言中则通过运算符new和delete来分配和释放内存.在C和C++这仲机制中,程序员必须非常仔细地处理内存的使用问题.一方面,如果对己释放的内存再作释放或者对未曾分配的内存作释放,都会造成死机;而另一方面,如果对长期不用的或不再使用的内存不释放,则会浪费系统资源,甚至因此造成资源枯竭.
Java不再使用指针.指针是C和C++中最灵活,也最容易产生错误的数据类型.由指针所进行的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显式类型转换后,可以访问一个C++中的私有成员,从而破坏安全性.而Java对指针进行完全地控制,程序员不能直接进行任何指针操作.
多重继承:虽然多重继承是C或C++语言从多个父类中派生一个类的有效方法,但是由于这种派生很复杂,因而也很容易产生问题。正是由于这种原因,Java的开发者没有采用多重继承,Java的类似Objective C协议的接口能够完成C++中多重继承能够完成的所有任务。

120、从抽象的角度说说什么是类的继承和泛化、组合、聚合
继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力
泛化表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。
关联关系的一种,是强的关联关系。聚合是整体和个体的关系。聚合关系也是通过实例变量实现的。例如汽车、发动机、轮胎,一个汽车对象由一个发动机对象,四个轮胎对象组成。
组合关系也是关联关系的一种,是比聚合关系更强的关系。合成关系是不能共享的。例如人有四肢、头等。表示类之间整体和部分的关系,组合关系中部分和整体具有统一的生存期。一旦整体对象不存在,部分对象也将不存在。部分对象与整体对象之间具有共生死的关系。
实现是说明和实体之间关系

121、C语言中怎样定义字符串
Char string[] = “Hello”;
Char *string = “Hello”;

122、MVC模型
MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。视图是用户看到并与之交互的界面。模型表示企业数据和业务规则。控制器接受用户的输入并调用模型和视图去完成用户的需求,

编译原理

123、编译过程有哪些步骤,编译过程生成什么文件?
词法分析:是编译过程的第一个阶段,这个阶段任务就是从左到右,一个字符一个字符地读入源程序,对字符流进行扫描和分解,从而辨别出一个个单词,包括标识符,保留关键字以及一些符号。
语法分析:语法分析是编译过程的第二个阶段,语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如语句,表达式等。一般这种语法短语也称语法单位,可以表示成语法树。中序遍历还原。依据语言的语法规则,通过分析确定整个输入串是否构成一个语法上正确的程序。
语义分析:是审查源程序有无语义错误,为代码生成阶段手收集类型信息,比如一个工作是类型检查,审查每个运算符是否具有语言规范允许的运算对象,不符合报错,比如数组下标你写负数报错。
中间代码生成:进行语法分析和语义分析阶段的工作后,有的编译程序将源程序,编程一种内部表示形式,叫做中间代码,设计要点是容易生成,容易翻译成目标代码。
代码优化:对中间代码进行变换或进行改造,使其变得更加高效,省时间和空间。
目标代码生成:把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码,编译最后阶段与硬件系统结构和指令含义有关。

软件工程

124、软件开发步骤,模块设计规则,详细设计如何实现?
需求分析:借助当前系统逻辑模型导出目标系统逻辑模型,准确回答系统必须做什么的问题,比如功能要求,性能要求。得到数据流图。
概要设计(总体设计):就是概要的说系统如何实现,选择一个最优方案,设计软件的结构,确定系统中每个程序时有哪些模块组成的,以及这些模块相互之间关系。设计数据库
模块设计规则有:信息隐藏,把实现细节隐藏,彼此之间为了完成系统功能而必须交换的信息。模块独立:两个标准高内聚低耦合。很重要有效模块化,的软件开发容易,尤其是多人分工合作,测试维护也很方便。内聚:一个模块内部各元素彼此结合的紧密程度。耦合:衡量不同模块彼此之间相互依赖的紧密程度。
详细设计:不时具体编程,而是设计出程序的蓝图,以后程序员将根据这个蓝图写出实际的程序代码。就是对概要设计的一个细化,就是详细设计每个模块实现算法,所需的局部结构。对数据库进行设计,即确定数据库的物理结构。传统软件开发方法的详细设计主要是用结构化程序设计法。详细设计的表示工具有图形工具和语言工具。图形工具有业务流图、程序流程图、NS图。语言工具有伪码等。还有人机界面的设计。

125、什么是软件测试?测试和调试有啥区别?
调试是程序完工前的工作,调试前的程序一般都不是正确的,调试后才是正确的。就是通过种种手段,将程序中的bug给定位出来,然后解决。
测试是程序基本完成以后的步骤,一般是作为正确性验证的,测试可能会发现问题

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐