计算机考研复试问题汇总(408+计算机前言知识)_计算机前沿系统复试

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

https://zhuanlan.zhihu.com/p/124284469

Q:操作系统的特点?

  1. – 共享:资源可被多个并发执行的进程使用
  2. – 并发:可以在同一时间间隔处理多个进程,需要硬件支持
  3. – 虚拟:将物理实体映射成为多个虚拟设备
  4. – 异步:进程执行走走停停,每次进程执行速度可能不同,但OS需保证进程每次执行结果相同

Q:操作系统的主要功能是什么?

  1. 处理机管理(包括进程控制、进程同步、进程通信、调度)
  2. 存储器管理(内存分配(静态/动态/连续/非连续分配)、内存包含、地址映射(逻辑地址–>物理地址)、内存扩充(虚拟存储技术))
  3. 设备管理(缓冲管理、设备分配、设备处理(启动设备、中断设备))
  4. 文件管理(文件存储空间管理、目录管理、文件读/写保护)

Q:操作系统发展过程?

  1. 无操作系统(人工操作方式):用户独占、CPU等待人工
  2. 单道批处理:内存只保存一道作业
  3. 多道批处理:运行多个程序同时存在主存中
  4. 分时:及时接收、及时处理,交互性
  5. 实时:实时控制、实时信息处理

Q:进程和线程的区别?
线程被称作轻量级进程,在进程中包含线程。进程有独立的内存空间,不同进程间不能直接共享其他进程资源,同一个进程内的线程共享进程内存空间;相比进程,线程切换对系统开销更小一些;进程是资源分配的最小单位,线程是程序执行的最小单位。

图示

Q:进程的三个组成部分?
程序段、数据段、PCB(Process Control Block)

Q:进程切换的过程?
保持处理机上下文 -> 更新PCB -> 把PCB移入相应队列(就绪、阻塞) -> 选择另一个进程并更新其PCB -> 更新内存管理的数据结构 -> 恢复处理机上下文

Q:进程通信的方式
1、低级通信方式
PV操作(信号量机制)。
– P:wait(S)原语,申请S资源
– V:signal(S)原语,释放S资源
2、高级通信方式:以较高效率传输大量数据的通信方式
– 共享存储(使用同步互斥工具操作共享空间)
– 消息传递(进程间以格式化的消息进行数据交换,有中间实体,分为直接和间接两种,底层通过发送消息和接收消息两个原语实现)
– 管道通信(两个进程中间存在一个特殊的管道文件,进程的输入输出都通过管道,半双工通信)

Q:管程是什么?
由一组数据及对这组数据操作的定义组成的模块。同一时间只能有一个进程使用管程,即管程是互斥使用的,进程释放管程后需唤醒申请管程资源的等待队列上的进程。进程只有通过进入管程并使用管程内部的操作才能访问其中数据

Q:进程的五种状态是什么?

创建、就绪、阻塞、执行、终止

preview

Q:线程间的同步与通信类型有哪些?

1.互斥锁mutex

2.条件变量

3.信号量机制

Q:线程的实现方式有哪几种?

1.内核支持线程(核内切换快,开销小,模式间切换慢)

2.用户级线程(节省模式间切换的开销)

3.混合

Q:产生死锁的原因有哪些?

  1. 对互斥资源分配不当
  2. 进程推进顺序不当

