面試不會問題

1. 什么是表鎖?什么是行鎖?什么情況下會使用表鎖?

InnoDB引擎通過“索引”實現行鎖(鎖定滿足條件的行),但如果操作無法通過索引定位行,會導致行鎖失效,進而升級為表鎖。常見的表現為:

(1)條件中未使用索引,InnoDB 無法定位具體行,會鎖整個表;

(2)使用非索引列的范圍查詢,范圍查詢無法通過索引鎖定行,觸發表鎖;

(3)索引失效(如函數 / 類型轉換),索引失效后無法定位行,觸發表鎖;

(4)更新全表的操作,因需更新所有行,行鎖效率低于表鎖。

InnoDB 使用表鎖的核心場景可分為?“主動使用”?和?“被動退化”?兩類,本質是當 “行鎖無法高效實現” 或 “表鎖成本更低” 時的選擇:

(1)主動使用表鎖的場景(顯式或隱式):場景 1:無索引 / 索引失效導致的全表掃描更新、場景 2:執行?LOCK TABLES?顯式鎖表、場景 3:DDL 操作(數據定義語言):所有 DDL 操作(如?ALTER TABLEDROP TABLECREATE INDEX?等)會自動加?表級排他鎖,防止 DDL 過程中表數據被修改導致結構不一致。

(2)被動退化到表鎖的場景:這類場景是 InnoDB 嘗試加行鎖失敗后,被迫升級為表鎖:場景:行鎖沖突過于頻繁,觸發 “鎖升級”:InnoDB 雖然支持行鎖,但每個行鎖的維護(如鎖結構存儲、沖突檢查)需要消耗內存。當一個事務需要鎖定?極多的行(如鎖定數萬行),且行鎖沖突頻繁時,MySQL 可能會觸發?鎖升級(Lock Escalation)—— 將大量行鎖合并為一個表鎖,減少內存消耗和沖突檢查成本。

2. 責任鏈設計模式?策略模式?模板方法模式?

先明確三者的 “本質定位”—— 不同模式解決的核心問題完全不同:

  • 模板方法模式:解決 “步驟固定但細節可變” 的問題(定義流程骨架,留空細節);

  • 策略模式:解決 “多種算法 / 行為可選” 的問題(封裝不同實現,動態切換);

  • 責任鏈模式:解決 “多個對象依次處理請求” 的問題(請求傳遞,直到被處理)。

使用場景:

模板方法模式:適合 “流程固定,細節可變” 的場景;

策略模式:適合 “多種算法可選,需動態切換” 的場景;

責任鏈模式:適合 “請求需多步處理,且處理者不確定” 的場景。

(1)責任鏈模式

核心是?“將多個處理器(Handler)連成一條鏈,請求沿著鏈傳遞,使用多個節點來處理它”。它的存在主要是為了解決三類核心問題:①解耦 “請求發送者” 與 “請求處理者”:傳統寫法中,發送者需要知道哪個處理器能處理請求,比如說使用if-else來判斷,一旦處理器增減或邏輯變化,發送者代碼必須修改。責任鏈模式中,發送者只需將請求 “丟給鏈的頭部”,無需關心鏈上有多少處理器、誰來處理 —— 處理器的增減 / 順序調整,完全不影響發送者。②支持 “動態組合處理流程”:責任鏈的處理器可以動態添加、刪除或調整順序,靈活適配不同場景。③避免 “if-else/switch” 的代碼臃腫:當處理邏輯有多個分支且可能擴展時,if-else會導致代碼冗長、可讀性差,責任鏈用 “對象鏈” 替代分支判斷,代碼更符合單一職責原則(每個處理器只處理自己負責的邏輯)。

(2)模板方法模式

核心定義:定義一個固定的流程骨架(父類),將流程中 “可變的步驟” 延遲到子類實現,確保流程的一致性,同時允許細節靈活調整。
核心思想:“骨架不可變,細節可變”,是一種 “父類定規矩,子類填內容” 的模式。

(3)策略模式

核心定義:將多種可替換的算法 / 行為封裝成獨立的 “策略類”,使算法與使用算法的 “上下文” 解耦,上下文可動態切換不同策略(無需修改原有代碼)。
核心思想:“算法家族化,切換動態化”,是一種 “選擇不同實現” 的模式。

3. MySQL中有哪些事務隔離級別?

讀未提交、讀已提交、可重復讀、串行化。

