一、简答题
1.请简述TCP-IP3次握手及4次挥手过程。并解释为何关闭连接需要4次挥手。(10分)
第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J(初始序号ISN),并将该数据包发送给服务器,客户端进入SYN-SENT状态,等待服务器确认。
第二次握手:服务器收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器将SYN和ACK都置为1,ack=ISN+1,随机产生一个值seq=K,并将该数据包发送给客户端,确认连接请求,服务器进入SYN-RCVD状态。
第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确,则将ACK置为1,ack=K+1,发送确认包给服务器。服务器检查ack是否为K+1,ACK是否为1,如果正确则建立连接成功,客户端和服务器进入ESTABLISHED状态,完成三次握手。
第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入FIN_WAIT状态。
第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1,服务器进入CLOSE_WAIT状态。
第三次挥手:服务器发送一个FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态。
第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。
因为服务端在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。
2.操作系统的内存管理淘汰算法(页面置换算法)有哪些,请列出并简要说明。(10分)
FIFO先进先出算法:FIFO总是选择在内存驻留时间最长的一页将其淘汰。FIFO算法认为先调入内存的页不再被访问的可能性要比其他页大,因而选择最先调入内存的页换出。实现FIFO算法需要把各个已分配页面按分配时间顺序记录在一个数组中,每次淘汰最早进入数组的页。
OPT最佳淘汰算法:该算法淘汰在访问串中最不常用的页。这样,淘汰掉该页将尽量减少因需要访问该页又立即把它调入的现象。遗憾的是,这种算法无法实现,因为它要求必须预先知道每一个进程的访问串。
LRU最近最少使用算法:其工作原理是,当需要淘汰某页,选择离当前时间最近的一段时间内最久没有使用过的页先淘汰。在这里采用一个页面集大小的栈存储最近访问的页面。页面按时间顺序压入栈中。如果访问的页在栈中,则从栈中移出页面,压入栈顶。这样栈底记录当前时间最近的一段时间内很久没有使用过的页。
LFU最少访问页面算法:LFU在需要淘汰某一页时,首先淘汰到当前时间为止、被访问次数最少的那一页。这只要给每一页增设一个访问计数器即可实现。每当该页被访问时,访问计数器加1,而发生一次缺页中断时,则淘汰计数值最小的那一页,并将所有的计数器清零。
NUR最近最不经常使用算法:NRU在需要淘汰某一页时,从那些最近一个时期内未被访问的页中任选一页淘汰。只要在表中增设一个访问位即可实现。当某页被访问时,访问位置1。否则,访问位置0.系统周期性地对所有引用位清零。当需淘汰一页时,从那些访问位为零的页中任选一页进行淘汰。如果引用位全为0或全1,NRU算法退化为FIFO算法。
3.进行数据库设计时通常需要遵守哪些范式,请列出说明。(10分)
第一范式(1NF):
在任何一个关系数据库中,第一范式(1NF)是对关系模型的基本要求,不满足第一范式的数据库就不是关系数据库。
所谓第一范式,是指数据库表中的每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性。如果出现重复的属性,就可能需要定义一个新的实体,新的实体由重复的属性构成,新实体与原实体之间为一对多关系。在第一范式中表的每一行只包含一个实例的信息。
第二范式(2NF):
第二范式是在第一范式基础上建立起来的,即满足第二范式必须先满足第一范式。第二范式要求数据库表中的每个实例或行必须可以唯一地区分。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识,这个唯一地标识就是主关键字或主键、主码。第二范式要求实体的属性完全依赖主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性,如果存在,那么这个属性和主关键字的这一部分应该分离出来形成一个新的实体,新实体与原实体之间是一对多的关系。为实现区分通常需要为表加上一个列,以存储各个实例的唯一标识。简而言之,第二范式就是非主属性非部分依赖于主关键字。
第三范式(3NF):
满足第三范式必须先满足第二范式。简而言之,第三范式要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。第三范式属性不依赖于其它非主属性。
书上讲了好多, 归结起来3句话:
1NF:字段不可分;
2NF:有主键,非主键字段依赖主键;
3NF:非主键字段不能相互依赖;
解释:
1NF:原子性 字段不可再分,否则就不是关系数据库;
2NF:唯一性 一个表只说明一个事物;
3NF:每列都与主键有直接关系,不存在传递依赖;
二、算法与程序设计题
1.寻找一个单向链表的中项,如果存在两个则返回前一个。请给出算法描述并给出代码实现。(15分)
2.在由N个正整数的集合S中:找出最大元素C,满足C=A+B,其中A,B都是集合S中的元素。请给出算法描述、代码与时间复杂度分析。(15分)
先排序,然后从最大元素T开始验证。验证时,从被验证元素T前面首位相加,大于T,则后面的last减少,小于T则前面first增加,first>=last。
时间复杂度:O(n*n)
3.使用堆栈来模拟队列(FIFO)功能,要求数据必须存储在堆栈内部。需要实现enqueue(入队),dequeue(出队),isEmpty(判空)三个功能,并给出单元测试。(15分)
用两个堆栈来实现。
三、系统设计题(25分)
略