当前位置: 首页 > news >正文

【大模型(LLM)面试全解】深度解析 Layer Normalization 的原理、变体及实际应用

系列文章目录

大模型(LLMs)基础面
01-大模型(LLM)面试全解:主流架构、训练目标、涌现能力全面解析
02-【大模型(LLM)面试全解】深度解析 Layer Normalization 的原理、变体及实际应用

大模型(LLMs)进阶面


文章目录

  • 系列文章目录
  • 前言
  • 一、Layer Norm 篇
    • 1.1 Layer Norm 的核心计算公式
      • 1.1.1 均值与方差的计算
      • 1.1.2 归一化与缩放操作
    • 1.2 Layer Norm 的实现代码
      • 1.2.1 代码解析
    • 1.3 Layer Norm 的优缺点与适用场景
      • 1.3.1 优点
      • 1.3.2 缺点
  • 二、RMS Norm 篇
    • 2.1 RMS Norm 的计算公式
      • 2.1.1 均方根值的计算
      • 2.1.2 输出的归一化公式
    • 2.2 RMS Norm 相比 Layer Norm 的特点
      • 2.2.1 优点
      • 2.2.2 使用场景
  • 三、Deep Norm 篇
    • 3.1 Deep Norm 的设计思路
      • 3.1.1 数学公式
    • 3.2 Deep Norm 的代码实现
      • 3.2.1 优点
  • 四、Layer Normalization 在 LLMs 中的位置
    • 4.1 Layer Normalization 的三种位置
      • 4.1.1 Post-LN(残差连接之后)
      • 4.1.2 Pre-LN(残差连接之前)
      • 4.1.3 Sandwich-LN(夹心式 Layer Norm)
    • 4.2 各方法的对比与选择
  • 五、Layer Normalization 在不同 LLM 模型中的应用
    • 5.1 LLaMA 模型
    • 5.2 Qwen2.5 模型
    • 5.3 DeepSeekV3 模型
  • 六、总结


前言

在深度学习领域,归一化技术已经成为模型训练中必不可少的一部分,而 Layer Normalization(简称 Layer Norm)作为一种经典的归一化方法,在 Transformer、语言模型(如 GPT、BERT)以及图像模型等领域得到了广泛应用。与 Batch Normalization 不同,Layer Norm 针对每个样本的特征维度进行归一化,因此在小批量甚至单样本输入场景下表现尤为出色。

然而,Layer Norm 的引入也伴随着一系列问题,如计算效率、模型深度对训练稳定性的影响等。因此,针对 Layer Norm 的改进方法(如 RMS Norm 和 Deep Norm)也不断被提出,为更复杂的模型训练提供支持。

本文内容将深入分析 Layer Norm 的计算原理,结合公式和实现讲解其核心思想,为读者解答在面试中可能遇到的相关问题。


一、Layer Norm 篇

Layer Normalization 的本质是对每一层的特征维度进行归一化处理,旨在消除特征值之间的量级差异,从而使模型更容易训练。以下是 Layer Norm 的核心内容:

1.1 Layer Norm 的核心计算公式

Layer Norm 的实现基于对输入特征的均值和方差归一化,公式如下:

1.1.1 均值与方差的计算

μ = 1 H ∑ i = 1 H x i \mu = \frac{1}{H} \sum_{i=1}^{H} x_i μ=H1i=1Hxi

σ = 1 H ∑ i = 1 H ( x i − μ ) 2 + ϵ \sigma = \sqrt{\frac{1}{H} \sum_{i=1}^{H} (x_i - \mu)^2 + \epsilon} σ=H1i=1H(xiμ)2+ϵ

  • μ \mu μ:表示输入特征 x x x 的均值,计算的是单个样本在特征维度上的均值。
  • σ \sigma σ:表示输入特征的标准差,加入 ϵ \epsilon ϵ 是为了防止分母为零导致的数值不稳定。
  • H H H:表示特征的维度数量。

Layer Norm 的归一化操作针对单个样本,因此它不会受到 mini-batch 大小的影响,尤其适合于序列模型(如语言模型)中逐元素处理的场景。

1.1.2 归一化与缩放操作

在计算出均值和方差后,归一化公式如下:

y = x − μ σ 2 + ϵ ⋅ γ + β y = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} \cdot \gamma + \beta y=σ2+ϵ xμγ+β

