版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
2026年后端工程師面試題及解析一、編程基礎(chǔ)(3題,每題10分,共30分)題目1:請用Python實現(xiàn)一個函數(shù),輸入一個整數(shù)列表,返回其中所有奇數(shù)的平方和。要求:時間復(fù)雜度O(n),不使用任何內(nèi)置函數(shù)。題目2:用Java編寫一個方法,輸入一個字符串,返回該字符串中每個字符出現(xiàn)的次數(shù),并以`Map<Character,Integer>`形式返回。要求:忽略大小寫,處理空字符串情況。題目3:用C++實現(xiàn)一個線程安全計數(shù)器,要求:支持原子操作,防止多線程并發(fā)時的數(shù)據(jù)競爭。答案及解析題目1答案:pythondefsum_of_odd_squares(nums):total=0fornuminnums:ifnum%2!=0:total+=numnumreturntotal解析:-直接遍歷列表,判斷奇數(shù)后平方累加,時間復(fù)雜度O(n)。-未使用`sum()`或`filter()`等內(nèi)置函數(shù),避免隱式額外開銷。-可優(yōu)化為一次遍歷同時處理,但題目未要求。題目2答案:javaimportjava.util.Map;importjava.util.HashMap;publicMap<Character,Integer>countChars(Stringinput){Map<Character,Integer>result=newHashMap<>();if(input==null||input.isEmpty())returnresult;input=input.toLowerCase();for(charc:input.toCharArray()){result.put(c,result.getOrDefault(c,0)+1);}returnresult;}解析:-首先處理空字符串情況,避免NPE。-使用`toLowerCase()`統(tǒng)一為小寫,忽略大小寫。-`getOrDefault`簡化計數(shù)邏輯,避免重復(fù)判斷。題目3答案:cppinclude<atomic>include<thread>classSafeCounter{private:std::atomic<int>count;public:SafeCounter():count(0){}voidincrement(){count.fetch_add(1,std::memory_order_relaxed);}intget(){returncount.load(std::memory_order_relaxed);}};解析:-使用`std::atomic<int>`保證原子性,避免加鎖開銷。-`fetch_add`為原子操作,`memory_order_relaxed`適用于無依賴場景。-若需更高同步性,可改為`memory_order_seq_cst`。二、數(shù)據(jù)庫與SQL(3題,每題10分,共30分)題目4:假設(shè)有表`orders`(`id`,`user_id`,`total`,`order_date`)和`users`(`id`,`name`,`city`),寫出SQL查詢:返回每個城市的用戶平均訂單金額,且只顯示平均金額大于100的用戶。題目5:用PostgreSQL編寫一個事務(wù),插入一條訂單數(shù)據(jù)到`orders`表,但要求:如果插入過程中`users`表中對應(yīng)的`user_id`不存在,則回滾整個事務(wù)。題目6:解釋PostgreSQL中的MVCC(多版本并發(fā)控制)原理,并說明它與MySQLInnoDB的區(qū)別。答案及解析題目4答案:sqlSELECTcity,AVG(total)ASavg_orderFROMordersJOINusersONorders.user_id=users.idGROUPBYcityHAVINGAVG(total)>100;解析:-使用`JOIN`關(guān)聯(lián)`orders`和`users`表,確保城市信息完整。-`GROUPBYcity`按城市分組,`AVG(total)`計算平均訂單金額。-`HAVING`過濾分組后的結(jié)果,僅保留平均值大于100的記錄。題目5答案:sqlBEGIN;INSERTINTOorders(user_id,total,order_date)VALUES(123,200,NOW());IFNOTEXISTS(SELECT1FROMusersWHEREid=123)ROLLBACK;COMMIT;解析:-使用`BEGIN`開啟事務(wù)。-插入訂單前檢查`users`表中是否存在`user_id`,不存在則回滾。-注意:PostgreSQL無`IFNOTEXISTS`語法,需用子查詢+`ROLLBACK`實現(xiàn)。題目6答案:MVCC原理:-PostgreSQL通過在每次事務(wù)操作時創(chuàng)建數(shù)據(jù)行的快照版本來實現(xiàn)MVCC,確保事務(wù)隔離。-數(shù)據(jù)行包含多個版本(如`xmin`,`xmax`表示可見范圍),查詢根據(jù)事務(wù)ID選擇可見版本。與MySQLInnoDB區(qū)別:-PostgreSQL的MVCC更靈活,支持多版本,隔離級別默認`READCOMMITTED`。-MySQLInnoDB默認`REPEATABLEREAD`,使用Next-KeyLock避免幻讀。三、系統(tǒng)設(shè)計(2題,每題15分,共30分)題目7:設(shè)計一個支持高并發(fā)的短鏈接系統(tǒng),要求:1.輸入長鏈接后返回短鏈接,支持自定義別名。2.系統(tǒng)需支持全球用戶訪問,可用性99.9%。3.短鏈接訪問時需記錄UV和PV數(shù)據(jù)。題目8:設(shè)計一個微博系統(tǒng)的消息推送服務(wù),要求:1.支持實時推送(如新動態(tài)、關(guān)注者更新)。2.若用戶離線,需支持離線消息緩存。3.系統(tǒng)需保證消息不丟失。答案及解析題目7答案:架構(gòu)設(shè)計:1.短鏈接生成:-使用哈希算法(如SHA256)將長鏈接映射為短碼(如62進制)。-支持自定義別名,需校驗唯一性。2.全球可用性:-使用分布式緩存(RedisCluster)存儲短碼->長鏈接映射。-面向全球部署CDN節(jié)點,避免延遲。3.UV/PV統(tǒng)計:-通過Redis的`INCR`原子操作統(tǒng)計訪問量。-日志異步寫入Hadoop/ClickHouse用于長期分析。題目8答案:架構(gòu)設(shè)計:1.實時推送:-使用WebSocket或MQTT實現(xiàn)客戶端實時連接。-服務(wù)端收到更新后直接推送給在線用戶。2.離線消息:-若用戶離線,消息寫入Kafka,客戶端啟動后拉取。-使用Redis過期鍵控制緩存時長。3.不丟失保證:-消息持久化到Kafka,配合冪等訂閱避免重復(fù)消費。-重試機制+死信隊列處理失敗消息。四、分布式與微服務(wù)(2題,每題15分,共30分)題目9:解釋CAP理論,并說明在分布式存儲中如何選擇一致性(Consistency)、可用性(Availability)和分區(qū)容錯性(PartitionTolerance)。題目10:設(shè)計一個秒殺系統(tǒng),要求:1.支持高并發(fā)請求,限制每人限購1件。2.需防止超賣和并發(fā)問題。答案及解析題目9答案:CAP理論:-一致性:所有節(jié)點數(shù)據(jù)實時同步。-可用性:系統(tǒng)持續(xù)響應(yīng)請求,不返回錯誤。-分區(qū)容錯性:網(wǎng)絡(luò)分區(qū)時系統(tǒng)仍能運行。選擇策略:-分布式存儲通常優(yōu)先`AP`(如Cassandra),犧牲一致性換取可用性。-關(guān)鍵業(yè)務(wù)(如金融)需`CP`(如Raft協(xié)議),犧牲可用性保證一致性。題目10答案:架構(gòu)設(shè)計:1.限購邏輯:-用戶請求先查詢Redis緩存(記錄購買狀態(tài))。-未購買則扣減庫存(庫存表需加鎖,如使用Lua腳本)。2.防止超賣:-庫存表使用樂觀鎖(版本號)或悲觀鎖(行鎖)。-超賣后通過補償服務(wù)(如消息隊列)恢復(fù)庫存。五、網(wǎng)絡(luò)安全與性能優(yōu)化(2題,每題15分,共30分)題目11:解釋OWASPTop10中的“SQL注入”原理,并說明如何防御。題目12:優(yōu)化一個慢SQL查詢(執(zhí)行時間>1s),給出至少3種優(yōu)化方法。答案及解析題目11答案:SQL注入原理:-攻擊者通過輸入惡意SQL片段(如`'OR'1'='1`),繞過認證或篡改查詢。防御方法:1.預(yù)編譯語句(PreparedStatements):防止參數(shù)被解釋為SQL代碼。2.輸入驗證:限制輸入類型(如僅數(shù)字、正則校驗)。3.最小權(quán)限原則:
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 渠道費用合同范本
- 蒙牛合作協(xié)議書
- 融資寫合同范本
- 視頻通信協(xié)議書
- 認購書合同范本
- 設(shè)備保固協(xié)議書
- 設(shè)備招標協(xié)議書
- 設(shè)計炒更協(xié)議書
- 試住協(xié)議書模板
- 請人辦證協(xié)議書
- 2025年葫蘆島市總工會面向社會公開招聘工會社會工作者5人備考題庫及參考答案詳解
- 2026班級馬年元旦主題聯(lián)歡晚會 教學(xué)課件
- 2025年沈陽華晨專用車有限公司公開招聘備考筆試題庫及答案解析
- 高層建筑消防安全教育培訓(xùn)課件(香港大埔區(qū)宏福苑1126火災(zāi)事故警示教育)
- 學(xué)堂在線 雨課堂 學(xué)堂云 研究生學(xué)術(shù)與職業(yè)素養(yǎng)講座 章節(jié)測試答案
- 低空經(jīng)濟產(chǎn)業(yè)園建設(shè)項目可行性研究報告
- 中考數(shù)學(xué)講座中考數(shù)學(xué)解答技巧基礎(chǔ)復(fù)習(xí)課件
- APQP流程管理-各階段輸出資料一覽表
- 全口義齒人工牙的選擇與排列 28-全口義齒人工牙的選擇與排列(本科終稿)
- 開放系統(tǒng)11848《合同法》期末機考真題(第17套)
- TWSJD 002-2019 醫(yī)用清洗劑衛(wèi)生要求
評論
0/150
提交評論