版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年程序员代码面试题及答案详解一、编程语言基础(5题,每题10分)1.题目(10分):给定一个字符串`s`,其中包含数字和字母,请编写函数`extractDigits(s)`,返回字符串中所有数字字符组成的字符串。例如:输入`"a1b2c3"`,输出`"123"`。2.题目(10分):在Python中,编写一个类`Counter`,实现以下功能:-初始化时接受一个整数`value`,初始计数为`value`。-提供`increment()`方法,每次调用时`value`加1。-提供`decrement()`方法,每次调用时`value`减1。-提供`reset()`方法,将`value`重置为初始值。示例:pythonc=Counter(5)c.increment()print(c.value)#输出6c.decrement()print(c.value)#输出5c.reset()print(c.value)#输出53.题目(10分):在Java中,编写一个方法`isPalindrome(Strings)`,判断字符串`s`是否为回文(忽略大小写和空格)。例如:输入`"Aman,aplan,acanal:Panama"`,输出`true`。4.题目(10分):在JavaScript中,编写一个函数`removeDuplicates(arr)`,删除数组`arr`中的重复元素,保持原有顺序。例如:输入`[1,2,2,3,4,4,5]`,输出`[1,2,3,4,5]`。5.题目(10分):在C++中,编写一个函数`reverseWords(strings)`,将字符串`s`中的单词顺序反转。例如:输入`"helloworld"`,输出`"worldhello"`。二、数据结构与算法(10题,每题10分)6.题目(10分):实现一个`LRU缓存`(LeastRecentlyUsedCache),支持`get(key)`和`put(key,value)`操作。使用双向链表和哈希表实现,要求`O(1)`时间复杂度。7.题目(10分):给定一个数组`nums`和一个目标值`target`,请编写函数`twoSum(nums,target)`,返回所有和为`target`的数对索引。例如:输入`nums=[2,7,11,15],target=9`,输出`[[0,1]]`。8.题目(10分):编写一个函数`mergeSortedArrays(int[]arr1,int[]arr2)`,合并两个已排序的数组,返回合并后的已排序数组。例如:输入`arr1=[1,3,5],arr2=[2,4,6]`,输出`[1,2,3,4,5,6]`。9.题目(10分):给定一个二叉树,编写函数`inorderTraversal(TreeNoderoot)`,返回中序遍历的结果。例如:输入:[1,null,2,3]1\2/3输出:[1,3,2]10.题目(10分):编写一个函数`maxProfit(int[]prices)`,计算给定股票价格数组`prices`的最大利润。例如:输入`prices=[7,1,5,3,6,4]`,输出`5`(在价格为1时买入,价格为5时卖出)。11.题目(10分):给定一个字符串`s`,请编写函数`lengthOfLongestSubstring(s)`,返回不重复字符的最长子串长度。例如:输入`"abcabcbb"`,输出`3`("abc")。12.题目(10分):编写一个函数`rotate(matrix)`,原地旋转二维矩阵`matrix`90度。例如:输入:[[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]13.题目(10分):编写一个函数`countAndSay(n)`,实现“计数排序”序列的第`n`项。例如:输入`n=4`,输出`"1211"`(解释:`1`读作`one`->`11`,`11`读作`twoones`->`21`,`21`读作`onetwo`->`1211`)。14.题目(10分):给定一个字符串`s`,编写函数`minWindow(s,t)`,返回`s`中包含`t`所有字符的最小窗口子串。例如:输入`s="ADOBECODEBANC",t="ABC"`,输出`"BANC"`。15.题目(10分):编写一个函数`isBalanced(TreeNoderoot)`,判断二叉树是否平衡(任意节点的左右子树高度差不超过1)。例如:输入:3/\920/\157输出:true三、系统设计(3题,每题20分)16.题目(20分):设计一个简单的微博系统,要求:1.支持用户注册、登录(使用JWT)。2.支持发布微博(最多280字符)。3.支持关注/取消关注用户。4.支持查看用户的微博时间线(最新20条)。请简述数据库表设计、核心API接口及主要技术选型(如:后端语言、数据库、缓存等)。17.题目(20分):设计一个高并发的短链接系统,要求:1.输入任意长URL,返回固定长度(如6位)短链接。2.访问短链接时,能自动解析为原始URL。3.支持高并发访问(每秒百万级请求)。请简述技术方案(如:数据库设计、分布式缓存、负载均衡等)。18.题目(20分):设计一个实时聊天系统,要求:1.支持一对一聊天和群聊。2.支持消息已读/未读状态。3.支持离线消息推送(使用WebSocket或长轮询)。请简述核心架构(如:消息存储、同步机制、推送方案等)。答案与解析1.答案(Python):pythondefextractDigits(s):return''.join([cforcinsifc.isdigit()])解析:-使用列表推导式遍历字符串`s`,筛选出所有数字字符(`c.isdigit()`为`True`),然后用`''.join()`拼接成字符串。-时间复杂度:`O(n)`,`n`为字符串长度。2.答案(Python):pythonclassCounter:def__init__(self,value):self._value=valueself._initial=valuedefincrement(self):self._value+=1defdecrement(self):self._value-=1@propertydefvalue(self):returnself._valuedefreset(self):self._value=self._initial解析:-使用`_value`存储当前值,`_initial`存储初始值。-`increment()`和`decrement()`分别加1或减1。-`reset()`将`_value`恢复为`_initial`。-使用`@property`使`value`可读。3.答案(Java):javapublicbooleanisPalindrome(Strings){s=s.replaceAll("[^a-zA-Z0-9]","").toLowerCase();intleft=0,right=s.length()-1;while(left<right){if(s.charAt(left)!=s.charAt(right)){returnfalse;}left++;right--;}returntrue;}解析:-使用正则表达式去除非字母数字字符,并转换为小写。-双指针法从两端向中间遍历,比较字符是否相等。-时间复杂度:`O(n)`,`n`为字符串长度。4.答案(JavaScript):javascriptfunctionremoveDuplicates(arr){constseen=newSet();returnarr.filter(item=>{if(seen.has(item)){returnfalse;}seen.add(item);returntrue;});}解析:-使用`Set`记录已出现元素。-`filter`过滤掉重复元素。-时间复杂度:`O(n)`。5.答案(C++):cppinclude<sstream>include<vector>usingnamespacestd;stringreverseWords(strings){vector<string>words;stringword;istringstreamiss(s);while(iss>>word){words.push_back(word);}reverse(words.begin(),words.end());stringresult;for(conststring&w:words){result+=w+"";}returnresult.empty()?"":result.substr(0,result.size()-1);}解析:-使用`istringstream`分割字符串。-将单词存入`vector`,反转后拼接。-时间复杂度:`O(n)`。6.答案(Java):javaclassLRUCache{privateMap<Integer,Node>map;privateNodehead,tail;privateintcapacity;classNode{intkey,value;Nodeprev,next;Node(intkey,intvalue){this.key=key;this.value=value;}}publicLRUCache(intcapacity){this.capacity=capacity;map=newHashMap<>();head=newNode(0,0);tail=newNode(0,0);head.next=tail;tail.prev=head;}publicintget(intkey){if(map.containsKey(key)){Nodenode=map.get(key);moveToHead(node);returnnode.value;}return-1;}publicvoidput(intkey,intvalue){if(map.containsKey(key)){Nodenode=map.get(key);node.value=value;moveToHead(node);}else{if(map.size()==capacity){map.remove(tail.prev.key);removeNode(tail.prev);}Nodenode=newNode(key,value);map.put(key,node);addToHead(node);}}privatevoidaddToHead(Nodenode){node.prev=head;node.next=head.next;head.next.prev=node;head.next=node;}privatevoidremoveNode(Nodenode){node.prev.next=node.next;node.next.prev=node.prev;}privatevoidmoveToHead(Nodenode){removeNode(node);addToHead(node);}}解析:-使用双向链表和哈希表实现。-`get`时将节点移动到头部。-`put`时若已存在则更新,否则删除最久未使用节点。-时间复杂度:`O(1)`。7.答案(Python):pythondeftwoSum(nums,target):num_map={}result=[]fori,numinenumerate(nums):complement=target-numifcomplementinnum_map:result.append([num_map[complement],i])num_map[num]=ireturnresult解析:-使用哈希表记录数字及其索引。-遍历时检查`target-num`是否已存在。-时间复杂度:`O(n)`。8.答案(Java):javapublicint[]mergeSortedArrays(int[]arr1,int[]arr2){int[]merged=newint[arr1.length+arr2.length];inti=0,j=0,k=0;while(i<arr1.length&&j<arr2.length){if(arr1[i]<arr2[j]){merged[k++]=arr1[i++];}else{merged[k++]=arr2[j++];}}while(i<arr1.length){merged[k++]=arr1[i++];}while(j<arr2.length){merged[k++]=arr2[j++];}returnmerged;}解析:-双指针法合并两个有序数组。-时间复杂度:`O(n+m)`,`n`和`m`分别为两个数组长度。9.答案(Python):pythondefinorderTraversal(root):stack,result=[],[]whilerootorstack:whileroot:stack.append(root)root=root.leftroot=stack.pop()result.append(root.val)root=root.rightreturnresult解析:-使用栈实现中序遍历。-先遍历左子树,再访问节点,最后遍历右子树。-时间复杂度:`O(n)`。10.答案(Python):pythondefmaxProfit(prices):min_price=float('inf')max_profit=0forpriceinprices:ifprice<min_price:min_price=priceelifprice-min_price>max_profit:max_profit=price-min_pricereturnmax_profit解析:-维护最低价格和最大利润。-遍历数组,更新最低价格和利润。-时间复杂度:`O(n)`。11.答案(JavaScript):javascriptfunctionlengthOfLongestSubstring(s){letleft=0,maxLen=0;constcharIndex={};for(letright=0;right<s.length;right++){if(s[right]incharIndex&&charIndex[s[right]]>=left){left=charIndex[s[right]]+1;}charIndex[s[right]]=right;maxLen=Math.max(maxLen,right-left+1);}returnmaxLen;}解析:-使用滑动窗口和哈希表记录字符上一次出现的位置。-时间复杂度:`O(n)`。12.答案(JavaScript):javascriptfunctionrotate(matrix){constn=matrix.length;for(leti=0;i<Math.floor(n/2);i++){for(letj=0;j<Math.floor((n+1)/2);j++){consttemp=matrix[i][j];matrix[i][j]=matrix[n-1-j][i];matrix[n-1-j][i]=matrix[n-1-i][n-1-j];matrix[n-1-i][n-1-j]=matrix[j][n-1-i];matrix[j][n-1-i]=temp;}}}解析:-分层旋转矩阵。-时间复杂度:`O(n^2)`。13.答案(Python):pythondefcountAndSay(n):ifn==1:return"1"prev=countAndSay(n-1)result=""count=1foriinrange(1,len(prev)):ifprev[i]==prev[i-1]:count+=1else:result+=str(count)+prev[i-1]count=1result+=str(count)+prev[-1]returnresult解析:-递归实现。-统计连续数字的个数,然后拼接。-时间复杂度:`O(nk)`,`k`为字符串长度。14.答案(Java):javapublicStringminWindow(Strings,Stringt){if(s==null||t==null||s.length()<t.length())return"";int[]countT=newint[128];int[]window=newint[128];for(charc:t.toCharArray()){countT[c]++;}inthave=0,need=t.length();intleft=0,right=0,minLen=Integer.MAX_VALUE,ansLeft=0;while(right<s.length()){charc=s.charAt(right);window[c]++;if(countT[c]>0&&window[c]==countT[c]){have++;}while(have==need){if(right-left+1<minLen){minLen=right-left+1;ansLeft=left;}chard=s.charAt(left);window[d]--;if(countT[d]>0&&window[d]<countT[d]){have--;}left++;}right++;}returnminLen==Integer.MAX_VALUE?"":s.substring(ansLeft,ansLeft+minLen);}解析:-滑动窗口法。-统计`t`中字符频率,然后扩展窗口直到包含`t`所有字符。-时间复杂度:`O(n)`。15.答案(Python):pythondefisBalanced(root):defcheck(node):ifnotnode:return0left=check(node.left)right=check(node.right)ifabs(left-right)>1orleft==-1orright==-1:return-1returnmax(left,right)+1retu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生物标志物在药物临床试验中的临床试验技术研究
- 生物标志物在临床试验中的亚组分析策略-1
- 生物制剂失应答的个体化治疗方案制定
- 生物制剂TDM指导下的IBD联合治疗方案优化
- 深度解析(2026)《GBT 20081.2-2021气动 减压阀和过滤减压阀 第2部分:评定商务文件中应包含的主要特性的试验方法》
- 深度解析(2026)《GBT 19487-2004电子政务业务流程设计方法 通 用规范》
- 深度解析(2026)GBT 19520.17-2010电子设备机械结构 482.6mm(19in)系列机械结构尺寸 第3-105部分:1U高度机箱的尺寸和设计要求
- 人力资源管理师考试难点突破与应试技巧含答案
- 设备维护工作考核标准及流程
- 娱乐休闲产品加工建设项目可行性分析报告(总投资3000万元)
- 开展中长导管的临床意义
- 《企业战略管理》期末复习题库 (一)
- 第5单元舞剧音乐《快乐的女战士》课件人教版初中音乐九年级上册
- 8.2《购买水果》(教案)-2025-2026学年三年级上册数学 北师大版
- 按摩店大学生创业计划
- 广东省领航高中联盟2025-2026学年高三上学期12月联考政治试卷(含答案)
- 2025年秋人教版(新教材)初中数学七年级上册期末综合测试卷及答案
- 城市地下综合管廊运营方案
- (完整版)2025年新版药品管理法培训试卷附答案
- 2025年检察院书记员考试题库附答案
- 血管导管相关感染预防与控制指南(2025版)
评论
0/150
提交评论