版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2026年华为公司研发工程师面试题及答案一、编程题(共3题,每题20分,总计60分)1.题目:实现一个函数,输入一个正整数n,返回n的“数字翻转”后的结果。例如,输入123,返回321;输入100,返回1。假设输入的整数n为32位有符号整数,要求不使用库函数,且考虑数值溢出问题。答案:cppclassSolution{public:intreverse(intx){intrev=0;while(x!=0){intpop=x%10;x/=10;if(rev>INT_MAX/10||(rev==INT_MAX/10&&pop>7))return0;if(rev<INT_MIN/10||(rev==INT_MIN/10&&pop<-8))return0;rev=rev10+pop;}returnrev;}};解析:通过取模和除法操作逐位翻转数字,同时检查每次翻转后的数值是否超过32位有符号整数的范围(-2^31到2^31-1)。如果超出范围,则返回0。2.题目:给定一个字符串s和一个字符数组chars,设计一个函数,返回s中所有字符在chars中出现的次数之和。例如,s="abc",chars=['a','b','c','a'],返回3(a出现1次,b出现1次,c出现1次)。答案:cppclassSolution{public:intcountCharacters(strings,vector<char>&chars){unordered_map<char,int>freq;for(charc:chars){freq[c]++;}intcount=0;for(charc:s){if(freq.find(c)!=freq.end()){count+=freq[c];}}returncount;}};解析:首先统计chars中每个字符的出现次数,然后遍历s,对每个字符在chars中出现的次数进行累加。最后返回累加结果。3.题目:实现一个无重复字符的最长子串查找函数。例如,输入"abcabcbb",返回"abc"(长度为3)。要求时间复杂度为O(n)。答案:cppclassSolution{public:intlengthOfLongestSubstring(strings){unordered_map<char,int>charIndex;intleft=0,maxLen=0;for(intright=0;right<s.size();right++){if(charIndex.find(s[right])!=charIndex.end()&&charIndex[s[right]]>=left){left=charIndex[s[right]]+1;}charIndex[s[right]]=right;maxLen=max(maxLen,right-left+1);}returnmaxLen;}};解析:使用滑动窗口技术,通过哈希表记录每个字符上一次出现的位置。当遇到重复字符时,将左指针移动到重复字符的上一次出现位置之后。每次更新最大子串长度。二、算法题(共4题,每题15分,总计60分)1.题目:给定一个二维矩阵,其中每个元素都是整数,设计一个函数,返回矩阵中所有“回文子矩阵”的数量。例如,矩阵[[1,2,1],[1,2,1]],回文子矩阵有[[1,2,1]]和[[1],[2],[1]]。答案:cppclassSolution{public:intcountSubmatrices(vector<vector<int>>&matrix){introws=matrix.size(),cols=matrix[0].size();intcount=0;for(inti=0;i<rows;i++){for(intj=0;j<cols;j++){for(intk=i;k<rows;k++){for(intl=j;l<cols;l++){if(isPalindrome(matrix,i,j,k,l)){count++;}}}}}returncount;}boolisPalindrome(vector<vector<int>>&matrix,inti1,intj1,inti2,intj2){inti=i1,j=j1;while(i<=i2&&j<=j2){if(matrix[i][j]!=matrix[i2][j2]){returnfalse;}i++;j++;i2--;j2--;}returntrue;}};解析:通过遍历所有可能的子矩阵,并检查每个子矩阵是否为回文。回文子矩阵要求行和列的对应位置元素相同。时间复杂度为O(n^4),实际应用中需优化。2.题目:给定一个正整数n,设计一个函数,返回所有小于n的质数数量。例如,n=10,返回4(2,3,5,7)。答案:cppclassSolution{public:intcountPrimes(intn){if(n<=2)return0;vector<bool>isPrime(n,true);isPrime[0]=isPrime[1]=false;for(inti=2;ii<n;i++){if(isPrime[i]){for(intj=ii;j<n;j+=i){isPrime[j]=false;}}}intcount=0;for(inti=2;i<n;i++){if(isPrime[i])count++;}returncount;}};解析:使用埃拉托斯特尼筛法,首先假设所有小于n的数都是质数,然后从2开始,筛去所有质数的倍数。最后统计剩余的质数数量。3.题目:给定一个字符串s和一个字典dict,设计一个函数,判断s是否可以由dict中的字符串拼接而成。例如,s="applepenapple",dict=["apple","pen"],返回true。答案:cppclassSolution{public:boolwordBreak(strings,vector<string>&wordDict){unordered_set<string>dict(wordDict.begin(),wordDict.end());vector<bool>dp(s.size()+1,false);dp[0]=true;for(inti=1;i<=s.size();i++){for(intj=0;j<i;j++){if(dp[j]&&dict.count(s.substr(j,i-j))){dp[i]=true;break;}}}returndp[s.size()];}};解析:使用动态规划,dp[i]表示s的前i个字符是否可以由字典中的单词组成。遍历每个位置,检查前面的部分是否可以匹配字典中的单词,如果可以,则更新dp[i]。4.题目:给定一个非空数组nums,设计一个函数,返回数组中所有“三数之和”等于0的唯一组合。例如,nums=[-1,0,1,2],返回[[-1,0,1],[-1,2,1]]。答案:cppclassSolution{public:vector<vector<int>>threeSum(vector<int>&nums){vector<vector<int>>res;sort(nums.begin(),nums.end());for(inti=0;i<nums.size();i++){if(i>0&&nums[i]==nums[i-1])continue;inttarget=-nums[i];intleft=i+1,right=nums.size()-1;while(left<right){intsum=nums[left]+nums[right];if(sum==target){res.push_back({nums[i],nums[left],nums[right]});left++;right--;while(left<right&&nums[left]==nums[left-1])left++;while(left<right&&nums[right]==nums[right+1])right--;}elseif(sum<target){left++;}else{right--;}}}returnres;}};解析:先对数组排序,然后使用双指针法。对于每个数字,使用双指针查找其他两个数字,使得三数之和为0。避免重复组合的方法是跳过相同的数字。三、系统设计题(共2题,每题20分,总计40分)1.题目:设计一个简单的微博系统,要求支持以下功能:-用户发布微博(包括文本内容、发布时间、用户ID)。-用户关注其他用户。-用户查看自己关注用户的最新微博(时间降序)。-系统需要支持至少1000个并发用户。答案:系统架构:1.前端:Web界面或移动App,负责用户交互。2.后端:微服务架构,包括用户服务、发布服务、关注服务、消息队列、数据库。3.数据库:-用户表(用户ID、昵称等)。-微博表(微博ID、用户ID、内容、时间等)。-关注关系表(用户ID、关注用户ID)。4.消息队列:如Kafka,用于异步处理发布和关注事件。功能实现:-发布微博:用户通过API提交微博内容,后端生成微博ID和时间,存入微博表,并推送到关注用户的订阅队列。-关注用户:用户通过API提交关注请求,后端存入关注关系表,并通知关注用户。-查看微博:用户请求时,后端从微博表按用户ID和时间降序查询,返回最新微博。高并发优化:-使用Redis缓存热点用户微博。-数据库分片,按用户ID分片。-使用消息队列异步处理关注和发布事件,避免阻塞。解析:通过微服务架构和消息队列实现高并发处理,数据库分片和缓存优化查询性能。关注关系通过异步推送实现实时性。2.题目:设计一个分布式文件系统,要求支持以下功能:-文件上传和下载。-文件分块存储,每块1MB。-支持文件版本管理(例如,上传新版本时保留旧版本)。-支持文件预读(例如,下载时先预读前1MB内容)。答案:系统架构:1.前端:文件上传下载接口。2.后端:文件服务集群,负责文件分块、版本管理和预读。3.存储层:对象存储(如Ceph或AWSS3),按文件ID和块编号存储。4.数据库:文件元数据表(文件ID、块编号、版本、存储地址等)。功能实现:-文件上传:-前端分块上传文件,后端生成块编号
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (新教材)2026年青岛版八年级上册数学 5.3 无理数 课件
- 急产护理:助产士的角色与职责
- (新教材)2026年沪科版八年级下册数学 17.2 一元二次方程的解法 课件
- 2025年办公楼外墙施工保密条款合同协议
- 原料运输防护技术规程
- 2025年自贸区医疗设备第三方检测
- 专题01北极放大-冲刺2025年高考地理热点梳理情境对点练
- 2026 年中职酒店管理(涉外酒店服务)试题及答案
- 中国知识文化题库及答案
- 办公楼会议室防滑合同(商务活动2025)
- 长津湖课件教学课件
- 聚焦前沿:2025年职业教育产教融合共同体建设难题与对策研究
- 2025年广西国家工作人员学法用法考试试题及答案
- (2025秋新版)苏教版科学三年级上册全册教案
- 农商行法律培训课件
- 部编版小学二年级语文上册教学反思集体备课计划
- 执法用手机管理办法
- 双重管理安全员管理办法
- 2019-2025年中国鲜切水果行业市场调查研究及投资前景预测报告
- 染色体核型分析报告解读要点
- (高清版)DB1303∕T 357-2023 鲜食核桃果实主要病虫害防治技术规程
评论
0/150
提交评论