程序员面试题目及代码能力测试_第1页
程序员面试题目及代码能力测试_第2页
程序员面试题目及代码能力测试_第3页
程序员面试题目及代码能力测试_第4页
程序员面试题目及代码能力测试_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

2026年程序员面试题目及代码能力测试一、编程语言基础(5题,每题10分,共50分)1.题目:请用Python实现一个函数,判断一个字符串是否为回文串(正序和逆序读都一样)。例如,输入"racecar"返回True,输入"hello"返回False。要求不使用Python内置的逆序函数。答案与解析:pythondefis_palindrome(s:str)->bool:left,right=0,len(s)-1whileleft<right:ifs[left]!=s[right]:returnFalseleft+=1right-=1returnTrue测试用例print(is_palindrome("racecar"))#Trueprint(is_palindrome("hello"))#False解析:通过双指针法从字符串两端向中间遍历,比较对应字符是否相同。如果发现不匹配则直接返回False,否则最终返回True。时间复杂度O(n),空间复杂度O(1)。2.题目:请用Java实现一个方法,找出一个整数数组中的最大值和最小值,并返回一个包含两个元素的数组。例如,输入[3,1,4,1,5]返回[1,5]。答案与解析:javapublicint[]findMinMax(int[]arr){if(arr==null||arr.length==0){thrownewIllegalArgumentException("Arrayisemptyornull");}intmin=arr[0];intmax=arr[0];for(intnum:arr){if(num<min)min=num;if(num>max)max=num;}returnnewint[]{min,max};}//测试用例publicstaticvoidmain(String[]args){int[]result=newSolution().findMinMax(newint[]{3,1,4,1,5});System.out.println("Min:"+result[0]+",Max:"+result[1]);//输出:Min:1,Max:5}解析:初始化最大值和最小值为数组的第一个元素,遍历数组更新最大值和最小值。时间复杂度O(n),空间复杂度O(1)。3.题目:请用C++实现一个函数,计算一个正整数的二进制表示中1的个数。例如,输入5(二进制101)返回2。答案与解析:cppintcount_bits(intn){intcount=0;while(n>0){count+=n&1;n>>=1;}returncount;}//测试用例include<iostream>intmain(){std::cout<<count_bits(5)<<std::endl;//输出:2return0;}解析:通过不断右移整数并判断最低位是否为1来计数。时间复杂度O(logn),空间复杂度O(1)。4.题目:请用JavaScript实现一个函数,将一个字符串转换为首字母大写的形式。例如,输入"helloworld"返回"HelloWorld"。答案与解析:javascriptfunctioncapitalize(str){if(!str)returnstr;returnstr.charAt(0).toUpperCase()+str.slice(1);}functioncapitalizeWords(str){returnstr.split('').map(capitalize).join('');}//测试用例console.log(capitalizeWords("helloworld"));//"HelloWorld"解析:先处理首字母大写,再通过split和map处理每个单词的首字母大写,最后join回字符串。时间复杂度O(n),空间复杂度O(n)。5.题目:请用Go实现一个函数,检查一个字符串是否包含所有重复的字母至少两次。例如,输入"abba"返回True,输入"abc"返回False。答案与解析:gofunchasDuplicateLetters(sstring)bool{count:=make([]int,26)for_,char:=ranges{index:=int(char-'a')count[index]++ifcount[index]>1{returntrue}}returnfalse}//测试用例packagemainimport"fmt"funcmain(){fmt.Println(hasDuplicateLetters("abba"))//truefmt.Println(hasDuplicateLetters("abc"))//false}解析:使用长度为26的计数数组记录每个字母的出现次数,如果某个字母出现超过一次则返回True。时间复杂度O(n),空间复杂度O(1)。二、数据结构与算法(5题,每题10分,共50分)1.题目:请实现一个LRU(最近最少使用)缓存,支持get和put操作。缓存容量为3,例如:-put(1,1)→缓存是{1=1}-put(2,2)→缓存是{1=1,2=2}-get(1)→返回1-put(3,3)→缓存满,删除最久未使用的1,缓存是{2=2,3=3}-get(4)→返回-1(未找到)答案与解析: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)self.cache[key]=valueself.order.append(key)iflen(self.cache)>self.capacity:oldest_key=self.order.pop(0)delself.cache[oldest_key]测试用例lru=LRUCache(3)lru.put(1,1)lru.put(2,2)print(lru.get(1))#1lru.put(3,3)print(lru.get(4))#-1解析:使用哈希表记录缓存,双向链表记录访问顺序。get时将key移到队尾,put时如果超出容量则删除队头元素。时间复杂度O(1),空间复杂度O(capacity)。2.题目:请用二分查找法实现一个函数,在一个有序数组中查找目标值,如果存在返回索引,否则返回-1。例如,输入[1,2,3,4,5]和目标3返回2。答案与解析: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,3,4,5],3))#2print(binary_search([1,2,3,4,5],6))#-1解析:每次将查找区间减半,直到找到目标值或区间为空。时间复杂度O(logn),空间复杂度O(1)。3.题目:请实现一个函数,将一个非负整数n转换为罗马数字。例如,输入3返回"III",输入4返回"IV",输入9返回"IX"。答案与解析:pythondefint_to_roman(num:int)->str:val=[1000,900,500,400,100,90,50,40,10,9,5,4,1]syms=["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]roman=""i=0whilenum>0:for_inrange(num//val[i]):roman+=syms[i]num-=val[i]i+=1returnroman测试用例print(int_to_roman(3))#"III"print(int_to_roman(4))#"IV"print(int_to_roman(9))#"IX"解析:使用两个数组按从大到小排列的值和符号,依次匹配并减去对应的值,拼接符号到结果中。时间复杂度O(1),空间复杂度O(1)。4.题目:请实现一个函数,判断一个无向图是否是二分图(即可以染成两种颜色且相邻节点不同色)。可以使用邻接表或邻接矩阵表示。答案与解析:pythondefis_bipartite(graph:list)->bool:n=len(graph)color=[-1]n#-1表示未染色,0和1表示两种颜色defdfs(node,c):color[node]=cforneighboringraph[node]:ifcolor[neighbor]==-1:ifnotdfs(neighbor,1-c):returnFalseelifcolor[neighbor]==c:returnFalsereturnTrueforiinrange(n):ifcolor[i]==-1:ifnotdfs(i,0):returnFalsereturnTrue测试用例print(is_bipartite([[1,3],[0,2],[1,3],[0,2]]))#Trueprint(is_bipartite([[1,2,3],[0,2],[0,1,3],[0,2]]))#False解析:使用深度优先搜索(DFS)遍历图,尝试用两种颜色染色,如果相邻节点颜色相同则不是二分图。时间复杂度O(V+E),空间复杂度O(V)。5.题目:请实现一个函数,找出所有可能的括号组合,例如n=3返回["((()))","(()())","(())()","()(())","()()()"]。答案与解析:pythondefgenerate_parentheses(n:int)->list:defbacktrack(s,left,right):iflen(s)==2n:result.append(s)returnifleft<n:backtrack(s+'(',left+1,right)ifright<left:backtrack(s+')',left,right+1)result=[]backtrack('',0,0)returnresult测试用例print(generate_parentheses(3))#["((()))","(()())","(())()","()(())","()()()"]解析:使用回溯法,每次选择添加'('或')',要求左括号数量不超过n,右括号数量不超过左括号。时间复杂度O(4^n/√n),空间复杂度O(4^n/√n)。三、系统设计(3题,每题15分,共45分)1.题目:设计一个简单的微博系统,需要支持以下功能:-发布微博(包含文本、时间戳、作者)-获取某用户的最新10条微博-获取某用户的关注者列表-获取某用户的粉丝列表-点赞微博(每个用户对每条微博最多点赞一次)答案与解析:数据模型:plaintextUser:id,username,followers,followingTweet:id,user_id,text,timestamp,likesFollowRelation:follower_id,followee_id功能实现:-发布微博:将新微博存入`Tweet`表,关联`user_id`和`timestamp`。-获取最新10条微博:按`timestamp`降序查询`Tweet`表,取前10条。-获取关注者/粉丝:通过`FollowRelation`表查询。-点赞:维护一个`Like`表记录`user_id`和`tweet_id`的组合,检查是否已存在。架构建议:-微博存储:使用关系型数据库(如MySQL)存储用户和微博数据。-高并发:通过Redis缓存热点用户数据,减少数据库压力。-分布式:将微博分片存储,支持水平扩展。2.题目:设计一个短链接系统,要求:-输入长链接后生成短链接(如6位随机字母)-访问短链接时解析为原始长链接-支持统计短链接的访问次数答案与解析:数据模型:plaintextShortLink:id,original

温馨提示

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

最新文档

评论

0/150

提交评论