大模型知识
##############################################################
一、vllm大模型测试参数和原理
tempreature top_p top_k
##############################################################
tempreature top_p top_k
作用:总体是控制模型的发散程度、多样性、确定性,不同参数设置匹配不同的场景
1. Temperature(温度)
作用:控制生成文本的随机性和多样性。
原理:
在 softmax 计算概率分布时,调整 logits(模型输出的原始分数)的缩放比例。
公式:softmax(logits / temperature)。
影响:
temperature > 1:放大低概率选项,输出更随机、多样(可能包含更多错误或创造性内容)。
temperature < 1:缩小低概率选项,输出更确定、保守(倾向于高概率的常见词)。
temperature = 0:完全确定性,总是选择概率最高的词(但实际实现中通常设为接近 0 的小值)。
适用场景:
需要创造性(如诗歌、故事生成)时提高温度。
需要准确性和一致性(如问答、代码生成)时降低温度。
2. Top-k(顶部 k 采样)
作用:限制每一步只从概率最高的 k 个候选词中采样。
原理:
对概率分布进行排序,保留前 k 个最可能的词,重新归一化它们的概率后采样。
影响:
k 值大:候选词多,输出多样性高(可能包含不相关词)。
k 值小:候选词少,输出更保守(但可能重复或单调)。
k = 1:退化为贪心搜索(等同 temperature=0)。
缺点:
固定 k 可能在某些上下文保留不合理的词(如概率分布平坦时,低概率词也可能进入候选)。
3. Top-p(核采样,Nucleus Sampling)
作用:动态地从累积概率超过 p 的最小候选词集合中采样。
原理:
对概率分布排序,累加概率直到超过阈值 p,仅从这部分词中采样。
例如 p=0.9 时,选择最小数量的词使得它们的总概率 ≥ 90%。
影响:
p 值大(如 0.9):候选词多,多样性高。
p 值小(如 0.3):候选词少,输出更确定。
p → 0:退化为贪心搜索。
优势:
自适应候选词数量,适合概率分布不均匀的场景(避免固定 k 的缺陷)。
4. 参数间的交互
优先级:top_p 和 top_k 通常联合使用(如 top_k=40, top_p=0.9),但若同时设置,top_p 会覆盖 top_k 的条件。
与温度的关系:
temperature 在 top_p/top_k 之前生效,先调整概率分布的形状,再应用采样策略。
例如:高温 + 低 top_p 可能导致更多样但低质量的输出。
5. 典型配置示例
场景 推荐参数 说明
代码生成/事实问答 temperature=0.2, top_p=0.1 确定性高,减少错误
创意文本/对话生成 temperature=0.7, top_p=0.9 平衡多样性和合理性
极端创造性任务 temperature=1.0, top_k=50 高风险高多样性
6. 其他相关参数
Repetition Penalty:抑制重复词(如 repetition_penalty=1.2)。
Beam Search:完全确定性生成时使用(与采样参数互斥)。
##############################################################
二、vllm大模型推理原理
##############################################################
vLLM(Very Large Language Model) 是一个针对大语言模型(LLM)推理优化的高效推理框架,由加州大学伯克利分校团队开发。其核心目标是 提升大模型推理的吞吐量和降低延迟,同时支持灵活的采样策略(如 Top-k、Top-p)和长上下文处理。以下是其核心原理和关键技术的详细解析:
1. 核心设计目标
高吞吐量:支持同时处理大量请求(如数百个并发用户)。
低延迟:快速生成响应,减少用户等待时间。
内存高效:优化显存使用,支持更大的模型或更长的上下文。
灵活性:兼容多种采样参数(Temperature、Top-p、Top-k)和模型架构(如 GPT、LLaMA)。
2. 关键技术原理
(1)PagedAttention(分页注意力机制)
问题背景:
传统注意力机制在处理长序列时,需要将全部 KV Cache(键值缓存)存储在连续显存中,导致显存碎片化和浪费。
例如,不同请求的序列长度差异大时,显存分配效率低。
解决方案:
将 KV Cache 分页管理,类似操作系统的虚拟内存分页:
每个序列的 KV Cache 被划分为固定大小的“块”(如 16 个 token 一块)。
显存按需分配块,不同序列的块可以非连续存储。
优势:
显著减少显存浪费,支持更长的上下文(如 100K tokens)。
提升并发请求的吞吐量(显存利用率更高)。
(2)Continuous Batching(连续批处理)
问题背景:
传统批处理(Static Batching)需等待所有请求完成后才能处理下一批,导致 GPU 空闲。
生成式模型的请求完成时间不一致(如短回答 vs 长文生成)。
解决方案:
动态插入新请求到运行中的批次:
当一个请求生成完一个 token 后,若批次中有空闲槽位,立即插入新请求。
称为 Iteration-level Scheduling(迭代级调度)。
优势:
GPU 利用率接近 100%,吞吐量提升 2-4 倍。
用户感知的延迟更低(无需等待整批完成)。
(3)内存优化
KV Cache 共享:
对于同一提示词(prompt)的多个请求,共享其 KV Cache,减少重复计算。
Zero-copy 技术:
主机(CPU)和设备(GPU)间数据传输优化,减少内存拷贝开销。
(4)高效采样支持
原生支持 Temperature、Top-k、Top-p 等采样策略,无需额外计算开销。
通过并行化采样步骤,减少生成延迟。
3. 推理流程(Step-by-Step)
以生成式推理(如 GPT)为例:
输入处理:
用户输入提示词(prompt),转换为 token 序列。
模型编码 token 并生成初始 KV Cache。
分页存储:
PagedAttention 将 KV Cache 分块存储到显存中。
迭代生成:
每次迭代生成一个 token,动态更新批次(Continuous Batching)。
根据采样参数(如 Top-p)选择下一个 token。
输出返回:
当生成结束符(EOS)或达到最大长度时,返回结果并释放显存。
4. 性能对比
技术指标 vLLM 传统推理框架(如 HF Transformers)
吞吐量 高(支持数百并发) 低(受限于静态批处理)
显存效率 高(PagedAttention 减少浪费) 低(KV Cache 需连续存储)
长上下文支持 支持 100K+ tokens 通常限制在 4K-32K tokens
采样灵活性 原生支持 Top-k/Top-p 需手动实现,可能引入延迟
5. 适用场景
高并发服务:如聊天机器人、API 服务。
长文本生成:如文档摘要、代码生成。
研究实验:快速测试不同采样参数的影响。
6. 代码示例(使用 vLLM)
python
from vllm import LLM, SamplingParams
# 初始化模型和采样参数
llm = LLM(model="meta-llama/Llama-2-7b-chat-hf")
sampling_params = SamplingParams(temperature=0.7, top_p=0.9, max_tokens=100)
# 批量推理
prompts = ["Explain AI in one sentence.", "Write a poem about winter."]
outputs = llm.generate(prompts, sampling_params)
for out in outputs:
print(f"Prompt: {out.prompt}, Generated: {out.outputs[0].text}")
7. 与同类框架对比
框架 核心优势 局限性
vLLM 高吞吐、PagedAttention 主要支持自回归模型(如 GPT)
TGI (HuggingFace) 支持多模态模型 长上下文显存效率较低
DeepSpeed-Inference 分布式推理优化 配置复杂
8. 未来方向
多模态扩展:支持视觉-语言联合推理。
更细粒度调度:优化混合长短请求的场景。
量化集成:结合 4-bit 量化进一步降低显存占用。
总结来说,vLLM 通过 PagedAttention 和 Continuous Batching 两大核心技术,解决了大模型推理中的显存效率和吞吐量瓶颈,成为目前生产环境部署 LLM 的首选框架之一。
##############################################################
二、多卡并行推理的并行方式的基本原理
##############################################################
多卡并行推理的并行方式的基本原理
TP并行 Tensor Parallelism,张量并行
PP并行 流水线并行(Pipeline Parallelism)
EP并行 Expert Parallelism,专家并行
deepseek PD分离
1、1. 数据并行(Data Parallelism)
原理:
将输入数据(批次)拆分到不同GPU,每张卡独立计算完整模型的推理结果,最后同步结果。
每张GPU存储完整的模型副本。
工作流程:
主GPU将批次数据均分到各GPU(如批次大小=16,4卡时每卡分到4条数据)。
各GPU并行计算前向传播。
收集所有GPU的输出结果(如通过 all_gather 操作)。
优势:
实现简单,适合高吞吐场景(如批量处理大量短文本)。
缺点:
每卡需存储完整模型,显存占用高,无法支持超大规模模型。
适用场景:
模型能单卡放下,但需要提高批量推理效率。
2. 模型并行(Model Parallelism)
(1)张量并行(Tensor Parallelism)
原理:
将模型单层的权重矩阵拆分到不同GPU,每张卡只计算部分结果,通过通信拼接完整输出。
例如:线性层
Y
=
X
W
Y=XW 中,将权重矩阵
W
W 按列拆分,每卡计算部分乘积。
关键技术:
Megatron-LM 风格拆分:对矩阵乘法的行或列拆分,配合 all-reduce 通信。
通信开销:每层需同步中间结果(如通过NCCL)。
示例:
在4卡上拆分FFN层的权重矩阵:
python
# 原始权重 W (hidden_dim, 4*hidden_dim)
# 拆分到4卡,每卡存储 W_part (hidden_dim, hidden_dim)
Y = torch.cat([X @ W_part_i for W_part_i in W_parts], dim=-1) # 需要通信
优势:
支持单层参数量超过单卡显存的模型。
缺点:
通信频繁,延迟敏感。
(2)层间并行(Layer-wise Parallelism)
原理:
将模型的不同层分配到不同GPU(如GPU0处理1-10层,GPU1处理11-20层)。
缺点:
设备空闲率高(如GPU0需等待GPU1完成前一层的计算),较少单独使用。
3. 流水线并行(Pipeline Parallelism)
原理:
将模型按层分组,每组层放到不同GPU,数据像流水线一样依次流过各设备。
通过微批次(Micro-batching)隐藏通信延迟。
工作流程:
将输入数据分成多个微批次(如批次=8,微批次=2)。
GPU0处理微批次1的第1组层后,将激活值发送给GPU1,同时开始处理微批次2的第1组层。
各GPU交替计算和通信,形成流水线。
优势:
支持超长模型(如千亿参数模型)。
缺点:
需要平衡各阶段计算负载,否则效率下降(气泡问题)。
优化技术:
梯度累积:多个微批次后再反向传播,减少气泡。
1F1B调度(One-Forward-One-Backward):优化设备利用率。
4. 混合并行策略
实际部署中常组合多种并行方式:
案例1:GPT-3 175B 的推理:
张量并行:每层的矩阵计算拆分到8卡。
流水线并行:将模型按层分组,分配到多组设备(如8组,每组8卡)。
数据并行:对流水线并行的每组设备复制多份(如64卡=8组×8卡)。
案例2:vLLM 的多卡推理:
数据并行:处理不同请求的批次。
张量并行:单个大请求的模型计算拆分。
5. 通信机制
关键操作:
all-reduce:聚合各卡的梯度或输出(数据并行)。
all-gather:拼接拆分后的张量(张量并行)。
point-to-point:流水线并行的层间数据传输。
通信库:
NCCL(NVIDIA):优化多GPU通信,支持高速PCIe/NVLink。
RPC(PyTorch):用于跨节点通信。
6. 显存优化技术
KV Cache 分区:
在张量并行中,将注意力机制的KV Cache拆分到多卡,减少单卡显存压力。
Zero-Inference:
类似Zero-Redundancy Optimizer(ZeRO)的技术,优化显存占用。
#################################################################
三、PD 分离的基本思想
#################################################################
1. PD 分离的基本思想
参数解耦:将模型的参数划分为多个相对独立的子集,每个子集负责不同的功能或任务,避免参数之间的过度耦合。
典型场景:
多任务学习:不同任务共享部分参数(如特征提取层),但保留任务专属参数(如分类头)。
模块化设计:模型的不同模块(如注意力头、专家层)参数独立优化。
动态推理:根据输入动态激活部分参数(如MoE模型中的专家选择)。
2. DeepSeek 中 PD 分离的可能应用
(1)专家模型(MoE)中的参数解耦
背景:DeepSeek 可能采用混合专家(MoE)架构,其中不同专家(Expert)对应不同的参数子集。
PD 分离:
每个专家的参数完全独立,通过门控(Gating)机制动态激活。
例如:输入 token A 由专家1处理,token B 由专家2处理,两者参数无共享。
优势:
显存高效:仅激活部分参数,适合超大规模模型。
专业化:不同专家可学习不同领域的特征。
(2)多阶段训练的参数隔离
预训练 vs 微调解耦:
预训练阶段:冻结核心参数(如底层Transformer层),仅微调特定头部参数。
例如:DeepSeek-R1 模型可能解耦通用知识和领域适配参数。
优势:
避免灾难性遗忘,提升微调效率。
(3)硬件感知的参数分布
显存与计算分离:
高频访问参数(如注意力头的KV Cache)放在高速显存,低频参数(如部分FFN层)放在低速存储。
类似 DeepSpeed-ZeRO 的分级参数管理。
3. PD 分离的技术实现
(1)参数分组与优化器配置
在优化器(如AdamW)中为不同参数组设置独立的学习率或权重衰减:
python
# 示例:PyTorch 中的参数分组
group1 = {'params': model.shared_parameters(), 'lr': 1e-5} # 共享参数
group2 = {'params': model.task_specific_parameters(), 'lr': 1e-4} # 任务专属参数
optimizer = torch.optim.AdamW([group1, group2])
(2)动态参数激活
基于输入选择性地加载部分参数(如MoE的门控机制):
python
def forward(self, x):
gate_scores = self.gating_network(x) # 计算门控分数
expert_idx = torch.argmax(gate_scores, dim=-1) # 选择专家
y = self.experts[expert_idx](x) # 仅激活被选专家的参数
return y
(3)梯度隔离
通过停止梯度(detach)或掩码阻止某些参数的更新:
python
frozen_params = model.embedding.weight
frozen_params.requires_grad = False # 冻结嵌入层参数
4. PD 分离的优势
训练效率:减少冗余计算和显存占用。
模型可解释性:不同参数组对应明确的功能模块。
灵活部署:可单独更新或替换部分参数(如领域适配时仅微调头部)。
5. 与其他技术的对比
技术 PD 分离 传统耦合参数
参数更新粒度 细粒度(分组/模块化) 全局统一更新
显存占用 动态降低(仅激活部分参数) 固定
适用场景 MoE、多任务、大规模模型 小型单一任务模型
6. 潜在挑战
路由偏差:在MoE中,门控机制可能偏向某些专家,导致负载不均衡。
通信开销:分布式训练中,参数解耦可能增加同步复杂度(如All-to-All通信)。
收敛性:需谨慎设计参数组的优化策略,避免训练不稳定。
总结来说,DeepSeek 中的 PD 分离 可能指通过参数解耦实现更高效的模型设计或训练策略,尤其在 MoE 架构或多任务学习中表现突出。具体实现需结合模型架构和任务需求,核心目标是平衡参数共享与专业化,以提升性能和可扩展性。
#################################################################
大模型推理主要过程
比如prefill和decode阶段都做了什么
#################################################################
在大模型(如GPT、LLaMA等)的推理过程中,生成文本通常分为两个核心阶段:Prefill(预填充)阶段 和Decode(解码)阶段。两者的分工和计算模式差异显著,直接影响推理性能和资源占用。以下是它们的详细流程和关键技术:
1. Prefill 阶段(预填充)
作用:
处理输入的提示词(Prompt),生成初始的 KV Cache(键值缓存),为后续解码阶段做准备。
关键步骤:
输入处理:
将用户输入的文本(如 "Explain AI in one sentence.")通过分词器(Tokenizer)转换为 Token ID 序列。
添加特殊Token(如 <BOS>、<EOS>)并截断/填充至固定长度(如有必要)。
计算初始隐藏状态:
Token ID 序列通过模型的 Embedding 层 转换为向量表示(形状:[seq_len, hidden_dim])。
经过所有Transformer层的 前向传播,生成每个Token的隐藏状态。
生成 KV Cache:
在Transformer的 自注意力层 中,计算每个Token的 Key(K) 和 Value(V) 矩阵。
将K、V缓存到显存中(形状:[num_layers, seq_len, num_heads, head_dim]),供后续解码复用。
输出首个Token的概率分布:
对最后一个Token的隐藏状态应用 LM Head(语言模型头),得到词汇表上的概率分布。
根据采样策略(如Top-p、Temperature)选择首个生成的Token(如 "Artificial")。
计算特点:
计算密集型:需要处理整个输入序列(可能很长),所有Token并行计算。
显存占用高:KV Cache的大小与输入序列长度成正比(长Prompt需优化显存管理,如PagedAttention)。
2. Decode 阶段(解码)
作用:
基于Prefill阶段的KV Cache,逐个Token生成输出序列,直到达到停止条件(如最大长度或EOS Token)。
关键步骤:
输入当前Token:
将上一步生成的Token(如 "Artificial")作为新一轮的输入(形状:[1])。
通过Embedding层转换为向量(形状:[1, hidden_dim])。
增量计算:
仅计算 当前Token的隐藏状态(无需重新处理历史Token)。
在注意力层中:
计算当前Token的 新Key/Value,并追加到KV Cache中(序列长度+1)。
使用完整的KV Cache(包括Prefill和之前生成的Token)计算注意力权重。
生成下一个Token:
对当前Token的隐藏状态应用LM Head,得到概率分布。
采样下一个Token(如 "intelligence")。
循环生成:
重复步骤1-3,直到生成停止符或达到 max_tokens。
计算特点:
内存带宽受限:每次迭代仅处理1个Token,计算量小,但需频繁读写KV Cache。
延迟敏感:生成速度直接影响用户体验(通常追求低延迟)。
3. 两阶段对比
特性 Prefill 阶段 Decode 阶段
输入长度 整个Prompt序列(可能很长) 单个Token(逐步增长)
计算模式 全序列并行计算 增量计算(自回归)
主要瓶颈 计算能力(FLOPs) 内存带宽(KV Cache访问)
显存占用 高(存储完整Prompt的KV Cache) 逐步增加(每步+1 Token的Cache)
优化重点 长序列压缩、显存管理 KV Cache读写效率、采样加速
4. 关键技术优化
(1)Prefill 阶段优化
Flash Attention:加速长序列注意力计算,减少显存访问。
PagedAttention(vLLM):将KV Cache分块存储,支持超长Prompt。
Prompt 压缩:移除重复或无效Token(如ChatML模板中的固定指令)。
(2)Decode 阶段优化
KV Cache 复用:共享不同请求的相同Prompt的Cache。
连续批处理(Continuous Batching):动态插入新请求到运行中的批次,提高GPU利用率。
投机解码(Speculative Decoding):用小模型预测多个Token,大模型仅验证。
5. 示例流程(代码逻辑)
python
# 伪代码:基于Transformer的推理流程
def generate(prompt, max_tokens=100):
# Prefill 阶段
input_ids = tokenizer.encode(prompt) # 编码输入
kvs = [] # KV Cache初始化
hidden_states = model.embed(input_ids)
for layer in model.layers:
hidden_states, k, v = layer(hidden_states, use_cache=True)
kvs.append((k, v)) # 缓存KV
next_token = sample(hidden_states[-1]) # 采样首个Token
# Decode 阶段
output = [next_token]
for _ in range(max_tokens - 1):
hidden_states = model.embed(next_token)
for i, layer in enumerate(model.layers):
hidden_states, k, v = layer(hidden_states, past_kv=kvs[i])
kvs[i] = (torch.cat([kvs[i][0], k]), torch.cat([kvs[i][1], v])) # 更新Cache
next_token = sample(hidden_states[-1])
output.append(next_token)
if next_token == EOS: break
return tokenizer.decode(output)
6. 性能影响指标
Prefill 延迟:与Prompt长度成正比(优化方向:算法优化、显存管理)。
Decode 吞吐量:与批次大小、KV Cache效率相关(优化方向:连续批处理、内存带宽优化)。
显存占用:由KV Cache主导(优化方向:量化、共享Cache)。
总结来说,Prefill 阶段是“准备期”,负责处理输入并初始化KV Cache;Decode 阶段是“生成期”,以自回归方式逐步产生输出。两者的优化策略差异显著,共同决定了推理效率和用户体验。生产环境中(如vLLM、TGI等框架)会针对这两阶段分别进行极致优化。
#################################################################
三、自己测试内容的理解
讲清楚测试的内容为什么这么测
怎么测试更加有效,为什么更有效
相关文章:
大模型知识
############################################################## 一、vllm大模型测试参数和原理 tempreature top_p top_k ############################################################## tempreature top_p top_k 作用:总体是控制模型的发散程度、多样…...
微软正式发布 SQL Server 2025 公开预览版,深度集成AI功能
微软在今年的 Build 2025 大会上正式发布了 SQL Server 2025 公开预览版,标志着这一经典数据库产品在 AI 集成、安全性、性能及开发者工具方面的全面升级。 AI 深度集成与创新 原生向量搜索:SQL Server 2025 首次将 AI 功能直接嵌入数据库引擎ÿ…...
git中,给分支打标签
1.创建标签 标签可以是轻量级标签或带注释的标签两种 轻量级标签 git tag <tag-name> 带注释的标签 git tag -a <tag-name> -m "标签信息" 2.查看标签 git tag 查看标签详细信息 git show <tag-name> 3.推送标签到远程仓库 推送指定标签…...
微软 Build 2025:开启 AI 智能体时代的产业革命
在 2025 年 5 月 19 日的微软 Build 开发者大会上,萨提亚・纳德拉以 "我们已进入 AI 智能体时代" 的宣言,正式拉开了人工智能发展的新纪元。这场汇聚了奥特曼、黄仁勋、马斯克三位科技领袖的盛会,不仅发布了 50 余项创新产品&#…...
k8s面试题-ingress
场景:我通过deployment更新pod,ingress是怎么把新的请求流量发送到我新的pod的?是怎么监控到我更新的pod的? 在 Kubernetes 中,Ingress 是一种 API 对象,用于管理外部访问到集群内服务的 HTTP 和 HTTPS 路…...
时间序列预测的迁移学习
在本文中,我们将了解如何将迁移学习应用于时间序列预测,以及如何在多样化的时间序列数据集上训练一次预测模型,之后无需训练即可在不同数据集上进行预测。我们将使用开源 Darts 库,仅用几行代码即可完成所有这些操作。你可以点击此…...
react中运行 npm run dev 报错,提示vite.config.js出现错误 @esbuild/win32-x64
在React项目中运行npm run dev时,如果遇到vite.config.js报错,提示esbuild/win32-x64在另一个平台中被使用,通常是由于依赖冲突或缓存问题导致的。解决方法是删除node_modules文件夹,并重新安装依赖。 如下图: 解决办…...
量子计算模拟:从理论到实践
量子计算作为现代物理学与计算机科学的前沿交叉领域,正逐渐从纯理论研究走向实际应用。本文将介绍一个基于Python的量子计算模拟框架,重点探讨量子比特、量子门操作以及量子态的演化等核心概念,并通过可视化手段直观展示量子态的特性。 量子…...
143.重排链表的尝试
listnode* p0cur,cur->nextq;p0->next有没有改变 ChatGLM 让我们逐步分析这段代码,看看 p0->next 是否发生了改变。 假设我们有一个链表,cur 是当前节点,q 是另一个节点。代码如下: 代码生成完成 C代码 首先&#…...
精准识别记忆细胞!Elabscience PE Anti-Human/Mouse CD44 抗原特异性抗体
概述 CD44 是一种广泛表达的细胞表面黏附分子,参与细胞迁移、炎症反应及肿瘤转移等关键生物学过程。Elabscience 推出的PE Anti-Human/Mouse CD44 Antibody [IM7](货号:E-AB-F1100D)是一款高特异性、高灵敏度的流式抗体ÿ…...
OpenCV CUDA模块特征检测与描述------一种基于快速特征点检测和旋转不变的二进制描述符类cv::cuda::ORB
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::ORB 是 OpenCV 库中 CUDA 模块的一部分,它提供了一种基于快速特征点检测和旋转不变的二进制描述符的方法,用于…...
OpenCV CUDA模块特征检测与描述------创建一个 盒式滤波器(Box Filter)函数createBoxFilter()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::createBoxFilter 是 OpenCV CUDA 模块中的一个工厂函数,用于创建一个 盒式滤波器(Box Filter)&…...
【八股战神篇】Spring高频面试题汇总
专栏简介 Bean 的生命周期了解么? 延伸 谈谈自己对于 Spring IoC 的了解 延伸 什么是动态代理? 延伸 动态代理和静态代理的区别 延伸 Spring AOP的执行流程 延伸 Spring的事务什么情况下会失效? 延伸 专栏简介 八股战神篇专栏是基于各平台共上千篇面经,上万道…...
高阶数据结构——红黑树实现
目录 1.红黑树的概念 1.1 红黑树的规则: 1.2 红黑树的效率 2.红黑树的实现 2.1 红黑树的结构 2.2 红黑树的插入 2.2.1 不旋转只变色(无论c是p的左还是右,p是g的左还是右,都是一样的变色处理方式) 2.2.2 单旋变色…...
java综合交易所13国语言,股票,区块链,外汇,自带客服系统运营级,有测试
这套pc和H5是一体的,支持测试,目前只有外汇和区块链,某站居然有人卖3.8w,还觉得自己这个价格很好 自带客服系统,虽然是老的,但是可玩性还是很高的,也支持c2c,理财,质押&a…...
六:操作系统虚拟内存之缺页中断
深入理解操作系统:缺页中断 (Page Fault) 的处理流程 在上一篇文章中,我们介绍了虚拟内存和按需调页 (Demand Paging) 的概念。虚拟内存为每个进程提供了巨大的、独立的虚拟地址空间,并通过页表 (Page Table) 将虚拟页面 (Virtual Page) 映射…...
iOS 15.4.1 TrollStore(巨魔商店)安装教程详解:第二篇
🚀 iOS 15.4.1 TrollStore(巨魔商店)安装教程详解 ✨ 前言🛠️ 如何安装 TrollStore?第一步:打开 Safari 浏览器第二步:选择对应系统版本安装方式第三步:访问地址,下载配…...
【JAVA】比较器Comparator与自然排序(28)
JAVA 核心知识点详细解释 Java中比较器Comparator的概念和使用方法 概念 Comparator 是 Java 中的一个函数式接口,位于 java.util 包下。它用于定义对象之间的比较规则,允许我们根据自定义的逻辑对对象进行排序。与对象的自然排序(实现 Comparable 接口)不同,Comparat…...
bitbar环境搭建(ruby 2.4 + rails 5.0.2)
此博客为武汉大学WA学院网络安全课程,理论课大作业Web环境搭建。 博主搭了2天!!!血泪教训是还是不能太相信ppt上的教程。 一开始尝试了ppt上的教程,然后又转而寻找网络资源 cs155源代码和docker配置,做到…...
Spring Boot接口通用返回值设计与实现最佳实践
一、核心返回值模型设计(增强版) package com.chat.common;import com.chat.util.I18nUtil; import com.chat.util.TraceUtil; import lombok.AllArgsConstructor; import lombok.Data; import lombok.Getter;import java.io.Serializable;/*** 功能: 通…...
线上 Linux 环境 MySQL 磁盘 IO 高负载深度排查与性能优化实战
目录 一、线上告警 二、问题诊断 1. 系统层面排查 2. 数据库层面分析 三、参数调优 1. sync_binlog 参数优化 2. innodb_flush_log_at_trx_commit 参数调整 四、其他优化建议 1. 日志文件位置调整 2. 生产环境核心参数配置模板 3. 突发 IO 高负载应急响应方案 五、…...
React--函数组件和类组件
React 中的函数组件和类组件是两种定义组件的方式,它们有以下主要区别: 1. 语法与定义方式 函数组件: 是 JavaScript 函数,接收 props 作为参数,返回 JSX。 const MyComponent (props) > {return <div>Hell…...
GitHub 趋势日报 (2025年05月20日)
本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1virattt/ai-hedge-fundAI对冲基金团队⭐ 1781⭐ 31163Python2public-apis/pub…...
uni.getLocation()和uni.openSetting()
文章目录 环境背景问题分析问题1问题2 uni.getLocation()和uni.openSetting()的区别和联系其它uni.getLocation()的failuni.openSetting()的authSetting对象 参考 环境 Windows 11 专业版HBuilder X 4.65微信开发者工具 Stable 1.06.2412050 背景 在小程序开发中,…...
医疗行业数据共享新实践:如何用QuickAPI打通诊疗全流程数据壁垒
在医疗行业,数据的高效流转直接影响诊疗效率和患者体验。某三甲医院在数字化转型中发现,虽然已积累大量核心业务数据,但各科室系统间的数据互通仍存在明显瓶颈——检验科的报告无法实时同步至门诊系统,药房库存数据与采购系统脱节…...
管理会议最佳实践:高效协同与价值最大化
1.会前准备:明确目标与计划 1.1 明确会议目的 1.1.1 必要性评估 开会前需自问是否真的需要开会,若问题可通过邮件、文档或异步沟通解决,则应避免开会,以节省时间和资源。 1.1.2 目标定义 清晰定义会议目标,如决策、信息同步、创意讨论等,并提前告知参与者,使大家明确参…...
万物智联,重塑未来:鸿蒙操作系统的实战突破与生态崛起
鸿蒙操作系统(HarmonyOS)作为华为自主研发的分布式操作系统,自2019年发布以来,已从技术探索迈入大规模商用阶段。截至2025年,鸿蒙系统不仅成为全球第二大移动操作系统,更在政企数字化、工业制造、金融科技等…...
人工智能路径:技术演进下的职业发展导航
当生成式AI能够自主完成创意设计、商业分析和代码编写时,职业发展的传统路径正在被重新测绘。人工智能路径不再是一条预设的直线,而演变为包含多重可能性的动态网络——未来的职业成功,将取决于在技术变革中持续定位自身价值节点的能力。 一…...
深入理解Java虚拟机之垃圾收集器篇(垃圾回收器的深入解析待完成TODO)
目录 **一. 如何判断对象的存亡**引用计数算法:可达性分析算法: **二. Java中的四种引用****三. 垃圾回收算法****1. 标记 - 清除算法****2. 标记 - 复制算法****3. 标记 - 整理算法****4. 分代收集理论**(了解即可) **四. 十种主流垃圾收集器****3.1 Serial 收集器****3.2 Par…...
牛客网 NC16407 题解:托米航空公司的座位安排问题
牛客网 NC16407 题解:托米航空公司的座位安排问题 题目分析 解题思路 本题可以采用深度优先搜索(DFS)来解决: 从左上角开始,按行优先顺序遍历每个座位对于每个座位,有两种选择: 选择该座位(如果满足条件…...
拉普拉斯高斯(LoG)滤波器掩模的注意事项
目录 问题: 解答: 一、高斯函数归一化:消除幅度偏差 1. 归一化的定义 2. 为何必须归一化? 二、拉普拉斯系数和为零:抑制直流项干扰 1. 拉普拉斯算子的特性 2. 系数和不为零的后果 三、直流项如何影响零交叉点&…...
OSPF基础实验-多区域
互联接口、IP地址如下图所示,所有设备均创建Loopback0,其IP地址为10.0.x.x/24,其中x为设备编号。 R1、R3的所有接口以及R2的GE0/0/4接口属于OSPF区域2,R2、R4的Loopback0接口及互联接口属于OSPF区域0,R4、R5的互联接口…...
ERP 与 WMS 对接深度解析:双视角下的业务与技术协同
在企业数字化运营的复杂体系中,ERP(企业资源规划)与 WMS(仓储管理系统)的有效对接,已成为优化供应链管理、提升运营效率的关键环节。本文将从 ERP 和 WMS 两个核心视角出发,深度剖析两者对接过程…...
基于 Node.js 的 HTML 转 PDF 服务
这是一个基于 Node.js 开发的 Web 服务,主要功能是将 HTML 内容转换为 PDF 文件。项目使用了 Express 作为 Web 框架,Puppeteer 作为 PDF 生成引擎,提供了简单易用的 API 接口。前端开发人员提供了一个简单而强大的 HTML 转 PDF 解决方案&…...
Java阻塞队列(BlockingQueue)的使用:ArrayBlockingQueue类、LinkedBlockingQueue类
1、阻塞队列的介绍 Java 中的阻塞队列(BlockingQueue) 是多线程编程中用于协调生产者和消费者线程的重要工具,属于 java.util.concurrent 包。它的核心特点是:当队列为空时,消费者线程会被阻塞,直到队列中有新元素;当队列满时,生产者线程会被阻塞,直到队列有空闲…...
esp32cmini SK6812 2个方式
1 #include <SPI.h> // ESP32-C系列的SPI引脚 #define MOSI_PIN 7 // ESP32-C3/C6的SPI MOSI引脚 #define NUM_LEDS 30 // LED灯带实际LED数量 - 确保与实际数量匹配! #define SPI_CLOCK 10000000 // SPI时钟频率 // 颜色结构体 st…...
2025年 PMP 6月 8月 专题知识
2025年 PMP 6月 8月 专题知识 文章目录 2025年 PMP 6月 8月 专题知识三点估算1. 概念:2. 原理: 决策树1. 概念:2. 步骤: 真题 三点估算 1. 概念: 三点估算常用于估算活动持续时间(也可以用于估算成本);源自计划评审技术(PERT&am…...
一文理解TCP与UDP
Socket套接字 Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。 基于Socket套接字的网络程序开发就是网络编程。 Socket套接字主要针对传输层协议划分为如下三类: 流套接字:使用传输层…...
智能指针RAII
引入:智能指针的意义是什么? RAll是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。 在对象构造时获取资源,接着控制对资源的访问使之在对象的生命周期内始终保持有效&#…...
AI护航化工:《山西省危化品视频智能分析指南》下的视频分析重构安全体系
化工和危化品行业的AI智能视频分析应用:构建安全与效率新范式 一、行业背景与挑战 化工和危化品行业是国民经济的重要支柱,但生产过程涉及高温、高压、易燃易爆等高风险场景。传统安全监管依赖人工巡检和固定监控设备,存在效率低、盲区多、…...
GitHub SSH Key 配置详细教程(适合初学者,Windows版)-学习记录4
GitHub SSH Key 配置详细教程(适合初学者,Windows版) 本教程适用于在 Windows 系统下,将本地 Git 仓库通过 SSH 方式推送到 GitHub,适合没有配置过 SSH key 的初学者。 1. 检查是否已有 SSH key 打开 Git Bash 或 Po…...
初识Linux · NAT 内网穿透 内网打洞 代理
目录 前言: 内网穿透和打洞 NAPT表 内网穿透 内网打洞 正向/反向代理 前言: 本文算是网络原理的最后一点补充,为什么说是补充呢,因为我们在前面第一次介绍NAT的时候详细介绍的是报文从子网到公网,却没有介绍报文…...
docker-compose使用详解
Docker-Compose 是 Docker 官方提供的容器编排工具,用于简化多容器应用的定义、部署和管理。其核心功能是通过 YAML 配置文件(docker-compose.yml)定义服务、网络和存储卷,并通过单一命令实现全生命周期的管理。以下从核心原理、安…...
使用计算机视觉实现目标分类和计数!!超详细入门教程
什么是物体计数和分类 在当今自动化和技术进步的时代,计算机视觉作为一项关键工具脱颖而出,在物体计数和分类任务中提供了卓越的功能。 无论是在制造、仓储、零售,还是在交通监控等日常应用中,计算机视觉系统都彻底改变了我们感知…...
并发编程中的对象组合的哲学
文章目录 引言对象组合与安全委托实例封闭技术基于监视器模式的对象访问对象不可变性简化委托原子维度的访问现有容器的并发安全的封装哲学使用继承使用组合小结参考引言 本文将介绍通过封装技术,保证开发者不对整个程序进行分析的情况下,就可以明确一个类是否是线程安全的,…...
03-Web后端基础(Maven基础)
1. 初始Maven 1.1 介绍 Maven 是一款用于管理和构建Java项目的工具,是Apache旗下的一个开源项目 。 Apache 软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非盈利性…...
禁忌搜索算法:从原理到实战的全解析
禁忌搜索算法:从原理到实战的全解析 一、算法起源与核心思想 禁忌搜索(Tabu Search, TS)由美国工程院院士Fred Glover于1986年正式提出,其灵感源于人类的记忆机制——通过记录近期的搜索历史(禁忌表)&…...
从加密到信任|密码重塑车路云一体化安全生态
目录 一、密码技术的核心支撑 二、典型应用案例 三、未来发展方向 总结 车路云系统涉及海量实时数据交互,包括车辆位置、传感器信息、用户身份等敏感数据。其安全风险呈现三大特征: 开放环境威胁:V2X(车与万物互联࿰…...
【ffmpeg】SPS与PPS的概念
PPS(Picture Parameter Set)详解 PPS(图像参数集)是H.264/H.265视频编码标准中的关键数据结构,与SPS(序列参数集)共同组成视频的解码配置信息,直接影响视频的正确解码和播放。以下是…...
Java垃圾回收与JIT编译优化
1. Java中的垃圾回收 垃圾回收是Java内存管理的核心,负责自动回收不再被应用程序引用的对象内存,从而防止内存泄漏并优化资源使用。以下详细介绍垃圾回收的机制、算法及优化实践。 1.1 垃圾回收的必要性 垃圾回收解决了手动内存管理中的常见问题,如内存泄漏和悬空指针。它…...