我补充了一些,其他暂时想不起了...
数据结构(70’):
选择:(2’×12=24’)
n^log(log(logn )) =O([⌊logn⌋!])
哈夫曼编码树不同深度的两棵子树互换,必定会改变编码长度
序列中逆序数互换,逆序对必定减少
KMP即使未优化next数组也能达到线性
拥有2019个节点的真二叉树的种数比2018个括号所能够成的合法序列要少
伸展树若不具备局部性,平摊复杂度就无法达到O(logn)
具有2018个叶节点的树,对其进行层次遍历时辅助队列大小最多不超过2018
只通过前序遍历和后序遍历无法唯一确定树的层次遍历
基数排序的底层排序如果不稳定,最终结果有可能会出错
简答:(4’×8=32’)
逆波兰表达式为什么相比普通表达式计算上有效?既然在将普通表达式转换成为逆波兰的过程中已经将表达式计算出来,为什么还要进行转换?
DFS什么时候标记前向边,什么时候标记后向边
直接插入排序为什么比选择排序好
Dijkstra在处理稠密图时为啥用多叉堆取代二叉堆,如何确定多叉堆的分叉数
相比于开散列,闭散列有什么优点,举两个并简要说明
红黑树在什么情况下要优于AVL树,并解释说明为什么
相比于一般的锦标赛树,败者树有什么优点
KMP相比于蛮力算法,在什么情况下才能发挥效用,并解释说明为什么
算法题(7’+3’+4’=14’)
struct BinNode {
int size;
BinNode* lc, rc
}
Binnode* rank(Binnode* T, int k) {
//请填写代码
}
求出后序遍历的第k大的结点,要求时间复杂度和空间复杂度不超过O(depth(x))(x为第k大的节点),请不要试图直接模拟后序遍历,那样效率一定不达标,不得分
(7’)填写代码已完成上述功能(不超过12行)
(3’)解释说明代码思想,可以画一幅图
(4’)分析和计算你代码的时间复杂度和空间复杂度
组成原理(30’):
判断题(1’×5)
选择题(2’×5)
下列哪一项没有容错能力
A. RAID0 B. RAID1 C. RAID5 D. RAID6
下列关于静态存储器和动态存储器的描述正确的是
A.静态存储器使用触发器,需要定期刷新
B.静态存储器使用电容,不需要定期刷新
C.动态存储器使用触发器,不需要定期刷新
D.动态存储器使用电容,需要定期刷新
下列哪个是对的
A.虚拟内存空间比实际的地址空间大
B.虚拟内存空间比实际的地址空间小
C.虚拟内存空间连续存放,实际内存一定连续存放
D.虚拟内存空间不连续存放,实际内存有可能连续存放
填空题(10’)
(2’)+1234的32位补码(16进制,小端)
(2’)-27.625的IEEE754表示(16进制)
(3’)解决数据冲突的方法,给出三个
(3’)缓存故障类型,给出三个
计算题(5’)
给你一堆参数,然后给你5条指令,让你计算
(1’)在单周期cpu下运行时间(1’)
(2’)在多周期cpu下运行时间(2’)
(2’)在5级流水下运行时间(2’)
操作系统(30’)
填空题(15’)
(4’)系统里面会有stride机制,就是说进程分配时间和其优先级成反比,优先级越低进程上CPU运行的时间就会更长,用八位无符号数来表示进程A的运行时间有可能会溢出,但是当1)步长s 127时,只要做小小的技巧就仍可以正确判断时间,然后又引入进程B,a为A的stride,b为B的stride,当2)sign(a-b) 时说明A正在运行,此时3)a+s 256,当4)sign(a+s-b) 0时,轮到B运行
(2’)特权级检查语句“CPL>=DPL[段]&&CPL<=DPL[门]”中,要求当前优先级不小于段描述符DPL的语句是5) ,要求当前优先级不大于门描述符DPL的语句是6)
(4’)PV操作填空
classSemaphore {
int sem;
WaitQueue q;
}
Semaphore::P() {
7)
if ( 8) ) {
Add this thread t to q;
block(p);
}
}
Semaphore::V() {
9)
if ( 10) ) {
Remove a thread t from q;
wakeup(t);
}
}
(1’)cr3寄存器中存储的是页表的起始13)
(2’)文件F的inode节点引用初始值为1,对F创建一个软链接A,然后用B对F做硬链接,用C对B做硬链接,则B的inode节点引用值为14) ,C的inode的节点引用值为15)
判断题(5’)
运行只有main()函数的程序只有一个线程
不安全状态一定是死锁
Ucore代码题(lab4进程切换)(6’)
问:页表切换的代码是哪一行?堆栈切换的代码是哪一行?switch_to代码中在哪里接收传入的from和to两个参数?
.globl switch_to
switch_to: # switch_to(from, to)
# save from's registers
movl 4(%esp), %eax # eax points to from(考卷上故意把这一个注释删了)
popl 0(%eax) # save eip !popl
movl %esp, 4(%eax)
movl %ebx, 8(%eax)
movl %ecx, 12(%eax)
movl %edx, 16(%eax)
movl %esi, 20(%eax)
movl %edi, 24(%eax)
movl %ebp, 28(%eax)
# restore to's registers
movl 4(%esp), %eax # not 8(%esp): popped return address already
# eax now points to to:(考卷上故意把这一个注释也删了)
movl 28(%eax), %ebp
movl 24(%eax), %edi
movl 20(%eax), %esi
movl 16(%eax), %edx
movl 12(%eax), %ecx
movl 8(%eax), %ebx
movl 4(%eax), %esp
pushl 0(%eax) # push eip
ret
struct proc_struct {
enum proc_state state; // Process state
int pid; // Process ID
int runs; // the running times of Proces
uintptr_t kstack; // Process kernel stack volatile
bool need_resched; //
bool value: need to be rescheduled to release CPU?
struct proc_struct *parent; // the parent process
struct mm_struct *mm; // Process's memory management field
struct context context; // Switch here to run process
struct trapframe *tf; // Trap frame for current interrupt
uintptr_t cr3; // CR3 register: the base addr of Page Directroy Table(PDT)
uint32_t flags; // Process flag
char name[PROC_NAME_LEN + 1]; // Process name
list_entry_t list_link; // Process link list
list_entry_t hash_link; // Process hash list
};
void proc_run(struct proc_struct *proc) {
if (proc != current) {
bool intr_flag;
struct proc_struct *prev = current, *next = proc;
local_intr_save(intr_flag); {
current = proc;
load_esp0(next->kstack + KSTACKSIZE);
lcr3(next->cr3);
switch_to(&(prev->context), &(next->context));
}
local_intr_restore(intr_flag);
}
}
内存管理题(4’)
给你一张内存图,告诉你A的起始位置0x00, B的起始0x10,问A访问0x04和B访问0x??的过程
计算机网络(20’)
选择题(1’×6)
以太网中最短帧长1000bit,最远两点相距离100m,数据在光纤中的传播速率为2×108m/s,问最大发送速率
A.1Gb/s B.2Gb/s C.100Mb/s 4.200Mb/s
蜂窝式网络的6台主机,可以使用840的频率段,相邻两机的频率段不能重叠,则每一台机的频率段为?
A.280 B. C. D.
DNS(4’)
说明http://tsinghua.edu.cn:80/index.jsp中的组成部分
假设http://tsinghua.edu.cn:80/index.jsp的ip地址为233.233.233.233(具体值不记得了),如果通过ip地址能访问网页,但是通过http://tsinghua.edu.cn:80/index.jsp访问不了,原因可能是?
若通过http://tsinghua.edu.cn:80/index.jsp可以访问,但通过ip地址访问不了,原因可能是?
Ipv4(10’)
图大致如上,图中有三个子网,子网1有100台主机,子网2有50台主机,子网3有20台主机,而且还有三个路由器R1,R2,R3共6个端口,给你一个地址的路由集合(大概是202.11.23.0/24?反正主机号还剩8位)。
(7’)合理地分配子网1,2,3和e0-e6端口的IP地址(7’)
(1’)A,B是子网1中的主机,C是子网2中的主机,问A-B,A-C之间通信时候ARP协议的执行有什么不同点?
(2’)1个ip分组从A发到C,问A→R1,R1→R2,R2→C三个过程中,数据报中IP的源地址和目的地址,MAC源地址和目的地址