RL--RLHF--PPO--GRPO--DPO速通

參考視頻:1小時速通 - 從強化學習到RLHF - 簡介_嗶哩嗶哩_bilibili

強化學習RL

RL的核心就是智能體Agent 與 環境Environment的交互。

  • 狀態(State,s):環境在某一時刻的描述,表示當前情境。
  • 動作(Action,a):智能體基于狀態做出的選擇或行為。
  • 獎勵(Reward,r):環境對智能體動作的反饋,用于評價動作好壞。
  • 策略(Policy,π):智能體選擇動作的策略,通常是狀態到動作的映射函數。
  • 價值函數(Value Function):評估某一狀態或狀態-動作對的長期價值,幫助智能體判斷哪些狀態或動作更有利。
  • 環境轉移概率(Transition Probability):環境狀態轉移的概率分布,描述給定當前狀態和動作后,環境變到下一個狀態的可能性。

RL的核心目標就是:學習一個最優策略π*,最大化從當前時刻開始未來累計獲得的獎勵期望,通常表示為最大化期望折扣累計獎勵

整體訓練流程

初始化:

  • 初始化環境,設定初始狀態?s0?。

  • 初始化策略π(例如隨機策略)及價值函數。

交互采樣(采集經驗):

  • 智能體根據當前狀態?stst??和策略 π 選擇動作?atat?。

  • 環境根據動作執行,反饋獎勵?rt+1?和下一個狀態?st+1。

  • 智能體將元組?(st,at,rt+1,st+1)存入經驗池(某些算法使用)。

策略和價值函數更新:

  • 根據采集的經驗,智能體調整策略和/或價值函數,以更好地預測未來獎勵,改進決策。

迭代訓練:

  • 重復交互采樣和參數更新過程,通過不斷試錯和學習,策略逐漸完善,智能體表現提升。

終止條件:

  • 達到預設的訓練步數或收斂標準。

  • 智能體學習到滿意的最優或近似最優策略。

動態規劃Dynamic Prigramming

動態規劃是傳統RL的一種經典方法。

動態規劃方法是假設環境模型完全一致,也就是假設轉移概率函數?p(s′,r∣s,a) 是已知的,即:

給定當前狀態?s?和動作?a,我們完全知道環境轉移到下一個狀態?s′?并獲得獎勵?r?的概率分布。

RL的目標是希望Agent能夠去到獲得獎勵?r 高的狀態或動作。這意味著,智能體要了解當前策略下哪些狀態或動作的獎勵較高,并且逐步改進策略,選擇那些能帶來更大獎勵的路徑。

智能體通過評估當前策略的價值,知道“哪里好”,然后調整策略,去“更好”的地方。

DP的核心步驟

策略評估(Policy Evaluation)

  • 計算當前策略在各個狀態下的價值函數(Value Function),即在遵循該策略時從該狀態開始能期望獲得的累計回報。
  • 這一步是利用環境的轉移概率和獎勵函數,通過貝爾曼期望方程迭代求解或解析計算得到。

策略改進(Policy Improvement)

  • 根據策略評估得到的價值函數,調整策略使其更優:在每個狀態選擇那個能獲得最大價值的動作,即讓策略“去到有最大價值的地方”。
  • 這一步保證策略在每次改進后都是更好的。

和01背包問題的關聯

最近在刷leecode算法題,一看到DP就想到了01背包。

dp[i][w]=前i個物品,在容量為w的情況下的最大價值

  • 通過遞推式(狀態轉移方程)逐步求解,最終得到最優解。
  • 這個動態規劃過程是確定性和靜態的,狀態轉移和價值計算都是確定的,沒有涉及概率或環境交互。

DP數組的寫法:

def zero_one_knapsack(capacity: int, w: List[int], v: List[int]) -> int:n = len(w)# dp[i][c] 表示前 i 個物品(0-based),容量為 c 時的最大價值dp = [[0] * (capacity + 1) for _ in range(n)]# 初始化第一件物品(i=0)的狀態for c in range(w[0], capacity + 1):dp[0][c] = v[0]# 狀態轉移for i in range(1, n):for c in range(capacity + 1):if c < w[i]:dp[i][c] = dp[i-1][c]else:dp[i][c] = max(dp[i-1][c], dp[i-1][c - w[i]] + v[i])return dp[n-1][capacity]

