阿里巴面试题及解析题目详解_第1页
阿里巴面试题及解析题目详解_第2页
阿里巴面试题及解析题目详解_第3页
阿里巴面试题及解析题目详解_第4页
阿里巴面试题及解析题目详解_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

2026年阿里巴面试题及解析:题目详解一、编程题(共3题,每题20分,总分60分)1.题目:请实现一个函数,输入一个字符串,返回该字符串中所有唯一字符的列表(不区分大小写)。例如,输入`"HelloWorld"`,输出`['H','e','W','r','d']`。解析:-思路:1.将输入字符串统一转换为小写或大写,避免大小写重复。2.使用哈希表统计每个字符的出现次数。3.遍历哈希表,将出现次数为1的字符加入结果列表。-注意:-忽略空格和特殊字符。-结果顺序与输入顺序一致。答案:pythondefunique_chars(s:str)->list:s=s.lower()count={}forcharins:ifchar.isalpha():count[char]=count.get(char,0)+1return[charforcharinsifcount[char]==1]2.题目:实现一个无重复元素的二叉搜索树(BST),支持插入和查找操作。要求:-插入时保持BST性质。-查找时返回目标节点的值(若不存在返回-1)。解析:-思路:1.BST特性:左子树所有节点<根节点<右子树所有节点。2.插入时,从根节点开始比较,递归左或右子树。3.查找时,类似插入过程,若找到则返回值,否则返回-1。-注意:-节点值唯一,避免重复插入。答案:pythonclassTreeNode:def__init__(self,val=0):self.val=valself.left=Noneself.right=NoneclassBST:def__init__(self):self.root=Nonedefinsert(self,val:int)->None:ifnotself.root:self.root=TreeNode(val)returnnode=self.rootwhileTrue:ifval<node.val:ifnode.left:node=node.leftelse:node.left=TreeNode(val)breakelifval>node.val:ifnode.right:node=node.rightelse:node.right=TreeNode(val)breakelse:break#重复值不插入defsearch(self,val:int)->int:node=self.rootwhilenode:ifval<node.val:node=node.leftelifval>node.val:node=node.rightelse:returnnode.valreturn-13.题目:给定一个非降序数组`arr`和目标值`target`,返回第一个大于等于`target`的元素索引(若不存在返回`-1`)。解析:-思路:1.使用二分查找优化效率。2.区别于传统二分查找,当找到`target`时继续向右查找第一个大于`target`的值。-注意:-边界处理:数组为空或所有值小于`target`时返回-1。答案:pythondeffirst_ge(arr:list,target:int)->int:left,right=0,len(arr)-1res=-1whileleft<=right:mid=(left+right)//2ifarr[mid]>=target:res=midright=mid-1else:left=mid+1returnres二、系统设计题(共2题,每题25分,总分50分)1.题目:设计一个高并发的短链接生成与解析系统。要求:-支持实时生成短链接(如`/abc123`)。-解析短链接时,返回对应的原始长链接。-系统需支持百万级日活用户。解析:-思路:1.短链接生成:-使用分布式ID生成器(如Twitter算法或Snowflake)生成唯一短码。-缓存+数据库存储映射关系(Redis+MySQL)。2.短链接解析:-前端路由拦截短链接,通过短码查询数据库/缓存。-返回原始长链接,并记录访问日志。3.高并发优化:-使用CDN加速短链接分发。-数据库读写分离+分表分库。注意:-短码冲突处理:概率极低,可用重试机制。-安全性:防止恶意解析(如添加统计参数)。2.题目:设计一个实时推荐系统,用于电商平台商品推荐。要求:-输入用户行为日志(浏览、加购、购买),输出个性化推荐列表。-支持离线计算+实时更新。-推荐效果需可监控。解析:-思路:1.离线计算:-使用Spark/Flink处理用户行为数据,计算协同过滤、用户画像。-存储模型参数到HBase/HDFS。2.实时更新:-实时日志接入Kafka,通过流处理更新推荐模型。-推荐服务调用模型API,返回结果。3.效果监控:-统计CTR、CVR等指标,使用Prometheus+Grafana可视化。注意:-冷启动问题:新用户推荐基于热门商品。-实时性权衡:延迟控制在秒级。三、算法题(共3题,每题15分,总分45分)1.题目:给定一个数组,返回其中第三大的数。若不存在,返回最大数。例如,输入`[3,2,1,5,6,4]`,输出`5`。解析:-思路:1.遍历数组,维护三个变量记录前三大的数。2.避免重复统计,跳过相同的数。-注意:-边界处理:数组长度<3时返回最大数。答案:pythondefthird_max(nums:list)->int:first,second,third=float('-inf'),float('-inf'),float('-inf')fornuminnums:ifnum==firstornum==secondornum==third:continueifnum>first:third=secondsecond=firstfirst=numelifnum>second:third=secondsecond=numelifnum>third:third=numreturnfirstifthird!=float('-inf')elsesecond2.题目:实现一个LRU缓存,支持`get`和`put`操作。要求:-`get(key)`:返回键对应的值,若不存在返回-1。-`put(key,value)`:插入或更新键值对,当缓存满时移除最久未使用项。解析:-思路:1.使用哈希表记录键值对+访问顺序(双向链表)。2.`get`时移动节点到链表头部。3.`put`时若存在则更新,否则插入头部并删除尾部。答案:pythonclassDLinkedNode: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,self.tail=DLinkedNode(),DLinkedNode()self.head.next=self.tailself.tail.prev=self.headdef_add_node(self,node:DLinkedNode):node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_node(self,node:DLinkedNode):prev_node=node.prevnext_node=node.nextprev_node.next=next_nodenext_node.prev=prev_nodedef_move_to_head(self,node:DLinkedNode):self._remove_node(node)self._add_node(node)def_pop_tail(self)->DLinkedNode: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,None)ifnode:node.value=valueself._move_to_head(node)else:newNode=DLinkedNode(key,value)self.cache[key]=newNodeself._add_node(newNode)iflen(self.cache)>self.capacity:tail=self._pop_tail()delself.cache[tail.key]3.题目:给定一个二叉树,判断其是否为完全二叉树。解析:-思路:1.层序遍历(BFS):使用队列。2.遇到空节点后,所有后续节点必须为空。-注意:-左右子树对称不等于完全二叉树。答案:pythonfromcollectionsimportdequeclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefis_complete_tree(root:TreeNode)->bool:ifnotroot:returnTruequeue=deque([root])end=Falsewhilequeue:node=queue.popleft()ifnotnode:end=Trueelse:ifend:returnFalsequeue.append(node.left)queue.append(node.right)returnTrue四、综合题(共1题,25分)1.题目:阿里巴巴云某业务需要处理海量日志数据(TB级别),要求设计一个数据采集与处理系统。要求:-支持分布式采集、存储、处理。-处理流程需支持实时与离线结合。-

温馨提示

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

评论

0/150

提交评论