华为软件开发工程师面试题集及答案_第1页
华为软件开发工程师面试题集及答案_第2页
华为软件开发工程师面试题集及答案_第3页
华为软件开发工程师面试题集及答案_第4页
华为软件开发工程师面试题集及答案_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

2026年华为软件开发工程师面试题集及答案一、编程基础题(共5题,每题10分,总分50分)题目1(10分)请实现一个函数,判断一个字符串是否是回文字符串。例如,"abba"和"abcba"是回文字符串,而"abc"不是。cinclude<stdio.h>include<string.h>include<stdbool.h>boolisPalindrome(chars){if(s==NULL)returnfalse;intlen=strlen(s);for(inti=0;i<len/2;i++){if(s[i]!=s[len-1-i]){returnfalse;}}returntrue;}intmain(){charstr1[]="abba";charstr2[]="abcba";charstr3[]="abc";printf("%sis%spalindrome\n",str1,isPalindrome(str1)?"":"not");printf("%sis%spalindrome\n",str2,isPalindrome(str2)?"":"not");printf("%sis%spalindrome\n",str3,isPalindrome(str3)?"":"not");return0;}题目2(10分)请实现一个函数,找出数组中重复的数字。假设数组长度为n,数组中的数字范围在1到n之间。cinclude<stdio.h>include<stdbool.h>intfindDuplicate(intnums,intnumsSize){for(inti=0;i<numsSize;i++){intindex=abs(nums[i])-1;if(nums[index]<0){returnabs(nums[i]);}nums[index]=-nums[index];}return-1;//如果没有重复数字,返回-1}intmain(){intnums1[]={1,3,4,2,2};intnums2[]={3,2,3,1,4};printf("Duplicateinnums1:%d\n",findDuplicate(nums1,5));printf("Duplicateinnums2:%d\n",findDuplicate(nums2,5));return0;}题目3(10分)请实现一个函数,合并两个有序数组,合并后的数组仍然有序。合并后的数组长度为m+n。cinclude<stdio.h>voidmerge(intnums1,intm,intnums2,intn){inti=m-1,j=n-1,k=m+n-1;while(i>=0&&j>=0){if(nums1[i]>nums2[j]){nums1[k--]=nums1[i--];}else{nums1[k--]=nums2[j--];}}while(j>=0){nums1[k--]=nums2[j--];}}intmain(){intnums1[10]={1,2,3,0,0,0};intnums2[3]={2,5,6};merge(nums1,3,nums2,3);for(inti=0;i<6;i++){printf("%d",nums1[i]);}printf("\n");return0;}题目4(10分)请实现一个函数,计算一个非负整数的二进制表示中1的个数。例如,二进制数11(即3)的二进制表示中有两位1。cinclude<stdio.h>inthammingWeight(uint32_tn){intcount=0;while(n){count+=n&1;n>>=1;}returncount;}intmain(){printf("Hammingweightof3(11):%d\n",hammingWeight(3));printf("Hammingweightof12(1100):%d\n",hammingWeight(12));return0;}题目5(10分)请实现一个函数,将一个给定非负整数转换为英文字符串。例如,123转换为"onehundredtwentythree"。cinclude<stdio.h>include<string.h>voidintToEnglish(intnum,charresult){constcharunits[]={"","one","two","three","four","five","six","seven","eight","nine"};constcharteens[]={"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"};constchartens[]={"","","twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"};constcharthousands[]={"","thousand","million","billion"};inti=0;if(num==0){strcpy(result,"zero");return;}while(num>0){intn=num%1000;if(n!=0){if(i>0){strcat(result,"");}intk=i;while(k>0&&n==0){strcat(result,"zero");n=num%1000;k--;}if(n>=100){strcat(result,units[n/100]);strcat(result,"hundred");n%=100;}if(n>=20){strcat(result,tens[n/10]);n%=10;}if(n>0){strcat(result,units[n]);}strcat(result,thousands[i]);}num/=1000;i++;}}intmain(){charresult[100];intToEnglish(123,result);printf("%s\n",result);intToEnglish(1001,result);printf("%s\n",result);return0;}二、数据结构与算法题(共5题,每题12分,总分60分)题目6(12分)请实现一个函数,判断一个二叉树是否是平衡二叉树。平衡二叉树的定义是:对于任意节点,其左右子树的高度差不超过1。pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefisBalanced(root):defcheck(node):ifnotnode:return0,Trueleft_height,left_balanced=check(node.left)right_height,right_balanced=check(node.right)returnmax(left_height,right_height)+1,left_balancedandright_balancedandabs(left_height-right_height)<=1returncheck(root)[1]示例用法构建一个平衡二叉树1/\23/\45root=TreeNode(1)root.left=TreeNode(2)root.right=TreeNode(3)root.left.left=TreeNode(4)root.left.right=TreeNode(5)print(isBalanced(root))#输出:True题目7(12分)请实现一个函数,找出二叉搜索树中第k小的元素。例如,给定二叉搜索树:3/\14\2第3小的元素是2。pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefkthSmallest(root,k):stack=[]current=rootcount=0whilestackorcurrent:whilecurrent:stack.append(current)current=current.leftcurrent=stack.pop()count+=1ifcount==k:returncurrent.valcurrent=current.rightreturn-1#如果不存在第k小的元素示例用法构建一个二叉搜索树3/\14\2root=TreeNode(3)root.left=TreeNode(1)root.right=TreeNode(4)root.left.right=TreeNode(2)print(kthSmallest(root,3))#输出:2题目8(12分)请实现一个函数,将一个非递减排序的数组转换为二叉搜索树。要求转换后的二叉搜索树的高度尽可能小。pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefsortedArrayToBST(nums):ifnotnums:returnNonedefhelper(left,right):ifleft>right:returnNonemid=(left+right)//2node=TreeNode(nums[mid])node.left=helper(left,mid-1)node.right=helper(mid+1,right)returnnodereturnhelper(0,len(nums)-1)示例用法nums=[1,2,3,4,5,6,7]root=sortedArrayToBST(nums)输出二叉搜索树的中序遍历结果(应为排序后的数组)definorderTraversal(root):returninorderTraversal(root.left)+[root.val]+inorderTraversal(root.right)ifrootelse[]print(inorderTraversal(root))#输出:[1,2,3,4,5,6,7]题目9(12分)请实现一个函数,判断一个字符串是否是有效的括号字符串。例如,"()"、"()[]{}"都是有效的括号字符串,而"(]"、"([)]"无效。pythondefisValid(s):stack=[]mapping={')':'(',']':'[','}':'{'}forcharins:ifcharinmapping:top_element=stack.pop()ifstackelse'#'ifmapping[char]!=top_element:returnFalseelse:stack.append(char)returnnotstack示例用法print(isValid("()"))#输出:Trueprint(isValid("()[]{}"))#输出:Trueprint(isValid("(]"))#输出:Falseprint(isValid("([)]"))#输出:False题目10(12分)请实现一个函数,找出所有数组中不重复的三元组,使得a+b+c=0。例如,给定数组[-1,0,1,2],返回[[-1,0,1],[-1,-1,2]]。pythondefthreeSum(nums):nums.sort()result=[]foriinrange(len(nums)-2):ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,len(nums)-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal==0:result.append([nums[i],nums[left],nums[right]])whileleft<rightandnums[left]==nums[left+1]:left+=1whileleft<rightandnums[right]==nums[right-1]:right-=1left+=1right-=1eliftotal<0:left+=1else:right-=1returnresult示例用法nums=[-1,0,1,2]print(threeSum(nums))#输出:[[-1,0,1],[-1,-1,2]]三、系统设计题(共3题,每题20分,总分60分)题目11(20分)设计一个简单的微博系统,需要支持以下功能:1.用户注册和登录2.发布微博3.获取用户关注的人的微博4.点赞微博请简述系统架构设计,包括数据存储设计、主要模块设计以及关键技术选型。答案:1.系统架构设计-前端:使用React或Vue.js构建用户界面,负责用户交互。-后端:使用SpringBoot或Node.js构建RESTfulAPI,负责业务逻辑处理。-数据库:使用MySQL或PostgreSQL存储用户信息、微博内容、关注关系等数据。-缓存:使用Redis缓存热点数据,提高系统性能。2.数据存储设计-用户表:存储用户信息,包括用户ID、用户名、密码、注册时间等。-微博表:存储微博内容,包括微博ID、用户ID、内容、发布时间、点赞数等。-关注关系表:存储用户之间的关注关系,包括用户ID和关注者ID。-点赞表:存储用户对微博的点赞关系,包括用户ID和微博ID。3.主要模块设计-用户模块:负责用户注册、登录、个人信息管理等。-微博模块:负责发布微博、获取微博列表、点赞微博等。-关注模块:负责用户之间的关注关系管理。-缓存模块:负责热点数据的缓存和更新。4.关键技术选型-前端:React或Vue.js-后端:SpringBoot或Node.js-数据库:MySQL或PostgreSQL-缓存:Redis-消息队列:Kafka或RabbitMQ,用于异步处理和系统解耦题目12(20分)设计一个短链接系统,需要支持以下功能:1.将长链接转换为短链接2.通过短链接获取原始长链接3.统计短链接的访问次数请简述系统架构设计,包括数据存储设计、主要模块设计以及关键技术选型。答案:1.系统架构设计-前端:使用React或Vue.js构建用户界面,负责用户交互。-后端:使用SpringBoot或Node.js构建RESTfulAPI,负责业务逻辑处理。-数据库:使用MySQL或PostgreSQL存储短链接和长链接的映射关系、访问次数等数据。-缓存:使用Redis缓存短链接和长链接的映射关系,提高系统性能。2.数据存储设计-短链接表:存储短链接和长链接的映射关系,包括短链接ID、长链接、访问次数等。-访问记录表:存储短链接的访问记录,包括短链接ID、访问时间等。3.主要模块设计-短链接生成模块:负责将长链接转换为短链接。-短链接解析模块:负责通过短链接获取原始长链接。-访问统计模块:负责统计短链接的访问次数。-缓存模块:负

温馨提示

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

评论

0/150

提交评论