版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年腾讯公司技术面试题及答案:软件开发岗位一、编程语言基础(5题,每题10分,共50分)1.题目:请用C++实现一个函数,输入一个整数数组,返回数组中的最大值,要求时间复杂度为O(n),空间复杂度为O(1)。答案:cppintfindMax(intarr[],intn){if(n<=0)return-1;//处理空数组intmax=arr[0];for(inti=1;i<n;++i){if(arr[i]>max){max=arr[i];}}returnmax;}解析:-时间复杂度O(n):遍历数组一次,每个元素比较一次。-空间复杂度O(1):只使用常量空间存储最大值。-边界处理:数组为空时返回-1(可根据实际需求调整)。2.题目:请用Java实现一个方法,将一个字符串中的所有小写字母转换为大写字母,不使用内置函数。答案:javapublicstaticStringtoUpperCase(Strings){if(s==null||s.isEmpty())returns;char[]chars=s.toCharArray();for(inti=0;i<chars.length;++i){if(chars[i]>='a'&&chars[i]<='z'){chars[i]=(char)(chars[i]-'a'+'A');}}returnnewString(chars);}解析:-ASCII码转换:小写字母'a'到'z'的ASCII码比大写字母'A'到'Z'大32,通过减去'a'再加'A'实现转换。-性能优化:使用字符数组直接修改原字符串,避免重复创建对象。3.题目:请用Python实现一个函数,判断一个字符串是否是回文(正序和倒序相同),不使用内置函数。答案:pythondefis_palindrome(s):left,right=0,len(s)-1whileleft<right:ifs[left]!=s[right]:returnFalseleft+=1right-=1returnTrue解析:-双指针法:从两端向中间遍历,比较对称字符是否相同。-时间复杂度O(n):遍历字符串一次。-空间复杂度O(1):只使用常量空间。4.题目:请用JavaScript实现一个函数,输入一个正整数n,返回它的二进制表示中1的个数。答案:javascriptfunctioncountOnes(n){letcount=0;while(n>0){count+=n&1;n=n>>1;}returncount;}解析:-位运算:-`n&1`判断最低位是否为1。-`n>>1`将数字右移一位(等同于除以2)。-时间复杂度O(logn):每次操作减少一位。5.题目:请用Go实现一个函数,输入一个字符串,返回它的所有子字符串。答案:gofuncfindAllSubstrings(sstring)[]string{varres[]stringn:=len(s)fori:=0;i<n;i++{forj:=i+1;j<=n;j++{res=append(res,s[i:j])}}returnres}解析:-双层循环:外层固定起始位置,内层遍历结束位置。-时间复杂度O(n²):生成所有子字符串需要平方时间。-空间复杂度O(n²):存储所有子字符串。二、数据结构与算法(5题,每题10分,共50分)1.题目:请用Python实现快速排序算法,输入一个整数数组,返回排序后的数组。答案:pythondefquick_sort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquick_sort(left)+middle+quick_sort(right)解析:-分治思想:-选择基准值(pivot),将数组分为小于、等于、大于三部分。-递归排序左右两部分。-时间复杂度O(nlogn):平均情况。-空间复杂度O(logn):递归栈空间。2.题目:请用Java实现一个方法,输入一个字符串,返回它的最长回文子串。答案:javapublicstaticStringlongestPalindrome(Strings){if(s==null||s.length()<1)return"";intstart=0,end=0;for(inti=0;i<s.length();i++){intlen1=expandAroundCenter(s,i,i);intlen2=expandAroundCenter(s,i,i+1);intlen=Math.max(len1,len2);if(len>end-start){start=i-(len-1)/2;end=i+len/2;}}returns.substring(start,end+1);}privatestaticintexpandAroundCenter(Strings,intleft,intright){while(left>=0&&right<s.length()&&s.charAt(left)==s.charAt(right)){left--;right++;}returnright-left-1;}解析:-中心扩展法:-每个字符或相邻字符对作为中心,向两边扩展。-记录最长回文子串的起始和结束位置。-时间复杂度O(n²):最坏情况需要扩展所有字符。-空间复杂度O(1):只使用常量空间。3.题目:请用C++实现一个函数,输入一个无重复字符的字符串s和目标字符串t,返回s中包含t的所有子序列的个数。答案:cppinclude<unordered_map>usingnamespacestd;intnumSubsequences(strings,stringt){unordered_map<char,vector<int>>charPos;for(inti=0;i<s.size();++i){charPos[s[i]].push_back(i);}intcount=1;longlongres=1;for(charc:t){if(charPos.find(c)==charPos.end())return0;vector<int>&positions=charPos[c];if(positions.empty())return0;intprev=-1;for(intpos:positions){if(pos>prev){res=(pos-prev);if(res>1e18)return-1;//防溢出prev=pos;}}}returnres>1e18?-1:res;}解析:-哈希表记录字符位置:预处理s中每个字符的所有出现位置。-动态乘积:-对于t中的每个字符,选择其位置的后一个字符作为起点,乘以可选数量。-使用长整型防止溢出。-时间复杂度O(mn):m为s长度,n为t长度。4.题目:请用JavaScript实现一个函数,输入一个链表,返回其反转后的链表。答案:javascriptclassListNode{constructor(val=0,next=null){this.val=val;this.next=next;}}functionreverseList(head){letprev=null;letcurrent=head;while(current!==null){letnextTemp=current.next;current.next=prev;prev=current;current=nextTemp;}returnprev;}解析:-迭代反转法:-使用三个指针:prev,current,nextTemp。-逐个反转next指针方向。-时间复杂度O(n):遍历链表一次。-空间复杂度O(1):只使用常量空间。5.题目:请用Python实现一个函数,输入一个二维矩阵,返回它的转置矩阵。答案:pythondeftranspose(matrix):ifnotmatrixornotmatrix[0]:return[]m,n=len(matrix),len(matrix[0])transposed=[[0]mfor_inrange(n)]foriinrange(m):forjinrange(n):transposed[j][i]=matrix[i][j]returntransposed解析:-双重循环:遍历原矩阵,将行列交换填充到新矩阵。-时间复杂度O(mn):遍历所有元素。-空间复杂度O(mn):创建新的转置矩阵。三、系统设计与架构(5题,每题10分,共50分)1.题目:设计一个简单的短链接系统,要求:-输入长链接,返回短链接。-输入短链接,返回长链接。-支持高并发访问。答案:plaintext方案:1.短链接生成:使用随机算法或Base62编码(a-z,A-Z,0-9)生成6位短码。2.存储映射:使用哈希表(Redis/HBase)将短码映射到长链接。3.请求转发:接收到短链接时,查询哈希表,重定向到长链接。4.高并发处理:-使用分布式缓存(RedisCluster)避免单点瓶颈。-热点短码使用负载均衡分摊请求。5.数据库设计:-表结构:short_code(主键),long_url,create_time,hit_count。解析:-Base62编码:将数字映射到62个字符,减少短链接长度。-分布式缓存:RedisCluster支持millionsTPS,适合高并发。-负载均衡:对热点短码进行扩容,防止过载。2.题目:设计一个微博系统的消息推送服务,要求:-支持实时推送(如新消息、点赞动态)。-支持离线推送(用户不在线时)。-高可用、低延迟。答案:plaintext方案:1.实时推送:-使用WebSocket或Server-SentEvents(SSE)长连接。-服务端收到新消息后,直接通过连接推送。2.离线推送:-用户下线时,将消息存入消息队列(Kafka/RabbitMQ)。-用户上线时,拉取队列中的消息。3.高可用:-推送服务集群部署(如Nginx+Node.js)。-消息队列水平扩展,保证不丢失消息。4.低延迟:-推送服务使用内存缓存(Redis)存储用户连接信息。-消息推送异步化,避免阻塞主流程。解析:-WebSocket:双向通信,支持实时交互。-消息队列:Kafka支持百万级消息/秒,持久化防止丢失。-Redis缓存:减少数据库查询,提升响应速度。3.题目:设计一个高并发的秒杀系统,要求:-防止超卖。-低延迟。-高可用。答案:plaintext方案:1.库存扣减:-使用分布式锁(RedisSETNX)或数据库事务。-每个请求先锁定库存,扣减成功则扣减,失败则释放。2.请求限流:-API网关使用令牌桶算法(如GuavaRateLimiter)。-防止突发流量冲击。3.异步处理:-秒杀请求先写入消息队列,后台异步处理。-避免同步阻塞。4.高可用:-库存数据写入Redis和数据库双副本。-推送服务集群化,防单点故障。解析:-分布式锁:RedisSETNX保证原子性。-限流算法:令牌桶平滑突发流量。-双副本:Redis和数据库防止数据丢失。4.题目:设计一个在线音乐播放器的推荐系统,要求:-根据用户历史行为推荐歌曲。-支持实时更新推荐结果。答案:plaintext方案:1.数据收集:-用户播放历史、收藏、评分存入数据库(MongoDB)。-使用Elasticsearch索引歌曲特征。2.推荐算法
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年草除灵乙酯项目发展计划
- 4.1用数对表示位置
- 2025年智能检测分选装备合作协议书
- 护理SBAR交班在危重症患者管理中的应用
- 产后瑜伽与运动康复
- 尿瘘患者生活质量评估与护理干预
- 护理课件学生满意度调查
- 护理工作流程详解
- 告别陋习拒绝吸烟课件
- 肝癌患者的康复锻炼护理
- 法律诊所(第三版)课件全套 第1-10章 入门、会见-调解
- QC工作流程图模板
- 电梯维保服务投标方案
- 4继电控制线路故障检测与排除
- 国家开放大学《公共部门人力资源管理》期末机考资料
- 大学生职业规划与就业指导知到章节答案智慧树2023年广西中医药大学
- GB/T 20969.2-2021特殊环境条件高原机械第2部分:高原对工程机械的要求
- PMBOK指南第6版中文版
- 快速记忆法训练课程速读课件
- 步战略采购方法细解 CN revison 课件
- 酒店装饰装修工程施工进度表
评论
0/150
提交评论