版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2026年程序設(shè)計(jì)崗位面試要點(diǎn)及參考答案一、編程基礎(chǔ)(5題,每題10分,共50分)1.題目(10分):編寫一個(gè)函數(shù),實(shí)現(xiàn)將任意進(jìn)制數(shù)(2-16進(jìn)制)轉(zhuǎn)換為十進(jìn)制數(shù)。輸入?yún)?shù)包括數(shù)字字符串和進(jìn)制數(shù),輸出為十進(jìn)制整數(shù)。假設(shè)輸入合法,進(jìn)制數(shù)不超過16。參考答案:pythondefbase_to_decimal(num_str,base):ifbase<2orbase>16:return"Invalidbase"digits="0123456789ABCDEF"decimal=0fori,charinenumerate(reversed(num_str)):value=digits.index(char.upper())decimal+=value(basei)returndecimal示例:將"1A3"(16進(jìn)制)轉(zhuǎn)換為十進(jìn)制print(base_to_decimal("1A3",16))#輸出:419解析:-從右到左遍歷數(shù)字字符串,每個(gè)字符通過`digits`映射為對(duì)應(yīng)數(shù)值(A-F轉(zhuǎn)為10-15)。-使用`basei`計(jì)算當(dāng)前位的權(quán)重,累加得到十進(jìn)制結(jié)果。-異常處理:檢查進(jìn)制是否在2-16范圍內(nèi)。2.題目(10分):實(shí)現(xiàn)一個(gè)快速排序算法,要求不使用遞歸,采用迭代方式(使用棧模擬遞歸)。輸入一個(gè)整數(shù)數(shù)組,輸出排序后的數(shù)組。參考答案:pythondefquick_sort_iterative(arr):ifnotarr:return[]stack=[(0,len(arr)-1)]whilestack:start,end=stack.pop()ifstart>=end:continuepivot=arr[end]left,right=start,end-1whileleft<=right:whileleft<=rightandarr[left]<=pivot:left+=1whileleft<=rightandarr[right]>=pivot:right-=1ifleft<right:arr[left],arr[right]=arr[right],arr[left]arr[left],arr[end]=arr[end],arr[left]stack.append((start,left-1))stack.append((left+1,end))returnarr示例print(quick_sort_iterative([3,1,4,1,5,9,2,6]))#輸出:[1,1,2,3,4,5,6,9]解析:-使用棧記錄當(dāng)前需要排序的子數(shù)組范圍。-模擬遞歸的分區(qū)操作:選擇`end`為基準(zhǔn)值,左右指針向中間移動(dòng),將小于基準(zhǔn)的值移到左側(cè),大于基準(zhǔn)的值移到右側(cè)。-分區(qū)后,將子數(shù)組范圍繼續(xù)入棧處理,直到棧為空。3.題目(10分):編寫一個(gè)函數(shù),檢查一個(gè)字符串是否為“回文串”(忽略大小寫和空格)。例如,"Aman,aplan,acanal:Panama"為回文串。參考答案:pythondefis_palindrome(s):s=''.join(c.lower()forcinsifc.isalnum())returns==s[::-1]示例print(is_palindrome("Aman,aplan,acanal:Panama"))#輸出:Trueprint(is_palindrome("raceacar"))#輸出:False解析:-去除非字母數(shù)字字符,并統(tǒng)一轉(zhuǎn)為小寫。-判斷處理后的字符串是否與反轉(zhuǎn)字符串相同。4.題目(10分):實(shí)現(xiàn)一個(gè)LRU(最近最少使用)緩存,要求支持`get`和`put`操作。容量為3,超出時(shí)刪除最久未使用的元素。參考答案: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)示例lru=LRUCache(3)lru.put(1,1)lru.put(2,2)lru.put(3,3)print(lru.get(1))#輸出:1lru.put(4,4)#刪除key=2print(lru.get(2))#輸出:-1解析:-使用字典`cache`存儲(chǔ)鍵值對(duì),列表`order`記錄訪問順序。-`get`操作將鍵移到末尾,表示最近訪問。-`put`操作若鍵存在則更新順序,若超出容量則刪除最久未使用的元素(`order[0]`)。5.題目(10分):實(shí)現(xiàn)一個(gè)二叉樹的層序遍歷(廣度優(yōu)先遍歷),要求返回列表形式,每層從左到右。參考答案:pythonfromcollectionsimportdequeclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdeflevel_order(root):ifnotroot:return[]result=[]queue=deque([root])whilequeue:level_size=len(queue)current_level=[]for_inrange(level_size):node=queue.popleft()current_level.append(node.val)ifnode.left:queue.append(node.left)ifnode.right:queue.append(node.right)result.append(current_level)returnresult示例root=TreeNode(3,TreeNode(9),TreeNode(20,TreeNode(15),TreeNode(7)))print(level_order(root))#輸出:[[3],[9,20],[15,7]]解析:-使用隊(duì)列實(shí)現(xiàn)BFS,初始化時(shí)將根節(jié)點(diǎn)入隊(duì)。-每次處理當(dāng)前層的所有節(jié)點(diǎn),將其子節(jié)點(diǎn)入隊(duì),并將當(dāng)前層結(jié)果添加到`result`中。二、算法與數(shù)據(jù)結(jié)構(gòu)(5題,每題10分,共50分)6.題目(10分):給定一個(gè)整數(shù)數(shù)組,返回所有和為target的三元組(不重復(fù))。例如,輸入`[-1,0,1,2]`,target=0,輸出`[[-1,0,1],[-1,2,1]]`。參考答案:pythondefthree_sum(nums,target):nums.sort()result=[]n=len(nums)foriinrange(n):ifi>0andnums[i]==nums[i-1]:continueleft,right=i+1,n-1whileleft<right:total=nums[i]+nums[left]+nums[right]iftotal==target:result.append([nums[i],nums[left],nums[right]])whileleft<rightandnums[left]==nums[left+1]:left+=1whileleft<rightandnums[right]==nums[right-1]:right-=1left+=1right-=1eliftotal<target:left+=1else:right-=1returnresult示例print(three_sum([-1,0,1,2],0))#輸出:[[-1,0,1],[-1,2,1]]解析:-先排序數(shù)組,避免重復(fù)解。-固定第一個(gè)數(shù),使用雙指針(left,right)尋找另外兩個(gè)數(shù),使三數(shù)之和為target。-若找到解,跳過重復(fù)值繼續(xù)查找;若總和小于target,left右移;否則right左移。7.題目(10分):實(shí)現(xiàn)一個(gè)無重復(fù)字符的最長(zhǎng)子串,返回其長(zhǎng)度。例如,輸入"abcabcbb",輸出"abc"(長(zhǎng)度3)。參考答案:pythondeflength_of_longest_substring(s):char_map={}left=0max_len=0forright,charinenumerate(s):ifcharinchar_mapandchar_map[char]>=left:left=char_map[char]+1char_map[char]=rightmax_len=max(max_len,right-left+1)returnmax_len示例print(length_of_longest_substring("abcabcbb"))#輸出:3解析:-使用哈希表記錄每個(gè)字符的最新位置。-維護(hù)一個(gè)滑動(dòng)窗口`[left,right]`,若右指針遇到重復(fù)字符且位置在窗口內(nèi),則將左指針移動(dòng)到重復(fù)字符的下一個(gè)位置。-每次更新最大長(zhǎng)度。8.題目(10分):給定一個(gè)非空二叉樹,返回其最大深度(即根節(jié)點(diǎn)到最遠(yuǎn)葉子節(jié)點(diǎn)的最長(zhǎng)路徑上的節(jié)點(diǎn)數(shù))。參考答案:pythondefmax_depth(root):ifnotroot:return0return1+max(max_depth(root.left),max_depth(root.right))示例構(gòu)建二叉樹:3/\920/\157root=TreeNode(3,TreeNode(9),TreeNode(20,TreeNode(15),TreeNode(7)))print(max_depth(root))#輸出:3解析:-遞歸計(jì)算左子樹和右子樹的最大深度,取較大值加1(當(dāng)前節(jié)點(diǎn))。-基本情況:空樹深度為0。9.題目(10分):實(shí)現(xiàn)一個(gè)二分查找算法,輸入有序數(shù)組和一個(gè)目標(biāo)值,返回目標(biāo)值的索引(若不存在則返回-1)。參考答案:pythondefbinary_search(nums,target):left,right=0,len(nums)-1whileleft<=right:mid=(left+right)//2ifnums[mid]==target:returnmidelifnums[mid]<target:left=mid+1else:right=mid-1return-1示例print(binary_search([1,2,3,4,5],3))#輸出:2print(binary_search([1,2,3,4,5],6))#輸出:-1解析:-初始化左右指針,每次取中間值`mid`比較:-若`nums[mid]==target`,返回`mid`。-若`nums[mid]<target`,搜索右半部分。-若`nums[mid]>target`,搜索左半部分。-若未找到,返回-1。10.題目(10分):給定一個(gè)鏈表,反轉(zhuǎn)其節(jié)點(diǎn),并返回新鏈表頭。參考答案:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdefreverse_list(head):prev,current=None,headwhilecurrent:next_node=current.nextcurrent.next=prevprev=currentcurrent=next_nodereturnprev示例輸入:1->2->3->4->5輸出:5->4->3->2->1head=ListNode(1,ListNode(2,ListNode(3,ListNode(4,ListNode(5)))))new_head=reverse_list(head)whilenew_head:print(new_head.val,end="->")new_head=new_head.next解析:-使用三個(gè)指針:`prev`(初始為None),`current`(初始為head),`next_node`臨時(shí)存儲(chǔ)下一個(gè)節(jié)點(diǎn)。-每次將`current.next`指向前一個(gè)節(jié)點(diǎn)`prev`,然后移動(dòng)指針。-最終`prev`成為新頭節(jié)點(diǎn)。三、系統(tǒng)設(shè)計(jì)(3題,每題15分,共45分)11.題目(15分):設(shè)計(jì)一個(gè)簡(jiǎn)單的短鏈接系統(tǒng)(如tinyURL)。要求:-輸入任意URL,返回短鏈接(如/abc123)。-輸入短鏈接,能反查回原始URL。-支持高并發(fā)訪問。參考答案:-數(shù)據(jù)結(jié)構(gòu):-使用哈希表(內(nèi)存+Redis)存儲(chǔ)`短碼<->原始URL`映射。-短碼使用自增ID或隨機(jī)生成(如6位base62:a-z,A-Z,0-9)。-流程:1.輸入U(xiǎn)RL,生成短碼(如`id_to_base62(自增ID)`),存入哈希表。2.返回短鏈接(`/短碼`)。3.反查時(shí),從短碼解析ID,查哈希表獲取原始URL。-高并發(fā)處理:-使用Redis分布式鎖避免短碼沖突。-基于內(nèi)存+持久化(如RocksDB)保證數(shù)據(jù)一致性。12.題目(15分):設(shè)計(jì)一個(gè)消息隊(duì)列系統(tǒng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年農(nóng)業(yè)國(guó)際公關(guān)服務(wù)合同
- 2026年醫(yī)院古醫(yī)療云計(jì)算模型館合作合同
- 2025年全國(guó)性網(wǎng)絡(luò)安全服務(wù)平臺(tái)建設(shè)項(xiàng)目可行性研究報(bào)告
- 2025年高校在線學(xué)習(xí)平臺(tái)搭建項(xiàng)目可行性研究報(bào)告
- 2025年新型替代蛋白質(zhì)研發(fā)項(xiàng)目可行性研究報(bào)告
- 2025年健身產(chǎn)業(yè)數(shù)字化轉(zhuǎn)型項(xiàng)目可行性研究報(bào)告
- 紋身定金合同范本
- 做監(jiān)理合同協(xié)議
- 福建省百校2026屆高三上學(xué)期12月聯(lián)合測(cè)評(píng)英語(yǔ)試卷(含答案詳解)
- 英文講師考點(diǎn)解析
- (2025年標(biāo)準(zhǔn))存單轉(zhuǎn)讓協(xié)議書
- 醫(yī)學(xué)科研誠(chéng)信專項(xiàng)培訓(xùn)
- 電力通信培訓(xùn)課件
- 第五版FMEA控制程序文件編制
- 藥物致癌性試驗(yàn)必要性指導(dǎo)原則
- 軟骨肉瘤護(hù)理查房
- 高級(jí)生物化學(xué)知識(shí)要點(diǎn)詳解
- 肌電圖在周圍神經(jīng)病中的應(yīng)用
- 2025春季學(xué)期國(guó)開電大??啤独砉び⒄Z(yǔ)1》一平臺(tái)機(jī)考真題及答案(第五套)
- GB/T 45683-2025產(chǎn)品幾何技術(shù)規(guī)范(GPS)幾何公差一般幾何規(guī)范和一般尺寸規(guī)范
- CJ/T 107-2013城市公共汽、電車候車亭
評(píng)論
0/150
提交評(píng)論