(2025年)软件开发工程师笔试题及答案_第1页
(2025年)软件开发工程师笔试题及答案_第2页
(2025年)软件开发工程师笔试题及答案_第3页
(2025年)软件开发工程师笔试题及答案_第4页
(2025年)软件开发工程师笔试题及答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

(2025年)软件开发工程师笔试题及答案一、选择题(每题2分,共20分)1.以下关于设计模式的描述,错误的是?A.工厂模式通过接口创建对象,隐藏具体类的实例化过程B.单例模式在多线程环境下使用双重检查锁定(DCL)时,需将实例变量声明为volatileC.观察者模式中,主题(Subject)需要维护观察者(Observer)列表,并在状态变化时通知所有观察者D.装饰器模式通过继承扩展对象功能,与继承相比更灵活2.关于Java内存模型(JVM),以下说法正确的是?A.堆内存由所有线程共享,存储对象实例和类的静态变量B.方法区(元空间)存储类的元数据、常量、静态变量,属于堆内存的一部分C.程序计数器(PC寄存器)用于存储当前线程执行的字节码行号,线程私有D.栈内存(Java栈)存储对象引用,每个方法调用对应一个栈帧3.以下哪种数据库索引结构更适合支持范围查询?A.哈希索引B.B+树索引C.全文索引(倒排索引)D.位图索引4.在HTTP/1.1中,以下哪个状态码表示“请求已被接受,但尚未完成”?A.202B.204C.301D.4035.关于并发编程,以下描述错误的是?A.Java中ReentrantLock的tryLock()方法可避免死锁B.Go语言的goroutine通过M:N调度模型实现轻量级线程C.Python的threading模块由于GIL限制,无法利用多核CPU实现真正的并行计算D.生产者-消费者模型中,使用无界队列可能导致内存溢出6.以下SQL语句执行时,最可能触发全表扫描的是?A.SELECTFROMuserWHEREage>20ANDage<30B.SELECTFROMuserWHEREidIN(1001,1002,1003)C.SELECTFROMuserWHEREusernameLIKE'A%'D.SELECTFROMuserWHEREcreate_timeISNULL7.关于微服务架构,以下说法错误的是?A.服务间通信通常使用HTTP/REST或gRPC等轻量级协议B.每个微服务应拥有独立的数据库,避免共享存储C.服务发现可通过注册中心(如Consul、Eureka)实现D.微服务架构一定比单体架构性能更优8.以下哪种数据结构适合实现LRU缓存?A.哈希表+双向链表B.哈希表+单向链表C.平衡二叉搜索树D.跳表9.关于TCP三次握手,以下描述正确的是?A.第一次握手:客户端发送SYN=1,seq=xB.第二次握手:服务端发送SYN=1,ACK=0,seq=y,ack=x+1C.第三次握手:客户端发送SYN=1,ACK=1,seq=x+1,ack=y+1D.三次握手完成后,客户端和服务端进入CLOSE_WAIT状态10.以下Python代码的输出结果是?```pythondefouter():x=10definner():nonlocalxx+=5returnxreturninnerf=outer()print(f())print(f())```A.1520B.1015C.1515D.报错二、编程题(每题15分,共45分)1.给定一个字符串s,判断其是否为合法的括号字符串。合法条件:所有括号必须正确闭合(如"(()())"合法,"())("不合法)支持三种括号类型:圆括号()、方括号[]、花括号{}空字符串视为合法示例:输入:"[({})]"→输出:True输入:"([)]"→输出:False2.实现一个函数,将整数数组按奇偶性分组,奇数在前,偶数在后,且奇数和偶数各自保持原顺序。要求时间复杂度O(n),空间复杂度O(1)。示例:输入:[3,2,5,4,7,6]→输出:[3,5,7,2,4,6]3.给定一个二叉树的前序遍历数组preorder和中序遍历数组inorder,重建该二叉树并返回根节点。假设输入的前序和中序遍历数组中无重复元素。示例:preorder=[3,9,20,15,7]inorder=[9,3,15,20,7]输出:根节点为3的二叉树(结构为3的左子节点9,右子节点20;20的左子节点15,右子节点7)三、算法题(每题15分,共30分)1.给定一个未排序的整数数组nums,找出其中最长连续序列的长度。要求时间复杂度O(n)。示例:输入:[100,4,200,1,3,2]→输出:4(最长序列1-2-3-4)2.给定两个字符串s和t,判断t是否是s的变位词(即s和t由相同字符组成,且各字符出现次数相同)。要求不使用内置排序函数,时间复杂度O(n)。示例:输入:s="anagram",t="nagaram"→输出:True输入:s="rat",t="car"→输出:False四、系统设计题(25分)设计一个短链接提供服务(如bit.ly),要求支持以下功能:输入长URL,提供6位字母数字混合的短链接(如/Ab3x79)短链接需全局唯一,且提供效率高支持高并发访问(10万次/秒)统计短链接的访问次数请从以下角度描述设计方案:1.短链接提供算法2.存储方案(数据库选型及表结构)3.高并发优化策略4.访问次数统计实现方式答案一、选择题答案及解析1.D(装饰器模式通过组合(聚合)扩展功能,而非继承)2.C(A错误,静态变量在方法区;B错误,方法区是独立区域;D错误,栈存储局部变量和操作数栈)3.B(B+树的叶子节点按顺序连接,适合范围查询;哈希索引仅支持等值查询)4.A(202表示接受但未完成;204无内容;301永久重定向;403禁止访问)5.A(tryLock()可设置超时避免死锁,但本身不保证;死锁需破坏四个条件之一)6.D(若create_time字段无索引且存在大量非NULL值,ISNULL可能触发全表扫描;A/B/C可能利用索引)7.D(微服务架构增加了网络开销,未必性能更优,需根据场景选择)8.A(哈希表快速查找,双向链表维护访问顺序,删除最久未使用节点)9.A(B错误,第二次握手ACK=1;C错误,第三次握手SYN=0;D错误,三次握手后进入ESTABLISHED状态)10.A(nonlocal声明x为外层函数变量,第一次调用x=15,第二次x=20)二、编程题答案1.括号合法性判断(Python)```pythondefis_valid_parentheses(s:str)->bool:stack=[]pairs={')':'(',']':'[','}':'{'}forcharins:ifcharinpairs.values():左括号入栈stack.append(char)else:右括号检查匹配ifnotstackorstack[-1]!=pairs[char]:returnFalsestack.pop()returnlen(stack)==0所有左括号必须匹配```2.奇偶分组(Java)```javapublicstaticint[]groupOddEven(int[]nums){inti=0;//奇数指针for(intj=0;j<nums.length;j++){if(nums[j]%2!=0){//遇到奇数则交换到i位置if(i!=j){inttemp=nums[i];nums[i]=nums[j];nums[j]=temp;}i++;}}returnnums;}//说明:i指针记录当前奇数的末尾位置,j遍历数组,遇到奇数则与i位置交换,保证奇数顺序不变```3.重建二叉树(Python)```pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefbuild_tree(preorder:list,inorder:list)->TreeNode:ifnotpreorder:returnNoneroot_val=preorder[0]root=TreeNode(root_val)idx=inorder.index(root_val)根节点在中序中的位置前序左子树范围:1~idx(长度idx),中序左子树范围:0~idx-1root.left=build_tree(preorder[1:1+idx],inorder[:idx])前序右子树范围:1+idx~end,中序右子树范围:idx+1~endroot.right=build_tree(preorder[1+idx:],inorder[idx+1:])returnroot```三、算法题答案1.最长连续序列(Python)```pythondeflongest_consecutive(nums:list)->int:num_set=set(nums)max_len=0fornuminnum_set:ifnum1notinnum_set:仅处理序列起点current=numcurrent_len=1whilecurrent+1innum_set:current+=1current_len+=1max_len=max(max_len,current_len)returnmax_len```2.变位词判断(Java)```javapublicstaticbooleanis_anagram(Strings,Stringt){if(s.length()!=t.length())returnfalse;int[]count=newint[256];//ASCII字符范围for(charc:s.toCharArray()){count[c]++;}for(charc:t.toCharArray()){if(--count[c]<0)returnfalse;}returntrue;}```四、系统设计题答案1.短链接提供算法:采用自增ID+基数转换的方式。维护一个全局自增ID(如从0开始),将ID转换为62进制(0-9,a-z,A-Z),不足6位时前面补随机字符(或直接截断,因62^6≈568亿,足够覆盖大部分场景)。为避免ID泄露,可对自增ID进行混淆(如异或一个大质数)。2.存储方案:数据库选型:使用Redis作为缓存层(存储短链接到长URL的映射,设置过期时间),MySQL作为持久化存储(主从复制保证高可用)。表结构(MySQL):```CREATETABLEshort_url(idBIGINTUNSIGNEDAUTO_INCREMENTPRIMARYKEY,-自增IDshort_codeVARCHAR(6)UNIQUENOTNULL,-短链接码(如Ab3x79)long_urlVARCHAR(2048)NOTNULL,-原始长URLcreate_timeTIMESTAMPDEFAULTCURRENT_TIMESTAMP,visit_countBIGINTDEFAULT0-访问次数)ENGINE=InnoDB;```3.高并发优化策略:负载均衡:使用Nginx或云厂商的负载均衡器(如AWSALB)分流请求。缓存加速:短链接查询优先访问Redis,未命中时查询MySQL并回种缓存。异步处理:提供短链接时,将写数据

温馨提示

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

评论

0/150

提交评论