2026年软件工程师面试题目集编程语言与算法_第1页
2026年软件工程师面试题目集编程语言与算法_第2页
2026年软件工程师面试题目集编程语言与算法_第3页
2026年软件工程师面试题目集编程语言与算法_第4页
2026年软件工程师面试题目集编程语言与算法_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

2026年软件工程师面试题目集:编程语言与算法1.编程语言基础(5题,每题2分)1.1以下代码段的输出结果是什么?pythondeffunc(a,b=10):returna+bprint(func(5))print(func(5,3))print(func(b=7))1.2判断以下代码是否正确,若不正确请说明原因。javapublicclassTest{publicstaticvoidmain(String[]args){intx=10;inty=(x++)+(--x);System.out.println(y);}}1.3写出以下JavaScript代码的执行结果并解释原因。javascriptleta=0;letb=a++;console.log(a,b);a=0;letc=++b;console.log(a,b,c);1.4完成以下C++代码,使其输出斐波那契数列的前10项。cppinclude<iostream>usingnamespacestd;intmain(){inta=0,b=1,c;for(inti=0;i<10;++i){//补全代码}return0;}1.5以下Python代码的输出结果是什么?pythonlist1=[1,2,3]list2=list1list2[0]=4print(list1)2.数据结构与算法(8题,每题3分)2.1请实现一个函数,判断一个字符串是否是回文串(忽略大小写和空格)。输入示例:`"Aman,aplan,acanal:Panama"`输出示例:`True`2.2编写一个函数,找出数组中重复次数最多的元素及其出现次数。输入示例:`[1,2,2,3,3,3,4]`输出示例:`3:3次`2.3实现快速排序算法,并用它对以下数组进行排序。输入示例:`[8,3,1,7,0,10,2]`输出示例:`[0,1,2,3,7,8,10]`2.4编写一个函数,计算二叉树的最大深度。输入示例:3/\920/\157输出示例:`3`2.5实现一个LRU(最近最少使用)缓存,支持get和put操作。输入示例:put(1,1)//缓存是{1=1}put(2,2)//缓存是{1=1,2=2}get(1)//返回1put(3,3)//去除键2,缓存是{1=1,3=3}get(2)//返回-1(未找到)输出示例:`1,-1`2.6编写一个函数,判断一个数是否是素数。输入示例:`17`输出示例:`True`2.7实现一个函数,找出无重复字符的最长子串。输入示例:`"abcabcbb"`输出示例:`3("abc")`2.8编写一个函数,将一个字符串转换成整数(atoi)。输入示例:`"-42"`输出示例:`-42`3.编程语言进阶(7题,每题4分)3.1请解释Java中的“自动装箱”和“自动拆箱”,并举例说明。3.2在Python中,`asyncio`库的作用是什么?请编写一个简单的异步任务示例。3.3在C++中,`std::move`的作用是什么?为什么使用它?3.4请比较Java和C#在异常处理方面的异同。3.5编写一个Go程序,实现一个简单的HTTP服务器,返回当前时间。3.6在JavaScript中,`Promise`和`async/await`的区别是什么?请举例说明。3.7请解释Python中的装饰器(decorator)是什么,并编写一个简单的装饰器示例。4.系统设计(5题,每题5分)4.1设计一个简单的微博系统,需要支持用户注册、发帖、关注、点赞等功能。请说明主要的数据结构和算法。4.2如何设计一个高并发的短链接系统?需要考虑哪些关键点?4.3请设计一个分布式缓存系统(如Redis),说明其架构和主要流程。4.4如何设计一个实时推荐系统(如淘宝首页推荐),需要考虑哪些技术和算法?4.5请设计一个消息队列系统(如Kafka),说明其工作原理和适用场景。答案与解析1.编程语言基础1.1pythondeffunc(a,b=10):returna+bprint(func(5))#输出15(5+10)print(func(5,3))#输出8(5+3)print(func(b=7))#输出7(0+7)解析:-`func(5)`:默认`b=10`,输出`5+10=15`。-`func(5,3)`:显式传递`b=3`,输出`5+3=8`。-`func(b=7)`:显式传递`b=7`,`a`为`0`(未传递),输出`0+7=7`。1.2javapublicclassTest{publicstaticvoidmain(String[]args){intx=10;inty=(x++)+(--x);//x=10->11,--x=10->9,y=10+9=19System.out.println(y);//输出19}}解析:-`x++`是后置自增,先使用`x`的当前值(10),再自增。-`--x`是前置自减,先自减`x`的当前值(10),再使用新值(9)。-`y=(10)+(9)=19`。1.3javascriptleta=0;letb=a++;//a=0->b=0,a=1console.log(a,b);//输出10a=0;letc=++b;//b=1->c=1,b=1console.log(a,b,c);//输出011解析:-`a++`是后置自增,先赋值`b=a`(0),再自增`a`。-`++b`是前置自增,先自增`b`(1),再赋值`c=b`(1)。1.4cppinclude<iostream>usingnamespacestd;intmain(){inta=0,b=1,c;for(inti=0;i<10;++i){c=a+b;cout<<c<<"";a=b;b=c;}return0;}解析:-输出斐波那契数列:`0112358132134`。1.5pythonlist1=[1,2,3]list2=list1list2[0]=4print(list1)//输出[4,2,3]解析:-`list2`是`list1`的引用,修改`list2`会同时修改`list1`。2.数据结构与算法2.1pythondefis_palindrome(s):s=''.join(filter(str.isalnum,s)).lower()returns==s[::-1]测试print(is_palindrome("Aman,aplan,acanal:Panama"))#True解析:-去除大小写和空格后,判断字符串是否对称。2.2pythondefmost_frequent(nums):count={}fornuminnums:count[num]=count.get(num,0)+1max_key=max(count,key=count.get)returnmax_key,count[max_key]测试print(most_frequent([1,2,2,3,3,3,4]))#(3,3)解析:-使用字典统计每个数字的出现次数,返回出现最多的数字及其次数。2.3pythondefquick_sort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquick_sort(left)+middle+quick_sort(right)测试print(quick_sort([8,3,1,7,0,10,2]))#[0,1,2,3,7,8,10]解析:-快速排序的核心是分治法:选择基准值,将数组分为小于、等于、大于三部分,递归排序。2.4pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefmax_depth(root):ifnotroot:return0return1+max(max_depth(root.left),max_depth(root.right))测试root=TreeNode(3)root.left=TreeNode(9)root.right=TreeNode(20)root.right.left=TreeNode(15)root.right.right=TreeNode(7)print(max_depth(root))#3解析:-递归计算左子树和右子树的最大深度,取较大值加1。2.5pythonclassLRUCache:def__init__(self,capacity):self.capacity=capacityself.cache={}self.order=[]defget(self,key):ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key,value):ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:self.cache.pop(self.order.pop(0))self.cache[key]=valueself.order.append(key)测试lru=LRUCache(2)lru.put(1,1)lru.put(2,2)print(lru.get(1))#1lru.put(3,3)print(lru.get(2))#-1解析:-使用字典存储键值对,列表记录访问顺序。`get`时移动到末尾,`put`时先移除最久未使用项。2.6pythondefis_prime(n):ifn<2:returnFalseforiinrange(2,int(n0.5)+1):ifn%i==0:returnFalsereturnTrue测试print(is_prime(17))#True解析:-只需检查到`sqrt(n)`即可,若能整除则不是素数。2.7pythondeflength_of_longest_substring(s):char_set=set()left=0max_len=0forrightinrange(len(s)):whiles[right]inchar_set:char_set.remove(s[left])left+=1char_set.add(s[right])max_len=max(max_len,right-left+1)returnmax_len测试print(length_of_longest_substring("abcabcbb"))#3解析:-滑动窗口法:左指针移动时移除字符,右指针移动时添加字符,记录最大无重复子串长度。2.8pythondefmy_atoi(s):s=s.strip()ifnots:return0sign=1ifs[0]=='-':sign=-1s=s[1:]elifs[0]=='+':s=s[1:]num=0forcharins:ifnotchar.isdigit():breaknum=num10+int(char)returnsignnum测试print(my_atoi("-42"))#-42解析:-处理前导空格、符号,逐位累加数字,注意溢出问题(本题未处理)。3.编程语言进阶3.1解释:-自动装箱:将基本类型(如`int`)自动转换为包装类(如`Integer`)。-自动拆箱:将包装类(如`Integer`)自动转换为基本类型(如`int`)。-示例:javainta=10;//基本类型Integerb=a;//自动装箱intc=b;//自动拆箱3.2作用:-`asyncio`是Python的异步编程库,用于编写单线程并发代码。-示例:pythonimportasyncioasyncdefhello():print("Hello")awaitasyncio.sleep(1)print("World")asyncio.run(hello())3.3作用:-`std::move`将左值引用转换为右值引用,优化资源转移(避免拷贝)。-示例:cppstd::strings1="hello";std::strings2=std::move(s1);//s1变为右值引用,资源转移给s23.4Java:-使用`try-catch-finally`块捕获异常。C#:-使用`try-catch`,支持`finally`和`using`(资源自动释放)。异同:-C#更简洁(如`using`),Java更严格(必须处理异常)。3.5gopackagemainimport("fmt""net/http""time")funchandler(whttp.ResponseWriter,rhttp.Request){w.Write([]byte(time.Now().Format("15:04:05")))}funcmain(){http.HandleFunc("/",handler)http.ListenAndServe(":8080",nil)}3.6区别:-`Promise`:异步操作的返回值,可链式调用。-`async/await`:语法糖,使异步代码像同步代码。-示例:javascript//Promisefetch('/api').then(res=>res.json()).then(data=>console.log(data));//async/awaitasyncfunctionfetchData(){constdata=awaitfetch('/api').then(res=>res.json());console.log(data);}3.7解释:-装饰器是函数,接收一个函数作为参数,返回一个新函数。-示例:py

温馨提示

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

评论

0/150

提交评论