其中:

  • γ \gamma γ β \beta β 是可训练的参数,分别用于重新缩放和偏移归一化后的特征。
  • 输出结果 y y y:特征值被归一化到零均值和单位方差后,通过 γ \gamma γ β \beta β 灵活调整,增强模型的表达能力。

1.2 Layer Norm 的实现代码

下面是一段简化的 PyTorch 实现代码,展示 Layer Norm 的核心逻辑:

import torch
import torch.nn as nnclass LayerNorm(nn.Module):def __init__(self, hidden_dim, eps=1e-6):super(LayerNorm, self).__init__()self.gamma = nn.Parameter(torch.ones(hidden_dim))  # 缩放参数self.beta = nn.Parameter(torch.zeros(hidden_dim))  # 偏移参数self.eps = eps  # 防止分母为零def forward(self, x):mean = x.mean(dim=-1, keepdim=True)  # 计算均值variance = x.var(dim=-1, keepdim=True, unbiased=False)  # 计算方差norm_x = (x - mean) / torch.sqrt(variance + self.eps)  # 归一化return norm_x * self.gamma + self.beta  # 缩放和平移

1.2.1 代码解析

  • 均值和方差的计算meanvar 分别计算输入张量的均值和方差,dim=-1 表示对最后一个维度(特征维度)操作。
  • 归一化操作:通过 ( x − μ ) / σ 2 + ϵ (x - \mu)/\sqrt{\sigma^2 + \epsilon} (xμ)/σ2+ϵ 公式对输入特征进行标准化。
  • 可训练参数 γ \gamma γ β \beta β:初始化为 1 和 0,后续通过反向传播自动更新。

1.3 Layer Norm 的优缺点与适用场景

1.3.1 优点

  1. 适用于小批量或单样本场景:Layer Norm 只对单样本的特征维度归一化,适合序列模型(如语言模型)和小批量训练场景。
  2. 消除内部协变量偏移:在特征归一化后,模型的训练过程更加稳定。

1.3.2 缺点

  1. 计算成本较高:Layer Norm 每次计算均值和方差,对高维特征的模型而言,开销较大。
  2. 在深度模型中可能引入梯度问题:深度模型中,Layer Norm 的位置选择对梯度流动有较大影响(详见后续章节中的 Pre-LN 和 Post-LN 讨论)。

二、RMS Norm 篇

RMS Norm 是 Layer Norm 的一种变体,它去除了对均值的计算,只保留对方差的归一化,计算更高效,同时在某些场景下效果接近甚至优于 Layer Norm。

2.1 RMS Norm 的计算公式

2.1.1 均方根值的计算

R M S ( x ) = 1 H ∑ i = 1 H x i 2 RMS(x) = \sqrt{\frac{1}{H} \sum_{i=1}^{H} x_i^2} RMS(x)=H1i=1Hxi2

2.1.2 输出的归一化公式

y = x R M S ( x ) ⋅ γ y = \frac{x}{RMS(x)} \cdot \gamma y=RMS(x)xγ

  • 省略了对均值的计算,减少了计算开销。
  • 归一化结果直接基于均方根值 R M S ( x ) RMS(x) RMS(x)

2.2 RMS Norm 相比 Layer Norm 的特点

2.2.1 优点

  • 计算效率更高:去除了均值计算,减少了计算复杂度。
  • 效果相近甚至略有提升:在某些深度模型中,RMS Norm 的表现接近甚至优于 Layer Norm。

2.2.2 使用场景

适合模型训练对效率要求较高但对效果要求不苛刻的场景,如大规模模型或对延迟敏感的应用。


三、Deep Norm 篇

Deep Norm 是一种针对深度模型训练的优化归一化方法,通过调整残差连接和参数初始化,解决了深度模型训练中梯度爆炸或消失的问题。

3.1 Deep Norm 的设计思路

Deep Norm 的核心思路:

  1. 放大残差连接(up-scale):对残差连接中的输入乘以一个大于 1 的缩放因子 α \alpha α
  2. 缩小参数初始化(down-scale):对某些权重参数初始化时乘以一个小于 1 的缩放因子 β \beta β

3.1.1 数学公式

  • 对残差连接: x r e s = α ⋅ x + f ( x ) x_{res} = \alpha \cdot x + f(x) xres=αx+f(x)
  • 参数初始化: w i n i t ∝ β w_{init} \propto \beta winitβ

这种设计可以有效缓解梯度爆炸或消失的问题,使模型更新限制在常数范围内。

3.2 Deep Norm 的代码实现