遞歸的寫法:

RL中的DP用來求解最優策略,考慮的是決策過程中的狀態轉移和獎勵,但狀態轉移和獎勵是隨機性的,由環境模型?p(s′,r∣s,a)?給出。

這里的動態規劃不只是單純求最大價值,而是求解貝爾曼方程,計算狀態價值函數?Vπ(s)然后基于價值函數進行策略改進。

動態規劃的核心是利用狀態轉移概率和獎勵函數的期望來迭代計算價值函數,這是一個多階段的序貫決策問題,狀態和動作之間的轉移關系類似于馬爾可夫決策過程(MDP)的框架,而不只是單純的一維或二維數組轉移。


通過貝爾曼方程表達狀態價值函數

狀態價值函數 vπ(s) 表示在策略 π 下,從狀態 s 開始,未來能夠獲得的期望累計獎勵(通常帶折扣因子)的期望值:

貝爾曼方程用遞歸的形式表達vπ?(s):

當前狀態的價值等于:從當前狀態采取策略 π 選擇動作得到的即時獎勵 Rt+1,加上折扣后的下一狀態的期望價值 vπ(St+1)。

這個地方可以通過01背包的遞歸寫法理解。

貝爾曼方程假設了已知環境動態(轉移概率和獎勵分布),也就是已知從當前狀態s,采取動作a后轉移到下一個狀態s′并獲得獎勵r的概率

貝爾曼方程成立的“理想環境”是指:

  • 狀態轉移概率、獎勵完全已知

  • 環境嚴格滿足馬爾可夫性(狀態轉移只依賴當前狀態和動作,不依賴歷史)

  • 狀態/動作空間有限且可遍歷

  • 獎勵函數明確

在現實強化學習場景中,這些條件往往難以全部滿足:

  • 環境模型未知:無法直接計算?p(s′,r∣s,a)。
  • 狀態空間巨大甚至連續,無法窮舉。
  • 狀態觀測不完全或環境非馬爾可夫。

所以我們用貝爾曼方程作為理論基礎,但算法上常常采用采樣、逼近、估計等方式處理。

  • Monte Carlo Methods
  • Q-learning
  • Temporal Difference (TD)
  • Policy Gradient / REINFORCE algorithm

Policy Gradient策略梯度方法

用貝爾曼方程表達狀態價值函數進而求解最大化期望折扣累計獎勵的策略。

但是貝爾曼方程滿足需要的條件很難達到,所以有了很多其他策略。

策略梯度方法是直接以最大化期望累計回報為目標,通過對策略參數進行優化,計算目標函數關于策略參數的梯度,并用梯度上升法更新。

實現直接優化策略而不是“間接”通過估計值函數。

?策略梯度方法分為:

  • 純策略梯度法(如REINFORCE)只用采樣的獎勵,不顯式用貝爾曼方程。
  • 高級策略梯度法(如Actor-Critic、A2C、A3C等)會引入價值函數(critic),用貝爾曼方程逼近(如TD誤差),減少方差、提升效率。

策略梯度公式通常如下:

  • 其中?Qπ(s,a)就是貝爾曼方程定義的動作價值函數,它的準確估計往往依賴貝爾曼方程或其近似(如用TD方法估計)。

RL in LLMs

LLM問題的RL形式:

這部分內容的核心是:把語言模型的生成過程看作一個馬爾可夫決策過程(MDP),用強化學習框架進行建模和優化

狀態state

  • 初始狀態?S0?是提示詞(prompt),即輸入給模型的上下文。
  • 隨著生成過程,狀態不斷更新,StS表示當前提示詞 + 已生成的所有token,也就是說狀態包含了從初始到當前時間步生成的全部信息,作為決策依據。

動作空間action space

  • 動作空間是詞匯表(vocabulary),每一步動作是從詞匯表中選擇一個token。
  • 動作?At?是在時間步?t?生成的具體token。

