版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年软件开发工程师岗位面试题及答案一、编程语言与基础算法(15题,共75分)1.(5分)编写一个函数,判断一个字符串是否是回文串。例如,"madam"是回文串,"hello"不是。答案:pythondefis_palindrome(s:str)->bool:returns==s[::-1]示例print(is_palindrome("madam"))#Trueprint(is_palindrome("hello"))#False解析:直接比较字符串与其反转后的字符串是否相同,是最简单高效的方法。时间复杂度为O(n),空间复杂度为O(n)。2.(5分)实现一个函数,找出数组中重复次数最多的元素及其出现次数。例如,在数组[1,2,2,3,3,3]中,3出现次数最多,为3次。答案:pythonfromcollectionsimportCounterdefmost_frequent(nums:list)->tuple:count=Counter(nums)max_freq=max(count.values())return[keyforkey,valueincount.items()ifvalue==max_freq],max_freq示例print(most_frequent([1,2,2,3,3,3]))#([3],3)解析:使用`collections.Counter`统计每个元素的出现次数,然后找出最大值对应的元素及其次数。3.(10分)编写一个函数,实现二分查找算法,在有序数组中查找目标值,返回其索引。如果未找到,返回-1。假设数组中无重复元素。答案:pythondefbinary_search(arr:list,target:int)->int:left,right=0,len(arr)-1whileleft<=right:mid=(left+right)//2ifarr[mid]==target:returnmidelifarr[mid]<target:left=mid+1else:right=mid-1return-1示例print(binary_search([1,2,4,6,8],4))#2print(binary_search([1,2,4,6,8],5))#-1解析:二分查找的核心是不断缩小查找范围,每次将中间值与目标值比较,根据结果调整左右指针。4.(5分)编写一个函数,合并两个有序链表,返回合并后的有序链表。假设链表节点定义如下:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=next答案:pythondefmerge_two_lists(l1:ListNode,l2:ListNode)->ListNode:dummy=ListNode(0)current=dummywhilel1andl2:ifl1.val<l2.val:current.next=l1l1=l1.nextelse:current.next=l2l2=l2.nextcurrent=current.nextifl1:current.next=l1ifl2:current.next=l2returndummy.next示例构建链表1->2->4,链表2->1->3->4合并后为1->1->2->3->4->4解析:使用虚拟头节点简化边界处理,逐个比较两个链表节点的值,将较小的节点连接到当前节点,并移动指针。5.(10分)编写一个函数,实现快速排序算法,对数组进行排序。答案:pythondefquick_sort(arr:list)->list: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([3,6,8,10,1,2,1]))#[1,1,2,3,6,8,10]解析:快速排序的核心是选择基准值(pivot),将数组分为小于、等于、大于基准值的三部分,然后递归对左右部分进行排序。6.(5分)编写一个函数,计算字符串的子串数量,其中子串长度为给定值k。例如,在字符串"abcabcabc"中,子串长度为3时,共有4个子串。答案:pythondefcount_substrings(s:str,k:int)->int:returnlen(s)-k+1示例print(count_substrings("abcabcabc",3))#4解析:子串数量等于字符串长度减去子串长度加1。7.(10分)编写一个函数,实现LRU(最近最少使用)缓存。缓存容量为capacity,提供get和put方法。答案:pythonfromcollectionsimportOrderedDictclassLRUCache:def__init__(self,capacity:int):self.cache=OrderedDict()self.capacity=capacitydefget(self,key:int)->int:ifkeynotinself.cache:return-1self.cache.move_to_end(key)returnself.cache[key]defput(self,key:int,value:int):self.cache[key]=valueself.cache.move_to_end(key)iflen(self.cache)>self.capacity:self.cache.popitem(last=False)示例cache=LRUCache(2)cache.put(1,1)cache.put(2,2)print(cache.get(1))#1cache.put(3,3)#去除键2print(cache.get(2))#-1解析:使用`OrderedDict`记录键值对,通过`move_to_end`更新访问顺序。get时移动到末尾,put时如果超出容量则删除最早的键。8.(5分)编写一个函数,计算数组中所有元素的和。例如,在数组[1,2,3,4]中,和为10。答案:pythondefarray_sum(nums:list)->int:returnsum(nums)示例print(array_sum([1,2,3,4]))#10解析:直接使用内置的`sum`函数计算数组元素之和。9.(10分)编写一个函数,实现斐波那契数列的第n项。假设n从0开始,即fib(0)=0,fib(1)=1。答案:pythondeffibonacci(n:int)->int:ifn==0:return0a,b=0,1for_inrange(2,n+1):a,b=b,a+breturnb示例print(fibonacci(10))#55解析:使用动态规划,迭代计算斐波那契数列,避免递归的重复计算。10.(5分)编写一个函数,判断一个数是否是素数。例如,7是素数,10不是。答案:pythondefis_prime(n:int)->bool:ifn<=1:returnFalseforiinrange(2,int(n0.5)+1):ifn%i==0:returnFalsereturnTrue示例print(is_prime(7))#Trueprint(is_prime(10))#False解析:素数是只有1和自身两个因子的数,判断时只需检查到平方根即可。11.(10分)编写一个函数,实现字符串的截取,截取前n个字符。例如,在字符串"helloworld"中,截取前5个字符得到"hello"。答案:pythondefsubstring(s:str,n:int)->str:returns[:n]示例print(substring("helloworld",5))#"hello"解析:直接使用字符串切片操作,截取前n个字符。12.(5分)编写一个函数,计算数组的中位数。例如,在数组[1,2,3,4,5]中,中位数为3;在数组[1,2,3,4]中,中位数为2.5。答案:pythondefmedian(nums:list)->float:nums.sort()n=len(nums)ifn%2==0:return(nums[n//2-1]+nums[n//2])/2else:returnnums[n//2]示例print(median([1,2,3,4,5]))#3.0print(median([1,2,3,4]))#2.5解析:先对数组排序,然后根据长度是奇数还是偶数计算中位数。13.(10分)编写一个函数,实现二叉树的深度优先遍历(前序遍历)。假设二叉树节点定义如下:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=right答案:pythondefpreorder_traversal(root:TreeNode)->list:result=[]defdfs(node):ifnode:result.append(node.val)dfs(node.left)dfs(node.right)dfs(root)returnresult示例构建二叉树:1/\23/\45遍历结果为[1,2,4,5,3]解析:前序遍历的顺序是根节点、左子树、右子树,使用递归或栈实现。14.(5分)编写一个函数,判断一个字符串是否包含所有字母a-z至少一次。例如,"thequickbrownfoxjumpsoverthelazydog"包含所有字母。答案:pythondefcontains_all_alphabets(s:str)->bool:returnset(s.lower())>=set('abcdefghijklmnopqrstuvwxyz')示例print(contains_all_alphabets("thequickbrownfoxjumpsoverthelazydog"))#True解析:将字符串转换为小写并转换为集合,检查是否包含所有字母。15.(10分)编写一个函数,实现冒泡排序算法,对数组进行排序。答案:pythondefbubble_sort(arr:list)->list:n=len(arr)foriinrange(n):forjinrange(0,n-i-1):ifarr[j]>arr[j+1]:arr[j],arr[j+1]=arr[j+1],arr[j]returnarr示例print(bubble_sort([3,6,8,10,1,2,1]))#[1,1,2,3,6,8,10]解析:冒泡排序通过多次遍历数组,将较大的元素逐个移动到末尾。二、数据库与SQL(5题,共25分)16.(5分)查询表`employees`中,工资高于平均工资的员工姓名和工资。答案:sqlSELECTname,salaryFROMemployeesWHEREsalary>(SELECTAVG(salary)FROMemployees);解析:使用子查询计算平均工资,然后比较每个员工的工资是否高于平均值。17.(5分)查询表`orders`中,每个客户的订单总数,并按订单总数降序排列。答案:sqlSELECTcustomer_id,COUNT()ASorder_countFROMordersGROUPBYcustomer_idORDERBYorder_countDESC;解析:使用`GROUPBY`按客户ID分组,`COUNT()`统计订单数,`ORDERBY`降序排列。18.(10分)查询表`products`中,价格在100到200之间的产品的名称和价格,并按价格升序排列。答案:sqlSELECTname,priceFROMproductsWHEREpriceBETWEEN100AND200ORDERBYpriceASC;解析:使用`BETWEEN`条件筛选价格范围,`ORDERBY`按价格升序排列。19.(5分)查询表`students`中,年龄大于18岁的学生姓名和年龄。答案:sqlSELECTname,ageFROMstudentsWHEREage>18;解析:直接使用`WHERE`条件筛选年龄大于18岁的学生。20.(10分)查询表`employees`中,每个部门的员工工资总和,并按工资总和降序排列。答案:sqlSELECTdepartment,SUM(salary)AStotal_salaryFROMemployeesGROUPBYdepartmentORDERBYtotal_salaryDESC;解析:使用`SUM(salary)`计算每个部门的工资总和,`GROUPBY`按部门分组,`ORDERBY`降序排列。三、系统设计与架构(5题,共25分)21.(5分)设计一个简单的URL短链接系统,需要支持生成短链接和根据短链接获取原始URL。答案:1.生成短链接:将原始URL哈希为固定长度的字符串(如6位),存储到数据库中,映射为短链接。2.获取原始URL:根据短链接从数据库中查询原始URL。解析:使用哈希函数将URL映射为短链接,数据库存储映射关系。22.(5分)设计一个简单的博客系统,需要支持发布文章、查看文章列表、查看文章详情、评论文章。答案:1.发布文章:用户输入标题、内容、标签等信息,存储到数据库。2.查看文章列表:从数据库中获取文章列表,按时间降序排列。3.查看文章详情:根据文章ID获取文章详情。4.评论文章:用户输入评论内容,关联文章ID和用户ID,存储到数据库。解析:使用数据库存储文章和评论数据,提供增删改查功能。23.(10分)设计一个简单的购物车系统,需要支持添加商品、删除商品、修改商品数量。答案:1.添加商品:用户选择商品,记录商品ID、数量等信息,存储到数据库或会话中。2.删除商品:根据商品ID从购物车中删除商品。3.修改商品数量:根据商品ID修改商品数量。解析:使用数据库或会话存储购物车数据,提供增删改功能。24.(5分)设计一个简单的秒杀系统,需要支持用户下单和验证库存。答案:1.用户下单:用户提交订单,系统检查库存是否充足。2.验证库存:如果库存充足,扣减库存并确认订单;否则返回库存不足。解析:使用数据库事务保证库存扣减的原子性,防止超卖。25.(10分)设计一个简单的消息队列系统,需要支持发送消息和接收消息。答案:1.发送消息:将消息存储到数据库或消息队列中。2.接收消息:从数据库或消息队列中获取消息并处理。解析:使用数据库或消息队列存储消息,提供异步处理能力。四、网络与系统(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年公司年会方案
- 2025 小学一年级数学下册新授课(位置)课件
- 养老院健康档案管理制度
- 文言文专题复习(八下)学案(含答案)-【2024名师导航】中考语文一轮总复习
- 亮剑类型培训课件
- 2025 小学一年级数学下册动画演示(数的形成)过程课件
- 2025 小学一年级数学下册两位数减一位数(退位)准备课件
- 样品检测培训
- 柳州信息安全培训课件
- 2026年电商物流成本控制面试宝典及答案
- 钢板铺设安全施工方案
- 学习动力的培养与保持
- 硬件设计与可靠性
- 小学中学控辍保学防辍学主题班会模版成品课件
- 经纬度丛书 秦制两千年:封建帝王的权力规则
- ppt素材模板超级玛丽
- 金庸短篇小说《越女剑》中英文对照版
- 2023年洛阳市洛龙区政务中心综合窗口人员招聘笔试题库及答案解析
- 山东省就业登记表
- GA/T 1023-2013视频中人像检验技术规范
- 工程质量评价及用户评价表
评论
0/150
提交评论