以下是一个简单的 Deep Norm 实现:

def deepnorm(x, f, alpha=1.1):return LayerNorm(x * alpha + f(x))def deepnorm_init(w, beta=0.9):if w in ['ffn', 'v_proj', 'out_proj']:nn.init.xavier_normal_(w, gain=beta)elif w in ['q_proj', 'k_proj']:nn.init.xavier_normal_(w, gain=1)

3.2.1 优点

  • 训练更稳定:通过调整缩放因子 α \alpha α β \beta β,有效避免梯度爆炸。
  • 支持更深层模型:提升深度模型的训练效果,支持构建更深的网络结构。

结合您提供的图表内容,以下是重新撰写的“# 四、Layer Normalization 在 LLMs 中的位置”的内容:


四、Layer Normalization 在 LLMs 中的位置

在大语言模型(LLMs)中,Layer Normalization 的位置对模型训练的稳定性和效果有显著影响。不同的 Layer Normalization 位置策略会对模型的梯度流动、训练稳定性和性能带来不同的结果。以下结合图中对 Post-LNPre-LNSandwich-LN 的架构展示,详细说明三种常见的 Layer Normalization 使用方式及其优劣势。

4.1 Layer Normalization 的三种位置

在这里插入图片描述

4.1.1 Post-LN(残差连接之后)

  • 位置描述:Post-LN 将 Layer Norm 放置于残差连接的后方,即对加权和计算完成后进行归一化处理。

  • 实现流程

    1. 执行 Self-Attention 模块;
    2. 通过残差连接相加;
    3. 应用 Layer Norm;
    4. 重复对 FFN 模块处理。

    如图中左侧架构所示: x l + A t t e n t i o n → L a y e r N o r m x_l + Attention \rightarrow LayerNorm xl+AttentionLayerNorm

  • 优点

    • 在浅层模型中,Post-LN 通常可以获得较好的训练效果,因其更符合残差连接的传统设计逻辑。
  • 缺点

    • 对于深层模型,梯度范数可能会随深度增加而逐渐变大,容易导致训练不稳定。

4.1.2 Pre-LN(残差连接之前)

  • 位置描述:Pre-LN 将 Layer Norm 放置于残差连接之前,即在每个子层(Attention 或 FFN)输入之前进行归一化。

  • 实现流程

    1. 在 Self-Attention 模块输入前应用 Layer Norm;
    2. 执行 Self-Attention 计算;
    3. 残差连接后得到输出。

    如图中中间架构所示: L a y e r N o r m ( x l ) + A t t e n t i o n LayerNorm(x_l) + Attention LayerNorm(xl)+Attention

  • 优点

    • 梯度范数在深层模型中保持相对稳定,因此训练更加容易收敛;
    • 在大规模深层模型(如 Transformer 架构)中非常常用,适合现代 LLMs。
  • 缺点

    • 在浅层模型中或某些特定任务下,性能可能略逊于 Post-LN。

4.1.3 Sandwich-LN(夹心式 Layer Norm)

  • 位置描述:Sandwich-LN 在 Pre-LN 的基础上进一步改进,通过在每个子层的输入和输出两端均加入 Layer Norm,形成“夹心”式结构。

  • 实现流程

    1. 在 Self-Attention 模块输入之前应用 Layer Norm;
    2. 执行 Self-Attention 计算;
    3. 输出前再次应用 Layer Norm;
    4. 残差连接后得出结果。

    如图中右侧架构所示: L a y e r N o r m ( x l ) + A t t e n t i o n → L a y e r N o r m LayerNorm(x_l) + Attention \rightarrow LayerNorm LayerNorm(xl)+AttentionLayerNorm

  • 优点

    • 减少值爆炸问题:Sandwich-LN 在部分任务(如 CogView)中表现出色,能够避免深层模型中因梯度累积导致的爆炸问题;
    • 提升梯度流动稳定性,适合更深层模型。
  • 缺点

    • 计算成本更高:额外增加的 Layer Norm 操作带来了更高的计算开销;
    • 在部分情况下,可能因过多归一化操作导致训练崩溃。

4.2 各方法的对比与选择

以下为三种 Layer Normalization 策略的对比:

策略优点缺点适用场景
Post-LN浅层模型性能较好;残差逻辑直观深层模型中梯度可能爆炸浅层模型或无需深度优化场景
Pre-LN深层模型梯度稳定,训练更易收敛浅层模型可能性能稍差主流深度 Transformer 模型
Sandwich-LN梯度稳定,深层模型性能优异计算开销高,可能引发训练不稳定需要更高稳定性的深层模型架构