策略Policy

  • 策略是模型的輸出概率分布,也就是大語言模型(LLM)在給定當前上下文?St 時,生成下一個token?At?的概率。
  • 用參數?θ?表示模型的參數(比如transformer的權重)。
  • 通過softmax把模型的logit 輸出?zi 轉化為概率。

回合終止(Episode end)

  • 當生成了特殊token?<|end of text|>?時,回合結束。

  • 整個生成過程視為一個完整的episode。

獎勵Reward

  • 假設對每個生成的完整句子都能得到一個獎勵信號(比如從人類反饋得到的評分,或者自動指標)。
  • 強化學習目標是最大化期望累計獎勵。
組成要素對應RL元素說明
Prompt + 已生成tokens狀態?St當前上下文,全信息
Token vocabulary動作空間?A每步選擇一個token作為動作
生成下一個token的概率分布策略?πθ?LLM輸出的softmax概率分布
生成過程Episode直到結束token,構成一個完整episode
句子質量評價獎勵函數?R反饋生成句子的好壞,指導學習

RLHF 基于人類反饋的強化學習

RLHF是在強化學習框架中引入人類反饋作為獎勵信號的強化學習方法。

通過人類專家或用戶對智能體行為的評價(正向或負向反饋),來訓練或指導策略,使其行為更符合人類期望。

方面強化學習(RL)基于人類反饋的強化學習(RLHF)
獎勵信號來源預定義的環境獎勵函數(明確、可計算)不直接用環境獎勵,獎勵來自人類反饋訓練的獎勵模型
目標最大化環境定義的累積獎勵最大化符合人類偏好的累積獎勵
訓練過程智能體與環境交互,用環境獎勵更新策略智能體與環境交互,用人類反饋訓練的獎勵模型指導策略
適用場景多用于有明確目標和環境反饋的問題多用于人類主觀評價難以明確表達的任務,如文本生成
關鍵挑戰設計合適的獎勵函數收集高質量的人類反饋,訓練準確的獎勵模型

RLHF的整體流程:

1. 監督微調(Supervised Fine-Tuning,SFT)

目的:通過有標注的示例(人類書寫的示范回答)對基礎預訓練模型進行微調。

步驟:

  • 收集大量人類撰寫的問答對(Prompt + 理想回答)。
  • ?使用監督學習(最大似然估計)訓練模型生成更符合人類示范風格的回答。

結果:模型初步具備生成較高質量回答的能力。

如上圖,整個流程就像是給定之前的單詞(state),預測下一個單詞(action)

訓練:

  • <prompter>表示提問者(用戶)的身份角色。
  • <assistant>表示回答者(模型)的身份角色。
  • <|endoftext|>表示這條對話的結束。

推理:模型從<assistant>開始,預測接下來合理的回答內容。

2. 訓練獎勵模型(Reward Model,RM)

目的:從人類反饋數據中訓練一個模型,能夠給模型生成的回答打分,表示人類對回答的偏好程度。

步驟:

  • 收集大量人類評分數據,通常是偏好對比:給出兩個模型回答,讓人類選擇更好的那個。(偏好數據)
  • 訓練獎勵模型,使其能對任意回答給出一個“獎勵分數”,反映人類偏好。

模型:獎勵模型通常是基于基礎語言模型的編碼器+回歸頭,輸出一個標量分數。

意義:這個模型是RL訓練階段的“代理獎勵函數”,替代難以明確定義的人工獎勵。

采用對比學習的思想,定義損失函數:

  • r??(x,y)?是獎勵模型對輸入-回答對的評分。
  • σ?是sigmoid函數,將分數差轉換成概率。
  • 期望是對數據集中的所有偏好對進行平均。

直觀理解:鼓勵獎勵模型給更優回答更高分,使得?r?(x,yw)>r?(x,yl)。

3. 基于獎勵模型的強化學習(Policy Optimization)

目的:用強化學習算法,以獎勵模型的評分為優化目標,進一步提升模型策略。

技術細節:

  • 使用策略梯度算法,如PPO(Proximal Policy Optimization)。
  • ?訓練時,智能體(語言模型)采樣回答,獎勵模型給出評分,策略據此調整參數。

