2026年程序员岗位面试题库及答案_第1页
2026年程序员岗位面试题库及答案_第2页
2026年程序员岗位面试题库及答案_第3页
2026年程序员岗位面试题库及答案_第4页
2026年程序员岗位面试题库及答案_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

2026年程序员岗位面试题库及答案一、编程语言基础(10题,每题10分)1.题目:请用Python编写一个函数,接收一个字符串,返回该字符串中所有数字的和。例如,输入`"a1b2c3"`,返回`6`。答案:pythondefsum_of_numbers(s):total=0current_number=0forcharins:ifchar.isdigit():current_number=current_number10+int(char)else:total+=current_numbercurrent_number=0returntotal+current_number解析:通过遍历字符串,遇到数字时累加到`current_number`,遇到非数字时将`current_number`加到`total`中。最后确保最后一个数字也被加进去。2.题目:用Java实现一个方法,判断一个整数是否是回文数(正序和倒序相同)。例如,`121`是回文数,`123`不是。答案:javapublicbooleanisPalindrome(intx){if(x<0||(x%10==0&&x!=0))returnfalse;intreversed=0;while(x>reversed){reversed=reversed10+x%10;x/=10;}returnx==reversed||x==reversed/10;}解析:通过反转后半部分数字,与原数字的前半部分比较。如果`x`是回文数,反转后的数字会等于`x`的前半部分或去掉最后一位的情况。3.题目:用C++编写一个函数,实现快速排序算法。答案:cppinclude<vector>usingnamespacestd;intpartition(vector<int>&arr,intleft,intright){intpivot=arr[right];inti=left-1;for(intj=left;j<right;j++){if(arr[j]<=pivot){i++;swap(arr[i],arr[j]);}}swap(arr[i+1],arr[right]);returni+1;}voidquickSort(vector<int>&arr,intleft,intright){if(left<right){intpivot_index=partition(arr,left,right);quickSort(arr,left,pivot_index-1);quickSort(arr,pivot_index+1,right);}}解析:快速排序的核心是分治思想,通过`partition`函数将数组分成两部分,然后递归排序左右两部分。4.题目:用JavaScript实现一个Promise,模拟异步获取用户信息(例如`{name:"张三",age:30}`)。答案:javascriptfunctionfetchUserInfo(){returnnewPromise((resolve,reject)=>{setTimeout(()=>{resolve({name:"张三",age:30});},1000);});}解析:`Promise`用于处理异步操作,通过`setTimeout`模拟异步请求,`resolve`返回用户信息。5.题目:用Go语言编写一个函数,接收一个切片,返回其中最大的两个数。例如,输入`[3,1,4,1,5]`,返回`[5,4]`。答案:gopackagemainimport("fmt")functwoLargest(slice[]int)[2]int{iflen(slice)<2{return[2]int{0,0}}first,second:=slice[0],slice[1]ifsecond>first{first,second=second,first}for_,num:=rangeslice[2:]{ifnum>first{second=firstfirst=num}elseifnum>second{second=num}}return[2]int{first,second}}funcmain(){fmt.Println(twoLargest([]int{3,1,4,1,5}))//[54]}解析:通过遍历切片,维护两个变量`first`和`second`记录当前最大的两个数。二、数据结构与算法(15题,每题10分)6.题目:用Java实现一个LRU(最近最少使用)缓存,容量为3。输入`["put",1,1,"put",2,2,"get",1,"put",3,3,"get",2,"put",4,4,"get",1,"get",3,"get",2]`,输出`[1,-1,3,-1,4]`。答案:javaimportjava.util.HashMap;importjava.util.Map;classLRUCache{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);}}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;}}publicclassMain{publicstaticvoidmain(String[]args){LRUCachelru=newLRUCache(3);lru.put(1,1);lru.put(2,2);System.out.println(lru.get(1));//1lru.put(3,3);System.out.println(lru.get(2));//-1lru.put(4,4);System.out.println(lru.get(1));//1System.out.println(lru.get(3));//3System.out.println(lru.get(2));//-1}}解析:LRU缓存使用双向链表和哈希表实现,链表维护最近访问的顺序,哈希表实现O(1)的访问时间。7.题目:用Python实现二分查找算法,返回目标值的索引,如果不存在返回`-1`。答案:pythondefbinary_search(arr,target):left,right=0,len(arr)-1whileleft<=right:mid=(left+right)//2ifarr[mid]==target:returnmidelifarr[mid]<target:left=mid+1else:right=mid-1return-1解析:二分查找适用于有序数组,通过不断缩小查找范围,直到找到目标值或范围为空。8.题目:用C++实现一个函数,判断一个字符串是否是有效的括号组合(例如,`"()[]{}"`是有效的,`"(]"`不是)。答案:cppinclude<stack>include<string>usingnamespacestd;boolisValid(strings){stack<char>st;unordered_map<char,char>pairs={{'}','{'},{')','('},{']','['}};for(charc:s){if(pairs.count(c)){if(st.empty()||st.top()!=pairs[c])returnfalse;st.pop();}else{st.push(c);}}returnst.empty();}解析:使用栈,遇到右括号时检查栈顶是否匹配,否则返回无效。9.题目:用JavaScript实现一个函数,给定一个链表,返回其反转后的链表。答案:javascriptfunctionreverseList(head){letprev=null;letcurrent=head;while(current){letnext=current.next;current.next=prev;prev=current;current=next;}returnprev;}解析:通过遍历链表,逐个将节点的`next`指向前一个节点,实现反转。10.题目:用Go语言实现一个函数,计算斐波那契数列的第n项(n从0开始)。答案:gopackagemainimport"fmt"funcfibonacci(nint)int{ifn<=1{returnn}a,b:=0,1fori:=2;i<=n;i++{a,b=b,a+b}returnb}funcmain(){fmt.Println(fibonacci(10))//55}解析:使用动态规划,通过两个变量记录前两个数,逐步计算到第n项。三、系统设计与架构(5题,每题20分)11.题目:设计一个短链接系统,要求:1.输入任意URL,返回固定长度的短链接(例如`/abc123`)。2.访问短链接时,能够解析为原始URL。3.支持高并发访问。答案:1.短链接生成:-使用哈希算法(如SHA-256)对原始URL进行哈希,然后取哈希值的前6位作为短链接的后缀。-使用自增ID或随机码作为前缀(例如`/`)。2.数据库设计:-表结构:`id`(自增主键),`short_code`(短链接码),`original_url`(原始URL),`click_count`(点击次数)。3.高并发支持:-使用Redis缓存短链接码与原始URL的映射,减少数据库查询。-使用分布式数据库和负载均衡(如Nginx)。4.实现伪代码:go//生成短链接funcgenerateShortLink(urlstring)string{hash:=sha256.Sum256([]byte(url))shortCode:=hex.EncodeToString(hash[:6])//存入数据库return"/"+shortCode}//解析短链接funcresolveShortLink(shortCodestring)string{ifurl,ok:=redis.Get(shortCode);ok{returnurl}//查询数据库return"Notfound"}解析:短链接系统核心在于哈希算法和数据库设计,高并发通过缓存和分布式架构实现。12.题目:设计一个简单的消息队列系统,要求:1.支持生产者发送消息,消费者接收消息。2.消息不丢失(使用数据库或持久化存储)。3.支持至少一次传递(消息确认机制)。答案:1.系统架构:-使用RabbitMQ或Kafka作为消息队列中间件。-生产者将消息发送到队列,消费者从队列获取消息。2.消息存储:-使用关系型数据库(如MySQL)或NoSQL数据库(如Redis)存储消息。-消息状态:`pending`(待处理)、`processed`(已处理)。3.至少一次传递:-消费者处理完消息后发送确认(ACK),队列删除消息。-如果消费者宕机,消息重新入队等待其他消费者处理。4.伪代码:go//生产者funcproduceMessage(urlstring){db.Insert(url,"pending")rabbitMQ.Publish(url)}//消费者funcconsumeMessage(){for{url,ok:=rabbitMQ.Consume()if!ok{continue}ifprocess(url){db.Update(url,"processed")}}}解析:消息队列的核心是解耦和可靠传递,通过持久化存储和确认机制保证消息不丢失。四、数据库与SQL(5题,每题20分)13.题目:设计一个电商订单表,包含以下字段:`order_id`(订单ID,主键),`user_id`(用户ID),`product_id`(产品ID),`quantity`(数量),`price`(单价),`total_price`(总价),`order_time`(订单时间),`status`(状态,如`pending`、`shipped`、`delivered`)。SQL:1.查询用户A的订单总数和总金额。2.查询最近一周内状态为`shipped`的订单数量。3.查询每个产品的订单数量和总金额。答案:sql--创建表CREATETABLEorders(order_idINTPRIMARYKEYAUTO_INCREMENT,user_idINT,product_idINT,quantityINT,priceDECIMAL(10,2),total_priceDECIMAL(10,2),order_timeDATETIME,statusVARCHAR(20));--1.查询用户A的订单总数和总金额SELECTCOUNT()ASorder_count,SUM(total_price)AStotal_amountFROMordersWHEREuser_id=(SELECTidFROMusersWHEREname='A');--2.查询最近一周内状态为`shipped`的订单数量SELECTCOUNT()ASshipped_countFROMordersWHEREstatus='shipped'ANDorder_time>=NOW()-INTERVAL7DAY;--3.查询每个产品的订单数量和总金额SELECTproduct_id,COUNT()ASorder_count,SUM(total_price)AStotal_amountFROMordersGROUPBYproduct_id;解析:订单表设计需要考虑业务场景,SQL查询通过JOIN和聚合函数实现复杂逻辑。14.题目:设计一个博客系统表,包含以下字段:`post_id`(文章ID,主键),`title`(标题),`content`(内容),`author_id`(作者ID),`create_time`(创建时间),`update_time`(更新时间)。SQL:1.查询作者B发布的文章数量和最近发布时间。2.查询标题包含`"技术"`的文章列表。3.查询每个作者的发表文章数量,按数量降序排列。答案:sql--创建表CREATETABLEposts(post_idINTPRIMARYKEYAUTO_INCREMENT,titleVARCHAR(255),contentTEXT,author_idINT,create_timeDATETIME,update_timeDATETIME);--1.查询作者B发布的文章数量和最近发布时间SELECTCOUNT()ASpost_count,MAX(create_time)ASlatest_timeFROMpostsWHEREauthor_id=(SELECTidFROMauthors

温馨提示

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

评论

0/150

提交评论