版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2026年IT公司軟件開(kāi)發(fā)工程師面試技巧與答案一、編程能力測(cè)試(共5題,每題20分,總分100分)1.題目(20分):實(shí)現(xiàn)一個(gè)函數(shù),輸入一個(gè)字符串,返回該字符串中所有唯一字符的列表(重復(fù)字符只保留第一次出現(xiàn)的位置)。例如,輸入`"leetcode"`,輸出`['l','e','t','c','o','d']`。要求時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(1)。答案:pythondefunique_chars(s:str)->list:seen=set()result=[]forcharins:ifcharnotinseen:seen.add(char)result.append(char)returnresult示例print(unique_chars("leetcode"))#輸出:['l','e','t','c','o','d']解析:-使用集合`seen`記錄已出現(xiàn)的字符,確保O(1)的查找時(shí)間。-遍歷字符串一次,將唯一字符添加到`result`中。-時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1)(假設(shè)字符集固定,如ASCII)。2.題目(20分):實(shí)現(xiàn)一個(gè)函數(shù),輸入一個(gè)鏈表,返回該鏈表的中位數(shù)。假設(shè)鏈表長(zhǎng)度為奇數(shù),返回中間節(jié)點(diǎn);為偶數(shù),返回中間兩個(gè)節(jié)點(diǎn)的第一個(gè)。例如,輸入`1->2->3->4->5`,輸出`3`;輸入`1->2->3->4`,輸出`2`。答案:pythonclassListNode:def__init__(self,val=0,next=None):self.val=valself.next=nextdeffind_median(head:ListNode)->int:slow=fast=headprev=Nonewhilefastandfast.next:prev=slowslow=slow.nextfast=fast.next.nextreturnslow.valifprevelsehead.val示例1->2->3->4->5head=ListNode(1,ListNode(2,ListNode(3,ListNode(4,ListNode(5)))))print(find_median(head))#輸出:31->2->3->4head=ListNode(1,ListNode(2,ListNode(3,ListNode(4))))print(find_median(head))#輸出:2解析:-使用快慢指針?lè)ǎ熘羔樏看我苿?dòng)兩步,慢指針移動(dòng)一步。-當(dāng)快指針到達(dá)末尾時(shí),慢指針位于中位數(shù)位置。-時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1)。3.題目(20分):實(shí)現(xiàn)一個(gè)函數(shù),輸入一個(gè)整數(shù)數(shù)組,返回該數(shù)組的最長(zhǎng)連續(xù)遞增子序列的長(zhǎng)度。例如,輸入`[1,3,5,4,7]`,輸出`3`(子序列`[1,3,5]`或`[4,7]`)。答案:pythondeflongest_consecutive(nums:list)->int:ifnotnums:return0nums_set=set(nums)max_len=0fornuminnums_set:ifnum-1notinnums_set:current_num=numcurrent_len=1whilecurrent_num+1innums_set:current_num+=1current_len+=1max_len=max(max_len,current_len)returnmax_len示例print(longest_consecutive([1,3,5,4,7]))#輸出:3解析:-使用集合去重,避免重復(fù)計(jì)算。-遍歷每個(gè)數(shù)字,如果它是連續(xù)子序列的起點(diǎn)(前一個(gè)數(shù)字不存在),則計(jì)算長(zhǎng)度。-時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(n)。4.題目(20分):實(shí)現(xiàn)一個(gè)函數(shù),輸入一個(gè)二叉樹(shù),返回該樹(shù)的層序遍歷(按從上到下、從左到右的順序)。例如,輸入`[3,9,20,None,None,15,7]`,輸出`[[3],[9,20],[15,7]]`。答案:pythonfromcollectionsimportdequeclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdeflevel_order(root:TreeNode)->list:ifnotroot:return[]result=[]queue=deque([root])whilequeue:level=[]for_inrange(len(queue)):node=queue.popleft()level.append(node.val)ifnode.left:queue.append(node.left)ifnode.right:queue.append(node.right)result.append(level)returnresult示例[3,9,20,None,None,15,7]root=TreeNode(3,TreeNode(9),TreeNode(20,TreeNode(15),TreeNode(7)))print(level_order(root))#輸出:[[3],[9,20],[15,7]]解析:-使用隊(duì)列實(shí)現(xiàn)廣度優(yōu)先遍歷(BFS)。-按層遍歷,每層將節(jié)點(diǎn)值添加到`level`列表,最后添加到`result`中。-時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(n)。5.題目(20分):實(shí)現(xiàn)一個(gè)函數(shù),輸入一個(gè)整數(shù)n,返回斐波那契數(shù)列的第n項(xiàng)(n從0開(kāi)始)。例如,輸入`5`,輸出`5`(斐波那契序列:0,1,1,2,3,5)。答案:pythondeffibonacci(n:int)->int:ifn==0:return0elifn==1:return1a,b=0,1for_inrange(2,n+1):a,b=b,a+breturnb示例print(fibonacci(5))#輸出:5解析:-使用動(dòng)態(tài)規(guī)劃,避免遞歸的重復(fù)計(jì)算。-使用兩個(gè)變量`a`和`b`存儲(chǔ)前兩個(gè)數(shù),循環(huán)更新。-時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1)。二、系統(tǒng)設(shè)計(jì)(共2題,每題50分,總分100分)1.題目(50分):設(shè)計(jì)一個(gè)高并發(fā)的短鏈接生成系統(tǒng)。要求:-輸入任意長(zhǎng)度的URL,輸出固定長(zhǎng)度的短鏈接(如6位字母數(shù)字組合)。-支持高并發(fā)訪問(wèn)(每秒百萬(wàn)級(jí)請(qǐng)求)。-支持鏈路追蹤(可記錄原始URL和訪問(wèn)次數(shù))。答案:系統(tǒng)架構(gòu):1.URL編碼模塊:將長(zhǎng)URL轉(zhuǎn)換為短鏈接。-使用哈希算法(如SHA-256)+Base62編碼(a-z,A-Z,0-9)。-壓縮哈希值(如取前6位)。2.分布式緩存:使用Redis存儲(chǔ)短鏈接映射關(guān)系(短鏈接→長(zhǎng)URL)。-設(shè)置過(guò)期時(shí)間(如1天),減少數(shù)據(jù)庫(kù)壓力。3.數(shù)據(jù)庫(kù):使用分片數(shù)據(jù)庫(kù)(如MySQLCluster)存儲(chǔ)原始URL、短鏈接、訪問(wèn)次數(shù)等。4.負(fù)載均衡:使用Nginx或HAProxy分發(fā)請(qǐng)求到多個(gè)后端服務(wù)。5.鏈路追蹤:在Redis中記錄訪問(wèn)次數(shù),數(shù)據(jù)庫(kù)中記錄詳細(xì)日志。代碼示例(URL編碼):pythonimporthashlibimportstringdefencode_url(long_url:str)->str:hash_obj=hashlib.sha256(long_url.encode())hash_hex=hash_obj.hexdigest()short_code=''.join(random.choices(string.ascii_letters+string.digits,k=6))returnshort_code示例print(encode_url("/path/to/resource"))#輸出:如"a1B2c3"解析:-高并發(fā):Redis支持單線程異步處理,適合緩存。數(shù)據(jù)庫(kù)分片可擴(kuò)展。-鏈路追蹤:Redis記錄訪問(wèn)次數(shù),數(shù)據(jù)庫(kù)存儲(chǔ)詳細(xì)日志(時(shí)間、IP等)。2.題目(50分):設(shè)計(jì)一個(gè)實(shí)時(shí)消息推送系統(tǒng)(如微信、抖音)。要求:-支持單聊和群聊。-支持離線推送(用戶不在線時(shí)仍能收到消息)。-支持消息分片(長(zhǎng)消息自動(dòng)分段發(fā)送)。答案:系統(tǒng)架構(gòu):1.消息隊(duì)列:使用Kafka或RabbitMQ存儲(chǔ)待發(fā)送消息。2.用戶狀態(tài)管理:使用Redis記錄在線用戶(Key:用戶ID,Value:設(shè)備ID列表)。3.消息分片:服務(wù)端將長(zhǎng)消息拆分為多個(gè)短消息(如1KB一段)。4.離線推送:用戶離線時(shí),消息存儲(chǔ)在Redis(過(guò)期重試),或推送至第三方服務(wù)(如FCM)。5.消息推送:WebSocket或長(zhǎng)輪詢保持連接,或使用第三方推送服務(wù)(如阿里云推送)。代碼示例(消息分片):pythondefsplit_message(long_message:str,chunk_size:int=1024)->list:return[long_message[i:i+chunk_size]foriinrange(0,len(long_message),chunk_size)]示例messages=split_message("Hello,thisisaverylongmessagethatneedstobesplitintomultipleparts.")print(messages)#輸出:['Hello,thisisave','rylongmessagethatneedstobesplitintomultipleparts.']解析:-實(shí)時(shí)性:WebSocket保持連接,減少延遲。-離線支持:Redis或第三方服務(wù)確保消息不丟失。三、算法與數(shù)據(jù)結(jié)構(gòu)(共3題,每題30分,總分90分)1.題目(30分):給定一個(gè)無(wú)重復(fù)元素的數(shù)組`nums`和一個(gè)目標(biāo)值`target`,返回所有相加之和為`target`的不同三元組。例如,輸入`nums=[-1,0,1,2]`,`target=0`,輸出`[[-1,0,1],[-1,2,1]]`。答案:pythondefthree_sum(nums:list,target:int)->list: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]]解析:-排序后使用雙指針?lè)?,避免重?fù)解。-時(shí)間復(fù)雜度O(n2),空間復(fù)雜度O(1)。2.題目(30分):實(shí)現(xiàn)一個(gè)LRU(LeastRecentlyUsed)緩存,支持`get`和`put`操作。例如:pythoncache=LRUCache(2)cache.put(1,1)cache.put(2,2)cache.get(1)#返回1cache.put(3,3)#去除鍵2cache.get(2)#返回-1(未找到)cache.put(4,4)#去除鍵1cache.get(1)#返回-1(未找到)cache.get(3)#返回3cache.get(4)#返回4答案:pythonfromcollectionsimportOrderedDictclassLRUCache:def__init__(self,capacity:int):self.cache=OrderedDict()self.capacity=capacitydefget(self,key:int)->int:ifkeynotinself.cache:return-1self.cache.move_to_end(key)returnself.cache[key]defput(self,key:int,value:int)->None:ifkeyinself.cache:self.cache.move_to_end(key)self.cache[key]=valueiflen(self.cache)>self.capacity:self.cache.popitem(last=False)示例cache=LRUCache(2)cache.put(1,1)cache.put(2,2)print(cache.get(1))#返回1cache.put(3,3)#去除鍵2print(cache.get(2))#返回-1cache.put(4,4)#去除鍵1print(cache.get(1))#返回-1print(cache.get(3))#返回3print(cache.get(4))#返回4解析:-使用`OrderedDict`記錄鍵值對(duì),移動(dòng)訪問(wèn)的鍵到末尾表示最近使用。-超出容量時(shí)刪除最久未使用的鍵(`popitem(last=False)`)。3.題目(30分):給定一個(gè)字符串`s`,找到其中最長(zhǎng)的回文子串。例如,輸入`"babad"`,輸出`"bab"`或`"aba"`。答案:pythondeflongest_palindrome(s:str)->str:ifnots:return""start,end=0,0foriinrange(len(s)):len1=expand_from_center(s,i,i)len2=expand_from_center(s,i,i+1)max_len=max(len1,len2)ifmax_len>end-start:start=i-(max_len-1)//2end=i+max_len//2returns[start:end+1]defexpand_from_center(s:str,left:int,right:int)->int:whileleft>=0andright<len(s)ands[left]==s[right]:left-=1right+=1returnright-left-1示例print(longest_palindrome("babad"))#輸出:"bab"或"aba"解析:-雙指針?lè)ǎ謩e檢查奇數(shù)長(zhǎng)度和偶數(shù)長(zhǎng)度的回文。-時(shí)間復(fù)雜度O(n2),空間復(fù)雜度O(1)。四、數(shù)據(jù)庫(kù)與存儲(chǔ)(共2題,每題25分,總分50分)1.題目(25分):設(shè)計(jì)一個(gè)用戶表(`users`),包含以下字段:-`id`(主鍵,自增)-`username`(唯一,非空)-`email`(唯一,非空,需驗(yàn)證格式)-`password_hash`(非空,存儲(chǔ)加密密碼)-`created_at`(創(chuàng)建時(shí)間,默認(rèn)當(dāng)前時(shí)間)-`last_login`(上次登錄時(shí)間,可空)-`is_active`(是否激活,布爾值,默認(rèn)True)答案:sqlCREATETABLEusers(idINTAUTO_INCREMENTPRIMARYKEY,usernameVARCHAR(50)UNIQUENOTNULL,emailVARCHAR(100)UNIQUENOTNULL,password_hashVARCHAR(255)NOTNU
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 能源高效利用技術(shù)-洞察及研究
- 2026年保潔領(lǐng)班面試題集及答案解析
- 基于神經(jīng)網(wǎng)絡(luò)的視頻譯碼器運(yùn)動(dòng)補(bǔ)償模型-洞察及研究
- 漢字部首演變與古代釀酒發(fā)酵技術(shù)的關(guān)聯(lián)性課題報(bào)告教學(xué)研究課題報(bào)告
- 國(guó)家智慧教育云平臺(tái)助力社區(qū)教育服務(wù)創(chuàng)新模式創(chuàng)新研究教學(xué)研究課題報(bào)告
- 多線程環(huán)境下的最大子數(shù)組問(wèn)題求解-洞察及研究
- 銀行AI系統(tǒng)的實(shí)時(shí)決策能力提升
- 鎳鈷冶煉過(guò)程的副產(chǎn)品綜合利用研究-洞察及研究
- 跨境電子支付的經(jīng)濟(jì)效應(yīng)分析-洞察及研究
- 未來(lái)五年原料纖維素分離技術(shù)工藝裝備企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略分析研究報(bào)告
- 2023年魯迅美術(shù)學(xué)院附屬中學(xué)(魯美附中)中考招生語(yǔ)文試卷
- 室內(nèi)消火栓的檢查內(nèi)容、標(biāo)準(zhǔn)及檢驗(yàn)程序
- DB35T 2136-2023 茶樹(shù)病害測(cè)報(bào)與綠色防控技術(shù)規(guī)程
- 日文常用漢字表
- 舞臺(tái)機(jī)械的維護(hù)與保養(yǎng)
- 運(yùn)輸工具服務(wù)企業(yè)備案表
- 醫(yī)院藥房醫(yī)療廢物處置方案
- 高血壓達(dá)標(biāo)中心標(biāo)準(zhǔn)要點(diǎn)解讀及中心工作進(jìn)展-課件
- 金屬眼鏡架拋光等工藝【省一等獎(jiǎng)】
- 《藥品經(jīng)營(yíng)質(zhì)量管理規(guī)范》的五個(gè)附錄
- 試論如何提高小學(xué)音樂(lè)課堂合唱教學(xué)的有效性(論文)
評(píng)論
0/150
提交評(píng)論