限制:同時用KL散度約束限制新策略與原策略差異,保證穩定性防止過擬合獎勵模型。

結果:模型輸出更符合人類偏好、質量更高、更安全。


RLHF中的策略優化(Policy Optimization)方法

在RLHF中,第三步,用強化學習算法,以獎勵模型的評分為優化目標,調整參數。

這中間的優化過程,就需要使用一些策略優化算法。

經典方法如下:

方法關鍵點備注
PPO穩定性強,利用Critic和AdvantageOpenAI主流選擇
GRPO基于組內相對表現,KL約束適合多策略協作
DPO無需獎勵模型,直接優化偏好數據簡化訓練流程

PPO(Policy Proximity Optimation)

這部分公式推導詳看:

PPO原理詳解 | 公式推導-CSDN博客

PPO的訓練過程(偽代碼)-CSDN博客

PPO的核心思想就是:

優化新策略時,不要讓其與舊策略差異過大(Proximity),保持“接近性”以保證穩定和安全。

Proximity 指的是:每次策略更新時,限制新策略和舊策略之間的變化幅度。

如果策略變化太大,可能會導致模型行為不穩定或者性能急劇下降。因此,PPO用剪切(clipping)或KL散度等技術來約束策略更新。

PPO-Clip的算法流程

輸入:

  • 初始策略參數?θ0
  • 初始價值函數參數??0 (價值函數用于評估當前狀態/動作的“好壞”,為優勢函數計算提供依據)

主循環:

  • Importance sampling:通過概率比校正數據分布,兼容on-policy和小范圍off-policy。
  • Advantage:策略更新主導方向。
  • Clip函數:保證鄰近性,訓練穩定。

RL-->RLHF-->PPO

RL:在傳統強化學習中,通過最大化累計獎勵,也就是價值函數,進而優化策略函數。

RLHF:通過引入獎勵模型,給模型輸出進行打分,從而量化模型輸出的好壞。獎勵模型替代了RL中環境真實獎勵,通過最大化模型評分,直接優化策略函數。

如果是直接純策略梯度例如Reinforce方法,就沒有價值函數;如果是高級策略梯度法(如Actor-Critic)會引入價值函數(critic),減少策略梯度方差,用貝爾曼方程逼近(如TD誤差)。

PPO:在RLHF的基礎上,為了提升訓練的問題,首先引入了clip或者KL散度,保證了每次策略更新幅度有限,不要離舊策略太遠。然后優化策略使用的actor-critic,所以實質上還是通過引入價值函數的策略優化方法,去優化獎勵模型,從而優化策略函數。

在策略梯度更新的過程中,原本是最大化獎勵,為了訓練的問題,引入了基線,這個過程合并成了優勢函數(獎勵-當前策略期望獲得的累計回報)。

而優勢函數通過一系列變換,其實可以用價值函數表示。

所以整體本質上, PPO是在優化價值函數和獎勵函數,進而優化策略函數。

  • RLHF = RL + 人工獎勵模型

  • PPO = 為RLHF設計的穩定策略優化算法

  • Actor-Critic + PPO clip機制 = 高效且穩定的策略訓練

  • 優勢函數 = 價值函數和獎勵信號結合的關鍵橋梁

這里有一個很容易理解錯誤的點就是,其實RL中所指的價值函數和PPO中所致的價值函數不完全一致:

雖然他們的定義和數學意義是一樣的,都是期望累計回報函數:

但是兩者的用途和訓練方式有所不同

  • 傳統RL中,價值函數是策略改進過程中的中間環節,主要用來評價策略。
  • Actor-Critic中,價值函數是輔助網絡,主要作用是平滑策略梯度,降低方差,并通過與Actor協同訓練實現策略優化。

Actor-Critic策略梯度方法

Actor-Critic是RL中一種兼具策略優化和價值i評估的“策略梯度方法”,結合了兩類方法的優點:

  • Actor(策略網絡):負責決策,輸出在每個狀態下采取各個動作的概率(策略),參數記為?θ;
  • Critic(價值網絡):負責評估當前策略的好壞,估算當前狀態的價值(或狀態-動作價值),參數記為??。

