软件工程复试总结分析Word文件下载.docx
- 文档编号:19818761
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:39
- 大小:63.41KB
软件工程复试总结分析Word文件下载.docx
《软件工程复试总结分析Word文件下载.docx》由会员分享,可在线阅读,更多相关《软件工程复试总结分析Word文件下载.docx(39页珍藏版)》请在冰豆网上搜索。
关系模式是静态的、稳定的,而关系是动态的,随时间不断变化的,因为关系操作不断更新数据库中的数据。
通俗的说:
关系是一张二维表,关系模式是表格的描述(表头),关系名是表名,元祖是一行,属性是列,分量一条记录中的一个列值。
4、什么是关系数据库?
关系和二维表有什么区别?
关系数据库,是建立在关系数据库模型基础上的数据库,借助于集合代数等概念和方法来处理数据库中的数据。
在关系模型中,数据结构表示为一个二维表,一个关系就是一个二维表(但不是任意一个二维表都能表示一个关系。
表中的第一行通常称为属性名,表中的每一个元组和属性都是不可再分的,且元组的次序是无关紧要的。
5、关系的完整性(实体完整性、参照完整性、用户自定义)和数据库主键的约束性
实体完整性:
关系的主码不能取空值,如果主码由若干属性组成都不能为空。
实体以主码作为唯一性标识。
参照完整性:
一个关系中的外码,或者取空值(若属性组全为空),或者等于它参照的那个关系的主码值。
用户自定义完整性:
针对具体关系数据库的约束。
数据库语言SQL
6、什么是DDL、DML、DCL?
(数据库语言有哪几种?
)
数据定义语言(DDL):
Create、Drop、Alter
数据操纵语言(DML):
Insert、Update、Delete
数据控制语言(DCL):
Grant、Revoke
数据查询语言:
Select
7、什么是视图,有什么作用?
在数据库哪层?
视图:
是从一个或几个基本表导出的表,是一个虚表,数据库只存放视图的定义,不存放视图对应的数据,数据仍放在原来的基本表,基本表数据改变,通过视图查询也改变了,
作用:
1、能够简化用户操作,使数据库看起来更简单,清晰,简化查询操作。
2、更安全,机密数据不出现在不应该看到这些数据的用户视图上。
3、重构数据库时候,改变视图不用修改程序,使数据具有逻辑独立性。
数据库设计
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引用数据,语句级不能。
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网。
在项目管理中,关键路径最长的那个路径,决定了整个项目的最短完成时间。
把关键路径上的活动成为关键活动,关键活动影响了整个工程的时间,即如果关键活动不能按时完成的话,整个工程完成时间就会受到影响。
事件最早发生时间:
从开始顶点到下一个顶点最长路径长度。
它决定了它后面的活动的最早发生时间。
事件最迟发生时间:
工程不推迟的前提,该事件最迟必须发生的时间,从后往前计算,边值最小的。
活动的最迟发生时间:
活动终点所表示事件最迟发生时间与该活动所需时间之差。
查找与排序
29、什么是折半查找?
时间复杂度多少?
前提条件是什么?
过程如何?
1.必须采用顺序存储结构2.必须按关键字大小有序排列。
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
时间复杂度:
其算法复杂度为O(logn)
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很大,记录的关键字位数较少且可以分解,采用基数排序较好。
当记录本身信息量很大,为了避免移动,可以考虑链表。
3、操作系统部分
操作系统概述
35、操作系统用到了那些数据结构?
举例说明
进程调度后备队列,先进先出算法
短进程优先算法用了堆
动态分区分配,首次适应算法。
在此算法中,空闲区链按起始地址递增顺序排列,在进行内存分配时,从链首开始顺序查找,直到找到一个能满足其大小要求的空闲区为止。
循环首次适应算,循环链表。
目前广泛流行公用缓冲池,池中的缓冲区可供多个进程共享。
它把相同类型的缓冲区链成一个队列
索引顺序文件:
记录分组,索引表中为每组中的第一个记录建立一个索引项,组与组之间关键字必须有序,组中关键字可以无序。
通过索引表找到所在组。
散列文件:
没有顺序特征。
文件分配磁盘块方式:
链接分配,索引分配。
系统调用的过程?
操作系统的组成?
内核提供一系列具备预定功能的多内核函数,通过一组称为系统调用(systemcall)的接口呈现给用户。
系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理,将处理结果返回给应用程序。
系统调用通常包括:
进程控制、文件系统控制、内存管理、网络管理,进程通信等。
基本功能:
处理机管理,处理器的分配和运行实施有效的管理,如进程控制,同步,通信,调度。
存储器管理,对内存分配、保护、扩充。
设备管理,对计算机系统内的所有设备实施有效管理,比如设备分配,缓冲和虚拟,设备传输控制,设备独立性。
文件管理,有效的支持文件的存储、检索和修改等操作,解决文件的共享、保护问题,比如文件存储空间管理、目录管理、文件操作管理。
用户接口,方便用户使用操作系统,通常有命令接口,程序接口,图形接口。
36、什么是微内核?
什么是shell?
操作系统:
操作系统是控制和管理整个计算机系统硬件和软件资源,并合理组织调度计算机的工作和资源分配。
进程管理存储管理设备管理文件管理
微内核:
操作系统的一种体系结构,将最基本的功能保留在内核,基于客户服务器模式的微内核结构,将操作系统划分两大部分,微内核和服务器,把操作系统绝大部分功能都放在服务器中实现,交互借助于微内核通信。
每个服务进程允许在独立用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 复试 总结 分析
![提示](https://static.bdocx.com/images/bang_tan.gif)