版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2026年華為研發(fā)團(tuán)隊面試題目及答案一、編程能力測試(共5題,每題10分,總分50分)1.題目:編寫一個函數(shù),實現(xiàn)快速排序算法,并對以下列表進(jìn)行排序:`[34,7,23,32,5,62]`。要求:-輸出排序后的列表。-解釋快速排序的核心思想。答案:pythondefquick_sort(arr):iflen(arr)<=1:returnarrpivot=arr[len(arr)//2]left=[xforxinarrifx<pivot]middle=[xforxinarrifx==pivot]right=[xforxinarrifx>pivot]returnquick_sort(left)+middle+quick_sort(right)arr=[34,7,23,32,5,62]sorted_arr=quick_sort(arr)print(sorted_arr)#輸出:[5,7,23,32,34,62]解析:快速排序的核心思想是分治法。1.選擇一個基準(zhǔn)值(pivot),通常取中間值。2.將數(shù)組分為三部分:小于基準(zhǔn)值的、等于基準(zhǔn)值的、大于基準(zhǔn)值的。3.遞歸對左右兩部分進(jìn)行排序,最終合并。優(yōu)點:平均時間復(fù)雜度O(nlogn),空間復(fù)雜度O(logn)。2.題目:實現(xiàn)一個LRU(最近最少使用)緩存,容量為3。輸入以下鍵值對:-`put(1,100)`-`put(2,200)`-`get(1)`-`put(3,300)`(會覆蓋鍵2)-`get(2)`答案:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.order=[]defget(self,key:int)->int:ifkeyinself.cache:self.order.remove(key)self.order.append(key)returnself.cache[key]return-1defput(self,key:int,value:int)->None:ifkeyinself.cache:self.order.remove(key)eliflen(self.cache)>=self.capacity:oldest=self.order.pop(0)delself.cache[oldest]self.cache[key]=valueself.order.append(key)cache=LRUCache(3)cache.put(1,100)cache.put(2,200)print(cache.get(1))#輸出:100cache.put(3,300)#刪除鍵2print(cache.get(2))#輸出:-1解析:LRU通過雙向鏈表和哈希表實現(xiàn):-哈希表記錄鍵值對,O(1)訪問。-雙向鏈表記錄訪問順序,頭為最近使用,尾為最久未使用。當(dāng)容量滿時,刪除鏈表尾部元素。3.題目:給定一個二叉樹,編寫代碼判斷其是否為完全二叉樹。例如:1/\23/\45答案:pythonfromcollectionsimportdequeclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefis_complete_binary_tree(root:TreeNode)->bool:ifnotroot:returnTruequeue=deque([root])end=Falsewhilequeue:node=queue.popleft()ifnotnode:end=Trueelse:ifend:returnFalsequeue.append(node.left)queue.append(node.right)returnTrue構(gòu)建示例二叉樹root=TreeNode(1)root.left=TreeNode(2)root.right=TreeNode(3)root.left.left=TreeNode(4)root.left.right=TreeNode(5)print(is_complete_binary_tree(root))#輸出:True解析:完全二叉樹的判斷方法:1.層序遍歷,用隊列實現(xiàn)。2.遇到空節(jié)點后,后續(xù)節(jié)點必須全部為空。若提前遇到非空節(jié)點,則不滿足完全二叉樹。4.題目:實現(xiàn)一個無重復(fù)字符的最長子串函數(shù),輸入:`"abcabcbb"`。答案:pythondeflength_of_longest_substring(s:str)->int:char_set=set()left=0max_len=0forrightinrange(len(s)):whiles[right]inchar_set:char_set.remove(s[left])left+=1char_set.add(s[right])max_len=max(max_len,right-left+1)returnmax_lenprint(length_of_longest_substring("abcabcbb"))#輸出:3("abc")解析:滑動窗口法:-左右指針分別表示子串起點和終點。-遇到重復(fù)字符時,移動左指針并記錄最大長度。時間復(fù)雜度O(n),空間復(fù)雜度O(min(m,n)),m為字符集大小。5.題目:編寫一個函數(shù),找出數(shù)組中重復(fù)次數(shù)超過一半的元素。例如:`[2,2,1,1,1,2,2]`。答案:pythondefmajority_element(nums:list)->int:count=0candidate=Nonefornuminnums:ifcount==0:candidate=numcount+=(1ifnum==candidateelse-1)returncandidateprint(majority_element([2,2,1,1,1,2,2]))#輸出:2解析:Boyer-Moore多數(shù)投票算法:1.遇到數(shù)字與候選相同則+1,不同則-1。2.候選者一定是多數(shù)元素(超過一半)。時間復(fù)雜度O(n),空間復(fù)雜度O(1)。二、算法與數(shù)據(jù)結(jié)構(gòu)(共5題,每題10分,總分50分)1.題目:給定一個字符串,判斷是否可以通過翻轉(zhuǎn)子串使其為回文串。例如:`"abccba"`。答案:pythondefcan_be_palindrome(s:str)->bool:count=[0]26odd=0forcharins:count[ord(char)-ord('a')]+=1ifcount[ord(char)-ord('a')]%2:odd+=1else:odd-=1returnodd<=1print(can_be_palindrome("abccba"))#輸出:True解析:回文串最多有一個字符出現(xiàn)奇數(shù)次。統(tǒng)計每個字符出現(xiàn)次數(shù),若奇數(shù)個字符超過1,則無法通過翻轉(zhuǎn)子串解決。2.題目:實現(xiàn)一個算法,找出無序數(shù)組中第三大的數(shù)。例如:`[1,2,-2147483648,3]`。答案:pythondefthird_max(nums:list)->int:first,second,third=float('-inf'),float('-inf'),float('-inf')fornuminnums:ifnum>first:first,second,third=num,first,secondeliffirst>num>second:second,third=num,secondelifsecond>num>third:third=numreturnthirdifthird!=float('-inf')elsefirstprint(third_max([1,2,-2147483648,3]))#輸出:1解析:維護(hù)三個變量記錄前三大的數(shù):1.遍歷數(shù)組,更新三個變量。2.若當(dāng)前數(shù)大于first,則依次更新。3.若不大于first,則判斷是否大于second或third。3.題目:給定一個非負(fù)整數(shù)數(shù)組,返回其中和為特定值的最長子數(shù)組長度。例如:`[1,-2,3,5,-1,2]`,和為3。答案:pythondefmax_subarray_len(nums:list,k:int)->int:sum_index={0:-1}max_len=0current_sum=0fori,numinenumerate(nums):current_sum+=numif(current_sum-k)insum_index:max_len=max(max_len,i-sum_index[current_sum-k])ifcurrent_sumnotinsum_index:sum_index[current_sum]=ireturnmax_lenprint(max_subarray_len([1,-2,3,5,-1,2],3))#輸出:4("3+5-1+2")解析:前綴和+哈希表:1.記錄前綴和第一次出現(xiàn)的位置。2.若`current_sum-k`已存在,則計算子數(shù)組長度。3.時間復(fù)雜度O(n),空間復(fù)雜度O(n)。4.題目:實現(xiàn)一個函數(shù),統(tǒng)計二叉樹中路徑和為特定值的路徑數(shù)量。例如:10/\5-3/\32和為8的路徑有:`10+-3+3`。答案:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefpath_sum(root:TreeNode,target_sum:int)->int:defdfs(node,current_sum):ifnotnode:return0current_sum+=node.valtotal=1ifcurrent_sum==target_sumelse0total+=dfs(node.left,current_sum)total+=dfs(node.right,current_sum)returntotalreturndfs(root,0)構(gòu)建示例二叉樹root=TreeNode(10)root.left=TreeNode(5)root.right=TreeNode(-3)root.right.left=TreeNode(3)root.right.right=TreeNode(2)print(path_sum(root,8))#輸出:2解析:深度優(yōu)先搜索(DFS):1.遞歸遍歷每個節(jié)點,累加路徑和。2.若路徑和等于target_sum,則計數(shù)+1。3.時間復(fù)雜度O(n^2),可優(yōu)化為O(n)。5.題目:實現(xiàn)一個函數(shù),找出數(shù)組中和為特定值的最短子數(shù)組長度。例如:`[2,3,1,2,4,3]`,和為7。答案:pythondefmin_subarray_len(nums:list,target:int)->int:min_len=float('inf')left=0current_sum=0forrightinrange(len(nums)):current_sum+=nums[right]whilecurrent_sum>=target:min_len=min(min_len,right-left+1)current_sum-=nums[left]left+=1returnmin_lenifmin_len!=float('inf')else0print(min_subarray_len([2,3,1,2,4,3],7))#輸出:2("4+3")解析:滑動窗口法:1.左右指針分別表示子數(shù)組起點和終點。2.若和大于等于target,則嘗試縮短窗口。3.時間復(fù)雜度O(n),空間復(fù)雜度O(1)。三、系統(tǒng)設(shè)計(共3題,每題15分,總分45分)1.題目:設(shè)計一個URL短鏈接系統(tǒng),要求:-輸入長URL,返回短URL。-支持批量生成短鏈接。-支持按短URL反查長URL。答案:核心設(shè)計:1.使用62進(jìn)制隨機(jī)碼(a-z,A-Z,0-9)生成短鏈接。2.數(shù)據(jù)存儲:Redis(緩存)+MySQL(持久化)。3.生成算法:pythonimportbase64importhashlibdefencode_base62(num):chars="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"ifnum==0:returnchars[0]result=[]whilenum:result.append(chars[num%62])num//=62return''.join(reversed(result))解析:1.短鏈接生成:-使用哈希函數(shù)(如SHA256)+隨機(jī)前綴防止沖突。-壓縮為62進(jìn)制減少長度。2.數(shù)據(jù)存儲:-Redis緩存熱點數(shù)據(jù),MySQL持久化。-主鍵為短鏈接,索引長URL。3.反查:-查詢Redis,若不存在則MySQL反查。2.題目:設(shè)計一個高并發(fā)的秒殺系統(tǒng),要求:-每秒處理大量請求。-防止超賣和作弊。答案:核心設(shè)計:1.限流:-Nginx+Lua(前端限流)。-Redis分布式鎖(后端限流)。2.防超賣:-使用Redis事務(wù)/Lua腳本原子扣減庫存。-庫存扣減與訂單生成合并。3.防作弊:-請求去重(Redis+布隆過濾器)。-驗證碼+IP/設(shè)備限制。解析:1.限流方案:-前端:Nginx配置漏桶/令牌桶算法。-后端:Redis分布式鎖(SETNX+EXPIRE)。2.庫存扣減:luaifredis.call("DECR",KEYS[1])>=0thenreturn"success"elsereturn"fail"end3.防作弊:-布隆過濾器攔截重復(fù)請求。-限制同一IP/設(shè)備秒殺次數(shù)。3.題目:設(shè)計一個分布式消息隊列(如Kafka),要求:-支持高吞吐量。-保證消息至少一次傳遞。-支持消息重試。答案:核心設(shè)計:1.生產(chǎn)者:-多線程發(fā)送消息,批量發(fā)送。-設(shè)置消息重試次數(shù)(如3次)。2.消費者:-按組分配消費任務(wù)。-消息確認(rèn)機(jī)制(ACK)。3.存儲:-Kafka分區(qū)+副本(至少3副本)。-ISR(In-SyncRep
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年對口高考美術(shù)真題及答案
- 2025山東聊城東阿縣衛(wèi)生類事業(yè)單位招聘工作人員11人筆試備考重點試題及答案解析
- 2025重慶萬州區(qū)長灘鎮(zhèn)非全日制公益性崗位工作人員招聘4人模擬筆試試題及答案解析
- 2025浙江麗水遂昌縣云峰街道招聘專職消防隊員2人筆試備考重點題庫及答案解析
- 青島高中競賽題庫及答案
- 2025天津濱海新區(qū)建設(shè)投資集團(tuán)面向社會招聘27人筆試備考重點試題及答案解析
- 2025咸陽市三原縣創(chuàng)建辦招聘(10人)模擬筆試試題及答案解析
- 2025湖南長沙市林業(yè)局公開招聘中級雇員筆試備考重點試題及答案解析
- 2025福建三明市永安市軍糧供應(yīng)站招聘2人筆試備考重點題庫及答案解析
- 2025四川成都都江堰市人民醫(yī)院下半年招聘編外人員40人備考考試題庫及答案解析
- 扁平疣的課件
- 教學(xué)查房課件-強(qiáng)直性脊柱炎
- 傳染病報告卡
- 句法成分課件(共18張)統(tǒng)編版語文八年級上冊
- 2023版中國近現(xiàn)代史綱要課件:07第七專題 星星之火可以燎原
- 通知書產(chǎn)品升級通知怎么寫
- 氣管插管術(shù) 氣管插管術(shù)
- 大學(xué)《實驗診斷學(xué)》實驗八:病例分析培訓(xùn)課件
- GB/T 28400-2012釹鎂合金
- 多維閱讀第8級Moon Mouse 明星老鼠的秘密
- 骨髓增生異常綜合癥課件整理
評論
0/150
提交評論