(1)讀已提交如何解決臟讀?

臟讀:一個事務讀取到另一個事務未提交的修改(可能被回滾的數據)。

RC 級別通過 **“只讀取已提交的數據”** 解決臟讀,核心機制是:

  • 每次讀取都獲取最新的已提交版本:事務中每次執行SELECT時,都會去讀取其他事務已經提交的數據版本,忽略未提交的修改。

  • 實現方式:依賴 MySQL 的多版本并發控制(MVCC)。每個事務修改數據時,會生成一個新的數據版本,并標記版本號(與事務 ID 關聯)。RC 級別下,查詢只會看到 “版本號小于當前事務 ID 且已提交” 的數據,因此不會讀取到未提交的臟數據。

(2)可重復讀如何解決臟讀和不可重復讀?

1. 解決臟讀的機制:與 讀已提交 級別類似,可重復讀 也通過 MVCC 保證 “只讀取已提交的數據”,但對 “已提交版本” 的判斷更嚴格:

  • 事務啟動時會生成一個一致性快照(基于當時的全局事務 ID),整個事務內的所有SELECT都讀取這個快照中的數據。

  • 快照中只包含 “在事務啟動前已提交的版本”,完全忽略事務啟動后其他事務的未提交修改,因此不會出現臟讀。

2. 解決不可重復讀的機制:可重復讀?通過 **“事務內讀取一致性快照”** 解決不可重復讀:

  • 事務啟動時生成的快照會被整個事務復用,無論其他事務是否提交新的修改,本事務內的SELECT始終讀取快照中的舊版本,確保多次讀取結果一致。

(3)可重復讀如何解決幻讀?

幻讀:同一事務內兩次范圍查詢,結果因其他事務插入新數據而增多(“幻覺” 出新行)。

