OS+MySQL+(其他)八股小記

魯迅先生曾經說過,每天進步一點點,媽媽夸我小天才。

依舊今日八股,這是我在多個文檔整合一起的,可能格式有些問題,請諒解。

操作系統

1.進程和線程的區別?

  1. 進程是代碼在數據集合的一次執行活動,是系統調度資源和分配的基本單位。
  2. 線程是進程的執行路徑,一個進程至少有一個線程,進程中的多個線程共享進程的資源(堆和方法區)。
  3. 線程中有自己的程序計數器和棧。

2.線程上下文切換要做什么,進程呢?

說到線程我們得先了解一下進程的上下文切換。

進程:上下文切換是一種將CPU資源從一個進程分配給另一個進程的機制。切換過程中,操作系統需要先存儲當前進程的狀態(包括內存空間的指針、當前執行完的指令等等),再讀入下一個就進程的狀態,然后執行此進程。

線程:

  1. 當兩個線程不屬于同一個進程,切換過程與進程上下文切換一樣。
  2. 如果線程屬于同一個進程,因為虛擬內存是共享的,所以切換時,虛擬內存這些資源保持不動,只需要切換線程的私有數據、寄存器等不共享的數據。

3.死鎖的四個條件?如何避免?

  1. 互斥條件

對某資源同時只允許一個線程占用,如果還有其他線程請求獲取該資源,則請求者只能等待、直至占有資源的線程釋放該資源。

  1. 請求并持有

一個線程已經占有了某資源,但又提出了新的資源請求,而新的資源已被其他線程占有,所以當前線程會阻塞,但不會釋放自己已持有的資源。

  1. 不可剝奪條件

指線程占有的資源在使用前不會被其他線程搶占,只能在自己使用完畢后由自己釋放資源。

  1. 環路等待條件

發生死鎖時必然存在一個 資源–線程的環形鏈。


其他細節

  • AOP 日志:
    • 為什么用 AOP 而不是過濾器/攔截器?

Spring AOP 底層其實就是基于代理和攔截器機制實現的。
但是從開發者視角來看:

  • Filter(過濾器) → Servlet 層面,適合處理請求/響應,比如跨域、編碼、權限。
  • Interceptor(攔截器) → Spring MVC 層面,適合處理 Controller 前后的邏輯,比如登錄校驗、參數預處理。
  • AOP(切面) → 主要用在業務方法層(Service/DAO),可以做到更細粒度的橫切邏輯,比如公共字段填充、統一日志、事務、埋點。

所以我用 AOP,不是因為它和攔截器完全不同,而是:

  • 它提供了更細粒度的切入點(不僅限于 Controller,還能作用在 Service、DAO)。
  • 和注解結合更自然,可以精確控制哪些方法要切入,而不是所有請求都走一遍。
  • 非侵入性更好,業務代碼不用關心。

  • OSS 文件上傳:
    • 分片上傳和斷點續傳的原理?

分片上傳和斷點續傳的核心邏輯其實在前端。前端把文件切成固定大小的分片,并發調用 OSS 的分片上傳 API。斷點續傳時,前端會保存 uploadId 和已上傳分片的狀態(本地或數據庫),下次上傳時只補傳未完成分片。
服務端這邊比較輕量,主要就是對接 OSS API,做上傳憑證簽名和回調處理。

后:

  • 后端主要做 安全控制:前端要上傳前,先請求后端獲取 OSS 簽名憑證

  • 負責接收 OSS 的 回調通知(上傳完成/失敗),更新數據庫中文件的狀態。

  • 如果有大文件秒傳需求,還可以在后端做 文件唯一性校驗(MD5 校驗),避免重復上傳。

    • 斷點續傳是怎么記錄上傳進度的?
  • Nginx + Tomcat:

    • Nginx 常見負載均衡策略?
  • 輪詢(默認):請求均勻分配。

  • 加權輪詢:根據服務器性能分配權重。

  • IP Hash:同一客戶端 IP 訪問固定節點。

  • 最少連接數:請求分配給當前連接數最少的節點。

  • 一致性哈希(第三方模塊):保證同一用戶盡量落到相同節點。


    • 項目中 session 怎么解決共享問題?

有一個地方涉及到了session共享問題,就是在登錄獲取驗證碼的時候,將驗證碼存到哪里的問題,起初是用HttpSession保存驗證碼。但是因為多臺Tomcat不共享數據,而復制數據給其他Tomcat比較浪費空間,所以考慮使用Redis。


MySQL

