版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年华为软件工程师面试全解析及答案一、编程能力测试(共5题,每题20分,总分100分)1.编写一个函数,实现快速排序算法。要求:-输入一个整数数组,返回排序后的数组。-不能使用内置排序函数。-说明时间复杂度和空间复杂度。答案与解析:cppinclude<vector>usingnamespacestd;voidquickSort(vector<int>&arr,intleft,intright){if(left>=right)return;intpivot=arr[left];intl=left,r=right;while(l<r){while(l<r&&arr[r]>=pivot)r--;arr[l]=arr[r];while(l<r&&arr[l]<=pivot)l++;arr[r]=arr[l];}arr[l]=pivot;quickSort(arr,left,l-1);quickSort(arr,l+1,right);}vector<int>sortArray(vector<int>&nums){quickSort(nums,0,nums.size()-1);returnnums;}解析:-快速排序是分治算法,时间复杂度为O(nlogn),最坏情况下为O(n²)。-空间复杂度为O(logn)(递归栈),不稳定排序。-实现中,通过基准值划分左右子数组,递归排序。2.实现一个LRU(最近最少使用)缓存。要求:-支持get和put操作。-get返回键对应的值,若不存在返回-1。-put插入或更新键值对,若容量满则删除最久未使用的项。-使用哈希表+双向链表实现。答案与解析:cppinclude<unordered_map>include<list>classLRUCache{private:intcapacity;unordered_map<int,list<pair<int,int>>::iterator>cache;list<pair<int,int>>lst;public:LRUCache(intcapacity_):capacity(capacity_){}intget(intkey){autoit=cache.find(key);if(it==cache.end())return-1;lst.splice(lst.begin(),lst,it->second);returnit->second->second;}voidput(intkey,intvalue){autoit=cache.find(key);if(it!=cache.end()){lst.splice(lst.begin(),lst,it->second);it->second->second=value;}else{if(cache.size()==capacity){cache.erase(lst.back().first);lst.pop_back();}lst.emplace_front(key,value);cache[key]=lst.begin();}}};解析:-哈希表记录键到链表节点的映射,链表维护访问顺序。-get操作将节点移动到链表头部。-put操作先检查是否存在,存在则更新;若满则删除链表尾部节点。3.编写一个函数,判断二叉树是否对称。要求:-输入二叉树的根节点,返回是否对称。-对称定义:左右子树镜像对称。答案与解析:cppinclude<queue>usingnamespacestd;structTreeNode{intval;TreeNodeleft,right;TreeNode(intx):val(x),left(nullptr),right(nullptr){}};boolisSymmetric(TreeNoderoot){if(!root)returntrue;returncheck(root->left,root->right);}boolcheck(TreeNodep,TreeNodeq){if(!p&&!q)returntrue;if(!p||!q)returnfalse;returnp->val==q->val&&check(p->left,q->right)&&check(p->right,q->left);}解析:-递归判断左右子树是否镜像对称。-空节点视为对称,非空节点需值相等且左右子树对称。4.实现一个简单的Trie(前缀树)。要求:-支持插入和查询操作。-插入时逐字符插入节点。-查询时返回是否存在前缀。答案与解析:cppinclude<unordered_map>usingnamespacestd;structTrieNode{unordered_map<char,TrieNode>children;boolisEnd;TrieNode():isEnd(false){}};classTrie{private:TrieNoderoot;public:Trie():root(newTrieNode()){}voidinsert(stringword){TrieNodenode=root;for(charc:word){if(node->children.find(c)==node->children.end()){node->children[c]=newTrieNode();}node=node->children[c];}node->isEnd=true;}boolsearch(stringword){TrieNodenode=root;for(charc:word){if(node->children.find(c)==node->children.end())returnfalse;node=node->children[c];}returnnode->isEnd;}};解析:-每个节点存储子节点映射,isEnd标记词尾。-插入时逐字符创建或跳转节点。-查询时逐字符匹配,若路径存在且isEnd为true则返回true。5.编写一个函数,计算二叉树的最大深度。要求:-输入二叉树的根节点,返回最大深度。-使用递归或迭代方法。答案与解析:cppinclude<stack>usingnamespacestd;intmaxDepth(TreeNoderoot){if(!root)return0;intdepth=0;stack<pair<TreeNode,int>>stk;stk.emplace(root,1);while(!stk.empty()){auto[node,d]=stk.top();stk.pop();depth=max(depth,d);if(node->left)stk.emplace(node->left,d+1);if(node->right)stk.emplace(node->right,d+1);}returndepth;}解析:-迭代方法使用栈记录节点和深度,逐层更新最大深度。-递归方法为:maxDepth=max(left,right)+1。二、系统设计测试(共3题,每题33分,总分99分)1.设计一个短链接系统。要求:-输入长链接,返回短链接。-支持通过短链接跳转回长链接。-说明系统架构和主要模块。答案与解析:系统架构:1.前端服务(Nginx/HAProxy):负责接收短链接请求,路由到后端。2.后端服务(微服务):-数据库:存储长链接与短链接的映射(主键为短链接ID)。-URL转换模块:-生成短链接(如62进制编码+随机数)。-查询数据库验证短链接,返回长链接。3.缓存(Redis):缓存热点短链接,加速查询。核心模块:-短链接生成:使用hash函数(如SHA1)+Base62编码。-路由逻辑:根据短链接ID查询数据库,返回长链接。伪代码:cpp//生成短链接stringencode(longid){conststringchars="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";stringres="";while(id>0){res=chars[id%62]+res;id/=62;}returnres;}//查询长链接stringgetLongUrl(stringshortUrl){longid=decode(shortUrl);returndb.query(id);}2.设计一个高并发短消息系统(如微信朋友圈)。要求:-支持用户发布动态、点赞、评论。-说明数据存储方案和负载均衡策略。答案与解析:数据存储:-用户表:存储用户信息(ID、昵称等)。-动态表:存储动态内容(ID、用户ID、时间、内容、点赞数、评论数)。-点赞表:用户ID+动态ID。-评论表:用户ID+动态ID+评论内容。-Redis:缓存动态数据、热点用户。负载均衡:-接入层:Nginx负载均衡,按流量分配到不同后端。-后端集群:多实例处理请求,数据库分表分库。-消息队列(Kafka):异步处理点赞/评论通知。核心设计:-发布动态:用户提交内容,写入动态表,更新Redis缓存。-点赞/评论:写入关系表,更新动态表统计。-实时通知:通过WebSocket推送更新。3.设计一个分布式文件存储系统(如华为云OBS)。要求:-支持文件上传、下载、删除。-说明一致性保证和容灾方案。答案与解析:系统架构:1.前端服务:接收客户端请求,API网关(APIGateway)。2.存储节点:分布式存储,数据分块(如1MB一块)。3.元数据服务:管理文件元数据(文件名、大小、块信息)。4.副本管理:数据多副本存储(如3副本,异地多活)。一致性保证:-写操作:先写本地,再写副本(Quorum机制,如W=2,R=1)。-读操作:优先读取最新副本。容灾方案:-跨区域副本:数据在不同可用区存储。-故障切换:元数据服务高可用,存储节点自动选举。伪代码(写操作):cppvoidwrite(stringfile,stringdata){splitData(data);//分块for(chunk:chunks){writeLocal(chunk);writeReplicas(chunk);//写副本}}三、算法与数据结构测试(共5题,每题20分,总分100分)1.给定一个数组,找出其中重复次数超过一半的元素。要求:-输入数组,返回满足条件的元素。-时间复杂度O(n),空间复杂度O(1)。答案与解析:cppintmajorityElement(vector<int>&nums){intcount=0,candidate=0;for(intnum:nums){if(count==0)candidate=num;count+=(num==candidate)?1:-1;}returncandidate;}解析:-Boyer-Moore投票算法:遍历数组,候选者每次与当前元素相同则+1,不同则-1。-多数元素必定存在,最终候选者为答案。2.实现一个二分查找的变种:查找第一个大于等于target的元素。要求:-输入有序数组,返回目标索引。答案与解析:cppintfirstGreaterEqual(vector<int>&nums,inttarget){intleft=0,right=nums.size();while(left<right){intmid=left+(right-left)/2;if(nums[mid]>=target)right=mid;elseleft=mid+1;}returnleft;}解析:-与标准二分查找类似,但更新条件为nums[mid]>=target时向左搜索。3.给定一个字符串,判断是否可以通过翻转字符串中的某些字符,使其成为回文。要求:-输入字符串,返回是否可变为回文。答案与解析:cppboolcanBePalindrome(strings){intleft=0,right=s.size()-1;intcount=0;while(left<right){if(s[left]!=s[right])count++;left++;right--;}returncount<=1;}解析:-双指针遍历,统计不等字符对数量。-若不等对超过1对,无法通过翻转变为回文。4.实现一个函数,合并两个有序链表。要求:-输入两个有序链表,返回合并后的头节点。答案与解析:cppListNodemergeTwoLists(ListNodel1,ListNodel2){ListNodedummy;ListNodetail=&dummy;while(l1&&l2){if(l1->val<=l2->val){tail->next=l1;l1=l1->next;}else{tail->next=l2;l2=l2->next;}tail=tail->next;}tail->next=l1?l1:l2;retur
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年法律法规考试题库附完整答案(各地真题)
- 2026年一级注册建筑师之建筑结构考试题库300道含答案
- 2026年高校教师资格证《高校教师职业道德》题库附参考答案【突破训练】
- 财务专员实操考试题含答案
- 2026年高校教师资格证《高校教师职业道德》题库含答案【培优】
- 2026年教师资格之中学教育知识与能力考试题库300道附答案(培优)
- 2026年期货从业资格考试题库附参考答案【夺分金卷】
- 2026届贵州省六校联盟高三上学期联考(二)历史试题(含答案)
- 全国科普日活动总结(15篇)
- 脊髓损伤患者的护理查房
- 2025年云南省人民检察院聘用制书记员招聘(22人)备考笔试题库及答案解析
- 2026届四川凉山州高三高考一模数学试卷试题(含答案详解)
- 银行党支部书记2025年抓基层党建工作述职报告
- 肿瘤标志物的分类
- 2025山西忻州市原平市招聘社区专职工作人员50人考试历年真题汇编附答案解析
- 中药煎煮知识与服用方法
- 2026东莞银行秋季校园招聘备考题库及答案详解(基础+提升)
- 消防水泵房管理制度及操作规程
- 野战军生存课件
- 《民航概论》期末考试复习题库(附答案)
- 2025年学校工会工作总结范文(5篇)
评论
0/150
提交评论