MySQL 的 InnoDB 引擎在 可重復讀 級別通過 **“MVCC 快照讀 + 間隙鎖當前讀”** 組合解決幻讀:

  1. 快照讀(普通SELECT
    依賴一致性快照,事務內兩次范圍查詢都讀取快照數據,其他事務插入的新數據不在快照中,因此不會看到 “新增的行”。

  2. 當前讀(加鎖查詢 / 寫操作,如SELECT ... FOR UPDATEINSERT
    通過間隙鎖(Gap Lock)?鎖定 “可能插入新數據的區間”,阻止其他事務在該區間插入數據,從源頭避免新行產生。

4. 布隆過濾器

布隆過濾器的核心作用是快速判斷一個元素 “是否可能存在”,存在一定的 “誤判率”(但不會漏判)。

原理:通過多個哈希函數將元素映射到一個位數組的多個 bit 位,標記為 1;查詢時,若所有對應 bit 位都是 1,則 “可能存在”,否則 “一定不存在。

特點:優勢:空間效率極高(用 bit 存儲)、查詢速度快(O (k),k 為哈希函數數量);局限:有誤判率(可能把不存在的元素判為 “可能存在”),且不支持刪除操作(刪除會影響其他元素)。

典型使用場景:緩存穿透防護:在緩存前加一層布隆過濾器,提前過濾掉 “一定不存在的 key”,避免請求穿透到數據庫(如惡意查詢不存在的 ID);海量數據去重:如爬蟲 URL 去重(判斷 URL 是否已爬取)、郵件黑名單過濾等。

5. BitMap實現簽到

(1)Key 的設計
用于唯一標識用戶的簽到記錄,通常采用?“業務前綴:用戶 ID: 時間維度”?的結構化命名,例如:user:sign:1001:2024(用戶 ID=1001 在 2024 年的簽到記錄)
時間維度根據業務需求選擇(年 / 月 / 日),推薦按 “月” 拆分,避免單 Bitmap 過大。

(2)Value 的設計
Bitmap 的 value 是一個?二進制數組(bit 序列),每個 bit 位對應一天的簽到狀態:1?表示該天已簽到,0?表示未簽到。位的索引(offset)對應 “當月的第幾天”(通常從 0 開始,如 0 代表 1 號,1 代表 2 號,以此類推)。

(3)具體實現

①簽到操作(記錄簽到狀態):邏輯:用戶簽到時,將對應日期的 bit 位設為 1。命令SETBIT key offset 1;

②統計簽到情況:檢查某天是否簽到:GETBIT key offset?→ 返回 1 表示簽到,0 表示未簽到。

③統計當月簽到總次數:BITCOUNT key?→ 統計 bitmap 中 1 的總數。

④計算連續簽到天數:從當天 offset 往前遍歷,找到第一個 0 的位置,當前 offset 與該位置的差值即為連續天數。

⑤查找當月簽到的所有日期:遍歷 bitmap 所有 bit 位,記錄值為 1 的 offset,再轉換為具體日期。

(4)優勢

  • 極致省內存:1 個月(30 天)的簽到記錄僅需 30 bit(約 4 字節),1000 萬用戶存儲 1 年也僅需約 45MB。

  • 操作高效:基于位運算,簽到和統計的時間復雜度均為 O (1) 或 O (n)(n 為天數,通常很小)。

(5)注意事項

時間維度拆分:避免按年存儲(365 天)導致單 bitmap 過大,推薦按月拆分(最多 31 位)。

offset 計算:需確保日期與 offset 正確映射(如 1 號對應 0,2 號對應 1),避免錯位。

過期清理:對于過期的簽到記錄(如去年的月度數據),可通過?EXPIRE?設置過期時間自動清理。

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

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

相關文章

達夢數據庫-用戶,權限,角色

達夢數據庫-用戶,權限,角色 在達夢數據庫(DM8)中,用戶(User)、權限(Privilege)和角色(Role) 是數據庫安全體系的核心組成部分,用于控制誰可以訪問數據庫、能訪問哪些對象以及能執行哪些操作。 下面為你提供一份全面、詳細、結構化的說明,幫助你深入理解達夢數據…

uniapp原生插件 TCP Socket 使用文檔

uniapp原生插件 TCP Socket 使用文檔 試了插件市場幾個TCP Socket插件都不能實現監聽服務器主動斷開,于是閑來無事就開發了一款,本插件是一個基于 Netty 實現的 TCP 通信模塊,用于在 UniApp 插件中提供 TCP 連接、數據發送和連接管理功能。以…

VM中CentOS 7密碼重置

重啟虛擬機點擊e進入內核處理向下劃找到UTF-8在后面輸入rd.breakctrl X進入單用戶模式mount -o remount,rw/sysroot進行掛盤 chroot /sysroot訪問系統,并使用passwd修改root密碼 出現亂碼 輸入LANGen touch /.autorelabel 保存配置 exit exit退出等待系統重新打開&…

車規級MOS管AEC-Q101認證的關鍵參數解讀與失效模式-深圳阿賽姆

摘要本文拆解AEC-Q101認證的7大關鍵測試項(UIS/溫度循環/THB等),結合M120N06JC等型號實測數據,解析雪崩失效/柵氧擊穿/綁定線脫落等故障機理,附選型核查表一、AEC-Q101認證核心測試項與參數解讀1.1 非鉗位電感開關測試…

嵌入式鐵頭山羊stm32-ADC實現軟件觸發的常規序列的單通道轉換-Day25

目錄 一、實驗目的 二、電路連接 三、實驗執行(五步) 1.初始化ADC的IO引腳 2.配置ADC的時鐘,注意要小于14MHz 3.根據ADC的編程接口 實現初始化ADC的基本參數 4.配置常規序列并閉合觸發輸入開關 5.閉合總開關、啟動并讀取轉換結果 四…

多模態模型出現“幻覺”,描述了表格中不存在的內容,如何修正?

在日常工作中,多模態模型的 “幻覺” 問題已成為影響效率的關鍵痛點 —— 當我們需要模型基于文檔生成建議性內容(如行業報告分析、論文數據解讀等)時,模型常因無法準確理解文檔信息,輸出包含 “虛構內容” 的結果&…

Java AI 智能問數:Function調用版如何重塑企業數據決策

Java AI 智能問數:Function調用版如何重塑企業數據決策 在數字化轉型浪潮中,企業一把手常面臨數據查詢的痛點:分析師需編寫復雜SQL,業務人員依賴IT支持,決策鏈條冗長。傳統方法效率低下,而自然語言處理&…

AI-調查研究-74-具身智能 機器人學習新突破:元學習與仿真到現實遷移的挑戰與機遇

點一下關注吧!!!非常感謝!!持續更新!!! 🚀 AI篇持續更新中!(長期更新) AI煉丹日志-31- 千呼萬喚始出來 GPT-5 發布!“快的…

勞務員的就業前景如何?

勞務員的就業前景整體較為樂觀,受到行業需求、政策支持等因素的積極影響,同時也面臨著一些挑戰。以下是具體分析:1.就業優勢行業需求穩定:建筑行業作為國民經濟的支柱產業,持續發展使得對勞務員的需求較為穩定。無論是…

libvirt 新手指南:從零開始掌握虛擬化管理

引言 在云計算、大數據和邊緣計算的時代,虛擬化技術已成為 IT 基礎設施的核心支柱。它允許我們在單一物理服務器上運行多個虛擬機(Virtual Machine,簡稱 VM),從而實現資源的高效利用、快速部署和靈活擴展。對于新手來說…

OpenLayers數據源集成 -- 章節三:矢量要素圖層詳解

前言在前面的文章中,我們學習了OpenLayers的瓦片圖層(TileLayer)技術。本文將深入探討OpenLayers中的矢量要素圖層(VectorFeatureLayer)功能,這是WebGIS開發中處理矢量數據、實現交互式地圖的核心技術。矢量…

從“能說話”到“會做事”:AI Agent如何重構日常工作流?

從“能說話”到“會做事”:AI Agent如何重構日常工作流?在人工智能飛速發展的當下,AI已從最初簡單的語音交互、信息檢索進化到了具備自主決策與行動能力的新階段,其中AI Agent的出現堪稱關鍵轉折點。從只能機械“說話”回答問題&a…

隨身wifi到底有沒有用?

不用繞彎子,直接說清隨身WiFi怎么回事,對比完家用WiFi和手機熱點,再避坑~一、先明白:隨身WiFi到底是啥? 1、簡單講就是「能揣兜里的WiFi發射器」——要么插張物聯卡,要么內置流量,能…

MySQL問題8

MySQL深度分頁優化思路 常見的3種優化思路如下: 1. 子查詢優化方式 示例改寫前: SELECT * FROM words WHERE name oee ORDER BY id LIMIT 99999990, 10;這個寫法會導致 MySQL 掃描并丟棄前面 99999990 行,效率極低。 示例改寫后&#xff…

洛谷 P1249 最大乘積-普及/提高-

P1249 最大乘積 題目描述 一個正整數一般可以分為幾個互不相同的自然數的和,如 312312312,413413413,514235142351423,615246152461524。 現在你的任務是將指定的正整數 nnn 分解成若干個互不相同的自然數(也可以不分解…

大學地理信息科學該如何學習才能好就業

一、明確專業特點與就業方向地理信息科學是一門交叉性強、實踐性強的學科,融合了地理學、計算機科學、測繪、遙感等多個領域,廣泛應用于自然資源管理、城市規劃、交通、環境、農業、水利、智慧城市等行業。主要就業方向包括:政府部門/事業單位…

【git】Git 大文件推送失敗問題及解決方案

Git 大文件推送失敗問題及解決方案 在日常開發中,我們經常會遇到這樣的問題: Remote: File [xxx.exe] size 188.156MB, exceeds quota 100MB Remote: Please remove the file[s] from history and try again這是因為 Gitee/GitHub 等平臺對單個文件大小有…

國產銀河麒麟三維數字沙盤大數據可視化研訓推演模擬仿真地理信息系統

國產銀河麒麟三維數字沙盤大數據可視化研訓推演模擬仿真地理信息系統獨立自主知識產權和原創源代碼級地理信息系統平臺,核心引擎與算法實現全棧國產化,提供從數據采集、處理到可視化分析的全鏈條自主可控解決方案, 1.2支持國產操作系統&…

GPT Server 文檔

目錄配置文件的詳細說明(后續持續完善)openai_api_server配置控制器(controller)配置模型(worker)配置模型配置大語言模型 示例:QwenEmbedding模型 示例:Conan-embedding-v1TTS文本轉語音模型 示例: Spark-TTST2I 文生圖模型示例:…

中國移動云電腦一體機-創維LB2004_瑞芯微RK3566_2G+32G_開啟ADB ROOT安卓固件-方法3

中國移動云電腦一體機-創維LB2004_瑞芯微RK3566_2G32G_開啟ADB ROOT安卓固件-方法3 聲明,這個安卓固件root一旦恢復出廠設置,會變回原樣,雖然root,但也無法自行操作。 建議按照:中國移動云電腦一體機-創維LB2004_瑞芯微…