华为面试经验技术岗位面试题及答案_第1页
华为面试经验技术岗位面试题及答案_第2页
华为面试经验技术岗位面试题及答案_第3页
华为面试经验技术岗位面试题及答案_第4页
华为面试经验技术岗位面试题及答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

2026年华为面试经验:技术岗位面试题及答案一、编程基础(共3题,每题10分)1.题目:请编写一段Python代码,实现一个函数`merge_sorted_lists`,该函数接收两个已排序的链表(链表节点定义如下),并返回合并后的新链表,要求新链表仍保持排序。pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=next答案:pythondefmerge_sorted_lists(l1,l2):dummy=ListNode(0)current=dummywhilel1andl2:ifl1.val<l2.val:current.next=l1l1=l1.nextelse:current.next=l2l2=l2.nextcurrent=current.nextifl1:current.next=l1elifl2:current.next=l2returndummy.next解析:使用虚拟头节点`dummy`简化边界处理,通过`while`循环遍历两个链表,比较当前节点的值并按顺序连接。当其中一个链表遍历完毕,直接将剩余部分连接到新链表末尾。时间复杂度O(N),空间复杂度O(1)。2.题目:请用C++实现快速排序算法(原地排序),并说明选择枢轴元素的方法。答案:cppinclude<vector>usingnamespacestd;voidquickSort(vector<int>&nums,intleft,intright){if(left>=right)return;//选择中位数作为枢轴intpivot=nums[(left+right)/2];inti=left,j=right;while(i<=j){while(nums[i]<pivot)i++;while(nums[j]>pivot)j--;if(i<=j){swap(nums[i],nums[j]);i++,j--;}}quickSort(nums,left,j);quickSort(nums,i,right);}解析:快速排序采用分治思想,通过选择枢轴元素将数组分为两部分,使得左部分均小于枢轴,右部分均大于枢轴。常用枢轴选择方法包括:首元素、尾元素、中位数或随机元素。中位数法可减少极端输入下的不平衡概率。3.题目:请解释什么是“线程池”,并说明其优缺点。答案:线程池是管理线程的容器,可复用已有线程执行任务,避免频繁创建销毁线程的开销。优点包括:1.减少系统开销:避免频繁切换线程状态;2.提高响应速度:任务提交后立即返回,无需等待线程创建;3.控制资源:限制并发线程数量,防止系统过载。缺点包括:1.线程数固定:无法动态应对高负载;2.难以监控:线程池内部状态不易追踪。二、数据结构与算法(共4题,每题12分)1.题目:请设计一个LRU(LeastRecentlyUsed)缓存结构,支持`get`和`put`操作,要求时间复杂度均为O(1)。答案:使用哈希表+双向链表实现:-哈希表记录`key→node`映射;-双向链表维护访问顺序,头为最近访问,尾为最久未使用。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.headdefget(self,key:int)->int:ifkeynotinself.cache:return-1node=self.cache[key]self._move_to_head(node)returnnode.valuedefput(self,key:int,value:int)->None:ifkeyinself.cache:node=self.cache[key]node.value=valueself._move_to_head(node)else:node=DLinkedNode(key,value)self.cache[key]=nodeself._add_node(node)iflen(self.cache)>self.capacity:lru=self.tail.prevself._remove_node(lru)delself.cache[lru.key]def_move_to_head(self,node):self._remove_node(node)self._add_node(node)def_add_node(self,node):node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_node(self,node):node.prev.next=node.nextnode.next.prev=node.prev解析:LRU通过双向链表维护访问顺序,哈希表实现O(1)查找。`get`操作将节点移至头部,`put`操作时若超出容量则删除尾部节点。2.题目:请解释二叉搜索树的性质,并给出中序遍历的递归与非递归实现。答案:二叉搜索树(BST)性质:1.左子树所有节点<根节点<右子树所有节点;2.左右子树均为BST;3.无重复元素。递归中序遍历:pythondefinorder_recursive(root):ifnotroot:return[]returninorder_recursive(root.left)+[root.val]+inorder_recursive(root.right)非递归中序遍历(栈):pythondefinorder_iterative(root):stack,node=[],rootres=[]whilestackornode:whilenode:stack.append(node)node=node.leftnode=stack.pop()res.append(node.val)node=node.rightreturnres解析:中序遍历输出升序序列。递归简单但栈实现更通用,适用于树深度过大时。3.题目:请设计一个算法,判断一个字符串是否是另一个字符串的子序列,例如"abc"是"ahbgdc"的子序列。答案:双指针法:pythondefis_subsequence(s:str,t:str)->bool:m,n=len(s),len(t)i,j=0,0whilei<mandj<n:ifs[i]==t[j]:i+=1j+=1returni==m解析:`s`和`t`分别用`i`和`j`遍历,当`s[i]==t[j]`时`i`前进,`j`始终前进。若`i`遍历完`s`,则`s`是`t`的子序列。4.题目:给定一个无重复元素的数组,返回所有可能的组合(子集)。答案:回溯法:pythondefsubsets(nums):res=[]subset=[]defbacktrack(start):res.append(subset.copy())foriinrange(start,len(nums)):subset.append(nums[i])backtrack(i+1)subset.pop()backtrack(0)returnres解析:通过递归选择或不选择当前元素,生成所有组合。时间复杂度O(2^N),空间复杂度O(N)。三、系统设计(共2题,每题15分)1.题目:设计一个高并发的短链接系统,要求支持高可用、高并发访问。答案:1.短链接生成:-使用哈希算法(如MD5+Base62)将长URL映射为短码;-存储映射关系至分布式缓存(RedisCluster)。2.高并发处理:-前端使用负载均衡(Nginx+LVS)分发请求;-后端通过无状态服务集群(K8s+GorillaDNS)动态扩缩容。3.高可用保障:-数据分片存储,RedisCluster实现多副本冗余;-配置主从复制或Raft共识协议保证数据一致性。4.性能优化:-CDN缓存短链接DNS解析结果;-热点短链接使用本地缓存(Memcached)。2.题目:设计一个微博系统的消息推送模块,要求支持实时性、可扩展性。答案:1.消息存储:-使用Kafka集群异步收集用户关注关系和动态;-消息消费端(如Flink)按用户ID分topic分发。2.实时推送:-WebSocket长连接保持客户端状态;-调度中心根据用户标签动态推送(如“同城”“兴趣”)。3.可扩展性:-微服务架构拆分用户管理、消息路由、推送调度;-异步化设计减少服务依赖,支持弹性扩容。4.容错机制:-消息重试队列处理推送失败;-分布式锁保证关键操作原子性。四、数据库与中间件(共3题,每题10分)1.题目:请解释MySQL索引的类型及其适用场景。答案:1.B-Tree索引:-适用于全键值、范围查询、排序;-主键索引默认创建。2.哈希索引:-仅支持精确匹配查询;-适用于`=`、`IN`操作。3.全文索引:-支持文本内容模糊搜索;-适用于搜索引擎场景。4.空间索引:-用于GIS数据存储。解析:B-Tree最通用,哈希索引速度快但无法排序。全文索引依赖引擎(如InnoDB)。2.题目:请说明Redis的持久化方式(RDB和AOF)的优缺点。答案:1.RDB:-定时快照,文件小但恢复慢;-适用于读多写少场景。2.AOF:-持续写入日志,恢复快但文件大;-支持增量备份(appendonly/no-appendfsync)。解析:RDB适合备份,AOF适合高可靠性。混合模式(RDB+AOF)兼顾两者。3.题目:请解释Kafka的消费者组(ConsumerGroup)机制。答案:1.分区与偏移量:-消息分topic+partition存储;-消费者组内成员共享partition,通过偏移量(offset)控制进度。2.负载均衡:-分区可自动或手动分配给消费者;-Leader节点处理请求,ISR保证副本同步。3.容错性:-消费者宕机自动重平衡;-可配置`fetch.min.bytes`提高吞吐。解析:消费者组允许多个消费者协同消费,通过偏移量实现幂等性。五、网络与安全(共2题,每题12分)1.题目:请解释TCP三次握手和四次挥手过程。答案:三次握手:1.客户端SYN=1,seq=x→服务器;2.服务器SYN=1,ACK=1,seq=y→客户端;3.客户端ACK=1,seq=x+1→服务器。四次挥手:1.客户端FIN=1→服务器(等待数据传输完毕);2.服务器ACK=1,seq=y→客户端;3.服务器FIN=1→客户端;4.客户端ACK=1,seq=x+1→服务器。解析:握手确保双方时钟同

温馨提示

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

评论

0/150

提交评论