五、Layer Normalization 在不同 LLM 模型中的应用

在实际的大型语言模型(LLM)中,Layer Normalization 的位置和变体设计会显著影响模型的性能与稳定性。

5.1 LLaMA 模型

  • LLaMA v1:采用了 Pre-LN(Layer Normalization 在每个 Transformer 子层的前置位置)。
  • LLaMA v2:在部分模块中引入了 Sandwich-LN(即在多层模块之间对激活进行多次归一化处理),进一步优化模型训练效果。

5.2 Qwen2.5 模型

Qwen2.5 模型结合了 RMSNorm(Root Mean Square Layer Normalization)和 Pre-LN 的策略。具体特点如下:

  • RMSNorm 的作用:省略了对均值的计算,仅对输入进行均方根归一化,简化了计算过程,同时降低了计算开销。
  • 优点:这种设计在不损失模型性能的前提下,显著提高了训练的稳定性。

5.3 DeepSeekV3 模型

DeepSeekV3 模型在架构中选择了经典的 Pre-LN 策略:

  • 设计优势:Pre-LN 能有效缓解深层网络中梯度消失或梯度爆炸的问题。
  • 实际效果:这一选择显著提升了模型的训练效率,适用于深度更高的 Transformer 架构。

六、总结

在深度学习领域,Layer Normalization(Layer Norm)作为一种核心的归一化技术,为语言模型(LLM)等深度学习模型的训练稳定性和性能优化提供了强有力的支持。随着模型复杂度和深度的不断提高,不同的 Layer Normalization 变体和位置选择策略被广泛应用于实际模型中,以应对训练过程中可能出现的梯度爆炸、梯度消失和计算效率问题。

通过本文的分析,可以总结以下几点关键内容:

  1. Layer Normalization 的核心特性

    • Layer Norm 针对单样本的特征维度进行归一化,适合序列模型和小批量数据场景。
    • 其主要优势在于增强模型训练的稳定性,但高计算成本可能成为限制。
  2. 变体方法的创新与应用

    • RMSNorm:通过省略均值计算,降低了计算复杂度,适合需要高效训练的场景。
    • Deep Norm:通过调整残差连接和参数初始化,专为深层模型设计,解决了梯度问题。
  3. Layer Normalization 在 LLMs 中的位置选择

    • Pre-LN:在深层网络中表现优异,成为主流选择。
    • Post-LN:适用于浅层模型,直观易用。
    • Sandwich-LN:为深度模型提供更高的稳定性,但计算成本更高。
  4. 实际应用中的案例分析

    • 从 LLaMA 到 Qwen2.5,再到 DeepSeekV3,每种模型对 Layer Norm 的应用都经过了针对性的优化设计,以平衡性能和稳定性。

相关文章:

【大模型(LLM)面试全解】深度解析 Layer Normalization 的原理、变体及实际应用

系列文章目录 大模型(LLMs)基础面 01-大模型(LLM)面试全解:主流架构、训练目标、涌现能力全面解析 02-【大模型(LLM)面试全解】深度解析 Layer Normalization 的原理、变体及实际应用 大模型&…...

《浮岛风云》V1.0中文学习版

《浮岛风云》中文版https://pan.xunlei.com/s/VODadt0vSGdbrVOBEsW9Xx8iA1?pwdy7c3# 一款有着类似暗黑破坏神的战斗系统、类似最终幻想的奇幻世界和100%可破坏体素环境的动作冒险RPG。...

学习threejs,导入babylon格式的模型

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.BabylonLoader babyl…...

Django 社团管理系统的设计与实现

标题:Django 社团管理系统的设计与实现 内容:1.摘要 本文介绍了 Django 社团管理系统的设计与实现。通过分析社团管理的需求,设计了系统的架构和功能模块,并使用 Django 框架进行了实现。系统包括社团信息管理、成员管理、活动管理、财务管理等功能&…...

2025 GitCode 开发者冬日嘉年华:AI 与开源的深度交融之旅

在科技的浪潮中,AI 技术与开源探索的火花不断碰撞,催生出无限可能。2025 年 1 月 4 日,由 GitCode 联合 CSDN COC 城市开发者社区精心打造的开年首场开发者活动:冬日嘉年华在北京中关村 • 鼎好 DH3-A 座 22 层盛大举行&#xff0…...

