科技公司面试题库及答案解析_第1页
科技公司面试题库及答案解析_第2页
科技公司面试题库及答案解析_第3页
科技公司面试题库及答案解析_第4页
科技公司面试题库及答案解析_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

2026年科技公司面试题库及答案解析一、编程题(共5题,每题20分,总分100分)1.Java编程题(20分)请编写一个Java方法,实现将一个字符串中的所有空格替换为"%20"。要求时间复杂度为O(n),空间复杂度为O(1)。javapublicclassReplaceSpaces{publicstaticStringreplaceSpaces(Strings){if(s==null||s.length()==0)returns;intspaceCount=0;for(charc:s.toCharArray()){if(c=='')spaceCount++;}char[]result=newchar[s.length()+spaceCount2];intindex=0;for(charc:s.toCharArray()){if(c==''){result[index++]='%';result[index++]='2';result[index++]='0';}else{result[index++]=c;}}returnnewString(result);}publicstaticvoidmain(String[]args){Stringinput="HelloWorld";System.out.println(replaceSpaces(input));//输出:Hello%20World}}2.Python编程题(20分)请编写一个Python函数,实现判断一个字符串是否为回文串。要求不使用内置函数,时间复杂度为O(n)。pythondefisPalindrome(s):left,right=0,len(s)-1whileleft<right:ifs[left]!=s[right]:returnFalseleft+=1right-=1returnTrueprint(isPalindrome("abba"))#输出:Trueprint(isPalindrome("abc"))#输出:False3.C++编程题(20分)请编写一个C++函数,实现找出数组中和为特定值的最长子数组长度。要求时间复杂度为O(n)。cppinclude<vector>include<unordered_map>usingnamespacestd;intmaxLengthWithSum(vector<int>&nums,inttarget){unordered_map<int,int>sumIndices;intmaxLen=0,currentSum=0;sumIndices[0]=-1;for(inti=0;i<nums.size();++i){currentSum+=nums[i];if(sumIndices.find(currentSum-target)!=sumIndices.end()){maxLen=max(maxLen,i-sumIndices[currentSum-target]);}if(sumIndices.find(currentSum)==sumIndices.end()){sumIndices[currentSum]=i;}}returnmaxLen;}intmain(){vector<int>nums={1,2,3,4,5};inttarget=9;cout<<maxLengthWithSum(nums,target)<<endl;//输出:3(子数组[2,3,4])}4.JavaScript编程题(20分)请编写一个JavaScript函数,实现删除排序数组中的重复项,并返回新数组的长度。要求时间复杂度为O(n)。javascriptfunctionremoveDuplicates(nums){if(nums.length===0)return0;letslow=0;for(letfast=1;fast<nums.length;fast++){if(nums[fast]!==nums[slow]){slow++;nums[slow]=nums[fast];}}returnslow+1;}console.log(removeDuplicates([1,1,2,2,3]));//输出:35.Go编程题(20分)请编写一个Go函数,实现将一个罗马数字转换为整数。要求支持的基本罗马数字为I,V,X,L,C,D,M。gopackagemainimport("fmt")funcromanToInt(sstring)int{romanMap:=map[rune]int{'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000,}total:=0prev:=0fori:=len(s)-1;i>=0;i--{current:=romanMap[rune(s[i])]ifcurrent<prev{total-=current}else{total+=current}prev=current}returntotal}funcmain(){fmt.Println(romanToInt("III"))//输出:3fmt.Println(romanintas("IV"))//输出:4fmt.Println(romanToInt("MCMXCIV"))//输出:1994}二、系统设计题(共3题,每题30分,总分90分)1.短链接系统设计(30分)请设计一个短链接系统,要求:-输入任意长度的URL,输出固定长度的短链接(如6位字母数字组合)。-支持反向解析,通过短链接查询原始URL。-高并发、高可用。-考虑数据一致性和缓存优化。答案解析:-数据结构:使用哈希表(如Redis)存储短链接与原始URL的映射,使用Base62编码(a-z,A-Z,0-9)将ID映射为短链接。-高并发:采用分布式缓存(Redis集群)和负载均衡(Nginx)。-数据一致性:使用Redis的持久化(RDB/AOF)和主从复制。-缓存优化:使用本地缓存(如GuavaCache)减少Redis访问。-示例:输入"/article/12345",输出"abc123"。2.微博实时消息推送系统设计(30分)请设计一个微博实时消息推送系统,要求:-支持用户发布动态、关注/取消关注、接收实时消息。-高并发、低延迟(毫秒级)。-考虑消息可靠性、去重和扩展性。答案解析:-架构:采用发布-订阅模式(Kafka/RabbitMQ),用户关注关系存储在Redis。-实时性:使用WebSocket或Server-SentEvents(SSE)推送消息。-可靠性:Kafka持久化消息,确保不丢失;使用幂等性保证消息只处理一次。-去重:使用布隆过滤器或RedisSet避免重复推送。-扩展性:微服务拆分(如用户服务、消息服务),使用容器化部署。3.分布式数据库分片设计(30分)请设计一个分布式数据库分片方案,要求:-支持水平分片,按用户ID或业务线分片。-高可用、读写均衡。-考虑数据迁移和容灾方案。答案解析:-分片策略:采用哈希分片(如用户ID取模)或范围分片(如按地区分片)。-高可用:使用多副本存储(如MySQLCluster),配合Keepalived实现主从切换。-读写均衡:使用读写分离(如ProxySQL),分片路由器(如ShardingSphere)动态路由请求。-数据迁移:使用影子分片(ShadowSharding)平滑迁移数据。-容灾:跨机房部署,使用异地多活(如Paxos/Raft协议同步)。三、算法题(共2题,每题20分,总分40分)1.LRU缓存算法实现(20分)请设计一个LRU(LeastRecentlyUsed)缓存,支持get和put操作,要求:-使用链表和哈希表实现,时间复杂度为O(1)。-get操作返回键对应的值,并更新最近使用时间;put操作插入键值对,若已存在则更新值。答案解析:-数据结构:使用双向链表(头尾节点)+哈希表(key→node)。-get操作:O(1)查找哈希表,移动节点到链表头部。-put操作:O(1)查找哈希表,若存在则更新值和位置;若不存在则:-若缓存未满,插入节点并移动到头部;-若缓存满,删除链表尾部节点,插入新节点到头部

温馨提示

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

评论

0/150

提交评论