<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Azusa的个人博客</title>
  
  
  <link href="https://azusa-nya.github.io/atom.xml" rel="self"/>
  
  <link href="https://azusa-nya.github.io/"/>
  <updated>2026-01-29T11:14:38.603Z</updated>
  <id>https://azusa-nya.github.io/</id>
  
  <author>
    <name>Azusa</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>智力题：四人过桥问题（过河问题）</title>
    <link href="https://azusa-nya.github.io/article/1831749265/"/>
    <id>https://azusa-nya.github.io/article/1831749265/</id>
    <published>2026-01-29T11:10:55.000Z</published>
    <updated>2026-01-29T11:14:38.603Z</updated>
    
    <content type="html"><![CDATA[<h1 id="四人过桥问题（经典最优解）"><a href="#四人过桥问题（经典最优解）" class="headerlink" title="四人过桥问题（经典最优解）"></a>四人过桥问题（经典最优解）</h1><p>这是一道经典的逻辑运筹问题，<strong>先明确标准题目设定</strong>，再推导最短耗时方案：</p><h3 id="一、问题标准条件"><a href="#一、问题标准条件" class="headerlink" title="一、问题标准条件"></a>一、问题标准条件</h3><p>假设有四人过桥，所需时间分别为：</p><ul><li>甲：1分钟</li><li>乙：2分钟</li><li>丙：5分钟</li><li>丁：10分钟</li></ul><p>附加规则：</p><ol><li>桥<strong>最多同时容纳2人</strong>通过；</li><li>只有1个火炬，<strong>过桥必须手持火炬</strong>，无火炬无法过桥；</li><li>两人同行时，<strong>过桥耗时以较慢者的速度为准</strong>；</li><li>目标：四人全部安全过桥，求<strong>最短总耗时</strong>。</li></ol><h3 id="二、核心解题思路"><a href="#二、核心解题思路" class="headerlink" title="二、核心解题思路"></a>二、核心解题思路</h3><p>避免让耗时最长的两人<strong>单独往返过桥</strong>，减少慢者的无效耗时；同时利用速度快的人完成火炬传递，平衡往返的时间成本，最终有两种主流策略，对比后得出最优解。</p><h3 id="三、两种策略耗时对比"><a href="#三、两种策略耗时对比" class="headerlink" title="三、两种策略耗时对比"></a>三、两种策略耗时对比</h3><h4 id="策略一：最快者全程往返送火炬（常规思路）"><a href="#策略一：最快者全程往返送火炬（常规思路）" class="headerlink" title="策略一：最快者全程往返送火炬（常规思路）"></a>策略一：最快者全程往返送火炬（常规思路）</h4><ol><li>甲+乙过桥，耗时2分钟，甲返回，耗时1分钟，累计3分钟</li><li>甲+丙过桥，耗时5分钟，甲返回，耗时1分钟，累计6 + 3 &#x3D; 9分钟</li><li>甲+丁过桥，耗时10分钟，累计<strong>10 + 9 &#x3D; 19分钟</strong></li></ol><h4 id="策略二：快慢组合结伴，最优方案（最短耗时）"><a href="#策略二：快慢组合结伴，最优方案（最短耗时）" class="headerlink" title="策略二：快慢组合结伴，最优方案（最短耗时）"></a>策略二：快慢组合结伴，最优方案（最短耗时）</h4><ol><li>甲+乙一同过桥，耗时以慢者乙为准，耗时<strong>2分钟</strong><br>此时状态：对岸（甲、乙），原岸（丙、丁），累计2分钟</li><li>甲单独持火炬返回原岸，耗时<strong>1分钟</strong><br>此时状态：对岸（乙），原岸（甲、丙、丁），累计3分钟</li><li>丙+丁一同过桥，耗时以慢者丁为准，耗时<strong>10分钟</strong><br>此时状态：对岸（乙、丙、丁），原岸（甲），累计13分钟</li><li>乙单独持火炬返回原岸，耗时<strong>2分钟</strong><br>此时状态：对岸（丙、丁），原岸（甲、乙），累计15分钟</li><li>甲+乙再次一同过桥，耗时<strong>2分钟</strong><br>此时四人全部抵达对岸，累计<strong>2 + 1 + 10 + 2 + 2 &#x3D; 17分钟</strong></li></ol><h3 id="四、最终结论"><a href="#四、最终结论" class="headerlink" title="四、最终结论"></a>四、最终结论</h3><p>在上述标准设定下，四人全部过桥的<strong>最短时间为17分钟</strong>，核心是让耗时最长的丙、丁结伴过桥，避免两人分别消耗大量时间，再通过速度次快的乙完成火炬返程，最大化减少总耗时。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;四人过桥问题（经典最优解）&quot;&gt;&lt;a href=&quot;#四人过桥问题（经典最优解）&quot; class=&quot;headerlink&quot; title=&quot;四人过桥问题（经典最优解）&quot;&gt;&lt;/a&gt;四人过桥问题（经典最优解）&lt;/h1&gt;&lt;p&gt;这是一道经典的逻辑运筹问题，&lt;strong&gt;先明确标</summary>
      
    
    
    
    <category term="面试" scheme="https://azusa-nya.github.io/category/%E9%9D%A2%E8%AF%95/"/>
    
    <category term="智力题" scheme="https://azusa-nya.github.io/category/%E9%9D%A2%E8%AF%95/%E6%99%BA%E5%8A%9B%E9%A2%98/"/>
    
    
    <category term="面试" scheme="https://azusa-nya.github.io/tag/%E9%9D%A2%E8%AF%95/"/>
    
    <category term="智力题" scheme="https://azusa-nya.github.io/tag/%E6%99%BA%E5%8A%9B%E9%A2%98/"/>
    
  </entry>
  
  <entry>
    <title>AI对话之间的token概览，如何节约token</title>
    <link href="https://azusa-nya.github.io/article/1163844599/"/>
    <id>https://azusa-nya.github.io/article/1163844599/</id>
    <published>2026-01-29T10:11:31.000Z</published>
    <updated>2026-01-29T10:18:26.424Z</updated>
    
    <content type="html"><![CDATA[<h1 id="AI对话中的Token概念、节约方法与更优优化方案"><a href="#AI对话中的Token概念、节约方法与更优优化方案" class="headerlink" title="AI对话中的Token概念、节约方法与更优优化方案"></a>AI对话中的Token概念、节约方法与更优优化方案</h1><p>在AI大模型对话场景中，Token是核心计费与计算单元，理解其定义并掌握高效的Token管控方式，既能<strong>降低使用成本</strong>，又能<strong>提升模型响应速度</strong>，同时避免因超出上下文窗口导致的对话失效。下面先清晰解释Token概念，再系统梳理节约Token的方法，最后给出比单纯“节省”更高效的优化方案。</p><h2 id="一、Token的核心概念"><a href="#一、Token的核心概念" class="headerlink" title="一、Token的核心概念"></a>一、Token的核心概念</h2><h3 id="1-基础定义"><a href="#1-基础定义" class="headerlink" title="1. 基础定义"></a>1. 基础定义</h3><p><strong>Token</strong>是大模型对文本进行<strong>分词处理后得到的最小处理单元</strong>，它既不是完整的单词，也不是单纯的字符，而是模型将文本拆解后的语义片段，是模型理解、计算、计费和传输文本的基础单位。</p><blockquote><p>Token就是大模型理解和生成文字的最小单位</p></blockquote><p>模型的所有输入（系统Prompt、用户提问、历史对话）和输出（AI回复），都会先被转化为Token序列，再进行推理计算。</p><h3 id="2-常见Token换算参考"><a href="#2-常见Token换算参考" class="headerlink" title="2. 常见Token换算参考"></a>2. 常见Token换算参考</h3><p>不同大模型的分词规则略有差异，日常使用中可参考以下通用换算规律，方便直观预估：</p><table><thead><tr><th>文本类型</th><th>大致Token换算关系</th></tr></thead><tbody><tr><td>英文文本</td><td>1 Token ≈ 4个英文字符 ≈ 0.75个英文单词</td></tr><tr><td>中文文本</td><td>1 Token ≈ 1-2个汉字（主流模型如GPT、Claude、通义千问、Llama均在此范围）</td></tr><tr><td>混合文本</td><td>按实际分词结果计算，符号、空格、标点也会被计为Token</td></tr></tbody></table><h3 id="3-Token的关键影响"><a href="#3-Token的关键影响" class="headerlink" title="3. Token的关键影响"></a>3. Token的关键影响</h3><ul><li><strong>成本约束</strong>：主流云服务与大模型API，均按<strong>输入Token+输出Token的总量</strong>计费，Token越多，成本越高。</li><li><strong>上下文限制</strong>：每个模型都有固定的<strong>上下文窗口大小</strong>（如8k、32k、128k Token），单次对话的所有输入+输出Token总和不能超过该上限，否则会触发截断或请求失败。</li><li><strong>性能影响</strong>：Token数量直接影响模型推理耗时和内存占用，Token越少，响应越快，资源消耗越低。</li></ul><h2 id="二、基础通用方法：如何有效节约Token"><a href="#二、基础通用方法：如何有效节约Token" class="headerlink" title="二、基础通用方法：如何有效节约Token"></a>二、基础通用方法：如何有效节约Token</h2><p>这类方法是直接、易落地的Token优化手段，适用于所有AI对话场景，核心思路是<strong>减少无效、冗余的Token传输与计算</strong>。</p><h3 id="（一）精简Prompt提示词设计"><a href="#（一）精简Prompt提示词设计" class="headerlink" title="（一）精简Prompt提示词设计"></a>（一）精简Prompt提示词设计</h3><p>Prompt是对话中Token消耗的重要来源，尤其是固定的系统Prompt，优化后可长期降低消耗。</p><ol><li><strong>剔除冗余与无效信息</strong><ul><li>删除重复表述、无意义的修饰词、语气助词、多余的空格和换行符。</li><li>去掉模型已具备的基础常识说明，无需重复告知模型基本规则。</li><li>避免在Prompt中加入大量无关的背景铺垫，只保留核心指令。</li></ul></li><li><strong>采用精简的表达形式</strong><ul><li>使用<strong>缩写、专业术语、结构化符号</strong>替代长句描述，例如用「步骤：1.XX 2.XX」替代冗长的流程说明。</li><li>用关键词列表替代段落式描述，例如将身份设定简化为「角色：财务助手；约束：仅输出数据，不做额外解释」。</li></ul></li><li><strong>优化示例与规则呈现</strong><ul><li>少样本提示：使用<strong>2-3个高质量示例</strong>替代大量冗余示例，模型足以学习指令逻辑。</li><li>结构化示例：用表格、键值对替代段落式示例，减少格式带来的额外Token。</li><li>系统Prompt固化：将固定的系统提示词单独配置，<strong>不随每轮用户请求重复发送完整内容</strong>（部分平台支持持久化系统Prompt）。</li></ul></li></ol><h3 id="（二）高效管理对话历史"><a href="#（二）高效管理对话历史" class="headerlink" title="（二）高效管理对话历史"></a>（二）高效管理对话历史</h3><p>多轮对话中，历史记录是Token消耗的主要增量来源，需避免全量无差别保留。</p><ol><li><strong>滚动窗口截断</strong><br>设定固定的历史保留轮数（如保留最近5-10轮有效对话），超出的早期历史直接丢弃，仅保留与当前任务相关的最新上下文。</li><li><strong>历史对话摘要化</strong><br>不直接传输完整历史，而是调用轻量模型将长历史<strong>压缩为核心语义摘要</strong>，用几十Token的摘要替代上千Token的原始对话，同时保留关键信息。<br>示例：将多轮对话「用户问A问题→AI答A→用户追问A细节→AI补充→用户问B问题」压缩为「用户先咨询A问题及细节，后转向咨询B问题，核心诉求为XX」。</li><li><strong>过滤无效历史内容</strong><br>自动剔除对话中的无效信息，如问候语、无意义闲聊、错误重试的重复请求、模型的废稿回复等，仅保留有效交互内容。</li><li><strong>按需加载历史</strong><br>针对多场景对话，按任务类型拆分历史，仅加载与当前任务相关的历史片段，而非全量会话历史。</li></ol><h3 id="（三）优化输入与上下文内容"><a href="#（三）优化输入与上下文内容" class="headerlink" title="（三）优化输入与上下文内容"></a>（三）优化输入与上下文内容</h3><ol><li><strong>长文本分块处理</strong><br>面对文档、报告等长文本输入，<strong>不一次性传入全文</strong>，而是按语义分块，仅向模型传入与当前问题相关的文本块，降低单轮Token消耗。</li><li><strong>提取核心信息</strong><br>过滤输入文本中的冗余格式，如代码注释、HTML标签、Markdown冗余格式、空白行、重复数据等，仅保留核心语义内容。</li><li><strong>避免重复传输</strong><br>对于固定的参考数据、配置信息，<strong>仅在首次对话传入</strong>，后续轮次通过关键词指代，无需重复发送完整内容。</li></ol><h3 id="（四）调整模型调用与输出策略"><a href="#（四）调整模型调用与输出策略" class="headerlink" title="（四）调整模型调用与输出策略"></a>（四）调整模型调用与输出策略</h3><ol><li><strong>选择匹配的上下文窗口</strong><br>根据任务复杂度选择模型，简单任务（如翻译、摘要）选用小窗口模型（8k&#x2F;16k），复杂长文本任务再使用大窗口模型，避免大材小用造成Token浪费。</li><li><strong>限制输出长度</strong><br>在调用API时，合理设置<code>max_tokens</code>参数，限定模型的最大输出长度，避免模型生成冗长、无关的回复，减少输出Token消耗。</li><li><strong>要求模型精简输出</strong><br>在Prompt中明确指令模型「输出精简，仅保留核心结果，避免冗余解释」，从源头控制输出的Token数量。</li></ol><h2 id="三、更优方案：超越“单纯节约”的高效Token优化"><a href="#三、更优方案：超越“单纯节约”的高效Token优化" class="headerlink" title="三、更优方案：超越“单纯节约”的高效Token优化"></a>三、更优方案：超越“单纯节约”的高效Token优化</h2><p>单纯通过删减内容节约Token，可能会损失上下文信息、降低对话效果。<strong>更优的思路是“重构交互方式”</strong>，用工程化方案替代被动节省，在保证效果的同时，从根本上降低Token依赖，这也与你之前关注的AI Agent、Skills、MCP体系高度契合。</p><h3 id="（一）RAG检索增强生成：核心替代方案"><a href="#（一）RAG检索增强生成：核心替代方案" class="headerlink" title="（一）RAG检索增强生成：核心替代方案"></a>（一）RAG检索增强生成：核心替代方案</h3><p>这是目前解决<strong>长上下文、知识库对话</strong>场景最成熟、最优的方案，彻底改变“把所有内容塞进Prompt”的模式。</p><ul><li><strong>核心原理</strong>：<br>不将全量文档、知识库直接作为上下文传入模型，而是将这些数据向量化后存入<strong>向量数据库</strong>。当用户提问时，先通过语义检索，从数据库中提取<strong>仅与问题相关的少量关键片段</strong>，再将这些片段传入模型作为上下文。</li><li><strong>Token优化效果</strong>：<br>原本需要数万Token的全文，被压缩为数百Token的相关片段，Token消耗降低90%以上，同时模型的回答准确性更高，不会因上下文过长而丢失重点。</li><li><strong>适用场景</strong>：企业知识库问答、文档解析、专业领域对话、客服咨询等。</li></ul><h3 id="（二）结合Skills与MCP的结构化交互"><a href="#（二）结合Skills与MCP的结构化交互" class="headerlink" title="（二）结合Skills与MCP的结构化交互"></a>（二）结合Skills与MCP的结构化交互</h3><p>依托AI Agent技能体系与MCP协议，实现<strong>少Token交互，多外部协作</strong>，从架构层面优化Token使用。</p><ol><li><strong>技能化拆分任务</strong><br>将复杂任务拆分为多个独立的<strong>Skills</strong>（如数据查询、报表生成、文本计算），每个Skill仅处理单一子任务，单轮对话仅传输该Skill所需的极简指令，大幅减少单轮上下文Token。</li><li><strong>通过MCP协议获取外部数据</strong><br>利用MCP（Model Context Protocol）标准化协议，让Agent直接调用外部工具、数据库、API获取数据，<strong>而非在对话中传输全量原始数据</strong>。例如需要销售数据时，通过MCP查询数据库返回结果，而非将销售表全文放入Prompt。</li><li><strong>使用结构化数据替代自然语言</strong><br>与模型交互时，用JSON、键值对等<strong>结构化格式</strong>传递参数和结果，替代冗长的自然语言描述，结构化文本的分词效率更高，Token消耗远低于纯自然语言。</li></ol><h3 id="（三）动态上下文与智能缓存"><a href="#（三）动态上下文与智能缓存" class="headerlink" title="（三）动态上下文与智能缓存"></a>（三）动态上下文与智能缓存</h3><ol><li><strong>语义化动态缓存</strong><br>搭建<strong>语义缓存层</strong>，对用户的历史请求进行向量化存储，当出现相似或相同的提问时，直接返回缓存的AI回复，<strong>无需重新调用模型计算</strong>，完全避免重复的Token消耗。适用于高频、标准化的提问场景（如FAQ、通用咨询）。</li><li><strong>层级化上下文管理</strong><br>将会话信息分为<strong>核心常驻层</strong>（如用户基础信息、核心任务目标）和<strong>临时层</strong>（如当前轮次交互、临时数据），核心层少量Token长期保留，临时层用完即清，实现Token的精细化管控。</li><li><strong>轻量模型预处理</strong><br>对于文本清洗、摘要、分词等基础任务，先用轻量级小模型完成预处理，将处理后的精简结果传入大模型，减少大模型的输入Token压力，同时降低整体成本。</li></ol><h3 id="（四）垂直领域微调与专属模型"><a href="#（四）垂直领域微调与专属模型" class="headerlink" title="（四）垂直领域微调与专属模型"></a>（四）垂直领域微调与专属模型</h3><p>针对固定的业务场景，对轻量级大模型进行<strong>垂直领域微调</strong>，让模型学习业务规则、知识和指令逻辑后：</p><ul><li>无需在Prompt中反复传递业务规则、背景知识，大幅精简系统Prompt。</li><li>可选用更小参数量、更小上下文窗口的模型，满足业务需求的同时，Token消耗和推理成本显著降低。</li><li>私有化部署专属模型后，可摆脱公有云的Token计费模式，实现成本的根本性优化。</li></ul><h2 id="四、不同场景的最优方案组合"><a href="#四、不同场景的最优方案组合" class="headerlink" title="四、不同场景的最优方案组合"></a>四、不同场景的最优方案组合</h2><p>结合实际使用场景，推荐对应的Token优化组合，平衡成本与效果：</p><table><thead><tr><th>对话场景</th><th>推荐优化方案组合</th><th>核心优势</th></tr></thead><tbody><tr><td>简单日常对话</td><td>精简Prompt + 滚动历史窗口</td><td>易落地，快速降低基础消耗</td></tr><tr><td>长文档&#x2F;知识库问答</td><td>RAG检索 + 历史摘要化</td><td>从根源减少上下文Token，保证回答准确性</td></tr><tr><td>AI Agent任务</td><td>Skills拆分 + MCP协议调用 + 结构化上下文</td><td>适配Agent架构，高效完成复杂任务，Token消耗可控</td></tr><tr><td>高频标准化问答</td><td>语义缓存 + 精简输出指令</td><td>几乎消除重复请求的Token消耗，响应极快</td></tr><tr><td>垂直业务专属对话</td><td>领域模型微调 + 固化系统Prompt</td><td>彻底摆脱长Prompt依赖，长期成本最优</td></tr></tbody></table><h2 id="五、重要注意事项"><a href="#五、重要注意事项" class="headerlink" title="五、重要注意事项"></a>五、重要注意事项</h2><ol><li>节约Token的前提是<strong>不牺牲对话效果和业务需求</strong>，避免过度删减导致模型理解偏差、回答错误。</li><li>不同模型的分词规则和计费标准不同，需结合具体模型的文档，精准监控Token使用量。</li><li>对于企业级应用，建议搭建Token监控与分析模块，实时统计各环节的Token消耗，针对性优化。</li></ol>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;AI对话中的Token概念、节约方法与更优优化方案&quot;&gt;&lt;a href=&quot;#AI对话中的Token概念、节约方法与更优优化方案&quot; class=&quot;headerlink&quot; title=&quot;AI对话中的Token概念、节约方法与更优优化方案&quot;&gt;&lt;/a&gt;AI对话中的Token</summary>
      
    
    
    
    <category term="Agent开发" scheme="https://azusa-nya.github.io/category/Agent%E5%BC%80%E5%8F%91/"/>
    
    <category term="token" scheme="https://azusa-nya.github.io/category/Agent%E5%BC%80%E5%8F%91/token/"/>
    
    
    <category term="Agent" scheme="https://azusa-nya.github.io/tag/Agent/"/>
    
    <category term="token" scheme="https://azusa-nya.github.io/tag/token/"/>
    
    <category term="大模型" scheme="https://azusa-nya.github.io/tag/%E5%A4%A7%E6%A8%A1%E5%9E%8B/"/>
    
  </entry>
  
  <entry>
    <title>Prompt,rules,skills,mcp之间的关系</title>
    <link href="https://azusa-nya.github.io/article/2080005987/"/>
    <id>https://azusa-nya.github.io/article/2080005987/</id>
    <published>2026-01-29T09:04:41.000Z</published>
    <updated>2026-01-29T09:56:58.771Z</updated>
    
    <content type="html"><![CDATA[<p>在AI Agent、大模型应用开发的主流语境下，<strong>Prompt、Rules、Skills、MCP</strong>是构建智能体能力体系的核心概念，彼此分工不同、相互依存，共同支撑智能体完成复杂任务。下面先给出每个概念的精准定义，再系统梳理它们之间的层级、协作与依赖关系。</p><h3 id="一、核心概念定义"><a href="#一、核心概念定义" class="headerlink" title="一、核心概念定义"></a>一、核心概念定义</h3><h4 id="1-Prompt（提示词）"><a href="#1-Prompt（提示词）" class="headerlink" title="1. Prompt（提示词）"></a>1. Prompt（提示词）</h4><h5 id="1-1-定义："><a href="#1-1-定义：" class="headerlink" title="1.1. 定义："></a><strong>1.1. 定义</strong>：</h5><p>Prompt即<strong>提示词</strong>，是向大语言模型（LLM）或AI Agent输入的结构化文本指令，是实现人机交互、引导模型输出符合预期结果的核心媒介。它通过明确的自然语言描述，向模型传递<strong>任务目标、执行方式、输出格式、上下文背景、示例参考</strong>等关键信息，是模型理解需求、生成响应的直接依据。</p><blockquote><p>Prompt &#x3D; 你对AI说的话</p></blockquote><p>比如：</p><ul><li>“帮我写一篇关于春天的诗”</li><li>“这段代码有什么bug？”</li><li>“解释一下量子纠缠”</li></ul><p>在Agent体系中，Prompt主要分为两类：</p><ul><li><strong>系统Prompt（System Prompt）</strong>：预先设定的底层指令，定义Agent的核心身份、基础行为准则与通用输出规范，是Agent的“底层人设与基础指令”，通常固定不变。</li><li><strong>用户Prompt（User Prompt）</strong>：用户实时发起的具体任务请求、问题或交互内容，是Agent单次执行任务的直接触发指令。</li></ul><h5 id="1-2-Prompt的特点："><a href="#1-2-Prompt的特点：" class="headerlink" title="1.2. Prompt的特点："></a><strong>1.2. Prompt的特点</strong>：</h5><ul><li>简单直接，就像你在跟人聊天</li><li>每次对话都可以不同</li><li>适合一次性任务</li></ul><h5 id="1-3-Prompt的问题："><a href="#1-3-Prompt的问题：" class="headerlink" title="1.3. Prompt的问题："></a><strong>1.3. Prompt的问题</strong>：</h5><ul><li>如果你经常要做类似的事情，每次都要重新输入Prompt</li><li>AI可能会”忘记”你之前的设置</li><li>无法复用和共享</li></ul><h4 id="2-Rules（规则）"><a href="#2-Rules（规则）" class="headerlink" title="2. Rules（规则）"></a>2. Rules（规则）</h4><h5 id="2-1-定义："><a href="#2-1-定义：" class="headerlink" title="2.1 定义："></a><strong>2.1 定义</strong>：</h5><p>Rules即<strong>规则</strong>，是为AI Agent设定的<strong>强制性约束、行为边界与合规准则</strong>，是不可违背的硬性规范，用于管控Agent的行为逻辑、输出内容与执行范围，避免模型出现偏差、违规或不符合业务需求的行为。</p><blockquote><p>Rules &#x3D; AI的行为准则</p></blockquote><p>比如：</p><ul><li>“你是一个专业的程序员，写代码时要遵循PEP8规范”</li><li>“回复时要简短精炼，不要超过100字”</li><li>“遇到不确定的信息，要明确告诉用户”</li></ul><p>规则的核心是“约束与边界”，常见类型包括：</p><ul><li><strong>安全合规规则</strong>：禁止输出违法、违规、暴力、歧视等不良内容的约束；</li><li><strong>业务流程规则</strong>：限定Agent执行任务的流程、权限、数据访问范围；</li><li><strong>输出格式规则</strong>：强制要求响应的结构、语气、字段完整性；</li><li><strong>交互行为规则</strong>：限定Agent的对话风格、拒绝策略、异常处理方式。</li></ul><h5 id="2-2-Rules的特点："><a href="#2-2-Rules的特点：" class="headerlink" title="2.2 Rules的特点："></a><strong>2.2 Rules的特点：</strong></h5><ul><li>一次设置，长期生效</li><li>定义了AI的”人设”和”行为模式”</li><li>适合长期稳定的需求</li></ul><h5 id="2-2-Rules的问题："><a href="#2-2-Rules的问题：" class="headerlink" title="2.2 Rules的问题："></a><strong>2.2 Rules的问题：</strong></h5><ul><li>只能定义”做什么”和”不做什么”，无法定义”怎么做”</li><li>无法包含复杂的操作步骤</li><li>仍然比较抽象</li></ul><h4 id="3-Skills（技能）"><a href="#3-Skills（技能）" class="headerlink" title="3. Skills（技能）"></a>3. Skills（技能）</h4><h5 id="3-1-定义："><a href="#3-1-定义：" class="headerlink" title="3.1 定义："></a><strong>3.1 定义</strong>：</h5><p>Skills即<strong>技能</strong>，是AI Agent具备的<strong>可复用、模块化、可执行的任务能力集合</strong>，是Agent突破大模型原生能力局限、完成实际业务场景任务的核心支撑。技能是将抽象的任务需求转化为具体可执行动作的标准化单元。</p><blockquote><p>Skills &#x3D; AI的超能力模板</p></blockquote><p><strong>举个例子：</strong></p><p>假设你经常需要从网页抓取数据并生成报告。</p><ul><li><strong>用Prompt</strong>：每次都要输入”帮我访问这个网页，提取XX数据，然后生成报告”</li><li><strong>用Rules</strong>：可以设定”你是个数据分析师，生成报告时要包含XX部分”</li><li><strong>用Skill</strong>：直接调用”网页数据抓取Skill”，它会自动完成访问→提取→分析→生成报告的全流程</li></ul><p>Agent的技能通常分为三类：</p><ul><li><strong>原生推理技能</strong>：基于大模型自身能力的基础技能，如文本理解、逻辑推理、内容总结、语言翻译；</li><li><strong>工具调用技能</strong>：对接外部系统&#x2F;工具的扩展技能，如数据库查询、API调用、文档检索（RAG）、代码执行、数据分析；</li><li><strong>自定义业务技能</strong>：针对特定行业场景封装的专属技能，如客服工单处理、财务报表生成、物流信息查询等。</li></ul><h5 id="3-2-一个Skill通常包含："><a href="#3-2-一个Skill通常包含：" class="headerlink" title="3.2 一个Skill通常包含："></a><strong>3.2 一个Skill通常包含：</strong></h5><ul><li><strong>Prompt模板</strong>：定义任务目标</li><li><strong>Rules</strong>：设定行为规范</li><li><strong>操作步骤</strong>：具体的执行流程</li><li><strong>工具调用</strong>：需要用到的外部工具或API</li><li><strong>输出格式</strong>：标准化的结果呈现</li></ul><h5 id="3-3-Skills的特点："><a href="#3-3-Skills的特点：" class="headerlink" title="3.3 Skills的特点："></a><strong>3.3 Skills的特点：</strong></h5><ul><li>完整性：从输入到输出的完整方案</li><li>可复用：一次创建，多次使用</li><li>可共享：可以被其他用户或Agent调用</li><li>可组合：多个Skill可以组合完成复杂任务</li></ul><h5 id="3-4-Skills的价值："><a href="#3-4-Skills的价值：" class="headerlink" title="3.4 Skills的价值："></a><strong>3.4 Skills的价值：</strong></h5><ul><li>不用每次都重新描述需求</li><li>保证了输出的质量和一致性</li><li>可以在社区中共享和交换</li><li>让AI真正成为你的”数字员工”</li></ul><h4 id="4-MCP（Model-Context-Protocol，模型上下文协议）"><a href="#4-MCP（Model-Context-Protocol，模型上下文协议）" class="headerlink" title="4. MCP（Model Context Protocol，模型上下文协议）"></a>4. MCP（Model Context Protocol，模型上下文协议）</h4><h5 id="4-1-定义："><a href="#4-1-定义：" class="headerlink" title="4.1 定义："></a><strong>4.1 定义</strong>：</h5><p>MCP（Model Context Protocol）是一个<strong>技术协议</strong>，它的作用是让AI能够安全、规范地访问外部数据和服务。<br>它定义了 Agent 与外部资源之间的通信格式、连接方式、权限校验、工具发现、结果返回的统一标准，解决了以往模型对接不同工具时格式混乱、安全不可控、集成成本高的问题，被称为 AI 与外部世界的 “通用接口标准”。</p><blockquote><p>MCP &#x3D; AI和世界连接的协议</p></blockquote><p>你可以把MCP理解成一套”插座标准”:</p><ul><li>AI是电器</li><li>外部系统（数据库、API、文件系统）是电源</li><li>MCP是插座标准</li></ul><h5 id="4-2-MCP解决的问题："><a href="#4-2-MCP解决的问题：" class="headerlink" title="4.2 MCP解决的问题："></a><strong>4.2 MCP解决的问题：</strong></h5><ul><li><strong>安全问题</strong>：如何让AI安全地访问敏感数据</li><li><strong>标准化问题</strong>：不同的系统用统一的方式连接</li><li><strong>权限管理</strong>：AI能做什么、不能做什么</li><li><strong>数据隔离</strong>：避免AI越界访问不该访问的内容</li></ul><h5 id="4-3-MCP与Skills的关系："><a href="#4-3-MCP与Skills的关系：" class="headerlink" title="4.3 MCP与Skills的关系："></a><strong>4.3 MCP与Skills的关系：</strong></h5><blockquote><p>Skills是”做什么”，MCP是”怎么安全地做”。</p></blockquote><p>一个Skill在执行过程中，如果需要访问外部系统，就会通过MCP协议来连接。</p><h3 id="二、Prompt、Rules、Skills、MCP之间的关系"><a href="#二、Prompt、Rules、Skills、MCP之间的关系" class="headerlink" title="二、Prompt、Rules、Skills、MCP之间的关系"></a>二、Prompt、Rules、Skills、MCP之间的关系</h3><p>四者构成<strong>「需求触发 → 规则校验 → 能力匹配 → 协议通信 → 结果返回」</strong>的完整闭环，是<strong>层级分工明确、依次协同、缺一不可</strong>的关系，下面从层级定位、动态工作流、两两关联三个维度详细说明。</p><h3 id="（一）层级定位关系：四层协同，自上而下驱动"><a href="#（一）层级定位关系：四层协同，自上而下驱动" class="headerlink" title="（一）层级定位关系：四层协同，自上而下驱动"></a>（一）层级定位关系：四层协同，自上而下驱动</h3><p>从任务执行的逻辑层级来看，四者形成清晰的自上而下的驱动与支撑结构，每一层都为下一层提供约束或输入，下一层为上一层提供执行保障：</p><p><img src="/image/article/2080005987/Prompt%E3%80%81Rules%E3%80%81Skills%E3%80%81MCP%E4%B9%8B%E9%97%B4%E7%9A%84%E5%85%B3%E7%B3%BB%E5%9B%BE.jpg" alt="Prompt、Rules、Skills、MCP之间的关系图"></p><ul><li><strong>Prompt</strong>：是你和AI对话的起点</li><li><strong>Rules</strong>：定义AI的基本行为规范</li><li><strong>Skills</strong>：封装了完整的任务解决方案</li><li><strong>MCP</strong>：让AI能够安全地连接外部世界</li></ul><table><thead><tr><th align="left">层级</th><th align="left">概念</th><th align="left">核心定位</th><th align="left">核心职责</th><th align="left">与其他层的关系</th></tr></thead><tbody><tr><td align="left">第1层（需求层）</td><td align="left"><strong>Prompt</strong></td><td align="left">任务发起者</td><td align="left">提出具体任务需求，传递上下文</td><td align="left">触发后续所有流程，是整个链路的源头</td></tr><tr><td align="left">第2层（管控层）</td><td align="left"><strong>Rules</strong></td><td align="left">行为约束者</td><td align="left">校验需求合规性，管控执行边界</td><td align="left">对 Prompt 的需求进行约束，同时限定 Skills 的调用范围与 MCP 的通信权限</td></tr><tr><td align="left">第3层（能力层）</td><td align="left"><strong>Skills</strong></td><td align="left">能力执行者</td><td align="left">匹配需求，提供具体业务能力</td><td align="left">响应 Prompt 的需求，受 Rules 约束，依赖 MCP 实现外部能力的落地</td></tr><tr><td align="left">第4层（通信层）</td><td align="left"><strong>MCP</strong></td><td align="left">标准连接器</td><td align="left">提供安全规范的外部通信通道</td><td align="left">为 Skills 提供标准化的外部调用接口，执行 Rules 中定义的权限与安全规则</td></tr></tbody></table><h3 id="（二）动态协同工作流：完整的-Agent-任务执行过程"><a href="#（二）动态协同工作流：完整的-Agent-任务执行过程" class="headerlink" title="（二）动态协同工作流：完整的 Agent 任务执行过程"></a>（二）动态协同工作流：完整的 Agent 任务执行过程</h3><p>结合实际业务场景，以「Agent 查询企业月度销售数据并生成报表」为例，完整演示四者的协作流程：</p><ol><li><p><strong>Prompt 发起需求</strong><br>用户输入 Prompt：「请查询我司2025年12月的销售数据，并生成一份Excel格式的销售报表」。<br>系统 Prompt 预先定义：「你是企业财务智能助手，仅可访问销售数据库，输出需合规，禁止泄露敏感数据」。</p></li><li><p><strong>Rules 执行合规校验</strong><br>Agent 基于预设 Rules 对 Prompt 进行校验：</p><ul><li>校验权限规则：确认该请求属于销售数据查询范畴，允许访问对应数据库；</li><li>校验合规规则：确认无敏感信息泄露风险，允许生成报表；</li><li>校验流程规则：规定需先查询数据，再生成报表，不可颠倒执行。<br>校验通过后，进入能力匹配环节。</li></ul></li><li><p><strong>Skills 匹配并发起能力调用</strong><br>Agent 根据 Prompt 需求，匹配对应的 Skills：</p><ul><li>匹配「销售数据库查询 Skill」：用于获取原始销售数据；</li><li>匹配「Excel 报表生成 Skill」：用于将数据格式化为报表。<br>此时，Skills 本身无法直接连接外部数据库和文件服务，需要依赖标准化的通信通道。</li></ul></li><li><p><strong>MCP 提供标准化通信支撑</strong><br>Skills 通过 <strong>MCP 协议</strong> 与外部资源进行安全交互：</p><ul><li>MCP 按照协议规范，封装数据库查询请求，携带身份与权限凭证；</li><li>MCP Server 端校验 Rules 中定义的访问权限，验证通过后执行查询；</li><li>查询结果通过 MCP 协议标准化返回给 Agent；</li><li>后续「Excel 报表生成 Skill」同样通过 MCP 协议，安全调用文件生成服务，完成报表制作。</li></ul></li><li><p><strong>结果输出与最终校验</strong><br>报表生成后，再次通过 Rules 校验输出格式与内容合规性，最终将结果返回给用户，完成整个任务闭环。</p></li></ol><h3 id="（三）两两之间的核心关联"><a href="#（三）两两之间的核心关联" class="headerlink" title="（三）两两之间的核心关联"></a>（三）两两之间的核心关联</h3><h4 id="1-Prompt-↔-Rules"><a href="#1-Prompt-↔-Rules" class="headerlink" title="1. Prompt ↔ Rules"></a>1. Prompt ↔ Rules</h4><ul><li>Prompt 提出任务需求，Rules 对该需求进行<strong>强制性约束与合规审查</strong>，决定该需求是否允许执行、以何种方式执行。</li><li>系统 Prompt 中通常会嵌入基础的 Rules 描述，而独立的 Rules 模块则是更工程化、可动态配置的约束体系，对 Prompt 形成补充和强管控。</li><li>若 Prompt 触发违规需求，Rules 会直接拦截，终止后续流程。</li></ul><h4 id="2-Prompt-↔-Skills"><a href="#2-Prompt-↔-Skills" class="headerlink" title="2. Prompt ↔ Skills"></a>2. Prompt ↔ Skills</h4><ul><li>Prompt 是 Skills 的<strong>唯一触发源</strong>，Skills 是实现 Prompt 需求的<strong>能力载体</strong>。</li><li>简单的 Prompt（如文本翻译）可仅依赖模型原生 Skills 完成；复杂的 Prompt（如查询数据、生成报表）必须调用外部扩展 Skills 才能落地。</li><li>Agent 会通过理解 Prompt 的语义，自动匹配并激活对应的 Skills。</li></ul><h4 id="3-Skills-↔-MCP"><a href="#3-Skills-↔-MCP" class="headerlink" title="3. Skills ↔ MCP"></a>3. Skills ↔ MCP</h4><ul><li>Skills 是<strong>能力的逻辑定义</strong>，MCP 是<strong>能力的物理执行通道</strong>。</li><li>所有需要访问外部工具、数据源的 Skills，都必须通过 MCP 协议完成通信，MCP 为 Skills 提供统一的调用标准、安全校验和结果解析。</li><li>MCP 解决了 Skills 对接外部资源的碎片化问题，让不同的 Skills 可以用同一套协议规范连接各类外部服务。</li></ul><h4 id="4-Rules-↔-MCP"><a href="#4-Rules-↔-MCP" class="headerlink" title="4. Rules ↔ MCP"></a>4. Rules ↔ MCP</h4><ul><li>Rules 定义<strong>权限与安全策略</strong>，MCP 负责<strong>落地执行这些策略</strong>。</li><li>Rules 中规定的“可访问的数据源”“可调用的工具列表”“传输加密要求”等，都会转化为 MCP 通信过程中的校验规则。</li><li>MCP 在建立连接、传输数据、返回结果的全流程中，都会实时遵循 Rules 的约束，确保通信行为合规安全。</li></ul><h4 id="5-Prompt-↔-MCP"><a href="#5-Prompt-↔-MCP" class="headerlink" title="5. Prompt ↔ MCP"></a>5. Prompt ↔ MCP</h4><ul><li>二者无直接交互，Prompt 不直接调用 MCP。</li><li>Prompt 通过触发 Skills，间接驱动 MCP 启动通信流程；MCP 的执行结果，最终会被整合后，以符合 Prompt 要求的形式返回给用户。</li></ul><h2 id="三、关系总结"><a href="#三、关系总结" class="headerlink" title="三、关系总结"></a>三、关系总结</h2><ol><li><strong>Prompt 是起点</strong>：提出任务需求，开启整个 Agent 执行流程，决定任务的目标与方向。</li><li><strong>Rules 是底线</strong>：全程管控行为边界与合规性，保障 Agent 安全、有序地执行任务，约束 Prompt、Skills、MCP 的所有行为。</li><li><strong>Skills 是核心能力</strong>：承接 Prompt 的需求，提供具体的业务执行能力，是 Agent 完成复杂任务的关键。</li><li><strong>MCP 是底层支撑</strong>：作为标准化通信协议，为 Skills 提供安全、规范的外部资源访问通道，是 Skills 落地外部能力的技术基础。</li></ol><p>整体而言，四者的关系可以概括为：<strong>Prompt 发令，Rules 把关，Skills 办事，MCP 铺路</strong>，共同构成了现代 AI Agent 从需求接收到任务完成的完整能力体系。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;在AI Agent、大模型应用开发的主流语境下，&lt;strong&gt;Prompt、Rules、Skills、MCP&lt;/strong&gt;是构建智能体能力体系的核心概念，彼此分工不同、相互依存，共同支撑智能体完成复杂任务。下面先给出每个概念的精准定义，再系统梳理它们之间的层级、协作与</summary>
      
    
    
    
    <category term="Agent开发" scheme="https://azusa-nya.github.io/category/Agent%E5%BC%80%E5%8F%91/"/>
    
    <category term="Prompt" scheme="https://azusa-nya.github.io/category/Agent%E5%BC%80%E5%8F%91/Prompt/"/>
    
    <category term="rules" scheme="https://azusa-nya.github.io/category/Agent%E5%BC%80%E5%8F%91/rules/"/>
    
    <category term="skills" scheme="https://azusa-nya.github.io/category/Agent%E5%BC%80%E5%8F%91/skills/"/>
    
    <category term="mcp" scheme="https://azusa-nya.github.io/category/Agent%E5%BC%80%E5%8F%91/mcp/"/>
    
    
    <category term="Agent" scheme="https://azusa-nya.github.io/tag/Agent/"/>
    
    <category term="Prompt" scheme="https://azusa-nya.github.io/tag/Prompt/"/>
    
    <category term="rules" scheme="https://azusa-nya.github.io/tag/rules/"/>
    
    <category term="skills" scheme="https://azusa-nya.github.io/tag/skills/"/>
    
    <category term="mcp" scheme="https://azusa-nya.github.io/tag/mcp/"/>
    
  </entry>
  
  <entry>
    <title>java中的数据结构</title>
    <link href="https://azusa-nya.github.io/article/2946991822/"/>
    <id>https://azusa-nya.github.io/article/2946991822/</id>
    <published>2026-01-29T08:24:56.000Z</published>
    <updated>2026-01-29T08:57:03.662Z</updated>
    
    <content type="html"><![CDATA[<p>Java 中数据结构的使用主要分<strong>两大层面</strong>：一是<strong>原生基础数据结构</strong>（Java 语言直接支持，是所有高级结构的底层基石），二是<strong>集合框架封装的常用数据结构</strong>（Java 官方封装好、开箱即用，也是实际开发中最常使用的，无需自己手动实现）；此外还有<strong>并发包专用的高级数据结构</strong>（适配多线程场景）。</p><p>这些数据结构覆盖了开发中绝大多数场景，且 Java 对底层复杂逻辑（如红黑树旋转、哈希冲突解决）做了高度封装，开发者只需关注<strong>使用场景</strong>而非底层实现，下面按「基础→核心常用→并发专用」的逻辑梳理，同时结合<strong>实际使用类</strong>和<strong>适用场景</strong>说明，贴合开发实际。</p><h3 id="一、Java-原生基础数据结构（底层基石）"><a href="#一、Java-原生基础数据结构（底层基石）" class="headerlink" title="一、Java 原生基础数据结构（底层基石）"></a>一、Java 原生基础数据结构（底层基石）</h3><p>这类结构是 Java 语言本身支持的，无专门的类，但会被所有高级集合底层大量使用，是理解集合框架的基础。</p><ol><li><p><strong>数组（Array）</strong></p><ul><li>特点：<strong>连续内存存储</strong>、固定长度、支持<strong>随机访问</strong>（通过索引 <code>O(1)</code> 取值）、增删元素需移动数据（<code>O(n)</code> 效率）。</li><li>Java 中使用：直接声明 <code>int[] arr</code>、<code>String[] strs</code>，或泛型数组 <code>T[]</code>（需反射创建）。</li><li>应用：ArrayList、ArrayDeque、HashMap（数组+链表&#x2F;红黑树）的底层核心。</li></ul></li><li><p><strong>链表（Linked List）</strong></p><ul><li>特点：<strong>非连续内存存储</strong>（节点通过指针&#x2F;引用连接）、长度动态、增删节点仅需修改引用（<code>O(1)</code> 效率）、查询需遍历（<code>O(n)</code> 效率）。</li><li>Java 中无原生链表类，但底层大量实现：<strong>双向链表</strong>是主流（LinkedList、LinkedHashMap、LinkedHashSet 底层），单向链表仅在早期 HashMap 中使用（JDK8 后已优化）。</li><li>核心节点结构：包含「数据域」+「前驱节点引用」+「后继节点引用」（双向链表）。</li></ul></li></ol><h3 id="二、Java-集合框架核心数据结构（开发中最常使用）"><a href="#二、Java-集合框架核心数据结构（开发中最常使用）" class="headerlink" title="二、Java 集合框架核心数据结构（开发中最常使用）"></a>二、Java 集合框架核心数据结构（开发中最常使用）</h3><p>Java 集合框架（<code>java.util</code> 包）是数据结构的核心应用，分为<strong>Collection</strong>（单列集合）和<strong>Map</strong>（双列键值对集合）两大根接口，所有实现类都封装了具体的数据结构，<strong>无需自己手动实现链表&#x2F;红黑树&#x2F;哈希表</strong>，直接用即可。</p><p><img src="/image/article/2946991822/Collection.png" alt="Collection"></p><p><img src="/image/article/2946991822/Map.png" alt="Map"></p><h4 id="（一）Collection-接口下的结构（List-Set-Queue）"><a href="#（一）Collection-接口下的结构（List-Set-Queue）" class="headerlink" title="（一）Collection 接口下的结构（List&#x2F;Set&#x2F;Queue）"></a>（一）Collection 接口下的结构（List&#x2F;Set&#x2F;Queue）</h4><h5 id="1-有序可重复：List-接口"><a href="#1-有序可重复：List-接口" class="headerlink" title="1. 有序可重复：List 接口"></a>1. 有序可重复：List 接口</h5><p>对应 2 种核心数据结构，覆盖「查询多」和「增删多」两种核心场景：</p><table><thead><tr><th>实现类</th><th>底层数据结构</th><th>核心特点</th><th>适用场景</th></tr></thead><tbody><tr><td>ArrayList</td><td>动态扩容数组</td><td>查询快、尾插快、中间增删慢</td><td>绝大多数场景（查询远多于增删）</td></tr><tr><td>LinkedList</td><td>双向链表（双端队列）</td><td>增删快、查询慢、支持栈&#x2F;队列</td><td>频繁在中间增删、需栈&#x2F;队列功能</td></tr></tbody></table><blockquote><p>注：Vector 是 ArrayList 的线程安全版（底层也是动态数组），但效率低，开发中几乎不用，被 ConcurrentArrayList 替代。</p></blockquote><h5 id="2-无序不可重复：Set-接口"><a href="#2-无序不可重复：Set-接口" class="headerlink" title="2. 无序不可重复：Set 接口"></a>2. 无序不可重复：Set 接口</h5><p>Set 本身不存数据，<strong>底层依赖 Map 实现</strong>（用 Map 的键存值，值为固定空对象），核心是<strong>去重</strong>，对应 3 种结构：</p><table><thead><tr><th>实现类</th><th>底层依赖的 Map</th><th>底层数据结构</th><th>核心特点</th><th>适用场景</th></tr></thead><tbody><tr><td>HashSet</td><td>HashMap</td><td>哈希表（数组+链表+红黑树）</td><td>无序、去重、查询&#x2F;增删快</td><td>仅需去重，无需有序</td></tr><tr><td>LinkedHashSet</td><td>LinkedHashMap</td><td>哈希表+双向链表</td><td>有序（插入顺序）、去重</td><td>去重且需保留插入顺序</td></tr><tr><td>TreeSet</td><td>TreeMap</td><td>红黑树（自平衡二叉搜索树）</td><td>有序（自然&#x2F;自定义排序）</td><td>去重且需排序</td></tr></tbody></table><h5 id="3-队列-双端队列：Queue-Deque-接口"><a href="#3-队列-双端队列：Queue-Deque-接口" class="headerlink" title="3. 队列&#x2F;双端队列：Queue&#x2F;Deque 接口"></a>3. 队列&#x2F;双端队列：Queue&#x2F;Deque 接口</h5><p>用于「先进先出（FIFO）」或「双端操作」场景，底层以<strong>循环数组</strong>和<strong>双向链表</strong>为主（循环数组效率更高）：</p><table><thead><tr><th>实现类</th><th>底层数据结构</th><th>核心特点</th><th>适用场景</th></tr></thead><tbody><tr><td>ArrayDeque</td><td>循环数组</td><td>无容量限制、两端操作快</td><td>替代 Stack 做栈、普通队列</td></tr><tr><td>LinkedList</td><td>双向链表</td><td>支持两端操作、可存null</td><td>需存null的队列场景</td></tr><tr><td>PriorityQueue</td><td>堆（默认小顶堆）</td><td>有序（优先级排序）</td><td>按优先级取数据（如任务调度）</td></tr></tbody></table><blockquote><p>注：Stack 类（Java 原生栈）底层是 Vector（动态数组），效率低且设计有缺陷，<strong>开发中推荐用 ArrayDeque 替代</strong>（调用 <code>push/pop/peek</code> 方法即可实现栈的功能）。</p></blockquote><h4 id="（二）Map-接口下的结构（双列键值对，核心去重-映射）"><a href="#（二）Map-接口下的结构（双列键值对，核心去重-映射）" class="headerlink" title="（二）Map 接口下的结构（双列键值对，核心去重+映射）"></a>（二）Map 接口下的结构（双列键值对，核心去重+映射）</h4><p>Map 是开发中使用频率最高的集合（如存储配置、缓存、对象映射），核心是<strong>键唯一</strong>，值可重复，底层以<strong>哈希表</strong>为主，红黑树为辅，主流实现类如下：</p><table><thead><tr><th>实现类</th><th>底层数据结构</th><th>核心特点</th><th>适用场景</th></tr></thead><tbody><tr><td>HashMap</td><td>哈希表（JDK8+：数组+链表+红黑树）</td><td>无序、键值可存null、查询&#x2F;增删快（O(1)）</td><td>绝大多数键值对场景（非并发）</td></tr><tr><td>LinkedHashMap</td><td>HashMap+双向链表</td><td>有序（插入&#x2F;访问顺序）、键值可存null</td><td>需保留键的插入&#x2F;访问顺序（如LRU缓存）</td></tr><tr><td>TreeMap</td><td>红黑树</td><td>有序（键的自然&#x2F;自定义排序）、键不可存null</td><td>键值对需按键排序</td></tr><tr><td>Hashtable</td><td>哈希表（数组+链表）</td><td>线程安全、键值不可存null、效率低</td><td>几乎不用（被 ConcurrentHashMap 替代）</td></tr></tbody></table><blockquote><p>关键知识点：HashMap 是核心，JDK8 对其做了重大优化——当哈希冲突导致链表长度超过<strong>8</strong>，且数组长度≥<strong>64</strong>时，链表会转为<strong>红黑树</strong>，将查询效率从 <code>O(n)</code> 提升到 <code>O(logn)</code>。</p></blockquote><h3 id="三、Java-并发包中的专用数据结构（多线程场景）"><a href="#三、Java-并发包中的专用数据结构（多线程场景）" class="headerlink" title="三、Java 并发包中的专用数据结构（多线程场景）"></a>三、Java 并发包中的专用数据结构（多线程场景）</h3><p>在多线程开发中，普通集合（如 ArrayList、HashMap）是非线程安全的，Java 并发包（<code>java.util.concurrent</code>，简称 JUC）封装了<strong>线程安全的高级数据结构</strong>，底层结合了 CAS、分段锁、无锁算法等，同时封装了特殊结构（如跳表、阻塞队列），核心常用如下：</p><h4 id="1-并发-Map-结构"><a href="#1-并发-Map-结构" class="headerlink" title="1. 并发 Map 结构"></a>1. 并发 Map 结构</h4><table><thead><tr><th>实现类</th><th>底层数据结构</th><th>线程安全实现方式</th><th>适用场景</th></tr></thead><tbody><tr><td>ConcurrentHashMap</td><td>哈希表（数组+链表+红黑树）</td><td>JDK8+：CAS + 局部Synchronized</td><td>高并发下的键值对场景（核心推荐）</td></tr><tr><td>ConcurrentSkipListMap</td><td>跳表（SkipList）</td><td>无锁算法</td><td>高并发+需有序的键值对场景</td></tr></tbody></table><blockquote><p>跳表：一种<strong>有序的高效查找结构</strong>，底层是「多层链表」，查询效率 <code>O(logn)</code>，比红黑树实现更简单，适合并发场景。</p></blockquote><h4 id="2-并发队列-阻塞队列（JUC-核心，多线程通信）"><a href="#2-并发队列-阻塞队列（JUC-核心，多线程通信）" class="headerlink" title="2. 并发队列&#x2F;阻塞队列（JUC 核心，多线程通信）"></a>2. 并发队列&#x2F;阻塞队列（JUC 核心，多线程通信）</h4><p>阻塞队列（BlockingQueue）是多线程通信的核心（如生产者-消费者模型），底层为<strong>循环数组</strong>或<strong>双向链表</strong>，支持「满时阻塞生产者、空时阻塞消费者」，核心实现：</p><table><thead><tr><th>实现类</th><th>底层数据结构</th><th>核心特点</th><th>适用场景</th></tr></thead><tbody><tr><td>ArrayBlockingQueue</td><td>循环数组（有界）</td><td>固定容量、效率高</td><td>需限制队列大小的生产消费</td></tr><tr><td>LinkedBlockingQueue</td><td>双向链表（无界&#x2F;有界）</td><td>容量可选、吞吐量高</td><td>无固定容量限制的生产消费</td></tr><tr><td>SynchronousQueue</td><td>无底层存储（中转）</td><td>生产消费直接交换</td><td>高吞吐、低延迟的线程通信</td></tr><tr><td>DelayQueue</td><td>堆</td><td>按延迟时间排序</td><td>定时任务（如超时订单处理）</td></tr></tbody></table><p>此外还有<strong>无锁并发队列</strong>（ConcurrentLinkedQueue&#x2F;ConcurrentLinkedDeque），底层为<strong>双向链表</strong>，基于 CAS 实现，适合高并发但无需阻塞的场景。</p><h3 id="四、Java-中少见但实用的特殊数据结构"><a href="#四、Java-中少见但实用的特殊数据结构" class="headerlink" title="四、Java 中少见但实用的特殊数据结构"></a>四、Java 中少见但实用的特殊数据结构</h3><p>除上述核心结构外，Java 还在特定包中实现了一些小众但实用的结构，适用于特殊场景：</p><ol><li><strong>位图（BitSet）</strong>：<code>java.util.BitSet</code>，底层是<strong>长整型数组</strong>，用二进制位存储数据，适合「海量数据去重、状态标记」（如判断 1000 万个数中是否存在某个数，占用内存极少）。</li><li><strong>堆（Heap）</strong>：Java 无原生堆类，但 <strong>PriorityQueue</strong> 是堆的实现（默认小顶堆，可通过比较器改为大顶堆），适用于TopK、优先级排序场景。</li><li><strong>红黑树（Red-Black Tree）</strong>：Java 无原生红黑树类，但 <strong>TreeMap&#x2F;TreeSet</strong> 底层是红黑树，是自平衡的二叉搜索树，保证增删查的效率均为 <code>O(logn)</code>。</li><li><strong>哈希表（Hash Table）</strong>：Java 无原生哈希表类，但 <strong>HashMap&#x2F;HashSet&#x2F;Hashtable</strong> 都是哈希表的实现，核心是「哈希函数+数组+冲突解决」（JDK8 后用链表+红黑树解决冲突）。</li></ol><h3 id="五、Java-数据结构核心使用原则（开发避坑）"><a href="#五、Java-数据结构核心使用原则（开发避坑）" class="headerlink" title="五、Java 数据结构核心使用原则（开发避坑）"></a>五、Java 数据结构核心使用原则（开发避坑）</h3><ol><li><strong>查询多、增删少→用数组结构（ArrayList）</strong>，增删多、查询少→用链表结构（LinkedList）；</li><li><strong>仅去重→HashSet</strong>，去重+有序→LinkedHashSet，去重+排序→TreeSet；</li><li><strong>普通键值对→HashMap</strong>，键值对+有序→LinkedHashMap&#x2F;TreeMap，高并发键值对→ConcurrentHashMap；</li><li><strong>栈&#x2F;队列→优先用 ArrayDeque</strong>（替代 Stack、LinkedList），优先级队列→PriorityQueue；</li><li><strong>多线程场景→必须用 JUC 包的并发结构</strong>，禁止用普通集合（如 ArrayList、HashMap）加锁（效率低且易出问题）；</li><li><strong>海量数据去重&#x2F;状态标记→BitSet</strong>（比 HashSet 节省百倍内存）。</li></ol><h3 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h3><p>Java 中数据结构的使用<strong>无需手动实现底层</strong>，核心是<strong>根据场景选择集合框架的实现类</strong>，关键记住「集合类→底层数据结构→核心特点」的对应关系，核心梳理如下：</p><ol><li><strong>基础底层</strong>：数组、双向链表（所有高级集合的基石）；</li><li><strong>核心常用</strong>：哈希表（HashMap&#x2F;HashSet）、动态数组（ArrayList）、双向链表（LinkedList）、红黑树（TreeMap&#x2F;TreeSet）、堆（PriorityQueue）、循环数组（ArrayDeque）；</li><li><strong>并发专用</strong>：CAS 实现的哈希表（ConcurrentHashMap）、跳表（ConcurrentSkipListMap）、阻塞队列（ArrayBlockingQueue&#x2F;LinkedBlockingQueue）；</li><li><strong>特殊场景</strong>：位图（BitSet）、无锁队列（ConcurrentLinkedQueue）。</li></ol><p>实际开发中，<strong>ArrayList、HashMap、HashSet、ArrayDeque</strong> 是使用频率最高的四个类，覆盖了 80% 以上的常规场景，掌握它们的底层结构和使用场景，就掌握了 Java 数据结构的核心。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;Java 中数据结构的使用主要分&lt;strong&gt;两大层面&lt;/strong&gt;：一是&lt;strong&gt;原生基础数据结构&lt;/strong&gt;（Java 语言直接支持，是所有高级结构的底层基石），二是&lt;strong&gt;集合框架封装的常用数据结构&lt;/strong&gt;（Java 官方封装好、开</summary>
      
    
    
    
    <category term="Java" scheme="https://azusa-nya.github.io/category/Java/"/>
    
    <category term="Java基础" scheme="https://azusa-nya.github.io/category/Java/Java%E5%9F%BA%E7%A1%80/"/>
    
    <category term="数据结构" scheme="https://azusa-nya.github.io/category/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
    
    
    <category term="Java" scheme="https://azusa-nya.github.io/tag/Java/"/>
    
    <category term="Java基础" scheme="https://azusa-nya.github.io/tag/Java%E5%9F%BA%E7%A1%80/"/>
    
    <category term="数据结构" scheme="https://azusa-nya.github.io/tag/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
    
  </entry>
  
</feed>
