C++標準庫大全(STL)

C++標準庫大全(STL)


1. 容器(Containers)
*問題類型:

  • 序列容器(std::vector, std::deque, std::list, std::forward_list, std::array, std::string):

    • 各自的特點、底層實現、優缺點和適用場景?

      容器特點底層實現優點缺點適用場景
      std::vector動態數組,支持快速隨機訪問連續內存 + 三指針(數據頭/尾/容量尾)隨機訪問 O(1);緩存友好;尾部操作高效中間插入/刪除 O(n);擴容需數據拷貝隨機訪問為主;尾部增刪(如數據緩存)
      std::deque雙端隊列,頭尾插入高效分段連續數組 + 中央映射表頭尾插入/刪除 O(1);支持隨機訪問 O(1)中間插入 O(n);內存碎片化;訪問速度略慢于 vector隊列/棧需雙端操作(如任務調度)
      std::list雙向鏈表,任意位置插入高效雙向鏈表節點(prev/data/next)任意位置插入/刪除 O(1);無擴容開銷隨機訪問 O(n);內存占用高;緩存不友好頻繁中間增刪(如 LRU 緩存)
      std::forward_list單向鏈表,內存更省單向鏈表節點(data/next)內存開銷極低(單指針);插入/刪除 O(1)僅單向遍歷;無反向迭代器;操作需前驅節點內存敏感場景(如嵌入式系統鏈表)
      std::array固定大小數組,編譯時確定尺寸棧上分配的 C 風格數組封裝零內存開銷;隨機訪問 O(1);無動態分配成本大小不可變;無動態擴容替代 C 數組(如固定尺寸矩陣運算)
      std::string動態字符串,支持豐富操作類 vector + SSO 優化自動內存管理;內置操作(find/replace 等)性能略低于 char*;SSO 有大小限制字符串處理(如文本解析/日志拼接)
      1. vector 擴容

        • 擴容因子(1.5/2倍)平衡 均攤 O(1) 時間成本內存碎片問題
          • 1.5 倍:釋放的內存塊可被后續擴容重用(例:釋放 4MB 后,1.5 倍擴容 6MB 可重用該內存)。
          • 2 倍:內存重用困難(例:4MB → 8MB → 16MB,釋放的 4MB+8MB 無法用于 16MB)。
      2. deque 隨機訪問

        • 計算過程:元素位置 = 段起始地址 + 段內偏移,比 vector 多一次地址跳轉。
      3. SSO(短字符串優化)

        • string 對短字符串(通常 ≤15 字符)直接在棧存儲,避免堆分配:

          std::string s = "Short";  // 棧存儲  
          std::string l = "Long string over 15 chars";  // 堆存儲  
          
      4. 鏈表選擇指南

        • 需雙向遍歷 → list
        • 僅需單向遍歷 + 省內存 → forward_list
        • 高頻中間插入 → 優先鏈表;高頻隨機訪問 → 優先 vector/deque
      5. 性能臨界場景

        • 超高頻操作(如金融交易):優先 array/vector(緩存友好)
        • 內存敏感(如嵌入式):優先 forward_list/array
    • vector的擴容機制?為什么是 2 倍或 1.5 倍?

      • 擴容機制

        • 當插入元素超過當前容量時,分配新內存(原容量的 n 倍),拷貝舊數據到新空間,釋放舊內存。
      • 擴容因子(1.5或2倍)的原因

        1. 均攤時間復雜度

          • 擴容因子需保證插入操作的均攤時間復雜度為 O(1)。數學證明:當因子 k > 1 時,均攤成本為 O(1)
        2. 內存重用

          • 1.5倍:舊內存塊釋放后,后續擴容可能重用(新舊內存塊大小無重疊)。

            例如:釋放 size=M 后,新申請 1.5M,后續擴容可能使用之前釋放的 M 內存。

          • 2倍:釋放的內存塊總和(M + 2M + 4M + ...)無法被后續更大的塊重用(如 8M)。

        3. 折中策略

          • 過小(如1.1倍):擴容頻繁,拷貝開銷大。
          • 過大(如3倍):內存浪費嚴重。
        • 主流實現
          • GCC:2倍擴容;
          • VS:1.5倍擴容。
    • vectorlist的區別?

      特性vectorlist
      底層結構動態數組(連續內存)雙向鏈表(非連續內存)
      隨機訪問O(1)(支持下標訪問)O(n)(需遍歷)
      頭部插入/刪除O(n)(移動元素)O(1)
      尾部插入/刪除均攤 O(1)O(1)
      中間插入/刪除O(n)(移動元素)O(1)(定位后操作)
      內存占用較少(僅需存儲數據)較高(每個節點含兩個指針)
      緩存友好性高(連續內存)低(內存碎片化)
      擴容開銷需重新分配內存和拷貝無擴容(動態分配節點)
    • stringchar*的區別?

      特性stringchar*
      內存管理自動分配/釋放(RAII)手動管理(malloc/free
      安全性防越界(自動擴容)易緩沖區溢出/內存泄漏
      功能擴展豐富成員函數(findappend等)依賴C庫函數(strcpystrcat
      結尾標識可包含 \0(長度獨立管理)\0 結尾
      性能開銷略高(封裝成本)極低(直接操作內存)
      兼容性C++專用兼容C/C++

      關鍵結論

      • 優先使用 string:安全、便捷,適合大多數場景。
      • 使用 char*:需兼容C或極限性能優化(如高頻交易系統)。
  • 關聯容器(std::set, std::multiset, , std::map, std::multimap):

    • 各自的特點、底層實現(紅黑樹?)、優缺點和適用場景

      容器特點底層實現優點缺點適用場景
      std::set唯一鍵集合,自動排序紅黑樹有序遍歷;查找/插入 O(log n)內存占用高(每個節點額外信息)需有序唯一鍵(如字典)
      std::multiset鍵可重復,自動排序紅黑樹支持重復鍵;有序set需有序但鍵可重復(如成績排名)
      std::map鍵值對(鍵唯一),按鍵排序紅黑樹按鍵有序;范圍查詢高效set鍵值映射需有序(如學生ID→信息)
      std::multimap鍵值對(鍵可重復),按鍵排序紅黑樹支持重復鍵;有序set一鍵多值(如作者→著作列表)
      底層實現核心:紅黑樹
      • 特性
        • 自平衡二叉搜索樹(保證樹高 ≈ log n)。
        • 節點含顏色標記(紅/黑),通過旋轉和變色維持平衡。
      • 操作復雜度
        • 查找、插入、刪除:O(log n)
      • 額外開銷
        • 每個節點存儲父/子指針、顏色標記(內存占用高于哈希表)。
    • mapunordered_map的區別?

      特性std::mapstd::unordered_map
      底層實現紅黑樹(平衡二叉搜索樹)哈希表(桶數組 + 鏈表/紅黑樹)
      元素順序按鍵有序(升序)無序(取決于哈希函數)
      查找復雜度O(log n)平均 O(1),最壞 O(n)
      內存占用較低(樹結構)較高(預分配桶 + 鏈表指針)
      鍵類型要求需支持 < 或自定義比較器需支持哈希函數和 == 比較
      適用場景需有序訪問/范圍查詢只需快速查找(如緩存/計數器)
      關鍵區別:
      1. 順序需求
        • map:保證順序(遍歷時按鍵升序)。
        • unordered_map:元素順序不可控(依賴哈希函數)。
      2. 性能權衡
        • unordered_map:平均 O(1) 查找,但哈希沖突時退化(最壞 O(n))。
        • map:穩定 O(log n),無性能波動。
      3. 內存敏感場景
        • 優先 map(無預分配桶開銷)。
      4. C++11 優化
        • unordered_map 桶內改用紅黑樹(如 GCC),最壞復雜度優化至 O(log n)
  • 如何自定義容器的比較函數(std::less)?

    1. 關聯容器(set/map等)

    在模板參數中指定自定義比較類型:

    // 方法1:函數對象(推薦)  
    struct CustomCompare {  bool operator()(const T& a, const T& b) const {  return /* 自定義邏輯 */;  // 例:a.salary > b.salary  }  
    };  
    std::set<T, CustomCompare> mySet;  // 方法2:Lambda(C++11+)  
    auto comp = [](const T& a, const T& b) { /* ... */ };  
    std::set<T, decltype(comp)> mySet(comp);  // 需傳遞Lambda對象  
    
    1. 序列容器(vector/list等)

    在排序操作時傳入比較函數:

    std::vector<T> vec;  
    // 方法1:Lambda表達式  
    std::sort(vec.begin(), vec.end(), [](const T& a, const T& b) {  return a.id < b.id;  // 按ID升序  
    });  // 方法2:函數指針  
    bool compareFunc(const T& a, const T& b) { /* ... */ }  
    std::sort(vec.begin(), vec.end(), compareFunc);  
    
    1. 優先隊列(priority_queue

    在模板參數中指定比較類型:

    // 小頂堆示例  
    struct Greater {  bool operator()(int a, int b) const {  return a > b;  // 小值優先  }  
    };  
    std::priority_queue<int, std::vector<int>, Greater> minHeap;  
    

    關鍵規則

    1. 嚴格弱序要求
      • 需滿足:

        !comp(a, a)               // 非自反  
        comp(a, b) => !comp(b, a)  // 非對稱  
        comp(a, b) && comp(b, c) => comp(a, c)  // 傳遞性  
        
      • 違反示例(錯誤):

        [](int a, int b) { return a <= b; }  // 包含相等,違反非自反性  
        
    2. 比較對象類型
      • 函數對象:需重載 operator() 且為 const 成員函數
      • Lambda:推薦捕獲列表為空(無狀態)
    3. 性能影響
      • 關聯容器:比較函數復雜度需為 O(1),否則樹操作退化為 O(n log n)
      • 排序操作:比較函數應輕量(高頻調用)
  • 無序關聯容器(std::unordered_set, std::unordered_multiset, std::unordered_map, std::unordered_multimap):

    • 各自的特點、底層實現(哈希表)、優缺點和適用場景?

      容器特點底層實現優點缺點適用場景
      std::unordered_set唯一鍵集合,無序存儲哈希表(桶+鏈表/紅黑樹)平均 O(1) 查找/插入最壞 O(n);內存占用高快速去重(如URL黑名單)
      std::unordered_multiset鍵可重復,無序存儲同上支持重復鍵unordered_set詞頻統計(如單詞計數)
      std::unordered_map鍵值對(鍵唯一),無序存儲同上平均 O(1) 鍵值訪問unordered_set高速鍵值查詢(如緩存)
      std::unordered_multimap鍵值對(鍵可重復),無序存儲同上支持一鍵多值unordered_set多值映射(如電話簿)

      底層實現核心

      • 哈希表 = 桶數組(連續內存) + 沖突解決結構(鏈表/紅黑樹)
      • C++11 優化:桶內元素超閾值(如 GCC 為 8)時,鏈表轉紅黑樹(最壞復雜度優化至 O(log n)
    • 哈希沖突的解決方法?

      方法原理實現示例特點
      鏈地址法桶內掛鏈表存儲沖突元素bucket[i] = head→a→b→null簡單通用;C++標準庫默認方案
      開放尋址法線性探測:沖突時找下一個空桶bucket[(hash+1)%size]緩存友好;需負載因子控制
      羅賓漢哈希沖突時比較探測距離,搶占更遠槽位復雜優化減少最長探測距離

      關鍵參數

      • 負載因子 = 元素數 / 桶數(默認 1.0)
      • 擴容觸發:負載因子 > max_load_factor() 時,桶數翻倍并重哈希
    • 如何自定義容器的比較函數?

      需定義 兩個函數對象

      1. 哈希函數(計算鍵的哈希值)
      2. 鍵相等比較(判斷鍵是否相同)
      // 示例:自定義Point類型作為鍵  
      struct Point { int x; int y; };  // 1. 自定義哈希函數  
      struct PointHash {  size_t operator()(const Point& p) const {  return std::hash<int>()(p.x) ^ (std::hash<int>()(p.y) << 1);  }  
      };  // 2. 自定義鍵相等比較  
      struct PointEqual {  bool operator()(const Point& a, const Point& b) const {  return a.x == b.x && a.y == b.y;  }  
      };  // 定義容器  
      std::unordered_map<Point, std::string, PointHash, PointEqual> pointMap;  
      

      關鍵規則

      • 哈希一致性:若 a == b,則 hash(a) == hash(b)

      • 性能要求:哈希函數需高效(O(1) 復雜度)

      • 特化 std::hash(可選):

        namespace std {  
        template<> struct hash<Point> { /* ... */ };  
        }    
        
  • 容器配合(std::stack, std::queue, , std::priority_queue):

    • 各自的特點、底層實現、優缺點和適用場景?

      適配器特點默認底層容器核心操作優點缺點適用場景
      std::stack后進先出(LIFO)std::dequepush(), pop(), top()操作簡單高效(O(1))只能訪問頂部元素函數調用棧/撤銷操作/括號匹配
      std::queue先進先出(FIFO)std::dequepush(), pop(), front()頭尾操作高效(O(1))只能訪問兩端元素消息隊列/緩沖區/廣度優先搜索
      std::priority_queue優先級隊列(最大堆)std::vectorpush(), pop(), top()高效獲取極值(O(1))插入慢(O(log n))任務調度/事件處理/Dijkstra算法

      底層實現詳解

      1. stack & queue 默認容器選擇
        • 使用 deque(雙端隊列)原因:

          • 兩端插入/刪除均為 O(1)

          • 內存自動擴展(避免 vector 擴容時的全量拷貝)

          • 示例:

            std::stack<int> s;       // 等價于 std::stack<int, std::deque<int>>  
            std::queue<char> q;      // 等價于 std::queue<char, std::deque<char>>  
            
      2. priority_queue 實現原理
        • 基于 堆結構(完全二叉樹)

        • 底層容器需支持:

          • 隨機訪問(operator[])→ 故用 vector
          • 前端插入/刪除(push_back(), pop_back()
        • 堆操作:

          // 插入元素(上浮)
          vec.push_back(x); 
          std::push_heap(vec.begin(), vec.end());// 刪除頂部(下沉)
          std::pop_heap(vec.begin(), vec.end());
          vec.pop_back();
          

      自定義底層容器

      // 使用 vector 作為 stack 的底層容器
      std::stack<int, std::vector<int>> vecStack;  // 使用 list 作為 queue 的底層容器
      std::queue<int, std::list<int>> listQueue;  // 使用 deque 作為 priority_queue 的底層容器
      std::priority_queue<int, std::deque<int>> dequePQ;  
      

      注意限制

      • stack:需支持 push_back(), pop_back(), back()
      • queue:需支持 push_back(), pop_front(), front()
      • priority_queue:需支持隨機訪問迭代器 + front()

      性能與選擇指南

      1. stack/queue vs 原生容器
        • 優先用適配器:語義明確 + 防止誤操作
        • 需要中間訪問時 → 改用 deque
      2. priority_queue 優化
        • 自定義比較器實現最小堆:

          std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;
          
        • 復雜類型場景:

          struct Task { int priority; /*...*/ };  
          auto comp = [](const Task& a, const Task& b) { return a.priority < b.priority; 
          };  
          std::priority_queue<Task, std::vector<Task>, decltype(comp)> taskQueue(comp);
          
      3. 內存敏感場景
        • 固定大小棧 → 用 array 替代 deque

          std::stack<int, std::array<int, 100>> fixedStack;
          

2. 修改算法(算法)
*問題類型:

  • 常用的非式修改序列操作(std::for_each, std::find,std::count等)?

    算法功能示例
    std::for_each對每個元素執行操作for_each(v.begin(), v.end(), print)
    std::find查找首個匹配元素find(v.begin(), v.end(), 42)
    std::find_if查找首個滿足條件的元素find_if(v.begin(), v.end(), isEven)
    std::count統計匹配元素數量count(v.begin(), v.end(), 'a')
    std::count_if統計滿足條件的元素數量count_if(v.begin(), v.end(), isPrime)
    std::all_of檢查所有元素滿足條件 (C++11)all_of(v.begin(), v.end(), isPositive)
    std::any_of檢查至少一個元素滿足條件 (C++11)any_of(v.begin(), v.end(), isNegative)
  • 常用的非式序列操作(std::copy, std::remove, std::sort, std::unique,std::reverse等)?

    算法功能注意要點
    std::copy復制序列到目標位置目標容器需預分配空間
    std::remove邏輯刪除匹配元素(移動元素)需配合 erase 物理刪除(見示例↓)
    std::remove_if邏輯刪除滿足條件的元素同上
    std::sort排序(默認升序)需隨機訪問迭代器(不支持 list
    std::stable_sort穩定排序(保持相等元素順序)性能略低于 sort
    std::unique刪除連續重復元素需先排序;返回新邏輯終點
    std::reverse反轉序列元素順序list 有成員函數 reverse()

    刪除元素標準寫法

    // vector 刪除偶數  
    auto newEnd = remove_if(vec.begin(), vec.end(), isEven);  
    vec.erase(newEnd, vec.end());  // 物理刪除  
    
  • 常用的數值算法(std::accumulate等)?

    算法功能示例
    std::accumulate累加/自定義歸約操作accumulate(v.begin(), v.end(), 0)
    std::inner_product計算內積(點積)inner_product(a.begin(), a.end(), b.begin(), 0)
    std::partial_sum生成前綴和序列partial_sum(v.begin(), v.end(), out)
    std::iota填充遞增序列 (C++11)iota(v.begin(), v.end(), 10) // 10,11,12…
  • 如何使用這些算法以及它們與容器成員函數的區別?

    場景選擇原因
    list 排序成員 sort()算法 std::sort 需隨機訪問(不支持鏈表)
    set 查找成員 find()算法 std::find 是 O(n),成員是 O(log n)
    關聯容器刪除成員 erase()算法 std::remove 破壞樹結構
    通用序列操作STL 算法統一接口,可跨容器使用

    關鍵原則

    • 關聯容器/鏈表:優先用成員函數(性能/正確性)
    • 序列容器(vector/deque):優先 STL 算法(通用性)
  • std::sort底層實現?(通常是 Introsort)

    • 混合排序策略

      1. 快速排序:主遞歸階段(平均 O(n log n))
      2. 堆排序:當遞歸深度 > 2 log n 時切換(避免最壞 O(n2))
      3. 插入排序:小區間優化(n ≤ 16 時)
    • 核心優勢

      • 最壞時間復雜度 O(n log n)(優于純快排)
      • 避免遞歸過深(堆排序兜底)
      • 小數據局部性優(插入排序)
    • 示例代碼

      std::vector<int> v = {5, 3, 2, 8, 1};  
      std::sort(v.begin(), v.end());  // 升序  
      std::sort(v.begin(), v.end(), std::greater<int>());  // 降序  
      

3. 迭代器(Iterators)
*問題類型:

  • 迭代器的概念和?

    • 定義:迭代器是 STL 中用于 遍歷容器元素 的通用抽象接口,行為類似指針(支持 *->++ 等操作)。
    • 作用
      • 解耦算法與容器(如 std::sort 可作用于所有支持隨機訪問迭代器的容器)
      • 提供統一的容器訪問方式
  • 五種迭代器作用類別(輸入、輸出、前向、個體、隨機訪問)及其特性?

    類別支持操作容器示例
    輸入迭代器只讀單次遍歷 (*it, ++, ==, !=)istream_iterator
    輸出迭代器只寫單次遍歷 (*it=, ++)ostream_iterator
    前向迭代器讀寫 + 多次遍歷(繼承輸入/輸出)forward_list, unordered_*
    雙向迭代器前向 + 反向遍歷 (--)list, set, map
    隨機訪問迭代器雙向 + 跳躍訪問 (it+n, it[n], <)vector, deque, array

    層級關系
    輸入 → 前向 → 雙向 → 隨機訪問
    輸出 → 前向 → …

  • begin(), end(), cbegin(), cend(), rbegin(),rend()的區別?

    函數返回類型方向可修改性容器示例調用
    begin()普通迭代器正向可讀寫vec.begin()
    end()普通迭代器正向尾后不可解引用vec.end()
    cbegin()const 迭代器正向只讀vec.cbegin()
    cend()const 迭代器正向尾后不可解引用vec.cend()
    rbegin()反向迭代器反向可讀寫vec.rbegin()
    rend()反向迭代器反向尾后不可解引用vec.rend()
    crbegin()const 反向迭代器反向只讀vec.crbegin()

    反向迭代器注意

    std::vector<int> v = {1,2,3};  
    auto rit = v.rbegin(); // 指向 3  
    *rit = 4;              // v = {1,2,4}   
    
  • 迭代器故障問題,何時會發生,如何避免?

    • 何時發生

      容器導致失效的操作
      vector/string插入/刪除(導致擴容或元素移動)
      deque首尾外插入/刪除、擴容
      list/forward_list僅刪除時使被刪元素迭代器失效
      關聯容器僅刪除時使被刪元素迭代器失效
    • 避免方法

      1. 插入后更新迭代器

        auto it = vec.begin();  
        it = vec.insert(it, 10); // 獲取新迭代器  
        
      2. 刪除時用返回值更新

        for (auto it = lst.begin(); it != lst.end(); ) {  if (*it % 2 == 0) it = lst.erase(it); // 更新為下一個元素  else ++it;  
        }  
        
      3. 避免失效區間操作

        // 錯誤:刪除導致后續迭代器失效  
        for (auto it = vec.begin(); it != vec.end(); ++it) {  if (cond) vec.erase(it); // UB!  
        }  
        

    關鍵原則

    • 序列容器(vector/deque)修改后所有迭代器可能失效
    • 鏈表/關聯容器修改后僅被刪元素迭代器失效

4. 函數對象 (Functors) / Lambda 表達式
*問題類型:

  • 函數對象的概念和作用?

    • 概念:重載了 operator() 的類對象,可像函數一樣調用

    • 作用

      • 可攜帶狀態(通過成員變量)
      • 可作模板參數(編譯期多態)
      • 比函數指針更高效(可內聯優化)
    • 示例

      struct Compare {  bool operator()(int a, int b) const {  return a > b;  // 實現自定義比較  }  
      };  
      std::sort(v.begin(), v.end(), Compare());  
      
  • Lambda 表達式的語法和捕獲列表(Capture List)?

    • 語法

      [捕獲列表](參數) -> 返回類型 { 函數體 }  
      
    • 捕獲列表(Capture List)

      捕獲方式效果
      []不捕獲外部變量
      [x]按值捕獲變量 x(副本)
      [&x]按引用捕獲變量 x
      [=]按值捕獲所有外部變量(不推薦!)
      [&]按引用捕獲所有外部變量(不推薦!)
      [this]捕獲當前類對象的 this 指針
      [x = expr]C++14:用表達式初始化捕獲(移動捕獲)
    • 示例

      int base = 100;  
      auto add = [base](int x) { return x + base; };  
      std::cout << add(5);  // 輸出 105  
      
  • Lambda 表達式的本質?

    • 編譯器行為
      將 Lambda 轉換為匿名函數對象類(含重載的 operator()

    • 轉換示例

      // Lambda: [](int x) { return x * 2; }  
      // 編譯器生成類似:  
      class __Lambda_123 {  
      public:  int operator()(int x) const { return x * 2; }  
      };  
      
  • 什么時候使用函數對象或 Lambda 表達式?

    場景推薦方式原因
    簡單邏輯(如比較器)Lambda代碼簡潔,無需額外定義
    需要攜帶復雜狀態函數對象可定義多個成員變量/輔助方法
    需要遞歸調用函數對象Lambda 遞歸需 std::function(性能損失)
    需作為模板參數(如容器的比較器)函數對象或無捕獲 Lambda無捕獲 Lambda 可轉換為函數指針
    需復用邏輯函數對象避免重復定義

    關鍵區別

    • 函數對象:顯式定義類型,適合復雜/復用邏輯
    • Lambda:隱式匿名類型,適合一次性簡單邏輯

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

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

相關文章

論文略讀:Ask, and it shall be given: On the Turing completeness of prompting

ICLR 2025 5566 自從 GPT 的成功以來&#xff0c;大型語言模型&#xff08;LLMs&#xff09;徹底革新了機器學習領域&#xff0c;催生了所謂的 LLM 提示范式&#xff08;prompting paradigm&#xff09;。在這一范式下&#xff0c;研究者傾向于訓練一個通用的大模型&#xff0…

基于springboot視頻及游戲管理系統+源碼+文檔+應用視頻

開發語言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服務器&#xff1a;tomcat7 數據庫&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 數據庫工具&#xff1a;Navicat11 開發軟件&#xff1a;eclipse/myeclipse/idea Maven…

香港維爾利登陸韓國,聯合釜山數字醫療園區打造AI健康交付平臺

香港維爾利健康科技集團正式宣布&#xff0c;與韓國釜山數字醫療產業園區達成戰略合作協議&#xff0c;雙方將共同建設“AI健康交付平臺”&#xff0c;推動人工智能醫療技術在韓國本土的落地轉化&#xff0c;并建立覆蓋大健康全鏈條的服務體系。這一合作標志著香港維爾利在東北…

OceanBase v4.3.5 特性解讀:通過OSS WORM特性進行備份歸檔

概述 OceanBase 最新發布的V4.3.5 中&#xff0c;備份歸檔服務已適配阿里云OSS的 WORM特性&#xff0c;支持將配置了合規保留策略的OSS Bucket作為備份存儲的目的端&#xff0c;有效滿足用戶數據安全存儲與合規性的需求。 阿里云對象存儲&#xff08;OSS&#xff09;的 WORM&…

LVS 負載均衡詳解:四層轉發原理與三種經典模式全面解析

文章目錄 一、四層 vs 七層負載均衡&#xff1a;本質區別 四層 LVS 的核心特點&#xff1a; 二、LVS 工作原理概述 三、LVS 三種工作模式對比 模式對比總覽 1. LVS-NAT 模式&#xff08;Network Address Translation&#xff09; 2. LVS-DR 模式&#xff08;Direct Routi…

從零手寫Java版本的LSM Tree (八):LSM Tree 主程序實現

&#x1f525; 推薦一個高質量的Java LSM Tree開源項目&#xff01; https://github.com/brianxiadong/java-lsm-tree java-lsm-tree 是一個從零實現的Log-Structured Merge Tree&#xff0c;專為高并發寫入場景設計。 核心亮點&#xff1a; ? 極致性能&#xff1a;寫入速度超…

pycharm 設置環境出錯

pycharm 設置環境出錯 pycharm 新建項目&#xff0c;設置虛擬環境&#xff0c;出錯 pycharm 出錯 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…

PyTorch深度學習框架60天進階學習計劃-第57天:因果推理模型(一)

第57天&#xff1a;因果推理模型&#xff08;一&#xff09;- 揭開因果關系的神秘面紗 &#x1f3af; 學習目標概覽 今天我們要踏入一個既古老又前沿的領域——因果推理&#xff01;如果說傳統的機器學習是在找"相關性"&#xff0c;那因果推理就是在挖掘"因果…

Java反射操作百倍性能優化

歡迎來到啾啾的博客&#x1f431;。 記錄學習點滴。分享工作思考和實用技巧&#xff0c;偶爾也分享一些雜談&#x1f4ac;。 有很多很多不足的地方&#xff0c;歡迎評論交流&#xff0c;感謝您的閱讀和評論&#x1f604;。 目錄 引言避免在性能敏感的熱點代碼中使用反射緩存反射…

STM32 _main 里做了什么

Application startup 在大多數嵌入式系統中&#xff0c;進入 main 函數之前需要執行一段初始化序列來設置好系統環境。下圖展示的就是這段初始化序列的默認流程&#xff1a; Figure 1. Default initialization sequence __main is responsible for setting up the memory and…

Java八股文——MySQL「SQL 基礎篇」

NOSQL和SQL的區別&#xff1f; 面試官您好&#xff0c;SQL&#xff08;關系型數據庫&#xff09;和NoSQL&#xff08;非關系型數據庫&#xff09;是當今數據存儲領域的兩大主流陣營。它們之間不是“誰取代誰”的關系&#xff0c;而是兩種完全不同的設計哲學&#xff0c;適用于…

華為OD機考-數字螺旋矩陣(JAVA 2025B卷)

public class RotateMatrix {public static void main(String[] args) {// 順時針螺旋矩陣printMatrixV1();// 逆時針螺旋矩陣//printMatrixV2();}private static void printMatrixV2() {Scanner scan new Scanner(System.in);while(scan.hasNextLine()){String[] line scan.…

【Java工程師面試全攻略】Day7:分布式系統設計面試精要

一、分布式系統概述 分布式系統已成為現代互聯網應用的標配架構&#xff0c;據LinkedIn統計&#xff0c;分布式系統設計能力是高級Java工程師薪資差異的關鍵因素。今天我們將深入解析分布式系統的核心理論和實踐&#xff0c;幫助你掌握面試中的系統設計問題。 二、分布式理論…

Excel處理控件Aspose.Cells教程:在Excel 文件中創建、操作和渲染時間線

您可以使用數據透視表時間軸&#xff0c;而無需調整過濾器來顯示日期——這是一種動態過濾器選項&#xff0c;可讓您輕松按日期/時間進行過濾&#xff0c;并使用滑塊控件放大所需的時間段。Microsoft Excel 允許您通過選擇數據透視表&#xff0c;然后單擊“插入”>“時間軸”…

Python----神經網絡發(神經網絡發展歷程)

年份網絡名稱突出點主要成就論文地址1989LeNet首個現代卷積神經網絡&#xff08;CNN&#xff09;&#xff0c;引入卷積、池化操作手寫數字識別先驅&#xff0c;奠定CNN基礎MNIST Demos on Yann LeCuns website2012AlexNet首次大規模使用深度卷積神經網絡進行圖像識別&#xff1…

mvc與mvp

mvc MVC 架構中&#xff0c;Activity/Fragment&#xff08;作為 View 和 Controller&#xff09;直接持有 Model 或異步任務的引用&#xff0c;當頁面銷毀時&#xff0c;這些長生命周期對象若未正確釋放&#xff0c;會導致 Activity 無法被 GC 回收&#xff0c;形成內存泄漏。…

商業智能中的地圖可視化模板:助力數據高效呈現

引言 在數字化浪潮席卷的當下&#xff0c;數據可視化的重要性愈發凸顯。企業和組織需要從海量的數據中提取有價值的信息&#xff0c;以便做出明智的決策。而可視化地圖組件作為數據可視化的關鍵部分&#xff0c;能夠將數據與地理位置相結合&#xff0c;以直觀、美觀的方式展示…

Opencv 相機標定相關API及原理介紹

Opencv 相機標定相關API及原理介紹 相機標定是計算機視覺中的基礎任務,旨在確定相機的??內參矩陣??、??畸變系數??以及(可選)??外參??(相機相對于世界坐標系的旋轉和平移)。OpenCV提供了完整的相機標定工具鏈,核心函數為cv2.calibrateCamera,其原理基于張正…

深入剖析AI大模型:Prompt 從理論框架到復雜任務的全場景實現

今天我們就Prompt實戰&#xff0c;實現一下復雜場景&#xff0c;通過這些實戰我們就可以更好的理解大模型工作的原理和機制了。我個人覺得Prompt是AI大模型中非常重要的的環節。首先我們還是溫習一下Prompt的框架和基礎原則。然后我們就文本生成、問答任務及復雜任務三個方面分…

Fractal Generative Models論文閱讀筆記與代碼分析

何愷明分型模型這篇文章在二月底上傳到arXiv預出版網站到現在已經過了三個月&#xff0c;當時我也聽說這篇文章時感覺是大有可為&#xff0c;但是幾個月不知道忙啥了&#xff0c;可能錯過很多機會&#xff0c;但是亡羊補牢嘛&#xff0c;而且截至目前&#xff0c;該文章應該也還…