AdaptThink: Reasoning Models Can Learn When to Think

  • 3 Motivation
    • 3.1 理论基础
    • 3.2 NoThinking在简单问题中的优势
    • 3.3 动机总结
  • 4. AdaptThink
  • 4.1 约束优化目标
    • 数学建模
      • 基本定义
      • 原始优化问题
      • 惩罚项转换
      • 归一化处理
    • 策略梯度实现
      • 优势函数定义
      • PPO风格损失函数
  • 4.2 重要性采样策略
    • 问题背景
      • 冷启动问题
    • 重要性采样设计
      • 采样分布定义
      • 训练流程修改
    • 技术优势
      • 解决冷启动
      • 持续平衡
    • 数学特性
      • 重要性权重分析
      • 模式选择动态
    • 实现细节
      • 工程优化
      • 超参数选择
    • 效果验证
      • 训练曲线分析
      • 模式比例演化
  • 4.3 损失函数的理解视角

AdaptThink: Reasoning Models Can Learn When to Think 这篇论文提出了一种名为AdaptThink的新方法,旨在让AI模型学会"什么时候该动脑"。AdaptThink教会大型推理模型根据题目难度自动选择两种模式:直接给出答案的"快速模式"(NoThinking)或详细推理的"深度思考模式"(Thinking)。通过创新的强化学习算法,该方法不仅能显著减少不必要的计算消耗(响应长度最高减少53%),还能提升整体解题准确率(最高提升4.1%),在数学推理任务上实现了效率与性能的双赢。

本篇博客聚焦于文章的方法部分
在这里插入图片描述

3 Motivation

3.1 理论基础

论文首先对推理模型的生成过程进行了数学形式化定义:

  • πθπ_θπθ表示参数为θθθ的推理模型
  • 给定输入提示x=[x1,...,xn,<think>]x = [x_1,...,x_n,\texttt{<think>}]x=[x1,...,xn,<think>],其中:
    • [x1,...,xn][x_1,...,x_n][x1,...,xn]代表问题描述
    • <think>是触发思考过程的特殊标记
  • 模型生成响应y=[y1,...,yl,</think>,yl+2,...,ym]y = [y_1,...,y_l,\texttt{</think>},y_{l+2},...,y_m]y=[y1,...,yl,</think>,yl+2,...,ym],其中:
    • [y1,...,yl][y_1,...,y_l][y1,...,yl]是思考过程(包含探索、反思和自我验证的长链推理)
    • </think>标记思考结束
    • [yl+2,...,ym][y_{l+2},...,y_m][yl+2,...,ym]是最终解答(仅包含正确步骤和答案)

从概率角度,响应yyy是从条件概率分布πθ(⋅∣x)π_θ(·|x)πθ(x)中采样的结果。由于采用自回归生成方式,条件概率可分解为:
πθ(y∣x)=∏t=1mπθ(yt∣x,y<t)(1)π_θ(y|x) = \prod_{t=1}^m π_θ(y_t|x,y_{<t}) (1)πθ(yx)=t=1mπθ(ytx,y<t)(1)

3.2 NoThinking在简单问题中的优势

当前主流推理模型(如OpenAI o1和DeepSeek-R1)默认对所有问题采用Thinking模式。虽然增强了复杂问题的推理能力,但对于简单问题会产生不必要的计算开销。

