考研模拟面试-答案【攻略】
- 前言
- 版权
- 推荐
- 考研模拟面试-答案
- 前面的问题
- 通用问题
- 专业题
- 数据结构
- 计算机网络
- 操作系统
- 数据库
- 网络安全
- 手写题
- 数据结构
- 操作系统
- 计算机网络
- 代码题
- 基础代码题
- 其他代码题
- 后面的问题
- 补充题目
- 基础代码题答案
- 链栈
- 循环队列1
- 循环队列2
- 哈希表
- 最后
前言
2023-10-19 12:00:57
以下内容源自《考研模拟面试-答案》
仅供学习交流使用
版权
禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://jsss-1.blog.csdn.net
禁止其他平台发布时删除以上此话
推荐
如果简历的话,看一下简历
以下题目都是本人亲自想出来的
如果你能信手拈来,那你绝对没有问题的。
考研模拟面试-答案
前面的问题
请简单的自我介绍一下
你的家乡是哪?(请用英文介绍一下你的家乡)
本科专业是什么?(如果有,你为什么转专业?)
你是如何学习你的专业的?(考查学习方法)
遇到问题,你通常是怎么解决的?(考查解决困难的方法)
自己解决不了怎么办?查资料,问别人?
建议:3小时期限解决不了,就问其他人。
通用问题
你学过什么编程语言?
你认为他们之间的区别是什么?
如果提到了面向对象:
可问:你是怎么理解面向对象的
提示:特点或者其他理解都行
你本科课程的专业课是什么?
你认为你学的最好的一门课程是什么?
专业题
根据他的简历和问题的回答,
问其中一个或几个
数据结构
你学过什么数据结构
栈和队列的区别
字符串的匹配算法
提示:BP算法和KMP算法
跳转:手写题
树的表示法
提示:双亲表示法,孩子表示法,兄弟孩子表示法
树的遍历算法
提示:前序,中序,后序
问给定哪些就可以确定二叉树?
跳转:手写题
哈夫曼树的创建算法
跳转:手写题
二叉树和森林的转换
图的存储算法:
提示:邻接矩阵和邻接表
区别:稀疏图和稠密图
最短路径的算法
提示:Dijkstra和Floyd
最小生成树的生成算法
提示:Prim和Kruskal
区别:稀疏图和稠密图
拓扑排序算法
提示:找到入度为0的点入栈,
如果栈不为空,从栈中弹出,并删除他所对应的边,如果入度变为0就入栈
判断:栈是否为空和结点是否全部遍历
有哪些查找算法
提示:顺序,折半,hash
跳转:手写题
有哪些稳定的排序算法
提示:冒泡、插入、归并、基数
冒泡排序的优化
提示:没有交换就返回
快速排序的过程和特点,时间复杂度:O(nlog(n))
特点:第n趟排序至少有n个数到其最终位置上
跳转:手写题
计算机网络
计算机网络有哪几层?
各层的功能和协议
IP地址的分类
为什么出现无分类的
如果提到了IPv4的地址不够用,
可问:除了无分类还有哪些技术解决不够用?
提示:IPv6
课文:IPv6的地址大小是IPv4的多少倍?
提示:128/32=4倍
跳转:手写题
UDP和TCP的区别?
TCP的三握四挥
TCP如何保证可靠性
DNS的过程
Http的优化
Http和Https的区别
操作系统
有哪些进程调度算法
跳转:手写题
你对虚拟内存的理解
有哪些页面置换算法
跳转:手写题
有哪些磁盘调度算法
数据库
left join和right join的区别
数据库的三大范式
有没有需要违反范式的设计
数据库的范式
第一范式:列不可再分
第二范式:非主属性完全依赖主键
第三范式:非主属性之间不能有传递依赖
反范式化:范式化是为了减少数据冗余和消除数据更新异常,
而反范式化则是为了提高查询性能和简化复杂的查询操作。反范式化的过程可以包括合并表、增加冗余字段、创建索引等。
数据库事务及其特性
网络安全
对称加密和非对称加密算法的区别
有哪些算法
DES、3DES、AES
RSA
手写题
数据结构
前序和中序给出后序
前序遍历A-B-D-F-G-H-I-E-C
中序遍历F-D-H-G-I-B-E-A-C
后序遍历F-H-I-G-D-E-B-C-A
前序(根左右),中序(左根右),后序(左右根)
已知一颗二叉树的先序遍历结果ABDGCEF,则其可能的后序遍历结果为()。
A GDBEFCA
B DGBAECF
C BGECFDA
D BAGDECF
A肯定是根root节点
F不可能是根root节点
排除BD
C也不可能
A
A BDG CEF
- --- ---
GDB EFC A
--- --- -
A/ \B C/ / \D E F/ G
字符串“abaabcabc”的next值为() (蔚来 2023/08/24)
0 1 1 2 2 3 1 2 3
Hello World的哈夫曼编码
字母 h e l o w r d
词频 1 1 3 2 1 1 1[10]/ \[4] [6]/ \ / \[2] o(2) [3] l(3)/ \ / \h(1) e(1) [2] d(1) / \w(1) r(1)哈夫曼编码长度:
10+4+6+3+2+2=27
(2+3)*2+(1+1+1)*3+(1+1)*4=27哈夫曼编码:
o:01
l:11
h:000
e:001
d:101
w:1000
r:1001“hello world”的哈夫曼编码:
000 001 11 11 01
1000 01 1001 11 101
哈希表的平均查找长度
10 24 32 17 31 30 46 47 40 63 49
哈希表:0~17
哈希函数:n%16
哈希冲突:index=i+1
平均查找长度AVL
n 10 24 32 17 31 30 46 47 40 63 49
n%16 10 8 0 1 15 14 14 15 8 15 1地址 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
关键字 32 17 63 49 24 40 10 30 31 46 47
比较次数 1 1 6 3 1 2 1 1 1 3 3AVL=(1*6+6+3*3+2)/11=23/11
假设一个数组采用快速排序,则下面的选项中,不可能是第4趟排序结果的是
A 5,2,4,9,10,12,14
B 14,11,9,10,6,4,2
C 2,4,11,13,10,14,18
D 6,8,10,12,14,2,4
第n趟排序至少有n个数到其最终位置上
B D
操作系统
总共有70,先分配20,再分配35,回收20,在分配13,再分配11,采用最佳适应算法,最大的空闲区容量是多少
答案是9
最佳适应算法是指空闲区从小到大排序,每次选出的适应的最小空闲分区
解法是:
20 20 (20) (20) 11(9)
-- ---- ---- ---- ----
(50) 35 35 35 35 ---- ---- ---- (15) (15) 13(2)
P1,P2,P3,P4四个进程到达时间和运行时间如下所示,则使用FCFS调度算法则平均周转时间是()
进程 | 到达时间 | 运行时间 |
---|---|---|
P1 | 0 | 7 |
P2 | 2 | 4 |
P3 | 4 | 1 |
P4 | 5 | 4 |
平均周转时间=(7+9+8+11)/4=8.75到达时间 开始时间 结束时间 周转时间
P1 0 0 7 7
P2 2 7 11 9
P3 4 11 12 8
P4 5 12 16 11
计算机网络
假设某网络块192.168.112.0中存在3台主机 A 、 B 、 C 。其中主机 A 的 IP 地址为192.168.112.40,主机 B 的 IP 地址为192.168.112.72,主机 C 的 IP 地址为192.168.112.100,如果主机 A 、 B 、 C 分别属于不同的网段,且 A 、 B 、 C 共同的子网码是255.255.255.224。则下列可能与主机 A 属于同一网段的 IP 地址有哪些
A 192.168.112.32
B 192.168.112.36
C 192.168.112.40
D 192.168.112.60
同一网段的IP ,IP与子网掩码进行与操作,等于网络前缀即可
224=11100000
2^5=32
0~31 32~63 ...
其中网络地址:32 广播地址是63
当前的cwnd=8,下一个RTT之后可能会是多少
答案是:16,当前门限值,9,1,4或7如果是慢启动阶段 当前门限制>=16 ,下一个cwnd是16;8<当前门限制<16,下一个cwnd是当前门限值(9-15中的一个);
如果是拥塞避免阶段,当前门限制<=8
9
如何是超时重传,新门限值=4
1
如果是快速重传,新门限值=4
4或7
代码题
用你熟悉的语言实现?(最好是C语言)
基础代码题
请用链表实现一个栈
提示:实现入栈、出栈、取栈顶元素
#include<stdio.h>
#include<stdlib.h>
#define FALSE 0
#define TRUE 1//链栈的C语言定义如下。
typedef int DataType;
typedef struct Stacknode{DataType data;struct Stacknode * next;
}slStacktype;// 初始化
slStacktype* Init(){slStacktype *p;if((p=(slStacktype * )malloc(sizeof( slStacktype)))==NULL) return NULL;return p;
} //(1)入栈操作
//将元素x压入链栈top中
//要求:成功返回TRUE 失败返回FALSE
int PushLstack(slStacktype * top, DataType x){ }//(2)出栈操作
//从链栈top中删除栈顶元素
//要求:成功返回元素 失败返回-1
DataType PopLstack(slStacktype * top){}//取栈顶元素
//要求:成功返回元素 失败返回-1
DataType GetLsPop(slStacktype * top){}//测试
int main(){slStacktype *sl=Init();int x=1;PushLstack(sl,x);int y=GetLsPop(sl);printf("%d\n",y);//1 int z=PopLstack(sl);printf("%d\n",z);//1}
请用数组实现一个循环队列
提示:实现入队、出队、判断队空
补充:
解决假溢出问题的三个方法
来自数据结构算法习题三的综合体中的7 8
- 少用一个元素空间:
(rear+1)%MAXSIZE==front
- 设置队尾元素位置
rear
和队中元素的个数quelen
- 设置标志位
tag
,区别队满队空
#include<stdio.h>
#include<stdlib.h>
#define FALSE 0
#define TRUE 1#define MAXSIZE 10
//下面的循环以列及操作依据少用个元素空间来实现
//循环队列的类型定义及基本运算如下。
typedef int ElemType;
typedef struct{ ElemType elem [MAXSIZE];//队列的存储区//队头队尾指针int front, rear;
}CSeQueue;//循环队列//(1)置空队
CSeQueue * IniseQueue(){CSeQueue * q=(CSeQueue *)malloc(sizeof(CSeQueue));q->front=q->rear=MAXSIZE-1;return q;
}//(2)入队
//要求:入队失败返回 FALSE 成功返回 TRUE
int InSeQueue( CSeQueue * q,ElemType x){}//(3)出队
//要求:出队失败返回 FALSE 成功返回 TRUE
int OutSeQueue( CSeQueue *q , ElemType *x){}//(4) 判断队空
//要求:队非空返回 FALSE 空返回 TRUE
int EmptySeQueue(CSeQueue *q){} int main(){CSeQueue *cs=IniseQueue();int x=1;InSeQueue(cs,x);printf("%d\n",EmptySeQueue(cs));//0int x0;OutSeQueue(cs,&x0);printf("%d\n",x0);//1printf("%d\n",EmptySeQueue(cs));//1}
实现一个Hash表
提示:除留余数法+开放地址法
可问:平均查找长度
提示:编写[算法8-12]哈希表的查找HashSearch
#include<stdio.h>
#include<stdlib.h>
#define HASHSIZE 11
#define INIT -1
typedef int otherdata;
typedef struct{int key;otherdata other;
}Datatype;// [算法8-10]采用除留余数法构造哈希函数
int HashFunc(int key){return key%HASHSIZE;
}
//[算法8-11]采用线性探测再散列处理冲突
int Collision(int di){return(di+1)%HASHSIZE;
}
//[算法8-12]哈希表的查找
int HashSearch(Hashtable ht, Datatype x){}//[算法8-13] 哈希表的插入
int HashInsert( Hashtable ht,Datatype x) {int address;address=HashSearch(ht,x); if(address>=0)return 0;int times=1;address= HashFunc(x.key);//计算散列地址while(ht[address].data.key!=INIT){address=Collision(address);//没找到,处理冲突times++;}ht[address].data=x;ht[address].times=times;return 1;
}
//[算法8-14]哈希表的创建void Createht(Hashtable ht, Datatype L[],int n){int i;for(i=0;i<HASHSIZE;i++){ht[i].data.key=INIT;ht[i].times=0;}for(i=0;i<n;i++)HashInsert(ht,L[i]);}//输出
void output(Hashtable ht){printf("输出散列表\n") ; int i;printf("散列地址 关键字值 比较次数\n"); for(i=0;i<HASHSIZE;i++){printf("%8d %8d %8d\n",i,ht[i].data.key,ht[i].times);}
}
void CreateData(Datatype L[],int data[],int n){int i;for(i=0;i<n;i++){L[i].key=data[i];}
}
void printData(Datatype L[],int n){int i;for(i=0;i<n;i++){printf("%d ",L[i].key);}
}
// 19,01,23,14,55,68,11,82,36
int main(){Hashtable ht;Datatype L[9]={0};int data[9]={19,1,23,14,55,68,11,82,36};CreateData(L,data,9);printData(L,9); Createht(ht,L,9);output(ht);return 0;
}
其他代码题
回文或括号匹配
实现计算器:操作数栈和操作符栈
实现KMP算法
二叉树的遍历算法(非递归)
实现哈夫曼树
实现图的遍历
实现拓扑排序
实现最短路径
实现折半查找
实现快速排序
后面的问题
你认为你最有荣誉感或成就感的一件事?
你对自己的评价
对你最有帮助的人
你最敬佩的老师或同学,敬佩的点是什么
如果是班干部,可问:你认为怎么做好一个班干部?
你为什么选择我们学校?
你对研究生生活的期待是什么样的?
补充题目
你有什么反问我的吗?
你有什么其他问题想问后面的同学吗?
给我的题库做补充。
基础代码题答案
链栈
D:\大学学习\3-大二上学习\数据C\学习\3\3-链栈.c
#include<stdio.h>
#include<stdlib.h>
#define FALSE 0
#define TRUE 1//链栈的C语言定义如下。
typedef int DataType;
typedef struct Stacknode{DataType data;struct Stacknode * next;
}slStacktype;// 初始化
slStacktype* Init(){slStacktype *p;if((p=(slStacktype * )malloc(sizeof( slStacktype)))==NULL) return NULL;return p;
} //(1)入栈操作
//将元素x压入链栈top中
int PushLstack(slStacktype * top, DataType x){ slStacktype *p;//申请一个结点if((p=(slStacktype * )malloc(sizeof( slStacktype)))==NULL) return FALSE;p->data=x;p->next=top->next;top->next=p;return TRUE;
}//(2)出栈操作
//从链栈top中删除栈顶元素
DataType PopLstack(slStacktype * top){slStacktype * p;DataType x;if(top->next==NULL){//空栈 printf("此栈为空!"); return -1;}p=top->next;top->next=p->next; x=p->data;free(p);return x;
}//取栈顶元素
DataType GetLsPop(slStacktype * top){if(top->next==NULL){//空栈 printf("此栈为空!"); return -1;}DataType x=top->next->data;return x;
}int main(){slStacktype *sl=Init();int x=1;PushLstack(sl,x);int y=GetLsPop(sl);printf("%d\n",y);//1 int z=PopLstack(sl);printf("%d\n",z);//1}
循环队列1
D:\大学学习\3-大二上学习\数据C\学习\3\6-循环队列.c
#include<stdio.h>
#include<stdlib.h>
#define FALSE 0
#define TRUE 1#define MAXSIZE 10
//下面的循环以列及操作依据少用个元素空间来实现
//循环队列的类型定义及基本运算如下。
typedef int ElemType;
typedef struct{ ElemType elem [MAXSIZE];//队列的存储区//队头队尾指针int front, rear;
}CSeQueue;//循环队列//(1)置空队
CSeQueue * IniseQueue(){CSeQueue * q=(CSeQueue *)malloc(sizeof(CSeQueue));q->front=q->rear=MAXSIZE-1;return q;
}//(2)入队
int InSeQueue( CSeQueue * q,ElemType x){if((q->rear+1)%MAXSIZE==q->front){//队满不能人队printf("队满");return FALSE;}else{q->rear=(q->rear+1)%MAXSIZE;q->elem[q->rear]=x;return TRUE;//人队完成}
}//(3)出队
int OutSeQueue( CSeQueue *q , ElemType *x){if(q->front==q->rear){printf("队空");return FALSE;}else{q->front=(q->front+1)%MAXSIZE;*x=q->elem[q->front];//读出队头元素return TRUE;//出队完成}
}//(4) 判断队空
int EmptySeQueue(CSeQueue *q){if(q->front==q->rear) return TRUE;else return FALSE;
} int main(){CSeQueue *cs=IniseQueue();int x=1;InSeQueue(cs,x);printf("%d\n",EmptySeQueue(cs));//0int x0;OutSeQueue(cs,&x0);printf("%d\n",x0);//1printf("%d\n",EmptySeQueue(cs));//1}
循环队列2
D:\大学学习\3-大二上学习\数据C\习题\3\8.c
#include<stdio.h>
#include<stdlib.h>
#define FALSE 0
#define TRUE 1#define MAXSIZE 2
//下面的循环以列及操作依据少用个元素空间来实现
//循环队列的类型定义及基本运算如下。
typedef int ElemType;
typedef struct{ ElemType elem [MAXSIZE];//队列的存储区//队头队尾指针int front, rear;int flag;
}CSeQueue;//循环队列//(1)置空队
CSeQueue * IniseQueue(){CSeQueue * q=(CSeQueue *)malloc(sizeof(CSeQueue));q->front=q->rear=MAXSIZE-1;q->flag=0;return q;
}//(2)入队
int InSeQueue( CSeQueue * q,ElemType x){if(ManSeQueue(q)){//队满不能人队printf("队满");return FALSE;}else{q->rear=(q->rear+1)%MAXSIZE;q->elem[q->rear]=x;q->flag=1;return TRUE;//人队完成}}//(3)出队
int OutSeQueue( CSeQueue *q , ElemType *x){if(EmptySeQueue(q)){printf("队空");return FALSE;}else{q->front=(q->front+1)%MAXSIZE;*x=q->elem[q->front];//读出队头元素q->flag=0;return TRUE;//出队完成}
}//(4) 判断队空
int EmptySeQueue(CSeQueue *q){if(q->front==q->rear&&q->flag==0) return TRUE;else return FALSE;
} //判断队满
int ManSeQueue(CSeQueue *q){if(q->front==q->rear&&q->flag==1) return TRUE;else return FALSE;
}
int main(){CSeQueue *cs=IniseQueue();printf("%d",EmptySeQueue(cs));//1int x1=1;InSeQueue(cs,x1);int x2=2;InSeQueue(cs,x2);printf("%d",ManSeQueue(cs));//1int y1;OutSeQueue(cs,&y1);printf("%d",y1);//1printf("%d",EmptySeQueue(cs));//0int y2;OutSeQueue(cs,&y2);printf("%d",y2);//2printf("%d",EmptySeQueue(cs));//1}
哈希表
D:\大学学习\3-大二上学习\数据C\学习\8\4-哈希表查找.c
#include<stdio.h>
#include<stdlib.h>
#define HASHSIZE 11
#define INIT -1
typedef int otherdata;
typedef struct{int key;otherdata other;
}Datatype;
typedef struct{Datatype data;int times;//比较次数
}Hashtable[HASHSIZE];// [算法8-10]采用除留余数法构造哈希函数
int HashFunc(int key){return key%HASHSIZE;
}
//[算法8-11]采用线性探测再散列处理冲突
int Collision(int di){return(di+1)%HASHSIZE;
}
//[算法8-12]哈希表的查找
int HashSearch(Hashtable ht, Datatype x){int address;address= HashFunc(x.key);//计算散列地址while(ht[address].data.key!=INIT&&ht[address].data.key!=x.key)address=Collision(address);//没找到,处理冲突if(ht[address].data.key==x.key) return address;//查找成功else return -1;//查找失败
}//[算法8-13] 哈希表的插入
int HashInsert( Hashtable ht,Datatype x) {int address;address=HashSearch(ht,x); if(address>=0)return 0;int times=1;address= HashFunc(x.key);//计算散列地址while(ht[address].data.key!=INIT){address=Collision(address);//没找到,处理冲突times++;}ht[address].data=x;ht[address].times=times;return 1;
}
//[算法8-14]哈希表的创建void Createht(Hashtable ht, Datatype L[],int n){int i;for(i=0;i<HASHSIZE;i++){ht[i].data.key=INIT;ht[i].times=0;}for(i=0;i<n;i++)HashInsert(ht,L[i]);}#define DEL -1
//[算法8-15] 哈希表的删除int HashDel(Hashtable ht, Datatype x){int address;address = HashFunc(x.key); if(address>=0){ //找到 ht[address].data.key=DEL;//置删除标志return 1;}return 0;
}//输出
void output(Hashtable ht){printf("输出散列表\n") ; int i;printf("散列地址 关键字值 比较次数\n"); for(i=0;i<HASHSIZE;i++){printf("%8d %8d %8d\n",i,ht[i].data.key,ht[i].times);}
}
void CreateData(Datatype L[],int data[],int n){int i;for(i=0;i<n;i++){L[i].key=data[i];}
}
void printData(Datatype L[],int n){int i;for(i=0;i<n;i++){printf("%d ",L[i].key);}
}
// 19,01,23,14,55,68,11,82,36
int main(){Hashtable ht;Datatype L[9]={0};int data[9]={19,1,23,14,55,68,11,82,36};CreateData(L,data,9);printData(L,9); printf("\n"); Createht(ht,L,9);output(ht);return 0;
}
最后
2023-10-19 13:39:45
我们都有光明的未来
祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