2025年華為軟件工程師校園招聘面試攻略及模擬題答案_第1頁
2025年華為軟件工程師校園招聘面試攻略及模擬題答案_第2頁
2025年華為軟件工程師校園招聘面試攻略及模擬題答案_第3頁
2025年華為軟件工程師校園招聘面試攻略及模擬題答案_第4頁
2025年華為軟件工程師校園招聘面試攻略及模擬題答案_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2025年華為軟件工程師校園招聘面試攻略及模擬題答案一、編程能力測試(5題,每題20分)1.題目:字符串反轉(zhuǎn)問題描述實(shí)現(xiàn)一個(gè)函數(shù),將輸入的字符串反轉(zhuǎn)。例如,輸入`"hello"`,輸出`"olleh"`。要求不使用額外的字符串變量。要求-時(shí)間復(fù)雜度:O(n)-空間復(fù)雜度:O(1)cpp#include<iostream>#include<string>voidreverseString(std::string&s){//你的代碼}intmain(){std::stringinput="hello";reverseString(input);std::cout<<input<<std::endl;return0;}答案cppvoidreverseString(std::string&s){intleft=0,right=s.size()-1;while(left<right){std::swap(s[left],s[right]);++left;--right;}}2.題目:合并兩個(gè)有序數(shù)組問題描述給定兩個(gè)有序數(shù)組`nums1`和`nums2`,合并它們?yōu)橐粋€(gè)有序數(shù)組。假設(shè)`nums1`有足夠的空間容納兩個(gè)數(shù)組的合并結(jié)果。輸入-`nums1`:[1,2,3,0,0,0],m=3-`nums2`:[2,5,6],n=3輸出[1,2,2,3,5,6]cpp#include<iostream>#include<vector>voidmerge(std::vector<int>&nums1,intm,std::vector<int>&nums2,intn){intp1=m-1,p2=n-1,p=m+n-1;while(p1>=0&&p2>=0){if(nums1[p1]>nums2[p2]){nums1[p--]=nums1[p1--];}else{nums1[p--]=nums2[p2--];}}while(p2>=0){nums1[p--]=nums2[p2--];}}intmain(){std::vector<int>nums1={1,2,3,0,0,0};std::vector<int>nums2={2,5,6};intm=3,n=3;merge(nums1,m,nums2,n);for(intnum:nums1){std::cout<<num<<"";}return0;}3.題目:二叉樹的最大深度問題描述給定一個(gè)二叉樹,找出它的最大深度。二叉樹的深度為根節(jié)點(diǎn)到最遠(yuǎn)葉子節(jié)點(diǎn)的最長路徑上的節(jié)點(diǎn)數(shù)。示例輸入:root=[3,9,20,null,null,15,7]輸出:3cpp#include<iostream>#include<vector>#include<queue>structTreeNode{intval;TreeNode*left;TreeNode*right;TreeNode(intx):val(x),left(nullptr),right(nullptr){}};intmaxDepth(TreeNode*root){if(!root)return0;std::queue<TreeNode*>q;q.push(root);intdepth=0;while(!q.empty()){intsize=q.size();depth++;for(inti=0;i<size;++i){TreeNode*node=q.front();q.pop();if(node->left)q.push(node->left);if(node->right)q.push(node->right);}}returndepth;}intmain(){//構(gòu)建示例二叉樹TreeNode*root=newTreeNode(3);root->left=newTreeNode(9);root->right=newTreeNode(20);root->right->left=newTreeNode(15);root->right->right=newTreeNode(7);std::cout<<"最大深度:"<<maxDepth(root)<<std::endl;return0;}4.題目:遞歸斐波那契數(shù)列問題描述實(shí)現(xiàn)一個(gè)遞歸函數(shù),計(jì)算斐波那契數(shù)列的第n項(xiàng)。斐波那契數(shù)列定義如下:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)。要求-避免遞歸棧溢出,使用記憶化遞歸cpp#include<iostream>#include<vector>intfib(intn,std::vector<int>&memo){if(n<=1)returnn;if(memo[n]!=-1)returnmemo[n];memo[n]=fib(n-1,memo)+fib(n-2,memo);returnmemo[n];}intmain(){intn=10;std::vector<int>memo(n+1,-1);std::cout<<"F("<<n<<")="<<fib(n,memo)<<std::endl;return0;}5.題目:有效括號(hào)問題描述給定一個(gè)字符串,包含`'('`,`')'`,`{'}`,`'}'`,`'['`,`']'`,判斷字符串是否有效。示例-輸入:`"()"`,輸出:`true`-輸入:`"()[]{}"`,輸出:`true`-輸入:`"(]"`,輸出:`false`cpp#include<iostream>#include<stack>#include<unordered_map>boolisValid(std::strings){std::unordered_map<char,char>mapping={{')','('},{']','['},{'}','{'}};std::stack<char>st;for(charc:s){if(mapping.count(c)){if(st.empty()||st.top()!=mapping[c])returnfalse;st.pop();}else{st.push(c);}}returnst.empty();}intmain(){std::cout<<isValid("()[]{}")<<std::endl;//truestd::cout<<isValid("(]")<<std::endl;//falsereturn0;}二、系統(tǒng)設(shè)計(jì)能力測試(2題,每題40分)1.題目:設(shè)計(jì)微博關(guān)注系統(tǒng)問題描述設(shè)計(jì)一個(gè)微博關(guān)注系統(tǒng),支持以下功能:1.用戶關(guān)注/取消關(guān)注其他用戶2.獲取當(dāng)前用戶的關(guān)注列表3.獲取當(dāng)前用戶的時(shí)間線(包含自己發(fā)布和關(guān)注用戶的最新動(dòng)態(tài))4.支持用戶發(fā)布動(dòng)態(tài)(最多100條)要求-說明數(shù)據(jù)存儲(chǔ)方案(數(shù)據(jù)庫表設(shè)計(jì))-簡述系統(tǒng)架構(gòu)-考慮高并發(fā)場景下的性能優(yōu)化方案答案數(shù)據(jù)存儲(chǔ)方案1.用戶表(users)-id(主鍵)-username-password-email2.關(guān)注關(guān)系表(follows)-follower_id(外鍵)-followee_id(外鍵)-created_at-主鍵(follower_id,followee_id)3.動(dòng)態(tài)表(posts)-id(主鍵)-user_id(外鍵)-content-created_at-likes_count-comments_count4.動(dòng)態(tài)關(guān)系表(post_likes)-post_id(外鍵)-user_id(外鍵)-created_at-主鍵(post_id,user_id)系統(tǒng)架構(gòu)-前端:Web/App界面,負(fù)責(zé)用戶交互-后端:API服務(wù),處理業(yè)務(wù)邏輯-用戶模塊:注冊(cè)、登錄、個(gè)人信息管理-關(guān)注模塊:關(guān)注/取消關(guān)注、獲取關(guān)注列表-動(dòng)態(tài)模塊:發(fā)布動(dòng)態(tài)、獲取時(shí)間線-數(shù)據(jù)庫:存儲(chǔ)用戶數(shù)據(jù)、關(guān)注關(guān)系、動(dòng)態(tài)等-緩存:Redis緩存關(guān)注列表、時(shí)間線等高頻訪問數(shù)據(jù)性能優(yōu)化1.緩存-關(guān)注列表緩存:用戶登錄后緩存關(guān)注關(guān)系,過期后重新加載-時(shí)間線緩存:緩存用戶最新動(dòng)態(tài),定時(shí)更新2.數(shù)據(jù)庫優(yōu)化-索引:在follows表的follower_id和followee_id上建立索引-分表:動(dòng)態(tài)表按時(shí)間范圍分表,避免單表過大3.讀寫分離-讀操作使用從庫,寫操作使用主庫4.異步處理-動(dòng)態(tài)發(fā)布、點(diǎn)贊等操作采用消息隊(duì)列異步處理2.題目:設(shè)計(jì)短鏈接系統(tǒng)問題描述設(shè)計(jì)一個(gè)短鏈接系統(tǒng),實(shí)現(xiàn)以下功能:1.將長鏈接轉(zhuǎn)換為短鏈接2.通過短鏈接跳轉(zhuǎn)到對(duì)應(yīng)的長鏈接3.支持自定義短鏈接前綴4.統(tǒng)計(jì)短鏈接的訪問次數(shù)要求-說明數(shù)據(jù)存儲(chǔ)方案-設(shè)計(jì)短鏈接生成算法-考慮系統(tǒng)可擴(kuò)展性和高可用性答案數(shù)據(jù)存儲(chǔ)方案1.短鏈接表(short_links)-id(主鍵)-long_url(長鏈接)-short_code(短鏈接碼)-prefix(自定義前綴,可選)-created_at-updated_at-visits_count短鏈接生成算法采用62進(jìn)制編碼(a-z,A-Z,0-9),將長鏈接ID映射為固定長度的短碼:1.為每個(gè)長鏈接生成唯一ID2.將ID轉(zhuǎn)換為62進(jìn)制字符串(類似URL短鏈接)3.自定義前綴可覆蓋默認(rèn)前綴pythonimportbase64defencode_id(id):chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"base=len(chars)encoded=""whileid>0:encoded=chars[id%base]+encodedid//=basereturnencoded.zfill(6)#固定長度為6系統(tǒng)設(shè)計(jì)1.分布式架構(gòu)-API網(wǎng)關(guān):負(fù)載均衡分發(fā)請(qǐng)求-服務(wù)集群:多個(gè)短鏈接服務(wù)實(shí)例,水平擴(kuò)展-數(shù)據(jù)庫集群:讀寫分離,分庫分表2.緩存策略-Redis緩存短鏈接碼與長鏈接的映射關(guān)系-過期緩存避免數(shù)據(jù)不一致3.高可用性-健康檢查自動(dòng)降級(jí)-異地多活部署4.安全性-防止短鏈接碼被猜測(添加隨機(jī)前綴)-訪問頻率限制可擴(kuò)展性-微服務(wù)架構(gòu),各模塊獨(dú)立擴(kuò)展-數(shù)據(jù)庫分片,按時(shí)間范圍分表-消息隊(duì)列處理高并發(fā)請(qǐng)求三、算法能力測試(3題,每題30分)1.題目:LRU緩存機(jī)制問題描述實(shí)現(xiàn)LRU(LeastRecentlyUsed)緩存機(jī)制,支持以下操作:-`get(key)`:獲取鍵對(duì)應(yīng)的值,如果不存在返回-1-`put(key,value)`:插入或更新鍵值對(duì),如果緩存已滿則刪除最久未使用的項(xiàng)要求-使用哈希表和雙向鏈表實(shí)現(xiàn)cpp#include<iostream>#include<unordered_map>#include<list>classLRUCache{private:intcapacity;std::unordered_map<int,std::pair<int,std::list<int>::iterator>>cache;std::list<int>lruList;public:LRUCache(intcapacity_):capacity(capacity_){}intget(intkey){autoit=cache.find(key);if(it==cache.end())return-1;lruList.erase(it->second.second);lruList.push_front(key);returnit->second.first;}voidput(intkey,intvalue){autoit=cache.find(key);if(it!=cache.end()){lruList.erase(it->second.second);lruList.push_front(key);it->second={value,lruList.begin()};}else{if(cache.size()==capacity){intoldKey=lruList.back();cache.erase(oldKey);lruList.pop_back();}lruList.push_front(key);cache[key]={value,lruList.begin()};}}};intmain(){LRUCachecache(2);cache.put(1,1);cache.put(2,2);std::cout<<cache.get(1)<<std::endl;//1cache.put(3,3);//去除鍵2std::cout<<cache.get(2)<<std::endl;//-1cache.put(4,4);//去除鍵1std::cout<<cache.get(1)<<std::endl;//-1std::cout<<cache.get(3)<<std::endl;//3std::cout<<cache.get(4)<<std::endl;//4return0;}2.題目:爬蟲:去重與優(yōu)先級(jí)問題描述設(shè)計(jì)一個(gè)簡單的網(wǎng)頁爬蟲,實(shí)現(xiàn)以下功能:1.從初始URL開始,遞歸抓取網(wǎng)頁2.去重已訪問的URL3.優(yōu)先抓取包含特定關(guān)鍵詞(如"華為")的頁面要求-使用BFS算法實(shí)現(xiàn)-使用HashSet存儲(chǔ)已訪問URLpythonfromcollectionsimportdequeimportrequestsfrombs4importBeautifulSoupclassWebCrawler:def__init__(self,start_url,keyword):self.visited=set()self.queue=deque()self.keyword=keywordself.queue.append(start_url)self.visited.add(start_url)defcrawl(self):whileself.queue:url=self.queue.popleft()cess_url(url)#獲取所有鏈接try:response=requests.get(url)soup=BeautifulSoup(response.text,'html.parser')forlinkinsoup.find_all('a',href=True):link_url=link['href']iflink_url.startswith('http')andlink_urlnotinself.visited:self.visited.add(link_url)ifself.keywordinlink_url:self.queue.appendleft(link_url)#高優(yōu)先級(jí)else:self.queue.append(link_url)except:continuedefprocess_url(self,url):print(f"Processing:{url}")#示例使用crawler=WebCrawler("","華為")crawler.crawl()3.題目:字符串匹配:KMP算法問題描述實(shí)現(xiàn)KMP(Knuth-Morris-Pratt)字符串匹配算法,計(jì)算模式串`pattern`在主串`text`中第一次出現(xiàn)的位置(從0開始),如果不存在返回-1。要求-編寫計(jì)算部分匹配表的函數(shù)和主函數(shù)cpp#include<iostream>#include<vector>std::vector<int>computeLPSArray(conststd::string&pattern){intn=pattern.size();std::vector<int>lps(n,0);intlength=0;inti=1;while(i<n){if(pattern[i]==pattern[length]){length++;lps[i]=length;i++;}else{if(length!=0){length=lps[length-1];}else{lps[i]=0;i++;}}}returnlps;}intKMPSearch(conststd::string&text,conststd::string&pattern){intm=pattern.size();intn=text.size();if(m==0)return0;std::vector<int>lps=computeLPSArray(pattern);inti=0;//text的索引intj=0;//pattern的索引while(i<n){if(pattern[j]==text[i]){i++;j++;}if(j==m){returni-j;}elseif(i<n&&pattern[j]!=text[i]){if(j!=0){j=lps[j-1];}else{i++;}}}return-1;}intmain(){std::stringtext="ABABDABACDABABCABAB";std::stringpattern="ABABCABAB";std::cout<<"Patternfoundatindex:"<<KMPSearch(text,pattern)<<std::endl;return0;}四、綜合能力測試(2題,每題20分)1.題目:數(shù)據(jù)庫索引優(yōu)化問題描述在一張包含百萬條記錄的用戶表中,有哪些字段適合建立索引?為什么?如何優(yōu)化索引?答案適合建立索引的字段1.查詢條件字段-主鍵(自增ID通常默認(rèn)索引)-搜索字段(如username,email)-篩選字段(如age,gender,city)2.排序和分組字段-order_by子句中使用的字段-group_by子句中使用的字段3.

溫馨提示

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

評(píng)論

0/150

提交評(píng)論