Q9: 為什么索引用 B+ 樹而不是 B 樹?
A9:

  • 二叉樹/紅黑樹的儲存數據的層數太深,磁盤IO多。
  • B+ 樹非葉子節點只存索引,只在葉子節點存儲數據,葉子節點之間由鏈表相連,范圍查詢效率高
  • 磁盤頁一般16KB,一個B+樹節點能儲存很多key,樹高一般3、4層就能覆蓋百萬級別的數據

Q10: 覆蓋索引和回表的區別?
A10:

假設user表,id為主鍵,name不加修飾,創建這兩個字段的索引

  • 覆蓋索引:查詢的數據都能在輔助索引里拿到,不用回表。

比如select name from user where name = 'xxx',這樣本身數據就能從輔助索引里找到,不需要回表。

  • 回表:select * from user where id = 1這樣是不需要回表的,聚簇索引(也就是主鍵索引)他是通過B+樹儲存數據,在葉子節點儲存所有數據記錄和主鍵索引,所以會直接查詢到id=1的全部數據。但是,如果執行select * from user where name = 'xxx',因為name屬于輔助索引,輔助索引儲存name索引和主鍵,需要先根據name索引查詢到對應的主鍵,然后根據主鍵去主鍵索引里找對應數據,所以多掃描了一個索引樹,這個過程叫做回表操作。

Q10:什么是最左匹配原則/最左前綴原則?

A10:

  • 當我們為多個列創建 聯合索引(Composite Index)時,索引的查詢利用遵循 從最左邊的列開始匹配
  • 只要中間某個字段沒有使用,就無法繼續利用后續字段的索引。
  • 假如有一個聯合索引
CREATE INDEX idx_user_name_age ON user(name, age, gender);

相當于創建了三個索引組合

  • (name)
  • (name, age)
  • (name, age, gender)

B+樹按照最左有序排列,從左到右建立索引樹,也就是name部分是有序的,查詢數據時會優先比較name來確定下一步搜索的方向,但是如果隔過name的話,那就無從下手了,就不知道下一步該查哪個節點了,就用不上索引了。

Q11: MySQL 事務四大特性 & 隔離級別?
A11:
ACID:原子性、一致性、隔離性、持久性。

  • 原子性:事務作為一個整體被執行,其中包括的對數據庫的操作要么全部成功,要么全部失敗。
  • 一致性:事務執行前,與事務執行后數據不會被破壞。比如a轉賬b賬戶10塊錢,執行完后,帳戶的金額總和是不變的。
  • 隔離性:多個事務并發訪問時,事務之間是隔離的,一個事務不會影響另一個事務的執行。
  • 持久性:事務執行對數據庫的操作,將持久的保存在數據庫中。

隔離級別:讀未提交、讀已提交、可重復讀(默認)、串行化。

  • 臟讀:事務A、B交替執行,事務A讀到了事務B未提交的數據
  • 幻讀:事務A查詢一個范圍的結果集,事務B在這之間插入或者刪除了數據,并靜悄悄的提交,導致事務A再次查詢相同的范圍與發現數據行數多了或者少了。
  • 不可重復讀:在一個事務范圍,兩個相同的查詢,讀取同一條記錄,返回了不同的數據。

Q12: MVCC 是怎么實現的?
A12:

多版本并發控制。通過維護數據歷史版本,從而解決并發訪問情況下的讀一致性問題。
關鍵點:隱式字段、undo 日志、版本鏈、快照讀&當前讀、Read View。

MVCC 的核心是 版本鏈 + ReadView 可見性判斷
InnoDB 在每行數據后面維護 trx_idroll_pointer,更新時不覆蓋舊數據,而是把舊值寫入 Undo Log,形成一個版本鏈。事務在讀的時候會生成 ReadView,通過事務 ID 和活躍事務列表來判斷哪個版本對自己可見。這樣不同事務就能同時讀取到各自一致的數據版本,從而避免了臟讀和不可重復讀。


Q13: SQL 查詢很慢,你怎么排查?
A13:

慢查詢日志和服務監控

  • **慢查詢日志: **開啟 MySQL 的慢查詢日志,再通過一些工具比如 mysqldumpslow 去分析對應的慢查詢日志,當然現在一般的云廠商都提供了可視化的平臺。
  • 服務監控: 可以在業務的基建中加入對慢SQL的監控,常見的方案有字節碼插樁、連接池擴展ORM 框架過程,對服務運行中的慢SQL進行監控和告警。

Q14:有哪些方式優化?

A14:

SQL語句的優化,數據庫設計的優化