Critic負責“評分”,Actor負責“改進行為”。

原理:
強化學習的目標是最大化期望累計回報,策略梯度法是直接對策略參數求導來求得最大期望累計回報的參數。

直接用實際回報估計會有很大的方差,訓練不穩定,價值函數就用來降低方差(就是baseline),也就是用價值函數來表達優勢函數。

所以Actor-Critic結構就是:

  • Actor:輸出策略?πθ(a∣s)(通常是softmax或高斯分布參數)。
  • Critic:估算?V?(s) 或?Q?(s,a)。

Critic幫助估算優勢函數(Advantage),指導Actor的更新。

偽代碼如下:

for iteration in range(total_iterations):# 1. 用當前策略與環境交互,收集經驗(batch)batch = collect_experience(policy=actor, env=env)# 2. 更新Criticfor (s_t, a_t, r_t, s_{t+1}) in batch:target = r_t + gamma * V_phi(s_{t+1})loss_C = (V_phi(s_t) - target) ** 2Critic優化(loss_C, phi)# 3. 計算優勢Advantage = target - V_phi(s_t)# 4. 更新Actorloss_A = -log_pi_theta(a_t | s_t) * AdvantageActor優化(loss_A, theta)

Crtic價值函數的更新:


GRPO (Group Relative Policy Optimization)

GRPO是在PPO基礎上的一種改進,重點在于將獎勵和優勢函數的計算基于一組(group)內部的歸一化比較,而不是全局的絕對獎勵。這在某些任務中,比如多樣本、多目標、多任務的情形,能緩解獎勵尺度不一致的問題,增強訓練穩定性和泛化能力。

將PPO 和 GRPO 兩個目標函數公式放在一起對比:

GPRO在PPO的基礎上,做了以下改動:

1.?多輸出組優化:一次采樣一組大小為G的輸出?{oi},對組內平均目標求期望。

2.?優勢函數Ai采用組內獎勵歸一化

我們對比PPO 和 GRPO的公式發現,PPO 只是用了一個正則化手段,要是是KL散度要么是Clip(Clip用的最多);但是在GRPO公式中,既有Clip又有KL散度計算。Why?

  • clip機制的作用:限制單步策略概率比?r(\theta) = \frac{\pi _{\theta}(a|s)}{\pi _{\theta_{old}}(a|s)} 在?[1??,1+?] 范圍內波動,防止策略在某一步驟驟變。
  • KL散度的作用:直接限制新舊策略整體分布的差異,理論上更嚴謹、整體更穩定,但計算和調控相對復雜。

GRPO中的設計:

  • clip裁剪:對單個輸出的概率比進行限制,防止單個輸出概率跳變過大。
  • KL散度正則:對整個策略分布(針對組輸出)進行整體正則,控制新策略與參考策略(不一定是舊策略)之間的分布差異。

GRPO針對的是多輸出組的采樣和優化,優勢函數是組內歸一化相對優勢,這帶來:

  • 獎勵尺度和樣本間差異更復雜,clip限制單個樣本的局部更新幅度,防止極端概率比出現。
  • 整體策略分布的控制更加關鍵,KL散度限制策略整體分布的更新幅度,防止整體策略遷移過大。

DPO Direct Preference Optimization

這部分公式推導可詳看:DPO原理 | 公式推導-CSDN博客

DPO的核心思想:直接優化模型生成結果的偏好概率,不依賴傳統單獨訓練的獎勵模型。

LLM本身被“隱式”視為獎勵模型,模型直接通過人類偏好數據來調整生成策略。

其目標是最大化模型生成更偏好輸出的概率,相當于“最大化偏好的對數似然”。

公式含義

  • 計算當前模型生成優選輸出跟參考模型生成優選輸出的對數概率比,減去對應的劣選輸出的對數概率比。
  • 通過Sigmoid函數,將該差異轉化為一個概率值,表示當前策略更偏好生成?yw而非?yl??的置信度。
  • 對數之后取負期望,等價于最大化“當前模型在偏好對上的正確排序概率”,即訓練模型使其更傾向于生成被偏好的輸出。

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

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

