版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年字节跳动工程师面试题及答案一、编程能力测试(5题,每题20分,共100分)1.题目:请实现一个函数,输入一个非负整数`n`,返回其二进制表示中`1`的个数。例如,输入`n=11`(二进制为`1011`),返回`3`。答案:pythondefcount_bits(n):count=0whilen:count+=n&1n>>=1returncount解析:使用位运算技巧,每次将`n`右移一位,并统计最低位的`1`的个数。`n&1`判断当前最低位是否为`1`,`n>>=1`将`n`右移一位。时间复杂度为`O(logn)`。2.题目:给定一个字符串`s`,请找到其中不重复的最长子串的长度。例如,输入`s="abcabcbb"`,返回`3`(最长子串为`abc`)。答案:pythondeflength_of_longest_substring(s):char_set=set()left=0max_len=0forrightinrange(len(s)):whiles[right]inchar_set:char_set.remove(s[left])left+=1char_set.add(s[right])max_len=max(max_len,right-left+1)returnmax_len解析:使用滑动窗口技术,`left`和`right`分别表示窗口的左右边界。遍历字符串时,如果遇到重复字符,则移动`left`并删除窗口中的字符,直到不重复为止。时间复杂度为`O(n)`。3.题目:请实现一个`LRU缓存`(LeastRecentlyUsedCache),支持`get`和`put`操作。例如:pythonclassLRUCache:def__init__(self,capacity:int):初始化双向链表和哈希表passdefget(self,key:int)->int:返回key对应的值,如果不存在返回-1passdefput(self,key:int,value:int)->None:插入或更新key值,如果超出容量则删除最久未使用的pass答案:pythonclassNode:def__init__(self,key=0,value=0):self.key=keyself.value=valueself.prev=Noneself.next=NoneclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head=Node()self.tail=Node()self.head.next=self.tailself.tail.prev=self.headdef_add_node(self,node):node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_node(self,node):prev_node=node.prevnext_node=node.nextprev_node.next=next_nodenext_node.prev=prev_nodedef_move_to_head(self,node):self._remove_node(node)self._add_node(node)def_pop_tail(self):res=self.tail.prevself._remove_node(res)returnresdefget(self,key:int)->int:node=self.cache.get(key,None)ifnotnode:return-1self._move_to_head(node)returnnode.valuedefput(self,key:int,value:int)->None:node=self.cache.get(key)ifnode:node.value=valueself._move_to_head(node)else:newNode=Node(key,value)self.cache[key]=newNodeself._add_node(newNode)iflen(self.cache)>self.capacity:tail=self._pop_tail()delself.cache[tail.key]解析:使用双向链表和哈希表实现LRU缓存。双向链表维护访问顺序,哈希表实现`O(1)`的查询。当超出容量时,删除链表尾部节点(最久未使用)。4.题目:给定一个`mxn`的矩阵,请将其旋转90度(顺时针)。例如:输入:[[1,2,3],[4,5,6],[7,8,9]]输出:[[7,4,1],[8,5,2],[9,6,3]]答案:pythondefrotate(matrix):n=len(matrix)foriinrange(n//2):forjinrange(i,n-i-1):temp=matrix[i][j]matrix[i][j]=matrix[n-j-1][i]matrix[n-j-1][i]=matrix[n-i-1][n-j-1]matrix[n-i-1][n-j-1]=matrix[j][n-i-1]matrix[j][n-i-1]=temp解析:先按层旋转(从外到内),每层使用4个位置的交换。时间复杂度为`O(n^2)`。5.题目:请实现一个函数,判断一个字符串是否是回文串(忽略大小写和非字母字符)。例如,输入`"Aman,aplan,acanal:Panama"`,返回`True`。答案:pythondefis_palindrome(s:str)->bool:left,right=0,len(s)-1whileleft<right:whileleft<rightandnots[left].isalnum():left+=1whileleft<rightandnots[right].isalnum():right-=1ifs[left].lower()!=s[right].lower():returnFalseleft,right=left+1,right-1returnTrue解析:双指针法,跳过非字母数字字符,并比较对称位置的字符是否相同。忽略大小写。二、系统设计测试(3题,每题30分,共90分)1.题目:设计一个高并发的短链接系统。例如,输入长链接`/long-url`,返回一个短链接`/abc123`,并支持访问统计。答案:1.短链接生成:使用哈希算法(如MD5或Base62编码)将长链接映射为短字符串。2.存储:使用Redis存储短链接与长链接的映射,并设置过期时间。3.高并发处理:使用消息队列(如Kafka)异步处理请求,避免直接阻塞。4.访问统计:每次访问时,在Redis中增加计数器。解析:短链接系统需要高效映射、存储和统计。Redis支持高并发读写,消息队列保证系统稳定性。2.题目:设计一个实时消息推送系统(如抖音动态刷新)。要求支持百万级用户,消息延迟控制在100ms以内。答案:1.消息分发:使用WebSocket长连接,服务器主动推送消息。2.消息队列:使用Kafka或RabbitMQ缓存消息,防止单点故障。3.负载均衡:多个服务器节点通过Nginx分发请求。4.缓存优化:对热点消息使用Redis缓存,减少数据库压力。解析:实时消息系统需要低延迟和高吞吐量。WebSocket保证实时性,消息队列解耦系统。3.题目:设计一个高并发的秒杀系统。例如,1000个商品,每秒有10000人抢购,如何防止超卖?答案:1.分布式锁:使用Redis或ZooKeeper实现分布式锁,控制并发访问。2.库存预热:每秒提前扣减1个库存,预留秒杀名额。3.秒杀排队:使用消息队列控制用户请求,按顺序处理。4.超卖补偿:若库存不足,通过短信或邮件补偿用户。解析:秒杀系统需要防止超卖和超并发,分布式锁和消息队列是关键。三、数据库与分布式系统(2题,每题35分,共70分)1.题目:数据库事务的ACID特性是什么?如何实现持久化?答案:-ACID:-原子性(Atomicity):事务不可分割,要么全部成功,要么全部失败。-一致性(Consistency):事务执行后数据库状态一致。-隔离性(Isolation):并发事务互不干扰。-持久性(Durability):事务提交后永久保存。-持久化实现:-写前日志(WAL):MySQL的InnoDB使用日志记录,确保持久性。-内存缓存+磁盘同步:Redis使用RDB和AOF实现持久化。解析:ACID是数据库事务的核心特性,持久化通过日志或缓存实现。2.题目:设计一个分布式数据库集群,如何解决数据一致性问题?答案:1.主从复制:一个主节点处理写请求,多个从节点异步复制数据。2.分布式事务:使用2PC或3PC协议保证跨节点事务一致性。3.最终一致性:使用Redis或消息队列实现异步更新。4.分片路由:根据ID哈希路由到不同节点,避免热点问题。解析:分布式系统通过复制、事务或最终一致性解决数据一致性问题。四、算法与数据结构(2题,每题35分,共70分)1.题目:给定一个数组,找出其中第K大的元素。例如,`[3,2,1,5,6,4]`,`k=2`,返回`5`。答案:pythondeffind_kth_largest(nums,k):defquickselect(left,right,k_smallest):pivot_index=partition(nums,left,right)ifk_smallest==pivot_index:returnnums[k_smallest]elifk_smallest<pivot_index:returnquickselect(left,pivot_index-1,k_smallest)else:returnquickselect(pivot_index+1,right,k_smallest)defpartition(nums,left,right):pivot=nums[right]i=leftforjinrange(left,right):ifnums[j]<pivot:nums[i],nums[j]=nums[j],nums[i]i+=1nums[i],nums[right]=nums[right],nums[i]returnireturnquickselect(0,len(nums)-1,k-1)解析:快速选择算法,时间复杂度`O(n)`。2.题目:给定一个无向图,判断是否存在环。答案:pythondefhas_cycle(n,edges):parent=list
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025国机集团北京共享服务中心有限公司招聘考试重点题库及答案解析
- 2025浙江产权交易所有限公司第七期招聘1人考试核心试题及答案解析
- 2025年迪庆州香格里拉客运分公司招聘安检员(3人)考试重点试题及答案解析
- 2025浙江长兴空域产业发展有限公司招聘职业经理人1人备考核心题库及答案解析
- 2025青海西宁湟源县青少年活动中心教师招聘1人考试核心试题及答案解析
- 2025重庆沙坪坝区树人沙磁小学校教师招考试重点试题及答案解析
- 2025恒丰银行南京分行社会招聘29人考试重点试题及答案解析
- 2026河北沧州市教育局市直4所学校高层次人才选聘21人备考核心试题附答案解析
- 2025年东航实业集团陕西分公司招聘(8人)参考考试题库及答案解析
- 2025年舟山市总工会下属事业单位公开招聘编外用工人员1人考试核心试题及答案解析
- 2025年滁州市公安机关公开招聘警务辅助人员50人备考题库及一套参考答案详解
- 2025年云南省人民检察院聘用制书记员招聘(22人)备考笔试题库及答案解析
- 从废墟到宝库:热解技术的飞跃发展
- 工商银行贷款合同(标准版)
- 激光切割机日常保养表
- 广播电视安全播出工作总结
- 荧光腹腔镜知识培训总结
- 知道网课《微积分(I)(南昌大学)》课后章节测试答案
- 畅游黑龙江课件
- 给水工程综合管廊施工方案
- 陈列考核管理办法
评论
0/150
提交评论