二、智能体强化学习——深度强化学习核心算法
2.1 DQN 系列及其改进
2.1.1 背景与动机
在经典强化学习中(如 Q-Learning),如果状态空间或动作空间非常大乃至连续,那么用一个表格来存储 Q ( s , a ) Q(s,a) Q(s,a) 不再可行。为了解决该问题,可以使用神经网络来逼近 Q Q Q 函数,这就是 深度 Q 网络(Deep Q-Network,DQN) 的核心思想。
- 论文起源:DQN 由 DeepMind 团队提出(Mnih et al., 2013 & 2015),利用卷积神经网络来从原始像素(如 Atari 游戏画面)中学习特征,并输出各动作的 Q 值,大幅度提升了在 Atari 游戏上的表现。
- 核心要点:
- 用一个神经网络 Q ( s , a ; θ ) Q(s,a;\theta) Q(s,a;θ) 近似 Q 值;
- 通过最小化时序差分 (TD) 误差来更新 θ \theta θ。
Q 函数的神经网络逼近
对于离散动作环境,网络的输出层通常有 ∣ A ∣ |\mathcal{A}| ∣A∣ 个神经元,每个输出对应一个动作的 Q 值 Q ( s , a ) Q(s,a) Q(s,a)。输入为状态 s s s(可能是图像或其他向量),通过多层感知机 (MLP) 或卷积神经网络 (CNN) 获取特征后输出 Q 值。
2.1.2 DQN 原理与伪代码
(1) 关键改进:Experience Replay 与 Target Network
-
Experience Replay(经验回放)
- 将 Agent 与环境交互得到的经验 ( s , a , r , s ′ ) (s, a, r, s') (s,a,r,s′) 存储在一个 Replay Buffer 中;
- 每次训练时,从该 Buffer 中随机采样一个批量(mini-batch)数据进行梯度更新;
- 好处:
- 让样本分布更加独立同分布 (i.i.d.),打破连续时间步样本的相关性;
- 提高数据效率,能够反复使用历史数据进行训练。
-
Target Network(目标网络)
- DQN 中存在“自举 (bootstrapping)”:在更新 Q 值时,需要用到下一时刻的 Q 值;
- 如果使用同一个网络同时执行动作选择和目标计算,可能导致训练不稳定;
- 解决方案:维持一个“目标网络” Q ^ ( s , a ; θ − ) \hat{Q}(s,a;\theta^-) Q^(s,a;θ−),周期性(或软更新)将在线网络的参数 θ \theta θ 复制到 θ − \theta^- θ−;
- 当计算 TD 目标时,用的是目标网络的 Q 值,不随在线网络每次更新而变化过快。
(2) DQN 的核心更新公式
对于某条经验 ( s , a , r , s ′ ) (s, a, r, s') (s,a,r,s′),DQN 的 TD 目标 (Target) 为
y = r + γ max a ′ Q ^ ( s ′ , a ′ ; θ − ) \LARGE y = r + \gamma \max_{a'} \hat{Q}(s', a'; \theta^-) y=r+γa′maxQ^(s′,a′;θ−)
其中 Q ^ \hat{Q} Q^ 是目标网络。DQN 的损失函数为
L ( θ ) = E ( s , a , r , s ′ ) ∼ D [ ( y − Q ( s , a ; θ ) ) 2 ] \LARGE L(\theta) = \mathbb{E}_{(s,a,r,s')\sim \mathcal{D}} \Big[ \big( y - Q(s,a;\theta) \big)^2 \Big] L(θ)=E(s,a,r,s′)∼D[(y−Q(s,a;θ))2]
通过反向传播对 θ \theta θ 做梯度下降,最小化此均方误差。
(3) DQN 伪代码示例
以下是一段简化的伪代码流程:
Initialize Q network with random weights θ
Initialize target network with the same weights θ^- ← θ
Initialize replay buffer Dfor episode in 1 to max_episodes:s = env.reset()done = Falsewhile not done:# 1. epsilon-greedy 策略if random() < epsilon:a = random actionelse:a = argmax(Q(s, ·; θ))# 2. 与环境交互s_next, r, done, info = env.step(a)# 3. 存储经验D.append((s, a, r, s_next, done))# 4. 训练if len(D) > batch_size:# 4.1 从 D 中随机采样batch = sample(D, batch_size)(s_batch, a_batch, r_batch, s_next_batch, done_batch) = transform(batch)# 4.2 计算目标 yy = r_batch + γ * max(Q(s_next_batch, a'; θ^-), axis=1) * (1 - done_batch)# 4.3 计算当前 Q(s,a;θ),并最小化均方误差loss = MSE(Q(s_batch, a_batch; θ), y)do gradient descent on θ# 5. 每隔 C 步更新目标网络if step % C == 0:θ^- ← θ# 状态前移s = s_next# 6. 衰减 epsilonepsilon = max(epsilon_min, epsilon * epsilon_decay)
2.1.3 DQN 的改进算法
-
Double DQN
- 在计算 max a ′ Q ( s ′ , a ′ ) \max_{a'} Q(s',a') maxa′Q(s′,a′) 时会产生过估计问题;
- Double Q-Learning 思想:将动作选择与动作评估分别在两个网络中完成:
a ∗ = arg max a ′ Q ( s ′ , a ′ ; θ ) , y = r + γ Q ^ ( s ′ , a ∗ ; θ − ) \LARGE \begin{array}{l} a^* = \arg\max_{a'}Q(s',a';\theta), \\ y = r + \gamma \hat{Q}\big(s', a^*; \theta^-\big) \end{array} a∗=argmaxa′Q(s′,a′;θ),y=r+γQ^(s′,a∗;θ−) - 这样能够有效减小 Q 值的过估计偏差。
-
Dueling DQN
- 将网络拆分为状态价值函数 V ( s ) V(s) V(s) 和优势函数 A ( s , a ) A(s,a) A(s,a) 两个分支:
Q ( s , a ) = V ( s ) + A ( s , a ) − 1 ∣ A ∣ ∑ a ′ A ( s , a ′ ) \LARGE Q(s,a) = V(s) + A(s,a) - \frac{1}{|\mathcal{A}|}\sum_{a'}A(s,a') Q(s,a)=V(s)+A(s,a)−∣A∣1a′∑A(s,a′) - 能让网络更好地学习状态本身的价值,在某些情况下提升训练效率。
- 将网络拆分为状态价值函数 V ( s ) V(s) V(s) 和优势函数 A ( s , a ) A(s,a) A(s,a) 两个分支:
-
优先级回放(Prioritized Replay)
- 经验回放中,TD 误差较大的样本往往更有学习价值;
- 给每条经验分配一个“优先级” p i = ∣ δ i ∣ + ϵ p_i = | \delta_i | + \epsilon pi=∣δi∣+ϵ( δ i \delta_i δi 为 TD 误差);
- 采样时,根据 p i p_i pi 的大小进行加权随机采样,让高 TD 误差样本被更多关注;
- 注意需对更新进行重要性采样修正 (IS weights),以保证无偏性。
-
Rainbow DQN
- 将Double DQN、Dueling DQN、优先级回放、NoisyNet、Categorical DQN 等多种改进技术结合在一起,进一步增强效果。
2.2 Policy Gradient 系列
在 Q-Learning 类方法中,我们先估计 Q 值,然后通过贪心或近贪心选择动作;而策略梯度方法则直接对策略函数 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(a∣s) 参数化并通过梯度上升来最大化期望回报。这类方法对连续动作空间尤其有效。
2.2.1 基本策略梯度(REINFORCE)
(1) 思想概述
- 策略 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(a∣s) 是一个可微分的函数(如神经网络),输出在状态 s s s 时选择动作 a a a 的概率;
- 目标:最大化期望回报
J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T r t ] \LARGE J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T} r_t \right] J(θ)=Eτ∼πθ t=0∑Trt
其中 τ \tau τ 表示整个轨迹 e p i s o d e episode episode; - 核心:利用梯度上升, θ ← θ + α ∇ θ J ( θ ) \theta \leftarrow \theta + \alpha \nabla_\theta J(\theta) θ←θ+α∇θJ(θ)。
(2) REINFORCE 算法公式
对策略梯度的一个常见推导是:
∇ θ J ( θ ) = E τ ∼ π θ [ ∑ t = 0 T ∇ θ log π θ ( a t ∣ s t ) ⋅ G t ] \LARGE \nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t|s_t) \cdot G_t \right] ∇θJ(θ)=Eτ∼πθ t=0∑T∇θlogπθ(at∣st)⋅Gt
其中 G t G_t Gt 是从时刻 t t t 开始的折扣回报(Return)。在实现中,常见做法是采样多个完整的episode,计算每个时间步的 log π θ ( a t ∣ s t ) \log \pi_\theta(a_t|s_t) logπθ(at∣st) 累积,再加权更新。
(3) REINFORCE 的特点
- 优点:实现简单;可以处理连续或离散动作空间;适用于高维输出;
- 缺点:方差大,收敛速度慢;需要对整条轨迹进行采样。
2.2.2 Actor-Critic 框架
为了降低纯策略梯度方法的高方差,在更新策略时引入价值函数的基线(Baseline)。这就带来了Actor-Critic框架。
- Actor:表示策略网络 π θ ( a ∣ s ) \pi_\theta(a|s) πθ(a∣s),输出动作概率(或连续动作的均值、方差等);
- Critic:表示价值网络 V ω ( s ) V^\omega(s) Vω(s) 或 Q ω ( s , a ) Q^\omega(s,a) Qω(s,a),用来评价当前策略的好坏。
(1) 基本思想
- 策略梯度中,如果我们用 G t − b t G_t - b_t Gt−bt 来取代 G t G_t Gt,只要 b t b_t bt 与动作无关,就不改变无偏性,可降低方差;
- 常见做法: b t b_t bt 用价值函数 V ω ( s t ) V^\omega(s_t) Vω(st) 近似;
- 这样,Critic 网络去学习一个状态价值函数或动作价值函数;Actor 在更新时参考 Critic 给出的基线或优势函数,减小更新的方差。
(2) A2C / A3C
- A2C(Advantage Actor-Critic):使用“优势函数” A ( s t , a t ) = Q ( s t , a t ) − V ( s t ) A(s_t,a_t) = Q(s_t,a_t) - V(s_t) A(st,at)=Q(st,at)−V(st) 来衡量某个动作相对平均水平的好坏;
- A3C(Asynchronous Advantage Actor-Critic):多线程/多进程异步采样,每个线程都有自己的 Actor 和 Critic,与环境交互并计算梯度,再将梯度同步到全局参数中;
- 优点:并行采样,效率更高;在当年的硬件条件下显著加速了训练。
(3) Actor-Critic 伪代码示例(单线程简化)
Initialize Actor πθ, Critic Vω
for episode in 1 to max_episodes:s = env.reset()done = Falsewhile not done:# 1. 从策略网络中采样动作a = sample from πθ(a|s)s_next, r, done, info = env.step(a)# 2. Critic 计算 TD 误差 δV_s = Vω(s)V_s_next = Vω(s_next) if not done else 0δ = r + γ * V_s_next - V_s# 3. 更新 CriticL_critic = δ^2ω ← ω - α_critic ∇ω L_critic# 4. 更新 ActorL_actor = - δ * log πθ(a|s) # 这是一种简化形式θ ← θ - α_actor ∇θ L_actors = s_next
2.3 高级算法
对于更复杂的场景,如连续动作或高维动作的控制,我们需要更先进的算法来保证训练的稳定性和效率。下面介绍几种主流算法:DDPG、TD3、PPO、SAC。
2.3.1 DDPG(Deep Deterministic Policy Gradient)
(1) 适用场景与思路
- 场景:连续动作空间(如机器人关节控制)。
- 核心思想:结合 Actor-Critic 思路,Actor 输出确定性动作(而非动作分布),Critic 学习 Q ω ( s , a ) Q^\omega(s,a) Qω(s,a)。
- 学习目标:最小化 Critic 给出的负 Q 值,让 Actor 朝着“使 Q 值更高的方向”更新。
(2) 算法要点
- Actor 网络 μ θ ( s ) \mu_\theta(s) μθ(s) ,输入状态输出一个确定性动作;
- Critic 网络 Q ω ( s , a ) Q^\omega(s,a) Qω(s,a),输入状态-动作,输出对应 Q 值;
- Replay Buffer + Target Network(类似 DQN)减少不稳定性;
- 更新:
- Critic 更新:最小化 TD 误差
L ( ω ) = ( r + γ Q ω ( s ′ , μ θ ( s ′ ) ) − Q ω ( s , a ) ) 2 \LARGE L(\omega) = \big(r + \gamma Q^\omega(s', \mu_\theta(s')) - Q^\omega(s,a)\big)^2 L(ω)=(r+γQω(s′,μθ(s′))−Qω(s,a))2 - Actor 更新:基于策略梯度
∇ θ J ≈ E [ ∇ a Q ω ( s , a ) ∣ a = μ θ ( s ) ∇ θ μ θ ( s ) ] \LARGE \nabla_\theta J \approx \mathbb{E}\left[\nabla_a Q^\omega(s,a)\big|_{a=\mu_\theta(s)} \nabla_\theta \mu_\theta(s)\right] ∇θJ≈E[∇aQω(s,a) a=μθ(s)∇θμθ(s)] - 同步目标网络的做法与 DQN 类似。
- Critic 更新:最小化 TD 误差
(3) 优势与局限
- 优势:适合连续动作;在一些机器人控制场景有良好表现;
- 局限:训练不稳定;对超参数和初始化较敏感;容易陷入局部最优或碰到多步预测误差累积。
2.3.2 TD3(Twin Delayed DDPG)
- 目的:解决 DDPG 中 Critic 的过估计问题与训练不稳定;
- 双 Critic:类似 Double DQN 的思想,两个独立的 Critic 网络取最小 Q 值作为目标,降低过估计;
- 延迟更新:Actor 网络的参数更新频率低于 Critic,先让 Critic 更充分地学习;
- 目标平滑:在下一个状态动作上加噪声,以减少因函数不平滑引起的过高估计;
- 综合这些改进,使 TD3 在连续控制任务上比 DDPG 更鲁棒。
2.3.3 PPO(Proximal Policy Optimization)
(1) 算法动机
- 场景:On-policy 策略梯度算法,兼具易实现、稳定和高效的特性;
- 问题:直接进行策略梯度更新,步长较大时会毁掉之前学到的策略,引发不稳定。
- 解决:PPO 在更新时约束新旧策略的差异,不使策略迭代步太大。
(2) 算法核心
- 使用**剪切(clipping)**的目标函数,限制更新幅度;
- 定义概率比
r t ( θ ) = π θ ( a t ∣ s t ) π θ old ( a t ∣ s t ) \LARGE r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_\text{old}}(a_t|s_t)} rt(θ)=πθold(at∣st)πθ(at∣st)
然后在优化时将其裁剪在一定范围内(如 [1- ϵ \epsilon ϵ, 1+ ϵ \epsilon ϵ]); - 这样可以兼顾:
- 收益提升(策略改进)
- 稳定性(不让新旧策略差别过大)
(3) 实践效果
- PPO 是当前深度强化学习中最常用的 on-policy 算法之一;
- 实现和调参相对友好,在 MuJoCo 或许多学术竞赛任务中表现出色。
2.3.4 SAC(Soft Actor-Critic)
(1) 核心理念:熵正则化
- SAC 是一种 off-policy 的 Actor-Critic 算法;
- 目标不仅是最大化回报,还要最大化策略的熵(entropy),鼓励策略尽量保持随机,以提升探索能力、提高鲁棒性;
- 通过在目标中加入熵项 α H ( π ( ⋅ ∣ s ) ) \alpha \mathcal{H}(\pi(\cdot|s)) αH(π(⋅∣s)),来平衡“高回报”与“高熵”之间的关系。
(2) 算法结构
- Actor:输出动作分布参数(高斯分布的均值、方差);
- Critic:有两个 Q 网络(双 Critic),取较小值来抑制过估计;
- 温度系数 α \alpha α:控制熵奖励权重,可以固定或自适应调参;
- off-policy:从 Replay Buffer 采样。
(3) 优势
- 稳定收敛:利用双 Critic + 目标平滑 + 熵正则;
- 高探索:让策略在训练前期保持足够随机,减少早期陷入局部最优;
- 在许多连续控制任务中性能优异,且收敛更稳定。
总结与对比
算法 | 特点 | 适用场景 | 优缺点 |
---|---|---|---|
DQN | 离散动作;用 NN 逼近 Q 值;Experience Replay & Target Network | Atari、离散控制 | 易实现;对离散动作较好;对连续动作需改进;存在过估计等问题 |
Double DQN | DQN 改进,解决过估计 | 与 DQN 相同 | 减小过估计,训练更稳定 |
Dueling DQN | 拆分状态价值和优势函数 | 与 DQN 相同 | 对无关动作时能更好提取状态价值 |
Prioritized Replay | 根据 TD 误差进行优先级采样 | 与 DQN 相同 | 数据利用率高,但需重要性采样修正 |
Policy Gradient (REINFORCE) | 直接对策略参数化,梯度上升 | 可处理离散或连续动作 | 实现简单;方差大,收敛慢 |
Actor-Critic (A2C/A3C) | 策略网络 + 价值网络,降低方差 | 常用在并行、多线程场景 | 训练速度快,易于扩展;可能仍有不稳定 |
DDPG | 基于 Actor-Critic,用确定性策略处理连续动作 | 机器人控制、模拟仿真等连续任务 | 适合连续动作;易陷入不稳定,需 carefully 调参 |
TD3 | 双 Critic + 延迟更新 + 目标平滑,改进 DDPG | 与 DDPG 同 | 更鲁棒,减少过估计;实现稍复杂 |
PPO | On-policy,使用剪切损失保证策略改进稳定 | 机器人、游戏等多种场景 | 易实现、效果好;在学术及工业上均较常用 |
SAC | Off-policy,熵正则化,鼓励探索 | 连续动作、高维控制 | 收敛稳定,探索充分;在许多基准任务中效果出色 |
通过上表,我们可以看到离散动作环境通常用 DQN 系列(或 Policy Gradient 的离散版),而连续动作环境往往使用 DDPG/TD3/PPO/SAC 等。具体选择哪种算法,一般需要根据环境特征、数据采集方式(on-policy 或 off-policy)、以及对稳定性和采样效率的要求做综合考量。
总结
- DQN 系列:适用于离散动作。DQN 引入 Experience Replay、Target Network,后续演化出 Double DQN、Dueling DQN、优先级回放、Rainbow 等。
- Policy Gradient 系列:适用于离散或连续动作,直接对策略进行参数化:
- 基本策略梯度(REINFORCE)概念最简单,但方差大;
- Actor-Critic 引入价值函数基线,降低方差,衍生出 A2C/A3C 等多线程并行方式。
- 高级算法:
- DDPG、TD3:典型的 off-policy Actor-Critic,用于连续动作;
- PPO:on-policy 策略梯度,带剪切损失,稳定性好;
- SAC:off-policy,双 Critic + 熵正则,探索充分、表现稳定。
掌握了深度强化学习主流算法的基本原理、核心公式和核心实现细节,并能够在常见基准环境(如 OpenAI Gym、Atari、MuJoCo 等)上独立训练和测试这些算法。这为后续在多智能体强化学习、人机协作指挥决策等更复杂场景的扩展奠定了坚实基础。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
二、智能体强化学习——深度强化学习核心算法
2.1 DQN 系列及其改进 2.1.1 背景与动机 在经典强化学习中(如 Q-Learning),如果状态空间或动作空间非常大乃至连续,那么用一个表格来存储 Q ( s , a ) Q(s,a) Q(s,a) 不再可行。为了解决该问题,可以使用神经网络来逼…...
![](https://i-blog.csdnimg.cn/direct/44c84390c1744aa3b95b6ed0d021c006.png)
Mysql--架构篇--存储引擎InnoDB(内存结构,磁盘结构,存储结构,日志管理,锁机制,事务并发控制等)
MySQL是一个多存储引擎的数据库管理系统,支持多种不同的存储引擎。每种存储引擎都有其独特的特性、优势和适用场景。选择合适的存储引擎对于优化数据库性能、确保数据完整性和满足业务需求至关重要。 注:在同一个Mysql的数据库中,对于不同的表…...
![](https://i-blog.csdnimg.cn/img_convert/504053a30e8a27dd5078e3eae616a45e.png)
JVM实战—13.OOM的生产案例
大纲 1.每秒仅上百请求的系统为何会OOM(RPC超时时间设置过长导致QPS翻几倍) 2.Jetty服务器的NIO机制如何导致堆外内存溢出(S区太小 禁NIO的显式GC) 3.一次微服务架构下的RPC调用引发的OOM故障排查实践(MAT案例) 4.一次没有WHERE条件的SQL语句引发的OOM问题排查实践(使用MA…...
![](https://i-blog.csdnimg.cn/direct/8e8c6c852e3a48b4ac6086f2c9a36144.png)
client-go 的 QPS 和 Burst 限速
1. 什么是 QPS 和 Burst ? 在 kubernetes client-go 中,QPS 和 Burst 是用于控制客户端与 Kubernetes API 交互速率的两个关键参数: QPS (Queries Per Second) 定义:表示每秒允许发送的请求数量,即限速器的平滑速率…...
![](https://i-blog.csdnimg.cn/direct/e808d5d798de4ac19437a4f894d7a96d.png)
使用docker-compose安装Redis的主从+哨兵模式
必看 本文是一主二从一哨兵模式;其余的单机/集群/多哨兵模式的话,不在本文... 本文的环境主要是:应用app在本地,redis在云服务器上; 图解 图如下:这个图很重要; 之所以要这样画图࿰…...
![](https://i-blog.csdnimg.cn/direct/fbb7813158ef4899b8c44b63e491d61e.png)
数据结构(Java版)第七期:LinkedList与链表(二)
专栏:数据结构(Java版) 个人主页:手握风云 一、链表的实现(补) 接上一期,下面我们要实现删除所有值为key的元素,这时候有的老铁就会想用我们上一期中讲到的remove方法,循环使用remove方法&#…...
![](https://www.ngui.cc/images/no-images.jpg)
ant-design-vue 1.X 通过id获取a-input组件失败
1.ant-design-vue 1.X 问题描述 当我在a-form组件中,以v-decorator指令绑定表单组件时,无法根据我设置的verify-code-input获取元素 <a-input type"text" id"verify-code-input" class"paIpt":placeholder"$t(…...
![](https://i-blog.csdnimg.cn/direct/fce7135fb8e14cad9dc452cee98290a0.png)
Flutter:吸顶效果
在分页中,实现tab吸顶。 TDNavBar的screenAdaptation: true, 开启屏幕适配。 该属性已自动对不同手机状态栏高度进行适配。我们只需关注如何实现吸顶。 view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import p…...
![](https://www.ngui.cc/images/no-images.jpg)
MATLAB语言的数据类型
MATLAB语言的数据类型详解 MATLAB(矩阵实验室)是一种广泛应用于科学计算、数据分析、算法开发及模型构建的高性能语言和环境。MATLAB的强大之处不仅在于其丰富的数学工具和可视化功能,还有其灵活多变的数据类型。这篇文章将详细介绍MATLAB中…...
![](https://i-blog.csdnimg.cn/direct/68cef76629564b44b3f54a37210d4ea5.png)
priority_queue优先队列
目录 1. 最短路径算法(Dijkstra算法) 应用场景: 优先队列的作用: 2. 最小生成树算法(Prim算法) 应用场景: 优先队列的作用: 3. 哈夫曼编码(Huffman Coding&#x…...
![](https://www.ngui.cc/images/no-images.jpg)
HarmonyOS 鸿蒙Next 预览pdf文件
HarmonyOS 鸿蒙Next 预览pdf文件 1、使用filePreview 2、使用web组件 在线pdf(网址是直接下载的,不是直接可以预览的),先下载再预览 import media from ohos.multimedia.media;import web_webview from ohos.web.webview;import …...
![](https://i-blog.csdnimg.cn/direct/e21424c34e8e47fda2bd51aa5b50b98d.png)
vscode开启调试模式,结合Delve调试器调试golang项目详细步骤
1.前期准备 (1).在vs code中的扩展程序中搜索并安装Go扩展程序 (2).安装 Delve 调试器 go install github.com/go-delve/delve/cmd/dlvlatest (3).打开vs code的命令面板,输入Go: Install/Update Tools,并单击该命令执行,安装或更新Go语…...
![](https://i-blog.csdnimg.cn/img_convert/925b175c9495a75a1e70d3573e7b508d.png)
身份鉴权(PHP)(小迪网络安全笔记~
免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!!! 附:完整笔记目录~ ps:本人小白,笔记均在个人理解基础上整理,…...
![](https://i-blog.csdnimg.cn/direct/ff49e46d21594a02a21cceaca4fb9c4c.png)
【git】-初始git
一、什么是版本控制? 二、Git的安装 三、掌握Linux常用命令 四、Git基本操作 1、提交代码 2、查看历史提交 3、版本回退 一、什么是版本控制? 版本控制是一种用于记录文件或项目内容变化的系统。它通过版本标识和版本历史记录来管理不同版本&#…...
![](https://i-blog.csdnimg.cn/img_convert/7565617949d54753eaf80a47867995b4.png)
CSS 盒模型
盒模型 CSS盒模型是网页布局的核心概念之一,它描述了网页元素的物理结构和元素内容与周围元素之间的关系。根据W3C规范,每个HTML元素都被视为一个矩形盒子,这个盒子由以下四个部分组成: 内容区(Content areaÿ…...
![](https://i-blog.csdnimg.cn/blog_migrate/80136148c4194ffac36afd146a82e7a1.png)
[0405].第05节:搭建Redis主从架构
Redis学习大纲 一、3主3从的集群配置: 1.1.集群规划 1.分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下: 2.每组是一主一从&#x…...
![](https://i-blog.csdnimg.cn/direct/c45ea20fc1a04089927927c983f4f843.png)
6 分布式限流框架
限流的作用 在API对外互联网开放的情况下,是无法控制调用方的行为的。当遇到请求激增或者黑客攻击的情况下,会导致接口占用大量的服务器资源,使得接口响应效率的降低或者超时,更或者导致服务器宕机。 限流是指对应用服务进行限制…...
![](https://i-blog.csdnimg.cn/direct/393e7572536740c78fbcc4dc0f524ac2.png)
sosadmin相关命令
sosadmin命令 以下是本人翻译的官方文档,如有不对,还请指出,引用请标明出处。 原本有个对应表可以跳转的,但是CSDN的这个[](#)跳转好像不太一样,必须得用html标签,就懒得改了。 sosadmin help 用法 sosadm…...
![](https://i-blog.csdnimg.cn/direct/f4a7ae796e6e4f4f9f731b30b8fed96f.png)
关于大数据的基础知识(四)——大数据的意义与趋势
成长路上不孤单😊😊😊😊😊😊 【14后😊///计算机爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于大数据的基础知识(四&a…...
![](https://i-blog.csdnimg.cn/direct/db0b39702c0740089717072d13644716.png)
【EI,Scopus检索 | 往届均已检索见刊】第四届智能系统、通信与计算机网络国际学术会议(ISCCN 2025)
重要信息: 大会官网:更多详情【论文投稿】 截稿时间:以官网信息为准 大会时间:2025年2月21-23日 接受/拒稿通知:投稿后3-5个工作日内 收录检索:EI,Scopus 出版信息: 本会议所有…...
![](https://www.ngui.cc/images/no-images.jpg)
smplx blender插件笔记
目录 liunx安装: liunx安装: pip install smplx 这个创建模型报错 SMPL_blender_addon...
![](https://i-blog.csdnimg.cn/direct/2a4dacb754a74d40bb0658f225877fe7.png#pic_center)
【算法】移除元素
今天讲的是力扣题目的题解: 力扣题目: 72.移除元素 题目描述: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不…...
![](https://www.ngui.cc/images/no-images.jpg)
【后端面试总结】设计一个分布式锁需要考虑哪些东西
分布式锁是我们在分布式场景中经常用到的一种技术,在后端面试中也是出镜率很高,那么我们设计分布式锁的时候应该从那几方面去考虑呢 实现分布式锁需要考虑的点 设置超时时间 设置超时时间的目的是为了避免这个场景:进程A拿了锁,…...
![](https://www.ngui.cc/images/no-images.jpg)
awr报告无法生成:常见案例与解决办法
awr报告无法生成:常见案例与解决办法 STATISTICS_LEVEL设置过低数据库打开状态不对主库隐含参数设置错误MMON子进程被SuspendSYS模式统计信息过期WRH$_SQL_PLAN表数据量太大AWR绑定变量信息收集超时撞上数据库Bug 9040676STATISTICS_LEVEL设置过低 STATISTICS_LEVEL设置为BAS…...
![](https://www.ngui.cc/images/no-images.jpg)
Hadoop 生态之 kerberos
参考链接 https://winway.github.io/2022/04/02/kerberos-ranger/ https://ieevee.com/tech/2016/06/22/ranger-2.html kerberos解决”who are you“的问题 ranger解决”what you can do“的问题 LDAP 轻型目录访问协议(英文:Lightweight Director…...
![](https://www.ngui.cc/images/no-images.jpg)
【文件I/O】文件持久化
这篇文章详细讲解的是 理解在Linux操作系统中输入/输出(I/O)编程与文件操作的关系。 在计算机编程中,输入/输出编程(I/O 编程) 是一个重要的概念,指的是通过程序与外部世界(如用户输入、文件、…...
![](https://i-blog.csdnimg.cn/direct/d11547e6ff0946ad9b7d2b891a28d06a.png)
USB学习——基本概念
文章目录 USB(Universal Serial Bus)概述USB系统的描述USB总线传输方式USB的拓扑结构 USB的连接模型USB控制器及分类USB描述符USB 端点USB枚举过程USB 四种传输类型USB 事务批量传输(Bulk)中断传输(Interrupt)等时传输(Isochronous)控制传输(Control)端点…...
![](https://i-blog.csdnimg.cn/direct/06a111f36a0d4a8a85d9df2b1ca3860e.png)
python-leetcode-三数之和
15. 三数之和 - 力扣(LeetCode) class Solution:def threeSum(self, nums: List[int]) -> List[List[int]]:nums.sort() # 排序n len(nums)res []for i in range(n):# 剪枝:如果当前数 > 0,三数之和不可能为 0if nums[i]…...
![](https://www.ngui.cc/images/no-images.jpg)
springboot整合拦截器
1.首先创建拦截器类: package com.example.interceptor;import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import org.sp…...
![](https://i-blog.csdnimg.cn/direct/094bec39f44d4f7e898d29aff13fd3ec.png)
B树与B+树:数据库索引的秘密武器
想象一下,你正在构建一个超级大的图书馆,里面摆满了各种各样的书籍。B树和B树就像是两种不同的图书分类和摆放方式,它们都能帮助你快速找到想要的书籍,但各有特点。 B树就像是一个传统的图书馆摆放方式: 1. 书籍摆放&…...
![](https://img-blog.csdnimg.cn/img_convert/539a7f06e825e4554883e010b0c313f7.png)
wordpress 农场模板/搜索引擎竞价推广的优势
网络作文教学设计作为一无名无私奉献的教育工作者,编写教学设计是必不可少的,教学设计一般包括教学目标、教学重难点、教学方法、教学步骤与时间分配等环节。优秀的教学设计都具备一些什么特点呢?下面是小编收集整理的网络作文教学设计&#…...
![](/images/no-images.jpg)
做网站前端和平面配合/班级优化大师下载安装
一、什么是linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的操作系统。伴随着互联网的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在服务器操作系统方面保持着强劲的发展势头以外,…...
![](http://img1.douban.com/view/note/large/public/p215564637-1.jpg)
seo案例网站建设哪家好/网推接单平台
嵌入式Linux基础教程(第2版)基本信息原书名:Embedded Linux Primer:A Practical Real-World Approach, Second Edition 原出版社: Pearson Education 作者: (美)Christopher Hallinan [作译者介绍] 译者: 周鹏 丛书名:…...
![](/images/no-images.jpg)
最专业的网站建设组织/搜索引擎优化seo多少钱
initWithFrame: 通过代码创建UI控件的时候就会调用; initWithCoder:从文件中解析一个对象的时候就会调用这个方法,也就是说无论是通过代码还是xib,程序运行的时候都会调用这个方法; awakeFromNibÿ…...
![](https://pic.cnblogs.com/face/sample_face.gif)
深圳网站公司招聘信息/全国免费信息发布平台
https://www.cnblogs.com/lantingji/p/5853790.html 1、新建一个ATL Project。 2、建议将 Project Property 中 Linker – General - “Register Output” 设为 no,C/C - “Code Generation” - “Runtime Library” 设为 /MTd。 3、在 Solution Explorer 中右键 A…...
![](/images/no-images.jpg)
标签 wordpress/长春网站建设
摘要: C实现求解给定文本中以指定字符开头和结尾的子串数量的三种算法 难度: 初级。 一、 问题描述: 求解给定文本text 中以字符 A 开头, 字符B 结尾的子串数量。例如,文本ABCAAB 中以A开头B结尾的子串分别为…...