一般我們會從幾個方面考慮:

  1. SQL 本身:檢查是否有不必要的字段、函數操作,是否可以改寫成更優的形式;
  2. 索引:查看是否建了合適的索引,能否使用覆蓋索引;
  3. 執行計劃:用 EXPLAIN 看看是否走了全表掃描,rows 預估量大不大;
  4. 表結構:字段類型是否合理,表是否過大,是否需要拆分;
  5. 系統層面:比如加緩存、讀寫分離、分庫分表等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/95094.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/95094.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/95094.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Transformer的并行計算與長序列處理瓶頸總結

🌟 第0層:極簡版(30秒理解)一句話核心:Transformer像圓桌會議——所有人都能同時交流(并行優勢),但人越多會議越混亂(長序列瓶頸)。核心問題 并行優勢&#x…

Vue 3 useId 完全指南:生成唯一標識符的最佳實踐

📖 概述 useId() 是 Vue 3 中的一個組合式 API 函數,用于生成唯一的標識符。它確保在服務端渲染(SSR)和客戶端渲染之間生成一致的 ID,避免水合不匹配的問題。 🎯 基本概念 什么是 useId? useId…

CGroup 資源控制組 + Docker 網絡模式

1 CGroup 資源控制組1.1 為什么需要 CGroup - 容器本質 宿主機上一組進程 - 若無資源邊界,一個暴走容器即可拖垮整機 - CGroup 提供**內核級硬限制**,比 ulimit、nice 更可靠1.2 核心概念 3 件套 | 概念 | 一句話解釋 | 查看方式 | | Hierarchy | 樹…

【ArcGIS微課1000例】0150:如何根據地名獲取經緯度坐標

本文介紹了三種獲取地理坐標的方法:1)在ArcGIS Pro中通過搜索功能定位目標點(如月牙泉)并查看其WGS84坐標;2)使用ArcGIS內置工具獲取坐標;3)推薦三個在線工具(maplocation、地球在線、yanue)支持批量查詢和多地圖源坐標轉換。強調了使用WGS84坐標系以減少誤差,并展示…

HTML應用指南:利用GET請求獲取MSN財經股價數據并可視化

隨著數字化金融服務的不斷深化,及時、準確的財經信息已成為投資者決策與市場分析的重要支撐。MSN財經股價數據服務作為廣受信賴的金融信息平臺,依托微軟強大的技術架構與數據整合能力,持續為全球用戶提供全面、可靠的證券市場數據。平臺不僅提…

雅思聽力第四課:配對題核心技巧與詞匯深化

現在,請拿出劍橋真題,開始你的刻意練習! 內容大綱 課程核心目標舊題回顧與基礎鞏固配對題/匹配題核心解題策略考點總結與精聽訓練表 一、課程核心目標 掌握第二部分配對題的解題策略攻克第三部分匹配題的改寫難點系統整理高頻場景詞匯與特…

SQL Server從入門到項目實踐(超值版)讀書筆記 25

第12章 存儲過程的應用 🎉學習指引 存儲過程(Stored Procedure)是在大型數據庫系統中,一組為了完成特定功能的SQL語句集,存儲過程時數據庫中的一個重要對象,它代替了傳統的逐條執行SQL語句的方式。本章就來…

20.29 QLoRA適配器實戰:24GB顯卡輕松微調650億參數大模型

QLoRA適配器實戰:24GB顯卡輕松微調650億參數大模型 QLoRA 適配器配置深度解析 一、QLoRA 適配器核心原理 QLoRA 作為當前大模型微調領域的前沿技術,通過量化與低秩適配的協同設計,在保證模型效果的前提下實現了顯存占用的革命性降低。其核心由三大技術支柱構成: 4位量化…

QMainWindow使用QTabWidget添加多個QWidget

QTabWidget添加其它Wdiget的2個函數如下&#xff1a; QTabWidget的介紹可參考官網QTabWidget Class | Qt Widgets | Qt 6.9.1 直接上代碼&#xff0c;代碼如下&#xff1a; #include <QMainWindow>#include <QApplication> #include <QVBoxLayout> #includ…

AI學習機哪個好?選這幾款步步高就對了

隨著新教改政策的推進&#xff0c;教育對孩子的綜合素養提出了更高要求。英語更重聽說、數學更重思維&#xff0c;這讓許多家長在輔導孩子時感到壓力倍增。因此&#xff0c;如何選擇一款能真正幫助孩子提升能力的學習機&#xff0c;成為了大家普遍關心的問題。面對市場上功能各…

【設計模式】--重點知識點總結

