2026年公司上机测试题及答案_第1页
2026年公司上机测试题及答案_第2页
2026年公司上机测试题及答案_第3页
2026年公司上机测试题及答案_第4页
2026年公司上机测试题及答案_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

2026年公司上机测试题及答案一、单项选择题(本大题共15小题,每小题2分,共30分。在每小题给出的四个选项中,只有一项是符合题目要求的)1.在现代高并发分布式系统设计中,为了解决单点故障问题并提高系统的可用性,通常采用冗余机制。以下关于“主从热备”和“双机热备”的描述中,准确的是:A.主从热备模式下,从节点通常只处理读请求,主节点故障时需要人工干预或自动脚本将从节点提升为主节点。B.双机热备模式下,两台服务器同时运行各自的应用服务,互为备份,任何一台故障都不会影响服务,但资源利用率较低。C.主从热备模式下,数据同步通常是异步的,因此在主节点宕机时,从节点的数据必定与主节点完全一致。D.双机热备必须使用共享存储,否则无法保证数据的一致性。2.考虑一个使用TCP协议传输大文件的场景。假设TCP拥塞控制算法处于慢启动阶段,拥塞窗口cwnd初始为1MSS(最大报文段长度),慢启动阈值ssthresh为16MSS。在连续收到3个ACK确认后,cwnd的值将变为:A.2MSSB.4MSSC.8MSSD.16MSS3.在操作系统的内存管理中,虚拟内存技术是核心机制之一。关于页式存储管理,以下说法错误的是:A.页表的作用是实现从逻辑地址到物理地址的映射。B.TLB(TranslationLookasideBuffer)用于缓存最近访问的页表项,以提高地址转换速度。C.当发生缺页中断时,操作系统必须将磁盘上的数据调入内存,如果内存已满,则需要执行页面置换算法。D.在多级页表结构中,虚拟地址的划分是固定的,且各级页表的大小必须相同。4.某电商系统在设计数据库索引时,针对商品表中的“分类ID”和“上架时间”建立了联合索引。以下SQL查询语句中,最能充分利用该联合索引以避免全表扫描的是:A.SELECT*FROMproductsWHEREcategory_id=5;B.SELECT*FROMproductsWHEREon_sale_time>'2026-01-01';C.SELECT*FROMproductsWHEREon_sale_time>'2026-01-01'ANDcategory_id=5;D.SELECT*FROMproductsWHEREcategory_id>5;5.在Python编程中,GIL(全局解释器锁)是CPython解释器中的一个重要特性。关于GIL及其对多线程的影响,以下描述正确的是:A.GIL的存在保证了Python多线程在任何情况下都能安全地执行任意字节码,无需考虑线程安全问题。B.GIL主要限制了同一时刻只能有一个线程执行Python字节码,因此在CPU密集型任务中,多线程无法实现真正的并行。C.使用多进程替代多线程完全解决了GIL带来的性能瓶颈,且进程间通信的开销与线程间通信完全一致。D.在I/O密集型任务中,GIL会被释放,但Python的多线程性能依然不如单线程,因为线程切换开销过大。6.设计模式是软件开发中常见的解决方案。在观察者模式中,以下描述不符合其设计意图的是:A.它定义了对象之间的一对多依赖关系,使得当一个对象改变状态时,所有依赖于它的对象都会得到通知并自动更新。B.观察者模式实现了被观察者与观察者之间的抽象耦合,被观察者不需要知道具体的观察者是谁。C.观察者模式通常用于实现分布式系统的事件总线,因为它是同步阻塞的,能保证消息的可靠送达。D.在Java中,java.util.Observable和java.util.Observer是早期对观察者模式的支持,但在较新版本中已被标记为过时。7.给定一个单向链表,链表中除了指向下一个节点的指针next外,还包含一个随机指针random,该指针可能指向链表中的任意节点或空。要求复制该链表,时间复杂度必须为O(N),空间复杂度为O(1)(不计算返回的新链表所占空间)。以下哪种算法策略最适合此要求?A.使用哈希表存储原节点到新节点的映射,遍历两次链表。B.递归复制每个节点,利用哈希表去重。C.在原链表的每个节点后面插入新节点,然后利用next和random的相对关系建立连接,最后拆分链表。D.深度优先搜索遍历图结构。8.假设我们使用K-Means算法对一组二维数据进行聚类。在算法执行过程中,关于质心的更新和收敛条件,以下说法正确的是:A.K-Means算法保证一定能收敛到全局最优解,即误差平方和(SSE)最小的划分。B.质心的更新公式是计算簇内所有样本点的几何中位数。C.如果某个簇在迭代过程中变为空簇,通常的做法是直接忽略该簇,将K值减1。D.K-Means算法的收敛结果可能受到初始质心选择的影响,因此常采用K-Means++算法来优化初始质心的选择。9.在前端开发中,关于浏览器的事件循环机制,以下描述错误的是:A.宏任务包括setTimeout、setInterval、I/O、UIRendering等。B.微任务包括Promise.then、MutationObserver等。C.每次事件循环中,主线程会先执行当前栈中的同步代码,然后清空微任务队列,再执行一个宏任务。D.所有微任务的优先级都低于宏任务,因此微任务总是在下一轮事件循环开始前执行完毕。10.考虑关系模式R(U,F),其中U={A,B,C,D,E},函数依赖集F={A→B,B→C,C→D,D→E}。关系模式R的规范化程度最高可以达到:A.1NFB.2NFC.3NFD.BCNF11.在Linux系统中,关于文件权限和进程管理,以下命令或描述错误的是:A.chmod777filename将文件权限设置为所有用户可读、可写、可执行。B.kill-9PID会强制立即终止指定PID的进程,该信号不能被进程捕获或忽略。C.psaux|grepjava用于查找名为java的进程,其中grep命令本身也会出现在输出结果中。D.top命令显示的loadaverage(平均负载)是指CPU的利用率百分比。12.现代微服务架构中,服务网格逐渐成为主流。关于Istio等服务网格的核心组件,以下描述不准确的是:A.数据平面通常由一组轻量级的网络代理组成,这些代理以Sidecar模式部署在每个服务Pod中。B.控制平面负责配置和管理数据平面的代理,提供服务发现、流量管理、策略执行等功能。C.服务网格能够完全替代应用代码中的熔断、重试等逻辑,开发者无需在业务代码中处理网络容错。D.Mixer是Istio早期版本中的独立组件,负责策略检查和遥测数据收集,但在新架构中其功能已被拆分。13.给定一个数组arr=[2,1,5,3,6,4],若使用快速排序算法进行升序排序,且选择第一个元素作为基准,第一趟划分后的结果可能是:A.[1,2,5,3,6,4]B.[1,2,3,4,6,5]C.[1,2,5,3,4,6]D.[2,1,3,5,6,4]14.在密码学应用中,数字签名技术用于保证数据的完整性、不可否认性。关于数字签名,以下说法正确的是:A.发送方使用接收方的公钥对数据进行签名,接收方使用自己的私钥验证签名。B.发送方使用自己的私钥对数据的哈希值进行加密生成签名,接收方使用发送方的公钥解密并比对哈希值。C.数字签名算法通常是对称加密算法,因为其计算速度比非对称加密快。D.一旦数据被签名,任何人都无法篡改数据,因为签名是直接对原文加密的。15.某系统采用Redis作为缓存,为了防止缓存雪崩,以下哪种措施是无效的?A.给不同的Key的过期时间加上随机值。B.使用互斥锁,当缓存失效时,只允许一个线程去查询数据库并回写缓存。C.增加Redis集群的节点数量,提高抗压能力。D.将缓存永不过期,而是采用异步更新策略。二、不定项选择题(本大题共10小题,每小题3分,共30分。每小题给出的四个选项中,至少有两个选项是符合题目要求的)16.以下哪些技术或协议属于OSI七层模型或TCP/IP四层模型中的网络层?A.IP(InternetProtocol)B.ICMP(InternetControlMessageProtocol)C.ARP(AddressResolutionProtocol)D.OSPF(OpenShortestPathFirst)17.在Java编程语言中,关于HashMap的实现原理,以下描述正确的有:A.JDK1.8中,HashMap底层数组结构在链表长度超过8且数组长度超过64时会转化为红黑树,以提高查询效率。B.HashMap是线程不安全的,多线程环境下put操作可能导致数据覆盖或死循环(JDK1.7扩容时)。C.HashMap的初始容量必须是2的幂次方,这是为了通过位运算代替取模运算,提高哈希计算效率。D.HashMap中的key和value都允许为null。18.关于Linux的I/O模型,以下说法包含正确的有:A.阻塞I/O:应用程序调用recvfrom,系统没有数据准备好,进程一直阻塞,直到数据准备好拷贝到用户空间。B.非阻塞I/O:应用程序调用recvfrom,系统没有数据准备好,立即返回错误,进程需要不断轮询。C.I/O多路复用:select、poll、epoll都是I/O多路复用的机制,其中epoll在连接数大但活跃连接数不多的情况下性能最优。D.信号驱动I/O:进程发起I/O请求后,继续执行,当数据准备好时,内核向进程发送SIGIO信号。19.设计一个高可用的消息队列系统,需要考虑的核心问题包括:A.消息的持久化存储,防止Broker宕机导致消息丢失。B.消息的顺序性保证,确保同一业务ID的消息按发送顺序消费。C.消息的幂等性处理,防止因网络重试导致消费者重复消费。D.消息的积压处理能力,当消费者消费速度远低于生产者速度时的背压机制。20.以下哪些算法属于图论中的最短路径算法?A.Dijkstra算法B.Floyd-Warshall算法C.Prim算法D.A*算法21.在Web前端安全中,常见的攻击方式及对应的防御措施包括:A.XSS攻击(跨站脚本攻击):对用户输入进行过滤,设置CSP(内容安全策略)。B.CSRF攻击(跨站请求伪造):使用SameSiteCookie属性,验证Referer,使用Anti-CSRFToken。C.SQL注入:使用预编译语句。D.点击劫持:使用JavaScript禁用iframe嵌套。22.关于Docker容器技术,以下描述正确的有:A.容器与宿主机共享内核,容器内的进程是宿主机上的普通进程,只是通过Namespace实现了资源隔离。B.Docker镜像采用分层存储机制,UnionFileSystem(联合文件系统)是其核心技术之一。C.dockerrun-v/host/path:/container/path命令可以将宿主机目录挂载到容器中,实现数据持久化。D.容器退出后,其内部写入的数据如果没有挂载到卷,通常会丢失。23.在机器学习中,关于正则化,以下说法正确的有:A.L1正则化倾向于产生稀疏解,常用于特征选择。B.L2正则化倾向于让权重衰减,防止模型过拟合,使模型更平滑。C.正则化项可以防止模型参数过大,从而限制模型的复杂度。D.Dropout也是一种正则化手段,主要用于神经网络,通过随机丢弃神经元来防止过拟合。24.以下哪些排序算法的时间复杂度在最坏情况下是O(A.快速排序B.归并排序C.堆排序D.冒泡排序25.关于Git版本控制系统,以下命令或概念描述正确的有:A.gitmerge--no-ff可以保留分支的历史提交记录,不进行Fast-forward合并。B.gitrebase用于变基,可以将当前分支的提交移动到目标分支的最新提交之后,使历史更线性。C..gitignore文件中配置的规则,对已经被Git追踪的文件不生效,需要先gitrm--cached。D.gitstash可以将当前工作区的修改暂存起来,以便切换分支。三、填空题(本大题共10小题,每小题2分,共20分)26.在二叉树中,若某节点度为2(有两个子节点),则该节点的左子树和右子树也是二叉树。已知一棵完全二叉树共有1000个节点,其叶子节点个数为________。27.IP地址00/25的子网掩码是________,该子网可用的主机地址范围是________(请写出起始和结束IP)。28.在Python中,使用________模块可以轻松实现多进程,该模块提供了Process类来创建进程。29.关系数据库事务的ACID特性中,________特性是指事务执行的结果使得数据库由一种一致状态转变为另一种一致状态。30.已知斐波那契数列定义为F(0)31.在计算机网络中,HTTP协议默认使用端口号________,HTTPS协议默认使用端口号________。32.假设有一个栈S,初始为空。执行操作:S.push(1);S.push(2);S.pop();S.push(3);S.push(4);S.pop();此时栈顶元素为________。33.编译原理中,将高级语言源代码翻译成汇编语言或机器代码的过程通常分为词法分析、语法分析、语义分析、中间代码生成、代码优化和________六个主要阶段。34.在Vue.js框架中,用于实现双向数据绑定的指令是________。35.已知一个样本集X=1,四、简答题(本大题共4小题,每小题10分,共40分)36.请简述CAP定理的内容,并说明在分布式系统设计中,为什么通常需要在一致性和可用性之间做权衡?请结合ZooKeeper(CP)和Cassandra(AP)的特点进行简要分析。37.请解释什么是死锁?产生死锁的四个必要条件是什么?在操作系统中,可以通过哪些策略来处理死锁?38.请详细解释HTTPS协议的工作原理,包括握手过程、对称加密与非对称加密的使用方式,以及它是如何保证数据传输安全的。39.在微服务架构中,服务拆分是一个复杂的过程。请列举在进行服务拆分时应该遵循的原则,并说明拆分后可能带来的挑战及应对思路。五、算法编程题(本大题共3小题,共40分)40.(10分)两数之和变体给定一个整数数组nums和一个目标整数target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。要求:请给出时间复杂度优于O(示例:输入nums=[3,2,4],target=6,输出[1,2]。41.(15分)最长回文子串给你一个字符串s,找到s中最长的回文子串。要求:请使用动态规划或中心扩展法实现,并分析时间复杂度。请使用Python或Java编写函数实现。示例:输入s="babad",输出"bab"或"aba"均可。42.(15分)LRU缓存机制运用你所掌握的数据结构,设计和实现一个LRU(最近最少使用)缓存机制。它应该支持以下操作:获取数据get和写入数据put。get(key):如果密钥存在于缓存中,则获取密钥的值(总是正数),否则返回-1。put(key,value):如果密钥已经存在,则变更其数据值;如果密钥不存在,则插入该组「关键字/值」。当缓存容量达到上限时,它应该在写入新数据之前删除最久未使用的数据值,从而为新的数据值留出空间。要求:尽量在O(1)时间复杂度内完成这两个操作。请使用Python或Java编写类实现。六、数据库设计题(本大题共2小题,共30分)43.(15分)SQL查询编写现有两张表:学生表Student(student_idINT,student_nameVARCHAR,class_idINT)成绩表Score(student_idINT,subject_idINT,scoreINT)请编写一条SQL语句,查询出每个班级的平均分,且只显示平均分大于80分的班级ID,并按平均分降序排列。44.(15分)索引优化与事务假设有一个用户订单系统,表结构如下:Order(order_idBIGINTPRIMARYKEY,user_idBIGINT,amountDECIMAL,statusTINYINT,create_timeDATETIME)该表数据量已达千万级,业务上经常执行以下查询:SELECT*FROMOrderWHEREuser_id=1001ANDstatus=1ORDERBYcreate_timeDESCLIMIT20;(1)请设计合适的索引来优化上述查询,并说明理由。(2)在高并发场景下,用户下单涉及插入订单表和扣减库存表,需要保证数据一致性。请简述在数据库层面如何利用事务处理,并说明可能出现的死锁场景及预防方法。参考答案与解析一、单项选择题1.B解析:A选项中,主从热备通常从节点不处理写请求,只处理读请求(读写分离),主节点故障时通常需要自动故障转移,而非仅仅人工干预。B选项正确描述了双机热备(Active-Standby或Active-Active模式的一种,此处指两台同时运行且互备,实际上更接近双机互备援模式)。C选项中,异步同步会导致数据丢失,主节点宕机时从节点数据可能不一致。D选项中,双机热备可以使用数据同步软件而非必须共享存储,虽然共享存储是常见实现,但不是唯一条件。2.C解析:慢启动阶段,cwnd指数增长。初始1MSS。收到1个ACK,cwnd+=1MSS。收到3个ACK,cwnd=1+3=4MSS。注意:慢启动通常是每收到一个ACK就增加,或者每RTT增加。标准TCP慢启动是每收到一个ACK,cwnd增加1MSS。初始cwnd=1。收到第1个ACK->cwnd=2。收到第2个ACK->cwnd=3。收到第3个ACK->cwnd=4。故选C。3.D解析:多级页表中,各级页表的大小并不一定相同,通常由页表项大小和该级索引位宽度决定。4.C解析:联合索引遵循“最左前缀原则”。索引是,必须先有category_id的条件才能利用索引。A选项可以利用索引(只用了第一列)。B选项无法利用索引(跳过了第一列)。C选项中,虽然顺序反了,但MySQL优化器通常能识别并利用联合索引进行范围查询和排序。D选项范围查询也可以利用索引。对比A和C,C利用了更多列,且题目问“最能充分利用”,C利用了索引的过滤和排序(create_time降序可能无法利用索引排序,因为索引是升序,但过滤肯定利用了)。实际上A和B的对比中,A能用。但C包含了category_id,且查询条件更具体。通常情况下,联合索引对于精确匹配和范围查询组合非常有效。这里选C是因为它包含了所有索引列的查询条件(虽然顺序不同,但优化器会处理),过滤性最强。5.B解析:GIL限制同一时刻只有一个线程执行Python字节码,这对CPU密集型任务影响巨大,无法利用多核。A错,GIL只保护字节码级,非线程安全操作仍需锁。C错,进程间通信(IPC)开销远大于线程。D错,I/O密集型任务中,多线程是有效的,因为GIL会在I/O等待时释放。6.C解析:观察者模式通常是同步调用的,被观察者依次通知观察者。如果用于分布式系统,通常需要引入消息队列等中间件来解耦和异步处理,标准的观察者模式并不直接保证分布式环境下的可靠送达。7.C解析:A选项时间O(N)但空间O(N)(哈希表)。C选项通过在原节点后插入新节点,利用Ne8.D解析:K-Means是贪心算法,易陷入局部最优,受初始值影响大,故A错,D对。质心更新是计算均值,不是中位数,B错。空簇处理通常策略是重新初始化质心或移除,并非简单K减1,C错。9.D解析:微任务的优先级高于宏任务。每次事件循环执行栈空后,先清空微任务队列,再取一个宏任务执行。D说微任务低于宏任务是错误的。10.D解析:F={A→B,B→C,C→D,D→E}。候选键是A。非主属性B,C,D,E。不存在非主属性对码的部分依赖(因为码只有一个属性),所以满足2NF。不存在非主属性对码的传递依赖?A→B,B→C(传递),A→C。存在传递依赖A→B→C,故不满足3NF。BCNF要求所有决定因素都包含码。这里B决定C,但B不是码,故不满足BCNF。等等,题目问“最高可以达到”。由于存在传递依赖,最高是2NF。修正:F={A→B,B→C,C→D,D→E}。1NF肯定满足。码是A。部分依赖?无(只有单属性码)。->2NF。传递依赖?A->B->C。存在。->不是3NF。所以最高是2NF。选项B。11.D解析:LoadAverage是指运行队列中的平均进程数,即等待CPU或正在使用CPU的进程数,不是CPU利用率百分比。12.C解析:服务网格接管了网络通信,但并不完全替代应用代码中的所有逻辑,例如业务逻辑层面的重试策略可能需要配合代码配置,但C说“完全替代...无需处理”过于绝对,且部分重试逻辑在应用层可能更灵活。更重要的是,Istio等确实能处理熔断重试,但C的表述“完全替代...无需处理”通常被认为是错误的,因为开发者仍需配置规则,且某些业务特定的重试逻辑在Sidecar中难以精确表达(如涉及业务状态码判断)。此外,Mixer组件的描述在D中是正确的(Telemtry和Policy已去中心化)。C选项是典型的误区描述。13.A解析:基准为2。过程:i从右向左找比2小的,j从左向右找比2大的。初始:2,1,5,3,6,4i停到1(位置1),j停到5(位置2)。交换->2,1,5,3,6,4i继续左找,i停到1(位置1),j继续右找,j停到3(位置3)。i<j不成立,结束。将基准2与i位置(1)的元素交换->1,2,5,3,6,4。结果为A。14.B解析:数字签名是私钥签名(加密摘要),公钥验证(解密摘要比对)。A错,反了。C错,是非对称。D错,签名是对摘要加密,且篡改后验证失败。15.C解析:缓存雪崩是指大量缓存同时失效。C增加节点是为了容量和性能,不解决同时失效问题,甚至可能加剧。A随机过期时间有效。B互斥锁防止击穿,也能缓解雪崩。D永不过期也是有效策略。二、不定项选择题16.ABCD解析:IP,ICMP,ARP,OSPF都属于网络层协议或其辅助协议。虽然ARP在TCP/IP中常被视为链路层,但在OSI模型及许多教材分类中,由于其解析IP地址的功能,常被关联到网络层接口。实际上ARP工作在数据链路层,但在涉及IP地址解析时,它服务于IP协议。不过在网络层考题中,这四个通常都被视为网络层相关的协议簇。严格来说ARP是链路层,但在广域网考试中,常把ICMP,IGMP,ARP,RARP都归在IP层或网络层。此处按常规出题思路,全选。17.ABCD解析:A正确,JDK1.8红黑树阈值8。B正确,线程不安全。C正确,2的幂次方。D正确,HashMap允许null键和null值。18.ABCD解析:A是阻塞I/O定义。B是非阻塞I/O定义。C是I/O多路复用,epoll确实高效。D是信号驱动I/O定义。四个描述均正确。19.ABCD解析:四个选项都是高可用消息队列必须考虑的核心问题。20.ABD解析:Dijkstra(单源最短路径),Floyd-Warshall(多源最短路径),A*(启发式搜索最短路径)。Prim算法是最小生成树算法,不是最短路径。21.ABCD解析:AXSS防御:过滤转义、CSP。BCSRF防御:Token、SameSite、Referer。CSQL注入防御:预编译。D点击劫持防御:X-Frame-Options或JSframebusting。全对。22.ABCD解析:A共享内核,Namespace隔离。B分层存储UnionFS。C-v挂载。D容器重启后数据丢失,除非用Volume。全对。23.ABCD解析:AL1稀疏。BL2权重衰减。C正则化限制复杂度。DDropout是正则化手段。全对。24.AD解析:快速排序最坏O()(有序数组)。归并排序O(nl25.ABCD解析:A--no-ff保留历史。Brebase变基。C.gitignore对已追踪文件需先rm--cached。Dstash暂存。全对。三、填空题26.500解析:完全二叉树性质:=+1。总节点N=N==⌊或者推导:N=2−1+。若=0,N奇数;若1000=55.128;-26解析:/25表示掩码25位1,即28。网络地址:(最后8位00000000)。广播地址:27(最后8位01111111)。可用范围:到26。28.multiprocessing29.一致性解析:事务执行前后,数据库的完整性约束没有被破坏,状态从一种一致性状态变到另一种。30.55解析:0,1,1,2,3,5,8,13,21,34,55。F(10)是第11个数(从0开始),值为55。31.80;44332.3解析:push(1)->[1]push(2)->[1,2]pop()->[1](弹出2)push(3)->[1,3]push(4)->[1,3,4]pop()->[1,3](弹出4)栈顶是3。33.目标代码生成34.v-model35.8解析:均值μ=方差==[四、简答题36.答案要点:(1)CAP定理指出:在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitiontolerance(分区容错性)三者不可兼得,最多只能同时满足两项。(2)在分布式系统中,P(分区容错性)是必须具备的特性,因为网络是不可靠的,分区(节点间通信中断)必然会发生。因此,系统架构师通常需要在C和A之间进行权衡。(3)ZooKeeper是CP系统,它保证数据的一致性。当Leader宕机或网络分区发生时,ZooKeeper会重新选举Leader,在选举期间服务不可用(或只读),从而牺牲了A来保证C。这适合配置中心、元数据管理等对数据一致性要求极高的场景。(4)Cassandra是AP系统,它优先保证可用性。即使发生分区,节点依然可以响应读写请求,但可能会读到旧的数据(最终一致性)。它通过允许数据的不一致副本存在,并在后台异步修复,来换取高可用性。这适合海量数据写入、对实时一致性要求不高的业务(如IoT数据收集、某些社交动态)。37.答案要点:(1)死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,如果没有外力干涉,它们都将无法推进下去。(2)四个必要条件:互斥条件:资源是独占的,一个资源一次只能被一个进程使用。请求与保持条件:进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源,在未使用完之前,不能被强行剥夺,只能主动释放。循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。(3)处理策略:预防死锁:破坏四个必要条件之一(如破坏“请求与保持”采用一次性申请所有资源;破坏“循环等待”采用资源有序分配法)。避免死锁:在资源动态分配过程中,使用银行家算法防止系统进入不安全状态。检测与解除:允许死锁发生,通过检测算法发现死锁,然后采取措施(如撤销进程、剥夺资源)解除死锁。38.答案要点:HTTPS=HTTP+SSL/TLS。工作原理如下:(1)客户端向服务器发起HTTPS请求,连接服务器的443端口。(2)服务器发送数字证书(包含公钥、身份信息等)给客户端。(3)客户端验证证书的合法性(是否由受信任的CA签发、是否过期、域名是否匹配等)。(4)验证通过后,客户端生成一个随机数(预主密钥),使用服务器公钥加密后发送给服务器。(5)服务器使用私钥解密得到预主密钥。(6)双方根据预主密钥和随机数,通过协商算法生成会话密钥(对称密钥)。(7)后续通信使用该会话密钥进行对称加密传输,保证效率。安全性保证:机密性:通过对称密钥加密数据。完整性:通过MAC(消息认证码)校验数据是否被篡改。身份认证:通过数字证书验证服务器身份,防止DNS劫持攻击。非对称加密用于密钥交换,解决了对称密钥传输的安全问题。39.答案要点:服务拆分原则:(1)单一职责原则(SRP):每个微服务只负责一个特定的业务功能。(2)高内聚低耦合:服务内部联系紧密,服务间依赖最小化。(3)业务边界清晰:通常基于领域驱动设计(DDD)中的限界上下文进行拆分。(4)独立数据存储:每个服务拥有独立的数据库,避免跨库Join。(5)按业务能力拆分:而非仅仅按技术层拆分(如把所有Controller拆成一个服务)。拆分后的挑战及应对:(1)分布式事务问题:原子性难以保证。应对:最终一致性(TCC、Saga、本地消息表)。(2)服务间通信延迟:网络开销。应对:异步消息队列、RPC优化、缓存。(3)运维复杂度增加:服务数量多。应对:容器化(Docker/K8s)、自动化运维(CI/CD)、服务网格。(4)数据一致性:分布式查询困难。应对:数据冗余、聚合查询服务。五、算法编程题40.Python实现:```pythondeftwoSum(nums,target):#使用哈希表存储值->索引hashmap={}forindex,numinenumerate(nums):complement=target-numifcomplementinhashmap:return[hashmap[complement],index]hashmap[num]=indexreturn[]```解析:时间复杂度O(N),空间复杂度O41.Python实现(中心扩展法):```pythondeflongestPalindrome(s):ifnots:return""start,end=0,0foriinrange(len(s)):#奇数长度中心扩展len1=expandAroundCenter(s,i,i)#偶数长度中心扩展len2=expandAroundCenter(s,i,i+1)max_len=max(len1,len2)ifmax_len>end-start:start=i-(max_len-1)//2end=i+max_len//2returns[start:end+1]defexpandAroundCenter(s,left,right):whileleft>=0andright<len(s)ands[left]==s[right]:left-=1right+=1returnright-left-1```解析:时间复杂度O(),空间复杂度42.Python实现(OrderedDict):```pythonfromcollections

温馨提示

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

评论

0/150

提交评论