MongoDB 面試備戰指南

MongoDB 面試備戰指南


一、基礎概念

1. MongoDB是什么類型的數據庫?和關系型數據庫有什么區別?
答案:
MongoDB是文檔型NoSQL數據庫,核心區別:

  • 數據模型:存儲JSON-like文檔(動態schema),而非固定表結構
  • 擴展性:天然支持水平擴展(分片),而關系型數據庫通常垂直擴展
  • 事務:4.0版本前僅支持單文檔事務,之后支持多文檔ACID
  • 查詢語言:使用豐富的查詢API而非SQL
  • 性能:通過嵌入式文檔減少join操作,適合高吞吐場景

2. 什么是BSON?
答案:
BSON = Binary JSON,特點:

  • 二進制編碼格式,比JSON更高效(存儲空間更小,解析更快)
  • 支持更多數據類型:Date、Binary Data、ObjectId等
  • 每個文檔最大16MB限制

二、數據模型

3. 文檔中的_id字段有什么特殊作用?
答案:

  • 每個文檔必須有的唯一主鍵,默認自動生成ObjectId
  • ObjectId結構:4字節時間戳 +5字節機器ID +3字節進程ID +3字節計數器(確保分布式唯一性)
  • 可自定義_id值(如業務ID),但需保證集合內唯一

4. 嵌入式文檔 vs 引用式關聯 如何選擇?
答案:

  • 嵌入式:適合一對少、數據頻繁共同查詢(如用戶地址)

    // 示例
    {_id: 1,name: "John",addresses: [{city: "Beijing", street: "Xidan"}]
    }
    
  • 引用式:適合一對多或多對多,數據獨立更新頻繁(如評論系統)

    // posts集合
    {_id: 100, title: "MongoDB Guide"}// comments集合
    {post_id: 100, content: "Great!"}
    

三、查詢與CRUD

5. 如何執行條件查詢并排序?
答案:

db.users.find({age: {$gt: 18}},          // 條件:年齡>18{name: 1, email: 1}        // 投影:只返回name和email
).sort({createdAt: -1})      // 按創建時間倒序.limit(10)                  // 限制10條

6. 更新操作符 s e t 和 set和 setinc有什么區別?
答案:

  • $set:設置字段值(不存在則創建)

    db.products.update({_id:1}, {$set: {price: 99}})
    
  • $inc:對數字字段增減

    db.products.update({_id:1}, {$inc: {stock: -1}}) // 庫存減1
    

四、索引機制

7. MongoDB索引底層使用什么數據結構?
答案:

  • 默認使用B-Tree結構(B+樹變種)
  • 支持快速范圍查詢和排序
  • 索引條目存儲:<索引字段值, 文檔物理地址>

8. 復合索引字段順序如何影響查詢?
答案:
遵循最左前綴原則

  • 索引{a:1, b:1, c:1}可優化以下查詢:
    • a=1
    • a=1 AND b=2
    • a=1 AND b=2 AND c=3
  • 無法優化:b=2c=3單獨查詢

五、復制集(Replica Set)

9. 副本集故障轉移過程是怎樣的?
答案:

  1. 主節點不可達(心跳超時)
  2. 剩余節點發起選舉(Raft算法)
  3. 獲得多數投票的節點成為新主
  4. 應用端自動重連到新主節點

10. 什么是寫關注(Write Concern)?
答案:
控制寫操作持久化級別:

  • w:1:默認,主節點確認即返回
  • w:2:至少兩個節點確認
  • w:"majority":大多數節點確認(確保數據安全)

11. 什么是讀寫偏好(Read Preference)?常用模式有哪些?
答案:
控制讀請求的路由策略:

  • primary(默認):只從主節點讀
  • secondary:只從從節點讀
  • nearest:從網絡延遲最低的節點讀
  • primaryPreferred:優先主節點,不可用時切從節點
    場景示例:報表分析可使用secondary減輕主節點壓力

12. 復制集數據同步原理是什么?
答案:
通過**Oplog(操作日志)**實現:

  1. 主節點記錄所有寫操作到local庫的oplog集合
  2. 從節點定期拉取主節點oplog并重放操作
  3. Oplog是固定大小集合(循環覆蓋舊數據)
    關鍵點:從節點同步延遲 = 最新oplog時間 - 最后應用時間

