计算机考研复试相关问题整理

1.调度什么时候发生:

*正在执行的进程执行完毕
*执行中进程自己调用阻塞原语将自己阻塞起来进入睡眠等状态
*执行中调用了P原语,从而因资源不足而阻塞
*执行中进程提出I/O请求后被阻塞
*在分时系统中时间片用完

2.调度算法:

(1)作业调度
*先来先服务(FCFS)
*短作业优先(SJF)
*优先级调度算法(PSA)
*高响应比优先调度算法(HRRN)
*多级反馈队列调度算法

3.堆栈

栈区(stack):由编译器自动分配释放,存放函数的参数值、局部变量值等。
堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收

4.操作系统的定义

操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织和调度计算机的工作和资源的分配,以提供给用户和其他软件方便的接口和环境。

5.判断单链表是循环链表

双指针判断法:一个slow指针,一个fast指针,slow指针每次走一步,fast每次走两部,相遇则为循环链表,否则fast为NULL时退出

6.动态存储和静态存储的区别

静态存储:
*在编译时对数据对象分配固定的存储位置,运行时始终不变,即一旦存储空间的某个位置分配给了某个数据名,则在目标程序的整个运行过程中,此位置就属于该数据名。
*由静态存储分配产生的数据区称为静态数据区
*静态存储分配不允许递归过程或递归调用
*静态存储分配的特点:简单、易于实现

动态存储:
*指在运行阶段动态的为源程序中的数据对象分配存储位置
*允许递归过程
*允许用户自由申请和释放空间
*两种动态存储方式:栈(stack)、堆(heap)

7.组合逻辑电路与时序逻辑电路的区别

*组合逻辑电路的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原本状态无关。
*时序逻辑电路特点是任意时刻的输出不仅取决于该时刻的输入,而且还和电路原来的状态有关,电路里面有存储元件用于记忆信息。

8.递归的含义

*程序调用自身的编程技巧称为递归

9.递归能不能用循环代替

*能用递归解的都可以用循环来写,所有循环都是等价的
*循环比递归效率高,递归使代码简单易懂

10.递归需要满足的两个条件

递归,并不是简单的“自己调用自己”,也不是简单的“交互调用”。它是一种分析和解决问题的方法和思想。简单来说,递归的思想就是:把问题分解成为规模更小的、具有与原问题有着相同解法的问题。比如二分查找算法,就是不断地把问题的规模变小(变成原问题的一半),而新问题与原问题有着相同的解法。
有些问题使用传统的迭代算法是很难求解甚至无解的,而使用递归却可以很容易的解决。比如汉诺塔问题。但递归的使用也是有它的劣势的,因为它要进行多层函数调用,所以会消耗很多堆栈空间和函数调用时间。
既然递归的思想是把问题分解成为规模更小且与原问题有着相同解法的问题,那么是不是这样的问题都能用递归来解决呢?答案是否定的。并不是所有问题都能用递归来解决。那么什么样的问题可以用递归来解决呢?一般来讲,能用递归来解决的问题必须满足两个条件:
1、可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式。
2、存在一种简单情境,可以使递归在简单情境下退出。
如果一个问题不满足以上两个条件,那么它就不能用递归来解决。

11.网络的层次结构

ISO/OSI七层 物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
Tcp/ip五层 物理层,数据链路层,网络层,传输层,应用层

12.ARP和RARP

*ARP:地址解析协议,透过目标设备的IP地址,查询目标设备的MAC地址
(1)每个主机都有一个ARP列表,缓存IP地址和MAC地址之间的对应关系
(2)当源主机要发送数据时,首先检查ARP列表中是否有对应的IP地址的目的地址的主机MAC地址,有就直接发送,没有就以广播的形式向本子网所有主机发送ARP数据包,该数据包的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。
(3)本网段所有主机收到ARP数据包时,首先检查数据包是否有自己的IP地址,如果没有,忽略该数据包,如果有,将源主机的IP和MAC地址写到ARP列表中,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它要找的MAC地址。
*RARP:将MAC地址转换成IP地址
(1)将原设备和目标设备的MAC地址字段都设为发送者的MAC和IP地址,发送主机发送一个本地的RARP广播,能够到达网络上的所有设备,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址
(2)本地网段上的RARP服务器收到此请求后,检查其RARP列表查找该MAC地址对应的IP地址
(3)如果存在,RARP服务器就给源主机发送一个相应数据包并将此IP地址提供给对方主机使用,如果不存在,RARP服务器对此不做任何相应
(4)源主机收到从RARP服务器的相应信息,就利用得到的IP地址进行通讯,如果一直没有收到RARP服务器相应,则初始化失败。
13.微信用的TCP还是UDP
视频、语音是UDP,发信息是TCP

