RT-DETRv2 中的坐標回歸機制深度解析:為什么用 `sigmoid(inv_sigmoid(ref) + delta)` 而不是除以圖像尺寸?

引言:一個看似簡單的公式,背后藏著工業級設計智慧

在閱讀 RT-DETRv2(Real-Time DETR v2)源碼時,我曾被一行代碼深深震撼:

inter_ref_bbox = F.sigmoid(bbox_head[i](output) + inverse_sigmoid(ref_points_detach))

這行代碼沒有卷積、沒有注意力、沒有復雜的損失函數——它只是一個Sigmoid + 反Sigmoid + 加法的組合。但正是這個“簡單”操作,讓 RT-DETRv2 實現了:

  • ? 任意輸入尺寸下穩定預測
  • ? 無需傳入圖像寬高即可訓練和推理
  • ? 多尺度、移動端、邊緣設備無縫適配
  • ? 比 YOLOv8 更輕量、比 DETR 更快、精度更高

很多人看到這行代碼只覺得“哦,是做歸一化”,但真正理解它的設計哲學,才能明白為何 RT-DETRv2 能在 Real-Time Detection 領域成為標桿。

本文將從數據流、數學原理、工程實現、工業對比、損失函數設計五個維度,徹底拆解這行代碼背后的深層邏輯。讀完本文,你將不再困惑:

  • “為什么不用 x / W?”
  • “為什么非得用 sigmoid?”
  • “這跟特征圖有關系嗎?”
  • “為什么 Loss 計算也不依賴模型輸入尺寸?”

一、背景:RT-DETRv2 是什么?

RT-DETRv2 是由百度提出的實時目標檢測模型,是 DETR 系列的進化版。它在保持 Transformer 架構優勢的同時,通過以下創新實現了速度與精度的雙贏

特性說明
無 NMS基于查詢機制直接輸出最終框
高效解碼器使用 Hybrid Encoder + Iterative Refinement
動態參考點每層迭代優化邊界框位置
分辨率無關所有坐標、Loss、預測均基于原始圖像歸一化

其中,“動態參考點迭代更新” 是其核心機制,而我們今天要深挖的公式,正是這一機制的數學核心:

inter_ref_bbox = F.sigmoid(bbox_head[i](output) + inverse_sigmoid(ref_points_detach))

二、坐標歸一化:到底該歸一化到哪個空間?

? 常見誤區:用 x / W, y / H 歸一化?

在 Faster R-CNN、YOLO、SSD 等傳統檢測器中,標注框通常按如下方式歸一化:

cx_norm = (x1 + x2) / 2 / image_width
cy_norm = (y1 + y2) / 2 / image_height
w_norm = (x2 - x1) / image_width
h_norm = (y2 - y1) / image_height

問題來了:如果模型輸入圖像經過 resize 和 padding,比如:

項目
原始圖像300×400
模型輸入640×640(經縮放+填充)