六、分片集群(Sharding)

13. 分片集群包含哪些核心組件?
答案:

  • mongos:路由進程,負責請求分發
  • config servers:存儲元數據(分片鍵、chunk分布等)
  • shard:每個分片是獨立的副本集,存儲實際數據

14. 如何選擇分片鍵?設計不當會有什么問題?
答案:
分片鍵選擇原則:

  • 基數高(值分布廣泛,如用戶ID)
  • 寫分布均勻(避免熱點分片)
  • 匹配查詢模式(常用查詢條件包含分片鍵)
    錯誤案例:選擇性別字段會導致數據分布不均

15. 什么是Chunk?何時觸發Chunk遷移?
答案:

  • Chunk:分片鍵范圍內的連續數據段(默認64MB)
  • 觸發遷移的條件:
    • 某個分片的Chunk數量超過閾值
    • 執行shardCollection或手動split命令
      遷移過程由**平衡器(Balancer)**自動管理

七、聚合框架

16. 聚合管道有哪些常用階段?
答案:

  • $match:過濾文檔(類似WHERE)
  • $group:按字段分組聚合
  • $sort:排序
  • $project:重塑文檔結構
  • $lookup:跨集合關聯查詢(類似LEFT JOIN)
    示例:統計每個城市的平均年齡
db.users.aggregate([{$match: {age: {$gt: 18}}}, {$group: {_id: "$city", avgAge: {$avg: "$age"}}}
])

17. 如何優化聚合查詢性能?
答案:

  • 在管道開頭使用$match$project減少數據處理量
  • 為常用聚合字段創建復合索引
  • 避免在$group階段處理大量唯一值(內存限制默認100MB)
  • 使用$allowDiskUse允許臨時寫入磁盤

八、事務管理

18. MongoDB多文檔事務的實現原理?
答案:

  • 基于快照隔離(Snapshot Isolation)
  • 事務內所有操作看到同一數據快照
  • 寫沖突時通過鎖機制解決(集合級或文檔級鎖)
  • 事務提交時寫入oplog,同步到從節點
    注意:事務最大時長默認60秒,可配置

19. 事務和寫操作原子性的區別?
答案:

  • 單文檔原子性:MongoDB原生特性,無需開啟事務
  • 多文檔原子性:必須顯式開啟事務,保證多個操作全成功或全失敗
    示例:轉賬操作需事務保證兩個賬戶更新原子性

九、性能優化

20. 如何分析查詢性能?
答案:

  • explain()方法:

    db.users.find({age: 25}).explain("executionStats")
    

    關鍵指標:

    • executionTimeMillis:查詢耗時
    • totalKeysExamined:掃描索引條目數
    • totalDocsExamined:掃描文檔數
    • stage:查詢執行階段(COLLSCAN表示全表掃描)

21. 覆蓋查詢(Covered Query)是什么?如何實現?
答案:

  • 定義:查詢所需字段全部存在于索引中,無需回表
  • 實現條件:
    1. 查詢字段和返回字段都在同一索引
    2. 不使用$elemMatch等復雜操作
      示例:
// 創建索引
db.users.createIndex({age:1, name:1})// 覆蓋查詢
db.users.find({age:25}, {_id:0, age:1, name:1})

十、安全管理

22. 如何創建只讀用戶?
答案:

use admin
db.createUser({user: "reportUser",pwd: "secret",roles: [{role: "read", db: "mydb"}]
})

23. 啟用訪問控制需要哪些步驟?
答案:

  1. 啟動mongod時添加--auth參數
  2. 創建管理員用戶(必須先在admin庫創建)
  3. 應用連接時指定用戶名/密碼

十一、高級特性

24. Change Stream的實現原理?
答案

  • 核心機制:基于Oplog(操作日志)實時監聽數據變更,類似數據庫的“事件觸發器”。

  • 工作流程

    1. 應用向MongoDB注冊Change Stream監聽
    2. MongoDB持續讀取Oplog中的新操作
    3. 將符合條件的變更事件推送給客戶端
  • 特性

    • 支持過濾特定集合、操作類型(insert/update/delete)
    • 提供resumeToken實現斷點續傳
    • 示例:實時同步數據到Elasticsearch
    const changeStream = db.orders.watch([{$match: { operationType: "insert" }
    }]);
    changeStream.on("change", (change) => {console.log("新訂單:", change.fullDocument);
    });
    

