2026计算机岗面试真题汇编试题摘编含答案_第1页
2026计算机岗面试真题汇编试题摘编含答案_第2页
2026计算机岗面试真题汇编试题摘编含答案_第3页
2026计算机岗面试真题汇编试题摘编含答案_第4页
2026计算机岗面试真题汇编试题摘编含答案_第5页
已阅读5页,还剩10页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026计算机岗面试真题汇编试题摘编含答案考试时间:______分钟总分:______分姓名:______一、单项选择题1.在操作系统中,进程与线程的主要区别不包括以下哪一项?A.进程是资源分配的基本单位,线程是程序执行的基本单位B.一个进程可以包含多个线程,同一进程内的各个线程共享该进程的地址空间C.线程在执行过程中,不需要拥有独立的资源,只需要少量的栈空间来保存运行状态D.线程之间的通信比进程之间的通信更加频繁且高效2.TCP协议进行三次握手建立连接时,第二次握手(SYN=1,ACK=1)的主要作用是?A.客户端发送确认报文,表示服务端请求建立连接成功B.服务端发送确认报文,确认客户端的连接请求,并同步发送自己的连接请求C.客户端发送数据包,确认服务端收到了第一次握手D.服务端发送数据包,确认客户端收到了第二次握手3.以下哪个数据结构最适合用来实现“最近最少使用(LRU)”缓存淘汰策略?A.队列B.栈C.哈希表D.双向链表+哈希表4.在Java中,关于String类的描述,下列说法正确的是?A.String是可变的字符序列,一旦创建,其内容不可修改B.Stringstr="Hello";Stringstr2="Hello";str=str+"World";此时str指向新的内存地址C.Stringstr=newString("Hello");和Stringstr="Hello";在内存中会分配完全相同的对象数量D.使用StringBuffer进行字符串拼接比使用+号效率更高5.MySQL数据库中,聚簇索引和非聚簇索引的主要区别在于?A.聚簇索引的叶子节点包含所有数据,非聚簇索引的叶子节点只包含索引字段B.聚簇索引只能有一个,非聚簇索引可以有多个C.聚簇索引不支持范围查询,非聚簇索引支持D.聚簇索引是主键索引,非聚簇索引是唯一索引6.Redis中,关于过期键的删除策略,下列说法正确的是?A.定期删除和惰性删除都会在内存达到上限时触发B.惰性删除是指在访问键时检查是否过期,过期则删除C.定期删除是每隔固定时间对一定数量的数据库的随机key进行检查D.定期删除可以彻底解决内存泄漏问题7.以下关于HTTP/1.1与HTTP/2的区别,描述错误的是?A.HTTP/2支持多路复用,可以在一个TCP连接上并发发送多个请求和响应B.HTTP/2对消息头进行了压缩,减少了传输大小C.HTTP/1.1是明文传输,HTTP/2是加密传输D.HTTP/2采用了二进制格式,而不是文本格式8.在Linux系统中,为了查找包含特定字符的文件,最常用的命令是?A.grepB.findC.lsD.cat9.下列算法中,时间复杂度最低的是?A.冒泡排序B.快速排序C.归并排序D.希尔排序10.以下关于分布式系统的CAP定理,说法正确的是?A.一个分布式系统最多只能同时保证一致性、可用性和分区容错性中的两项B.CA系统比CP系统更常用,因为一致性和可用性都很重要C.在分区容错的情况下,必须放弃一致性来保证可用性D.AP系统在任何情况下都能保证数据的强一致性二、多项选择题1.在TCP协议的传输过程中,以下哪些状态可能会出现在三次握手和四次挥手的过程中?A.LISTENB.SYN_SENTC.ESTABLISHEDD.TIME_WAIT2.关于Java的垃圾回收机制(GC),以下说法正确的有?A.垃圾回收器主要关注的是堆内存的回收B.栈内存和程序计数器是线程私有的,不存在垃圾回收C.如果一个对象没有任何引用指向它,那么它一定会被GC回收D.System.gc()是一个可以强制进行垃圾回收的静态方法3.以下哪些是常见的数据库索引失效的情况?A.在索引列上进行计算操作B.对索引列使用函数操作C.LIKE查询以通配符开头(如%abc)D.在索引列上进行ISNULL操作4.在微服务架构中,常用的服务发现组件包括?A.EurekaB.NacosC.ZookeeperD.Redis5.以下哪些是Redis支持的数据类型?A.SetB.BitmapC.StackD.Geo6.关于JavaScript中的闭包,下列描述正确的有?A.闭包是指有权访问另一个函数作用域中变量的函数B.闭包会导致内存泄漏C.闭包常用于函数工厂和模块模式D.闭包中的变量不会被垃圾回收机制回收7.以下哪些操作会触发MySQL事务的回滚?A.执行ROLLBACK命令B.执行COMMIT命令C.数据库连接断开D.执行DDL语句(如CREATETABLE)8.在Linux中,以下哪些命令可以查看文件内容?A.moreB.lessC.headD.sort9.以下关于算法复杂度的描述,正确的有?A.时间复杂度衡量算法执行时间随数据规模增长的变化趋势B.空间复杂度衡量算法执行过程中临时占用存储空间的大小C.O(1)表示算法执行时间与输入规模无关D.最好情况的时间复杂度通常用来衡量算法的整体性能10.在设计高并发系统时,常用的限流算法包括?A.令牌桶算法B.漏桶算法C.计数器算法D.快速失败算法三、简答题1.请简述死锁产生的四个必要条件,并说明如何预防死锁。2.请解释TCP协议中的“滑动窗口”机制,以及它如何实现流量控制。3.在MySQL中,B+树相比B树在数据库索引中的应用优势是什么?4.什么是Java中的“内存泄漏”?常见的内存泄漏场景有哪些?5.解释一下HTTP协议中GET和POST请求的主要区别。四、编程/算法题1.给定一个单链表的头节点head,反转链表,并返回反转后的链表。2.给定一个包含非负整数的数组nums和一个目标值target,找出数组中中和为目标值的两个数的索引,并返回它们的值。你可以假设每种输入只会对应一个答案。并且,你不能利用同一个元素使用两次。3.实现一个LRU(LeastRecentlyUsed)缓存机制。它应该支持以下操作:获取数据get和写入数据put。-get(key):如果关键字key存在于缓存中,则返回key对应的value,否则返回-1。-put(key,value):如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组数据。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据。五、系统设计题1.请设计一个短链接生成系统,需求如下:-用户输入一个长URL,系统生成一个短URL。-用户访问短URL,能够重定向到原始的长URL。-要求系统具备高可用性,能够处理海量访问请求。-请简要说明系统的整体架构、核心流程以及可能遇到的难点和解决方案。试卷答案一、单项选择题1.C解析:线程是程序执行的基本单位,进程是资源分配的基本单位。线程共享进程的地址空间,但拥有独立的栈和寄存器。线程之间的通信比进程更频繁且高效,是因为它们共享内存,但“不需要独立的资源”这一说法不准确,线程仍然需要少量的栈空间等资源。2.B解析:第二次握手是服务端收到客户端的SYN报文后,发送一个SYN+ACK报文。ACK=1表示确认收到,SYN=1表示服务端也请求建立连接。这一步既确认了客户端的请求,又向客户端发出了自己的连接请求。3.D解析:LRU(最近最少使用)算法需要快速定位某个节点以及快速删除头节点和尾节点。双向链表适合在任意位置插入和删除,哈希表适合快速查找。因此,双向链表+哈希表是实现LRU的标准数据结构组合。4.D解析:String是不可变的,A错误。`str=str+"World"`会创建新的String对象,B错误。`newString("Hello")`会创建一个堆对象和一个常量池对象(如果常量池没有),而字面量方式通常只创建常量池对象,C错误。StringBuffer是可变的,且在大量字符串拼接时性能优于直接使用+号(尤其是JDK1.5之前),D正确。5.A解析:聚簇索引的叶子节点存储的是整行数据(索引即数据),而非聚簇索引的叶子节点存储的是主键值和索引字段,通过指针指向聚簇索引的叶子节点。聚簇索引支持范围查询,C错误。非聚簇索引也可以是唯一索引,D错误。6.B解析:惰性删除是指当访问某个键时,检查其过期时间,如果过期则删除。定期删除是Redis服务器在后台周期性地随机抽取部分数据库的key进行检查。A错误(定期删除不保证内存达到上限时触发),C错误(定期删除不保证彻底解决泄漏,只是概率性清理),D错误(惰性删除保证了访问时数据有效,但可能产生内存浪费)。7.C解析:HTTP/1.1是明文传输(基于TCP),HTTP/2是二进制帧传输,并且支持头部压缩。HTTP/2本身不强制加密,加密通常通过TLS(HTTPS)实现。因此C选项说HTTP/2是加密传输是错误的。8.A解析:`grep`命令用于在文件中搜索匹配的文本内容;`find`命令用于在目录树中查找文件;`ls`用于列出目录内容;`cat`用于查看文件内容。题目要求“查找包含特定字符的文件”,通常指在文件内容中搜索,故选A。9.B解析:快速排序的平均时间复杂度是O(nlogn),属于高效的排序算法。冒泡排序是O(n^2),归并排序也是O(nlogn)(但通常常数因子较大),希尔排序介于O(nlogn)和O(n^2)之间。故B最快。10.A解析:CAP定理指出,分布式系统最多只能同时保证一致性、可用性和分区容错性中的两项。在P(分区容错)必然发生的情况下,只能在C和A之间做权衡。AP系统保证可用性但可能数据不一致,CP系统保证一致性但可能不可用。B错误(CA在P下不可用),C正确(在P下必须放弃一致性或可用性),D错误(AP系统通常保证最终一致性,而非强一致性)。二、多项选择题1.A,B,C,D解析:TCP连接建立过程涉及LISTEN(监听),客户端发送SYN后进入SYN_SENT,建立成功后进入ESTABLISHED。断开过程中,主动方发送FIN后进入TIME_WAIT状态,被动方发送FIN后进入FIN_WAIT_2。因此四个状态均可能出现。2.A,B,D解析:垃圾回收主要关注堆内存,栈内存和程序计数器是线程私有的,GC无法回收,A正确。如果一个对象没有任何引用指向它,理论上可以被回收,但C选项说“一定会被回收”在极端情况下(如静态集合未清理)可能不准确,D正确(System.gc()是建议,但确实触发GC)。B正确。3.A,B,C解析:在索引列上进行计算或函数操作会导致索引失效(A、B)。LIKE以通配符开头(如%abc)会导致全表扫描,索引失效(C)。ISNULL操作通常可以使用索引,D错误。4.A,B,C解析:Eureka、Nacos、Zookeeper都是常用的服务发现组件。Redis主要用于缓存或数据库,不属于服务发现组件。5.A,B,D解析:Redis支持Set(集合)、Bitmap(位图)、Geo(地理位置)。Redis中没有原生的Stack数据结构(尽管可以用List模拟)。6.A,B,C解析:闭包是指有权访问外部函数变量的函数。闭包可能导致内存泄漏(B),因为它持有外部变量的引用。闭包常用于模块模式(C)。闭包中的变量如果外部不再引用,会被GC回收,D错误。7.A,D解析:执行ROLLBACK命令会回滚事务。执行DDL语句(如CREATETABLE)在MySQL中会隐式提交当前事务,导致之前的操作失效。执行COMMIT命令是提交,不会回滚。数据库连接断开通常取决于是否设置了自动提交以及事务隔离级别,但在常规理解中,断开连接通常意味着事务结束,不一定是回滚(除非显式设置)。通常考点在于显式回滚和DDL导致的隐式回滚/提交。这里选AD较稳妥。8.A,B,C解析:more、less、head都可以查看文件内容。sort命令用于排序文件内容,不能直接查看(虽然它读取文件,但主要功能是排序)。9.A,B,C解析:时间复杂度衡量执行时间随数据规模的增长趋势,空间复杂度衡量占用空间,O(1)表示常数级时间,这些都是正确的。最好情况的时间复杂度不能代表算法的整体性能,D错误。10.A,B,C解析:令牌桶、漏桶、计数器是常见的限流算法。快速失败是一种策略,但不是像前三者那样标准的算法名称(尽管相关),通常不作为独立选项。选ABC。三、简答题1.死锁产生的四个必要条件及预防方法解析:四个必要条件:互斥条件、请求与保持条件、不剥夺条件、循环等待条件。预防方法:*破坏互斥条件(较少用,通常不满足)。*破坏请求与保持条件:一次性申请所有资源,如果申请不到则全部放弃。*破坏不剥夺条件:当进程申请不到资源时,强制释放已占有的资源,待需要时再申请。*破坏循环等待条件:对所有资源类型进行排序(编号),进程申请资源时必须按编号顺序申请。2.TCP滑动窗口机制及流量控制解析:滑动窗口机制:TCP接收方维护一个窗口(缓冲区大小),接收方在TCP报文的头部通告接收窗口大小(rwnd)。发送方根据这个窗口大小来控制发送数据的速率,窗口的大小随网络拥塞情况和接收方处理能力动态变化。流量控制:接收方通过在ACK报文中通告自己的接收窗口大小(rwnd),来告诉发送方自己还能接收多少数据。如果接收方处理不过来,就通告较小的窗口,从而限制发送方的发送速率,防止发送方发送数据过快导致接收方缓冲区溢出。3.B+树相比B树在数据库索引中的应用优势解析:*扇出更高:B+树的非叶子节点不存储数据,只存储索引,因此同样的磁盘块可以存储更多的索引项,树的高度更低,I/O次数更少。*范围查询效率高:B+树的所有叶子节点通过双向链表连接,非常适合进行全表扫描和范围查询(如`SELECT*FROMtableWHEREid>100`)。*查询稳定性:B+树的查询必须从根节点走到叶子节点,所有查询路径长度相同,查询性能稳定。4.Java内存泄漏及常见场景解析:定义:内存泄漏是指程序中已分配的堆内存由于某种原因程序未释放或无法释放,导致系统内存持续减少,甚至耗尽。常见场景:*静态集合类:如HashMap、List等,如果只存不删,对象将一直被引用。*监听器未注销:在注册监听器后,如果没有显式调用remove方法移除,监听器持有的对象不会被回收。*变量作用域不当:在循环中创建大量对象但只引用了最后一个。*单例模式滥用:单例持有外部类的引用,而外部类在不需要时仍在使用。5.GET和POST请求的主要区别解析:*语义:GET用于获取数据,POST用于提交/创建数据。*参数位置:GET参数放在URL的QueryString中,POST参数放在RequestBody中。*幂等性:GET是幂等的(多次请求结果相同),POST通常是非幂等的。*缓存:GET请求通常会被浏览器缓存,POST请求通常不会被缓存。*安全性:GET参数暴露在URL中,安全性较低;POST参数在Body中相对安全。四、编程/算法题1.反转链表答案:```javapublicListNodereverseList(ListNodehead){ListNodeprev=null;ListNodecurr=head;while(curr!=null){ListNodenextTemp=curr.next;curr.next=prev;prev=curr;curr=nextTemp;}returnprev;}```解析:使用迭代法。定义两个指针,一个指向前驱节点(初始为null),一个指向当前节点(初始为head)。遍历链表时,先保存当前节点的下一个节点,然后将当前节点的next指向前驱节点,最后移动两个指针。当当前节点为空时,前驱节点即为新的头节点。2.两数之和答案:```javapublicint[]twoSum(int[]nums,inttarget){Map<Integer,Integer>map=newHashMap<>();for(inti=0;i<nums.length;i++){intcomplement=target-nums[i];if(map.containsKey(complement)){returnnewint[]{map.get(complement),i};}map.put(nums[i],i);}returnnewint[]{};}```解析:使用哈希表存储已遍历数字及其索引。遍历数组时,计算当前数字与目标的差值。如果差值存在于哈希表中,说明找到了目标对,返回其索引;否则,将当前数字存入哈希表。时间复杂度O(n),空间复杂度O(n)。3.LRU缓存实现答案(JavaLinkedHashMap实现思路):```javaclassLRUCacheextendsLinkedHashMap<Integer,Integer>{privateintcapacity;publicLRUCache(intcapacity){super(capacity,0.75f,true);this.capacity=capacity;}publicintget(intkey){returnsuper.getOrDefault(key,-1);}publicvoidput(intkey,intvalue){super.put(key,value);}@OverrideprotectedbooleanremoveEldestEntry(Map.Entry<Integer,Integer>eldest){returnsize()>capacity;}}```解析:核心思想是维护一个有序链表。get和put操作时,如果数据存在,则将其移动到链表头部;如果不存在,则插入头部。当容量满时,移除链表尾部元素。Java中可以直接利用`LinkedHashMap`的`ac

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论