程序员技术面试题含答案_第1页
程序员技术面试题含答案_第2页
程序员技术面试题含答案_第3页
程序员技术面试题含答案_第4页
程序员技术面试题含答案_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

2026年程序员技术面试题含答案一、编程语言基础(5题,每题6分,共30分)1.Java题目:编写一个Java方法,接收一个整数数组,返回数组中所有奇数元素的和。要求使用StreamAPI实现,并说明时间复杂度。javapublicintsumOfOdds(int[]nums){//实现代码}2.Python题目:编写一个Python函数,接收一个字符串,返回该字符串中所有重复字符的集合。例如,输入"hello",返回{'l','o'}。pythondefduplicate_chars(s):实现代码3.C++题目:实现一个C++函数,判断一个字符串是否为回文(忽略大小写和空格)。例如,输入"Racecar",返回`true`。cppboolisPalindrome(conststd::string&str){//实现代码}4.JavaScript题目:编写一个JavaScript函数,接收一个对象,返回该对象中所有键的值排序后的新对象。例如,输入`{b:2,a:1,c:3}`,返回`{a:1,b:2,c:3}`。javascriptfunctionsortObjectValues(obj){//实现代码}5.Go题目:编写一个Go函数,接收两个整数切片,返回它们的交集(去重后)。例如,输入`[1,2,3]`和`[2,3,4]`,返回`[2,3]`。gofuncintersection(a,b[]int)[]int{//实现代码}二、数据结构与算法(8题,每题7分,共56分)1.数组题目:给定一个未排序的整数数组,实现快速排序算法。要求说明时间复杂度和空间复杂度。javavoidquickSort(int[]arr,intleft,intright){//实现代码}2.链表题目:实现一个单链表,包含头节点。添加一个方法`removeDuplicates()`,删除链表中所有重复的元素,要求保持元素顺序。例如,输入`1->2->2->3->3->4`,返回`1->2->3->4`。pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefremoveDuplicates(self):实现代码3.栈题目:判断一个字符串是否为有效的括号组合("()"、"[]"、"{}")。例如,输入`"(({[]}))"`,返回`true`。javascriptfunctionisValid(s){//实现代码}4.树题目:给定一个二叉搜索树,实现中序遍历的迭代版本(使用栈)。javapublicList<Integer>inorderTraversal(TreeNoderoot){//实现代码}5.哈希表题目:实现一个LRU(最近最少使用)缓存,容量为3。使用哈希表和双向链表实现,要求添加和删除操作的时间复杂度为O(1)。pythonclassLRUCache:def__init__(self,capacity:int):实现代码defget(self,key:int)->int:实现代码defput(self,key:int,value:int)->None:实现代码6.贪心算法题目:有n个活动,每个活动有一个开始时间和结束时间。设计一个算法,选择最多不冲突的活动。例如,输入`[(1,4),(2,3),(3,5),(0,6),(5,7)]`,返回`(1,4),(3,5),(5,7)`。cppvector<pair<int,int>>selectActivities(vector<pair<int,int>>&activities){//实现代码}7.动态规划题目:给定一个字符串,计算最长的回文子串的长度。例如,输入"babad",返回3("bab"或"aba")。javapublicintlongestPalindrome(Strings){//实现代码}8.图题目:实现Dijkstra算法,计算从起点到所有点的最短路径。使用邻接表表示图。pythondefdijkstra(graph,start):实现代码三、系统设计(3题,每题12分,共36分)1.短链接系统设计:设计一个短链接系统(如TinyURL),要求:-输入长链接,返回短链接(如`/abc`)。-输入短链接,返回长链接。-需要考虑高并发、分布式场景下的唯一性和性能。2.实时聊天系统设计:设计一个支持万人同时在线的实时聊天系统,要求:-支持一对一和群聊。-消息实时同步,延迟低。-需要考虑可扩展性和容错性。3.分布式计数器设计:设计一个分布式计数器,支持高并发写入和读取,要求:-可水平扩展。-保证计数器值的唯一性和一致性。-使用Redis或类似工具实现(可简述或代码实现)。四、数据库与中间件(4题,每题9分,共36分)1.SQL题目:给定一个订单表`orders`(`order_id,customer_id,order_date,total_amount`)和一个客户表`customers`(`customer_id,name,city`),查询每个城市的客户订单总金额,并按金额降序排列。sqlSELECTcity,SUM(total_amount)AStotalFROMordersJOINcustomersONorders.customer_id=customers.customer_idGROUPBYcityORDERBYtotalDESC;2.Redis题目:解释Redis的RDB和AOF两种持久化方式的优缺点,并说明在高并发场景下如何选择。3.消息队列题目:设计一个秒杀系统,使用Kafka或RabbitMQ实现,要求:-防止超卖。-处理消息丢失和重复消费问题。4.MySQL索引题目:解释MySQL中的B-Tree索引和哈希索引的区别,并说明在什么场景下使用哪种索引。答案与解析一、编程语言基础1.Java题目:javapublicintsumOfOdds(int[]nums){returnArrays.stream(nums).filter(num->num%2!=0).sum();}解析:使用StreamAPI的`filter`筛选奇数,`sum`求和。时间复杂度为O(n),空间复杂度为O(1)。2.Python题目:pythondefduplicate_chars(s):returnset([charforcharinsifs.count(char)>1])解析:遍历字符串,使用`count`统计每个字符的出现次数,重复的字符加入集合。时间复杂度为O(n^2),可优化为O(n)使用哈希表。3.C++题目:cppboolisPalindrome(conststd::string&str){intleft=0,right=str.size()-1;while(left<right){while(!isalnum(str[left])&&left<right)left++;while(!isalnum(str[right])&&left<right)right--;if(tolower(str[left])!=tolower(str[right]))returnfalse;left++;right--;}returntrue;}解析:双指针从两端向中间遍历,忽略非字母数字字符,比较大小写不敏感的字符。时间复杂度为O(n)。4.JavaScript题目:javascriptfunctionsortObjectValues(obj){returnObject.keys(obj).sort((a,b)=>obj[a]-obj[b]).reduce((acc,key)=>({...acc,[key]:obj[key]}),{});}解析:排序键值对,然后重新构建对象。时间复杂度为O(nlogn)。5.Go题目:gofuncintersection(a,b[]int)[]int{mapA:=make(map[int]bool)for_,num:=rangea{mapA[num]=true}result:=[]int{}for_,num:=rangeb{if_,exists:=mapA[num];exists{result=append(result,num)delete(mapA,num)}}returnresult}解析:使用哈希表去重,然后计算交集。时间复杂度为O(n)。二、数据结构与算法1.数组题目:javavoidquickSort(int[]arr,intleft,intright){if(left<right){intpivot=partition(arr,left,right);quickSort(arr,left,pivot-1);quickSort(arr,pivot+1,right);}}intpartition(int[]arr,intleft,intright){intpivot=arr[right];inti=left-1;for(intj=left;j<right;j++){if(arr[j]<=pivot){i++;swap(arr,i,j);}}swap(arr,i+1,right);returni+1;}解析:快速排序时间复杂度平均为O(nlogn),最坏为O(n^2),空间复杂度为O(logn)。2.链表题目:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefremoveDuplicates(self):current=selfwhilecurrent:whilecurrent.nextandcurrent.val==current.next.val:current.next=current.next.nextcurrent=current.next解析:快速跳过重复节点。时间复杂度为O(n)。3.栈题目:javascriptfunctionisValid(s){conststack=[];constmap={')':'(','}':'{',']':'['};for(constcharofs){if(map[char]){consttop=stack.pop();if(top!==map[char])returnfalse;}else{stack.push(char);}}returnstack.length===0;}解析:使用栈匹配括号。时间复杂度为O(n)。4.树题目:javapublicList<Integer>inorderTraversal(TreeNoderoot){List<Integer>result=newArrayList<>();Stack<TreeNode>stack=newStack<>();TreeNodecurrent=root;while(current!=null||!stack.isEmpty()){while(current!=null){stack.push(current);current=current.left;}current=stack.pop();result.add(current.val);current=current.right;}returnresult;}解析:迭代中序遍历。时间复杂度为O(n)。5.哈希表题目:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeynotinself.cache:return-1self.order.remove(key)self.order.append(key)returnself.cache[key]defput(self,key:int,value:int)->None: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)解析:使用哈希表记录键值,双向链表记录顺序。时间复杂度为O(1)。6.贪心算法题目:cppvector<pair<int,int>>selectActivities(vector<pair<int,int>>&activities){sort(activities,[&](constpair<int,int>&a,constpair<int,int>&b){returna.second<b.second;});vector<pair<int,int>>result;intlastEnd=-1;for(constauto&act:activities){if(act.first>lastEnd){result.push_back(act);lastEnd=act.second;}}returnresult;}解析:按结束时间排序,选择不冲突的活动。时间复杂度为O(nlogn)。7.动态规划题目:javapublicintlongestPalindrome(Strings){intn=s.length();boolean[][]dp=newboolean[n][n];intmaxLen=1;for(inti=0;i<n;i++){dp[i][i]=true;}for(inti=n-1;i>=0;i--){for(intj=i+1;j<n;j++){if(s.charAt(i)==s.charAt(j)){dp[i][j]=i+1>=j-1||dp[i+1][j-1];if(dp[i][j]&&j-i+1>maxLen){maxLen=j-i+1;}}}}returnmaxLen;}解析:动态规划计算最长回文子串。时间复杂度为O(n^2)。8.图题目:pythondefdijkstra(graph,start):dist={node:float('inf')fornodeingraph}dist[start]=0pq=[(0,start)]whilepq:current_dist,u=heapq.heappop(pq)ifcurrent_dist>dist[u]:continueforv,weightingraph[u].items():distance=current_dist+

温馨提示

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

最新文档

评论

0/150

提交评论