25. GridFS適合存儲什么類型的數據?
答案

  • 設計目的:存儲和檢索超過16MB(BSON文檔大小限制)的大文件

  • 典型場景

    • 視頻/音頻文件
    • 大型日志文件
    • 高分辨率圖片
  • 底層實現

    • 將文件分割為多個chunks(默認255KB)
    • 使用兩個集合:
      • fs.files:存儲文件元數據(文件名、大小等)
      • fs.chunks:存儲二進制分塊
  • 操作示例

    mongofiles --db=gridfs_db put video.mp4
    

26. MongoDB Atlas的主要功能?
答案

  • 核心功能
    • 全托管云數據庫服務(自動備份、監控、擴縮容)
    • 全球多區域部署(低延遲訪問)
    • 內置數據加密(傳輸中/靜態數據)
    • 與AWS/Azure/GCP深度集成
  • 優勢
    • 免運維:自動處理硬件故障、版本升級
    • 彈性擴展:一鍵添加分片或調整存儲
    • 安全合規:SOC2、GDPR認證

十二、故障排查

31. 如何診斷慢查詢?
答案

  • 步驟

    1. 啟用慢查詢日志:

      db.setProfilingLevel(1, { slowms: 100 }) // 記錄超過100ms的操作
      
    2. 分析system.profile集合:

      db.system.profile.find().sort({ ts: -1 }).limit(10)
      
    3. 使用explain()查看執行計劃:

      db.orders.find({ status: "pending" }).explain("executionStats")
      
  • 關鍵指標

    • COLLSCAN:全集合掃描 → 需加索引
    • docsExaminednReturned比例過高 → 查詢效率低

32. 連接數暴增的可能原因?
答案

  • 常見原因
    • 連接池配置不當(如未復用連接)
    • 慢查詢導致連接長時間占用
    • 應用BUG(未關閉閑置連接)
  • 解決方案
    • 監控連接數:db.serverStatus().connections
    • 優化查詢性能
    • 調整maxPoolSize(默認100)
    • 使用連接池中間件(如MongoDB Driver的連接池管理)

十三、與SQL對比