嵌入式系统 tensorflow

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 探索嵌入式系统中的 TensorFlow:机遇与挑战一、TensorFlow 适配嵌入式的优势二、面临的硬件瓶颈三、软件优化策略四、实…...

Web无障碍

文章目录 🟢Web Accessibility-Web无障碍🟢一、Web Accessibility-Web1. web无障碍设计2. demo3.使用相关相关开源无障碍工具条(调用可能会根据网络有点慢) 如有其他更好方案,可以私信我哦✒️总结 🟢Web Accessibility-Web无障碍…...

Qt使用MySQL数据库(Win)----2.配置MySQL驱动

使用Everything软件,找到mysql.pro文件。并使用qt creator打开mysql.pro。 导入外部库 选择外部库 点击下一步,勾选。 为debug版本添加‘d’作为后缀取消勾选,然后点击下一步 添加后的Pro文件。 这样文件应该是改好了,选择releas…...

记录一下vue2项目优化,虚拟列表vue-virtual-scroll-list处理10万条数据

文章目录 封装BrandPickerVirtual.vue组件页面使用组件属性 select下拉接口一次性返回10万条数据,页面卡死,如何优化??这里使用 分页 虚拟列表(vue-virtual-scroll-list),去模拟一个下拉的内容…...

java 中 main 方法使用 KafkaConsumer 拉取 kafka 消息如何禁止输出 debug 日志

pom 依赖&#xff1a; <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.5.14.RELEASE</version> </dependency> 或者 <dependency><groupId>org.ap…...

前端性能优化全攻略:加速网页加载,提升用户体验

前端性能优化全攻略&#xff1a;加速网页加载&#xff0c;提升用户体验 在当今互联网时代&#xff0c;用户对于网页的加载速度和性能要求越来越高。一个快速响应、流畅加载的网页能够极大地提升用户体验&#xff0c;增加用户留存率和满意度。前端性能优化是实现这一目标的关键…...

关于内网外网,ABC类地址,子网掩码划分

本文的三个关键字是&#xff1a;内网外网&#xff0c;ABC类地址&#xff0c;子网掩码划分。围绕以下问题展开&#xff1a; 如何从ip区分外网、内网&#xff1f;win和linux系统中&#xff0c;如何查询自己的内网ip和外网ip。开发视角看内外网更多是处于安全考虑&#xff0c;接口…...

【C++多线程编程:六种锁】

目录 普通互斥锁&#xff1a; 轻量级锁 独占锁&#xff1a; std::lock_guard&#xff1a; std::unique_lock: 共享锁&#xff1a; 超时的互斥锁 递归锁 普通互斥锁&#xff1a; std::mutex确保任意时刻只有一个线程可以访问共享资源&#xff0c;在多线程中常用于保…...

【LeetCode】力扣刷题热题100道(16-20题)附源码 容器 子数组 数组 连续序列 三数之和(C++)

目录 1.盛最多水的容器 2.和为K的子数组 3.最大子数组和 4.最长连续序列 5.三数之和 1.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴…...

WHAT - devicePixelRatio 与像素分辨率

目录 语法理解 devicePixelRatio常见值应用场景注意事项在高分辨率屏幕下的视觉效果 devicePixelRatio 是一个浏览器属性&#xff0c;用来表示设备的物理像素与 CSS 像素之间的比例。它是屏幕显示清晰度的重要指标&#xff0c;特别是在高分辨率屏幕&#xff08;如 Retina 显示屏…...

【cs.CV】25.1.8 arxiv更新速递

—第1篇---- ===== ConceptMaster: 面向扩散Transformer模型的多概念视频定制,无需测试时调优 🔍 关键词: 文本到视频生成, 扩散模型, 多概念定制, 身份解耦 链接1 摘要: 文本到视频生成通过扩散模型取得了显著进展。然而,多概念视频定制(MCVC)仍然是一个重大挑战。…...

C#使用MVC框架创建WebApi服务接口

第一步,使用VS2019新建MVC-Web API应用程序 创建BridgeApi 第二步,运行将生成默认的示例网页,网页Url为 https://localhost:44361/home/index 右键 项目 添加 WebAPI控制器类 添加 我们可以看到App_Start目录下 有三个文件: BundleConfig.cs代表 捆绑文件的引用 有脚本文件…...

慧集通(DataLinkX)iPaaS集成平台-智能体(Agent)API