14.操作系统的目录

人们把文件控制块的有序集合称为文件目录,一个文件控制块就是一个文件目录项
*文件控制块(FCB):为了能对系统中大量文件进行有效的管理,文件块中包含了三类信息,基本信息、存取控制信息、使用信息。
*索引节点:解决的问题:文件目录占越大量的盘块,需要进行磁盘读写开销越大,减少实际检索的信息量就减少移动磁头的开销,提高速度。目录一般是按名检索的。而直到找到正确文件前,只关心文件名,不需要其他的文件描述信息。
*目录结构:(1)单级目录文件:最简单的文件目录,在整个文件系统中只建立一张目录表,每个文件占一个目录项,目录项中包含文件名、文件拓展名、文件长度、文件类型、文件物理地址等信息,最后还有一个状态位。
(优点:简单,按名存取。 缺点:查找速度慢,不允许重名,不便于实现文件共享)
(2)两级文件目录:为每个用户单独建立一个单独的用户文件目录,主目录和用户目录
(优点:提高检索目录的速度,允许文件重名 缺点:不利于文件共享)
(3)树型目录文件:
(优点:层次结构清晰,灵活的管理权限,便于文件共享 缺点:增加访盘次数,复杂)

*文件共享:①索引节点法:
②符号链接法:适用于网络文件共享

15.什么是进程

*进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位

16.什么是死锁

*指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态是,若无外力作用,他们都将无法向前推进

17.解除死锁的方法

①死锁预防:破坏产生死锁的四个必要条件中的一个或几个
②避免死锁:使进程分配进入安全状态,使用银行家算法
③死锁检测:判断系统是否出现死锁,若检测到死锁则设法加以解除。

18.存储方式

(1)连续分配
①单一连续分配(系统区,用户区)
②固定分区分配
③动态分区分配(空闲分区表)
(2)动态分区分配算法:
①首次适应算法
②循环首次适应算法
③最佳适应算法
④最坏适应算法
分页存储管理、分段存储管理、段页式存储管理

19.print参数的格式和长度

%d 十进制有符号整数
%f 浮点数
%s 字符串
%c 单个字符
%p 指针的值
%3d表示输出3位整型数,不够3位右对齐
%9.2f表示输出宽为9的浮点数,其中小数位为2,整数位为6,小数点占一位,不够9位右对齐
%8s表示输出8个字符的字符串,不够8个字符右对齐
%04d表示在输出一个小于4位的数值时,将在前面补0使其总宽度为4位
%6.9s表示显示一个长度不小于6且不大于9的字符串,若大于9,则第九个字符以后的内容被删除。

20.递归与迭代的区别

*递归:就是在运行的过程中调用自己
*迭代:迭代法也称辗转法,是一种不断用变量的旧值递推新值得过程

21.数据库第一二三四范式

*1NF:符合1NF的关系中的每个属性都不可再分。(1NF是所有关系型数据库的最基本要求)
(数据冗余过大,插入异常,删除异常,修改异常)
*2NF:2NF在1NF的基础上,消除了非主属性对于码的部分函数依赖
函数依赖:在一张表中,在属性X的值确定的情况下,必定能确定属性Y的值,那么就可以说Y函数依赖于X,写作X→Y
部分函数依赖:假如Y函数依赖于X,但同时Y并不完全依赖于X,那么我们就称Y部分依赖于X
*3NF:3NF在2NF的基础上,消除了非主属性对于码的传递函数依赖。
*BCNF:消除主属性对于码的部分依赖于传递依赖