Q:处理产生死锁的办法有哪些?

  1. 预防死锁(破坏产生死锁的必要条件
  2. 避免死锁;3.检测死锁;4.解除死锁

Q:死锁的产生和避免?

死锁的四个必要条件:
(1)互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
(2)请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
(3)非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
(4)循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。

死锁避免(deadlock avoidence)是在系统运行过程中注意避免死锁的发生。这就要求每当申请一个资源时,系统都应根据一定的算法判断是否认可这次申请,使得在今后一段时间内系统不会出现死锁。这面方最著名的算法首推Dijkstra[1965]提出的银行家(banker)算法。

Q:死锁与饥饿的区别?
– 都是资源分配问题
– 死锁是等待永远不会释放的资源,而饥饿申请的资源会被释放,只是永远不会分配给自己
– 一旦产生死锁,则死锁进程必然是多个,而饥饿进程可以只有一个
– 饥饿的进程可能处于就绪状态,而死锁进程一定是阻塞进程

Q:FCB包含什么?
文件指针:上次读写位置。
文件打开数:多少个进程打开了此文件。
文件磁盘位置。
文件的访问权限:创建、只读、读写等。

Q:页面置换算法?
最佳置换算法OPT
先进先出置换算法FIFO
最近最久未使用算法LRU
时钟算法LOCK
改进型时钟算法

Q:批处理作业调度算法?
先来先服务FCFS
最短作业优先SJF
最高响应比优先HRN
多级队列调度算法

Q:进程调度算法?
先进先出FIFO
时间片轮转算法RR
最高优先级算法HPF
多级队列反馈算法

Q:磁盘调度算法?
先来先服务FCFS
最短寻道时间优先SSTF
扫描算法SCAN
循环扫描算法C-SCAN

Q:FAT(File Allocation Table)?
分配给文件的所有盘块号都放在FAT中,记录了文件的物理位置。

Q:什么是中断?

1.中断的引入——为了支持CPU和设备之间的并行操作
中断也称外中断,指来自CPU执行指令以外的事件的发生,如设备发出的I/O结束中断、时钟中断等。这一类中断通常是与当前执行的指令无关的事件。
2.异常的引入——表示CPU执行指令本身时出现的问题
异常也称内中断、例外或陷入,指源自CPU执行指令内部的事件,如程序的非法操作码、地址越界、算术溢出、缺页异常等。对异常的处理一般要依赖与当前程序的运行现场,不能被屏蔽。

3.中断和异常的联系与区别

Q:中断和系统调用区别?
中断:解决处理器速度和硬件速度不匹配,是多道程序设计的必要条件。每个中断都有自己的数字标识,当中断发生时,指令计数器PC和处理机状态字PSW中的内容自动压入处理器堆栈,同时新的PC和PSW的中断向量也装入各自的寄存器中。这时,PC中包含的是该中断的中断处理程序的入口地址,它控制程序转向相应的处理,当中断处理程序执行完毕,该程序的最后一条iret(中断返回),它控制着恢复调用程序的环境。 中断和系统调用的区别: 中断是由外设产生, 无意的, 被动的 系统调用是由应用程序请求操作系统提供服务产生, 有意的, 主动的。要从用户态通过中断进入内核态。(联系) 中断过程:中断请求 中断响应 断点保护 执行中断服务程序 断点恢复 中断返回 系统调用过程:应用程序在用户态执行时请求系统调用,中断,从用户态进入内核态,在内核态执行相应的内核代码。

Q:处理机调度有哪几层?

  1. 高级调度(后备作业–>内存)
  2. 中级调度(进程–>外存)
  3. 低级调度(进程/线程调度)

Q:页面置换算法有哪些?

最佳页面置换算法、最近最久未使用算法、时钟置换算法

Q:I/O控制方式有哪些?

  1. 程序控制I/O方式(CPU与I/O设备只能串行工作)
  2. 中断驱动方式
  3. DMA(仅在开始和结束才需要CPU干预)

Q:存储器的层次结构有哪些?

外存、主存、快速缓存、寄存器

Q:存储管理方案有哪些?

分区存储管理、分页存储管理、分段存储管理、段页式存储管理、虚拟存储管理

Q:设备管理采用的相关缓冲技术有哪些?

  1. 通道技术(使数据传输独立于CPU)(增加设备到主机之间的通路,使主存和设备之间有两条以上的通路)
  2. DMA技术(数据在主存与I/O设备间直接成块传送)
  3. 缓冲技术(硬件缓冲、软件缓冲)
  4. Spooling技术(使独占设备虚拟为多台设备)

五、计算机组成原理

**Q:**什么是冯诺伊曼结构?

输入输出,计算单元,控制单元,存储单元。

Q:高速缓存的作用

连接CPU和内存。

Q:cache和寄存器区别?

寄存器是暂时存储的CPU组成部分,cache用来做高度CPU和低速的主存之间加速带。

Q:指令系统

CISC复杂指令集,RISC是精简指令集。

Q:流水线

将重复性的过程分为若干个子过程来完成。

Q:总线和I/O

总线是指数据通信的连接线,有地址,数据,控制指令。

I/O的方式有程序性,中断性,通道,DMA。

六、数据结构

Q:迅速编写出算法(快排,冒泡,最短路)

Q:什么是二叉树,红黑树,AVL树

七、面向对象程序设计

Q:C和C++还有java的区别

Q:指针和引用的区别?
1.指针是一个存储地址的变量,该地址为内存的一个存储单元;引用是原变量的一个别名;
2.指针可以为空,而引用不能为空;
3.指针可以有多级,而引用只能有一级;
4指针可以重新赋值,而引用只能初始化一次
5.sizeof引用得到的是变量大小,而sizeof指针得到的是指针本身大小
将引用作为函数返回值的好处是?
在内存中不会产生被返回值的副本,同时不能返回局部变量的引用,因为随着调用结束局部变量会被销毁。

Q:三种传参方式?

值传递:传递的是实参的一个拷贝,修改形参不会改变实参值。
地址传递:传递的是实参地址的一个拷贝,修改形参不会改变实参值。
引用传递:传递的是实参的一个别名,修改形参会导致改变实参。
被调用函数的形参只有在被调用时才会临时分配存储单元,一旦调用结束则释放内存。
Q:const作用?
被const修饰符修饰的变量不能被修改。const *x表明x数据是常量,不能修改;*const x表明指针本身是常量,x的指针不能指向其他内存地址,x本身可被修改;*const *x表明x本身数据和地址都不能被修改。

Q:static作用?
被static修饰符修饰的变量在整个文件中都是可见的,而在文件外是不可见的。该变量在全局数据区分配内存。C++中由程序运行new出的动态数据存放在堆区,而函数内部局部变量存放在栈区。
静态局部变量:在函数内部定义static变量,第一次运行到这里初始化,存储到全局数据区,下一次执行到这里不会再重新初始化。
static变量如果没有显式初始化,默认初始值为0。 静态函数不能被其他函数所调用。

Q:面向对象的三个要素(基本特征)?
1、封装:将客观事物封装成类,隐藏实现细节,模块化代码。
2、多态:实现多态的两种方式——覆盖(重写)和重载。
覆盖是子类重新定义父类的虚函数,与多态真正相关。当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态的调用属于子类的该函数,这样的函数调用在编译期间是无法确定的(调用的子类的虚函数的地址无法给出)。因此,这样的函数地址是在运行期绑定的(晚绑定)。
重载是存在多个同名函数,但是函数的参数个数不同。这些函数实际上成为了不同的函数,对它们的调用在编译期间就已经确定,属于早绑定,与多态无关。
3、继承:子类继承父类功能,对父类功能进行扩展。

Q:结构体和联合有什么区别?
(1). 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。
(2). 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。

Q:C++是不是类型安全的语言?
不是。不同类型间指针可以强制互转。

Q:const与#define区别?

(1)就起作用的阶段而言: #define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用。
(2)就起作用的方式而言: #define只是简单的字符串替换,没有类型检查。而const有对应的数据类型,是要进行判断的,可以避免一些低级的错误。 
(3)就存储方式而言:#define只是进行展开,有多少地方使用,就替换多少次,它定义的宏常量在内存中有若干个备份;const定义的只读变量在程序运行过程中只有一份备份。
(4)从代码调试的方便程度而言: const常量可以进行调试的,define是不能进行调试的,因为在预编译阶段就已经替换掉了。

Q:基类的析构函数为什么是虚函数?
为了防止派生类析构函数未执行,造成资源泄露。

Q:#include尖括号和双引号区别?
<>是标准头文件,“”是非系统头文件

Q:为什么有了指针,还要使用引用?
为了支持运算符的重载。更加方便。

Q:如何避免野指针?
声明指针记得初始化,暂时不用就指向NULL;使用malloc分配内存,必须经过显式释放(free),避免内存泄漏。

八 软件开发

Q:类之间的关系有哪些?
继承:类继承另一个类的功能
实现:类实现接口的功能
依赖:A类的某个方法使用到了B类
关联:强依赖关系,B类作为一个属性出现在了A类
聚合:一种特别的关联,公司与个人的关系
组合:强聚合关系,整体与部分的联系更紧密,如汽车与轮胎

Q:软件工程标准步骤?

问题定义
可行性研究
需求分析
总体设计
详细设计
编码和单元测试
综合测试
软件维护
Q:有哪些软件测试分类?
黑盒测试:不考虑软件内部原理,以用户角度测试软件输入输出
白盒测试:知道软件内部工作过程,确定每个分支都能按照预定正常工作
灰盒测试:集合白盒黑盒
冒烟测试:测试软件基本功能,快速
系统测试:验证系统是否满足需求规格的黑盒类测试
性能测试:负载测试和压力测试
安全测试:假扮黑客侵入系统
兼容性测试:不同平台不同环境下的测试

Q:自顶向下和自底向上测试方法的区别?
自顶向下:从程序入口主控模块开始,按照系统程序结构,沿着控制层次从上而下测试各模块。方便把握整体结构,早期可发现顶层错误。
自底向上:从最底层模块,即叶子结点开始,按照调用从下而上的测试各模块。最后一个模块提交后才能完整系统测试,某些模块可以提前测试。

Q:软件工程的三要素?
方法、工具、过程。

Q:软件工程的主要模型?

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

能完整系统测试,某些模块可以提前测试。

Q:软件工程的三要素?
方法、工具、过程。

Q:软件工程的主要模型?

[外链图片转存中…(img-FiNh2k3C-1715539882649)]
[外链图片转存中…(img-ls8VvSmf-1715539882649)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值