功能简介&#xff1a; 该功能下主要是用来管理集成平台对外开放接口得管控以及调用日志信息得查看操作&#xff0c;并支持日志得重放等操作&#xff1b;注&#xff1a;所有触发类单据得日志也可以在此查看(如使用数据触发组件自动触发流程得日志信息) 1.第三方调用接口类日志查…...

BigDecimal:高精度数值运算类

介绍&#xff1a; BigDecimal是一个用于高精度数值运算的类&#xff0c;它比基本的double或float类型更精确&#xff0c;非常适合需要精确计算的场景&#xff0c;如金融计算、科学计算等&#xff0c;因为这些领域对数值精度要求非常高&#xff0c;不能容忍浮点运算带来的误差。…...

11. C 语言 作用域与变量使用技巧

本章目录: 前言一、作用域的分类局部变量示例&#xff1a; 全局变量示例&#xff1a;示例&#xff1a; 形式参数示例&#xff1a; 二、作用域的细节与常见误区块级作用域示例&#xff1a; 静态变量与全局变量的对比示例&#xff1a; 未初始化变量的影响示例&#xff1a; 三、实…...

大模型WebUI:Gradio全解11——Chatbots:融合大模型的多模态聊天机器人(2)

大模型WebUI&#xff1a;Gradio全解11——Chatbots&#xff1a;融合大模型的聊天机器人&#xff08;2&#xff09; 前言本篇摘要11. Chatbot&#xff1a;融合大模型的多模态聊天机器人11.2 使用流行的LLM库和API11.2.1 Llama Index11.2.2 LangChain11.2.3 OpenAI1. 基本用法2. …...

课题推荐——基于GPS的无人机自主着陆系统设计

关于“基于GPS的无人机自主着陆系统设计”的详细展开&#xff0c;包括项目背景、具体内容、实施步骤和创新点。如需帮助&#xff0c;或有导航、定位滤波相关的代码定制需求&#xff0c;请点击文末卡片联系作者 文章目录 项目背景具体内容实施步骤相关例程MATLAB例程python例程 …...

HQChart使用教程30-K线图如何对接第3方数据44-DRAWPIE数据结构

HQChart使用教程30-K线图如何对接第3方数据44-DRAWPIE数据结构 效果图DRAWPIEHQChart代码地址后台数据对接说明示例数据数据结构说明效果图 DRAWPIE DRAWPIE是hqchart插件独有的绘制饼图函数,可以通过麦语法脚本来绘制一个简单的饼图数据。 饼图显示的位置固定在右上角。 下…...

张朝阳惊现CES展,为中国品牌 “代言”的同时,或将布局搜狐新战略!

每年年初&#xff0c;科技圈的目光都会聚焦在美国拉斯维加斯&#xff0c;因为这里将上演一场被誉为 “科技春晚” 的年度大戏 ——CES 国际消费电子展。作为全球规模最大、最具影响力的科技展会之一&#xff0c;CES 吸引了来自 160 多个国家的创新者和行业领导者&#xff0c;是…...

堆排序+选择排序详解

目录 1.选择排序的定义 2.选择排序的优缺点 2.1优点 2.2缺点 3.思考 4.优化后的选择排序的实现 5.选择排序的代码 6.堆排序 7.向上/向下调整算法 8. 向下向上调整代码 9.堆排序代码 1.选择排序的定义 选择排序(SelectSort)&#xff0c;以第一个为开始值&#xff0c…...

【Arthas命令实践】heapdump实现原理

&#x1f3ae; 作者主页&#xff1a;点击 &#x1f381; 完整专栏和代码&#xff1a;点击 &#x1f3e1; 博客主页&#xff1a;点击 文章目录 使用原理 使用 dump java heap, 类似 jmap 命令的 heap dump 功能。 【dump 到指定文件】 heapdump arthas-output/dump.hprof【只 …...

python-leetcode-判断子序列

392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; class Solution:def isSubsequence(self, s: str, t: str) -> bool:i, j 0, 0 # i 指向 s&#xff0c;j 指向 twhile i < len(s) and j < len(t):if s[i] t[j]:i 1j 1return i len(s)...

【Verdi实用技巧-Part2】

Verdi实用技巧-Part2 2 Verdi实用技巧-Part22.1 Dump波形常用的task2.1.1 Frequently Used Dump Tasks2.1.2 Demo 2.2 提取波形信息小工具--FSDB Utilities2.3 Debug in Source code view2.3.1 Find Scopes By Find Scope form 2.3.2 Go to line in Souce code View2.3.3 Use B…...

