2026年IT部门程序员面试题及答案_第1页
2026年IT部门程序员面试题及答案_第2页
2026年IT部门程序员面试题及答案_第3页
2026年IT部门程序员面试题及答案_第4页
2026年IT部门程序员面试题及答案_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

2026年IT部门程序员面试题及答案一、编程语言基础(共5题,每题10分,总分50分)1.题目(Java):编写一个Java方法,实现将一个字符串中的所有空格替换为"%20"。要求:时间复杂度O(n),空间复杂度O(1)。示例:输入"HelloWorld",输出"Hello%20World"。答案:javapublicclassURLify{publicstaticvoidreplaceSpaces(char[]str,inttrueLength){intspaceCount=0;for(inti=0;i<trueLength;i++){if(str[i]==''){spaceCount++;}}intindex=trueLength+spaceCount2;for(inti=trueLength-1;i>=0;i--){if(str[i]==''){str[index-1]='0';str[index-2]='2';str[index-3]='%';index-=3;}else{str[index-1]=str[i];index--;}}}publicstaticvoidmain(String[]args){char[]str="HelloWorld".toCharArray();replaceSpaces(str,11);System.out.println(str);}}解析:-首先统计字符串中空格的数量,计算替换后的长度(每个空格替换为"%20"占用3个字符)。-从后向前遍历字符串,避免覆盖未处理的字符。空格则替换为"%20",其他字符直接前移。2.题目(Python):实现一个函数,判断一个字符串是否为回文(忽略大小写和空格)。示例:输入"racecar",输出`True`;输入"hello",输出`False`。答案:pythondefis_palindrome(s:str)->bool:s=''.join(c.lower()forcinsifc.isalnum())returns==s[::-1]测试print(is_palindrome("racecar"))#Trueprint(is_palindrome("hello"))#False解析:-去除字符串中的非字母数字字符并转换为小写。-判断处理后的字符串是否与反转字符串相同。3.题目(C++):编写一个C++函数,找出数组中重复次数最多的元素及其重复次数。示例:输入`[1,2,2,3,3,3]`,输出`(3,3)`。答案:cppinclude<iostream>include<unordered_map>include<vector>usingnamespacestd;pair<int,int>findMaxFrequency(constvector<int>&nums){unordered_map<int,int>freq;for(intnum:nums){freq[num]++;}intmaxFreq=0,maxNum=0;for(constauto&[num,count]:freq){if(count>maxFreq){maxFreq=count;maxNum=num;}}return{maxNum,maxFreq};}intmain(){vector<int>nums={1,2,2,3,3,3};auto[num,freq]=findMaxFrequency(nums);cout<<"("<<num<<","<<freq<<")"<<endl;return0;}解析:-使用哈希表统计每个数字的频率。-遍历哈希表,记录最大频率及其对应的数字。4.题目(JavaScript):实现一个JavaScript函数,将一个数组中的所有0移动到数组的末尾,保持非零元素的相对顺序。示例:输入`[0,1,0,3,12]`,输出`[1,3,12,0,0]`。答案:javascriptfunctionmoveZeroes(nums){letinsertPos=0;for(letnumofnums){if(num!==0){nums[insertPos++]=num;}}while(insertPos<nums.length){nums[insertPos++]=0;}}//测试moveZeroes([0,1,0,3,12]);console.log([0,1,0,3,12]);//[1,3,12,0,0]解析:-双指针法:一个指针用于遍历数组,另一个指针用于记录非零元素的位置。-遍历结束后,将剩余位置填充为0。5.题目(Go):编写一个Go函数,计算一个链表的中间节点。假设链表长度为奇数或偶数。示例:输入`1->2->3->4->5`,输出`3`。答案:gopackagemainimport"fmt"typeListNodestruct{ValintNextListNode}funcmiddleNode(headListNode)ListNode{slow,fast:=head,headforfast!=nil&&fast.Next!=nil{slow=slow.Nextfast=fast.Next.Next}returnslow}funcmain(){//构建链表1->2->3->4->5head:=&ListNode{1,nil}head.Next=&ListNode{2,nil}head.Next.Next=&ListNode{3,nil}head.Next.Next.Next=&ListNode{4,nil}head.Next.Next.Next.Next=&ListNode{5,nil}mid:=middleNode(head)fmt.Println(mid.Val)//输出3}解析:-快慢指针法:慢指针每次移动1步,快指针每次移动2步。当快指针到达末尾时,慢指针位于中间。二、数据结构与算法(共5题,每题10分,总分50分)6.题目(二叉树):给定一个二叉搜索树,删除一个节点并返回新的二叉搜索树。示例:输入树`[5,3,6,2,4,null,7]`,删除节点3,输出`[5,4,6,2,null,null,7]`。答案:pythonDefinitionforabinarytreenode.classTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefdeleteNode(root:TreeNode,key:int)->TreeNode:ifnotroot:returnNoneifkey<root.val:root.left=deleteNode(root.left,key)elifkey>root.val:root.right=deleteNode(root.right,key)else:ifnotroot.left:returnroot.rightelifnotroot.right:returnroot.lefttemp=findMin(root.right)root.val=temp.valroot.right=deleteNode(root.right,temp.val)returnrootdeffindMin(node:TreeNode)->TreeNode:whilenode.left:node=node.leftreturnnode解析:-如果要删除的节点是叶子节点,直接返回None。-如果要删除的节点只有一个子节点,用子节点替换当前节点。-如果要删除的节点有两个子节点,用右子树的最小节点替换当前节点,并递归删除该最小节点。7.题目(动态规划):给定一个数组,返回其中不重复的三元组,使三个数的和为0。示例:输入`[-1,0,1,2,-1,-4]`,输出`[[-1,-1,2],[-1,0,1]]`。答案:pythondefthreeSum(nums):nums.sort()result=[]n=len(nums)foriinrange(n-2):ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,n-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal==0:result.append([nums[i],nums[left],nums[right]])whileleft<rightandnums[left]==nums[left+1]:left+=1whileleft<rightandnums[right]==nums[right-1]:right-=1left+=1right-=1eliftotal<0:left+=1else:right-=1returnresult测试print(threeSum([-1,0,1,2,-1,-4]))解析:-排序后,使用双指针法固定第一个数,然后在剩余部分中寻找和为0的两个数。-跳过重复的数字以避免重复的三元组。8.题目(图算法):给定一个无向图,判断是否存在环。示例:输入`[[1,2],[2,3],[3,4],[4,2]]`,输出`True`(存在环2-3-4-2)。答案:pythondefhasCycle(n,edges):graph=[[]for_inrange(n+1)]foru,vinedges:graph[u].append(v)graph[v].append(u)visited=[False](n+1)defdfs(node,parent):ifvisited[node]:returnTruevisited[node]=Trueforneighboringraph[node]:ifneighbor!=parentanddfs(neighbor,node):returnTruereturnFalseforiinrange(1,n+1):ifnotvisited[i]anddfs(i,-1):returnTruereturnFalse测试print(hasCycle(4,[[1,2],[2,3],[3,4],[4,2]]))#True解析:-使用深度优先搜索(DFS)遍历图,标记已访问节点。-如果在遍历过程中遇到已访问的节点且该节点不是父节点,则存在环。9.题目(堆):实现一个数据流的中位数查找。示例:输入`[5,2,3,1,5]`,输出`[5,4,4,3,5]`(中位数分别为5,4,4,3,5)。答案:pythonimportheapqclassMedianFinder:def__init__(self):self.left=[]#maxheap(usenegativevalues)self.right=[]#minheapdefaddNum(self,num):ifnotself.leftornum<=-self.left[0]:heapq.heappush(self.left,-num)else:heapq.heappush(self.right,num)Balanceheapsiflen(self.left)>len(self.right)+1:heapq.heappush(self.right,-heapq.heappop(self.left))eliflen(self.right)>len(self.left):heapq.heappush(self.left,-heapq.heappop(self.right))deffindMedian(self):iflen(self.left)>len(self.right):return-self.left[0]return(-self.left[0]+self.right[0])/2测试medianFinder=MedianFinder()stream=[5,2,3,1,5]results=[]fornuminstream:medianFinder.addNum(num)results.append(medianFinder.findMedian())print(results)#[5,4,4,3,5]解析:-使用两个堆:左堆(最大堆)存储较小的一半,右堆(最小堆)存储较大的一半。-添加数字时保持堆平衡,中位数由堆顶决定。10.题目(字符串匹配):实现KMP算法,查找字符串中的子串。示例:输入主串`"ABABDABACDABABCABAB"`和子串`"ABABCABAB"`,输出`10`(子串起始位置)。答案:pythondefkmp_search(text,pattern):defcompute_lps(pattern):lps=[0]len(pattern)length=0i=1whilei<len(pattern):ifpattern[i]==pattern[length]:length+=1lps[i]=lengthi+=1else:iflength!=0:length=lps[length-1]else:lps[i]=0i+=1returnlpslps=compute_lps(pattern)i=j=0whilei<len(text):ifpattern[j]==text[i]:i+=1j+=1ifj==len(pattern):returni-jelifi<len(text)andpattern[j]!=text[i]:ifj!=0:j=lps[j-1]else:i+=1return-1测试print(kmp_search("ABABDABACDABABCABAB","ABABCABAB"))#10解析:-KMP算法通过预处理子串计算部分匹配表(LPS数组),避免重复比较。-遇到不匹配时,利用LPS数组移动子串位置。三、系统设计(共3题,每题20分,总分60分)11.题目(短链接系统):设计一个短链接系统,要求:-输入长链接,输出短链接(如`/abc123`)。-支持分布式部署,高可用。-支持实时访问统计。答案:1.数据结构:-使用哈希表存储长链接到短链接的映射(Redis或Memcached)。-短链接使用62进制随机字符串(a-z,A-Z,0-9)生成,确保唯一性。2.分布式部署:-使用分布式缓存(如RedisCluster)存储映射关系。-通过负载均衡器(如Nginx)分发请求。3.访问统计:-使用Redis的计数器或发布/订阅机制记录点击次数。-可扩展为时序数据库(如InfluxDB)存储历史数据。4.高可用:-配置Red

温馨提示

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

评论

0/150

提交评论