版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年手写代码面试题及算法题库解析第一部分:编程语言基础(共5题,每题6分)题目1(Java基础):编写Java代码,实现一个自定义异常类`InvalidAgeException`,并在主函数中捕获该异常,输出错误信息。要求异常在年龄小于0或大于120时抛出。题目2(Python基础):使用Python实现一个函数,接收一个列表,返回列表中所有偶数的平方和。例如:输入`[1,2,3,4,5]`,输出`20`。题目3(JavaScript基础):编写JavaScript代码,实现一个函数`uniqueArray`,接收一个数组,返回去重后的新数组。要求不使用内置的`Set`或`filter`方法。题目4(C++基础):用C++实现一个链表节点结构体`ListNode`,并编写一个函数`reverseList`,反转链表。假设链表节点值为整数。题目5(Go基础):编写Go代码,实现一个函数`countDuplicates`,统计一个切片中重复元素的数量。例如:输入`[1,2,2,3,3,3]`,输出`3`(因为`2`和`3`各重复一次)。第二部分:数据结构与算法(共8题,每题8分)题目6(链表):给定一个单链表,编写代码判断链表是否存在环。若存在,返回环的入口节点;否则返回`null`。题目7(树):实现二叉树的深度优先遍历(前序、中序、后序),用递归方式完成。题目8(数组):给定一个无序数组,找出其中第三大的数。例如:输入`[1,2,2,5,3,5]`,输出`2`。题目9(动态规划):编写代码实现斐波那契数列的第n项(n≤50)。要求使用动态规划优化时间复杂度。题目10(贪心算法):给定一个背包容量为`W`的背包和若干物品(每个物品有重量`w`和价值`v`),求背包能装下的最大价值。假设物品数量不超过100。题目11(哈希表):编写代码,判断一个字符串是否可以通过调整字符顺序变成回文字符串。例如:`"aab"`可以调整为`"aba"`,返回`true`。题目12(双指针):给定两个有序数组`nums1`和`nums2`,合并成一个新的有序数组。要求空间复杂度为O(1)。题目13(递归与回溯):实现一个函数,生成所有可能的括号组合,例如:`n=3`时,输出`["((()))","(()())","(())()","()(())","()()()"]`。第三部分:系统设计(共3题,每题10分)题目14(缓存设计):设计一个LRU(最近最少使用)缓存,支持容量设定和get/set操作。要求实现时使用链表和哈希表结合。题目15(分布式系统):假设你要设计一个高并发的短链接服务,请简述主要的技术方案(如分布式ID生成、缓存策略、数据库选型等)。题目16(微服务):设计一个电商订单系统的API接口,包括下单、查询订单、支付回调等关键功能,并说明接口设计原则。第四部分:编程语言进阶(共4题,每题9分)题目17(Java并发):编写Java代码,使用`CountDownLatch`实现一个多线程任务按顺序执行的例子。题目18(Python并发):使用`asyncio`编写一个简单的异步HTTP请求函数,同时发送3个请求并打印结果。题目19(JavaScript闭包):解释JavaScript闭包的概念,并编写一个使用闭包的函数实现一个简单的计数器。题目20(C++模板):编写一个C++模板函数,实现两个任意类型数据的最大值比较。答案与解析第一部分:编程语言基础题目1(Java):javaclassInvalidAgeExceptionextendsException{publicInvalidAgeException(Stringmessage){super(message);}}publicclassMain{publicstaticvoidmain(String[]args){try{checkAge(-5);}catch(InvalidAgeExceptione){System.out.println(e.getMessage());}}staticvoidcheckAge(intage)throwsInvalidAgeException{if(age<0||age>120){thrownewInvalidAgeException("年龄必须在0到120之间");}}}解析:自定义异常需继承`Exception`类,并在方法中通过`throws`声明抛出。捕获异常使用`try-catch`。题目2(Python):pythondefsum_of_even_squares(nums):returnsum(x2forxinnumsifx%2==0)示例print(sum_of_even_squares([1,2,3,4,5]))#输出20解析:列表推导式结合条件判断,计算偶数的平方和。题目3(JavaScript):javascriptfunctionuniqueArray(arr){letresult=[];for(letnumofarr){if(!result.includes(num)){result.push(num);}}returnresult;}//示例console.log(uniqueArray([1,2,2,3,3]));//输出[1,2,3]解析:遍历数组,使用`includes`检查元素是否已存在于结果数组中。题目4(C++):cppstructListNode{intval;ListNodenext;ListNode(intx):val(x),next(nullptr){}};ListNodereverseList(ListNodehead){ListNodeprev=nullptr;ListNodecurr=head;while(curr){ListNodetemp=curr->next;curr->next=prev;prev=curr;curr=temp;}returnprev;}解析:三指针法反转链表,`prev`、`curr`、`temp`依次记录前驱、当前、后继节点。题目5(Go):gofunccountDuplicates(slice[]int)map[int]int{count:=make(map[int]int)for_,num:=rangeslice{count[num]++}duplicates:=make(map[int]int)forkey,val:=rangecount{ifval>1{duplicates[key]=val}}returnduplicates}//示例fmt.Println(countDuplicates([]int{1,2,2,3,3,3}))//输出{2:2,3:3}解析:哈希表统计频率,再筛选重复元素。第二部分:数据结构与算法题目6(链表环检测):pythonclassListNode:def__init__(self,x):self.val=xself.next=NonedefdetectCycle(head):ifnothead:returnNoneslow,fast=head,headwhilefastandfast.next:slow=slow.nextfast=fast.next.nextifslow==fast:slow=headwhileslow!=fast:slow=slow.nextfast=fast.nextreturnslowreturnNone解析:快慢指针法,相遇后重新移动到头部继续遍历可找到环入口。题目7(树遍历):javaclassTreeNode{intval;TreeNodeleft,right;TreeNode(intx){val=x;}}publicclassTreeTraversal{publicstaticvoidpreorder(TreeNoderoot){if(root==null)return;System.out.print(root.val+"");preorder(root.left);preorder(root.right);}publicstaticvoidinorder(TreeNoderoot){if(root==null)return;inorder(root.left);System.out.print(root.val+"");inorder(root.right);}publicstaticvoidpostorder(TreeNoderoot){if(root==null)return;postorder(root.left);postorder(root.right);System.out.print(root.val+"");}}解析:递归实现前序(根-左-右)、中序(左-根-右)、后序(左-右-根)。题目8(第三大数):pythondefthird_max(nums):first,second,third=float('-inf'),float('-inf'),float('-inf')fornuminnums:ifnum>first:third=secondsecond=firstfirst=numeliffirst>num>second:third=secondsecond=numelifsecond>num>third:third=numreturnfirstifthird!=float('-inf')elsesecond示例print(third_max([1,2,2,5,3,5]))#输出2解析:维护三个变量记录前三大的数,遍历数组更新。题目9(斐波那契DP):javapublicintfib(intn){if(n<=1)returnn;int[]dp=newint[n+1];dp[0]=0;dp[1]=1;for(inti=2;i<=n;i++){dp[i]=dp[i-1]+dp[i-2];}returndp[n];}解析:动态规划避免重复计算,时间复杂度O(n),空间可优化至O(1)。题目10(背包问题):pythondefknapsack(W,weights,values):dp=[0](W+1)foriinrange(len(weights)):forwinrange(W,weights[i]-1,-1):dp[w]=max(dp[w],dp[w-weights[i]]+values[i])returndp[W]示例print(knapsack(50,[10,20,30],[60,100,120]))#输出220解析:背包问题经典DP解法,从后向前更新。题目11(回文排列):pythondefcanPermutePalindrome(s):count={}forcharins:count[char]=count.get(char,0)+1odd_count=0forvalincount.values():ifval%2==1:odd_count+=1ifodd_count>1:returnFalsereturnTrue示例print(canPermutePalindrome("aab"))#输出True解析:哈希表统计字符频率,允许一个字符出现奇数次。题目12(合并有序数组):pythondefmerge(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]示例merge([1,2,3,0,0,0],3,[2,5,6],3)#输出[1,2,2,3,5,6]解析:从后向前合并,无需额外空间。题目13(括号组合):pythondefgenerateParenthesis(n):result=[]defbacktrack(s,left,right):iflen(s)==2n:result.append(s)returnifleft<n:backtrack(s+'(',left+1,right)ifright<left:backtrack(s+')',left,right+1)backtrack('',0,0)returnresult示例print(generateParenthesis(3))#输出[('((()))','(()())','(())()','()(())','()()()')]解析:回溯法,限制左括号不超过n,右括号不超过左括号。第三部分:系统设计题目14(LRU缓存):pythonclassLRUCache:def__init__(self,capacity):self.capacity=capacityself.cache={}self.order=collections.OrderedDict()defget(self,key):ifkeynotinself.cache:return-1self.order.move_to_end(key)returnself.cache[key]defput(self,key,value):ifkeyinself.cache:self.order.move_to_end(key)self.cache[key]=valueself.order[key]=valueiflen(self.order)>self.capacity:oldest_key=next(iter(self.order))delself.cache[oldest_key]delself.order[oldest_key]示例lru=LRUCache(2)lru.put(1,1)lru.put(2,2)print(lru.get(1))#输出1lru.put(3,3)#删除键2print(lru.get(2))#输出-1解析:使用`OrderedDict`记录访问顺序,`move_to_end`维护最近使用。题目15(短链接服务):技术方案:1.分布式ID生成:使用Twitter的Snowflake算法生成唯一ID。2.缓存策略:使用Redis缓存热点短链接,减少数据库访问。3.数据库选型:主库使用分片的MySQL,备份数据写入MongoDB。4.负载均衡:Nginx分发请求至不同服务节点。题目16(电商订单系统API):1.下单API:-请求:POST/orders,参数:用户ID、商品列表、总价。-返回:订单ID、状态(待支付/已支付)。2.查询订单:-请求:GET/orders/{order_id}。-返回:订单详情(商品、金额、状态)。3.支付回调:-请求:POST/orders/{order_id}/callback,参数:支付验证信息。-处理:验证签名后更新订单状态。解析:设计RESTfulAPI,状态码规范(200/400/500)。第四部分:编程语言进阶题目17(JavaCountDownLatch):javaclassTaskExecutor{publicvoidexecuteTasks(List<Runnable>tasks)throwsInterruptedException{CountDownLatchlatch=newCountDownLatch(tasks.size());for(Runnabletask:tasks){newThread(()->{task.run();latch.countDown();}).start();}latch.await();System.out.println("所有任务完成");}}//示例newTaskExecutor().executeTasks(Arrays.asList(()->System.out.pr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年历史建筑保护保险合同中
- 2026年快递服务合同
- 2025年聊城市检察机关公开招聘聘用制书记员77人备考题库完整答案详解
- 广东2025年民生银行汕头分行社会招聘备考题库完整答案详解
- 2025年昭觉县应急管理局关于公开招聘综合应急救援队伍人员的备考题库完整参考答案详解
- 春节放假通知、值班备勤表、值班巡查签到表
- 2025年西藏革吉县财政局招聘财会监督人员的备考题库带答案详解
- 2025年郑州市中原银行农村普惠金融支付服务点招聘备考题库及答案详解参考
- 2025年烟台市检察机关公开招聘聘用制书记员的备考题库(24人)及一套答案详解
- 2025年临沂市检察机关公开招聘47人备考题库参考答案详解
- 江苏南通市如皋市2026届高三上学期教学质量调研(二)语文试题+答案
- GB/T 46785-2025风能发电系统沙戈荒型风力发电机组
- 2025年江苏盐城港控股集团有限公司招聘21人备考题库及参考答案详解1套
- 云南民族大学附属高级中学2026届高三联考卷(四)化学+答案
- 楷书简介课件复制
- 《做酸奶》课件教学课件
- 数据库应用技术-004-国开机考复习资料
- 元旦节日快乐游戏课件
- 学生记分册(通用模板)
- 提高住院部医生交接班制度落实率pdca
- 种内与种间关系课件
评论
0/150
提交评论