计算机考研考博经典考题汇总(一次刷新世界观-我相信VIP总是有原因的)

计算机考研考博经典考题汇总(一次刷新世界观-我相信VIP总是有原因的) 考研季公开可看,其他时间VIP可看操作系统操作系统的特点?进程的三个组成部分?并发与并行区别?进程切换的过程?进程通信管程是什么?死锁的必要条件?死锁与饥饿的区别?进程和线程的区别?FCB包含什么?页面置换算法?最佳置换算法OPT先进先出置换算法FIFO最近最久未使用算法LRU时钟算法LOCK改进型时钟算法批处理作业调度算法?先来先服务FCFS最短作业优先SJF最高响应比优先HRN多级队列调度算法进程调度算法?先进先出FIFO时间片轮转算法RR最高优先级算法HPF多级队列反馈算法磁盘调度算法?先来先服务FCFS最短寻道时间优先SSTF扫描算法SCAN循环扫描算法C-SCANFAT(File Allocation Table)?分配中断和系统调用区别?虚拟存储的意义和方法?windows和linux使用的文件系统?计算机组成原理什么是冯诺伊曼结构?高速缓存的作用cache和寄存器区别?指令系统流水线总线和I/ODMAJavajava的特点?java常用术语java怎么处理对象分配和释放的?JVM名词解释:JVM垃圾回收机制JVM中的垃圾回收算法JVM参数相关JVM类加载机制如何判断当前系统内是否存在死锁?ThreadLocalThreadLocal的应用场景C++c++和c中字符串区别?C++的特点是什么?C++的异常处理机制?c和c++,java的区别?纯虚函数?什么是内存泄漏?指针和引用的区别?三种传参方式?const作用?static作用?面向对象的三个要素(基本特征)?结构体和联合有什么区别?C++是不是类型安全的语言?const与#define区别?基类的析构函数为什么是虚函数?#include尖括号和双引号区别?为什么有了指针,还要使用引用?如何避免野指针?计算机网络谈谈对TCP/IP协议的理解五个分层。TCP/UDP的区别?IP和mac的区别?登陆baidu.com,简述协议过程简述ARRP的作用hub,switch,router属于OSI哪一层?子网掩码和IP地址怎么理解?ipv4,ipv6的区别?XML和HTML区别?OSI模型全称?DNS工作过程?UDP的优点?数据链路层成帧方式?RIP和OSPF?软件工程软件重用?软件测试类型?软件工程步骤UML软件工程的认识?类之间的关系有哪些?软件工程标准步骤?有哪些软件测试分类?自顶向下和自底向上测试方法的区别?软件工程的三要素?软件工程的主要模型?什么是死代码?内聚和耦合数据结构与算法顺序结构和链式结构的区别?栈和队列的区别?复杂度是什么?头节点的作用是什么?介绍以下各种树度为2的树和二叉树的区别:树的存储结构树的遍历图的存储线性表.查找有那几类?排序算法的介绍?什么是稳定的算法?两个栈模仿一个队列?如何判断链表是否有环?如何判断有环链表环的入口?最长公共子序列求解(LCS)?链表能否使用二分查找?栈应用括号匹配?二叉树删除节点?哈希表最好最坏情况下复杂度?求二叉树的直径?设计模式创建型模式:抽象的实例化过程,隐藏了对象创建的具体细节,使程序代码不依赖具体的对象。结构型模式:描述类和对象之间通过组织形成新的结构,以实现新的功能。行为型模式:描述算法以及对象之间的任务(职责)分配及它们之间的通讯模式。设计模式的六大原则数据库(思维导图见此[连接](https://blog.csdn.net/weixin_44077556/article/details/105660851?csdn_share_tail=%7B%22type%22:%22blog%22,%22rType%22:%22article%22,%22rId%22:%22105660851%22,%22source%22:%22weixin_44077556%22%7D))范式的定义?事务?事务执行的四个基本要素?数据库和文件系统的比较?数据模型有哪几种?索引建的多的好还是少的好?数据库的ACID?数据库三范式?插入100个数据和100万个数据有何区别?数据库数据可以无限插入吗?处理大数据量的策略?group by having,having和where的区别?简述数据库以及线程死锁产生的原理及必要条件,简述如何避免死锁?避免死锁其他Redis云计算?大数据的特点?大数据发展的瓶颈?KNN算法的优缺点?windows中程序的启动过程?Explorer.exe2. CreateProcess 函数的执行过程数据挖掘的信息熵?决策树?操作系统操作系统的特点?– 共享:资源可被多个并发执行的进程使用– 并发:可以在同一时间间隔处理多个进程,需要硬件支持– 虚拟:将物理实体映射成为多个虚拟设备– 异步:进程执行走走停停,每次进程执行速度可能不同,但OS需保证进程每次执行结果相同进程的三个组成部分?程序段、数据段、PCB(Process Control Block)并发与并行区别?并发:同一间隔 并行:同一时刻进程切换的过程?保持处理机上下文 - 更新PCB - 把PCB移入相应队列(就绪、阻塞) - 选择另一个进程并更新其PCB - 更新内存管理的数据结构 - 恢复处理机上下文进程通信1、低级通信方式PV操作(信号量机制)。– P:wait(S)原语,申请S资源– V:signal(S)原语,释放S资源2、高级通信方式:以较高效率传输大量数据的通信方式– 共享存储(使用同步互斥工具操作共享空间)– 消息传递(进程间以格式化的消息进行数据交换,有中间实体,分为直接和间接两种,底层通过发送消息和接收消息两个原语实现)– 管道通信(两个进程中间存在一个特殊的管道文件,进程的输入输出都通过管道,半双工通信)管程是什么?由一组数据及对这组数据操作的定义组成的模块。同一时间只能有一个进程使用管程,即管程是互斥使用的,进程释放管程后需唤醒申请管程资源的等待队列上的进程。进程只有通过进入管程并使用管程内部的操作才能访问其中数据。死锁的必要条件?– 互斥条件:资源在某一时刻只能被一个进程占有– 不剥夺条件:进程所持有的资源在主动释放前不能被其他进程强行夺走– 请求和占用条件:死锁进程必然是既持有资源又在申请资源的– 循环等待条件:存在等待链,互相申请,互不释放避免死锁:不让循环等待条件发生。使用银行家算法。死锁与饥饿的区别?– 都是资源分配问题– 死锁是等待永远不会释放的资源,而饥饿申请的资源会被释放,只是永远不会分配给自己– 一旦产生死锁,则死锁进程必然是多个,而饥饿进程可以只有一个– 饥饿的进程可能处于就绪状态,而死锁进程一定是阻塞进程进程和线程的区别?线程被称作轻量级进程,在进程中包含线程。进程有独立的内存空间,不同进程间不能直接共享其他进程资源,而同一个进程内的线程共享进程内存空间;相比进程,线程切换对系统开销更小一些;进程是资源分配的最小单位,线程是程序执行的最小单位。FCB包含什么?文件指针:上次读写位置。文件打开数:多少个进程打开了此文件。文件磁盘位置。文件的访问权限:创建、只读、读写等。页面置换算法?最佳置换算法OPT所选择的被淘汰页面将是以后永不使用的,或者是在最长时间内不再被访问的页面,这样可以保证获得最低的缺页率。但由于人们目前无法预知进程在内存下的若千页面中哪个是未来最长时间内不再被访问的,因而该算法无法实现。先进先出置换算法FIFO优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。该算法实现简单,只需把调入内存的页面根据先后次序链接成队列,设置一个指针总指向最早的页面。但该算法与进程实际运行时的规律不适应,因为在进程中,有的页面经常被访问。最近最久未使用算法LRU最近最长时间未访问过的页面予以淘汰,它认为过去一段时间内未访问过的页面,在最近的将来可能也不会被访问。该算法为每个页面设置一个访问字段,来记录页面自上次被访问以来所经历的时间,淘汰页面时选择现有页面中值最大的予以淘汰。时钟算法LOCKLRU算法的性能接近于OPT,但是实现起来比较困难,且开销大;FIFO算法实现简单,但性能差。所以操作系统的设计者尝试了很多算法,试图用比较小的开销接近LRU的性能,这类算法都是CLOCK算法的变体。简单的CLOCK算法是给每一帧关联一个附加位,称为使用位。当某一页首次装入主存时,该帧的使用位设置为1;当该页随后再被访问到时,它的使用位也被置为1。对于页替换算法,用于替换的候选帧集合看做一个循环缓冲区,并且有一个指针与之相关联。当某一页被替换时,该指针被设置成指向缓冲区中的下一帧。当需要替换一页时,操作系统扫描缓冲区,以查找使用位被置为0的一帧。每当遇到一个使用位为1的帧时,操作系统就将该位重新置为0;如果在这个过程开始时,缓冲区中所有帧的使用位均为0,则选择遇到的第一个帧替换;如果所有帧的使用位均为1,则指针在缓冲区中完整地循环一周,把所有使用位都置为0,并且停留在最初的位置上,替换该帧中的页。由于该算法循环地检查各页面的情况,故称为CLOCK算法,又称为最近未用(Not Recently Used, NRU)算法。改进型时钟算法改进型的CLOCK算法优于简单CLOCK算法之处在于替换时首选没有变化的页。由于修改过的页在被替换之前必须写回,因而这样做会节省时间。批处理作业调度算法?先来先服务FCFS就是按照各个作业进入系统的自然次序来调度作业。这种调度算法的优点是实现简单,公平。其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满意,因为短作业等待处理的时间可能比实际运行时间长得多。最短作业优先SJF就是优先调度并处理短作业,所谓短是指作业的运行时间短。而在作业未投入运行时,并不能知道它实际的运行时间的长短,因此需要用户在提交作业时同时提交作业运行时间的估计值。最高响应比优先HRNFCFS可能造成短作业用户不满,SPF可能使得长作业用户不满,于是提出HRN,选择响应比最高的作业运行。响应比=1+作业等待时间/作业处理时间。多级队列调度算法每一个作业规定一个表示该作业优先级别的整数,当需要将新的作业由输入井调入内存处理时,优先选择优先数最高的作业。进程调度算法?进程有三种状态阻塞就绪,运行。先进先出FIFO按照进程进入就绪队列的先后次序来选择。即每当进入进程调度,总是把就绪队列的队首进程投入运行。时间片轮转算法RR分时系统的一种调度算法。轮转的基本思想是,将CPU的处理时间划分成一个个的时间片,就绪队列中的进程轮流运行一个时间片。当时间片结束时,就强迫进程让出CPU,该进程进入就绪队列,等待下一次调度,同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片,以投入运行。最高优先级算法HPF进程调度每次将处理机分配给具有最高优先级的就绪进程。最高优先级算法可与不同的CPU方式结合形成可抢占式最高优先级算法和不可抢占式最高优先级算法。多级队列反馈算法几种调度算法的结合形式多级队列方式。磁盘调度算法?先来先服务FCFS最短寻道时间优先SSTF让离当前磁道最近的请求访问者启动磁盘驱动器,即是让查找时间最短的那个作业先执行,而不考虑请求访问者到来的先后次序,这样就克服了先来先服务调度算法中磁臂移动过大的问题扫描算法SCAN总是从磁臂当前位置开始,沿磁臂的移动方向去选择离当前磁臂最近的那个柱面的访问者。如果沿磁臂的方向无请求访问时,就改变磁臂的移动方向。在这种调度方法下磁臂的移动类似于电梯的调度,所以它也称为电梯调度算法。循环扫描算法C-SCAN循环扫描调度算法是在扫描算法的基础上改进的。磁臂改为单项移动,由外向里。当前位置开始沿磁臂的移动方向去选择离当前磁臂最近的哪个柱面的访问者。如果沿磁臂的方向无请求访问时,再回到最外,访问柱面号最小的作业请求。FAT(File Allocation Table)?分配分配给文件的所有盘块号都放在FAT中,用以记录了文件的物理位置。中断和系统调用区别?中断是怎么操作的?中断请求-中断响应-断点保护—执行中断服务程序—断点恢复—中断返回中断:解决处理器速度和硬件速度不匹配,是多道程序设计的必要条件。每个中断都有自己的数字标识,当中断发生时,指令计数器PC和处理机状态字PSW中的内容自动压入处理器堆栈,同时新的PC和PSW的中断向量也装入各自的寄存器中。这时,PC中包含的是该中断的中断处理程序的入口地址,它控制程序转向相应的处理,当中断处理程序执行完毕,该程序的最后一条iret(中断返回),它控制着恢复调用程序的环境。 中断和系统调用的区别: 中断是由外设产生, 无意的, 被动的 系统调用是由应用程序请求操作系统提供服务产生, 有意的, 主动的。要从用户态通过中断进入内核态。(联系) 中断过程:中断请求 中断响应 断点保护 执行中断服务程序 断点恢复 中断返回 系统调用过程:应用程序在用户态执行时请求系统调用,中断,从用户态进入内核态,在内核态执行相应的内核代码。虚拟存储的意义和方法?根据程序执行的互斥性和空间与时间局域性两个特点,允许作业装入时候只装入一部分,另一部分存放在磁盘上,调用时候将常用的放入内存,其他暂时不用的放入外存中。这样一个小的主存空间也可以运行一个比它大的作业。常用的虚拟存储技术有分页分段存储管理。windows和linux使用的文件系统?window:fat32.linux:ext2,fat32.计算机组成原理什么是冯诺伊曼结构?是一种将程序指令存储器和数据存储器合并在一起的存储器结构。五个组成部分是:输入输出,计算单元,控制单元,存储单元。输入数据和程序的输入设备;记忆程序和数据的存储器;完成数据加工处理的运算器;控制程序执行的控制器;输出处理结果的输出设备。高速缓存的作用连接CPU和内存。cache和寄存器区别?寄存器是暂时存储的CPU组成部分,cache用来做高度CPU和低速的主存之间加速带。指令系统CISC(Complex Instruction Set Computer)复杂指令系统计算器,是一种执行较多类型计算机指令的微处理器。RISC(Reduced Instruction Set Computer)是精简指令系统计算器,是一种执行较少类型计算机指令的微处理器。流水线将重复性的过程分为若干个子过程来完成。总线和I/O总线是指数据通信的连接线,有地址,数据,控制指令。I/O输入/输出(Input/Output),分为IO设备和IO接口两个部分.I/O的方式有:DIO(Direct I/O),AIO(Asynchronous I/O,异步I/O),Memory-Mapped I/O(内存映射I/O)等,不同的I/O方式有不同的实现方式和性能,在不同的应用中可以按情况选择不同的I/O方式。DMADMA(Direct Memory Access,直接存储器访问) 是所有现代电脑的重要特色,它允许不同速度的硬件装置互相沟通,而不需要依赖于 CPU 的大量中断负载。否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。Javajava的特点?一次编译到处运行,没有指针,完全对象化,面向对象(封装、继承、多态)。java常用术语JavaEE:Java Platform Enterprise Edition,是Sun公司为企业级应用推出的标准平台。J2EE:Java 2 Platform,Enterprise Edition,是JavaEE以前的叫法。JDBC:Java DataBase Connectivity,Java数据库连接。JNDI:Java Naming and Directory Interface,提供一个目录系统,使得开发人员可以通过名称来访问资源。EJB:Enterprise JavaBean,用来构建一个可以管理的服务器组件。Servlet:Java编写的服务端程序,可以动态修改web内容。JSP:Java Server Pages,Sun主导的一种动态网页技术标准,JSP部署于网络服务器上,可以响应客户端请求,并返回相应内容。RMI:Remote Method Invocation,使得客户端可以像调用本地对象一样调用远程服务器上的方法。和RPC(Remote Procedure Call Protocol)不同,RMI只适用于Java,返回结果也有区别。RML在文件传输时,需要进行序列化serial,转换为二进制才能被servlet传输XML:Extensible Markup Language,用于传输和存储数据JMS:Java Message Service,Java平台面向消息中间件的一个服务,用于在分布式系统或应用程序间传递服务。JTA:Java Transaction API,事务管理组件。Weblogic:Oracle公司推出的商业化JavaEE服务器java怎么处理对象分配和释放的?java把内存分为堆栈空间存储,在堆中new的空间不用自己收回,自动垃圾收回。JVM不同于C++需要编程人员手动释放内存,Java有虚拟机,因此Java不需要程序员主动去释放内存,而是通过虚拟机自身的垃圾回收器(Garbage Collector-GC)来进行对象的回收。Java语言由于有虚拟机的存在,实现了平台无关性,在任意平台都是通过将代码转换为字节码文件,从而在平台下的虚拟机中运行代码的。名词解释:内存区域分布虚拟机栈:存放每个方法执行时的栈帧,一个方法调用到完成就对应栈帧在虚拟机栈中入栈和出栈的过程。本地方法栈:和虚拟机栈类似,不过是为Java中native方法服务的。平时所说的“栈内存”指的就是虚拟机栈和本地方法栈的合称。程序计数器:当前线程执行字节码的行号指示器,字节码解释器工作依赖于它。占用较小的内存空间,不会出现OOM。堆:即所谓的“堆内存”。JVM所管理最大的一块内存,被所有线程共享。唯一作用就是给对象实例分配内存空间,在分代回收算法中的新生代老年代就在于堆中。方法区(也称为永久代):不在堆中,被各个线程共享,存储已被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。其中包括常量池。另:直接内存,不属于JVM内存区域,与NIO联系紧密,不受JVM内存大小限制。JVM垃圾回收机制何时进行垃圾回收?GC本质上是一道守护进程(Daemon Thread),不停的检测堆中是否有不可达对象并释放内存,因此GC在何时发生其实我们是无法预测的。GC通过调用对象的finalize()方法来摧毁对象。不可达对象的判定:根搜索算法。JVM中有一系列设定的GC Roots,当一个对象到任意一个GC Root都没有引用链时,则说明此对象不可达。JVM中的垃圾回收算法1、标记-清除算法最基础的算法,GC会判断堆中对象是否不可达,如果满足清理条件(查看该对象是否有必要执行finalize()方法,有无必要的标准是该对象有没有被调用过finalize方法或该对象有没有覆盖finalize()方法,因为finalize()只能被调用一次),则给这个对象进行标记,将对象放在F-queue队列。此时除非对象在finalize()方法中重新获得了引用,否则它就会被清除掉。2、复制算法将内存分为大小相等的两块,当对象不可达后并不是及时清理,而是等待正在使用的内存满了之后,将该内存内还存活的对象整体复制到另一块内存中,复制结束后再清理掉原内存块中的所有内容。这种方法的优点是快速,但牺牲了一半的内存。方法的改进版(事实上也是虚拟机的做法)是只在新生代空间使用复制算法,并且由于新生代对象生命周期往往很短,因此又将新生代区域分为Eden和Survivor空间。其中Eden分配的空间又比Survivor大出很多,从而节省内存空间。如果存活对象过多,使得Survivor区也满,那么就会转移Survivor区对象到老年代。3、标记-整理算法标记过程与1一样,将1中的清除过程换成了整理,即将内存中存活的对象归拢到一边,使得内存更“紧凑”一些,整理之后将边界之外的对象清理掉。这种算法是为了防止2算法中出现存活率100%的极端情况,那么复制就没有止境了。4、分代算法新生代采用2算法,老年代采用1或3算法。这是由他们的特点决定的,新生代注定了其中很多对象生命周期转瞬即逝,因此复制算法移动的存货对象并不是很多。而老年代存活率较高,只能采用1、3来执行,提高效率。JVM参数相关可以调整堆内新生代老年代比例可以调整对象移入老年代的年龄可以调整堆内存大小可以设置每个栈大小可以设置堆内分区大小可选择垃圾回收方式JVM类加载机制双亲委派模型。类加载器(ClassLoader)用来实现类的加载动作。JVM中只存在两种不同的类加载器:启动类加载器和其他类加载器。启动类加载器:即Bootstrap ClassLoader。由C++编写,在JVM内部。其他类加载器都由Java编写,在JVM外部,全部继承于抽象类java.lang.ClassLoader。类加载器之间的层次关系,称为双亲委派模型。顶层为启动类加载器,下边为扩展类加载器,再下为应用程序类加载器,其中包含多种自定义类加载器。如果一个类加载器收到了加载类的请求,它首先不会自己去加载,而是委派给它的父加载器去执行。层层委派之后,到了顶层由启动类加载器加载,只有当父加载器反馈无法加载此请求,才会让子加载器去加载。这种结构使得Java类型体系中的加载机制清晰准确,不易造成混乱。有一种双亲委派模型的异常情况,即类似启动类加载器这种基础的类加载器,本应默认为所有类适用的加载器,但由于一些环境下调用SPI(Service Provider Interface),绕过双亲委派模型的层次结构使得父加载器委派子加载器去完成类加载动作。还有一种情况,即为了实现模块的动态性、热部署,不再使用双亲委派模型,而是使用更加复杂的网状结构。OSGi技术即是类加载器网状结构的一个最佳实践。如何判断当前系统内是否存在死锁?可以打印当前的内存快照,可以看到快照中有deadLock对象,所在的方法,请求被锁的资源,从而进一步分析死锁原因。ThreadLocalThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。示例: