版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年TCL科技软件工程师面试题库含答案一、编程语言基础(5题,每题10分,共50分)1.题目:请用Python编写一个函数,实现将一个字符串中的所有空格替换为"%20"。假设字符串的长度足够容纳替换后的结果。答案:pythondefreplace_spaces(s:str)->str:returns.replace("","%20")解析:使用Python内置的`replace`方法可以直接实现空格到"%20"的替换,时间复杂度为O(n),其中n为字符串长度。2.题目:请用Java编写一个方法,判断一个整数是否为回文数(正序和倒序相同)。例如,121是回文数,而123不是。答案:javapublicclassSolution{publicbooleanisPalindrome(intx){if(x<0)returnfalse;intoriginal=x;intreversed=0;while(x!=0){intdigit=x%10;reversed=reversed10+digit;x/=10;}returnoriginal==reversed;}}解析:通过反转整数的每一位数字,然后与原数字比较。注意负数和末尾为0的数字(如10)不是回文数。3.题目:请用C++实现一个函数,计算两个正整数的最大公约数(GCD),要求使用辗转相除法。答案:cppinclude<iostream>usingnamespacestd;intgcd(inta,intb){while(b!=0){inttemp=b;b=a%b;a=temp;}returna;}intmain(){cout<<gcd(48,18)<<endl;//输出:6return0;}解析:辗转相除法通过不断取余数来计算GCD,直到余数为0,此时a即为GCD。4.题目:请用JavaScript编写一个函数,找出数组中所有唯一的数字(即只出现一次的数字),其他数字出现两次。假设数组中没有重复的唯一数字。答案:javascriptfunctionsingleNumbers(nums){letxor=0;for(letnumofnums){xor^=num;}letrightmostSetBit=xor&(-xor);letnum1=0,num2=0;for(letnumofnums){if(num&rightmostSetBit)num1^=num;elsenum2^=num;}return[num1,num2];}解析:通过异或运算找出两个唯一数字的异或结果,然后根据最低位将数组分成两组,每组再分别异或得到唯一数字。5.题目:请用Go语言编写一个函数,实现快速排序算法。答案:gopackagemainimport"fmt"funcquickSort(arr[]int)[]int{iflen(arr)<=1{returnarr}pivot:=arr[len(arr)/2]left,right:=0,len(arr)-1for{forarr[left]<pivot{left++}forarr[right]>pivot{right--}ifleft>=right{break}arr[left],arr[right]=arr[right],arr[left]left++right--}quickSort(arr[:left])quickSort(arr[right+1:])returnarr}funcmain(){fmt.Println(quickSort([]int{3,6,8,10,1,2,1}))}解析:快速排序通过选择基准值(pivot)将数组分成左右两部分,递归地对左右部分进行排序。二、数据结构与算法(5题,每题10分,共50分)1.题目:请用Java实现一个LRU(最近最少使用)缓存,支持get和put操作。假设缓存容量为3。答案:javaimportjava.util.HashMap;importjava.util.Map;classLRUCache{privateMap<Integer,Node>cache;privateintcapacity;privateNodehead,tail;classNode{intkey;intvalue;Nodeprev,next;Node(intkey,intvalue){this.key=key;this.value=value;}}publicLRUCache(intcapacity){this.capacity=capacity;cache=newHashMap<>();head=newNode(0,0);tail=newNode(0,0);head.next=tail;tail.prev=head;}publicintget(intkey){if(cache.containsKey(key)){Nodenode=cache.get(key);moveToHead(node);returnnode.value;}return-1;}publicvoidput(intkey,intvalue){if(cache.containsKey(key)){Nodenode=cache.get(key);node.value=value;moveToHead(node);}else{if(cache.size()==capacity){cache.remove(tail.prev.key);removeNode(tail.prev);}NodenewNode=newNode(key,value);cache.put(key,newNode);addNode(newNode);}}privatevoidaddNode(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;}privatevoidmoveToHead(Nodenode){removeNode(node);addNode(node);}}解析:LRU缓存使用双向链表和哈希表实现,链表维护最近访问顺序,哈希表实现O(1)时间复杂度的get和put操作。2.题目:请用Python编写一个函数,找出无重复字符的最长子串的长度。例如,在"abcabcbb"中,最长无重复字符子串为"abc",长度为3。答案:pythondeflengthOfLongestSubstring(s:str)->int:char_set=set()left=0max_length=0forrightinrange(len(s)):whiles[right]inchar_set:char_set.remove(s[left])left+=1char_set.add(s[right])max_length=max(max_length,right-left+1)returnmax_length解析:使用滑动窗口技术,左指针和右指针分别表示子串的左右边界,通过哈希集合记录字符是否出现过,实现O(n)时间复杂度。3.题目:请用C++实现一个二叉树的中序遍历(非递归版)。答案:cppinclude<iostream>include<stack>usingnamespacestd;structTreeNode{intval;TreeNodeleft,right;TreeNode(intx):val(x),left(NULL),right(NULL){}};vector<int>inorderTraversal(TreeNoderoot){vector<int>result;stack<TreeNode>st;TreeNodenode=root;while(node!=NULL||!st.empty()){while(node!=NULL){st.push(node);node=node->left;}node=st.top();st.pop();result.push_back(node->val);node=node->right;}returnresult;}解析:中序遍历的顺序是左-根-右,使用栈模拟递归过程,先遍历左子树,再访问节点,最后遍历右子树。4.题目:请用JavaScript实现一个函数,判断一个二叉树是否是完全二叉树。完全二叉树的定义是:除最后一层外,每一层节点都完全填满,且最后一层节点从左到右连续排列。答案:javascriptfunctionisCompleteTree(root){if(!root)returntrue;letqueue=[root];letend=false;while(queue.length){letnode=queue.shift();if(end){if(node)returnfalse;continue;}if(node){queue.push(node.left);queue.push(node.right);}else{end=true;}}returntrue;}解析:使用层序遍历(广度优先搜索),一旦遇到空节点,后续所有节点必须为空。如果遇到非空节点后又有空节点,则不是完全二叉树。5.题目:请用Java编写一个函数,实现二分查找算法,假设数组已排序且无重复元素。答案:javapublicclassBinarySearch{publicintsearch(int[]nums,inttarget){intleft=0,right=nums.length-1;while(left<=right){intmid=left+(right-left)/2;if(nums[mid]==target)returnmid;elseif(nums[mid]<target)left=mid+1;elseright=mid-1;}return-1;}}解析:二分查找通过不断缩小查找范围来定位目标值,时间复杂度为O(logn)。三、系统设计(3题,每题15分,共45分)1.题目:请设计一个简单的微博系统,需要支持用户发布微博、关注/取消关注用户、获取关注者的微博动态。假设初始用户数为1000,微博上限为10条/用户。答案:javaimportjava.util.;classWeiboSystem{staticclassUser{Stringusername;Set<User>following;List<String>tweets;User(Stringusername){this.username=username;this.following=newHashSet<>();this.tweets=newArrayList<>();}voidfollow(Useruser){following.add(user);}voidunfollow(Useruser){following.remove(user);}voidpostTweet(Stringtweet){if(tweets.size()<10){tweets.add(tweet);}}List<String>getTimeline(){List<String>timeline=newArrayList<>();for(Useruser:following){timeline.addAll(user.tweets);}Collections.reverse(timeline);returntimeline;}}Map<String,User>users;publicWeiboSystem(){users=newHashMap<>();}publicvoidregisterUser(Stringusername){users.put(username,newUser(username));}publicvoidpostTweet(Stringusername,Stringtweet){Useruser=users.get(username);if(user!=null){user.postTweet(tweet);}}publicList<String>getTimeline(Stringusername){Useruser=users.get(username);if(user!=null){returnuser.getTimeline();}returnnewArrayList<>();}publicvoidfollow(Stringfollower,Stringfollowee){UserfollowerUser=users.get(follower);UserfolloweeUser=users.get(followee);if(followerUser!=null&&followeeUser!=null){followerUser.follow(followeeUser);}}publicvoidunfollow(Stringfollower,Stringfollowee){UserfollowerUser=users.get(follower);UserfolloweeUser=users.get(followee);if(followerUser!=null&&followeeUser!=null){followerUser.unfollow(followeeUser);}}}解析:系统包含用户(User)类,每个用户有关注列表(following)、微博列表(tweets)。通过关注/取消关注操作实现获取动态。微博上限通过限制tweets列表大小实现。2.题目:请设计一个简单的秒杀系统,假设每秒有1000个请求,需要保证高并发下的正确性和性能。答案:javaimportjava.util.concurrent.;classSeckillSystem{privatefinalinttotalItems;privatefinalSemaphoresemaphore;privatefinalQueue<String>queue;publicSeckillSystem(inttotalItems){this.totalItems=totalItems;this.semaphore=newSemaphore(totalItems);this.queue=newConcurrentLinkedQueue<>();}publicbooleanseckill(StringuserId){try{semaphore.acquire();queue.offer(userId);//模拟秒杀处理时间Thread.sleep(10);returntrue;}catch(InterruptedExceptione){returnfalse;}finally{semaphore.release();}}publicvoidprocess(){while(!queue.isEmpty()){StringuserId=queue.poll();//处理用户秒杀成功逻辑System.out.println(userId+"秒杀成功");}}}解析:使用信号量(Semaphore)控制并发访问数量,队列(queue)记录秒杀用户,模拟处理时间。通过acquire和release保证不超过总数限制。3.题目:请设计一个简单的短链接系统,需要支持将长链接转换为短链接,并能够通过短链接访问原始长链接。答案:javaimportjava.util.;classShortLinkSystem{privatestaticfinalStringBASE62="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";privatestaticfinalintSHORT_LEN=6;privateMap<String,String>map;privateMap<String,String>reverseMap;publicShortLinkSystem(){map=newHashMap<>();reverseMap=newHashMap<>();}publicStringgenerateShortLink(StringlongUrl){StringshortKey=encode((long)System.nanoTime());while(map.containsKey(shortKey)){shortKey=encode((long)System.nanoTime());}map.put(shortKey,longUrl);reverseMap.put(longUrl,shortKey);returnshortKey;}publicStringgetLongLink(StringshortUrl){returnmap.getOrDefault(shortUrl,"Invalidshortlink");}privateStringencode(longnum){StringBuildersb=newStringBuilder();while(num>0){sb.append(BASE62.charAt((int)(num%62)));num/=62;}while(sb.length()<SHORT_LEN){sb.append("0");}returnsb.reverse().toString();}}解析:使用自增的随机数作为唯一标识,通过Base62编码转换为短链接,并记录映射关系。编码过程中填充前导0确保长度固定。四、数据库与分布式(3题,每题15分,共45分)1.题目:请解释数据库事务的ACID特性,并说明如何在分布式环境下保证事务的一致性。答案:ACID特性解释:-原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会处于中间状态。-一致性(Consistency):事务必须保证数据库从一个一致性状态转移到另一个一致性状态。-隔离性(Isolation):并发执行的事务之间互不干扰,如同串行执行。-持久性(Durability):一旦事务提交,其对数据库的修改会永久保存,即使系统崩溃也不会丢失。分布式事务保证一致性方法:-2PC(两阶段提交):1.准备阶段:主节点询问所有从节点是否可以提交,若都同意则进入第二阶段。2.提交阶段:若所有节点同意,则全部提交;否则全部回滚。-TCC(Try-Confirm-Cancel):1.Try阶段:尝试预留资源。2.Confirm阶段:确认操作并提交资源。3.Cancel阶段:回滚操作并释放资源。解析:分布式事务通过协议(如2PC或TCC)确保多个节点间的一致性,但2PC存在单点阻塞问题,TCC更灵活但实现复杂。2.题目:请说明缓存穿透、缓存击穿和缓存雪崩的区别,并给出解决方案。答案:区别:-缓存穿透:查询不存在的数据,导致请求直接打到数据库。-缓存击穿:热点数据在缓存过期后,大量并发请求直接打到数据库。-缓存雪崩:大量缓存同时过期,导致请求全部打到数据库。解决方案:-缓存穿透:-存储空值(如"null"),避免重复查询。-使用布隆过滤器,提前判断数据是否存在。-缓存击穿:-使用互斥锁或分布式锁,保证同一时间只有一个请求查询数据库。-设置热点数据永不过期或更长的过期时间。-缓存雪崩:-设置随机过期时间,避免同时过期。-使用持久化存储(如RedisRDB/AOF)恢复缓存。-使用集群和限流保护后端服务。解析:缓存问题通过空值存储、锁机制、随机过期和持久化解决,核心是避免数据库过载。3.题目:请解释CAP理论,并说明在分布式环境下如何选择一致性、可用性和分区容错性。答案:CAP理论:-一致性(Consistency):所有节点在同一时间具有相同的数据。-可用性(Availability):系统始终响应所有请求。-分区容错性(PartitionTolerance):系统在网络分区下仍能正常工作。分布式环境选择策略:-分布式数据库:-强一致性:Redis单机、分布式事务(如2PC)。-可用性+分区容错性:消息队列(如Kafka)、最终一致性。-负载均衡:-可用性:负载均衡器自动剔除故障节点。-分区容错性:多副本部署,跨机房部署。解析:CAP理论要求最多只能同时满足两项,实际选择需根据业务需求权衡(如金融选一致性,电商选可用性)。五、综合编程(2题,每题20分,共40分)1.题目:请用Python编写一个函数,实现一个简单的LRU缓存,支持get和put操作,并打印每次操作后的缓存状态。答案:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key:int,value:int)->None:ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:oldest_key=self.order.pop(0)delself.cache[oldest_key]self.cache[key]=valueself.order.append(key)print(f"Put:{key}->{value},Cache:{self.cache}")示例cache=LRUCache(3)cache.put(1,1)cache.put(2,2)cache.get(1)cache.put(3,3)cache.get(2)cache.put(4,4)#删除key=1解析:使用哈希表记录键值对,双向链表记录访问顺序,get时移动节点,put时按需删除最久未使用节点。2.题目:请用Java编写一个函数,实现一个简单的文件下载器,支持断
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园欺凌防治工作领导责任制度
- 专项治理经验交流发言材料
- 骨科精准医疗与术后康复指导工作心得(3篇)
- 2026年贵州财经职业学院单招职业适应性测试题库附答案详解
- 2026年陇南师范高等专科学校单招职业技能测试题库含答案详解
- 2026年重庆市巴中地区单招职业适应性测试题库附答案详解
- 2026年云南理工职业学院单招职业倾向性考试题库及参考答案详解
- 2026年漳州科技学院单招职业适应性测试题库及参考答案详解一套
- 2026年重庆五一职业技术学院单招综合素质考试题库带答案详解
- 2026年湖南石油化工职业技术学院单招职业适应性考试题库附答案详解
- 四川省泸州市2024-2025学年高二上学期期末统一考试地理试卷(含答案)
- 上海财经大学2026年辅导员及其他非教学科研岗位人员招聘备考题库参考答案详解
- 2025-2026小学部编版语文四年级上册教学工作总结
- 纳税筹划课件教学
- 2025成都农商银行产业金融岗社会招聘考试笔试参考题库及答案解析
- DB32∕T 2914-2025 危险场所电气防爆安全检查规范
- 2026成方金融科技有限公司校园招聘34人考试笔试参考题库及答案解析
- 基于BIM技术的大学宿舍施工组织设计及智慧工地管理
- 乡镇综治维稳课件
- 中国融通集团2025届秋季校园招聘笔试历年参考题库附带答案详解
- 企业网络安全体系建设方案
评论
0/150
提交评论