版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年程序员编程面试题库:代码与算法的较量一、编程语言基础(5题,每题6分)考察方向:基础语法、数据类型、面向对象、异常处理、内存管理。1.Java题目(6分)题目:编写Java代码,实现一个自定义的`ArrayStack`类,支持动态扩容。要求:-使用`Object[]`存储数据,初始容量为10,满时自动扩容为原来的2倍。-提供`push`、`pop`、`isEmpty`方法。-若栈为空时调用`pop`,抛出`NoSuchElementException`异常。答案与解析:javapublicclassArrayStack{privateObject[]elements;privateintsize;privatestaticfinalintDEFAULT_CAPACITY=10;publicArrayStack(){elements=newObject[DEFAULT_CAPACITY];}publicvoidpush(Objecte){ensureCapacity(size+1);elements[size++]=e;}publicObjectpop(){if(size==0){thrownewNoSuchElementException("Stackisempty");}returnelements[--size];}publicbooleanisEmpty(){returnsize==0;}privatevoidensureCapacity(intminCapacity){if(minCapacity>elements.length){intnewCapacity=elements.length2;if(newCapacity<minCapacity){newCapacity=minCapacity;}elements=Arrays.copyOf(elements,newCapacity);}}}解析:-`ensureCapacity`方法用于检查数组容量是否足够,若不足则扩容。-`push`和`pop`操作需注意索引边界和异常处理。-Java的`Object[]`可存储任意类型,但类型检查需在调用时完成。2.Python题目(6分)题目:使用Python实现一个装饰器`retry`,用于自动重试被装饰的函数。要求:-若函数执行失败(抛出异常),自动重试3次。-重试间隔为1秒(使用`time.sleep`)。答案与解析:pythonimporttimedefretry(max_attempts=3,delay=1):defdecorator(func):defwrapper(args,kwargs):attempts=0whileattempts<max_attempts:try:returnfunc(args,kwargs)exceptExceptionase:print(f"Attempt{attempts+1}failed:{e}")time.sleep(delay)attempts+=1raiseException(f"Functionfailedafter{max_attempts}attempts")returnwrapperreturndecorator@retrydeftest_func():print("Tryingtoexecute...")SimulatefailureraiseValueError("Testfailure")解析:-装饰器嵌套实现参数化(可自定义重试次数和间隔)。-使用`while`循环和异常捕获控制重试逻辑。-`time.sleep`实现延迟,避免连续失败。3.JavaScript题目(6分)题目:编写JavaScript代码,实现一个`Promise`队列,确保按顺序执行多个异步任务。要求:-输入数组`tasks`,每个任务返回`Promise`。-使用`async/await`实现串行执行。答案与解析:javascriptasyncfunctionexecuteQueue(tasks){for(consttaskoftasks){awaittask();}}//Exampleusageconsttasks=[()=>newPromise(resolve=>setTimeout(()=>console.log("Task1"),1000)),()=>newPromise(resolve=>setTimeout(()=>console.log("Task2"),500))];executeQueue(tasks);解析:-`async/await`简化`Promise`链的串行处理。-`setTimeout`模拟异步任务,实际场景可替换为API调用。4.C++题目(6分)题目:使用C++实现一个简单的`LRUCache`(最近最少使用缓存),支持`get`和`put`操作。要求:-使用`unordered_map`存储键值对,`list`维护访问顺序。-`get`操作返回值并移动元素到头部,`put`操作先删除重复键再插入。答案与解析:cppinclude<unordered_map>include<list>classLRUCache{private:intcapacity;std::unordered_map<int,std::pair<int,std::list<int>::iterator>>cache;std::list<int>order;voidtouch(intkey){if(cache.find(key)!=cache.end()){order.erase(cache[key].second);order.push_front(key);cache[key].second=order.begin();}}public:LRUCache(intcapacity_):capacity(capacity_){}intget(intkey){if(cache.find(key)==cache.end())return-1;touch(key);returncache[key].first;}voidput(intkey,intvalue){if(cache.find(key)!=cache.end()){cache[key].first=value;touch(key);}else{if(cache.size()==capacity){intevict=order.back();order.pop_back();cache.erase(evict);}order.push_front(key);cache[key]={value,order.begin()};}}};解析:-`unordered_map`存储键到值的映射和迭代器,实现O(1)访问。-`list`维护访问顺序,头部为最近使用。-`touch`方法更新访问顺序。5.Go题目(6分)题目:编写Go代码,实现一个简单的`RateLimiter`(速率限制器),限制每秒请求次数不超过10次。要求:-使用`channel`或`time`实现节流。答案与解析:gopackagemainimport("fmt""sync""time")typeRateLimiterstruct{capacityintbucketchantime.Timelocksync.Mutex}funcNewRateLimiter(capacityint)RateLimiter{return&RateLimiter{capacity:capacity,bucket:make(chantime.Time,capacity),}}func(rlRateLimiter)Allow()bool{rl.lock.Lock()deferrl.lock.Unlock()now:=time.Now()iflen(rl.bucket)==rl.capacity{first:=<-rl.bucketifnow.Sub(first)<time.Second{returnfalse}}rl.bucket<-nowreturntrue}funcmain(){rl:=NewRateLimiter(10)fori:=0;i<20;i++{ifrl.Allow(){fmt.Println("Requestallowed:",i)}else{fmt.Println("Requestdenied:",i)}time.Sleep(100time.Millisecond)}}解析:-使用`channel`作为桶,限制容量为10。-满时比较最早请求时间,若间隔小于1秒则拒绝。-`sync.Mutex`保证并发安全。二、算法与数据结构(8题,每题8分)考察方向:排序、查找、动态规划、图算法、链表、树。6.排序算法题目(8分)题目:给定一个包含重复元素的数组,使用快速排序(不重复)的变种实现稳定排序,要求:-时间复杂度O(nlogn),空间复杂度O(1)。答案与解析:pythondefstable_quick_sort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnstable_quick_sort(left)+middle+stable_quick_sort(right)Exampleprint(stable_quick_sort([3,3,1,2,3,4,3]))解析:-快速排序通过分区实现排序,但普通版本不稳定。-通过添加`middle`数组保持相等元素的相对顺序。-空间复杂度仍为O(logn)(递归栈),但实际使用额外空间。7.动态规划题目(8分)题目:给定一个字符串,返回最长的回文子串的长度。要求:-时间复杂度O(n^2),空间复杂度O(n)。答案与解析:pythondeflongest_palindrome(s):n=len(s)ifn==0:return0dp=[[False]nfor_inrange(n)]max_len=1foriinrange(n):dp[i][i]=Trueforiinrange(n-1):ifs[i]==s[i+1]:dp[i][i+1]=Truemax_len=2forlengthinrange(3,n+1):foriinrange(n-length+1):j=i+length-1ifs[i]==s[j]anddp[i+1][j-1]:dp[i][j]=Truemax_len=lengthreturnmax_lenExampleprint(longest_palindrome("babad"))解析:-`dp[i][j]`表示`s[i..j]`是否为回文。-从长度1到n遍历,更新最长回文。-时间复杂度O(n^2),空间复杂度O(n^2),可优化为O(n)。8.图算法题目(8分)题目:给定一个无向图,判断是否存在环。要求:-使用深度优先搜索(DFS)实现。答案与解析:pythondefhas_cycle(graph):visited=set()rec_stack=set()defdfs(node):visited.add(node)rec_stack.add(node)forneighboringraph[node]:ifneighbornotinvisited:ifdfs(neighbor):returnTrueelifneighborinrec_stack:returnTruerec_stack.remove(node)returnFalsefornodeingraph:ifnodenotinvisited:ifdfs(node):returnTruereturnFalseExamplegraph={0:[1,2],1:[2],2:[3],3:[4],4:[1]#Cycle}print(has_cycle(graph))解析:-使用`visited`记录已访问节点,`rec_stack`记录递归栈。-若节点在栈中再次出现,则存在环。-时间复杂度O(V+E),空间复杂度O(V)。9.链表题目(8分)题目:合并两个有序链表,返回合并后的头节点。要求:-时间复杂度O(n),空间复杂度O(1)。答案与解析:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefmerge_two_lists(l1,l2):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.nextExampledeflist_to_nodes(arr):dummy=ListNode(0)current=dummyfornuminarr:current.next=ListNode(num)current=current.nextreturndummy.nextl1=list_to_nodes([1,2,4])l2=list_to_nodes([1,3,4])merged=merge_two_lists(l1,l2)whilemerged:print(merged.val,end="->")merged=merged.next解析:-使用虚拟头节点简化边界处理。-逐个比较节点,合并到新链表。-空间复杂度O(1),仅修改指针。10.树题目(8分)题目:给定二叉树,判断是否为完全二叉树。要求:-从左到右遍历,第一个不完整的节点后所有节点必须为叶子节点。答案与解析:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefis_complete_binary_tree(root):ifnotroot:returnTruequeue=[root]end=Falsewhilequeue:node=queue.pop(0)ifnotnode:end=Trueelse:ifend:returnFalsequeue.append(node.left)queue.append(node.right)returnTrueExampleroot=TreeNode(1)root.left=TreeNode(2)root.right=TreeNode(3)root.left.left=TreeNode(4)root.left.right=TreeNode(5)print(is_complete_binary_tree(root))#True解析:-层序遍历,若遇到空节点后仍有非空节点,则不完整。-使用`end`标记第一个空节点后的状态。11.堆题目(8分)题目:给定一个数组,使用最小堆实现TopKFrequentElements(前K个高频元素)。要求:-时间复杂度O(nlogk)。答案与解析:pythonfromcollectionsimportCounterimportheapqdeftop_k_frequent(nums,k):count=Counter(nums)heap=[]fornum,freqincount.items():heapq.heappush(heap,(freq,num))iflen(heap)>k:heapq.heappop(heap)return[numforfreq,numinsorted(heap,reverse=True)]Exampleprint(top_k_frequent([1,1,1,2,2,3],2))#[1,2]解析:-使用`Counter`统计频率,堆维护前K个高频。-`heapq`实现最小堆,保持堆大小为k。-时间复杂度O(nlogk),空间复杂度O(n)。12.双指针题目(8分)题目:给定两个排序数组,合并为一个新的排序数组。要求:-时间复杂度O(n),空间复杂度O(1)。答案与解析:pythondefmerge_sorted_arrays(nums1,m,nums2,n):p1,p2=m-1,n-1p=m+n-1whilep1>=0andp2>=0:ifnums1[p1]>nums2[p2]:nums1[p]=nums1[p1]p1-=1else:nums1[p]=nums2[p2]p2-=1p-=1nums1[:p2+1]=nums2[:p2+1]Examplenums1=[1,2,3,0,0,0]nums2=[2,5,6]merge_sorted_arrays(nums1,3,nums2,3)print(nums1)#[1,2,2,3,5,6]解析:-从后向前合并,避免覆盖nums1的元素。-双指针分别从两个数组末尾开始比较,填入nums1的末尾。三、系统设计(5题,每题10分)考察方向:分布式系统、缓存、负载均衡、数据库设计、消息队列。13.缓存设计题目(10分)题目:设计一个分布式缓存系统,支持多节点写入和读取,要求:-高可用(节点宕机不影响服务)。-低延迟(读取热点数据快速响应)。答案与解析:-架构:-使用`RedisCluster`或`MemcachedCluster`实现分片,支持多节点写入。-节点宕机时自动故障转移(RedisCluster内置)。-使用`read-replica`模式提高读取性能。-策略:-热点数据写入主节点,读取时从主节点或副本节点获取。-设置合理的`TTL`避免过时数据。14.负载均衡题目(10分)题目:设计一个高可用负载均衡器,支持动态添加/删除节点。要求:-节点宕机自动剔除。-均衡策略为轮询或最少连接。答案与解析:-架构:-使用`Nginx`或`HAProxy`作为负载均衡器。-配置健康
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 深度解析(2026)《GBT 19230.6-2003评价汽油清净剂使用效果的试验方法 第6部分汽油清净剂对汽油机进气阀和燃烧室沉积物生成倾向影响的发动机台架试验方法(M111法)》
- 环境暴露在疾病预防一级中的策略应用
- 乘用车建设项目可行性分析报告(总投资22000万元)
- 餐饮经理面试题及服务管理经验含答案
- 特殊群体(留守儿童)的干预方案
- 核化工操作员面试题集
- 深度解析(2026)《GBT 18794.4-2003信息技术 开放系统互连 开放系统安全框架 第4部分抗抵赖框架》
- 特殊人群麻醉考量与方案调整
- 深度解析(2026)《GBT 18511-2017煤的着火温度测定方法》
- 核电厂辐射防护工作实践经验面试题
- 《工业战略性新兴产业分类目录(2023)》
- 工业区位因素与工业布局课件高一下学期地理(2019)必修二
- 高风险作业管理规定
- GB/T 27995.1-2025半成品镜片毛坯第1部分:单焦和多焦
- 护理部主任年终汇报
- 《电力市场概论》 课件 第七章 发电投资分析
- 2024年新苏教版四年级上册科学全册知识点(复习资料)
- 题库二附有答案
- 市场拓展与销售渠道拓展方案
- 铁血将军、建军元勋-叶挺 (1)讲解
- 2023年西门子PLC知识考试题(附含答案)
评论
0/150
提交评论