那么:

  • 標注框是基于 300×400 的(如 [50, 80, 200, 300]
  • 輸入圖像中的實際像素坐標是 [80, 168, 320, 520]
  • 如果我們用 x / 640 來歸一化 → 得到 [0.125, 0.2625, 0.5, 0.8125]

👉 這時模型學到的是“在 640×640 圖像中的相對位置”

但當你部署時換成 800×800 輸入,模型預測出的 [0.125, ...] 就會錯得離譜 —— 因為它不知道“0.125”對應的是原圖的 50 像素,還是 64 像素!

? 正確做法:永遠以原始圖像為基準歸一化

RT-DETRv2 的做法是:

無論輸入圖像被 resize 成多少,標簽(GT)始終基于原始圖像尺寸歸一化。

即:

# 原始圖像:H=300, W=400
gt_xyxy = [50, 80, 200, 300]  # 像素坐標# 歸一化到原始圖像空間
gt_norm = [(50 + 200)/2 / 400,   # cx = 0.3125(80 + 300)/2 / 300,   # cy = 0.6333(200 - 50) / 400,     # w  = 0.375(300 - 80) / 300      # h  = 0.7333
]

? 這個 [0.3125, 0.6333, 0.375, 0.7333] 就是模型唯一需要學習的目標!

📌 關鍵結論:模型預測的每一個 [cx, cy, w, h] ∈ [0,1],都是相對于“原始圖像”的比例,而不是當前輸入圖像!


三、為什么需要 inverse_sigmoid + sigmoid?這是什么魔法?

1?? 問題:不能直接加嗎?ref + delta 行不行?

假設上一層參考點是 ref = [0.3, 0.6, 0.4, 0.7](歸一化坐標)

bbox_head 輸出偏移量 delta = [0.1, 0.05, 0.05, -0.1]

如果我們直接加:

new_ref = ref + delta  # → [0.4, 0.65, 0.45, 0.6]

表面看沒問題,但:

  • 如果 delta = [0.8, 0, 0, 0]new_ref = [1.1, 0.6, ...]超出 [0,1]!
  • 如果 delta = [-0.5, 0, 0, 0]new_ref = [-0.2, ...]負值非法!

→ 必須做 clamp(0,1) 保護?
? 不行!clamp 不可導,破壞梯度流,導致訓練不穩定!

2?? 解決方案:在 logit 空間做加法!

RT-DETRv2 引入了經典技巧(源自 Deformable DETR):

logit_ref = inverse_sigmoid(ref)   # 將 [0,1] 映射到 (-∞, +∞)
logit_new = logit_ref + delta      # 在實數域自由加法
new_ref = sigmoid(logit_new)       # 再映射回 [0,1]

其中:

def inverse_sigmoid(x, eps=1e-5):x = x.clamp(min=eps, max=1-eps)return torch.log(x / (1 - x))

3?? 數學本質:在概率空間中做殘差更新

坐標類比
cx ∈ [0,1]概率分布的均值(如“物體出現在左側的概率為 0.3”)
inverse_sigmoid把概率轉成“對數幾率”(log-odds),便于建模變化
delta對“語義位置”的修正量(類似 ResNet 的殘差)
sigmoid把修正后的 log-odds 轉回概率空間

? 這就像:
“昨天你覺得車在門左邊 30% 處(0.3),今天你發現它其實更靠左一點 → 你給它加了個 ‘+0.1 的 logit 偏移’ → 最終認為是 0.4。”

這種設計天然保證輸出合法、梯度連續、收斂穩定

4?? 為什么不用 tanh、softplus、clamp?

方法是否推薦原因
sigmoid? 推薦輸出 [0,1],完美匹配坐標范圍,可導,穩定
tanh? 不推薦輸出 [-1,1],需額外線性變換:(tanh(x)+1)/2,增加復雜度
clamp(x, 0, 1)? 絕對禁止不可導,梯度截斷,訓練崩潰風險高
softplus? 不合適輸出 >0,無法約束上界

💡 Sigmoid 是“有界回歸”的黃金標準,正如 Softmax 是分類的黃金標準。


四、最核心洞察:為什么不用 x / W?—— 解耦圖像尺寸的革命性設計

這才是全文最精華的部分!

? 傳統方法(YOLO、Faster R-CNN)的致命缺陷:

# 假設你訓練時輸入 640×640
pred_cx_feat = model(...)  # 輸出在特征圖上的坐標,如 24.5
pred_cx_img = pred_cx_feat * 32 / 640  # 乘 stride,再除 input_w

?? 問題暴露:

場景問題
訓練:640×640OK
推理:800×800pred_cx_img = 24.5 * 32 / 800 = 0.98 → 錯了!應是 0.78
推理:512×51224.5 * 32 / 512 = 1.53 → 超出 [0,1]!必須 clamp

👉 模型硬編碼了輸入尺寸!它學會的是:“當輸入是 640 時,24.5 對應 0.3125”。

這不是“理解場景”,而是“背公式”。

? RT-DETRv2 的革命:完全脫離物理尺寸依賴

# 無論輸入是 320×320、640×640、1280×1280
# 模型只關心:
# “這個視覺模式,對應原始圖像中的哪個相對位置?”
  • 標簽:始終是 [0.3125, 0.6333, ...](基于原始 300×400)
  • 預測:輸出也是 [0.32, 0.64, ...](同樣是基于原始 300×400)
  • 還原:測試時只需知道原始圖像尺寸(如 300×400),就能還原真實像素:
x1 = (cx - w/2) * orig_w
y1 = (cy - h/2) * orig_h

🌟 模型從未接觸過 640×640!它只學到了“語義位置”

🧠 類比理解:

場景傳統方法RT-DETRv2
描述一個人的位置“他在房間左邊第 2.5 米處”“他在門的左邊三分之一處”
依賴什么?房間大小(6米寬)無需知道房間大小
換房間還能用嗎?? 必須重新校準? 完全通用

? RT-DETRv2 學會的是“相對語義定位”,不是“像素計算”。


五、關鍵升華:RT-DETRv2 的 Loss 函數也完全與模型輸入尺寸無關!

? 這是很多博客、教程忽略的最重要一環!

在大多數檢測框架中(如 YOLO、Faster R-CNN),Loss 計算是在模型輸入空間進行的

# YOLOv8 示例(偽代碼)
pred_boxes = model_output  # shape [B, N, 4] —— 基于 640x640 的歸一化
target_boxes = gt_boxes_normalized_to_640  # 也是基于 640x640loss_iou = giou_loss(pred_boxes, target_boxes)

👉 一旦你換輸入尺寸(如 800×800),你就必須:

  1. 重新歸一化 GT 到 800×800
  2. 修改 Loss 中的尺度因子
  3. 可能還要重訓模型!

? 傳統方式的災難性后果:

輸入尺寸GT 坐標(歸一化)模型預測(歸一化)Loss 計算結果
640×640[0.3125, 0.6333][0.32, 0.64]IoU = 0.98 ?
800×800[0.3125, 0.6333] ← 原始圖像歸一化![0.32, 0.64]IoU = 0.79 ?(因為模型以為是 800 空間)

Loss 誤判!模型學歪了!

? RT-DETRv2 的正確做法:

所有 Loss(CIoU、GIoU、L1、Focal)都基于“原始圖像歸一化坐標”計算!

# 數據加載階段:
orig_w, orig_h = 400, 300  # 原始圖像尺寸
gt_boxes_xyxy = torch.tensor([[50, 80, 200, 300]], dtype=torch.float32)# ? 歸一化到原始圖像空間(唯一標準)
gt_norm = gt_boxes_xyxy.clone()
gt_norm[:, [0,2]] /= orig_w
gt_norm[:, [1,3]] /= orig_h# 模型輸入:resize 到 640×640,但 gt_norm 不變!# 模型輸出:pred_boxes.shape = [B, N, 4], values in [0,1] —— 同樣是相對于原始圖像!# ? LOSS 計算:直接比較兩個 [0,1] 坐標,不涉及任何尺寸!
loss_l1 = F.l1_loss(pred_boxes, gt_norm)
loss_giou = generalized_iou_loss(pred_boxes, gt_norm)

📌 這意味著:

  • 模型訓練時輸入是 640×640,Loss 用的是原始 300×400 的歸一化坐標;
  • 模型推理時輸入是 1280×1280,Loss 仍然用的是原始 300×400 的歸一化坐標;
  • Loss 的計算空間 = 標簽的空間 = 預測的空間 = 原始圖像歸一化空間

🎯 模型學到的不是“在 640 上怎么預測”,而是“在真實世界中,目標應該在哪里”。

這就是為什么 RT-DETRv2 可以做到:

  • 一套模型,適配任意分辨率輸入
  • 無需重新標注、無需重新訓練
  • 無需修改 Loss 函數、無需調整超參

這是真正的端到端、跨尺度、自適應檢測系統


六、實驗驗證:真實還原效果

假設:

  • 原始圖像:300×400
  • GT:[50, 80, 200, 300] → 歸一化后:[0.3125, 0.6333, 0.375, 0.7333]
  • 模型預測:[0.32, 0.64, 0.38, 0.72]

還原到原始圖像:

x1 = (0.32 - 0.38/2) * 400 = (0.32 - 0.19) * 400 = 52
y1 = (0.64 - 0.72/2) * 300 = (0.64 - 0.36) * 300 = 84
x2 = (0.32 + 0.38/2) * 400 = 204
y2 = (0.64 + 0.72/2) * 300 = 300

→ 預測框:[52, 84, 204, 300]
→ GT 框:[50, 80, 200, 300]
IoU ≈ 0.98!完美擬合!

📌 即使你在訓練時用了 640×640 輸入,只要標簽和 Loss 都基于原始歸一化坐標,預測結果依然能準確還原!


七、工程實現建議(實戰代碼)

? 數據加載階段(關鍵!)

# 假設你使用 torchvision 或自定義 dataloader
orig_w, orig_h = image.width, image.height  # 原始尺寸:300, 400# 標注是像素坐標
gt_boxes_xyxy = torch.tensor([[50, 80, 200, 300]], dtype=torch.float32)# ? 永遠按原始圖像歸一化!不要管輸入尺寸!
gt_boxes_xyxy_norm = gt_boxes_xyxy.clone()
gt_boxes_xyxy_norm[:, [0, 2]] /= orig_w
gt_boxes_xyxy_norm[:, [1, 3]] /= orig_h# 然后進行 resize & pad 到 640x640
image_resized = F.resize(image, size=(640, 640))
# 但 gt_boxes_xyxy_norm 保持不變!傳給模型的就是這個!model_input = image_resized
model_target = gt_boxes_xyxy_norm  # shape: [1, 4], values in [0,1]

? 模型中核心代碼(RT-DETRv2 風格)

import torch.nn.functional as Fdef inverse_sigmoid(x, eps=1e-5):x = x.clamp(min=eps, max=1 - eps)return torch.log(x / (1 - x))# 假設:ref_points_detach 來自上一層,shape [B, N, 4]
# bbox_head[i] 輸出 delta,shape [B, N, 4]logit_ref = inverse_sigmoid(ref_points_detach)
logit_new = logit_ref + bbox_head[i](output)
inter_ref_bbox = F.sigmoid(logit_new)  # ? 新參考點,仍在 [0,1]

? Loss 計算部分(重點!)

# pred_boxes: [B, N, 4] —— 模型輸出,歸一化到原始圖像
# gt_boxes: [B, N, 4] —— 標簽,歸一化到原始圖像loss_l1 = F.l1_loss(pred_boxes, gt_boxes, reduction='none')
loss_giou = 1 - generalized_iou_loss(pred_boxes, gt_boxes)total_loss = loss_l1.mean() + loss_giou.mean()

?? 注意:不要對 pred_boxes 或 gt_boxes 做任何形式的縮放或除以 input_w/h!


八、RT-DETRv2 vs YOLOv8 vs Deformable DETR 對比

特性RT-DETRv2YOLOv8Deformable DETR
坐標歸一化基準? 原始圖像? 輸入圖像(640)? 特征圖網格
Loss 計算空間? 原始圖像歸一化空間? 輸入圖像歸一化空間? 特征圖空間
是否依賴輸入尺寸? 否? 是? 是
是否支持動態輸入? 是? 否(需固定)? 否
是否可導? 完全可導? 可導? 可導
梯度穩定性? 極高(logit 空間)? 中等?? 較低(易漂移)
工業部署友好度??????????
推理速度? 極快(無 NMS)? 極快🐢 慢

? RT-DETRv2 是目前唯一在保持端到端、高精度、超高速的同時,實現“分辨率無關”且“Loss 獨立于輸入尺寸”的檢測框架。


九、為什么這設計如此重要?—— 工業部署的終極答案

想象你的應用場景:

場景傳統模型問題RT-DETRv2 優勢
手機 APP用戶拍照分辨率不一致(iPhone 15:4032×3024,紅米:1920×1080)一套模型通吃,無需改代碼
多攝像頭監控系統攝像頭型號不同,分辨率各異無需為每個攝像頭單獨訓練模型
邊緣設備(Jetson Nano)內存有限,不能存 img_w/h只需存儲預測結果 [cx,cy,w,h] 即可
云端服務支持任意上傳圖片尺寸自動適配,無需預處理校準

📌 RT-DETRv2 的設計,是真正為“現實世界”而生的。

它不追求論文里的“最高 mAP”,它追求的是:

“在任何設備、任何尺寸、任何環境下,都能穩定、準確、快速地工作。”

這就是工業 AI 的終極目標。


總結:一句話讀懂 RT-DETRv2 的靈魂

F.sigmoid(bbox_head(...) + inverse_sigmoid(ref)) 不是數學技巧,而是一種認知升級:
它讓模型不再計算“像素比例”,而是理解“場景中的相對位置”。

它用 Sigmoid 替代了 x / W
用 Logit 空間替代了像素空間,
用語義抽象替代了幾何計算。

更關鍵的是:它的 Loss 函數,也完全基于原始圖像歸一化坐標計算,與模型輸入尺寸零耦合。

這才是現代檢測器從“工程實現”走向“智能感知”的標志。


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

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

相關文章

簡單了解一下GraphRAG

傳統RAG的缺點 當我們將一段文本信息以句子分割后,存入到向量數據庫中。用戶提問“老王喜歡吃什么”,這個問題會與向量數據庫中的許多句子關聯性比較強,能返回準確且具體的信息。 但是,若是問題換成“出現了幾次西瓜”&#xff0c…

HTTP 狀態碼背后的邏輯:從請求到響應的完整流程解析(含完整流程圖)

在日常的 Web 開發與 API 調試中,我們經常會遇到各種 HTTP 狀態碼 ——404 Not Found、401 Unauthorized、500 Internal Server Error... 這些數字背后并非隨機出現,而是服務器處理請求過程中不同階段的 "反饋信號"。理解這些狀態碼的觸發邏輯…

Vue:下拉框多選影響行高

目錄 一、 出現場景二、 解決方案 一、 出現場景 在使用el-select增加multiple屬性進行多選時&#xff0c;會出現高度塌陷的情況 二、 解決方案 首先需要在el-select中增加collapse-tags屬性&#xff0c;并在style中增加如下樣式 方案一 <style scoped> ::v-deep .e…

如何在高通躍龍QCS6490 Arm架構上使用Windows 11 IoT企業版?

1.簡介研華已將高通躍龍QCS6490 技術應用于嵌入式模塊、單板電腦和AI攝像頭等各種規格的嵌入式硬件中。QCS6490平臺支持全面的操作系統生態系統&#xff0c;包括Windows、Ubuntu、Yocto和 Android。Windows 11 IoT企業版是微軟新一代的物聯網操作系統&#xff0c;具有更強的安全…

阿里云國際代理:如何利用RDS構建高可用、可擴展的數據庫架構

講下云數據庫RDS案例解析&#xff0c;若在上云或用云過程中有不懂的&#xff0c;可尋云樞國際yunshuguoji助力免卡上云用云。1、RDS MySQL數據庫代理支持讀寫分離、連接保持、就近訪問、事務拆分、連接池、SSL加密等功能&#xff0c;能夠降低主實例負載&#xff0c;提高實例可用…

C++之特殊類設計

文章目錄前言一、 設計一個不能被拷貝的類1. C98 實現方式2. C11 實現方式二、設計一個只能在堆上創建對象的類1. 方法一&#xff1a;析構函數私有&#xff0c;提供destory接口釋放資源2. 方法二&#xff1a;構造函數私有三、 設計一個只能在棧上創建對象的類1. 實現方式四、設…

TupiTube,一款免費開源的 2D 動畫創作工具

TupiTube&#xff0c;一款免費開源的 2D 動畫創作工具 ** ** 功能 ** &#xff1a;開源、免費的 2D 動畫軟件&#xff0c;界面簡單&#xff0c;支持逐幀動畫、剪紙動畫、定格動畫&#xff0c;能導入素材并導出多種視頻和圖片格式&#xff0c;適合兒童、學生和動畫愛好者入門創作…

MoE架構訓練系統設計:專家并行與門控網絡優化策略

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;注冊即送-H卡級別算力&#xff0c;80G大顯存&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生更享專屬優惠。 摘要 混合專家&#xff08;Mixture of Experts&#xf…

使用Python爬蟲,selenium和requests誰更強?

py爬蟲的話&#xff0c;selenium和reqeusts誰更強&#xff0c;selenium是不是能完全取代requests? 答案基本是可以的&#xff0c;selenium適合動態網頁抓取&#xff0c;因為它可以控制瀏覽器去點擊、加載網頁&#xff0c;requests則比較適合靜態網頁采集&#xff0c;它非常輕…

編譯原理-文法壓縮練習

這個任務的目標就是把一個給定的文法變得“干凈”和“高效”&#xff0c;剔除所有無用的部分。根據幻燈片&#xff0c;無用的&#xff08;多余的&#xff09;規則分為兩大類&#xff1a; 不可達規則&#xff1a;規則的“頭”&#xff08;左部非終結符&#xff09;從起始符號出發…

GPU硬件架構和配置的理解

從公司架構理解GPU架構想象一個GPU就像一家大型科技公司&#xff0c;它的任務是處理圖形和計算任務&#xff08;“干活”&#xff09;。硬件概念公司架構比喻作用和特點Platform (平臺)集團公司最大的獨立實體。比如谷歌Alphabet是一個集團公司&#xff0c;它旗下有谷歌、Waymo…

【硬件開發】電源抑制比PSRR

電源抑制比PSRR是電壓輸入量和電壓輸出量的比值&#xff0c;通常用dB來表示。 PSRR這個參數經常和運放&#xff0c;LDO,DCDC變換器有關聯。(2 封私信 / 58 條消息) 電源抑制比(PSRR)的基礎知識 - 知乎

七、卷積神經網絡

目錄 7.1 整體結構 7.2 卷積層 7.2.1 全連接層存在的問題 7.2.2 卷積運算 7.2.3 填充 7.2.5 3維數據的卷積運算 7.2.6 結合方塊思考 7.2.7 批處理 7.3 池化層 7.4 卷積層和池化層的實現 7.4.1 4維數組 7.4.2 基于 im2col的展開 7.4.3 卷積層的實現 7.4.4 池化層的…

加餐加餐!燒烤斗破蒼穹

忽然起了吃燒烤的念頭&#xff0c;便掏出手機點了一堆。不過二十分鐘&#xff0c;外賣小哥便按響了門鈴&#xff0c;手里提著一個方正的紙袋&#xff0c;還冒著熱氣。我將燒烤一一取出&#xff0c;排在茶幾上。肉串油光發亮&#xff0c;韭菜翠綠間點綴著蒜蓉&#xff0c;茄子剖…

搜索引擎收錄網站帶www和不帶www有區別嗎?

這是一個非常常見且重要的問題。簡單直接的回答是&#xff1a;有區別&#xff0c;但對搜索引擎來說&#xff0c;處理得當就不會重復&#xff1b;處理不當則會造成嚴重重復和權重分散。下面我為您詳細解釋一下&#xff0c;并提供正確的處理方法。核心區別&#xff1a;兩個不同的…

AFSim2.9.0學習筆記 —— 2、AFSim的Wizard軟件概述(ArkSIM集成開發環境 (IDE))

&#x1f514; AFSim2.9.0 相關技術、疑難雜癥文章合集&#xff08;掌握后可自封大俠 ?_?&#xff09;&#xff08;記得收藏&#xff0c;持續更新中…&#xff09; 若還沒有下載AFSim2.9.0完整軟件或源碼&#xff0c;請先進入本人另篇文章了解下載。 正文 ??主界面 打開 Ar…

建自己的Python項目倉庫,使用工具:GitHub(遠程倉庫)、GitHub Desktop(版本控制工具)、VSCode(代碼編輯器)

結合 GitHub&#xff08;遠程倉庫&#xff09;、GitHub Desktop&#xff08;版本控制工具&#xff09;、VSCode&#xff08;代碼編輯器&#xff09; 三個工具&#xff0c;以下是更具體的Python項目倉庫搭建流程&#xff0c;包含工具協同操作的詳細步驟&#xff1a; 一、整體流程…

iDEA Lombok 失效 和 slf log 變量失效問題

1. lombok 失效&#xff1a;檢查下配置有沒有使用注解處理器&#xff1b;且這個處理中有沒有帶上版本&#xff1b;版本號需要與上面引入的依賴版本一致。2. 對于找不到 log 變量的操作&#xff0c;則是使用下面將這個變量使用下面的代碼定義出來&#xff1b;上面去掉 slf4j注解…

go資深之路筆記(二) sync.Pool

一、 使用 sync.Pool 減少 GC 壓力&#xff0c;提升性能 簡單講下go的gc&#xff0c;它的核心原理就是三色標記法和寫屏障&#xff0c;可以實現優秀并發處理。gc一般不會頻繁調用&#xff0c;他是根據GOGC的值來判斷&#xff0c;具體就是上次觸發GC后總堆值大于等于上次的(1GO…

【面試筆記-Java開發崗】

目錄&#xff1a;1. synchronized 和 ReentrantLock 的區別及應用場景2. HashMap 與 LinkedHashMap 的區別3. ConcurrentHashMap 的數據結構及 JDK1.7 與 JDK1.8 區別4. Spring 常用的模式及應用場景5. 事務的四大特性&#xff08;ACID&#xff09;6. 鎖機制&#xff1a;行級鎖…