Ma等人(2025)提出的NoThinking方法通过伪思考提示(如"Okay, I think I have finished thinking.")让模型跳过思考直接生成答案。本文进一步简化该方法:

  • 使用空思考提示(强制第一个生成标记为</think>

在MATH500数据集上的对比实验发现:

  1. 准确率

    • 对于难度1-3级的简单问题,NoThinking与Thinking准确率相当
    • 在最简单的1级问题上,NoThinking准确率反而更高(+1.2%)
  2. 响应长度

    • NoThinking平均响应长度显著更短(减少65-82%)
  3. 通过率

    • Thinking仅对不到50%的1-4级问题提升了通过率

关键结论:Thinking模式仅在解决高难度问题时展现出明显优势,而NoThinking在简单问题上具有更高的效率和相当的(甚至更好的)性能。

3.3 动机总结

基于上述发现,本文提出核心研究问题:

能否教会推理模型根据问题难度自适应选择Thinking或NoThinking模式,从而在不牺牲(甚至提升)性能的前提下显著提高推理效率?

这一思路催生了AdaptThink算法的设计,其核心是通过强化学习实现:

  1. 对简单问题优先采用NoThinking提升效率
  2. 对复杂问题自动切换至Thinking模式保证准确性

4. AdaptThink

AdaptThink算法的核心包含两大创新组件:首先是一个约束优化目标,通过强化学习机制激励模型优先选择无需思考的"NoThinking"模式,同时设置性能保障约束确保整体准确率不会下降;其次是重要性采样策略,该策略在策略训练过程中动态平衡"Thinking"和"NoThinking"样本的比例,既解决了模型初始阶段缺乏NoThinking样本的冷启动问题,又保证了在整个训练过程中模型能持续探索和利用两种思维模式的优势,最终实现根据问题难度自适应选择最优推理方式的能力。

在这里插入图片描述

4.1 约束优化目标

数学建模

基本定义

给定以下关键要素:

  • 推理模型πθπ_θπθ,表示可训练的参数化模型
  • 参考模型πθrefπ_{θ_{ref}}πθref,作为性能基准的固定模型(训练过程中不更新)
  • 奖励函数R(x,y)R(x,y)R(x,y),用于评估响应质量(在数学问题中为二元准确率指标,正确得1分,错误得0分)
  • 模式指示函数𝕀(y1=</think>)𝕀(y_1=\texttt{</think>})I(y1=</think>),用于判断响应是否采用NoThinking模式(当首标记为时取值为1,否则为0)

原始优化问题

max⁡θEx∼D,y∼πθ(⋅∣x)𝕀(y1=</think>)(2)约束条件:Ex∼D,y∼πθ(⋅∣x)R(x,y)≥Ex∼D,y′∼πθref(⋅∣x)R(x,y′)\max_{θ} \mathbb{E}_{x∼\mathcal{D},y∼π_θ(·|x)} 𝕀(y_1=\texttt{</think>}) (2) \\ \text{约束条件:} \mathbb{E}_{x∼\mathcal{D},y∼π_θ(·|x)} R(x,y) ≥ \mathbb{E}_{x∼\mathcal{D},y'∼π_{θ_{ref}}(·|x)} R(x,y') θmaxExD,yπθ(x)I(y1=</think>)(2)约束条件:ExD,yπθ(x)R(x,y)ExD,yπθref(x)R(x,y)

解释

  1. 目标函数追求最大化NoThinking模式的使用概率
  2. 约束条件要求优化后的模型整体性能不低于参考模型

惩罚项转换

引入拉格朗日乘子λ≥0λ≥0λ0,将约束优化转化为无约束形式:
max⁡θE[𝕀(y1=</think>)+λ(R(x,y)−R(x,y′))](3)\max_{θ} \mathbb{E} \left[ 𝕀(y_1=\texttt{</think>}) + λ \left( R(x,y) - R(x,y') \right) \right] (3) θmaxE[I(y1=</think>)+λ(R(x,y)R(x,y))](3)

超参数说明

  • λλλ控制性能约束的严格程度:
    • λ→0λ→0λ0:完全偏向缩短响应长度
    • λ→∞λ→∞λ:严格保证准确率

归一化处理

δ=1/λδ=1/λδ=1/λ,通过代数变形得到更稳定的数值形式:
max⁡θEx∼D,y∼πθ(⋅∣x)[δ⋅𝕀(y1=</think>)+R(x,y)−Rˉref(x)](4)(6)\max_{θ} \mathbb{E}_{x∼\mathcal{D},y∼π_θ(·|x)} \left[ δ·𝕀(y_1=\texttt{</think>}) + R(x,y) - \bar{R}_{ref}(x) \right] (4) (6) θmaxExD,yπθ(x)[δI(y1=</think>)+R(x,y)Rˉref(x)](4)(6)

其中Rˉref(x)\bar{R}_{ref}(x)Rˉref(x)通过预采样估计:
Rˉref(x)=1K∑i=1KR(x,y′i),y′i∼πθref(⋅∣x)(5)\bar{R}_{ref}(x) = \frac{1}{K}\sum_{i=1}^K R(x,y'^i), \quad y'^i ∼ π_{θ_{ref}}(·|x) (5) Rˉref(x)=K1i=1KR(x,yi),yiπθref(x)(5)

工程实现

  • 实际训练时K=16K=16K=16,即每个问题采样16个参考响应
  • Rˉref(x)\bar{R}_{ref}(x)Rˉref(x)在训练开始前计算并缓存

策略梯度实现

优势函数定义

A(x,y)=δ⋅𝕀(y1=</think>)+R(x,y)−Rˉref(x)A(x,y) = δ·𝕀(y_1=\texttt{</think>}) + R(x,y) - \bar{R}_{ref}(x) A(x,y)=δI(y1=</think>)+R(x,y)Rˉref(x)

三项含义

  1. δ⋅𝕀(...)δ·𝕀(...)δI(...):NoThinking模式的直接奖励
  2. R(x,y)R(x,y)R(x,y):响应正确性奖励
  3. −Rˉref(x)-\bar{R}_{ref}(x)Rˉref(x):基线项(降低方差)

PPO风格损失函数

采用clip机制的策略梯度:
L(θ)=−E[min⁡(πθ(y∣x)πθold(y∣x)A(x,y),clip(πθ(y∣x)πθold(y∣x),1−ϵ,1+ϵ)A(x,y))](7)\mathcal{L}(θ) = -\mathbb{E} \left[ \min\left( \frac{π_θ(y|x)}{π_{θ_{old}}(y|x)}A(x,y), \\ \text{clip}\left(\frac{π_θ(y|x)}{π_{θ_{old}}(y|x)},1-ϵ,1+ϵ\right)A(x,y) \right) \right] (7) L(θ)=E[min(πθold(yx)πθ(yx)A(x,y),clip(πθold(yx)πθ(yx),1ϵ,1+ϵ)A(x,y))](7)

关键参数

  • πθoldπ_{θ_{old}}πθold:采样分布(每次参数更新后同步)
  • ϵ=0.2ϵ=0.2ϵ=0.2:控制策略更新的保守程度
  • 省略了PPO中常见的KL散度惩罚项

4.2 重要性采样策略

问题背景

冷启动问题

在标准策略梯度训练中,初始模型πθoldπ_{θ_{old}}πθold几乎不会生成"NoThinking"响应(即πθold(y1=</think>∣x)≈0π_{θ_{old}}(y_1=\texttt{</think>}|x)≈0πθold(y1=</think>x)0)。这导致:

  1. 训练初期无法获得"NoThinking"样本
  2. 模型仅从"Thinking"样本学习,永远无法探索"NoThinking"模式

重要性采样设计

采样分布定义

构建新的采样分布πIS(⋅∣x)π_{IS}(·|x)πIS(x)
πIS(yt=a∣x,y<t)={0.5,t=1,a=</think>(强制NoThinking)0.5,t=1,a=wstart(强制Thinking)πθold(yt=a∣x,y<t),t>1(后续token按原模型生成)(8)π_{IS}(y_t=a|x,y_{<t}) = \begin{cases} 0.5, & t=1, a=\texttt{</think>} \quad (\text{强制NoThinking}) \\ 0.5, & t=1, a=w_{start} \quad (\text{强制Thinking}) \\ π_{θ_{old}}(y_t=a|x,y_{<t}), & t>1 \quad (\text{后续token按原模型生成}) \end{cases} (8) πIS(yt=ax,y<t)=0.5,0.5,πθold(yt=ax,y<t),t=1,a=</think>(强制NoThinking)t=1,a=wstart(强制Thinking)t>1(后续token按原模型生成)(8)

关键参数

  • wstartw_{start}wstart:思考模式起始词(如"Alright")
  • 0.5/0.5的分割比例确保两种模式样本均衡

训练流程修改

  1. 对每个batch中的每个prompt xxx

    • πIS(⋅∣x)π_{IS}(·|x)πIS(x)采样K=16K=16K=16个响应
    • 确保50%样本以开头(NoThinking)
    • 50%样本以wstartw_{start}wstart开头(Thinking)
  2. 计算损失时使用重要性权重:
    LAT(θ)=−Ex∼D,y∼πIS(⋅∣x)[min⁡(πθ(y∣x)πIS(y∣x)A(x,y),clip(πθ(y∣x)πIS(y∣x),1−ϵ,1+ϵ)A(x,y))](9)\mathcal{L}_{AT}(θ) = -\mathbb{E}_{x∼\mathcal{D},y∼π_{IS}(·|x)} \left[ \min\left( \frac{π_θ(y|x)}{π_{IS}(y|x)}A(x,y), \\ \text{clip}\left(\frac{π_θ(y|x)}{π_{IS}(y|x)},1-ϵ,1+ϵ\right)A(x,y) \right) \right] (9) LAT(θ)=ExD,yπIS(x)[min(πIS(yx)πθ(yx)A(x,y),clip(πIS(yx)πθ(yx),1ϵ,1+ϵ)A(x,y))](9)

技术优势

解决冷启动

  • 强制探索:即使初始模型不生成NoThinking,通过人为注入样本打破僵局
  • 早期学习:从第一轮训练开始即可学习两种模式的特征

持续平衡

  • 防止模式坍塌:避免模型过早收敛到单一模式
  • 动态适应:随着训练进行,模型能自主评估两种模式的优劣

数学特性

重要性权重分析

权重比πθ(y∣x)πIS(y∣x)\frac{π_θ(y|x)}{π_{IS}(y|x)}πIS(yx)πθ(yx)的作用:

  1. 当模型偏好某种模式时(如πθπ_θπθπISπ_{IS}πIS更倾向NoThinking):

    • 权重>1,但被clip机制限制在[1−ϵ,1+ϵ][1-ϵ,1+ϵ][1ϵ,1+ϵ]范围内(ϵ=0.2ϵ=0.2ϵ=0.2
  2. 保持梯度稳定性:

    • 避免个别样本的极端权重主导训练

模式选择动态

通过优势函数A(x,y)A(x,y)A(x,y)实现:

  • NoThinking优势:δ+Rnothing(x)−Rˉref(x)δ + R_{nothing}(x) - \bar{R}_{ref}(x)δ+Rnothing(x)Rˉref(x)
  • Thinking优势:Rthink(x)−Rˉref(x)R_{think}(x) - \bar{R}_{ref}(x)Rthink(x)Rˉref(x)

当NoThinking优势超过Thinking时,梯度更新会提高πθ(y1=</think>∣x)π_θ(y_1=\texttt{</think>}|x)πθ(y1=</think>x)的概率。

实现细节

工程优化

  1. 并行采样:同时生成Thinking/NoThinking批次
  2. 缓存机制:预计算Rˉref(x)\bar{R}_{ref}(x)Rˉref(x)减少重复计算
  3. 梯度裁剪:设置ϵ=0.2ϵ=0.2ϵ=0.2防止过大更新

超参数选择

参数作用
KKK16每个prompt的采样数
δδδ0.05NoThinking奖励系数
ϵϵϵ0.2策略更新幅度限制

效果验证

训练曲线分析

如图4所示:
在这里插入图片描述

  • 传统方法(GRPO):响应长度仅降至3500token后反弹
  • AdaptThink:稳定降至2000token以下

模式比例演化

  1. 初期:强制50-50分布
  2. 中期:模型开始自主选择(简单问题偏向NoThinking)
  3. 后期:稳定在难度自适应的比例(如MATH500 Level1达90%+ NoThinking)

4.3 损失函数的理解视角

理论框架

为了更直观地理解AdaptThink的优化行为,本节从优势函数的角度分析模型如何进行模式选择。通过比较Thinking和NoThinking两种模式的优势差异,我们可以清晰地看到算法如何实现难度自适应的决策机制。

优势函数比较分析

首先,我们分别定义两种思考模式的优势函数。在给定输入问题x时,Thinking模式和NoThinking模式的平均优势可以表示为:

Aˉthink(x)=Rˉthink(x)−Rˉref(x)(Thinking模式优势)Aˉnothing(x)=δ+Rˉnothing(x)−Rˉref(x)(NoThinking模式优势)\begin{aligned} \bar{A}_{\text{think}}(x) &= \bar{R}_{\text{think}}(x) - \bar{R}_{\text{ref}}(x) \quad &\text{(Thinking模式优势)} \\ \bar{A}_{\text{nothing}}(x) &= \delta + \bar{R}_{\text{nothing}}(x) - \bar{R}_{\text{ref}}(x) \quad &\text{(NoThinking模式优势)} \end{aligned} Aˉthink(x)Aˉnothing(x)=Rˉthink(x)Rˉref(x)=δ+Rˉnothing(x)Rˉref(x)(Thinking模式优势)(NoThinking模式优势)

这里的关键在于δ\deltaδ项的引入,它相当于给NoThinking模式一个额外的奖励偏置,鼓励模型在性能相近时优先选择更高效的NoThinking模式。

模式选择条件

模型更新参数时,只有当NoThinking模式同时满足以下两个条件时,才会提高选择该模式的概率:

{Rˉnothing(x)+δ>Rˉref(x)Rˉnothing(x)+δ>Rˉthink(x)\begin{cases} \bar{R}_{\text{nothing}}(x) + \delta > \bar{R}_{\text{ref}}(x) \\ \bar{R}_{\text{nothing}}(x) + \delta > \bar{R}_{\text{think}}(x) \end{cases} {Rˉnothing(x)+δ>Rˉref(x)Rˉnothing(x)+δ>Rˉthink(x)

这个设计确保了模型选择行为具有以下特性:

动态选择机制

  1. 简单问题场景

    • 当NoThinking和Thinking的准确率相近时(Rˉnothing≈Rˉthink\bar{R}_{\text{nothing}} \approx \bar{R}_{\text{think}}RˉnothingRˉthink
    • δ项的加入使得Aˉnothing>Aˉthink\bar{A}_{\text{nothing}} > \bar{A}_{\text{think}}Aˉnothing>Aˉthink
    • 模型会优先选择更高效的NoThinking模式
  2. 困难问题场景

    • 当Thinking明显优于NoThinking时(Rˉthink≫Rˉnothing\bar{R}_{\text{think}} \gg \bar{R}_{\text{nothing}}RˉthinkRˉnothing
    • 即使有δ\deltaδ的补偿,仍然满足Aˉthink>Aˉnothing\bar{A}_{\text{think}} > \bar{A}_{\text{nothing}}Aˉthink>Aˉnothing
    • 模型会自动保留Thinking模式以保证准确性

超参数δ\deltaδ的核心作用

δ\deltaδ在算法中扮演着至关重要的角色,它实际上控制了效率与精度之间的权衡:

  • 增大δ\deltaδ:会显著提高模型选择NoThinking的倾向性,带来更大的长度缩减,但可能牺牲部分准确率
  • 减小δ\deltaδ:模型会更依赖原始准确率差异做决策,保守地选择Thinking模式

理论意义与创新性

这种基于优势比较的损失函数设计实现了三个重要特性:

  1. 难度感知能力:通过实时比较Rˉthink\bar{R}_{\text{think}}RˉthinkRˉnothing\bar{R}_{\text{nothing}}Rˉnothing,模型可以感知问题难度
  2. 动态权衡机制δ\deltaδ参数提供了明确的效率-精度调节旋钮
  3. 训练稳定性:重要性采样确保两种模式都能获得足够的梯度更新

与动机章节的呼应

这个设计完美实现了第3章的核心发现:

  • 对简单问题(如MATH500 Level1-3)优先使用NoThinking
  • 对复杂问题(如AIME2024)自动保留Thinking模式
  • 通过δ参数可以灵活调节模式选择的激进程度

这种基于优势比较的决策机制,使得AdaptThink能够智能地在不同难度的问题上自动选择最优的思考模式,实现了效率与性能的最佳平衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/88921.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/88921.shtml
英文地址,请注明出处:http://en.pswp.cn/web/88921.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis高可用集群一主从复制概述

一、环境概述在分布式集群系统中为了解决服务单点故障问题&#xff0c;通常会把数据复制出多个副本部署到不同的机器中&#xff0c;满足故障恢复和负载均衡等需求。Redis也是如此&#xff0c;它为我们提供了复制功能&#xff0c;实现了相同数据的多个Redis副本。复制功能是高可…

Java 树形结构、层级结构数据构建

目录前言一、树状结构数据库存储二、工具类三、测试四、自定义树节点返回类型&#xff08;只保留部分字段&#xff09;1. 新增 TreeNodeDTO 类2.修改TreeUtil 类3.测试4.输出前言 有时候&#xff0c;开发过程中我们会遇到一些树状层级结构。 比如&#xff0c;公司部门组织架构…

求解线性规划模型最优解

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 既然选择了远方&#xff0c;当不负青春…

达梦国产数据库安装

打开ISO 、文件点击运行接受选择安装路径数据初始化 新数据库要创建数据库实例 选择一般用途数据库位置 选择所以系统用户&#xff0c;设置初始密码创建示例库可以选可以不选查找最近添加文件登录

互斥锁与同步锁

1. 锁的本质&#xff1a;解决并发问题的基石在多线程/多进程环境中&#xff0c;临界区&#xff08;Critical Section&#xff09; 是访问共享资源的代码段。锁的核心目标是确保互斥访问——任意时刻仅有一个执行单元能进入临界区。// 典型临界区示例 pthread_mutex_lock(&m…

高密度PCB板生产厂商深度解析

在电子制造领域&#xff0c;高密度PCB&#xff08;印制电路板&#xff09;作为核心基础元件&#xff0c;其技术精度与生产稳定性直接影响终端产品性能。本文精选五家具备核心技术优势的国内厂商&#xff0c;通过实地调研与行业数据验证&#xff0c;为读者呈现真实可信的供应商选…

力扣 hot100 Day44

98. 验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树 //自…

【基础架构】——软件系统复杂度的来源(低成本、安全、规模)

目录 一、软件系统复杂度的来源之低成本二、软件系统复杂度的来源之安全2.1、功能安全2.2、架构安全2.3、规模2.3.1、功能越来越多,导致系统复杂度指数级上升2.3.2、数据越来越多,系统复杂度发生质变本文来源:极客时间vip课程笔记 一、软件系统复杂度的来源之低成本 当我们设…

机器学习 YOLOv5手绘电路图识别 手绘电路图自动转换为仿真软件(如LT Spice)可用的原理图,避免人工重绘

以下是对《手绘电路图识别》论文的核心解读&#xff0c;结合技术方案、实验数据和创新点进行结构化总结&#xff1a;研究目标 解决痛点&#xff1a;将手绘电路图自动转换为仿真软件&#xff08;如LT Spice&#xff09;可用的原理图&#xff0c;避免人工重绘。 关键挑战&#xf…

一般的非线性规划求解(非凸函数)

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 每一个裂缝都是为透出光而努力&#x…

CTFHub————Web{信息泄露[Git泄露(Stash、Index)]}

Web 信息泄露 Git泄露 Stash 首先&#xff0c;我们先读题&#xff0c;由题可知我们可以用BugScanTeam或GitHack完成该题那么我们先开题&#xff0c; 好吧&#xff0c;他问我们flag在哪里&#xff0c;我怎么知道fag在哪里。 先打开GitHack 使用 py GitHack.py http://challenge-…

缺乏实际里程碑管控项目进度,如何设定关键节点

要通过实际里程碑管控项目进度&#xff0c;核心措施包括&#xff1a;设定可量化的关键节点、明确交付标准与责任人、同步风险与资源计划、基于阶段目标拆解任务、建立节点验证与复盘机制。例如&#xff0c;设定可量化的关键节点能让团队清晰理解“何时完成了什么”并及时调整方…

XML E4X:深入解析与高效应用

XML E4X:深入解析与高效应用 引言 XML(可扩展标记语言)作为一种数据交换格式,广泛应用于互联网数据传输、配置文件、数据存储等领域。E4X 是一种扩展 XML 的编程接口,允许开发者以编程方式直接访问和处理 XML 数据。本文将深入探讨 XML E4X 的概念、特点、应用场景以及高…

uniapp---入门、基本配置了解

目录 uniapp 新建项目 uniapp全局配置 组件 1、内置组件 2、扩展 组件 uni-ui 3、第三方组件库 uview-ui 秋云-ucharts (插件市场 ) scss语法(了解) vue2语法&#xff08;熟悉&#xff09; uniapp 官方文档&#xff1a;uni-app官网 uni-app 是一个使用 Vue.js 开发所…

springboot 好处

思考1&#xff0c;快速启动&#xff0c;简化配置。自动配置&#xff0c;内置tomcat&#xff0c;无需部署war文件&#xff0c;快速创建独立应用2&#xff0c;提高开发效率&#xff0c;热部署3&#xff0c;微服务生态4&#xff0c;云原生&#xff0c;Docker K8sSpring Boot 的主要…

SSM框架学习——day1

SSM框架概述SSM框架是Java开发中常用的组合框架&#xff0c;由Spring、Spring MVC和MyBatis三个开源框架整合而成。主要用于构建企业级Web应用程序&#xff0c;具有轻量级、模块化、易扩展等特点。Spring框架作为核心&#xff0c;提供依赖注入&#xff08;DI&#xff09;和面向…

【html基本界面】

小米界面布局效果htmlcss效果 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>小米商城布局<…

【设计模式】适配器模式(包装器模式),缺省适配器模式,双向适配器模式

适配器模式&#xff08;Adapter Pattern&#xff09;详解 一、适配器模式简介 适配器模式是一种结构型设计模式&#xff0c;它将一个类的接口转换成客户端所期望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以协同工作。 简单来说&#xff0c;适配…

安全初级(一)

一.docker的搭建和VPN连接 1.输入指令&#xff1a;apt-get install docker.io docker-compose 2.设置docker代理&#xff1a;创建文件夹以及对应的文件 /etc/systemd/system/docker.service.d/http-proxy.conf 在该文件中配置自己的代理ip以及代理端口 [Service] Environme…

Java多线程:核心技术与实战指南

目录&#x1f680;前言&#x1f914;什么是多线程&#xff1f;&#x1f4bb;创建线程&#x1f4af;创建方法一&#xff1a;继承Thread类&#x1f4af;创建方法二&#xff1a;实现Runnable接口&#x1f4af;创建方法三&#xff1a;实现Callable接口&#x1f4af;三种方法对比&am…