華為研發(fā)部面試題目及高分秘籍_第1頁
華為研發(fā)部面試題目及高分秘籍_第2頁
華為研發(fā)部面試題目及高分秘籍_第3頁
華為研發(fā)部面試題目及高分秘籍_第4頁
華為研發(fā)部面試題目及高分秘籍_第5頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2026年華為研發(fā)部面試題目及高分秘籍一、編程與算法(共5題,每題10分,總分50分)1.題目:實現(xiàn)一個函數(shù),輸入一個正整數(shù)`n`,返回`n`的漢明重量(即二進制表示中`1`的個數(shù))。要求時間復雜度為O(logn)。答案:cppinthammingWeight(intn){intcount=0;while(n!=0){count+=n&1;n>>=1;}returncount;}解析:通過位運算逐位檢查`n`的二進制表示,每次右移一位并統(tǒng)計`1`的數(shù)量。時間復雜度為O(logn),因為每次右移都會減少一位。2.題目:給定一個字符串`s`,返回其中不重復字符的最長子串的長度。例如,輸入`"abcabcbb"`,輸出`"abc"`的長度3。答案:cppintlengthOfLongestSubstring(strings){unordered_map<char,int>last;intleft=0,maxLen=0;for(intright=0;right<s.size();++right){if(last.find(s[right])!=last.end()){left=max(left,last[s[right]]+1);}last[s[right]]=right;maxLen=max(maxLen,right-left+1);}returnmaxLen;}解析:使用滑動窗口技術,`left`和`right`分別表示窗口的左右邊界。通過哈希表記錄每個字符上一次出現(xiàn)的位置,當重復字符出現(xiàn)時,將`left`移動到重復字符的下一個位置。3.題目:設計一個LRU(最近最少使用)緩存,支持容量`capacity`。操作包括`get(key)`和`put(key,value)`,要求時間復雜度為O(1)。答案:cppclassLRUCache{public:structNode{intkey,value;Nodeprev,next;Node(intk,intv):key(k),value(v),prev(nullptr),next(nullptr){}};unordered_map<int,Node>cache;Nodehead=newNode(0,0),tail=newNode(0,0);intcapacity;LRUCache(intcap):capacity(cap){head->next=tail;tail->prev=head;}intget(intkey){if(cache.find(key)==cache.end())return-1;Nodenode=cache[key];moveToHead(node);returnnode->value;}voidput(intkey,intvalue){if(cache.find(key)!=cache.end()){Nodenode=cache[key];node->value=value;moveToHead(node);}else{Nodenode=newNode(key,value);cache[key]=node;addToHead(node);if(cache.size()>capacity){NodetoDel=tail->prev;removeNode(toDel);cache.erase(toDel->key);deletetoDel;}}}voidmoveToHead(Nodenode){removeNode(node);addToHead(node);}voidaddToHead(Nodenode){node->prev=head;node->next=head->next;head->next->prev=node;head->next=node;}voidremoveNode(Nodenode){node->prev->next=node->next;node->next->prev=node->prev;}};解析:使用雙向鏈表和哈希表實現(xiàn)。鏈表頭部表示最近使用,尾部表示最少使用。哈希表記錄鍵到鏈表節(jié)點的映射,確保O(1)時間復雜度。4.題目:給定一個`nxn`的二維矩陣,原地旋轉矩陣90度。例如,輸入`[[1,2,3],[4,5,6],[7,8,9]]`,輸出`[[7,4,1],[8,5,2],[9,6,3]]`。答案:cppvoidrotate(vector<vector<int>>&matrix){intn=matrix.size();for(inti=0;i<n/2;++i){for(intj=0;j<(n+1)/2;++j){inttemp=matrix[i][j];matrix[i][j]=matrix[n-j-1][i];matrix[n-j-1][i]=matrix[n-i-1][n-j-1];matrix[n-i-1][n-j-1]=matrix[j][n-i-1];matrix[j][n-i-1]=temp;}}}解析:通過分層旋轉,每次旋轉四個角的元素。外層旋轉完成后,繼續(xù)旋轉內層,直到所有層完成。時間復雜度為O(n2)。5.題目:實現(xiàn)一個函數(shù),判斷一個鏈表是否為回文鏈表。例如,輸入`1->2->2->1`,返回`true`。答案:cppboolisPalindrome(ListNodehead){if(!head||!head->next)returntrue;ListNodeslow=head,fast=head;while(fast->next&&fast->next->next){slow=slow->next;fast=fast->next->next;}ListNodesecondHalf=reverseList(slow->next);ListNodefirstHalf=head;while(secondHalf){if(firstHalf->val!=secondHalf->val)returnfalse;firstHalf=firstHalf->next;secondHalf=secondHalf->next;}reverseList(secondHalf);//還原鏈表returntrue;}ListNodereverseList(ListNodehead){ListNodeprev=nullptr;while(head){ListNodenext=head->next;head->next=prev;prev=head;head=next;}returnprev;}解析:通過快慢指針找到鏈表中間位置,反轉后半部分,然后比較前后半部分是否相同。最后還原鏈表。時間復雜度為O(n),空間復雜度為O(1)。二、系統(tǒng)設計(共3題,每題15分,總分45分)1.題目:設計一個高并發(fā)的短鏈接系統(tǒng)。用戶輸入長鏈接,系統(tǒng)返回短鏈接,點擊短鏈接后自動跳轉到長鏈接。要求:-短鏈接長度不超過6位,使用字母和數(shù)字組合。-支持高并發(fā)訪問,秒級響應。-可靠的短鏈接生成與映射。答案:系統(tǒng)架構:1.短鏈接生成:使用哈希函數(shù)(如CRC32+Base62編碼)將長鏈接映射為6位短鏈接。-例如,CRC32長鏈接->Base62編碼->6位短鏈接。2.存儲層:使用Redis作為緩存,存儲短鏈接到長鏈接的映射,TTL設為24小時。若Redis命中則直接返回,否則查詢數(shù)據(jù)庫(MySQL)。3.數(shù)據(jù)庫設計:sqlCREATETABLEshortlinks(idINTAUTO_INCREMENTPRIMARYKEY,long_urlVARCHAR(2048),short_codeCHAR(6),created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);4.高并發(fā)處理:-使用Nginx做負載均衡,水平擴展應用服務器。-應用層使用無鎖數(shù)據(jù)結構(如原子操作)生成短鏈接,避免鎖競爭。解析:-短鏈接生成:CRC32保證唯一性,Base62減少長度(a-z,0-9)。-緩存策略:Redis降低數(shù)據(jù)庫壓力,TTL防止長鏈接過期。-高并發(fā):Nginx分攤請求,原子操作確保短鏈接生成效率。2.題目:設計一個實時消息推送系統(tǒng)(如微信、抖音)。用戶訂閱主題,系統(tǒng)將相關消息推送給訂閱者。要求:-支持海量用戶和消息,延遲低(毫秒級)。-可靠的消息分發(fā),不丟失。-支持主題訂閱和退訂。答案:系統(tǒng)架構:1.消息隊列:使用Kafka作為消息中間件,處理高吞吐量的消息分發(fā)。2.訂閱管理:-用戶表存儲用戶ID和訂閱的主題列表。-使用Redis發(fā)布/訂閱(Pub/Sub)實現(xiàn)實時通知。3.消息分發(fā):-用戶訂閱主題時,將用戶ID加入Redis頻道。-消息到達時,Kafka推送至所有訂閱該主題的消費者(Nginx負載均衡)。4.可靠性保障:-消息持久化到磁盤,確保不丟失。-消息確認機制(ACK),重試策略。解析:-Kafka:高吞吐量、持久化,適合大規(guī)模消息分發(fā)。-RedisPub/Sub:實時通知,避免長輪詢。-可靠性:持久化和ACK機制確保消息不丟失。3.題目:設計一個分布式限流系統(tǒng),防止API被過度調用。要求:-支持按IP或用戶ID限流。-限流規(guī)則可配置(如每秒最多100次請求)。-低延遲,不影響正常訪問。答案:系統(tǒng)架構:1.滑動窗口:-每個用戶/IP使用一個滑動窗口計數(shù)器(如Redis的HyperLogLog)。-窗口分為固定大小的時間段(如每100ms一個窗口),統(tǒng)計請求次數(shù)。2.限流邏輯:-請求時,檢查當前窗口的請求次數(shù)是否超過閾值。-若超過,拒絕請求;否則,記錄請求并允許通過。3.配置中心:-使用Nacos或Zookeeper動態(tài)調整限流閾值。解析:-滑動窗口:避免固定窗口的冷熱數(shù)據(jù)問題。-RedisHyperLogLog:高效統(tǒng)計請求次數(shù)。-動態(tài)配置:適應不同業(yè)務場景。三、數(shù)據(jù)庫與中間件(共2題,每題10分,總分20分)1.題目:設計一個高并發(fā)的訂單系統(tǒng)數(shù)據(jù)庫表。訂單ID自增,包含用戶ID、商品ID、金額、狀態(tài)(待支付、已支付、已取消),要求支持高并發(fā)寫入。答案:表設計:sqlCREATETABLEorders(idBIGINTAUTO_INCREMENTPRIMARYKEY,user_idBIGINTNOTNULL,product_idBIGINTNOTNULL,amountDECIMAL(10,2)NOTNULL,statusENUM('pending','paid','cancelled')NOTNULL,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP,updated_atTIMESTAMPDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,INDEXidx_user_id(user_id),INDEXidx_product_id(product_id),INDEXidx_status(status));優(yōu)化:-使用InnoDB引擎,支持行級鎖。-主鍵自增,分布式ID生成器(如TwitterSnowflake)。-索引覆蓋`user_id`、`product_id`、`status`,加速查詢。解析:-InnoDB:支持事務和行級鎖,適合高并發(fā)寫入。-索引:加速常用查詢,如按用戶或商品查訂單。2.題目:比較RabbitMQ和Kafka的優(yōu)缺點,說明在哪些場景下選擇哪個。答案:RabbitMQ:-優(yōu)點:-支持多種消息協(xié)議(AMQP)。-可靠的消息投遞,確保消息不丟失。-提供工作隊列、發(fā)布/訂閱等模式。-缺點:-延遲相對較高(毫秒級)。-單節(jié)點性能瓶頸明顯。Kafka:-優(yōu)點:-低延遲(微秒級),適合實時數(shù)據(jù)處理。-高吞吐量,單集群支持TB級數(shù)據(jù)。-分區(qū)設計,支持水平擴展。-缺點:-不支持事務消息(需結合其他方案)。-配置復雜,運維成本高。場景選擇:-RabbitMQ:順序消息、消息確認場景(如訂單處理)。-Kafka:實時日志、流處理場景(如用戶行為分析)。解析:-RabbitMQ:適合可靠性要求高的業(yè)務。-Kafka:適合高吞吐、低延遲的場景。四、網絡與分布式(共2題,每題10分,總分20分)1.題目:解釋TCP的三次握手過程,為什么不能省略任何一次?答案:三次握手:1.SYN:客戶端發(fā)送SYN=1,隨機初始化seq=x,請求建立連接。2.SYN+ACK:服務器回復SYN=1,ACK=1,seq=y,ack=x+1。3.ACK:客戶端回復ACK=1,seq=x+1,ack=y+1,連接建立。為什么不能省略:-防止歷史連接重放:-若省略SYN+ACK,服務器可能收到舊的SYN請求,導致誤連接。-確保雙方時鐘同步:-ACK確認防止發(fā)送方超時重發(fā),保證雙方狀態(tài)一致。解析:-時序同步:三次握手確保雙方都確認連接狀態(tài)。-防止重放:隨機seq+ack避免歷史連接干擾。2.題目:解釋CAP理論,為什么分布式系統(tǒng)通常選擇CA(一致性、可用性、分區(qū)容錯性)?答案:CAP理論:-一致性(Consistency):所有節(jié)點在同一時間具有相同數(shù)據(jù)。-可用性(Availability):

溫馨提示

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

最新文檔

評論

0/150

提交評論