題1 1、工廠和產品之間是依賴關系 2、工廠方法模式&#xff1a;工廠方法不能為靜態方法。如果是靜態方法&#xff0c;子類無法重寫行為。 簡單工廠可以用靜態方法 3、采用設計模式&#xff0c;以保證成功的設計和體系結構 4、建造者模式&#xff1a;&#xff08;1&#xf…

輕量實現 OCPP 1.6 JSON 協議(歐洲版)的充電樁調試平臺

1 項目概覽 1.1 目標與適用場景 1.1.1 簡介 本文介紹的開源項目 ocpp_charge&#xff0c;是一個 自研輕量實現 OCPP 1.6 JSON 協議&#xff08;歐洲版&#xff09; 的充電樁調試平臺。 它沒有依賴官方 OCPP 1.6J 庫&#xff0c;而是從零實現協議解析與會話管理&#xff0c;適…

Ubuntu 搭建 Solana 區塊鏈開發環境 + Anchor 智能合約完整教程

文章目錄簡介特征核心概念Solana 的工作原理&#xff08;簡單版&#xff09;為什么人們選擇 Solana開發環境準備Solana 官網Solana 文檔Anchor 文檔GithubRust SDK快速安裝 Solana&#xff08;推薦&#xff09;單獨安裝 Solana安裝依賴項安裝 Solana CLI安裝 Anchor CLI安裝 AV…

curl 介紹及使用教程

文章目錄 什么是 curl? 1. 解析用戶輸入與初始化 2. 建立網絡連接 3. 構建并發送請求 4. 接收并處理響應 5. 清理資源 核心特點總結 基本語法 常用功能及示例 1. 基本 HTTP 請求 2. 發送 GET 請求 3. 發送 POST 請求 4. 設置請求頭 5. 處理認證 6. 斷點續傳 7. 跟隨重定向 8. …

【第十一章】Python 隊列全方位解析:從基礎到實戰

Python 隊列全方位解析&#xff1a;從基礎到實戰 本文將從基礎概念到高級應用&#xff0c;用 “文字解釋 代碼示例 圖表對比 實戰案例” 的方式&#xff0c;全面覆蓋 Python 隊列知識&#xff0c;零基礎也能輕松掌握。 文章目錄Python 隊列全方位解析&#xff1a;從基礎到實…

跨平臺開發框架實測:React Native vs Flutter vs Kotlin Multiplatform

本文聚焦 React Native、Flutter 和 Kotlin Multiplatform 三大跨平臺開發框架&#xff0c;從性能表現、開發效率、生態系統、跨平臺一致性及學習成本五個關鍵維度展開實測對比。通過具體場景的測試數據與實際開發體驗&#xff0c;剖析各框架的優勢與短板&#xff0c;為開發者在…

【網弧軟著正版】2025最強軟著材料AI生成系統,基于GPT5.0

軟著材料AI一鍵生成系統 網址&#xff1a;AI軟著材料生成平臺 | 一鍵生成全套軟著文檔 - 網絡弧線 產品簡介&#xff1a; 專業的軟件著作權材料AI生成平臺&#xff0c;基于GPT-5模型開發&#xff0c;自2022年運營至今已服務數萬用戶成功獲得軟著證書。輸入軟件名稱即可自動生成…

存儲掉電強制拉庫引起ORA-01555和ORA-01189/ORA-01190故障處理---惜分飛

機房存儲突然掉電導致Oracle數據庫訪問存儲異常,數據庫報出大量的ORA-27072: File I/O error,Linux-x86_64 Error: 5: Input/output error,ORA-15081: failed to submit an I/O operation to a disk等錯誤,實例直接crash Wed Aug 27 07:11:53 2025 Errors in file /u01/app/ora…

R3:適用于 .NET 的新一代響應式擴展庫,事件訂閱流

R3&#xff1a;適用于 .NET 的新一代響應式擴展庫 R3 是 dotnet/reactive&#xff08;.NET 官方響應式擴展&#xff09;與 UniRx&#xff08;適用于 Unity 的響應式擴展&#xff09;的新一代替代方案&#xff0c;支持多種平臺&#xff0c;包括 Unity、Godot、Avalonia、WPF、W…

Android Framework打電話禁止播放運營商視頻彩鈴

文章目錄定位Android電話的源碼及UI禁止打電話時播放運營商廣告視頻彩鈴運營商視頻彩鈴framework禁止播放視頻彩鈴需求&#xff1a;打電話時&#xff0c;對方未接聽&#xff0c;這個時候可能會播放運營商的視頻彩鈴&#xff0c;需求是屏蔽彩鈴播放。測試平臺&#xff1a;展銳。…