常用的AT命令,用于查看不同类型的网络信息

文章目录 1. ATCSQ‌&#xff1a;2. ATCREG‌&#xff1a;‌3. ATCOPS‌&#xff1a;4. ATCGATT‌&#xff1a;5. ATCGPADDR‌&#xff1a; 在AT命令集中&#xff0c;用于查看网络信息的命令有多种&#xff0c;具体取决于所使用的设备和模块。以下是一些常用的AT命令&#xff0…...

【应用篇】09.实现简易的Shell命令行解释器

一、shell和bash的关系 shell是命令解释器&#xff0c;它接收用户的命令并将其传递给内核去执行。bash,即GNU Bourne-Again Shell&#xff0c;是shell的一种实现方式&#xff0c;也是大多数linux系统下默认的shell。 bash的原理 大多数的指令进程&#xff08;除了内建命令&…...

负载均衡技术【内网去外网运营商出口负载均衡】

1 负载均衡概述 LB&#xff08;Load Balance&#xff0c;负载均衡&#xff09;是一种集群技术&#xff0c;它将特定的业务&#xff08;网络服务、网络流量等&#xff09;分担给多台网络设备&#xff08;包括服务器、防火墙等&#xff09;或多条链路&#xff0c;从而提高了业务…...

【广西乡镇界】arcgis格式shp数据乡镇名称和编码2020年内容测评

【广西乡镇界】arcgis格式shp数据乡镇名称和编码2020年内容测评...

半导体数据分析: 玩转WM-811K Wafermap 数据集(一) AI 机器学习

在半导体行业&#xff0c;工程师依靠 CP Yield&#xff08;生产过程中芯片的合格率&#xff09;、WAT&#xff08;晶圆验收测试&#xff09;和 Particle 的晶圆图模式来识别工艺问题。然而&#xff0c;在没有人工干预的情况下将这些晶圆图模式分类是一项重大挑战。许多论文都研…...

mongodb安装并设置用户验证登录

下载地址 https://www.mongodb.com/try/download/community-kubernetes-operator 偶数版是稳定版&#xff0c;基数版是开发版 &#xff0c;对32位支持不好 --------------------------------CentOS下安装mongodb--------------------------------------------------- 解压安装包…...

《零基础Go语言算法实战》【题目 1-16】字符串的遍历与比较

《零基础Go语言算法实战》 【题目 1-16】字符串的遍历与比较 给出两个字符串&#xff0c;请编写程序以确定能否将其中一个字符串重新排列后变成另一个字符串&#xff0c; 并规定大小写是不同的字符&#xff0c;空格也作为字符考虑。保证两个字符串的长度小于或等于 5000。 …...

VUE3封装一个Hook

在 Vue 3 中&#xff0c;Composition API 让我们能够封装和复用代码逻辑&#xff0c;尤其是通过 setup 函数进行组件间的复用。为了提高代码的可复用性&#xff0c;我们可以把一些常见的 API 请求和状态管理逻辑封装到一个单独的 hook 中。 以下是一个简单的例子&#xff0c;我…...

【Linux】Linux常见指令(上)

个人主页~ 初识Linux 一、Linux基本命令1、ls指令2、pwd命令3、cd指令4、touch指令5、mkdir指令6、rmdir指令7、rm指令8、man指令9、cp指令10、mv命令 Linux是一个开源的、稳定的、安全的、灵活的操作系统&#xff0c;Linux下的操作都是通过指令来实现的 一、Linux基本命令 先…...

嵌入式 C 语言:一维数组

目录 一、定义 二、内存布局 三、数组的初始化 3.1. 完全初始化 3.2. 部分初始化 3.3. 不指定大小初始化 四、使用数组 4.1. 访问数组元素 4.1.1. 通过索引访问数组元素 4.1.2. 通过指针访问数组元素 4.2. 遍历数组 4.3. 数组作为函数参数 五、应用场景 5.1. 数据…...

NineData云原生智能数据管理平台新功能发布|2024年12月版

本月发布 7 项更新&#xff0c;其中重点发布 2 项、功能优化 5 项。 重点发布 数据库 Devops - Oracle 非表对象支持可视化创建与管理 Oracle 非表对象&#xff0c;包括视图&#xff08;View&#xff09;、包&#xff08;Package&#xff09;、存储过程&#xff08;Procedur…...

iOS - 自旋锁