相關文章

hardhat 項目目錄介紹

使用 npx hardhat init初始化一個 Hardhat 項目后&#xff0c;會生成一個結構清晰的目錄&#xff0c;每個部分都有其特定用途。下面是一個表格匯總了主要的目錄和文件及其作用&#xff0c;方便你快速了解&#xff1a;contracts/??存放項目的 ??Solidity 智能合約源代碼??…

9.11網編項目——UDP網絡聊天

服務器端#include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #include <unistd.h> #include <25061head.h> #d…

第3節-使用表格數據-數據庫設計

摘要: 在本教程中&#xff0c;你將學習如何為自己的應用程序設計 PostgreSQL 數據庫。 業務需求 我們將為一個簡單的庫存管理系統設計數據庫。 讓我們從業務需求開始&#xff1a; “我們的庫存管理系統使倉庫用戶能夠高效管理多個倉庫的庫存。” 它簡化了產品管理&#xff0c;使…

Linux下清理磁盤空間——df 磁盤占用100%,du占用很少空間的原因

背景 一臺測試服務器&#xff0c;/data磁盤大小為300G&#xff0c;時不時就滿了&#xff0c;通過df命令查看300G基本全用了&#xff0c;use 100%。但是進到/data目錄中通過du 命令查看&#xff0c;也就用了20個G左右&#xff0c;怎么都對不上。如何清理都沒有釋放太多空間。查看…

分鐘級長視頻生成迎來“記憶革命”,7倍成本降低,2.2倍端到端生成速度提升!|斯坦福字節

論文鏈接&#xff1a;https://arxiv.org/pdf/2508.21058 項目鏈接&#xff1a;https://primecai.github.io/moc/亮點直擊提出了一種自適應上下文混合&#xff08;Adaptive Mixture of Contexts&#xff0c;MoC&#xff09;框架&#xff0c;該框架學習將每個查詢路由到視頻序列中…

JavaScript 設計模式概覽

1. 設計模式是什么? 設計模式是開發中解決常見問題的經典方案。設計模式并非具體代碼&#xff0c;而是解決問題的通用解決方案&#xff0c;幫助開發者避免重復造輪子&#xff0c;提升代碼的可維護性、可擴展性。 2. 設計模式的歷史 設計模式起源于建筑領域&#xff0c;由克…

(九)Spring Cloud Alibaba 2023.x:微服務接口文檔統一管理與聚合

目錄 前言 準備 實踐 網關服務配置 1.pom.xml 引入 webflux 版本 springboc 依賴 2.application-dev.yml 配置 springboc 多服務地址 3.application-dev.yml 配置springboc 文檔路由 4.網關過濾器AuthFilter.class 中放行 springboc 訪問路徑 業務服務配置 1.pom.xml…

在Cursor里安裝極其好用的Mysql Database Client 插件

&#x1f4f8; 插件界面展示 圖片1&#xff1a;插件主界面和連接配置圖片2&#xff1a;數據編輯和查詢結果展示&#x1f3af; 核心優勢 1. 直接編輯數據 - 像DataGrip一樣強大 ? 點擊即編輯: 直接雙擊數據單元格&#xff0c;立即進入編輯模式? 實時保存: 編輯完成后按 Enter …

Cursor 不香了?替代與組合實踐指南(Windsurf、Trae、Copilot、MCP)

當你感覺 Cursor 的產出質量和穩定性不如從前&#xff0c;未必一定要“全盤換掉”。本文從“替代”與“組合”兩個維度給出可落地的工具編排方案&#xff0c;并附帶決策矩陣與常見工作流&#xff0c;幫助你在不同場景獲得穩定、可控的產出。0. 適用讀者 正在使用或評估 Cursor&…

【MFC】對話框屬性:X Pos(X位置),Y Pos(Y位置)

前言 本文介紹對話框屬性中的X Pos(X位置)、Y Pos(Y位置)&#xff0c;同時給出相關示例便于理解。 目錄1 位置2 詳解3 示例1 位置 首先介紹一下這個屬性在哪里。 在資源視圖中雙擊對話框節點&#xff0c;打開該對話框&#xff1b; 鼠標右鍵工作區空白處&#xff0c;單擊屬性&am…

