面試題及答案軟件工程師_第1頁
面試題及答案軟件工程師_第2頁
面試題及答案軟件工程師_第3頁
面試題及答案軟件工程師_第4頁
面試題及答案軟件工程師_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

2026年面試題及答案:軟件工程師一、編程題(共3題,每題15分,總分45分)1.題目(15分):請實現(xiàn)一個函數(shù),輸入一個正整數(shù)`n`,返回`n`的所有真因子的和(不包括`n`本身)。例如:-輸入`12`,輸出`1+2+3+4+6=16`。-輸入`7`,輸出`1`。要求:-時間復雜度不超過O(√n)。-不能使用任何外部庫。答案:pythondefsum_of_divisors(n):ifn<=1:return0total=0foriinrange(1,int(n0.5)+1):ifn%i==0:total+=iifi!=n//iandi!=1:total+=n//ireturntotal解析:-真因子是能整除`n`的數(shù),不包括`n`本身。-對于每個小于等于√n的數(shù)`i`,如果`i`能整除`n`,則`i`和`n//i`都是因子。-注意排除`n`本身,且當`i`和`n//i`相等時(如`n`是平方數(shù))只加一次。2.題目(15分):給定一個字符串`s`,找到其中不重復的最長子串的長度。例如:-輸入`"abcabcbb"`,輸出`3`(最長子串為`"abc"`)。-輸入`"bbbbb"`,輸出`1`。要求:-時間復雜度O(n),空間復雜度O(min(n,m)),其中`m`是字符集大小。答案:pythondeflength_of_longest_substring(s):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_len解析:-使用滑動窗口技術(shù),`left`和`right`分別表示子串的左右邊界。-用`char_set`記錄當前窗口內(nèi)的字符,若遇到重復字符,則移動`left`直到無重復。-每次更新`max_len`為最長子串長度。3.題目(15分):實現(xiàn)一個簡單的LRU(LeastRecentlyUsed)緩存,支持`get`和`put`操作。緩存容量為`capacity`。-`get(key)`:如果鍵存在,返回值;否則返回`-1`。-`put(key,value)`:如果鍵存在,更新值;否則插入鍵值對。如果超出容量,刪除最久未使用的鍵。要求:-`get`和`put`操作的時間復雜度為O(1)。答案:pythonclassListNode:def__init__(self,key=0,value=0):self.key=keyself.value=valueself.prev=Noneself.next=NoneclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache={}self.head=ListNode()self.tail=ListNode()self.head.next=self.tailself.tail.prev=self.headdef_add_node(self,node):node.prev=self.headnode.next=self.head.nextself.head.next.prev=nodeself.head.next=nodedef_remove_node(self,node):prev_node=node.prevnext_node=node.nextprev_node.next=next_nodenext_node.prev=prev_nodedef_move_to_head(self,node):self._remove_node(node)self._add_node(node)def_pop_tail(self):res=self.tail.prevself._remove_node(res)returnresdefget(self,key:int)->int:node=self.cache.get(key,None)ifnotnode:return-1self._move_to_head(node)returnnode.valuedefput(self,key:int,value:int)->None:node=self.cache.get(key)ifnode:node.value=valueself._move_to_head(node)else:newNode=ListNode(key,value)self.cache[key]=newNodeself._add_node(newNode)iflen(self.cache)>self.capacity:tail=self._pop_tail()delself.cache[tail.key]解析:-使用雙向鏈表+哈希表實現(xiàn)。-哈希表記錄鍵到節(jié)點的映射,鏈表維護最近使用順序。-`get`操作將節(jié)點移動到頭部,`put`操作插入新節(jié)點并刪除最久未使用的節(jié)點。二、系統(tǒng)設計題(共2題,每題20分,總分40分)1.題目(20分):設計一個微博系統(tǒng),支持以下功能:-用戶發(fā)布微博(最多140字)。-用戶關(guān)注/取消關(guān)注其他用戶。-用戶獲取關(guān)注者的最新微博(按時間倒序)。要求:-說明主要數(shù)據(jù)結(jié)構(gòu)設計。-描述核心接口和算法。-考慮高并發(fā)場景下的優(yōu)化方案(如緩存、異步處理)。答案:主要數(shù)據(jù)結(jié)構(gòu):-`User`:存儲用戶信息(`id`,`name`,`followers`,`followees`,`tweets`)。-`followers`:關(guān)注該用戶的用戶列表。-`followees`:該用戶關(guān)注的用戶列表。-`tweets`:該用戶的微博列表(最新在前)。-`Tweet`:存儲微博信息(`id`,`user_id`,`content`,`timestamp`)。核心接口:-`publish_tweet(user_id,content)`:發(fā)布微博。-`follow(user_id,target_id)`:關(guān)注用戶。-`unfollow(user_id,target_id)`:取消關(guān)注。-`get_timeline(user_id)`:獲取關(guān)注者的最新微博。算法:-發(fā)布微博:將新`Tweet`添加到`User.tweets`的頭部,并更新數(shù)據(jù)庫。-關(guān)注/取消關(guān)注:更新`User.followees`和`User.followers`。-獲取時間線:合并所有`followees`的`tweets`,按時間倒序排序。高并發(fā)優(yōu)化:-緩存:使用Redis緩存用戶的時間線,減少數(shù)據(jù)庫查詢。-異步處理:發(fā)布微博時使用消息隊列(如Kafka)異步更新關(guān)注者的時間線。-分頁:`get_timeline`支持分頁加載,避免一次性加載過多數(shù)據(jù)。2.題目(20分):設計一個短鏈接生成系統(tǒng)(如`/abc123`),支持以下功能:-輸入長鏈接,生成短鏈接。-輸入短鏈接,解析為長鏈接。要求:-說明短鏈接的生成算法。-描述數(shù)據(jù)存儲方案。-考慮高并發(fā)和分布式場景下的解決方案。答案:短鏈接生成算法:-使用Base62編碼(`a-z`,`A-Z`,`0-9`),將長鏈接的ID轉(zhuǎn)換為短字符串。-例如:`123456`→`1Kd`。-算法:1.將長鏈接ID計算哈希值(如SHA256)。2.取哈希值的前若干位(如6位),映射為Base62字符串。3.生成短鏈接(如`/abc123`)。數(shù)據(jù)存儲方案:-使用哈希表(如Redis)存儲短鏈接到長鏈接的映射。-鍵:短鏈接(如`abc123`)。-值:長鏈接(如`/long-url`)。-使用數(shù)據(jù)庫(如PostgreSQL)存儲歷史數(shù)據(jù),支持事務和備份。高并發(fā)和分布式方案:-分布式緩存:使用RedisCluster分片存儲短鏈接映射。-負載均衡:多個短鏈接服務節(jié)點通過負載均衡(如Nginx)分發(fā)請求。-冪等性:生成短鏈接時檢查ID是否已存在,避免重復。-限流:對生成和解析請求進行限流,防止過載。三、數(shù)據(jù)庫題(共1題,20分)1.題目(20分):設計一個電商訂單表`orders`,包含以下字段:-`order_id`(主鍵,自增)-`user_id`(用戶ID)-`product_id`(商品ID)-`quantity`(購買數(shù)量)-`price`(單價)-`order_time`(下單時間)-`status`(訂單狀態(tài),如'pending','shipped','completed')要求:-寫出SQL語句創(chuàng)建該表,并設置合適的索引。-編寫SQL查詢:1.查詢每個用戶的總消費金額。2.查詢已發(fā)貨的訂單中,每天的最晚下單訂單。答案:表創(chuàng)建及索引:sqlCREATETABLEorders(order_idINTAUTO_INCREMENTPRIMARYKEY,user_idINTNOTNULL,product_idINTNOTNULL,quantityINTNOTNULLCHECK(quantity>0),priceDECIMAL(10,2)NOTNULLCHECK(price>0),order_timeDATETIMENOTNULL,statusENUM('pending','shipped','completed')NOTNULL);--索引優(yōu)化CREATEINDEXidx_user_idONorders(user_id);CREATEINDEXidx_status_order_timeONorders(status,order_time);SQL查詢:1.每個用戶的總消費金額:sqlSELECTuser_id,SUM(quantityprice)AStotal_spentFROMordersGROUPBYuser_id;2.已發(fā)貨訂單中,每天的最晚下單訂單:sqlSELECTorder_timeFROMordersWHEREstatus='shipped'GROUPBYDATE(order_time)ORDERBYorder_timeDESC;解析:-第一個查詢通過`SUM(quantityprice)`計算每個用戶的總消費。-第二個查詢先篩選`status='shipped'`,然后按日期分組并按`order_time`降序排列,獲取每天最晚的訂單。四、行為面試題(共2題,每題10分,總分20分)1.題目(10分):請分享一次你解決技術(shù)難題的經(jīng)歷,說明背景、挑戰(zhàn)、解決方案和結(jié)果。參考回答:-背景:在一個高并發(fā)系統(tǒng)中,用戶反饋某接口響應時間過長。-挑戰(zhàn):線上環(huán)境復雜,涉及多個服務調(diào)用,難以定位瓶頸。-解決方案:1.使用`perf`工具分析CPU

溫馨提示

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

最新文檔

評論

0/150

提交評論