在 Objective-C 运行时中大量使用自旋锁&#xff0c;主要有以下几个原因&#xff1a; 1. 性能考虑 上下文切换成本 // 自旋锁实现 static ALWAYS_INLINE void OSSpinLockLock(volatile OSSpinLock *lock) {do {while (lock->value ! 0) {__asm__ volatile ("pause&q…...

域名备案页面模板

域名备案模板&#xff0c;首页底下正中央位置需要有备案号。 主要是给不太擅长于前端样式的人提供一个备案模板&#xff0c;直接把这个H5放到nginx的index.html就可以访问了 <html><body><div class"login-container"><h2>登录</h2>&…...

【socketioxide和axum集成-实现websocket实时通信-Rust点滴】

socketioxide的axum集成 启动socketio依靠examle里的layer一. 使用可变State依靠axum里的example二.提取client,IP1. 非代理,tcp,socket对方地址2.代理情况下socket.req_parts. 三. axum的handle中使用emit发送消息.1. io,存入State解决.2.把io存入初始设定作为唯一单例3.http-…...

计算机网络(第8版)第3章--PPP课后习题

【3-09】 一 个PPP 帧的数据部分(用十六进制写出)是7 D 5EFE 277D 5D7D 5D657D 5E。 试问真正的数据是什么(用十六进制写出)? 解答&#xff1a;把由转义符7D开始的2字节序列用下画线标出&#xff1a; 7D 5E FE 27 7D 5D 7D 5D 65 7D 5E 7D 5E应当还原成为7E。 7D5D 应…...

通过Android Studio修改第三方jar包并重新生成jar包

最近接手了来自公司其他同事的一个Unity项目,里面有一个封装的jar包要改动一下,无奈关于这个jar包的原工程文件丢失了,于是自己动手来修改下jar包,并做下记录。 一、导入第三方jar包 1、新建项目EditJarDemo(项目名随便取) 2、新建libs文件夹,把你要修改的third.jar 复制…...

Rabbitmq 业务异常与未手动确认场景及解决方案

消费端消费异常&#xff0c;业务异常 与 未手动确认是不是一个场景&#xff0c;因为执行完业务逻辑&#xff0c;再确认。解决方案就一个&#xff0c;就是重试一定次数&#xff0c;然后加入死信队列。还有就是消费重新放入队列&#xff0c;然后重新投递给其他消费者&#xff0c;…...

3D机器视觉的类型、应用和未来趋势

3D相机正在推动机器视觉市场的增长。很多制造企业开始转向自动化3D料箱拣选&#xff0c;专注于使用3D视觉和人工智能等先进技术来简化操作并减少开支。 预计3D相机将在未来五年内推动全球机器视觉市场&#xff0c;这得益于移动机器人和机器人拣选的强劲增长。到 2028 年&#…...

LabVIEW在反馈控制时如何解决带约束的控制问题

在LabVIEW中&#xff0c;解决带约束的反馈控制问题通常需要使用先进的控制算法或特定的方法来满足约束条件&#xff0c;同时保证控制系统的性能和稳定性。以下是解决这类问题的一些常用方法和步骤&#xff1a; ​ 1. 定义控制问题及约束条件 确定被控对象的动态特性&#xff08…...

PHP 在 2025 年的现状与展望

PHP 在 2025 年依然强劲&#xff0c;继续为超过 77% 使用已知服务器端编程语言的网站提供动力。这并非仅仅依靠遗留代码&#xff0c;像 WordPress、Shopify 和 Laravel 这样的主流平台持续推动 PHP 的发展&#xff0c;使其保持着 актуальность 并不断进化。 为什么…...

QT c++ 自定义按钮类 加载图片 美化按钮

如果你有需要利用图片美化按钮的情况&#xff0c;本文能帮助你。 鼠标左键按下按钮和松开&#xff0c;按钮显示不同的图片。 1.按钮类 //因为此类比较简单&#xff0c;1个头文件搞定&#xff0c;没有cpp文件 #ifndef CUSTOMBUTTON_H #define CUSTOMBUTTON_H #include <Q…...

夯实前端基础之HTML篇

知识点概览 HTML部分 1. DOM和BOM有什么区别&#xff1f; DOM&#xff08;Document Object Model&#xff09; 当网页被加载时&#xff0c;浏览器会创建页面的对象文档模型&#xff0c;HTML DOM 模型被结构化为对象树 用途&#xff1a; 主要用于网页内容的动态修改和交互&…...