22.双聚类算法

*算法简介:在数据矩阵A中寻找一个满足条件矩阵B1的子矩阵A1,而B1是条件矩阵B的一个子矩阵。

23.启发式搜索(有信息搜索)

*利用当前与问题有关的信息作为启发式信息,这些信息是能够提升查找效率以及减少查找次数的
启发式策略可以通过指导搜索向最有希望的方向前进,降低了复杂性。通过删除某些状态及其延伸,启发式算法可以消除组合爆炸,并得到令人能接受的解(通常并不一定是最佳解)。
然而,启发式策略是极易出错的。在解决问题的过程中启发仅仅是下一步将要采取措施的一个猜想,常常根据经验和直觉来判断。由于启发式搜索只有有限的信息(比如当前状态的描述),要想预测进一步搜索过程中状态空间的具体行为则很难。一个启发式搜索可能得到一个次最佳解,也可能一无所获。这是启发式搜索固有的局限性。这种局限性不可能由所谓更好的启发式策略或更有效的搜索算法来消除。一般说来,启发信息越强,扩展的无用节点就越少。引入强的启发信息,有可能大大降低搜索工作量,但不能保证找到最小耗散值的解路径(最佳路径)。因此,在实际应用中,最好能引入降低搜索工作量的启发信息而不牺牲找到最佳路径的保证。
https://www.cnblogs.com/ISGuXing/p/9800490.html
https://baike.baidu.com/item/%E5%90%AF%E5%8F%91%E5%BC%8F%E6%90%9C%E7%B4%A2/8944170?fr=aladdin

24.用全局变量多还是局部变量多

一般原则是尽量少定义全局变量,因为全局变量会占用更多的内存,而且存在时间长;

25.编译的过程

第一阶段词法分析:输入源程序,对构成源程序的字符串进行扫描和分解,识别出一个个的单词
第二阶段语法分析:在词法分析的基础上,根据语言的语法规则,把单词符号串分解成各类语法单位,如短语、句子、程序段等,通过语法分析,确定整个输入串是否构成语法上正确的程序。语法分析所依据的是语言的语法规则,语法规则通常用上下文无关文法描述。
第三阶段词义分析与中间代码产生:对语法分析所识别出的各类语法范畴分析其含义,并进行初步翻译产生中间代码,这一阶段利用的是语言的语义规则,使用属性文法描述语义规则。
第四阶段优化:优化任务在于对前段产生的中间代码进行加工变换,以期待在最后阶段能产生出更为高效的目标代码
第五阶段目标代码生成:把中间代码变成特定机器上的低级语言代码,这阶段实现了最后的翻译

26.线性表的定义

线性变是具有相同数据类型的n个数据元素的有限序列

27.路由器和交换机

路由器:寻址、转发(依靠IP地址)
交换机:过滤、转发(依靠MAC地址)

路由器内有一张路由表,里面有它的寻址信息,它收到网络层的数据报后,会根据路由表和路由选择算法将数据报转发到下一站。
交换机内有一张MAC表,里面存放着和他相连的所有设备的MAC地址,它会根据收到的数据帧的首部信息的目的MAC地址在自己表中查找,有就转发,没有就放弃
交换机用于局域网内网的数据转发
路由器用于连接局域网和外网

我们每个人相当于主机,路由器相当于快递员,宿管大爷相当于交换机,学校是一个局域网
快递员根据学校地址(IP)把包裹送到学校,再根据公寓号(子网IP)把快递交给这个公寓的宿管大爷,宿管大爷根据你的名字(MAC)交给你

28.TCP的四种拥塞控制算法

1.慢开始:由小到大逐渐增大拥塞窗口数值,每次以2的倍数增大拥塞窗口。
2.拥塞避免:当拥塞窗口到达门限值ssthresh时,开始进行拥塞避免,拥塞窗口加法增大
3.快重传:发送方收到了累计3个连续的针对某一报文段的重复确认,立刻重传下一个报文段。
4.快恢复:发送方知道现在只丢失了个别报文段,于是执行快恢复算法,发送方调整门限值ssthresh=cwnd/2,同时设置拥塞窗口cwnd=ssthresh,并开始执行拥塞避免算法

