華為公司招聘工程師面試題及答案詳解_第1頁
華為公司招聘工程師面試題及答案詳解_第2頁
華為公司招聘工程師面試題及答案詳解_第3頁
華為公司招聘工程師面試題及答案詳解_第4頁
華為公司招聘工程師面試題及答案詳解_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

2026年華為公司招聘工程師面試題及答案詳解一、編程題(3題,每題20分,共60分)1.題目(20分):編寫一個(gè)函數(shù),實(shí)現(xiàn)將一個(gè)字符串中的所有大寫字母轉(zhuǎn)換為小寫字母,所有小寫字母轉(zhuǎn)換為大寫字母,其他字符保持不變。例如,輸入`"HelloWorld!2026"`,輸出`"hELLOwORLD!2026"`。要求不使用內(nèi)置的`swapCase`方法,并考慮字符串可能包含特殊字符和數(shù)字。答案與解析:pythondefswap_case(s:str)->str:result=[]forcharins:if'a'<=char<='z':result.append(char.upper())elif'A'<=char<='Z':result.append(char.lower())else:result.append(char)return''.join(result)解析:-遍歷字符串中的每個(gè)字符,判斷其是否為小寫字母(`'a'<=char<='z'`)或大寫字母(`'A'<=char<='Z'`)。-小寫字母通過`char.upper()`轉(zhuǎn)換為大寫,大寫字母通過`char.lower()`轉(zhuǎn)換為小寫。-其他字符(如數(shù)字、標(biāo)點(diǎn)符號)保持不變。-使用列表`result`收集轉(zhuǎn)換后的字符,最后通過`join`方法合并為字符串。-時(shí)間復(fù)雜度:O(n),n為字符串長度;空間復(fù)雜度:O(n)。2.題目(20分):給定一個(gè)鏈表,刪除鏈表中的倒數(shù)第n個(gè)節(jié)點(diǎn),并返回新的鏈表頭。例如,輸入鏈表`[1,2,3,4,5]`,n=2,刪除后鏈表為`[1,2,3,5]`。要求只遍歷一次鏈表,不使用額外的空間。答案與解析:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefremove_nth_from_end(head:ListNode,n:int)->ListNode:dummy=ListNode(0)dummy.next=headfast=slow=dummy快指針先走n+1步for_inrange(n+1):fast=fast.next快慢指針同時(shí)移動(dòng),當(dāng)快指針到達(dá)末尾時(shí),慢指針指向待刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)whilefast:fast=fast.nextslow=slow.next刪除節(jié)點(diǎn)slow.next=slow.next.nextreturndummy.next解析:-使用雙指針法,創(chuàng)建虛擬頭節(jié)點(diǎn)`dummy`以處理頭節(jié)點(diǎn)被刪除的情況。-快指針`fast`先走`n+1`步,確保刪除節(jié)點(diǎn)時(shí)慢指針`slow`指向待刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)。-快慢指針同時(shí)移動(dòng),當(dāng)快指針到達(dá)末尾時(shí),慢指針指向待刪除節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn)。-刪除節(jié)點(diǎn):`slow.next=slow.next.next`。-時(shí)間復(fù)雜度:O(n);空間復(fù)雜度:O(1)。3.題目(20分):設(shè)計(jì)一個(gè)LRU(LeastRecentlyUsed)緩存,支持`get`和`put`操作。緩存容量為`capacity`,`get(key)`返回鍵對應(yīng)的值,如果不存在返回-1;`put(key,value)`將鍵值對插入緩存,如果鍵已存在則更新值,如果超出容量則刪除最久未使用的鍵。要求使用哈希表和雙向鏈表實(shí)現(xiàn)。答案與解析:pythonclassListNode:def__init__(self,key=0,value=0,prev=None,next=None):self.key=keyself.value=valueself.prev=prevself.next=nextclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head=ListNode()self.tail=ListNode()self.head.next=self.tailself.tail.prev=self.headdefget(self,key:int)->int:ifkeynotinself.cache:return-1node=self.cache[key]self._move_to_head(node)returnnode.valuedefput(self,key:int,value:int)->None:ifkeyinself.cache:node=self.cache[key]node.value=valueself._move_to_head(node)else:iflen(self.cache)==self.capacity:self._remove_tail()new_node=ListNode(key,value)self.cache[key]=new_nodeself._add_to_head(new_node)def_move_to_head(self,node:ListNode)->None:self._remove_node(node)self._add_to_head(node)def_remove_node(self,node:ListNode)->None:node.prev.next=node.nextnode.next.prev=node.prevdef_add_to_head(self,node:ListNode)->None:node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_tail(self)->None:tail=self.tail.prevself._remove_node(tail)delself.cache[tail.key]解析:-使用哈希表`cache`存儲鍵和節(jié)點(diǎn),雙向鏈表`head`和`tail`維護(hù)最近使用順序。-`get(key)`:若鍵存在,移動(dòng)節(jié)點(diǎn)到鏈表頭部并返回值;否則返回-1。-`put(key,value)`:-若鍵已存在,更新值并移動(dòng)到鏈表頭部。-若鍵不存在,若緩存已滿,刪除鏈表尾部節(jié)點(diǎn)(最久未使用),插入新節(jié)點(diǎn)到鏈表頭部。-輔助方法:-`_move_to_head(node)`:將節(jié)點(diǎn)移動(dòng)到鏈表頭部。-`_remove_node(node)`:刪除鏈表中的節(jié)點(diǎn)。-`_add_to_head(node)`:將節(jié)點(diǎn)插入鏈表頭部。-`_remove_tail()`:刪除鏈表尾部節(jié)點(diǎn)。-時(shí)間復(fù)雜度:O(1);空間復(fù)雜度:O(capacity)。二、算法題(2題,每題25分,共50分)1.題目(25分):給定一個(gè)無序數(shù)組`nums`和一個(gè)目標(biāo)值`target`,找出數(shù)組中和為目標(biāo)值的三元組個(gè)數(shù)。要求不重復(fù)計(jì)算相同的三元組。例如,輸入`nums=[-1,0,1,2,-1,-4]`,`target=0`,輸出`[(-1,-1,2),(-1,0,1)]`的數(shù)量為2。答案與解析:pythondefthree_sum(nums:list,target:int)->int:nums.sort()n=len(nums)count=0foriinrange(n-2):ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,n-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal==target:count+=1left_val=nums[left]right_val=nums[right]whileleft<rightandnums[left]==left_val:left+=1whileleft<rightandnums[right]==right_val:right-=1eliftotal<target:left+=1else:right-=1returncount解析:-先對數(shù)組排序,方便使用雙指針法。-遍歷數(shù)組,對于每個(gè)`nums[i]`,使用雙指針`left`和`right`在`i`后面尋找`nums[left]+nums[right]==target-nums[i]`。-若找到三元組,移動(dòng)`left`和`right`指針跳過重復(fù)值,避免重復(fù)計(jì)算。-時(shí)間復(fù)雜度:O(n2);空間復(fù)雜度:O(1)。2.題目(25分):給定一個(gè)二叉樹,判斷其是否是平衡二叉樹。平衡二叉樹的定義是:對于任意節(jié)點(diǎn),其左右子樹的高度差不超過1。例如,輸入`[3,9,20,None,None,15,7]`,輸出`True`。答案與解析:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefis_balanced(root:TreeNode)->bool:defcheck(node:TreeNode)->int:ifnotnode:return0left_height=check(node.left)right_height=check(node.right)ifleft_height==-1orright_height==-1orabs(left_height-right_height)>1:return-1returnmax(left_height,right_height)+1returncheck(root)!=-1解析:-使用遞歸函數(shù)`check(node)`計(jì)算節(jié)點(diǎn)的高度,若不平衡則返回-1。-對于每個(gè)節(jié)點(diǎn),分別計(jì)算左子樹和右子樹的高度:-若左子樹或右子樹不平衡(高度為-1),或左右子樹高度差超過1,則整棵樹不平衡。-否則,節(jié)點(diǎn)高度為左右子樹最大高度加1。-最終,若`check(root)`不為-1,則樹平衡。-時(shí)間復(fù)雜度:O(n);空間復(fù)雜度:O(h),h為樹的高度。三、系統(tǒng)設(shè)計(jì)題(1題,25分)1.題目(25分):設(shè)計(jì)一個(gè)短鏈接服務(wù),用戶輸入長鏈接,服務(wù)返回短鏈接,點(diǎn)擊短鏈接后重定向到長鏈接。要求支持高并發(fā)、高可用,并具備一定的安全性。說明主要組件、數(shù)據(jù)結(jié)構(gòu)、算法和部署方案。答案與解析:主要組件:1.API接口層(負(fù)載均衡):接收用戶的長鏈接請求,返回短鏈接。使用Nginx或HAProxy進(jìn)行負(fù)載均衡。2.服務(wù)層(無狀態(tài)):處理請求,生成短鏈接,查詢短鏈接對應(yīng)的長鏈接。3.數(shù)據(jù)庫:存儲長鏈接和短鏈接的映射關(guān)系,使用Redis(高速緩存)或MySQL(持久化)。4.緩存層(可選):使用Redis緩存熱點(diǎn)短鏈接,減少數(shù)據(jù)庫查詢。5.反向代理/CDN:高并發(fā)時(shí)使用反向代理緩存靜態(tài)資源,CDN進(jìn)一步加速全球訪問。數(shù)據(jù)結(jié)構(gòu):-短鏈接生成:使用Base62編碼(a-z,A-Z,0-9),將ID轉(zhuǎn)換為短字符串。例如,`123`轉(zhuǎn)為`1y2`。-數(shù)據(jù)庫表:-`id`(自增主鍵)-`long_url`(長鏈接)-`short_code`(短鏈接碼)-`click_count`(點(diǎn)擊次數(shù))-`created_at`(創(chuàng)建時(shí)間)算法:1.生成短鏈接碼:-生成唯一ID(如自增ID或Snowflake算法)。-ID轉(zhuǎn)為Base62:`id%62`

溫馨提示

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

最新文檔

評論

0/150

提交評論