版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2026年華為公司技術(shù)總監(jiān)面試題及答案一、編程與算法(5題,每題15分,共75分)1.題目:實(shí)現(xiàn)一個(gè)函數(shù),輸入一個(gè)正整數(shù)`n`,返回`n`的“數(shù)字翻轉(zhuǎn)”結(jié)果。例如,輸入`123`,返回`321`;輸入`120`,返回`21`(注意:忽略前導(dǎo)零)。答案:cppintreverse(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ù)字,同時(shí)處理整數(shù)溢出問題。關(guān)鍵點(diǎn)在于判斷翻轉(zhuǎn)后的數(shù)字是否超出`int`范圍。2.題目:給定一個(gè)無重復(fù)元素的數(shù)組`nums`和一個(gè)目標(biāo)值`target`,找出所有相加等于`target`的三元組,并返回它們的列表。例如,輸入`[1,2,3,4,5]`和`9`,輸出`[[1,2,6],[1,3,5],[2,3,4]]`。答案:cppvector<vector<int>>threeSum(vector<int>&nums,inttarget){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;//去重intj=i+1,k=nums.size()-1;while(j<k){intsum=nums[i]+nums[j]+nums[k];if(sum==target){res.emplace_back({nums[i],nums[j],nums[k]});while(j<k&&nums[j]==nums[j+1])j++;//去重while(j<k&&nums[k]==nums[k-1])k--;j++;k--;}elseif(sum<target)j++;elsek--;}}returnres;}解析:排序后使用雙指針法,固定一個(gè)數(shù),然后用左右指針查找另外兩個(gè)數(shù)。注意去重避免重復(fù)解。3.題目:設(shè)計(jì)一個(gè)LRU(最近最少使用)緩存,支持`get`和`put`操作。緩存容量為`capacity`。例如:-`LRUCachecache=newLRUCache(2);`-`cache.put(1,1);`//緩存是{1=1}-`cache.put(2,2);`//緩存是{1=1,2=2}-`cache.get(1);`//返回1-`cache.put(3,3);`//去除鍵2,緩存是{1=1,3=3}-`cache.get(2);`//返回-1(未找到)答案:cppclassLRUCache{public:structNode{intkey,val;Nodeleft,right;Node(intk,intv):key(k),val(v),left(nullptr),right(nullptr){}};intcapacity;unordered_map<int,Node>cache;Nodehead,tail;LRUCache(intc):capacity(c),head(newNode(0,0)),tail(newNode(0,0)){head->right=tail;tail->left=head;}intget(intkey){if(cache.find(key)==cache.end())return-1;Nodenode=cache[key];moveToHead(node);returnnode->val;}voidput(intkey,intvalue){if(cache.find(key)!=cache.end()){Nodenode=cache[key];node->val=value;moveToHead(node);}else{Nodenode=newNode(key,value);cache[key]=node;addToHead(node);if(cache.size()>capacity){NodetoDel=tail->left;cache.erase(toDel->key);removeNode(toDel);deletetoDel;}}}voidmoveToHead(Nodenode){removeNode(node);addToHead(node);}voidaddToHead(Nodenode){node->left=head;node->right=head->right;head->right->left=node;head->right=node;}voidremoveNode(Nodenode){node->left->right=node->right;node->right->left=node->left;}};解析:使用雙向鏈表+哈希表實(shí)現(xiàn)。鏈表維護(hù)最近使用順序,哈希表快速訪問。`get`將節(jié)點(diǎn)移到頭部,`put`時(shí)若超出容量則刪除最久未使用的節(jié)點(diǎn)。4.題目:給定一個(gè)字符串`s`,找到其中最長(zhǎng)的回文子串的長(zhǎng)度。例如,輸入`s="babad"`,輸出`3`("bab"或"aba")。答案:cppintlongestPalindrome(strings){if(s.empty())return0;intn=s.size();vector<vector<bool>>dp(n,vector<bool>(n,false));intmaxLen=1;for(inti=0;i<n;++i)dp[i][i]=true;for(inti=n-2;i>=0;--i){for(intj=i+1;j<n;++j){if(s[i]==s[j]){if(j-i<=2)dp[i][j]=true;elsedp[i][j]=dp[i+1][j-1];}if(dp[i][j])maxLen=max(maxLen,j-i+1);}}returnmaxLen;}解析:動(dòng)態(tài)規(guī)劃解法。`dp[i][j]`表示`s[i..j]`是否為回文,狀態(tài)轉(zhuǎn)移依賴`dp[i+1][j-1]`。從短到長(zhǎng)枚舉子串,時(shí)間復(fù)雜度O(n2)。5.題目:實(shí)現(xiàn)一個(gè)線程安全的`CountDownLatch`類,支持`countDown`和`await`方法。例如:cppCountDownLatchlatch(3);Threadt1=newThread(latch::countDown);Threadt2=newThread(latch::countDown);t1.start();t2.start();latch.await();//等待所有線程計(jì)數(shù)歸零答案:javaimportjava.util.concurrent.atomic.AtomicInteger;importjava.util.concurrent.locks.LockSupport;publicclassCountDownLatch{privateAtomicIntegercount;privateThreadthread;publicCountDownLatch(intcount){if(count<0)thrownewIllegalArgumentException();this.count=newAtomicInteger(count);}publicvoidcountDown(){if(count.decrementAndGet()==0){LockSupport.unpark(thread);}}publicvoidawait(){thread=Thread.currentThread();while(count.get()>0){LockSupport.park();}}}解析:使用`AtomicInteger`保證計(jì)數(shù)原子性,當(dāng)計(jì)數(shù)歸零時(shí)喚醒等待的線程。`await`通過`LockSupport`實(shí)現(xiàn)阻塞與喚醒。二、系統(tǒng)設(shè)計(jì)(3題,每題25分,共75分)1.題目:設(shè)計(jì)一個(gè)高并發(fā)的短鏈接服務(wù)(如`tinyurl`)。要求:-支持高并發(fā)訪問,單鏈接支持百萬級(jí)請(qǐng)求。-短鏈接生成快速且唯一,支持自定義前綴。-支持通過短鏈接反查原始鏈接。答案:架構(gòu)設(shè)計(jì):1.短鏈接生成:-使用自增ID+Base62編碼(`a-z`,`A-Z`,`0-9`),如`1000`編碼為`1Lk`。-自定義前綴可通過哈希表映射到特定ID區(qū)間。2.存儲(chǔ):-Redis:存儲(chǔ)短鏈接與原始鏈接的映射(hash結(jié)構(gòu)),提供高并發(fā)讀寫。-MySQL:持久化數(shù)據(jù),支持自定義前綴和統(tǒng)計(jì)信息。3.分布式ID生成器(如TwitterSnowflake):-時(shí)間戳+機(jī)器ID+序列號(hào),保證唯一性。4.路由:-路由規(guī)則:`/prefix/slug`→查詢Redis獲取原始鏈接。5.緩存:-CDN緩存熱點(diǎn)短鏈接,降低后端壓力。技術(shù)選型:-前端:Nginx負(fù)載均衡。-中間件:Redis集群(主從+哨兵)。-后端:Java/Go+Snowflake+MySQL。解析:核心在于ID生成效率和Redis緩存。Base62編碼壓縮ID,分布式ID避免沖突。2.題目:設(shè)計(jì)一個(gè)實(shí)時(shí)推薦系統(tǒng),支持用戶根據(jù)行為(點(diǎn)擊、收藏)動(dòng)態(tài)更新推薦結(jié)果。要求:-支持10萬用戶實(shí)時(shí)更新,延遲<500ms。-推薦結(jié)果包含Top10商品,支持冷啟動(dòng)。答案:架構(gòu)設(shè)計(jì):1.數(shù)據(jù)采集:-Kafka集群收集用戶行為(點(diǎn)擊流),分區(qū)按用戶ID。2.特征計(jì)算:-Flink/SparkStreaming實(shí)時(shí)計(jì)算用戶興趣向量(如TF-IDF)。-Redis緩存用戶畫像,避免重復(fù)計(jì)算。3.協(xié)同過濾:-基于用戶的ItemCF(相似用戶購買過的商品)。-基于物品的UserCF(用戶購買過的相似物品)。4.冷啟動(dòng):-新用戶使用熱門商品或隨機(jī)推薦。5.服務(wù)層:-Nginx+Golang網(wǎng)關(guān),請(qǐng)求分發(fā)到不同推薦模型。-結(jié)果合并(如混合推薦)。技術(shù)選型:-流處理:Flink+Redis。-推薦算法:SparkMLlib離線預(yù)訓(xùn)練+在線更新。解析:關(guān)鍵在于實(shí)時(shí)計(jì)算與緩存。冷啟動(dòng)通過熱門商品兜底。3.題目:設(shè)計(jì)一個(gè)全球分布式數(shù)據(jù)庫的讀寫緩存層,要求:-支持跨區(qū)域讀寫,延遲<50ms。-數(shù)據(jù)一致性采用最終一致性。答案:架構(gòu)設(shè)計(jì):1.緩存層級(jí):-Level1:本地內(nèi)存緩存(L1Cache,如RedisCluster)。-Level2:分布式緩存(如Memcached+DNS輪詢)。2.數(shù)據(jù)同步:-Raft/Paxos協(xié)議保證主節(jié)點(diǎn)寫入一致性。-異步復(fù)制到從節(jié)點(diǎn)(如Cassandra)。3.負(fù)載均衡:-DNS聯(lián)邦(如Consul)動(dòng)態(tài)解析區(qū)域節(jié)點(diǎn)。-負(fù)載均衡器(如HAProxy)分配請(qǐng)求。4.最終一致性策略:-讀請(qǐng)求優(yōu)先命中緩存,寫請(qǐng)求先更新本地緩存,異步同步后端。-使用TTL避免過期數(shù)據(jù)。技術(shù)選型:-緩存:RedisCluster+Memcached。-數(shù)據(jù)庫:Cassandra/LevelDB。解析:核心在于本地緩存+異步同步,DNS聯(lián)邦實(shí)現(xiàn)跨區(qū)域負(fù)載。三、分布式與架構(gòu)(2題,每題25分,共50分)1.題目:設(shè)計(jì)一個(gè)分布式事務(wù)系統(tǒng),要求:-支持2PC或3PC協(xié)議,保證強(qiáng)一致性。-兼容分布式環(huán)境下的網(wǎng)絡(luò)分區(qū)和節(jié)點(diǎn)故障。答案:架構(gòu)設(shè)計(jì):1.2PC協(xié)議:-協(xié)調(diào)者向參與者發(fā)送`Prepare`請(qǐng)求,參與者預(yù)提交。-全部`Prepare`成功則發(fā)送`Commit`,否則`Abort`。2.3PC改進(jìn):-增加超時(shí)機(jī)制,防止阻塞。3.故障處理:-參與者超時(shí)重試,協(xié)調(diào)者掛起后由副協(xié)調(diào)者接管。4.補(bǔ)償事務(wù):-異步執(zhí)行補(bǔ)償邏輯,如消息隊(duì)列(Kafka)觸發(fā)回滾。技術(shù)選型:-分布式事務(wù)框架:Seata/TCC。-消息隊(duì)列:RabbitMQ保證消息可靠性。解析:2PC強(qiáng)一致性但阻塞,3PC緩解但實(shí)現(xiàn)復(fù)雜。結(jié)合消息隊(duì)列提高容錯(cuò)性。2.題目:設(shè)計(jì)一個(gè)分布式任務(wù)調(diào)度系統(tǒng)(如`Quartz`),要求:-支持定時(shí)任務(wù)、延遲任務(wù)、周期任務(wù)。-保證任務(wù)不丟失,支持集群部署。答案:架構(gòu)設(shè)計(jì):1.任務(wù)存儲(chǔ):-MySQL/Redis存儲(chǔ)任務(wù)元數(shù)據(jù)(cron表達(dá)式、參數(shù)等)。-Redis緩存任務(wù)狀態(tài)(運(yùn)行中/待執(zhí)行)。2.調(diào)度器
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020醫(yī)院財(cái)務(wù)管理制度(3篇)
- 醫(yī)院投資籌資管理制度匯編(3篇)
- 新冠肺炎院內(nèi)管理制度(3篇)
- 施工現(xiàn)場(chǎng)美化管理制度(3篇)
- 月季的草坪養(yǎng)護(hù)管理制度(3篇)
- 道路公共照明用電管理制度(3篇)
- 防控疫情登記管理制度(3篇)
- 鞋廠開發(fā)部管理制度(3篇)
- 養(yǎng)老院入住申請(qǐng)制度
- 企業(yè)績(jī)效評(píng)估與獎(jiǎng)懲制度
- 2024版2026春新教科版科學(xué)三年級(jí)下冊(cè)教學(xué)課件:第一單元4.磁極與方向含2個(gè)微課視頻
- 培訓(xùn)保安課件
- “黨的二十屆四中全會(huì)精神”專題題庫及答案
- 2025屆高考小說專題復(fù)習(xí)-小說敘事特征+課件
- 部編版二年級(jí)下冊(cè)寫字表字帖(附描紅)
- GB/T 5657-2013離心泵技術(shù)條件(Ⅲ類)
- GB/T 3518-2008鱗片石墨
- GB/T 17622-2008帶電作業(yè)用絕緣手套
- GB/T 1041-2008塑料壓縮性能的測(cè)定
- 400份食物頻率調(diào)查問卷F表
- 滑坡地質(zhì)災(zāi)害治理施工
評(píng)論
0/150
提交評(píng)論