2026年百度技术岗面试题集_第1页
2026年百度技术岗面试题集_第2页
2026年百度技术岗面试题集_第3页
2026年百度技术岗面试题集_第4页
2026年百度技术岗面试题集_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

2026年百度技术岗面试题集一、编程基础与算法(5题,每题10分,共50分)1.题目:给定一个非空整数数组,返回其中出现频率最高的元素。如果有多个元素出现频率相同,返回任意一个。例如,输入`[1,1,2,2,3]`,输出`1`或`2`。要求:时间复杂度O(n),空间复杂度O(n)。2.题目:实现一个LRU(最近最少使用)缓存,支持`get`和`put`操作。`get(key)`返回`key`对应的值,如果不存在返回`-1`;`put(key,value)`将键值对插入缓存。当缓存容量已满时,需要删除最近最少使用的元素。要求:使用哈希表和双向链表实现,时间复杂度O(1)。3.题目:给定一个字符串`s`和一个字符规律`p`,其中`p`包含字母和数字,字母表示字符本身,数字表示重复次数。例如,`s="abc"`,`p="a2c3"`,返回`true`(即`"aaabcc"`)。要求:支持``通配符,``可以匹配任意字符。4.题目:实现快速排序算法,要求原地排序(不使用额外数组),并分析其平均时间复杂度和最坏时间复杂度。5.题目:给定一个正整数`n`,判断其是否为完全平方数。例如,`n=16`返回`true`,`n=14`返回`false`。要求:不使用`Math.sqrt`,时间复杂度O(logn)。二、系统设计与架构(3题,每题15分,共45分)1.题目:设计一个短链接服务,要求:-输入任意长度的URL,输出固定长度的短链接(如`/abc123`)。-支持长链接的反向解析(输入短链接返回原链接)。-高并发场景下性能稳定,支持分布式部署。要求:说明核心组件设计、数据结构、分布式方案及容灾措施。2.题目:设计一个微博Feed流系统,要求:-用户可以发布不超过1000字的动态,包含文字、图片、视频等多媒体内容。-Feed流支持按时间倒序展示,并分页加载(如每页20条)。-支持关注/取消关注功能,关注者实时收到新动态。要求:说明数据存储方案(SQL/NoSQL)、缓存策略、消息队列应用场景。3.题目:设计一个分布式限流系统,要求:-支持按IP或用户ID进行限流(如每秒1000次)。-支持预热期(如刚上线时逐步放开流量)。-限流策略需高可用,支持热更新(如动态调整限流阈值)。要求:说明限流算法(如令牌桶、漏桶)、存储方案(Redis/本地缓存)及分布式实现。三、数据库与存储(2题,每题20分,共40分)1.题目:对比MySQL和Redis在缓存场景下的优劣,并说明如何结合两者实现高可用缓存。要求:分析数据一致性、性能、成本等维度,给出具体架构方案。2.题目:设计一个订单表(`orders`),包含字段:`id`(自增主键)、`user_id`(用户ID)、`total_amount`(订单金额)、`status`(状态,如`pending`、`paid`、`delivered`)、`created_at`(创建时间)。要求:-支持按`user_id`和`status`快速查询未支付的订单。-支持按`created_at`分页查询最近7天的订单。要求:说明索引设计、SQL优化方案及分库分表思路。四、分布式与中间件(2题,每题20分,共40分)1.题目:解释CAP理论,并说明在百度等大型互联网场景下,如何权衡一致性、可用性和分区容错性。要求:结合具体业务场景(如搜索、推荐)给出设计决策。2.题目:设计一个分布式事务解决方案,要求:-支持至少两种异构存储(如MySQL和MongoDB)。-保证事务的原子性和一致性。-考虑性能和延迟问题。要求:说明事务协议(如2PC)、补偿机制及选型依据。答案与解析一、编程基础与算法1.答案:pythonfromcollectionsimportCounterdeftop_frequent(nums):counter=Counter(nums)returncounter.most_common(1)[0][0]解析:使用`Counter`统计频率,`most_common(1)`获取最高频元素。时间复杂度O(n),空间复杂度O(n)。2.答案:pythonclassLRUCache:def__init__(self,capacity):self.capacity=capacityself.cache={}self.head,self.tail=Node(0,0),Node(0,0)self.head.next,self.tail.prev=self.tail,self.headclassNode:def__init__(self,key,value):self.key=keyself.value=valueself.prev,self.next=None,Nonedefget(self,key):ifkeynotinself.cache:return-1node=self.cache[key]self._move_to_head(node)returnnode.valuedefput(self,key,value):ifkeyinself.cache:node=self.cache[key]node.value=valueself._move_to_head(node)else:iflen(self.cache)==self.capacity:self._remove_tail()new_node=self.Node(key,value)self.cache[key]=new_nodeself._add_to_head(new_node)def_move_to_head(self,node):self._remove_node(node)self._add_to_head(node)def_add_to_head(self,node):node.prev,node.next=self.head,self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_node(self,node):prev_node,next_node=node.prev,node.nextprev_node.next,next_node.prev=next_node,prev_nodedef_remove_tail(self):tail=self.tail.prevself._remove_node(tail)delself.cache[tail.key]解析:使用双向链表维护访问顺序,哈希表记录节点。`get`时移动到头部,`put`时先删除旧节点再添加新节点。时间复杂度O(1)。3.答案:pythondefisMatch(s,p):dp=[[False](len(p)+1)for_inrange(len(s)+1)]dp[0][0]=Trueforjinrange(2,len(p)+1):ifp[j-1]=='':dp[0][j]=dp[0][j-2]foriinrange(1,len(s)+1):forjinrange(1,len(p)+1):ifp[j-1]==s[i-1]orp[j-1]=='?':dp[i][j]=dp[i-1][j-1]elifp[j-1]=='':dp[i][j]=dp[i][j-2]ordp[i-1][j]returndp[-1][-1]解析:动态规划解法,`dp[i][j]`表示`s[:i]`与`p[:j]`是否匹配。``可匹配零个或多个前一个字符。时间复杂度O(mn),空间复杂度O(mn)。4.答案:pythondefquick_sort(arr,low,high):iflow<high:pivot=partition(arr,low,high)quick_sort(arr,low,pivot-1)quick_sort(arr,pivot+1,high)defpartition(arr,low,high):pivot=arr[high]i=low-1forjinrange(low,high):ifarr[j]<=pivot:i+=1arr[i],arr[j]=arr[j],arr[i]arr[i+1],arr[high]=arr[high],arr[i+1]returni+1解析:快速排序核心是分治思想,通过`partition`函数将数组划分为两部分。平均时间复杂度O(nlogn),最坏O(n²)(当pivot最小或最大时)。5.答案:pythondefisPerfectSquare(n):left,right=1,nwhileleft<=right:mid=(left+right)//2ifmidmid==n:returnTrueelifmidmid<n:left=mid+1else:right=mid-1returnFalse解析:二分查找法,逐步缩小平方根范围。时间复杂度O(logn),空间复杂度O(1)。二、系统设计与架构1.答案:核心组件:-短链接生成器:使用哈希函数(如MD5或Base62)将长链接映射为短ID。-分布式存储:将长链接和短ID的映射关系存储在Redis(内存缓存)或分布式数据库中。-负载均衡器:多台短链接服务节点通过负载均衡分配请求。-反向解析服务:定时同步短ID和长链接,支持快速查询。分布式方案:-使用Snowflake算法生成全局唯一短ID。-Redis设置过期时间,自动清理无用的短链接。-异步写入分布式数据库(如HBase),支持高并发查询。容灾措施:-数据库异地多活,主从复制。-短链接生成器使用分布式锁(如ZooKeeper)。2.答案:数据存储:-关系型数据库(MySQL):存储用户信息、动态基础字段(`id`,`user_id`,`content`,`created_at`)。-NoSQL(Redis):缓存热门Feed流,减少数据库压力。-消息队列(Kafka):异步更新关注者Feed。缓存策略:-Feed流分页加载时,先查Redis,缓存未命中再查MySQL。-动态发布时,先写入Redis缓存,再异步更新数据库。消息队列应用:-用户关注/取关时,推送消息到Kafka。-关注者服务订阅Kafka,实时更新Feed流。3.答案:限流算法:-令牌桶:每秒生成固定数量的令牌,请求需持有令牌才能通过。-漏桶:请求以固定速率流出,超限请求排队等待。存储方案:-Redis:使用`EXPIRE`设置令牌桶容量和速率。-本地内存:低并发场景可使用原子操作(如CAS)。热更新方案:-使用配置中心(如Nacos)动态下发限流阈值。-服务端监听配置变更,实时调整限流策略。三、数据库与存储1.答案:MySQLvsRedis:-MySQL:事务支持、复杂查询、ACID兼容,适合结构化数据。-Redis:内存存储、高速读写,适合缓存热点数据。缓存架构:-多级缓存:Redis+Memcached(缓存头信息)。-数据同步:MySQL主从复制+Redis发布订阅,保证一致性。2.答案:索引设计:sqlCREATEINDEXidx_user_statusONorders(user_id,status);CREATEINDEXidx_created_atONorders(created_at);SQL优化:sql--查询未支付订单SELECTFROMordersWHEREuser_id=?ANDstatus='pending';--分页查询SELECTFROMordersWHEREcreated_at>=?ANDcreated_at<?ORDERBYcreated_atDESCLIMIT20;分库分表:-按`user_id`分表,支持水平扩展。-使用ShardingSphere或MyCAT实现路由。四、分布式与中间件1.答案:CAP理论:-百度场景

温馨提示

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

评论

0/150

提交评论