29.TCP为什么三次握手

为了实现可靠数据传输,TCP协议的通信双方,都必须维护一个序列号,以标识发送出去的数据包中,哪些是已经被对方收到的,三次握手的过程即是通信双方相互告知序列号起始值,并确认对方已经收到了序列号起始值的必经步骤
如果只是两次握手,至多只有连接方的起始序列号能被确认,另一方选择的序列号则得不到确认。

30.数据结构的顺序结构

顺序表、二叉树

31.面向对象中的封装、继承、多态

*封装:对一个类,将属性和方法封装在类中,对外隐藏实现细节,数据在内部完全自由使用,外部对数据进行访问需要增加访问限定。
*继承:一种代码重用手段,我们对一个现有类上想扩展出一些东西的时候不需要重复编写上面的代码,而是采用继承的思想,在派生的子类添加属性和方法。
*多态:接口重用,重写父类实现的方法,利用虚函数和虚表。

32.局部变量和全局变量在内存中的存储位置

全局变量全部存储在静态存储区,局部变量保存在栈中,也就是动态存储区

33.最短路径问题

单源最短路径(迪杰斯特拉算法):假定初始点为A,首先设定两个集合S和T,S集合初始值为{A},S集合包含已求出的最短路径点的集合和相应最短路径长度,T集合是还未求出最短路径的定点和该顶点到起点A的距离。每次从T集合中找出到起始点A路径最短的顶点,加入到S集合中,然后更新U中的顶点和顶点对应的路径。多次重复,直到遍历完所有顶点。

多源最短路径(floyd算法):求每对顶点间的最短路径,先利用一个二维数组记录各个点之间的距离,然后选择一个中介节点,并更新距离,用最短距离代替大距离,然后更换中介节点,再找最短距离,并更新。

34.DHCP协议

DHCP(动态主机配置协议):由服务器控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的ip地址和子网掩码。
发现阶段-提供阶段-选择阶段-确认阶段

35.访问网站的过程

①域名解析成ip地址
②与目的主机进行tcp链接
③发送与收取数据(HTTP访问过程)
④与目的主机断开连接

36.C++的三种继承方式

公有继承、私有继承、保护继承
*公有继承:①基类中的public仍为public
②基类中的protected仍为protected
③基类中的private仍为private
*私有继承:①基类中的public,protected变为private
②基类中的private仍为private
*保护继承:①基类中public变为protected
②基类中的protected仍为protected
③基类中private仍为private

37.C语言和C++语言区别和联系

*C是面向过程的语言,而C++是面向对象的语言
*C和C++在动态分配内存方面存在差异,C使用malloc/free函数,而C++使用除此之外还有new/delete关键字
*C语言中没有class,只有struct;C++中两者都有。class的默认访问修饰符是private,而struct是public
*C++支持函数重载,而C不支持函数重载,这是由于两者的名字修饰不同
*C++有引用,而C没有引用

38.面向对象的好处

*将对象进行分类,分别封装他们的数据和方法,方便了函数、变量、数据的管理。方便方法调用。
*让编程思路更加清晰简洁,减少了很多冗余变量的出现。

39.重载和重写

*重载:传入不同的参数会调用不同的函数。
函数或方法有相同的名称
参数列表不相同
*重写:对父类实现的方法进行重写
函数名,参数和返回值都相同

40.数据库锁有几种

共享锁:多个实物可封锁一个共享页,任何事物都不能修改该页,通常是该页被读取完毕,共享锁立即被释放
排它锁:仅允许一个事务封锁此页,其他任何事务必须等到排它锁被释放才能对该页进行访问,排它锁一直到事务结束才能释放
更新锁:用来预定要对此页施加更新锁,它允许其他事务读,但不允许再施加更新锁或排它锁,当被读取的页将要被更新时,则升级为排它锁,更新锁一直到事务结束时才能被释放

41.数据库的事务

事务指逻辑上的一组操作,组成这组操作的各个单元,要么全成功,要么全不成功

你可能感兴趣的:(杂项)