版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
2026年軟件開發(fā)面試技術難題及解答一、算法與數據結構(共5題,每題20分,總分100分)題目1(20分)問題描述:給定一個包含重復元素的數組,請找出數組中所有出現超過一半的數字。要求時間復雜度為O(n),空間復雜度為O(1)。示例輸入:[1,2,2,3,3,3,4,3,3,3]示例輸出:[3]提示:可以使用摩爾投票算法解決此問題。題目2(20分)問題描述:實現一個LRU(LeastRecentlyUsed)緩存,支持get和put操作。LRU緩存應該按照最近最少使用順序刪除元素。要求get和put操作的時間復雜度均為O(1)。示例輸入:-put(1,1)//緩存是{1=1}-put(2,2)//緩存是{1=1,2=2}-get(1)//返回1-put(3,3)//去除鍵2,緩存是{1=1,3=3}-get(2)//返回-1(未找到)-put(4,4)//去除鍵1,緩存是{4=4,3=3}示例輸出:1,-1題目3(20分)問題描述:給定一個二叉樹,判斷它是否是高度平衡的二叉樹。一棵高度平衡二叉樹滿足每個節(jié)點的左右兩個子樹的高度差的絕對值不超過1。示例輸入:3/\920/\157示例輸出:true題目4(20分)問題描述:實現快速排序算法,要求在最好、平均、最壞情況下都能保持較高的效率。請描述你的實現思路并給出代碼。題目5(20分)問題描述:給定一個字符串,找到其中不重復的最長子串的長度。例如,輸入"abcabcbb",輸出"abcbb"的長度3。二、系統設計與架構(共4題,每題25分,總分100分)題目6(25分)問題描述:設計一個支持百萬級用戶的短鏈接系統。請說明系統架構、主要組件、數據存儲方案以及如何處理高并發(fā)請求。題目7(25分)問題描述:設計一個微博系統的用戶關注功能。要求支持:1.用戶關注/取消關注其他用戶2.獲取用戶的關注列表和粉絲列表3.支持批量操作以提高性能4.說明如何處理數據一致性問題題目8(25分)問題描述:設計一個高可用、可擴展的分布式消息隊列系統。請說明系統架構、如何保證消息不丟失、如何處理消息積壓問題。題目9(25分)問題描述:設計一個秒殺系統。要求支持高并發(fā)請求,防止超賣,并保證系統穩(wěn)定運行。三、數據庫與SQL(共5題,每題20分,總分100分)題目10(20分)問題描述:假設有一個訂單表orders(id,user_id,product_id,price,order_time),請寫SQL查詢最近一個月內每個用戶的總消費金額,并按消費金額降序排列。題目11(20分)問題描述:假設有一個學生表students(id,name,age,grade)和一個成績表scores(student_id,subject,score),請寫SQL查詢每個學生的平均成績,只顯示平均分大于80的學生。題目12(20分)問題描述:假設有一個商品表products(id,name,category,price)和一個訂單明細表order_items(order_id,product_id,quantity),請寫SQL查詢每個商品類別的總銷售額,并按銷售額降序排列。題目13(20分)問題描述:請解釋數據庫事務的ACID特性,并說明在實際應用中如何保證事務的原子性。題目14(20分)問題描述:假設有一個用戶表users(id,username,email)和一個訂單表orders(id,user_id,order_date),請寫SQL查詢2025年每個用戶的訂單數量,并顯示訂單數量最多的前5個用戶。四、編程語言與框架(共5題,每題20分,總分100分)題目15(20分)問題描述:在JavaScript中,請解釋事件循環(huán)機制,并說明Promise和async/await的區(qū)別和使用場景。題目16(20分)問題描述:在Java中,請解釋線程池的工作原理,并說明如何創(chuàng)建一個固定大小的線程池以及如何處理拒絕的請求。題目17(20分)問題描述:在Python中,請解釋裝飾器的原理,并給出一個自定義裝飾器的示例,該裝飾器可以記錄函數執(zhí)行時間。題目18(20分)問題描述:在Go中,請解釋goroutine和channel的用法,并給出一個使用goroutine和channel實現生產者消費者模式的示例。題目19(20分)問題描述:在React中,請解釋組件的生命周期方法,并說明在React18中新的并發(fā)特性和Hooks的使用優(yōu)勢。五、網絡安全(共3題,每題33分,總分99分)題目20(33分)問題描述:請解釋常見的跨站腳本攻擊(XSS)類型及其防御方法。請給出一個實際場景中如何防止XSS攻擊的示例。題目21(33分)問題描述:請解釋SQL注入攻擊的原理及其防御方法。請給出一個實際場景中如何防止SQL注入攻擊的示例。題目22(33分)問題描述:請解釋HTTPS的工作原理,包括TLS握手過程和證書驗證機制。說明在實際應用中如何配置安全的HTTPS連接。答案與解析答案1(算法與數據結構)摩爾投票算法:1.初始化candidate為0,count為02.遍歷數組:-如果count為0,將當前元素設為candidate,count設為1-否則如果當前元素等于candidate,count加1-否則count減13.驗證candidate是否為超過一半的數字pythondefmajority_element(nums):candidate=Nonecount=0fornuminnums:ifcount==0:candidate=numcount+=(1ifnum==candidateelse-1)驗證count=0fornuminnums:ifnum==candidate:count+=1returncandidateifcount>len(nums)//2elseNone答案2(LRU緩存)使用雙向鏈表和哈希表的組合:-哈希表用于O(1)時間復雜度的get操作-雙向鏈表用于記錄訪問順序,最近訪問的元素在鏈表頭部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):刪除節(jié)點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)ifnotnode:newNode=ListNode(key,value)self.cache[key]=newNodeself._add_node(newNode)iflen(self.cache)>self.capacity:tail=self._pop_tail()delself.cache[tail.key]else:node.value=valueself._move_to_head(node)答案3(高度平衡二叉樹)遞歸判斷每個節(jié)點的左右子樹高度差不超過1,且左右子樹都是高度平衡的: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)ifnotleft_balanced:return0,Falseright_height,right_balanced=check(node.right)ifnotright_balanced:return0,Falsereturnmax(left_height,right_height)+1,abs(left_height-right_height)<=1returncheck(root)[1]答案4(快速排序)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)優(yōu)化版本使用原地分區(qū):pythondefquick_sort_inplace(arr,low,high):iflow<high:pivot_index=partition(arr,low,high)quick_sort_inplace(arr,low,pivot_index-1)quick_sort_inplace(arr,pivot_index+1,high)defpartition(arr,low,high):pivot=arr[high]i=low-1forjinrange(low,high):ifarr[j]<=pivot:i+=1arr[i],arr[j]=arr[j],arr[i]arr[i+1],arr[high]=arr[high],arr[i+1]returni+1答案5(不重復最長子串)滑動窗口方法:pythondeflength_of_longest_substring(s:str)->int:char_set=set()left=0max_length=0forrightinrange(len(s)):whiles[right]inchar_set:char_set.remove(s[left])left+=1char_set.add(s[right])max_length=max(max_length,right-left+1)returnmax_length答案6(短鏈接系統)系統架構:1.前端服務:接收用戶請求,轉發(fā)到后端2.后端服務:處理業(yè)務邏輯,包括生成短鏈接、查詢短鏈接3.數據庫:存儲短鏈接映射關系4.緩存:緩存熱點短鏈接,提高查詢效率5.負載均衡器:分發(fā)請求到多個后端服務數據存儲方案:-使用自增ID生成短鏈接-哈希算法將ID映射到短鏈接-使用Redis緩存熱點短鏈接高并發(fā)處理:-使用消息隊列異步處理創(chuàng)建短鏈接的請求-使用分布式鎖防止并發(fā)創(chuàng)建相同的短鏈接答案7(用戶關注功能)系統設計:1.數據模型:-用戶表:user_id,username,...-關注關系表:follower_id,followee_id,follow_time2.主要接口:-關注/取消關注:POST/follow/{user_id}-獲取關注列表:GET/users/{user_id}/followees-獲取粉絲列表:GET/users/{user_id}/followers3.批量操作:-使用事務保證數據一致性-使用批量插入提高性能4.數據一致性問題:-使用分布式鎖防止并發(fā)關注同一個用戶-使用消息隊列異步處理關注關系變更答案8(分布式消息隊列)系統架構:1.生產者:發(fā)送消息到隊列2.消費者:從隊列獲取消息3.隊列服務:存儲消息,處理路由4.緩存:緩存熱點消息5.監(jiān)控系統:監(jiān)控隊列狀態(tài)保證消息不丟失:-生產者確認機制-消息持久化到磁盤-消息重復消費處理處理消息積壓:-調整隊列容量-使用優(yōu)先級隊列-擴展消費者數量答案9(秒殺系統)系統設計:1.前端:-預減庫存,防止超賣-防止重復提交2.后端:-使用分布式鎖-使用Redis緩存庫存3.數據庫:-使用事務保證數據一致性-使用樂觀鎖或悲觀鎖4.負載均衡:-分散請求到多個服務器關鍵點:-使用Redis設置分布式鎖-使用事務保證庫存更新和訂單創(chuàng)建的一致性-設置請求超時時間防止惡意操作答案10(SQL查詢)sqlSELECTuser_id,SUM(price)AStotal_spentFROMordersWHEREorder_time>=DATE_SUB(CURRENT_DATE,INTERVAL1MONTH)GROUPBYuser_idORDERBYtotal_spentDESC;答案11(SQL查詢)sqlSELECTs.id,,AVG(sc.score)ASavg_scoreFROMstudentssJOINscoresscONs.id=sc.student_idGROUPBYs.id,HAVINGAVG(sc.score)>80;答案12(SQL查詢)sqlSELECTp.category,SUM(p.priceoi.quantity)AStotal_salesFROMproductspJOINorder_itemsoiONp.id=duct_idGROUPBYp.categoryORDERBYtotal_salesDESC;答案13(數據庫事務)ACID特性:-原子性(Atomicity):事務中的所有操作要么全部完成,要么全部不做-一致性(Consistency):事務必須使數據庫從一個一致性狀態(tài)轉移到另一個一致性狀態(tài)-隔離性(Isolation):一個事務的執(zhí)行不能被其他事務干擾-持久性(Durability):一個事務一旦提交,它對數據庫中數據的改變就是永久性的保證原子性:-使用事務隔離級別-使用數據庫提供的事務管理機制-使用鎖機制答案14(SQL查詢)sqlSELECTu.username,COUNT(o.id)ASorder_countFROMusersuJOINordersoONu.id=o.user_idWHEREYEAR(o.order_date)=2025GROUPBYu.usernameORDERBYorder_countDESCLIMIT5;答案15(JavaScript事件循環(huán))事件循環(huán)機制:1.主線程執(zhí)行同步代碼2.將異步任務放入任務隊列3.當主線程空閑時,將任務隊列中的任務移到執(zhí)行棧4.執(zhí)行異步任務,執(zhí)行完畢后釋放資源Promise和async/await:-Promise是異步編程的解決方案,可以鏈式調用-async/await是基于Promise的語法糖,使異步代碼更像同步代碼javascript//Promisefetch(url).then(res=>res.json()).then(data=>console.log(data));//async/awaitasyncfunctionfetchData(){constres=awaitfetch(url);constdata=awaitres.json();console.log(data);}答案16(Java線程池)線程池工作原理:1.線程池維護一個線程隊列2.當提交任務時,線程池會先檢查核心線程是否都在工作3.如果核心線程都在工作,則將任務放入任務隊列4.如果任務隊列已滿,則創(chuàng)建新的線程執(zhí)行任務5.非核心線程會在執(zhí)行完任務后返回線程池等待新任務創(chuàng)建線程池:javaThreadPoolExecutorexecutor=newThreadPoolExecutor(5,//核心線程數10,//最大線程數60,//空閑線程存活時間TimeUnit.SECONDS,newArrayBlockingQueue<>(100),//任務隊列newThreadPoolExecutor.CallerRunsPolicy()//拒絕策略);答案17(Python裝飾器)裝飾器原理:pythondefdecorator(func):defwrapper(args,kwargs):print("Beforefunctioncall")result=func(args,kwargs)print("Afterfunctioncall")returnresultreturnwrapper@decoratordeftest_func(x):returnxx記錄函數執(zhí)行時間的裝飾器:pythonimporttimedeftime_decorator(func):defwrapper(args,kwargs):start_time=time.time()result=func(args,kwargs)end_time=time.time()print(f"Function{func.__name__}took{end_time-start_time}seconds")returnresultreturnwrapper@time_decoratordeftest_func(x):time.sleep(1)returnxx答案18(Gogoroutine和channel)goroutine和channel:gopackagemainimport("fmt""time")funcproducer(chchan<-int){fori:=0;i<10;i++{ch<-itime.Sleep(time.Second)}close(ch)}funcconsumer(ch<-chanint){fornum:=rangech{fmt.Println("Received",num)time.Sleep(time.Second2)}}funcmain(){ch:=make(chanint)goproducer(ch)consumer(ch)}答案19(React生命周期)React生命周期:javascriptclassMyComponentextendsReact.Component{constructor(props){super(props);this.state={count:0};}componentDidMount(){//組件掛載后}componentDidUpdate(prevProps,prevState){//組件更新后}componentWillUnmount(){//組件將要卸載}}//React18并發(fā)特性functionMyComponent(){const[count,setCount]=useState(0);React.useEffect(()=>{//掛載時執(zhí)行},[]);return<buttononClick={()=>setCount(c=>c+1)}>Count:{count}</button>;}Hooks使用優(yōu)勢:-代碼更簡潔-邏輯可重用-狀態(tài)管理更清晰答案20(XSS攻擊)XSS攻擊類型:1.存儲型XSS:攻擊payload存儲在服務器,每次請求都會展示2.反射型XSS:攻擊payload在響應中,需要用戶主動觸發(fā)3.DOM型XSS:攻擊payload修改DOM,無需服務器參與防御方法:1.輸入驗證:限制輸入長度、類型、特殊字符2.輸出編碼:對用戶輸入進行HTML編碼3.使用CSP:限制腳本來源4.使用X-XSS-Protection頭示例:javascript//輸出編碼functionescapeHTML(str){returnstr.replace(/&/g,'&').replace(/</
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026吉安市新供商貿物流有限公司招募就業(yè)見習人員2人筆試參考題庫及答案解析
- 2026年西安市蓮湖第一學校招聘筆試備考題庫及答案解析
- 2026浙江麗水蓮都區(qū)投資促進中心招募見習生1人考試參考題庫及答案解析
- 2026上半年安徽事業(yè)單位聯考合肥市巢湖市招聘22人筆試備考試題及答案解析
- 2026湖南邵東市城區(qū)第五完全小學春季見習教師招聘考試參考題庫及答案解析
- 2026山東淄博文昌湖省級旅游度假區(qū)面向大學生退役士兵專項崗位招聘1人筆試模擬試題及答案解析
- 2026年家族辦公室運營培訓
- 2026浙江大學醫(yī)學院附屬第一醫(yī)院江西醫(yī)院(江西省心血管神經腫瘤醫(yī)學中心)高層次人才招聘27人(9)考試參考題庫及答案解析
- 首都師大附中科學城學校教師招聘考試備考題庫及答案解析
- 2026年甘肅嘉峪關市人力資源和社會保障局招聘公益性崗位考試參考題庫及答案解析
- DB5101∕T 214-2025 公園城市立體綠化技術指南
- 基本藥物培訓課件資料
- 汪金敏 培訓課件
- 物流公司托板管理制度
- 醫(yī)療護理操作評分細則
- 自考-經濟思想史知識點大全
- 銀行資金閉環(huán)管理制度
- 2024年山東省胸痛中心質控報告
- 中外航海文化知到課后答案智慧樹章節(jié)測試答案2025年春中國人民解放軍海軍大連艦艇學院
- dlt-5161-2018電氣裝置安裝工程質量檢驗及評定規(guī)程
- 學習無人機航拍心得體會1000字
評論
0/150
提交評論