版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
2026年微軟技術面試題目及答案參考編程題(5題,每題15分,共75分)1.題目(15分):編寫一個函數(shù),輸入一個正整數(shù)`n`,返回`n`的“數(shù)字翻轉(zhuǎn)”結(jié)果。例如,輸入`123`返回`321`,輸入`120`返回`21`(注意:翻轉(zhuǎn)后前導零應被忽略)。要求不使用內(nèi)置的字符串反轉(zhuǎn)函數(shù),僅用整數(shù)操作實現(xiàn)。答案與解析:pythondefreverse_integer(n:int)->int:INT_MAX=231-1INT_MIN=-231result=0sign=-1ifn<0else1n=abs(n)whilen!=0:pop=n%10n=n//10檢查溢出ifresult>(INT_MAX-pop)//10:return0result=result10+popreturnsignresult解析:-整數(shù)反轉(zhuǎn)時需處理符號位,先取絕對值處理,最后再還原符號。-逐位取余數(shù)(`n%10`)得到當前最低位,然后除以10(`n//10`)去掉該位。-翻轉(zhuǎn)時需檢查是否溢出,即`result10+pop`是否超過`INT_MAX`或`INT_MIN`。-時間復雜度O(logn),空間復雜度O(1)。2.題目(15分):給定一個無重復元素的數(shù)組`nums`和一個目標值`target`,找出`nums`中所有和為`target`的不重復四元組。例如,輸入`[1,0,-1,0]`和`target=0`,返回`[[-1,0,0,1],[0,0,0,0]]`。答案與解析:pythondeffour_sum(nums,target):nums.sort()n=len(nums)res=[]foriinrange(n-3):ifi>0andnums[i]==nums[i-1]:continueforjinrange(i+1,n-2):ifj>i+1andnums[j]==nums[j-1]:continueleft,right=j+1,n-1whileleft<right:total=nums[i]+nums[j]+nums[left]+nums[right]iftotal==target:res.append([nums[i],nums[j],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-=1returnres解析:-先排序,避免重復解。-固定前兩個指針`i`和`j`,用雙指針`left`和`right`查找剩余的兩個數(shù)。-避免重復解:跳過與前一個相同的元素。-時間復雜度O(n3),空間復雜度O(1)。3.題目(15分):實現(xiàn)一個LRU(LeastRecentlyUsed)緩存,支持`get`和`put`操作。LRU緩存最多容納`capacity`個元素,超出時淘汰最久未使用的元素。例如:-初始化`capacity=2`:-`put(1,1)`→緩存為`{1:1}`-`put(2,2)`→緩存為`{1:1,2:2}`-`get(1)`→返回`1`(訪問1,更新使用順序)-`put(3,3)`→剩余空間不足,淘汰`2`,緩存為`{1:1,3:3}`-`get(2)`→返回`-1`(未命中)答案與解析:pythonclassLRUCache:def__init__(self,capacity:int):self.capacity=capacityself.cache=OrderedDict()defget(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)解析:-使用`OrderedDict`維護元素使用順序,`move_to_end`用于更新訪問順序。-`get`時若命中則移動到末尾,返回值;否則返回`-1`。-`put`時若已存在則更新值并移動到末尾;若超出容量則彈出第一個元素(最久未使用)。-時間復雜度O(1),空間復雜度O(capacity)。4.題目(15分):給定一個二叉樹,判斷其是否為平衡二叉樹。平衡二叉樹定義:對于任意節(jié)點,其左右子樹高度差不超過1。例如:3/\920/\157是平衡二叉樹。答案與解析:pythonclassTreeNode:def__init__(self,val=0,left=None,right=None):self.val=valself.left=leftself.right=rightdefis_balanced(root:TreeNode)->bool:defcheck(node):ifnotnode:return0,Trueleft_height,left_balanced=check(node.left)right_height,right_balanced=check(node.right)returnmax(left_height,right_height)+1,left_balancedandright_balancedandabs(left_height-right_height)<=1returncheck(root)[1]解析:-遞歸檢查每個節(jié)點的高度,同時判斷左右子樹是否平衡。-返回值:當前節(jié)點的高度,以及當前子樹是否平衡。-若任意節(jié)點不平衡(高度差>1),則整棵樹不平衡。-時間復雜度O(n),空間復雜度O(h)(h為樹高)。5.題目(15分):實現(xiàn)一個“合并區(qū)間”函數(shù),輸入一個區(qū)間列表(每個區(qū)間為`[start,end]`),合并所有重疊的區(qū)間,并返回合并后的區(qū)間列表。例如:輸入`[[1,3],[2,6],[8,10],[15,18]]`,輸出`[[1,6],[8,10],[15,18]]`。答案與解析:pythondefmerge_intervals(intervals):ifnotintervals:return[]intervals.sort(key=lambdax:x[0])merged=[intervals[0]]forcurrentinintervals[1:]:last=merged[-1]ifcurrent[0]<=last[1]:#重疊last[1]=max(last[1],current[1])else:merged.append(current)returnmerged解析:-先按區(qū)間起始位置排序。-遍歷區(qū)間,若當前區(qū)間與前一個區(qū)間重疊(`current[0]<=last[1]`),則合并(更新`last[1]`)。-若不重疊,則直接添加到結(jié)果中。-時間復雜度O(nlogn),空間復雜度O(n)。系統(tǒng)設計題(2題,每題25分,共50分)1.題目(25分):設計一個簡單的微博“實時推文”系統(tǒng)。要求:-用戶發(fā)布推文時,其他用戶能近乎實時看到該推文(延遲不超過1秒)。-系統(tǒng)需支持至少10,000個并發(fā)用戶,推文數(shù)每日增長約1億條。-提供兩種查看方式:按用戶查看(關注列表)、按時間查看(最新推文)。答案與解析:系統(tǒng)架構(gòu):1.數(shù)據(jù)存儲:-推文存儲:使用分布式數(shù)據(jù)庫(如Cassandra或RocksDB)存儲推文,按用戶ID或時間索引,支持快速寫入和讀取。-用戶關注關系:使用Redis哈希表存儲用戶關注關系(`user:follows:{userId}`),支持快速查詢。2.實時推文分發(fā):-發(fā)布流程:-用戶發(fā)布推文時,寫入數(shù)據(jù)庫并廣播給該用戶的所有關注者(使用RedisPub/Sub或Kafka)。-優(yōu)化:-使用“流式拉取”而非“全量推送”,每個用戶維護一個輕量級訂閱隊列,僅接收增量更新。-異步寫入磁盤,保證寫入性能。-訂閱優(yōu)化:-使用“布隆過濾器”預判用戶是否關注某賬號,減少無效推送。-按用戶分組推送,避免單節(jié)點壓力過大。3.讀取服務:-按用戶查看:直接查詢數(shù)據(jù)庫,支持緩存熱點用戶推文(如Redis)。-按時間查看:使用LevelDB或時間序列數(shù)據(jù)庫(如InfluxDB)按時間索引推文,支持分頁查詢。4.高可用與擴展:-推文服務分片(Sharding),按用戶ID哈希分配到不同節(jié)點。-使用負載均衡器(如Nginx)分發(fā)請求。-監(jiān)控系統(tǒng)(如Prometheus+Grafana)實時監(jiān)控延遲、QPS等指標。技術選型理由:-Redis:高性能鍵值存儲,適合存儲關注關系和流式隊列。-分布式數(shù)據(jù)庫:支持海量寫入和水平擴展。-流式架構(gòu):保證低延遲,避免阻塞主線程。2.題目(25分):設計一個支持高并發(fā)的“短鏈接生成與解析”系統(tǒng)。要求:-輸入任意長鏈接,生成6位短鏈接(如`/a1b2c`)。-短鏈接解析時,能快速定位原始長鏈接(延遲<100ms)。-系統(tǒng)需支持日均1000萬次訪問,且短鏈接唯一性要求極高。答案與解析:系統(tǒng)架構(gòu):1.短鏈接生成:-編碼算法:-使用62進制(`a-z`、`A-Z`、`0-9`)對ID進行編碼,6位可表示62?=56.8億個ID。-映射關系:`{0:a,1:b,...,61:zA0}`。-ID生成:-使用分布式唯一ID生成器(如TwitterSnowflake算法),確保全局唯一。-寫入Redis或分布式數(shù)據(jù)庫,支持快速查詢。2.短鏈接解析:-用戶訪問短鏈接時,DNS解析至負載均衡器(如HAProxy)。-負載均衡器將請求轉(zhuǎn)發(fā)至服務集群。-服務端通過短鏈接的6位ID快速查詢單個長鏈接(Redis緩存熱點ID)。-若未命中緩存,則查詢數(shù)據(jù)庫,并緩存結(jié)
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年大學藝術學(音樂欣賞)試題及答案
- 七年級生物(生物體的結(jié)構(gòu))2026年上學期期末測試卷
- 2025年大學大三(統(tǒng)計學)多元統(tǒng)計分析基礎試題及答案
- 2025年大學(公共關系學)危機公關處理期末試題及答案
- 第2講 帶電粒子在磁場中的運動
- 中職第二學年(內(nèi)科護理)內(nèi)科常見病護理2026年綜合測試題及答案
- 2025年高職軟件工程(面向?qū)ο缶幊蹋┰囶}及答案
- 深度解析(2026)GBT 18310.39-2001纖維光學互連器件和無源器件 基本試驗和測量程序 第2-39部分試驗 對外界磁場敏感性
- 深度解析(2026)《GBT 17980.110-2004農(nóng)藥 田間藥效試驗準則(二) 第110部分殺菌劑防治黃瓜細菌性角斑病》
- 深度解析(2026)《GBT 17967-2000信息技術 開放系統(tǒng)互連 基本參考模型 OSI服務定義約定》
- 2025年高職物理(電磁學基礎)試題及答案
- 技術部門項目交付驗收流程與標準
- 林場管護知識培訓課件
- 公司反貪腐類培訓課件
- 寢室內(nèi)務規(guī)范講解
- 部隊地雷使用課件
- 航空材料基礎培訓課件
- 2025至2030軍工自動化行業(yè)市場深度研究及發(fā)展前景投資可行性分析報告
- 老舊小區(qū)消防系統(tǒng)升級改造方案
- 起重機械應急救援預案演練記錄
- 護理事業(yè)十五五發(fā)展規(guī)劃(2026-2030年)
評論
0/150
提交評論