版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
2026年軟件工程師初級面試常見問題集一、編程基礎(chǔ)(共5題,每題10分,總分50分)1.題目請用Python實(shí)現(xiàn)一個函數(shù),該函數(shù)接收一個整數(shù)列表,返回列表中所有奇數(shù)的平方和。要求不使用任何外部庫。2.題目解釋JavaScript中的閉包是什么?并給出一個實(shí)際應(yīng)用場景。3.題目用C++實(shí)現(xiàn)一個單鏈表類,包含插入、刪除和查找功能。要求鏈表支持常數(shù)時(shí)間插入。4.題目簡述Java中的異常處理機(jī)制,并說明try-catch-finally語句的執(zhí)行順序。5.題目用Java實(shí)現(xiàn)一個線程安全計(jì)數(shù)器,要求同時(shí)支持多線程遞增和遞減操作。二、算法與數(shù)據(jù)結(jié)構(gòu)(共5題,每題12分,總分60分)1.題目給定一個字符串,請找出其中不重復(fù)的最長子串長度。例如,輸入"abcabcbb",返回"abc"的長度3。2.題目實(shí)現(xiàn)快速排序算法,并說明其時(shí)間復(fù)雜度和空間復(fù)雜度。3.題目設(shè)計(jì)一個LRU(最近最少使用)緩存系統(tǒng),要求支持get和put操作,容量為3。例如:-put(1,1)→緩存是{1=1}-put(2,2)→緩存是{1=1,2=2}-get(1)→返回1-put(3,3)→去除鍵2,緩存是{1=1,3=3}-put(4,4)→去除鍵1,緩存是{4=4,3=3}4.題目用Python實(shí)現(xiàn)二叉樹的深度優(yōu)先遍歷(前序、中序、后序)。5.題目解釋什么是動態(tài)規(guī)劃,并給出一個典型應(yīng)用問題(如斐波那契數(shù)列)。三、系統(tǒng)設(shè)計(jì)(共3題,每題20分,總分60分)1.題目設(shè)計(jì)一個簡單的微博系統(tǒng),需要支持用戶注冊、發(fā)帖、關(guān)注、點(diǎn)贊功能。請說明主要數(shù)據(jù)結(jié)構(gòu)和API設(shè)計(jì)。2.題目如何設(shè)計(jì)一個高并發(fā)的秒殺系統(tǒng)?需要考慮哪些關(guān)鍵點(diǎn)?3.題目設(shè)計(jì)一個短鏈接生成系統(tǒng),要求輸入任意URL生成6位短鏈接,并支持URL的還原。四、數(shù)據(jù)庫與SQL(共3題,每題15分,總分45分)1.題目請寫一個SQL查詢,找出過去30天內(nèi)活躍用戶(至少登錄過一次)數(shù)量最多的前3個城市。2.題目解釋數(shù)據(jù)庫事務(wù)的ACID特性,并說明在什么場景下需要使用事務(wù)。3.題目設(shè)計(jì)一個簡單的電商訂單表,包含訂單ID、用戶ID、商品ID、數(shù)量、總價(jià)、創(chuàng)建時(shí)間等字段。請寫出創(chuàng)建表和插入數(shù)據(jù)的SQL語句。五、網(wǎng)絡(luò)與分布式(共3題,每題15分,總分45分)1.題目簡述TCP三次握手過程,并說明為什么不能是兩次握手。2.題目什么是RESTfulAPI?請說明其設(shè)計(jì)原則。3.題目解釋CAP理論,并說明為什么分布式系統(tǒng)通常需要滿足AP或CP。六、問題解決與編程(共2題,每題25分,總分50分)1.題目給定一個包含n個整數(shù)的數(shù)組,判斷該數(shù)組是否可以劃分為至少兩個連續(xù)的子數(shù)組,且每個子數(shù)組的和相等。例如:-輸入[5,2,4,6,4,4],輸出True(可以劃分為[5,2,4]和[6,4,4])-輸入[1,2,3,4,5],輸出False2.題目實(shí)現(xiàn)一個算法,找出數(shù)組中重復(fù)次數(shù)超過一半的元素。要求時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(1)。答案與解析一、編程基礎(chǔ)答案與解析1.Python實(shí)現(xiàn)奇數(shù)平方和pythondefsum_of_odd_squares(nums):returnsum(xxforxinnumsifx%2!=0)解析:使用列表推導(dǎo)式過濾奇數(shù),然后計(jì)算平方和。時(shí)間復(fù)雜度O(n),空間復(fù)雜度O(1)。2.JavaScript閉包閉包是函數(shù)及其詞法環(huán)境的組合,允許函數(shù)訪問其外部作用域的變量。應(yīng)用場景:javascriptfunctioncreateCounter(){letcount=0;return{increment:function(){count++;returncount;},decrement:function(){count--;returncount;},getCount:function(){returncount;}};}解析:創(chuàng)建私有變量count,通過閉包在全局作用域外訪問。3.C++單鏈表實(shí)現(xiàn)cppclassListNode{public:intval;ListNodenext;ListNode(intx):val(x),next(nullptr){}};classSinglyLinkedList{public:ListNodehead;SinglyLinkedList():head(nullptr){}voidinsert(intval){ListNodenewNode=newListNode(val);newNode->next=head;head=newNode;}voidremove(intval){ListNodecurrent=&head;while(current){if((current)->val==val){ListNodetemp=current;current=(current)->next;deletetemp;return;}current=&((current)->next);}}ListNodefind(intval){ListNodecurrent=head;while(current){if(current->val==val)returncurrent;current=current->next;}returnnullptr;}};解析:頭插法實(shí)現(xiàn)常數(shù)時(shí)間插入。刪除和查找使用迭代。4.Java異常處理javatry{//可能拋出異常的代碼}catch(IOExceptione){//處理IOException}catch(Exceptione){//處理其他異常}finally{//總是執(zhí)行的代碼}解析:try塊執(zhí)行可能拋出異常的代碼,catch塊捕獲并處理異常,finally塊總是執(zhí)行。5.線程安全計(jì)數(shù)器javaimportjava.util.concurrent.atomic.AtomicInteger;publicclassThreadSafeCounter{privateAtomicIntegercount=newAtomicInteger(0);publicvoidincrement(){count.incrementAndGet();}publicvoiddecrement(){count.decrementAndGet();}publicintgetCount(){returncount.get();}}解析:使用AtomicInteger實(shí)現(xiàn)線程安全的原子操作。二、算法與數(shù)據(jù)結(jié)構(gòu)答案與解析1.最長不重復(fù)子串pythondeflength_of_longest_substring(s):char_map={}left=0max_len=0forrightinrange(len(s)):ifs[right]inchar_mapandchar_map[s[right]]>=left:left=char_map[s[right]]+1char_map[s[right]]=rightmax_len=max(max_len,right-left+1)returnmax_len解析:使用滑動窗口和哈希表記錄字符最后出現(xiàn)位置。時(shí)間復(fù)雜度O(n)。2.快速排序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)解析:時(shí)間復(fù)雜度O(nlogn),空間復(fù)雜度O(logn)。實(shí)際應(yīng)用中需要原地排序。3.LRU緩存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)解析:使用哈希表和雙向隊(duì)列實(shí)現(xiàn)。get時(shí)移動到隊(duì)尾,put時(shí)先刪除最舊的。4.二叉樹遍歷python前序遍歷defpreorder(root):ifnotroot:return[]return[root.val]+preorder(root.left)+preorder(root.right)中序遍歷definorder(root):ifnotroot:return[]returninorder(root.left)+[root.val]+inorder(root.right)后序遍歷defpostorder(root):ifnotroot:return[]returnpostorder(root.left)+postorder(root.right)+[root.val]解析:前序根左右,中序左根右,后序左右根。5.動態(tài)規(guī)劃pythondeffib(n):ifn<=1:returnndp=[0](n+1)dp[1]=1foriinrange(2,n+1):dp[i]=dp[i-1]+dp[i-2]returndp[n]解析:斐波那契數(shù)列的典型應(yīng)用,空間復(fù)雜度可優(yōu)化為O(1)。三、系統(tǒng)設(shè)計(jì)答案與解析1.微博系統(tǒng)設(shè)計(jì)主要數(shù)據(jù)結(jié)構(gòu):pythonclassUser:def__init__(self,user_id,username):self.user_id=user_idself.username=usernameself.following=set()self.followers=set()self.tweets=[]classTweet:def__init__(self,tweet_id,user_id,content,timestamp):self.tweet_id=tweet_idself.user_id=user_idself.content=contentself.timestamp=timestampAPI設(shè)計(jì):python用戶注冊defregister(username:str)->User:檢查用戶名是否存在創(chuàng)建新用戶并返回發(fā)帖defpost_tweet(user_id:int,content:str)->Tweet:創(chuàng)建并返回新推文關(guān)注deffollow(user_id:int,target_id:int):添加關(guān)注關(guān)系點(diǎn)贊deflike(tweet_id:int,user_id:int):添加點(diǎn)贊記錄解析:關(guān)注關(guān)系使用雙向集合存儲,推文使用時(shí)間戳排序。2.秒殺系統(tǒng)設(shè)計(jì)關(guān)鍵點(diǎn):1.分布式鎖:使用Redis或ZooKeeper實(shí)現(xiàn)分布式鎖2.限流:使用令牌桶算法控制并發(fā)量3.消息隊(duì)列:使用Kafka或RabbitMQ處理請求4.數(shù)據(jù)庫優(yōu)化:使用行鎖或樂觀鎖5.熔斷:防止雪崩效應(yīng)6.緩存:使用Redis緩存庫存架構(gòu)示意:mermaidgraphLR用戶-->限流器限流器-->分布式鎖分布式鎖-->庫存服務(wù)庫存服務(wù)-->數(shù)據(jù)庫庫存服務(wù)-->訂單服務(wù)訂單服務(wù)-->消息隊(duì)列消息隊(duì)列-->短信服務(wù)消息隊(duì)列-->郵件服務(wù)3.短鏈接生成算法:pythonimporthashlibdefencode_url(url:str)->str:hash_obj=hashlib.md5(url.encode())short=hash_obj.hexdigest()[:6]returnshortdefdecode_url(short:str)->str:實(shí)際應(yīng)用需要映射表return"/"+short解析:使用MD5哈希URL并取前6位。實(shí)際應(yīng)用需要數(shù)據(jù)庫記錄映射關(guān)系。四、數(shù)據(jù)庫與SQL答案與解析1.活躍用戶SQLsqlSELECTcity,COUNT(DISTINCTuser_id)ASactive_usersFROMuser_loginWHERElogin_time>=NOW()-INTERVAL30DAYGROUPBYcityORDERBYactive_usersDESCLIMIT3;解析:使用DISTINCT和GROUPBY統(tǒng)計(jì)活躍用戶,ORDERBY排序。2.事務(wù)ACIDACID特性:-原子性(Atomicity):事務(wù)要么全部完成,要么全部不做-一致性(Consistency):事務(wù)執(zhí)行使數(shù)據(jù)庫從一種一致性狀態(tài)到另一種一致性狀態(tài)-隔離性(Isolation):并發(fā)執(zhí)行的事務(wù)彼此隔離-持久性(Durability):事務(wù)提交后結(jié)果永久保存使用場景:銀行轉(zhuǎn)賬、訂單處理等需要完整性的操作。3.電商訂單表sqlCREATETABLEorders(order_idBIGINTAUTO_INCREMENTPRIMARYKEY,user_idBIGINTNOTNULL,product_idBIGINTNOTNULL,quantityINTDEFAULT1,total_priceDECIMAL(10,2)NOTNULL,created_atTIMESTAMPDEFAULTCURRENT_TIMESTAMP);INSERTINTOorders(user_id,product_id,quantity,total_price)VALUES(1,101,2,199.99);解析:使用自增主鍵,外鍵關(guān)聯(lián)用戶和商品表。五、網(wǎng)絡(luò)與分布式答案與解析1.TCP三次握手過程:1.客戶端發(fā)送SYN=1,seq=x到服務(wù)器2.服務(wù)器回復(fù)SYN=1,ACK=1,seq=y,ack=x+13.客戶端回復(fù)ACK=1,ack=y+1不能是兩次握手:防止已失效的連接請求報(bào)文段突然又傳輸?shù)椒?wù)器,導(dǎo)致服務(wù)器錯誤回復(fù)。2.RESTfulAPI設(shè)計(jì)原則-使用HTTP方法:GET(查),POST(創(chuàng)建),PUT(更新),DELETE(刪除)-資源導(dǎo)向:以資源為中心的URI設(shè)計(jì)-無狀態(tài):服務(wù)器不保存客戶端狀態(tài)-自描述性:URI和HTTP方法說明操作-分層系統(tǒng):客戶端不直接訪問服務(wù)器-緩存:合理使用HTTP緩存機(jī)制示例:GET/usersPOST/usersGET/users/{id}PUT/users/{id}DELETE/users/{id}3.CAP理論-C(Consistency):一致性-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 家裝顧問培訓(xùn)課件
- 2026年電力線路巡檢合同協(xié)議
- 2026年品牌加盟授權(quán)合同
- 電商代運(yùn)營合作合同協(xié)議2026
- 家用電器安全使用培訓(xùn)課件
- 家政育嬰師培訓(xùn)課件
- 客運(yùn)站安全培訓(xùn)需求記錄課件
- 央企BIM培訓(xùn)課件
- 熱力環(huán)流教學(xué)設(shè)計(jì)
- 技術(shù)美學(xué)產(chǎn)品介紹
- 山東省濰坊市2023-2024學(xué)年高一上學(xué)期1月期末考試英語試題 含解析
- 農(nóng)村個人土地承包合同模板
- 2025屆北京市海淀區(qū)一零一中學(xué)數(shù)學(xué)七年級第一學(xué)期期末綜合測試模擬試題含解析
- 初中道德與法治課中提升學(xué)生政治認(rèn)同素養(yǎng)的策略研究
- 糖尿病的急救和護(hù)理
- 中醫(yī)養(yǎng)生的吃野山參粉養(yǎng)生法
- 小學(xué)道德與法治-認(rèn)識居民身份證教學(xué)課件設(shè)計(jì)
- 采購滅火器施工方案
- 小學(xué)生古詩詞大賽備考題庫(300題)
- GB/T 25085.3-2020道路車輛汽車電纜第3部分:交流30 V或直流60 V單芯銅導(dǎo)體電纜的尺寸和要求
- GB/T 242-2007金屬管擴(kuò)口試驗(yàn)方法
評論
0/150
提交評論