2026年程序员编程面试题及解题策略_第1页
2026年程序员编程面试题及解题策略_第2页
2026年程序员编程面试题及解题策略_第3页
2026年程序员编程面试题及解题策略_第4页
2026年程序员编程面试题及解题策略_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

2026年程序员编程面试题及解题策略一、编程语言基础(5题,每题8分)1.题目(10分):编写一个函数,接收一个整数数组,返回数组中所有奇数元素的和。要求:-时间复杂度O(n)-空间复杂度O(1)-支持Python或Java实现2.题目(8分):实现一个LRU(最近最少使用)缓存,支持get和put操作。要求:-使用哈希表和双向链表结合实现-get操作返回值存在则返回值,否则返回-1-put操作会覆盖已存在的键3.题目(8分):给定一个字符串,判断其是否为有效的括号组合(如"()"、"()[]{}")。要求:-使用栈结构实现-处理嵌套括号情况4.题目(10分):实现快速排序算法,要求:-支持随机选择基准值优化-写出非递归版本5.题目(8分):编写一个函数,检查一个字符串是否是回文字符串(如"abba"、"abcba")。要求:-忽略大小写和空格二、算法与数据结构(8题,每题10分)1.题目(10分):给定一个链表,反转其节点顺序。要求:-不使用额外空间-时间复杂度O(n)2.题目(10分):实现二叉树的层序遍历(广度优先)。要求:-使用队列实现-返回遍历结果列表3.题目(10分):给定一个无重复元素的数组,找出所有和为target的三元组(如[1,2,3],target=6→[[1,2,3]])。要求:-时间复杂度O(n²)4.题目(10分):实现二分查找的变种:在排序数组中找到第一个大于等于target的元素。要求:-时间复杂度O(logn)5.题目(10分):给定一个字符串,统计其中最长的无重复字符子串长度(如"abcabcbb"→3)。要求:-使用滑动窗口方法6.题目(10分):实现一个简单的LRU缓存,支持get和put操作。要求:-使用哈希表+双向链表-get返回存在键的值,否则-1-put覆盖已存在键7.题目(10分):给定一个正整数n,判断其是否为素数。要求:-时间复杂度O(√n)8.题目(10分):编写一个函数,将一个32位整数翻转(如123→321)。要求:-考虑整数溢出问题三、系统设计(3题,每题20分)1.题目(20分):设计一个简单的微博系统,要求:-支持用户发布、关注、点赞功能-用户信息存储与关系存储如何设计?-简述数据表结构2.题目(20分):设计一个短链接系统(如tinyurl),要求:-链接生成唯一且短-支持将短链接解析回原链接-如何处理高并发访问?3.题目(20分):设计一个秒杀系统,要求:-支持高并发抢购-如何防止超卖?-简述数据库与缓存设计四、数据库与缓存(4题,每题15分)1.题目(15分):写出SQL查询:-查询每个员工的工资中位数-表结构:employee(id,name,salary)2.题目(15分):解释MySQL中的事务特性(ACID)及其应用场景。3.题目(15分):Redis中,为什么使用LRU缓存?简述Redis的淘汰策略。4.题目(15分):设计一个分页查询的SQL语句,要求:-支持动态页码(如第5页,每页10条)-表结构:posts(id,title,content,created_at)五、网络与分布式(5题,每题12分)1.题目(12分):解释TCP三次握手与四次挥手过程。2.题目(12分):简述HTTP/1.1与HTTP/2的主要区别。3.题目(12分):如何解决分布式系统中的CAP问题?4.题目(12分):解释Kubernetes中Pod与Service的区别。5.题目(12分):简述JWT(JSONWebToken)的工作原理及其优缺点。答案与解析一、编程语言基础1.答案(Python):pythondefsum_odds(nums):returnsum(numfornuminnumsifnum%2!=0)解析:-使用生成器表达式遍历数组,过滤奇数并求和-时间复杂度O(n),空间复杂度O(1)2.答案(Java):javaclassLRUCache{Map<Integer,Node>map;Nodehead,tail;intcapacity;classNode{intkey,val;Nodeprev,next;Node(intk,intv){key=k;val=v;}}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.val;}return-1;}publicvoidput(intkey,intvalue){if(map.containsKey(key)){Nodenode=map.get(key);node.val=value;moveToHead(node);}else{if(map.size()==capacity){map.remove(tail.prev.key);removeNode(tail.prev);}NodenewNode=newNode(key,value);map.put(key,newNode);addToHead(newNode);}}privatevoidmoveToHead(Nodenode){removeNode(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;}}解析:-使用双向链表维护LRU顺序,哈希表快速查找-get时将节点移动到头部,put时先删除最久未使用节点3.答案(JavaScript):javascriptfunctionisValid(s){conststack=[];constmapping={'(':')','{':'}','[':']'};for(letcharofs){if(charinmapping){stack.push(char);}else{if(stack.length===0||mapping[stack.pop()]!==char){returnfalse;}}}returnstack.length===0;}解析:-左括号入栈,右括号与栈顶匹配,不匹配则无效-时间复杂度O(n),空间复杂度O(n)4.答案(Java):javapublicvoidquickSort(int[]arr,intleft,intright){if(left<right){intpivotIndex=randomizedPartition(arr,left,right);quickSort(arr,left,pivotIndex-1);quickSort(arr,pivotIndex+1,right);}}privateintrandomizedPartition(int[]arr,intleft,intright){intpivot=left+(int)(Math.random()(right-left+1));swap(arr,pivot,right);returnpartition(arr,left,right);}privateintpartition(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;}privatevoidswap(int[]arr,inti,intj){inttemp=arr[i];arr[i]=arr[j];arr[j]=temp;}解析:-随机选择基准值优化性能-非递归版本可改写为循环调用递归函数5.答案(C++):cppboolisPalindrome(strings){intleft=0,right=s.size()-1;while(left<right){while(left<right&&!isalnum(s[left]))left++;while(left<right&&!isalnum(s[right]))right--;if(tolower(s[left])!=tolower(s[right]))returnfalse;left++;right--;}returntrue;}解析:-双指针法,忽略非字母数字字符-时间复杂度O(n),空间复杂度O(1)二、算法与数据结构1.答案(Python):pythondefreverseList(head):prev=Nonewhilehead:next_node=head.nexthead.next=prevprev=headhead=next_nodereturnprev解析:-逐个反转节点指针,不使用额外空间-时间复杂度O(n),空间复杂度O(1)2.答案(Java):javapublicList<List<Integer>>levelOrder(TreeNoderoot){List<List<Integer>>result=newArrayList<>();if(root==null)returnresult;Queue<TreeNode>queue=newLinkedList<>();queue.offer(root);while(!queue.isEmpty()){intsize=queue.size();List<Integer>level=newArrayList<>();for(inti=0;i<size;i++){TreeNodenode=queue.poll();level.add(node.val);if(node.left!=null)queue.offer(node.left);if(node.right!=null)queue.offer(node.right);}result.add(level);}returnresult;}解析:-使用队列逐层遍历二叉树-时间复杂度O(n),空间复杂度O(n)3.答案(JavaScript):javascriptfunctionthreeSum(nums,target){nums.sort((a,b)=>a-b);constresult=[];for(leti=0;i<nums.length-2;i++){if(i>0&&nums[i]===nums[i-1])continue;letleft=i+1,right=nums.length-1;while(left<right){consttotal=nums[i]+nums[left]+nums[right];if(total===target){result.push([nums[i],nums[left],nums[right]]);while(left<right&&nums[left]===nums[left+1])left++;while(left<right&&nums[right]===nums[right-1])right--;left++;right--;}elseif(total<target)left++;elseright--;}}returnresult;}解析:-排序后双指针法,时间复杂度O(n²)4.答案(C++):cppintbinarySearchFirstGreaterEqual(vector<int>&arr,inttarget){intleft=0,right=arr.size();while(left<right){intmid=left+(right-left)/2;if(arr[mid]>=target)right=mid;elseleft=mid+1;}returnleft<arr.size()?arr[left]:-1;}解析:-二分查找变种,找到第一个大于等于target的元素-时间复杂度O(logn)5.答案(Python):pythondeflengthOfLongestSubstring(s):char_map={}left=0max_len=0forrightinrange(len(s)):ifs[right]inchar_mapandchar_map[s[right]]>=left:left=char_map[s[right]]+1char_map[s[right]]=rightmax_len=max(max_len,right-left+1)returnmax_len解析:-滑动窗口法,时间复杂度O(n)6.答案(Java):java//同第一题LRU缓存实现//使用双向链表+哈希表,get移动节点,put覆盖或添加7.答案(Go):gofuncisPrime(nint)bool{ifn<2returnfalsefori:=2;i<=int(math.Sqrt(float64(n)));i++{ifn%i==0{returnfalse}}returntrue}解析:-检查从2到√n的数是否能整除n-时间复杂度O(√n)8.答案(JavaScript):javascriptfunctionreverseInt(x){constINT_MAX=2147483647;constINT_MIN=-2147483648;letrev=0;while(x!==0){letpop=x%10;x=Math.floor(x/10);if(rev>INT_MAX/10||(rev===INT_MAX/10&&pop>7))returnINT_MAX;if(rev<INT_MIN/10||(rev===INT_MIN/10&&pop<-8))returnINT_MIN;rev=rev10+pop;}returnrev;}解析:-逐位反转,处理溢出情况三、系统设计1.答案:-用户信息存储:-user(id,username,password_hash,email,avatar_url,followers_count,following_count)-关系存储:-follow(from_user_id,to_user_id,created_at)-发布功能:-post(id,user_id,content,created_at,likes_count)-点赞功能:-like(post_id,user_id,created_at)2.答案:-短链接生成:-使用hash算法(如MD5+随机salt)或自增ID+62进制转换-高并发处理:-使用Redis缓存热点数据-负载均衡(Nginx)+分布式数据库(如ShardingSphere)3.答案:-防止超卖:-使用Redis分布式锁+计数器-按时间窗口分批验证库存-数据库设计:-order(id,user_id,product_id,quantity,status,created_at)-使用Redis缓存库存四、数据库与缓存1.答案(SQL):sqlSELECTAVG(salary)ASmedianFROM(SELECTsalary,COUNT()AScnt,SUM(CASEWHENs.salary>=e.salaryTHEN1ELSE0END)ASrank1,SUM(CASEWHENs.salary<=e.salaryTHEN1ELSE0END)ASrank2FROMemployeesJOINemployeeeONs.salary<=e.salaryGROUPBYs.salary)AStmpWHEREcnt%2=1ANDrank1=cnt/2+1;2.答案:-ACID:-原子性(Atomicity):事务不可分割-一致性(Cons

温馨提示

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

评论

0/150

提交评论