華為公司研發(fā)工程師面試題及答案_第1頁
華為公司研發(fā)工程師面試題及答案_第2頁
華為公司研發(fā)工程師面試題及答案_第3頁
華為公司研發(fā)工程師面試題及答案_第4頁
華為公司研發(fā)工程師面試題及答案_第5頁
已閱讀5頁,還剩11頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

2026年華為公司研發(fā)工程師面試題及答案一、編程題(共3題,每題20分,總計60分)1.題目:實現(xiàn)一個函數(shù),輸入一個正整數(shù)n,返回n的“數(shù)字翻轉(zhuǎn)”后的結(jié)果。例如,輸入123,返回321;輸入100,返回1。假設輸入的整數(shù)n為32位有符號整數(shù),要求不使用庫函數(shù),且考慮數(shù)值溢出問題。答案: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;}};解析:通過取模和除法操作逐位翻轉(zhuǎn)數(shù)字,同時檢查每次翻轉(zhuǎn)后的數(shù)值是否超過32位有符號整數(shù)的范圍(-2^31到2^31-1)。如果超出范圍,則返回0。2.題目:給定一個字符串s和一個字符數(shù)組chars,設計一個函數(shù),返回s中所有字符在chars中出現(xiàn)的次數(shù)之和。例如,s="abc",chars=['a','b','c','a'],返回3(a出現(xiàn)1次,b出現(xiàn)1次,c出現(xiàn)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;}};解析:首先統(tǒng)計chars中每個字符的出現(xiàn)次數(shù),然后遍歷s,對每個字符在chars中出現(xiàn)的次數(shù)進行累加。最后返回累加結(jié)果。3.題目:實現(xiàn)一個無重復字符的最長子串查找函數(shù)。例如,輸入"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;}};解析:使用滑動窗口技術(shù),通過哈希表記錄每個字符上一次出現(xiàn)的位置。當遇到重復字符時,將左指針移動到重復字符的上一次出現(xiàn)位置之后。每次更新最大子串長度。二、算法題(共4題,每題15分,總計60分)1.題目:給定一個二維矩陣,其中每個元素都是整數(shù),設計一個函數(shù),返回矩陣中所有“回文子矩陣”的數(shù)量。例如,矩陣[[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;}};解析:通過遍歷所有可能的子矩陣,并檢查每個子矩陣是否為回文?;匚淖泳仃囈笮泻土械膶恢迷叵嗤r間復雜度為O(n^4),實際應用中需優(yōu)化。2.題目:給定一個正整數(shù)n,設計一個函數(shù),返回所有小于n的質(zhì)數(shù)數(shù)量。例如,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的數(shù)都是質(zhì)數(shù),然后從2開始,篩去所有質(zhì)數(shù)的倍數(shù)。最后統(tǒng)計剩余的質(zhì)數(shù)數(shù)量。3.題目:給定一個字符串s和一個字典dict,設計一個函數(shù),判斷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()];}};解析:使用動態(tài)規(guī)劃,dp[i]表示s的前i個字符是否可以由字典中的單詞組成。遍歷每個位置,檢查前面的部分是否可以匹配字典中的單詞,如果可以,則更新dp[i]。4.題目:給定一個非空數(shù)組nums,設計一個函數(shù),返回數(shù)組中所有“三數(shù)之和”等于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;}};解析:先對數(shù)組排序,然后使用雙指針法。對于每個數(shù)字,使用雙指針查找其他兩個數(shù)字,使得三數(shù)之和為0。避免重復組合的方法是跳過相同的數(shù)字。三、系統(tǒng)設計題(共2題,每題20分,總計40分)1.題目:設計一個簡單的微博系統(tǒng),要求支持以下功能:-用戶發(fā)布微博(包括文本內(nèi)容、發(fā)布時間、用戶ID)。-用戶關(guān)注其他用戶。-用戶查看自己關(guān)注用戶的最新微博(時間降序)。-系統(tǒng)需要支持至少1000個并發(fā)用戶。答案:系統(tǒng)架構(gòu):1.前端:Web界面或移動App,負責用戶交互。2.后端:微服務架構(gòu),包括用戶服務、發(fā)布服務、關(guān)注服務、消息隊列、數(shù)據(jù)庫。3.數(shù)據(jù)庫:-用戶表(用戶ID、昵稱等)。-微博表(微博ID、用戶ID、內(nèi)容、時間等)。-關(guān)注關(guān)系表(用戶ID、關(guān)注用戶ID)。4.消息隊列:如Kafka,用于異步處理發(fā)布和關(guān)注事件。功能實現(xiàn):-發(fā)布微博:用戶通過API提交微博內(nèi)容,后端生成微博ID和時間,存入微博表,并推送到關(guān)注用戶的訂閱隊列。-關(guān)注用戶:用戶通過API提交關(guān)注請求,后端存入關(guān)注關(guān)系表,并通知關(guān)注用戶。-查看微博:用戶請求時,后端從微博表按用戶ID和時間降序查詢,返回最新微博。高并發(fā)優(yōu)化:-使用Redis緩存熱點用戶微博。-數(shù)據(jù)庫分片,按用戶ID分片。-使用消息隊列異步處理關(guān)注和發(fā)布事件,避免阻塞。解析:通過微服務架構(gòu)和消息隊列實現(xiàn)高并發(fā)處理,數(shù)據(jù)庫分片和緩存優(yōu)化查詢性能。關(guān)注關(guān)系通過異步推送實現(xiàn)實時性。2.題目:設計一個分布式文件系統(tǒng),要求支持以下功能:-文件上傳和下載。-文件分塊存儲,每塊1MB。-支持文件版本管理(例如,上傳新版本時保留舊版本)。-支持文件預讀(例如,下載時先預讀前1MB內(nèi)容)。答案:系統(tǒng)架構(gòu):1.前端:文件上傳下載接口。2.后端:文件服務集群,負責文件分塊、版本管理和預讀。3.存儲層:對象存儲(如Ceph或AWSS3),按文件ID和塊編號存儲。4.數(shù)據(jù)庫:文件元數(shù)據(jù)表(文件ID、塊編號、版本、存儲地址等)。功能實現(xiàn):-文件上傳:-前端分塊上傳文件,后端生成塊編號

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論