Java面試小冊(1)

1【Q】&#xff1a;序列化和反序列化【A】&#xff1a;序列化是將Java對象轉化為字節流&#xff0c;用于網絡傳輸&#xff0c;持久化或緩存。Java提供了java.io.Serializable接口實現序列化。反序列化是將字節流轉為為對象。2【Q】&#xff1a; Java中Exception和Error有什么區…

html獲取16個隨機顏色并不重復

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>16個不重復隨機顏色</title><style>…

Redis 緩存穿透、擊穿、雪崩:防御與解決方案大全

&#x1f6e1;? Redis 緩存穿透、擊穿、雪崩&#xff1a;防御與解決方案大全 文章目錄&#x1f6e1;? Redis 緩存穿透、擊穿、雪崩&#xff1a;防御與解決方案大全&#x1f9e0; 一、緩存穿透&#xff1a;防御不存在數據的攻擊&#x1f4a1; 問題本質與危害&#x1f6e1;? 解…

量子計算機的發展對傳統密碼學的打擊

量子計算機的發展對傳統密碼學的核心威脅&#xff0c;源于其能高效解決傳統計算機“計算不可行”的數學問題——而這些問題正是當前主流密碼算法保障安全的基石。這種影響并非“全面摧毀”&#xff0c;而是針對傳統密碼學的不同分支&#xff08;非對稱密碼、對稱密碼、哈希函數…

《var, let, const:現代JS聲明指南》

文章目錄JavaScript 中 var、let、const 的差異1. 作用域&#xff08;Scope&#xff09;2. 變量提升&#xff08;Hoisting&#xff09;3. 重復聲明4. 變量值是否可變對比表5. 示例代碼總結JavaScript 中 var、let、const 的差異 1. 作用域&#xff08;Scope&#xff09; var 函…

在 Docker 中安裝 MySQL 教程

拉取 MySQL 鏡像docker pull mysql:8.0創建并啟動 MySQL 容器docker run -d \--name mysql8 \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD123456 \-v mysql_data:/var/lib/mysql \mysql:8.0命令說明&#xff1a;-d&#xff1a;后臺運行容器 --name mysql8&#xff1a;給容器起個名字…

C#線程理解

目錄 一.線程類 1.基礎線程類&#xff08;Thread&#xff09; 2.線程池類&#xff08;Threadpool&#xff09; 3.任務并行庫&#xff08;Task&#xff09; 4.并行循環&#xff08;Parallel&#xff09; 二.線程池(threadPool)和Thread/Task之間的聯系 1.ThreadPool和Thr…

Java入門級教程16——JUC的安全并發包機制

目錄 1.JUC的安全并發包機制 1.1 包含 1.2 Barrier(柵欄)機制——CyclicBarrier&#xff08;循環屏障&#xff09; 1.2.1 定義 1.2.2 特性 1.2.1 模擬包車 1.2.2 模擬學生到齊上課 1.2.3 計算任務總耗時 1.3 CountDownLatch(閉鎖)機制 1.3.1 定義 1.3.2 特性 1.3.3…

【網絡通信】全面解析MAC地址:網絡設備的唯一標識

【網絡通信】全面解析MAC地址&#xff1a;網絡設備的唯一標識 文章目錄【網絡通信】全面解析MAC地址&#xff1a;網絡設備的唯一標識前言一、MAC 地址的定義&#xff1a;設備的 “網絡身份證”?二、MAC 地址的格式與組成&#xff1a;48 位的 “數字編碼”?三、MAC 地址的工作…

Perforce Klocwork 2025.2版本更新:默認啟用現代分析引擎、支持 MISRA C:2025 新規、CI構建性能提升等

Perforce Klocwork 現已更新至2025.2版本&#xff01;該版本增強了對 C/C的分析能力&#xff0c;提升了現代 C 分析的準確性&#xff0c;并改進了對源文件編碼的支持。該版本還為 MISRA C:2025 標準引入了新的分類體系&#xff0c;并增強了 Visual Studio Code 插件的可用性。 …