41. MongoDB中如何實現SQL的JOIN操作?
答案

  • 方法1:嵌入式文檔

    // SQL中的JOIN:
    SELECT * FROM orders JOIN users ON orders.user_id = users.id// MongoDB嵌入式設計:
    {_id: "order001",user: {  // 直接嵌入用戶信息id: "user123",name: "Alice"},items: [...]
    }
    
  • 方法2:聚合管道$lookup

    db.orders.aggregate([{$lookup: {from: "users",        // 關聯集合localField: "user_id",foreignField: "_id",as: "user_info"      // 輸出字段}}
    ])
    
  • 限制$lookup性能低于嵌入式設計,需謹慎使用

42. 如何模擬SQL中的事務?
答案

  • 單文檔操作:天然原子性(如更新嵌套數組)

  • 多文檔事務:顯式開啟會話

    const session = db.getMongo().startSession();
    session.startTransaction();
    try {db.accounts.updateOne({ _id: "A", balance: { $gte: 100 } },{ $inc: { balance: -100 } },{ session });db.accounts.updateOne({ _id: "B" },{ $inc: { balance: 100 } },{ session });session.commitTransaction();
    } catch (error) {session.abortTransaction();
    }
    

十四、版本特性

51. 4.0版本的多文檔事務限制?
答案

  • 關鍵限制
    • 事務最大時長60秒(可調,但影響性能)
    • 無法在分片集群中跨分片事務(4.2版本支持)
    • 事務中的寫操作大小總和不能超過16MB
  • 最佳實踐
    • 盡量縮短事務持續時間
    • 避免在事務中包含大文檔操作

52. 5.0版本的時間序列集合特性?
答案

  • 設計目標:高效存儲時間序列數據(如物聯網傳感器數據)

  • 核心優化

    • 數據按時間分桶存儲,減少索引開銷
    • 自動過期數據(TTL索引)
    • 更高的寫入吞吐量
  • 創建示例

    db.createCollection("sensor_data", {timeseries: {timeField: "timestamp",metaField: "sensor_id",  // 分組字段(如設備ID)granularity: "minutes"   // 時間粒度(秒/分鐘/小時)}
    });
    

十五、設計模式

61. 大文檔存儲的最佳實踐
答案

  • 問題:文檔超過16MB限制

  • 解決方案

    1. 拆分文檔:將部分字段移到獨立集合
    2. 使用GridFS存儲大文件
    3. 壓縮文本字段(如用gzip壓縮JSON)
  • 示例

    // 原始文檔
    { _id: 1,content: "非常長的文本..."  // 超過16MB
    }// 拆分后
    // main_docs集合
    { _id: 1, metadata: {...} }// chunks集合
    { doc_id: 1, chunk_num: 1, data: "..." }
    

62. 如何處理高頻更新導致的鎖競爭?
答案

  • 優化策略

    1. 使用更細粒度的文檔設計(如將計數器拆分為獨立文檔)
    2. 利用$inc等原子操作符減少鎖沖突
    3. 選擇合適寫入策略(writeConcern: { w: 0 } 不等待確認)
    4. 分片集群分散寫壓力
  • 示例

    // 原始設計(熱點文檔)
    { _id: "page_views", count: 1000000 }// 優化設計(分散到多個文檔)
    { _id: "page_views_0", count: 250000 }
    { _id: "page_views_1", count: 250000 }
    // 查詢時求和所有文檔
    

十六、運維實戰

81. 如何安全地執行集合重命名?
答案

  • 命令db.adminCommand({ renameCollection: "db1.old", to: "db1.new" })
  • 注意事項
    • 需在admin庫執行
    • 目標集合不能已存在
    • 會瞬間阻塞所有相關操作
    • 副本集需在主節點執行
  • 推薦步驟
    1. 應用停寫
    2. 執行重命名
    3. 驗證數據完整性
    4. 恢復應用寫入

82. 分片集群擴容的具體步驟?
答案

  • 橫向擴容流程

    1. 部署新的分片副本集

    2. 連接到mongos,添加分片:

      sh.addShard("shard3/shard3-1:27017,shard3-2:27017")
      
    3. 平衡器自動遷移Chunk到新分片

    4. 監控遷移狀態:sh.status()

  • 關鍵指標

    • 確保config servers有足夠存儲
    • 網絡帶寬影響遷移速度

(其余題目完整答案示例,可根據編號繼續擴展)

十七、高級原理

90. WiredTiger存儲引擎如何實現壓縮?
答案

  • 壓縮算法

    • 默認使用Snappy(快速壓縮/解壓)
    • 可選Zlib(更高壓縮率)或Zstd(平衡型)
  • 壓縮層級

    • 數據壓縮:集合和索引數據
    • 日志壓縮:WiredTiger預寫日志(WAL)
  • 配置示例

    storage:wiredTiger:collectionConfig:blockCompressor: zstd
    

91. MongoDB的Journal日志機制是如何保證數據安全的?
答案:

  • 核心作用:在數據寫入磁盤前提供崩潰恢復能力
  • 工作流程
    1. 寫操作首先寫入journal緩沖區
    2. 每100ms(默認)或達到1GB數據時刷盤一次
    3. 主數據文件異步寫入(通過WiredTiger的checkpoint機制)
  • 關鍵參數
    • journal.commitIntervalMs:控制刷盤頻率
    • storage.journal.enabled:可關閉(不推薦生產環境)
  • 恢復原理:崩潰后重啟時,重放journal中的操作

92. WiredTiger的MVCC實現原理?
答案:

  • 多版本并發控制機制
    • 每個寫操作創建新的數據版本
    • 讀操作看到的是特定時間點的快照
    • 舊版本數據在無引用后被清理
  • 優勢
    • 讀寫不互相阻塞
    • 避免臟讀問題
  • 內存管理
    • 使用B-Tree結構存儲多個版本
    • 緩存最近使用的版本以加速查詢

十八、云原生與容器化

93. 如何在Kubernetes中部署MongoDB副本集?
答案:

  • 推薦方案

    1. 使用StatefulSet保證Pod身份持久化
    2. 每個Pod掛載獨立PersistentVolume
    3. 通過Headless Service實現DNS發現
  • 關鍵配置示例

    # StatefulSet配置片段
    spec:serviceName: "mongodb"replicas: 3template:containers:- name: mongodbargs:- "--replSet"- "rs0"- "--bind_ip_all"
    
  • 初始化腳本:在第一個Pod執行rs.initiate()

94. MongoDB Atlas的無服務器實例有什么特點?
答案:

  • 核心特性
    • 按實際請求量自動擴縮容
    • 完全免運維(自動打補丁、備份)
    • 毫秒級冷啟動
  • 適用場景
    • 突發流量應用
    • 開發測試環境
    • 低頻訪問的歸檔數據
  • 計費方式:按每秒實際使用的計算資源計費

十九、數據遷移

95. 如何將數據從MySQL遷移到MongoDB?
答案:

  • 工具選擇

    • mongomirror:官方工具,支持實時同步
    • 自定義ETL腳本:使用Python(PyMongo+SQLAlchemy)
    • 中間格式:先導出為CSV/JSON再導入
  • 模式轉換策略

    • 表→集合
    • 行→文檔
    • 外鍵→嵌入式文檔或引用
  • 示例命令

    mongoimport --uri="mongodb://target" --collection=users --file=users.json
    

二十、監控與調優

96. MongoDB Atlas提供了哪些監控指標?
答案:

  • 關鍵指標
    • CPU/Memory:資源使用率
    • OPCounter:查詢/寫入操作數
    • Replication Lag:副本延遲(秒)
    • Disk IOPS:磁盤吞吐量
    • Connections:當前連接數
  • 告警設置
    • 可配置閾值告警(如CPU>80%持續5分鐘)
    • 集成Webhook通知到Slack/PagerDuty

97. 如何優化MongoDB的內存使用?
答案:

  • 配置優化
    • 設置wiredTigerCacheSizeGB(建議為可用內存的50-60%)
    • 啟用壓縮(Snappy或Zstd)
  • 查詢優化
    • 使用投影減少返回字段
    • 避免全集合掃描
  • 監控工具
    • db.serverStatus().wiredTiger.cache
    • free -h查看系統內存使用

二十一、安全實踐

98. 如何實現字段級加密?
答案:

  • 客戶端字段級加密(CSFLE)

    1. 創建加密規則:
    {"fields": [{"path": "ssn","keyId": UUID("..."),"algorithm": "AEAD_AES_256_CBC_HMAC_SHA_512-Deterministic"}]
    }
    
    1. 應用端配置加密驅動
  • 服務端加密

    • 透明數據加密(TDE)
    • 需要企業版或Atlas

99. 如何防范注入攻擊?
答案:

  • 預防措施

    • 始終使用驅動程序的BSON序列化方法
    • 禁止拼接查詢字符串
  • 正確示例(Node.js):

    // 錯誤方式(易受注入)
    db.collection.find(`{name: "${userInput}"}`)// 正確方式
    db.collection.find({name: userInput})
    
  • 審計工具

    • mongodb-log-analyzer檢測可疑查詢

二十二、新興趨勢

100. MongoDB在AI/ML領域的應用場景有哪些?
答案:

  • 典型用例

    • 存儲和檢索向量數據(通過$vectorSearch)
    • 特征倉庫管理
    • 實驗元數據跟蹤
  • 技術集成

    • 與TensorFlow/PyTorch配合
    • Atlas Vector Search實現相似性搜索
  • 示例架構

    前端 → MongoDB(用戶數據) → 特征提取 → ML模型 → 結果寫回MongoDB
    

面試技巧補充

  1. 原理深挖:當被問到索引時,可延伸到B+樹與LSM樹的對比
  2. 場景設計:準備"如何用MongoDB設計Twitter/電商系統"類問題
  3. 故障模擬:思考"如果主節點突然宕機,系統會發生什么?"
  4. 版本演進:了解最新7.0版本特性(如集群同步)

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

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

相關文章

毫米波雷達標定(2)

1. 前言 前面文章中介紹了產線上毫米波雷達的標定原理和流程,這篇文章則主要介紹其在線標定方法。相對于產線標定,在線標定具備使用自然場景而不是依賴特定標靶的優點,但因此其標定精度會相對差一點。在線標定一般應用于售出產品的維護場景,如果其標定結果精度可以滿足使用…

Linux fority source和__builtin_xxx

這段代碼是用于啟用和配置 GCC/Clang 的 Fortify Source 安全機制的預處理指令。Fortify Source 主要用于在編譯時增強對緩沖區溢出等內存安全問題的檢查。以下是對每一部分的詳細解釋&#xff1a; 1. 最外層條件編譯 # if CONFIG_FORTIFY_SOURCE > 0目的&#xff1a;檢查…

SQL GROUP BY 自定義排序規則

在 SQL 中&#xff0c;GROUP BY 子句用于將結果集按一個或多個列進行分組。默認情況下&#xff0c;GROUP BY 會按照列的自然順序&#xff08;如字母順序或數字順序&#xff09;進行排序。如果你需要按照自定義的排序規則對結果進行分組&#xff0c;可以使用 ORDER BY 子句結合 …

語言模型理論基礎-持續更新-思路清晰

1.預訓練 相似的任務A、B&#xff0c;任務A已經用大數據完成了訓練&#xff0c;得到模型A。 我們利用-特征提取模型的-“淺層參數通用”的特性&#xff0c;使用模型A的淺層參數&#xff0c;其他參數再通過任務B去訓練&#xff08;微調&#xff09;。 2.統計語言模型 通過條件…

ResNet與注意力機制:深度學習中的強強聯合

引言 在深度學習領域&#xff0c;卷積神經網絡&#xff08;CNN&#xff09;一直是圖像處理任務的主流架構。然而&#xff0c;隨著網絡深度的增加&#xff0c;梯度消失和梯度爆炸問題逐漸顯現&#xff0c;限制了網絡的性能。為了解決這一問題&#xff0c;ResNet&#xff08;殘差…

【C++】——C++11新特性

目錄 前言 1.初始化列表 2.std::initializer_list 3.auto 4.decltype 5.nullptr 6.左值引用和右值引用 6.1右值引用的真面目 6.2左值引用和右值引用比較 6.3右值引用的意義 6.3.1移動構造 6.4萬能引用 6.5完美轉發——forward 結語 前言 C&#xff0c;這門在系統…

【C++網絡編程】第5篇:UDP與廣播通信

一、UDP協議核心特性 1. UDP vs TCP ?特性 ?UDP?TCP連接方式無連接面向連接&#xff08;三次握手&#xff09;可靠性不保證數據到達或順序可靠傳輸&#xff08;超時重傳、順序控制&#xff09;傳輸效率低延遲&#xff0c;高吞吐相對較低&#xff08;因握手和確認機制&…

MOSN(Modular Open Smart Network)是一款主要使用 Go 語言開發的云原生網絡代理平臺

前言 大家好&#xff0c;我是老馬。 sofastack 其實出來很久了&#xff0c;第一次應該是在 2022 年左右開始關注&#xff0c;但是一直沒有深入研究。 最近想學習一下 SOFA 對于生態的設計和思考。 sofaboot 系列 SOFABoot-00-sofaboot 概覽 SOFABoot-01-螞蟻金服開源的 s…

微信小程序日常開發問題整理

微信小程序日常開發問題整理 1 切換渲染模式1.1 WebView 的鏈接在模擬器可以打開&#xff0c;手機上無法打開。 1 切換渲染模式 1.1 WebView 的鏈接在模擬器可以打開&#xff0c;手機上無法打開。 在 app.json 中看到如下配置項&#xff0c;那么當前項目就是 keyline 渲染模式…

【Altium Designer】銅皮編輯

一、動態銅皮與靜態銅皮的區分與切換 動態銅皮&#xff08;活銅&#xff09;&#xff1a; 通過快捷鍵 PG 創建&#xff0c;支持自動避讓其他網絡對象&#xff0c;常用于大面積鋪銅&#xff08;如GND或電源網絡&#xff09;。修改動態銅皮后&#xff0c;需通過 Tools → Polygo…

Java「Deque」 方法詳解:從入門到實戰

Java Deque 各種方法解析&#xff1a;從入門到實戰 在 Java 編程中&#xff0c;Deque&#xff08;雙端隊列&#xff09;是一個功能強大的數據結構&#xff0c;允許開發者從隊列的兩端高效地添加、刪除和檢查元素。作為 java.util 包中的一部分&#xff0c;Deque 接口繼承自 Qu…

ffmpeg+QOpenGLWidget顯示視頻

?一個基于 ?FFmpeg 4.x? 和 QOpenGLWidget的簡單視頻播放器代碼示例&#xff0c;實現視頻解碼和渲染到 Qt 窗口的功能。 1&#xff09;ffmpeg庫界面&#xff0c;視頻解碼支持軟解和硬解方式。 硬解后&#xff0c;硬件解碼完成需要將數據從GPU復制到CPU。優先采用av_hwf…

深入解析嵌入式內核:從架構到實踐

一、嵌入式內核概述 嵌入式內核是嵌入式操作系統的核心組件&#xff0c;負責管理硬件資源、調度任務、處理中斷等關鍵功能。其核心目標是在資源受限的環境中提供高效、實時的控制能力。與通用操作系統不同&#xff0c;嵌入式內核通常具有高度可裁剪性、實時性和可靠性&#xff…

20250324-使用 `nltk` 的 `sent_tokenize`, `word_tokenize、WordNetLemmatizer` 方法時報錯

解決使用 nltk 的 sent_tokenize, word_tokenize、WordNetLemmatizer 方法時報錯問題 第 2 節的手動方法的法1可解決大部分問題&#xff0c;可首先嘗試章節 2 的方法 1. nltk.download(‘punkt_tab’) LookupError: *******************************************************…

『 C++ 』多線程同步:條件變量及其接口的應用實踐

文章目錄 條件變量概述條件變量簡介條件變量的基本用法 案例&#xff1a;兩個線程交替打印奇偶數代碼解釋 std::unique_lock::try_lock_until 介紹代碼示例代碼解釋注意事項 std::condition_variable::wait 詳細解析與示例std::condition_variable::wait 接口介紹代碼示例代碼解…

【VolView】純前端實現CT三維重建-CBCT

文章目錄 什么是CBCTCBCT技術路線使用第三方工具使用Python實現使用前端實現 純前端實現方案優缺點使用VolView實現CBCT VolView的使用1.克隆代碼2.配置依賴3.運行4.效果 進階&#xff1a;VolView配合Python解決卡頓1.修改VtkThreeView.vue2.新增Custom3DView.vue3.Python生成s…

debug - 安裝.msi時,為所有用戶安裝程序

文章目錄 debug - 安裝.msi時&#xff0c;為所有用戶安裝程序概述筆記試試在目標.msi后面直接加參數的測試 備注備注END debug - 安裝.msi時&#xff0c;為所有用戶安裝程序 概述 為了測試&#xff0c;裝了一個test.msi. 安裝時&#xff0c;只有安裝路徑的選擇&#xff0c;沒…

Java Stream兩種list判斷字符串是否存在方案

這里寫自定義目錄標題 背景初始化方法一、filter過濾方法二、anyMatch匹配 背景 在項目開發中&#xff0c;經常遇到篩選list中是否包含某個子字符串&#xff0c;有多種方式&#xff0c;本篇主要介紹stream流的filter和anyMatch兩種方案&#xff0c;記錄下來&#xff0c;方便備…

DeepSeek vs 通義大模型:誰將主導中國AI的未來戰場?

當你在深夜調試代碼時,是否幻想過AI伙伴能真正理解你的需求?當企業面對海量數據時,是否期待一個真正智能的決策大腦? 這場由DeepSeek和通義領銜的大模型之爭,正在重塑中國AI產業的競爭格局。本文將為你揭開兩大技術巨頭的終極對決! 一、顛覆認知的技術突破 1.1 改變游戲…

3. 軸指令(omron 機器自動化控制器)——>MC_SetOverride

機器自動化控制器——第三章 軸指令 12 MC_SetOverride變量?輸入變量?輸出變量?輸入輸出變量 功能說明?時序圖?重啟運動指令?多重啟動運動指令?異常 MC_SetOverride 變更軸的目標速度。 指令名稱FB/FUN圖形表現ST表現MC_SetOverride超調值設定FBMC_SetOverride_instan…