PageSourceSearch

https://www.wensi.ai/assets/02-core-features.html-DdCLI2dS.js

js wensi.ai collected 2026-10-05 13:24:16 UTC 173,101 bytes, 708 lines download raw bytes

1import{_ as l,c,b as i,a,e as s,d as t,w as e,r as o,o as u}from"./app-BNAFTfp7.js";const r={};function k(d,n){const p=o("RouteLink");return u(),c("div",null,[n[11]||(n[11]=i(`<h1 id="_02-codex-核心特点详解" tabindex="-1"><a class="header-anchor" href="#_02-codex-核心特点详解"><span>02 - Codex 核心特点详解</span></a></h1><blockquote><p>深入理解 Codex 的核心能力,掌握 AI 代码生成的技术本质</p></blockquote><h2 id="📋-本章目标" tabindex="-1"><a class="header-anchor" href="#📋-本章目标"><span>📋 本章目标</span></a></h2><p>学完本章,你将能够:</p><ul><li>理解 Codex 的核心技术特点</li><li>掌握不同代码生成模式的应用场景</li><li>了解多语言支持的深度和广度</li><li>理解上下文管理的重要性</li><li>区分 Codex 与传统工具的本质差异</li></ul><hr><h2 id="🎯-核心能力概览" tabindex="-1"><a class="header-anchor" href="#🎯-核心能力概览"><span>🎯 核心能力概览</span></a></h2><h3 id="codex-的六大核心能力" tabindex="-1"><a class="header-anchor" href="#codex-的六大核心能力"><span>Codex 的六大核心能力</span></a></h3><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">┌─────────────────────────────────────────┐</span>
2<span class="line">│           Codex 核心能力矩阵              │</span>
3<span class="line">├─────────────────────────────────────────┤</span>
4<span class="line">│                                         │</span>
5<span class="line">│  1️⃣ 代码生成      2️⃣ 代码理解         │</span>
6<span class="line">│     ↓                  ↓                │</span>
7<span class="line">│  描述→代码         代码→解释             │</span>
8<span class="line">│                                         │</span>
9<span class="line">│  3️⃣ 代码补全      4️⃣ 代码转换         │</span>
10<span class="line">│     ↓                  ↓                │</span>
11<span class="line">│  自动续写          跨语言翻译            │</span>
12<span class="line">│                                         │</span>
13<span class="line">│  5️⃣ Bug修复       6️⃣ 测试生成         │</span>
14<span class="line">│     ↓                  ↓                │</span>
15<span class="line">│  错误诊断          自动化测试            │</span>
16<span class="line">│                                         │</span>
17<span class="line">└─────────────────────────────────────────┘</span>
18<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="_1️⃣-代码生成能力" tabindex="-1"><a class="header-anchor" href="#_1️⃣-代码生成能力"><span>1️⃣ 代码生成能力</span></a></h2><h3 id="什么是代码生成" tabindex="-1"><a class="header-anchor" href="#什么是代码生成"><span>什么是代码生成?</span></a></h3><p><strong>定义</strong>:根据自然语言描述或简单提示,生成完整的可执行代码。</p><h3 id="生成范围" tabindex="-1"><a class="header-anchor" href="#生成范围"><span>生成范围</span></a></h3><table><thead><tr><th>
18范围</th><th>说明</th><th>难度</th><th>准确率</th></tr></thead><tbody><tr><td><strong>单行代码</strong></td><td>一行简单语句</td><td>⭐</td><td>95%+</td></tr><tr><td><strong>函数/方法</strong></td><td>完整函数实现</td><td>⭐⭐</td><td>90%+</td></tr><tr><td><strong>类/模块</strong></td><td>完整类或模块</td><td>⭐⭐⭐</td><td>85%+</td></tr><tr><td><strong>多文件项目</strong></td><td>项目级别代码</td><td>⭐⭐⭐⭐</td><td>75%+</td></tr><tr><td><strong>完整应用</strong></td><td>端到端应用</td><td>⭐⭐⭐⭐⭐</td><td>60%+</td></tr></tbody></table><h3 id="实战示例" tabindex="-1"><a class="header-anchor" href="#实战示例"><span>实战示例</span></a></h3><h4 id="示例-1-函数级生成" tabindex="-1"><a class="header-anchor" href="#示例-1-函数级生成"><span>示例 1:函数级生成</span></a></h4><p><strong>输入</strong>:</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">创建一个 Python 函数,将 RGB 颜色转换为十六进制格式</span>
19<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p><strong>输出</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">rgb_to_hex</span><span class="token punctuation">(</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
20<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;</span>
21<span class="line">    将 RGB 颜色值转换为十六进制格式</span>
22<span class="line">    </span>
23<span class="line">    Args:</span>
24<span class="line">        r (int): 红色值 (0-255)</span>
25<span class="line">        g (int): 绿色值 (0-255)</span>
26<span class="line">        b (int): 蓝色值 (0-255)</span>
27<span class="line">    </span>
28<span class="line">    Returns:</span>
29<span class="line">        str: 十六进制颜色代码 (如 &#39;#FF5733&#39;)</span>
30<span class="line">    </span>
31<span class="line">    Raises:</span>
32<span class="line">        ValueError: 如果任何值不在 0-255 范围内</span>
33<span class="line">    &quot;&quot;&quot;</span></span>
34<span class="line">    <span class="token comment"># 验证输入范围</span></span>
35<span class="line">    <span class="token keyword">if</span> <span class="token keyword">not</span> <span class="token builtin">all</span><span class="token punctuation">(</span><span class="token number">0</span> <span class="token operator">&lt;=</span> val <span class="token operator">&lt;=</span> <span class="token number">255</span> <span class="token keyword">for</span> val <span class="token keyword">in</span> <span class="token punctuation">[</span>r<span class="token punctuation">,</span> g<span class="token punctuation">,</span> b<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">:</span></span>
36<span class="line">        <span class="token keyword">raise</span> ValueError<span class="token punctuation">(</span><span class="token string">&quot;RGB 值必须在 0-255 范围内&quot;</span><span class="token punctuation">)</span></span>
37<span class="line">    </span>
38<span class="line">    <span class="token comment"># 转换为十六进制并格式化</span></span>
39<span class="line">    <span class="token keyword">return</span> <span class="token string-interpolation"><span class="token string">f&#39;#</span><span class="token interpolation"><span class="token punctuation">{</span>r<span class="token punctuation">:</span><span class="token format-spec">02x</span><span class="token punctuation">}</span></span><span class="token interpolation"><span class="token punctuation">{</span>g<span class="token punctuation">:</span><span class="token format-spec">02x</span><span class="token punctuation">}</span></span><span class="token interpolation"><span class="token punctuation">{</span>b<span class="token punctuation">:</span><span class="token format-spec">02x</span><span class="token punctuation">}</span></span><span class="token string">&#39;</span></span><span class="token punctuation">.</span>upper<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
40<span class="line"></span>
41<span class="line"><span class="token comment"># 测试</span></span>
42<span class="line"><span class="token keyword">print</span><span class="token punctuation">(</span>rgb_to_hex<span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">87</span><span class="token punctuation">,</span> <span class="token number">51</span><span class="token punctuation">)</span><span class="token punctuation">)</span>  <span class="token comment"># #FF5733</span></span>
43<span class="line"><span class="token keyword">print</span><span class="token punctuation">(</span>rgb_to_hex<span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span>
43      <span class="token comment"># #000000</span></span>
44<span class="line"><span class="token keyword">print</span><span class="token punctuation">(</span>rgb_to_hex<span class="token punctuation">(</span><span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">,</span> <span class="token number">255</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># #FFFFFF</span></span>
45<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="示例-2-类级生成" tabindex="-1"><a class="header-anchor" href="#示例-2-类级生成"><span>示例 2:类级生成</span></a></h4><p><strong>输入</strong>:</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">创建一个 TypeScript 类,实现 LRU 缓存,支持 get 和 put 操作</span>
46<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p><strong>输出</strong>:</p><div class="language-typescript line-numbers-mode" data-highlighter="prismjs" data-ext="ts"><pre><code class="language-typescript"><span class="line"><span class="token keyword">class</span> <span class="token class-name">LRUCache<span class="token operator">&lt;</span><span class="token constant">K</span><span class="token punctuation">,</span> <span class="token constant">V</span><span class="token operator">&gt;</span></span> <span class="token punctuation">{</span></span>
47<span class="line">  <span class="token keyword">private</span> capacity<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">;</span></span>
48<span class="line">  <span class="token keyword">private</span> cache<span class="token operator">:</span> Map<span class="token operator">&lt;</span><span class="token constant">K</span><span class="token punctuation">,</span> <span class="token constant">V</span><span class="token operator">&gt;</span><span class="token punctuation">;</span></span>
49<span class="line"></span>
50<span class="line">  <span class="token function">constructor</span><span class="token punctuation">(</span>capacity<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
51<span class="line">    <span class="token keyword">if</span> <span class="token punctuation">(</span>capacity <span class="token operator">&lt;=</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
52<span class="line">      <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">Error</span><span class="token punctuation">(</span><span class="token string">&#39;Capacity must be positive&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
53<span class="line">    <span class="token punctuation">}</span></span>
54<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>capacity <span class="token operator">=</span> capacity<span class="token punctuation">;</span></span>
55<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>cache <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Map<span class="token operator">&lt;</span><span class="token constant">K</span><span class="token punctuation">,</span> <span class="token constant">V</span><span class="token operator">&gt;</span></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
56<span class="line">  <span class="token punctuation">}</span></span>
57<span class="line"></span>
58<span class="line">  <span class="token doc-comment comment">/**</span>
59<span class="line">   * 获取缓存值</span>
60<span class="line">   * <span class="token keyword">@param</span> <span class="token parameter">key</span> 键</span>
61<span class="line">   * <span class="token keyword">@returns</span> 值,如果不存在返回 undefined</span>
62<span class="line">   */</span></span>
63<span class="line">  <span class="token function">
63get</span><span class="token punctuation">(</span>key<span class="token operator">:</span> <span class="token constant">K</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token constant">V</span> <span class="token operator">|</span> <span class="token keyword">undefined</span> <span class="token punctuation">{</span></span>
64<span class="line">    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span><span class="token keyword">this</span><span class="token punctuation">.</span>cache<span class="token punctuation">.</span><span class="token function">has</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
65<span class="line">      <span class="token keyword">return</span> <span class="token keyword">undefined</span><span class="token punctuation">;</span></span>
66<span class="line">    <span class="token punctuation">}</span></span>
67<span class="line"></span>
68<span class="line">    <span class="token comment">// 移动到最新位置(删除后重新插入)</span></span>
69<span class="line">    <span class="token keyword">const</span> value <span class="token operator">=</span> <span class="token keyword">this</span><span class="token punctuation">.</span>cache<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token operator">!</span><span class="token punctuation">;</span></span>
70<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>cache<span class="token punctuation">.</span><span class="token function">delete</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
71<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>cache<span class="token punctuation">.</span><span class="token function">set</span><span class="token punctuation">(</span>key<span class="token punctuation">,</span> value<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
72<span class="line"></span>
73<span class="line">    <span class="token keyword">return</span> value<span class="token punctuation">;</span></span>
74<span class="line">  <span class="token punctuation">}</span></span>
75<span class="line"></span>
76<span class="line">  <span class="token doc-comment comment">/**</span>
77<span class="line">   * 设置缓存值</span>
78<span class="line">   * <span class="token keyword">@param</span> <span class="token parameter">key</span> 键</span>
79<span class="line">   * <span class="token keyword">@param</span> <span class="token parameter">value</span> 值</span>
80<span class="line">   */</span></span>
81<span class="line">  <span class="token function">put</span><span class="token punctuation">(</span>key<span class="token operator">:</span> <span class="token constant">K</span><span class="token punctuation">,</span> value<span class="token operator">:</span> <span class="token constant">V</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token keyword">void</span> <span class="token punctuation">{</span></span>
82<span class="line">    <span class="token comment">// 如果键已存在,先删除</span></span>
83<span class="line">    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>cache<span class="token punctuation">.</span><span class="token function">has</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
84<span class="line">      <span class="token keyword">this</span><span class="token punctuation">.</span>cache<span class="token punctuation">.</span><span class="token function">delete</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
85<span class="line">    <span class="token punctuation">}</span></span>
86<span class="line"></span>
87<span class="line">    <span class="token comment">// 添加新键值对</span></span>
88<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>cache<span class="token punctuation">.</span><span class="token function">set</span><span class="token punctuation">(</span>key<span class="token punctuation">,</span> value<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
89<span class="line"></span>
90<span class="line">    <span class="token comment">// 如果超出容量,删除最旧的项(Map 的第一项)</span></span>
91<span class="line">    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>cache<span class="token punctuation">.</span>
91size <span class="token operator">&gt;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>capacity<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
92<span class="line">      <span class="token keyword">const</span> oldestKey <span class="token operator">=</span> <span class="token keyword">this</span><span class="token punctuation">.</span>cache<span class="token punctuation">.</span><span class="token function">keys</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>value<span class="token punctuation">;</span></span>
93<span class="line">      <span class="token keyword">this</span><span class="token punctuation">.</span>cache<span class="token punctuation">.</span><span class="token function">delete</span><span class="token punctuation">(</span>oldestKey<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
94<span class="line">    <span class="token punctuation">}</span></span>
95<span class="line">  <span class="token punctuation">}</span></span>
96<span class="line"></span>
97<span class="line">  <span class="token doc-comment comment">/**</span>
98<span class="line">   * 获取当前缓存大小</span>
99<span class="line">   */</span></span>
100<span class="line">  <span class="token function">size</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token builtin">number</span> <span class="token punctuation">{</span></span>
101<span class="line">    <span class="token keyword">return</span> <span class="token keyword">this</span><span class="token punctuation">.</span>cache<span class="token punctuation">.</span>size<span class="token punctuation">;</span></span>
102<span class="line">  <span class="token punctuation">}</span></span>
103<span class="line"></span>
104<span class="line">  <span class="token doc-comment comment">/**</span>
105<span class="line">   * 清空缓存</span>
106<span class="line">   */</span></span>
107<span class="line">  <span class="token function">clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token keyword">void</span> <span class="token punctuation">{</span></span>
108<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>cache<span class="token punctuation">.</span><span class="token function">clear</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
109<span class="line">  <span class="token punctuation">}</span></span>
110<span class="line"><span class="token punctuation">}</span></span>
111<span class="line"></span>
112<span class="line"><span class="token comment">// 使用示例</span></span>
113<span class="line"><span class="token keyword">const</span> cache <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">LRUCache<span class="token operator">&lt;</span><span class="token builtin">string</span><span class="token punctuation">,</span> <span class="token builtin">number</span><span class="token operator">&gt;</span></span><span class="token punctuation">(</span><span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
114<span class="line">cache<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">&#39;a&#39;</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
115<span class="line">cache<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">&#39;b&#39;</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
116<span class="line">cache<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">&#39;c&#39;</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
117<span class="line"><span class="token builtin">console</span><span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>cache<span class="token punctuation">.</span><span class="token function">
117get</span><span class="token punctuation">(</span><span class="token string">&#39;a&#39;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 1</span></span>
118<span class="line">cache<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">&#39;d&#39;</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 淘汰 &#39;b&#39;</span></span>
119<span class="line"><span class="token builtin">console</span><span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>cache<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string">&#39;b&#39;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// undefined</span></span>
120<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="示例-3-模块级生成" tabindex="-1"><a class="header-anchor" href="#示例-3-模块级生成"><span>示例 3:模块级生成</span></a></h4><p><strong>输入</strong>:</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">创建一个 Node.js 模块,实现限流中间件(令牌桶算法)</span>
121<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><p><strong>输出</strong>:</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token doc-comment comment">/**</span>
122<span class="line"> * 令牌桶限流中间件</span>
123<span class="line"> * <span class="token keyword">@module</span> rate-limiter</span>
124<span class="line"> */</span></span>
125<span class="line"></span>
126<span class="line"><span class="token keyword">class</span> <span class="token class-name">TokenBucket</span> <span class="token punctuation">{</span></span>
127<span class="line">  <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token parameter">capacity<span class="token punctuation">,</span> refillRate</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
128<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>capacity <span class="token operator">=</span> capacity<span class="token punctuation">;</span>
128        <span class="token comment">// 桶容量</span></span>
129<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>tokens <span class="token operator">=</span> capacity<span class="token punctuation">;</span>          <span class="token comment">// 当前令牌数</span></span>
130<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>refillRate <span class="token operator">=</span> refillRate<span class="token punctuation">;</span>    <span class="token comment">// 每秒补充的令牌数</span></span>
131<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>lastRefill <span class="token operator">=</span> Date<span class="token punctuation">.</span><span class="token function">now</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>    <span class="token comment">// 上次补充时间</span></span>
132<span class="line">  <span class="token punctuation">}</span></span>
133<span class="line"></span>
134<span class="line">  <span class="token doc-comment comment">/**</span>
135<span class="line">   * 尝试消耗一个令牌</span>
136<span class="line">   * <span class="token keyword">@returns</span> <span class="token class-name"><span class="token punctuation">{</span>boolean<span class="token punctuation">}</span></span> 是否成功获取令牌</span>
137<span class="line">   */</span></span>
138<span class="line">  <span class="token function">consume</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
139<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">refill</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
140<span class="line"></span>
141<span class="line">    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>tokens <span class="token operator">&gt;=</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
142<span class="line">      <span class="token keyword">this</span><span class="token punctuation">.</span>tokens <span class="token operator">-=</span> <span class="token number">1</span><span class="token punctuation">;</span></span>
143<span class="line">      <span class="token keyword">return</span> <span class="token boolean">true</span><span class="token punctuation">;</span></span>
144<span class="line">    <span class="token punctuation">}</span></span>
145<span class="line"></span>
146<span class="line">    <span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span></span>
147<span class="line">  <span class="token punctuation">}</span></span>
148<span class="line"></span>
149<span class="line">  <span class="token doc-comment comment">/**</span>
150<span class="line">   * 补充令牌</span>
151<span class="line">   */</span></span>
152<span class="line">  <span class="token function">refill</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
153<span class="line">    <span class="token keyword">const</span> now <span class="token operator">=</span> Date<span class="token punctuation">.</span><span class="token function">now</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
154<span class="line">    <span class="token keyword">const</span> timePassed <span class="token operator">=</span> <span class="token punctuation">(</span>now <span class="token operator">-</span> <span class="token keyword">this</span><span class="token punctuation">.</span>lastRefill<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">1000</span><span class="token punctuation">;</span> <span class="token comment">// 转换为秒</span></span>
155<span class="line">    <span class="token keyword">const</span> tokensToAdd <span class="token operator">=</span> timePassed <span class="token operator">*</span> <span class="token keyword">this</span><span class="token punctuation">.</span>refillRate<span class="token punctuation">;</span></span>
156<span class="line"></span>
157<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>tokens <span class="token operator">=</span> Math<span class="token punctuation">.</span><span class="token function">min</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">.</span>capacity<span class="token punctuation">,</span> <span class="token keyword">this</span><span class="token punctuation">.</span>tokens <span class="token operator">+</span> tokensToAdd<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
158<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>lastRefill <span class="token operator">=</span> now<span class="token punctuation">;</span></span>
159<span class="line">  <span class="token punctuation">}</span></span>
160<span class="line"><span class="token punctuation">}</span></span>
161<span class="line"></span>
162<span class="line"><span class="token doc-comment comment">/**</span>
163<span class="line"> * 创建限流中间件</span>
164<span class="line"> * <span class="token keyword">@param</span> <span class="token class-name"><span class="token punctuation">{</span>Object<span class="token punctuation">}</span></span> <span class="token parameter">options</span> 配置选项</span>
165<span class="line"> * <span class="token keyword">@param</span> <span class="token class-name"><span class="token punctuation">{</span>number<span class="token punctuation">}</span></span> <span class="token parameter">options<span class="token punctuation">.</span>capacity</span> 桶容量(最大突发请求数)</span>
166<span class="line"> * <span class="token keyword">@param</span> <span class="token class-name"><span class="token punctuation">{</span>number<span class="token punctuation">}</span></span> <span class="token parameter">options<span class="token punctuation">.</span>refillRate</span> 每秒补充的令牌数</span>
167<span class="line"> * <span class="token keyword">@returns</span> <span class="token class-name"><span class="token punctuation">{</span>Function<span class="token punctuation">}</span></span> Express 中间件函数</span>
168<span class="line"> */</span></span>
169<span class="line"><span class="token keyword">function</span> <span class="token function">createRateLimiter</span><span class="token punctuation">(</span><span class="token parameter">options <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
170<span class="line">  <span class="token keyword">const</span> <span class="token punctuation">{</span></span>
171<span class="line">    capacity <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">,</span></span>
172<span class="line">    refillRate <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">,</span></span>
173<span class="line">    <span class="token function-variable function">keyGenerator</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">req</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> req<span class="token punctuation">.</span>ip<span class="token punctuation">,</span></span>
174<span class="line">    <span class="token function-variable function">onRateLimitExceeded</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">req<span class="token punctuation">,</span> res</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
175<span class="line">      res<span class="token punctuation">.</span><span class="token function">status</span><span class="token punctuation">(</span><span class="token number">429</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">json</span><span class="token punctuation">(</span><span class="token punctuation">{</span></span>
176<span class="line">
176        <span class="token literal-property property">error</span><span class="token operator">:</span> <span class="token string">&#39;Too Many Requests&#39;</span><span class="token punctuation">,</span></span>
177<span class="line">        <span class="token literal-property property">message</span><span class="token operator">:</span> <span class="token string">&#39;请求过于频繁,请稍后再试&#39;</span></span>
178<span class="line">      <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
179<span class="line">    <span class="token punctuation">}</span></span>
180<span class="line">  <span class="token punctuation">}</span> <span class="token operator">=</span> options<span class="token punctuation">;</span></span>
181<span class="line"></span>
182<span class="line">  <span class="token comment">// 存储每个 IP 的令牌桶</span></span>
183<span class="line">  <span class="token keyword">const</span> buckets <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Map</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
184<span class="line"></span>
185<span class="line">  <span class="token keyword">return</span> <span class="token keyword">function</span> <span class="token function">rateLimiter</span><span class="token punctuation">(</span><span class="token parameter">req<span class="token punctuation">,</span> res<span class="token punctuation">,</span> next</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
186<span class="line">    <span class="token keyword">const</span> key <span class="token operator">=</span> <span class="token function">keyGenerator</span><span class="token punctuation">(</span>req<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
187<span class="line"></span>
188<span class="line">    <span class="token comment">// 获取或创建令牌桶</span></span>
189<span class="line">    <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>buckets<span class="token punctuation">.</span><span class="token function">has</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
190<span class="line">      buckets<span class="token punctuation">.</span><span class="token function">set</span><span class="token punctuation">(</span>key<span class="token punctuation">,</span> <span class="token keyword">new</span> <span class="token class-name">TokenBucket</span><span class="token punctuation">(</span>capacity<span class="token punctuation">,</span> refillRate<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
191<span class="line">    <span class="token punctuation">}</span></span>
192<span class="line"></span>
193<span class="line">    <span class="token keyword">const</span> bucket <span class="token operator">=</span> buckets<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
194<span class="line"></span>
195<span class="line">    <span class="token comment">// 尝试消耗令牌</span></span>
196<span class="line">    <span class="token keyword">if</span> <span class="token punctuation">(</span>bucket<span class="token punctuation">.</span><span class="token function">consume</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
197<span class="line">      <span class="token comment">// 添加速率限制信息到响应头</span></span>
198<span class="line">      res<span class="token punctuation">.</span><span class="token function">setHeader</span><span class="token punctuation">(</span><span class="token string">&#39;X-RateLimit-Limit&#39;</span><span class="token punctuation">,</span> capacity<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
199<span class="line">      res<span class="token punctuation">.</span><span class="token function">setHeader</span><span class="token punctuation">(</span><span class="token string">&#39;X-RateLimit-Remaining&#39;</span><span class="token punctuation">,</span> Math<span class="token punctuation">.</span><span class="token function">floor</span><span class="token punctuation">(</span>bucket<span class="token punctuation">.</span>tokens<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
200<span class="line">
200      <span class="token function">next</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
201<span class="line">    <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span></span>
202<span class="line">      <span class="token function">onRateLimitExceeded</span><span class="token punctuation">(</span>req<span class="token punctuation">,</span> res<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
203<span class="line">    <span class="token punctuation">}</span></span>
204<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">;</span></span>
205<span class="line"><span class="token punctuation">}</span></span>
206<span class="line"></span>
207<span class="line">module<span class="token punctuation">.</span>exports <span class="token operator">=</span> <span class="token punctuation">{</span> createRateLimiter<span class="token punctuation">,</span> TokenBucket <span class="token punctuation">}</span><span class="token punctuation">;</span></span>
208<span class="line"></span>
209<span class="line"><span class="token comment">// 使用示例</span></span>
210<span class="line"><span class="token comment">/*</span>
211<span class="line">const express = require(&#39;express&#39;);</span>
212<span class="line">const { createRateLimiter } = require(&#39;./rate-limiter&#39;);</span>
213<span class="line"></span>
214<span class="line">const app = express();</span>
215<span class="line"></span>
216<span class="line">// 应用限流中间件</span>
217<span class="line">app.use(createRateLimiter({</span>
218<span class="line">  capacity: 20,      // 最多 20 个令牌</span>
219<span class="line">  refillRate: 5      // 每秒补充 5 个令牌</span>
220<span class="line">}));</span>
221<span class="line"></span>
222<span class="line">app.get(&#39;/api/data&#39;, (req, res) =&gt; {</span>
223<span class="line">  res.json({ message: &#39;Success&#39; });</span>
224<span class="line">});</span>
225<span class="line"></span>
226<span class="line">app.listen(3000);</span>
227<span class="line">*/</span></span>
228<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="_2️⃣-代码理解能力" tabindex="-1"><a class="header-anchor" href="#_2️⃣-代码理解能力"><span>2️⃣ 代码理解能力</span></a></h2><h3 id="什么是代码理解" tabindex="-1"><a class="header-anchor" href="#什么是代码理解"><span>什么是代码理解?</span></a></h3><p><strong>定义</strong>:分析现有代码,理解其功能、逻辑和意图,并提供解释或文档。</p><h3 id="理解维度" tabindex="-1"><a class="header-anchor" href="#理解维度"><span>理解维度</span></a></h3><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">代码理解的四个层次:</span>
229<span class="line"></span>
230<span class="line">┌──────────────────────────────────┐</span>
231<span class="line">│  4. 架构理解                      │</span>
232<span class="line">│     └─ 系统设计、模块关系          │</span>
233<span class="line">├──────────────────────────────────┤</span>
234<span class="line">│  3. 业务逻辑理解                  │</span>
235<span class="line">│     └─ 功能目的、业务流程          │</span>
236<span class="line">├──────────────────────────────────┤</span>
237<span class="line">│  2. 算法理解                      │</span>
238<span class="line">│     └─ 算法原理、时间复杂度        │</span>
239<span class="line">├──────────────────────────────────┤</span>
240<span class="line">│  1. 语法理解                      │</span>
241<span class="line">│     └─ 代码结构、语法规则          │</span>
242<span class="line">└──────────────────────────────────┘</span>
243<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="实战示例-1" tabindex="-1"><a class="header-anchor" href="#实战示例-1"><span>实战示例</span></a></h3><h4 id="示例-1-复杂算法解释" tabindex="-1"><a class="header-anchor" href="#示例-1-复杂算法解释"><span>示例 1:复杂算法解释</span></a></h4><p><strong>输入代码</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">quick_select</span><span class="token punctuation">(</span>arr<span class="token punctuation">,</span> k<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
244<span class="line">    <span class="token keyword">if</span> <span class="token builtin">len</span><span class="token punctuation">(</span>arr<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">:</span></span>
245<span class="line">
245        <span class="token keyword">return</span> arr<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span></span>
246<span class="line">    </span>
247<span class="line">    pivot <span class="token operator">=</span> arr<span class="token punctuation">[</span><span class="token builtin">len</span><span class="token punctuation">(</span>arr<span class="token punctuation">)</span> <span class="token operator">//</span> <span class="token number">2</span><span class="token punctuation">]</span></span>
248<span class="line">    left <span class="token operator">=</span> <span class="token punctuation">[</span>x <span class="token keyword">for</span> x <span class="token keyword">in</span> arr <span class="token keyword">if</span> x <span class="token operator">&lt;</span> pivot<span class="token punctuation">]</span></span>
249<span class="line">    mid <span class="token operator">=</span> <span class="token punctuation">[</span>x <span class="token keyword">for</span> x <span class="token keyword">in</span> arr <span class="token keyword">if</span> x <span class="token operator">==</span> pivot<span class="token punctuation">]</span></span>
250<span class="line">    right <span class="token operator">=</span> <span class="token punctuation">[</span>x <span class="token keyword">for</span> x <span class="token keyword">in</span> arr <span class="token keyword">if</span> x <span class="token operator">&gt;</span> pivot<span class="token punctuation">]</span></span>
251<span class="line">    </span>
252<span class="line">    <span class="token keyword">if</span> k <span class="token operator">&lt;</span> <span class="token builtin">len</span><span class="token punctuation">(</span>left<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
253<span class="line">        <span class="token keyword">return</span> quick_select<span class="token punctuation">(</span>left<span class="token punctuation">,</span> k<span class="token punctuation">)</span></span>
254<span class="line">    <span class="token keyword">elif</span> k <span class="token operator">&lt;</span> <span class="token builtin">len</span><span class="token punctuation">(</span>left<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token builtin">len</span><span class="token punctuation">(</span>mid<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
255<span class="line">        <span class="token keyword">return</span> mid<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span></span>
256<span class="line">    <span class="token keyword">else</span><span class="token punctuation">:</span></span>
257<span class="line">        <span class="token keyword">return</span> quick_select<span class="token punctuation">(</span>right<span class="token punctuation">,</span> k <span class="token operator">-</span> <span class="token builtin">len</span><span class="token punctuation">(</span>left<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token builtin">len</span><span class="token punctuation">(</span>mid<span class="token punctuation">)</span><span class="token punctuation">)</span></span>
258<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>让 Codex 解释</strong>:</p><p><strong>输出</strong>:</p><div class="language-markdown line-numbers-mode" data-highlighter="prismjs" data-ext="md"><pre><code class="language-markdown"><span class="line"><span class="token title important"><span class="token punctuation">#</span> Quick Select 算法解释</span></span>
259<span class="line"></span>
260<span class="line"><span class="token title important"><span class="token punctuation">##</span> 功能</span></span>
261<span class="line">在未排序的数组中找到第 k 小的元素(k 从 0 开始)。</span>
262<span class="line"></span>
263<span class="line"><span class="token title important"><span class="token punctuation">##</span> 算法原理</span></span>
264<span class="line">使用快速排序的分区思想:</span>
265<span class="line"></span>
266<span class="line"><span class="token list punctuation">1.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">选择基准值(pivot)</span><span class="token punctuation">**</span></span></span>
267<span class="line">   <span class="token list punctuation">-</span> 选择数组中间位置的元素作为基准</span>
268<span class="line"></span>
269<span class="line"><span class="token list punctuation">2.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">分区</span><span class="token punctuation">**</span></span></span>
270<span class="line">   <span class="token list punctuation">-</span> left: 所有小于 pivot 的元素</span>
271<span class="line">   <span class="token list punctuation">-</span> mid: 所有等于 pivot 的元素</span>
272<span class="line">   <span class="token list punctuation">-</span> right: 所有大于 pivot 的元素</span>
273<span class="line"></span>
274<span class="line"><span class="token list punctuation">3.</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">递归查找</span><span class="token punctuation">**</span></span></span>
275<span class="line">   <span class="token list punctuation">-</span> 如果 k &lt; len(left):第 k 小的元素在 left 中</span>
276<span class="line">   <span class="token list punctuation">-</span> 如果 k &lt; len(left) + len(mid):pivot 就是答案</span>
277<span class="line">   <span class="token list punctuation">-</span> 否则:在 right 中查找第 (k - len(left) - len(mid)) 小的元素</span>
278<span class="line"></span>
279<span class="line"><span class="token title important"><span class="token punctuation">##</span> 时间复杂度</span></span>
280<span class="line"><span class="token list punctuation">-</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">平均情况</span><span class="token punctuation">**</span></span>:O(n) - 每次递归处理约一半的元素</span>
281<span class="line"><span class="token list punctuation">-</span> <span class="token bold"><span class="token punctuation">**</span><span class="token content">最坏情况</span><span class="token punctuation">**</span></span>:O(n²) - 每次只减少一个元素</span>
282<span class="line"></span>
283<span class="line"><span class="token title important"><span class="token punctuation">##</span> 空间复杂度</span></span>
284<span class="line">
284O(n) - 由于创建了新的列表</span>
285<span class="line"></span>
286<span class="line"><span class="token title important"><span class="token punctuation">##</span> 使用示例</span></span>
287<span class="line">\`\`\`python</span>
288<span class="line">arr = [3, 2, 1, 5, 6, 4]</span>
289<span class="line">print(quick_select(arr, 2))  # 输出: 3 (第3小的元素)</span>
290<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h2 id="优化建议" tabindex="-1"><a class="header-anchor" href="#优化建议"><span>优化建议</span></a></h2><ul><li>使用原地分区可以降低空间复杂度到 O(log n)</li><li>使用随机化 pivot 可以避免最坏情况</li></ul><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line"></span>
291<span class="line">#### 示例 2:生成代码文档</span>
292<span class="line"></span>
293<span class="line">**输入**:</span>
294<span class="line">\`\`\`javascript</span>
295<span class="line">function memoize(fn) {</span>
296<span class="line">  const cache = new Map();</span>
297<span class="line">  return function(...args) {</span>
298<span class="line">    const key = JSON.stringify(args);</span>
299<span class="line">    if (cache.has(key)) {</span>
300<span class="line">      return cache.get(key);</span>
301<span class="line">    }</span>
302<span class="line">    const result = fn.apply(this, args);</span>
303<span class="line">    cache.set(key, result);</span>
304<span class="line">    return result;</span>
305<span class="line">  };</span>
306<span class="line">}</span>
307<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>让 Codex 生成 JSDoc</strong>:</p><p><strong>输出</strong>:</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token doc-comment comment">/**</span>
308<span class="line"> * 创建一个带缓存功能的函数包装器(记忆化)</span>
309<span class="line"> * </span>
310<span class="line"> * <span class="token keyword">@template</span> <span class="token class-name">T</span> - 函数的返回类型</span>
311<span class="line"> * <span class="token keyword">@param</span> <span class="token class-name"><span class="token punctuation">{</span>Function<span class="token punctuation">}</span></span> <span class="token parameter">fn</span> - 需要缓存结果的函数</span>
312<span class="line"> * <span class="token keyword">@returns</span> <span class="token class-name"><span class="token punctuation">{</span>Function<span class="token punctuation">}</span></span> 包装后的函数,会自动缓存相同参数的计算结果</span>
313<span class="line"> * </span>
314<span class="line"> * <span class="token keyword">@description</span></span>
315<span class="line"> * 该函数使用 Map 来缓存函数调用的结果。</span>
316<span class="line"> * 当使用相同参数调用时,直接返回缓存的结果,避免重复计算。</span>
317<span class="line"> * </span>
318<span class="line"> * <span class="token keyword">@example</span></span>
319<span class="line"> <span class="token example">* <span class="token code language-javascript"><span class="token comment">// 创建一个斐波那契函数</span></span></span>
320<span class="line"> * <span class="token code language-javascript"><span class="token keyword">const</span> fibonacci <span class="token operator">=</span> <span class="token function">memoize</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter">n</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span></span>
321<span class="line"> *   <span class="token code language-javascript"><span class="token keyword">if</span> <span class="token punctuation">(</span>n <span class="token operator">&lt;=</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token keyword">return</span> n<span class="token punctuation">;</span></span></span>
322<span class="line"> *   <span class="token code language-javascript"><span class="token keyword">return</span> <span class="token function">fibonacci</span><span class="token punctuation">(</span>n <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token function">fibonacci</span><span class="token punctuation">(</span>n <span class="token operator">-</span> <span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span></span>
323<span class="line"> * <span class="token code language-javascript"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span></span>
324<span class="line"> * </span>
325<span class="line"> <span class="token code language-javascript"><span class="token operator">*</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token function">fibonacci</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 第一次计算</span></span></span>
326<span class="line"> * <span class="token code language-javascript">console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token function">fibonacci</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 直接从缓存返回</span></span></span>
327<span class="line"> <span class="token code language-javascript"><span class="token operator">*</span></span></span> </span>
328<span class="line"> * <span class="token keyword">@performance</span></span>
329<span class="line"> * - 时间复杂度:O(1) 对于缓存命中的情况</span>
330<span class="line"> * - 空间复杂度:O(n) n 为不同参数组合的数量</span>
331<span class="line"> * </span>
332<span class="line"> * <span class="token keyword">@note</span></span>
333<span class="line"> * - 参数使用 JSON.stringify 序列化为缓存键</span>
334<span class="line"> * - 不适用于参数包含函数或循环引用的情况</span>
335<span class="line"> * - 适合纯函数,不适合有副作用的函数</span>
336<span class="line"> */</span></span>
337<span class="line"><span class="token keyword">function</span> <span class="token function">memoize</span><span class="token punctuation">(</span><span class="token parameter">fn</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
338<span class="line">  <span class="token keyword">const</span> cache <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">Map</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
339<span class="line">  <span class="token keyword">return</span> <span class="token keyword">function</span><span class="token punctuation">(</span><span class="token parameter"><span class="token operator">...</span>args</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
340<span class="line">    <span class="token keyword">const</span> key <span class="token operator">=</span> <span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">stringify</span><span class="token punctuation">(</span>args<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
341<span class="line">    <span class="token keyword">if</span> <span class="token punctuation">(</span>cache<span class="token punctuation">.</span><span class="token function">has</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
342<span class="line">
342      <span class="token keyword">return</span> cache<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>key<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
343<span class="line">    <span class="token punctuation">}</span></span>
344<span class="line">    <span class="token keyword">const</span> result <span class="token operator">=</span> <span class="token function">fn</span><span class="token punctuation">.</span><span class="token function">apply</span><span class="token punctuation">(</span><span class="token keyword">this</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
345<span class="line">    cache<span class="token punctuation">.</span><span class="token function">set</span><span class="token punctuation">(</span>key<span class="token punctuation">,</span> result<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
346<span class="line">    <span class="token keyword">return</span> result<span class="token punctuation">;</span></span>
347<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">;</span></span>
348<span class="line"><span class="token punctuation">}</span></span>
349<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="_3️⃣-代码补全能力" tabindex="-1"><a class="header-anchor" href="#_3️⃣-代码补全能力"><span>3️⃣ 代码补全能力</span></a></h2><h3 id="什么是代码补全" tabindex="-1"><a class="header-anchor" href="#什么是代码补全"><span>什么是代码补全?</span></a></h3><p><strong>定义</strong>:基于上下文,自动续写代码,提供智能建议。</p><h3 id="补全类型" tabindex="-1"><a class="header-anchor" href="#补全类型"><span>补全类型</span></a></h3><table><thead><tr><th>类型</th><th>触发方式</th><th>应用场景</th><th>示例</th></tr></thead><tbody><tr><td><strong>单行补全</strong></td><td>输入部分代码</td><td>简单语句</td><td><code>const user =</code> → <code>const user = await fetchUser()</code></td></tr><tr><td><strong>多行补全</strong></td><td>写注释或函数签名</td><td>函数实现</td><td>写函数签名 → 生成完整函数体</td></tr><tr><td><strong>模式补全</strong></td><td>识别代码模式</td><td>重复操作</td><td>写第一个case → 补全所有case</td></tr><tr><td><strong>上下文补全</strong></td><td>分析项目代码</td><td>符合项目风格</td><td>自动匹配命名和结构</td></tr></tbody></table><h3 id="实战示例-2" tabindex="-1"><a class="header-anchor" href="#实战示例-2"><span>实战示例</span></a></h3><h4 id="示例-1-智能单行补全" tabindex="-1"><a class="header-anchor" href="#示例-1-智能单行补全"><span>示例 1:智能单行补全</span></a></h4><p><strong>你输入</strong>:</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 从 API 获取用户数据</span></span>
350<span class="line"><span class="token keyword">const</span> userData <span class="token operator">=</span></span>
351<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>Codex 补全</strong>:</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">const</span> userData <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">fetch</span><span class="token punctuation">(</span><span class="token string">&#39;/api/user&#39;</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">then</span><span class="token punctuation">(</span><span class="token parameter">res</span> <span class="token operator">=&gt;</span> res<span class="token punctuation">.</span><span class="token function">json</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
352<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h4 id="示例-2-函数体补全" tabindex="-1"><a class="header-anchor" href="#示例-2-函数体补全"><span>示例 2:函数体补全</span></a></h4><p><strong>你输入</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">binary_search</span><span class="token punctuation">(</span>arr<span class="token punctuation">,</span> target<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
353<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;在有序数组中查找目标值,返回索引,找不到返回 -1&quot;&quot;&quot;</span></span>
354<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>Codex 补全</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">binary_search</span><span class="token punctuation">(</span>arr<span class="token punctuation">,</span> target<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
355<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;在有序数组中查找目标值,返回索引,找不到返回 -1&quot;&quot;&quot;</span></span>
356<span class="line">    left<span class="token punctuation">,</span> right <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token builtin">len</span><span class="token punctuation">(</span>arr<span class="token punctuation">)</span> <span class="token operator">-</span> <span class="token number">1</span></span>
357<span class="line">    </span>
358<span class="line">    <span class="token keyword">while</span> left <span class="token operator">&lt;=</span> right<span class="token punctuation">:</span></span>
359<span class="line">        mid <span class="token operator">=</span> <span class="token punctuation">(</span>left <span class="token operator">+</span> right<span class="token punctuation">)</span> <span class="token operator">//</span> <span class="token number">2</span></span>
360<span class="line">        </span>
361<span class="line">
361        <span class="token keyword">if</span> arr<span class="token punctuation">[</span>mid<span class="token punctuation">]</span> <span class="token operator">==</span> target<span class="token punctuation">:</span></span>
362<span class="line">            <span class="token keyword">return</span> mid</span>
363<span class="line">        <span class="token keyword">elif</span> arr<span class="token punctuation">[</span>mid<span class="token punctuation">]</span> <span class="token operator">&lt;</span> target<span class="token punctuation">:</span></span>
364<span class="line">            left <span class="token operator">=</span> mid <span class="token operator">+</span> <span class="token number">1</span></span>
365<span class="line">        <span class="token keyword">else</span><span class="token punctuation">:</span></span>
366<span class="line">            right <span class="token operator">=</span> mid <span class="token operator">-</span> <span class="token number">1</span></span>
367<span class="line">    </span>
368<span class="line">    <span class="token keyword">return</span> <span class="token operator">-</span><span class="token number">1</span></span>
369<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="示例-3-模式识别补全" tabindex="-1"><a class="header-anchor" href="#示例-3-模式识别补全"><span>示例 3:模式识别补全</span></a></h4><p><strong>你输入</strong>:</p><div class="language-typescript line-numbers-mode" data-highlighter="prismjs" data-ext="ts"><pre><code class="language-typescript"><span class="line"><span class="token keyword">interface</span> <span class="token class-name">User</span> <span class="token punctuation">{</span></span>
370<span class="line">  id<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">;</span></span>
371<span class="line">  name<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span></span>
372<span class="line">  email<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">;</span></span>
373<span class="line">  age<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">;</span></span>
374<span class="line"><span class="token punctuation">}</span></span>
375<span class="line"></span>
376<span class="line"><span class="token comment">// 创建用户验证函数</span></span>
377<span class="line"><span class="token keyword">function</span> <span class="token function">validateUser</span><span class="token punctuation">(</span>user<span class="token operator">:</span> User<span class="token punctuation">)</span><span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token punctuation">{</span></span>
378<span class="line">  <span class="token keyword">const</span> errors<span class="token operator">:</span> <span class="token builtin">string</span><span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token punctuation">;</span></span>
379<span class="line">  </span>
380<span class="line">  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>user<span class="token punctuation">.</span>id <span class="token operator">||</span> user<span class="token punctuation">.</span>id <span class="token operator">&lt;=</span> <span class="token number">0</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
381<span class="line">    errors<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token string">&#39;Invalid user ID&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
382<span class="line">  <span class="token punctuation">}</span></span>
383<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>Codex 补全(识别了验证模式)</strong>:</p><div class="language-typescript line-numbers-mode" data-highlighter="prismjs" data-ext="ts"><pre><code class="language-typescript"><span class="line">  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>user<span class="token punctuation">.</span>name <span class="token operator">||</span> user<span class="token punctuation">.</span>name<span class="token punctuation">.</span><span class="token function">trim</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">===</span> <span class="token string">&#39;&#39;</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
384<span class="line">    errors<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token string">&#39;Name is required&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
385<span class="line">  <span class="token punctuation">}</span></span>
386<span class="line">  </span>
387<span class="line">  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>user<span class="token punctuation">.</span>email <span class="token operator">||</span> <span class="token operator">!</span>user<span class="token punctuation">.</span>email<span class="token punctuation">.</span><span class="token function">includes</span><span class="token punctuation">(</span><span class="token string">&#39;@&#39;</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
388<span class="line">    errors<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token string">&#39;Invalid email format&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
389<span class="line">  <span class="token punctuation">}</span></span>
390<span class="line">  </span>
391<span class="line">  <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>user<span class="token punctuation">.</span>age <span class="token operator">||</span> user<span class="token punctuation">.</span>age <span class="token operator">&lt;</span> <span class="token number">0</span> <span class="token operator">||</span> user<span class="token punctuation">.</span>age <span class="token operator">&gt;</span> <span class="token number">150</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
392<span class="line">    errors<span class="token punctuation">.</span><span class="token function">push</span><span class="token punctuation">(</span><span class="token string">&#39;Invalid age&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
393<span class="line">  <span class="token punctuation">}</span></span>
394<span class="line">  </span>
395<span class="line">  <span class="token keyword">return</span> errors<span class="token punctuation">;</span></span>
396<span class="line"><span class="token punctuation">}</span></span>
397<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="_4️⃣-代码转换能力" tabindex="-1"><a class="header-anchor" href="#_4️⃣-代码转换能力"><span>4️⃣ 代码转换能力</span></a></h2><h3 id="什么是代码转换" tabindex="-1"><a class="header-anchor" href="#什么是代码转换"><span>什么是代码转换?</span></a></h3><p><strong>定义</strong>:在不同编程语言、框架或范式之间转换代码,保持功能不变。</p><h3 id="转换类型" tabindex="-1"><a class="header-anchor" href="#转换类型"><span>转换类型</span></a></h3><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">代码转换的四种类型:</span>
398<span class="line"></span>
399<span class="line">
3991. 语言转换</span>
400<span class="line">   Python → JavaScript → Go → ...</span>
401<span class="line"></span>
402<span class="line">2. 范式转换</span>
403<span class="line">   面向对象 → 函数式 → 响应式</span>
404<span class="line"></span>
405<span class="line">3. 框架转换</span>
406<span class="line">   React → Vue → Angular</span>
407<span class="line"></span>
408<span class="line">4. 版本转换</span>
409<span class="line">   ES5 → ES6 → TypeScript</span>
410<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="实战示例-3" tabindex="-1"><a class="header-anchor" href="#实战示例-3"><span>实战示例</span></a></h3><h4 id="示例-1-python-转-javascript" tabindex="-1"><a class="header-anchor" href="#示例-1-python-转-javascript"><span>示例 1:Python 转 JavaScript</span></a></h4><p><strong>输入(Python)</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">fibonacci</span><span class="token punctuation">(</span>n<span class="token punctuation">,</span> memo<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">)</span><span class="token punctuation">:</span></span>
411<span class="line">    <span class="token keyword">if</span> memo <span class="token keyword">is</span> <span class="token boolean">None</span><span class="token punctuation">:</span></span>
412<span class="line">        memo <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span></span>
413<span class="line">    </span>
414<span class="line">    <span class="token keyword">if</span> n <span class="token keyword">in</span> memo<span class="token punctuation">:</span></span>
415<span class="line">        <span class="token keyword">return</span> memo<span class="token punctuation">[</span>n<span class="token punctuation">]</span></span>
416<span class="line">    </span>
417<span class="line">    <span class="token keyword">if</span> n <span class="token operator">&lt;=</span> <span class="token number">1</span><span class="token punctuation">:</span></span>
418<span class="line">        <span class="token keyword">return</span> n</span>
419<span class="line">    </span>
420<span class="line">    memo<span class="token punctuation">[</span>n<span class="token punctuation">]</span> <span class="token operator">=</span> fibonacci<span class="token punctuation">(</span>n<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> memo<span class="token punctuation">)</span> <span class="token operator">+</span> fibonacci<span class="token punctuation">(</span>n<span class="token operator">-</span><span class="token number">2</span><span class="token punctuation">,</span> memo<span class="token punctuation">)</span></span>
421<span class="line">    <span class="token keyword">return</span> memo<span class="token punctuation">[</span>n<span class="token punctuation">]</span></span>
422<span class="line"></span>
423<span class="line"><span class="token comment"># 生成前10个斐波那契数</span></span>
424<span class="line">result <span class="token operator">=</span> <span class="token punctuation">[</span>fibonacci<span class="token punctuation">(</span>i<span class="token punctuation">)</span> <span class="token keyword">for</span> i <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">]</span></span>
425<span class="line"><span class="token keyword">print</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span></span>
426<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>输出(JavaScript)</strong>:</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">function</span> <span class="token function">fibonacci</span><span class="token punctuation">(</span><span class="token parameter">n<span class="token punctuation">,</span> memo <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token punctuation">}</span></span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
427<span class="line">  <span class="token keyword">if</span> <span class="token punctuation">(</span>n <span class="token keyword">in</span> memo<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
428<span class="line">    <span class="token keyword">return</span> memo<span class="token punctuation">[</span>n<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
429<span class="line">  <span class="token punctuation">}</span></span>
430<span class="line">  </span>
431<span class="line">  <span class="token keyword">if</span> <span class="token punctuation">(</span>n <span class="token operator">&lt;=</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
432<span class="line">    <span class="token keyword">return</span> n<span class="token punctuation">;</span></span>
433<span class="line">  <span class="token punctuation">}</span></span>
434<span class="line">  </span>
435<span class="line">  memo<span class="token punctuation">[</span>n<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">fibonacci</span><span class="token punctuation">(</span>n <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">,</span> memo<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token function">fibonacci</span><span class="token punctuation">(</span>n <span class="token operator">-</span> <span class="token number">2</span><span class="token punctuation">,</span> memo<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
436<span class="line">  <span class="token keyword">return</span> memo<span class="token punctuation">[</span>n<span class="token punctuation">]</span><span class="token punctuation">;</span></span>
437<span class="line"><span class="token punctuation">}</span></span>
438<span class="line"></span>
439<span class="line"><span class="token comment">// 生成前10个斐波那契数</span></span>
440<span class="line"><span class="token keyword">const</span> result <span class="token operator">=</span> Array<span class="token punctuation">.</span><span class="token function">from</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">length</span><span class="token operator">:</span> <span class="token number">10</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token parameter">_<span class="token punctuation">,</span> i</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token function">fibonacci</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
441<span class="line">console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span>result<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
442<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="示例-2-react-class-组件转-hooks" tabindex="-1"><a class="header-anchor" href="#示例-2-react-class-组件转-hooks"><span>示例 2:React Class 组件转 Hooks</span></a></h4><p><strong>输入(Class Component)</strong>:</p><div class="language-jsx line-numbers-mode" data-highlighter="prismjs" data-ext="jsx"><pre><code class="language-jsx"><span class="line"><span class="token keyword">class</span> <span class="token class-name">Counter</span> <span class="token keyword">extends</span> <span class="token class-name">React<span class="token punctuation">.</span>Component</span> <span class="token punctuation">{</span></span>
443<span class="line">  <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token parameter">props</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
444<span class="line">    <span class="token keyword">
444super</span><span class="token punctuation">(</span>props<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
445<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>state <span class="token operator">=</span> <span class="token punctuation">{</span></span>
446<span class="line">      <span class="token literal-property property">count</span><span class="token operator">:</span> <span class="token number">0</span><span class="token punctuation">,</span></span>
447<span class="line">      <span class="token literal-property property">step</span><span class="token operator">:</span> <span class="token number">1</span></span>
448<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">;</span></span>
449<span class="line">  <span class="token punctuation">}</span></span>
450<span class="line"></span>
451<span class="line">  <span class="token function">componentDidMount</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
452<span class="line">    document<span class="token punctuation">.</span>title <span class="token operator">=</span> <span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">Count: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span><span class="token keyword">this</span><span class="token punctuation">.</span>state<span class="token punctuation">.</span>count<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">;</span></span>
453<span class="line">  <span class="token punctuation">}</span></span>
454<span class="line"></span>
455<span class="line">  <span class="token function">componentDidUpdate</span><span class="token punctuation">(</span><span class="token parameter">prevProps<span class="token punctuation">,</span> prevState</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
456<span class="line">    <span class="token keyword">if</span> <span class="token punctuation">(</span>prevState<span class="token punctuation">.</span>count <span class="token operator">!==</span> <span class="token keyword">this</span><span class="token punctuation">.</span>state<span class="token punctuation">.</span>count<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
457<span class="line">      document<span class="token punctuation">.</span>title <span class="token operator">=</span> <span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">Count: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span><span class="token keyword">this</span><span class="token punctuation">.</span>state<span class="token punctuation">.</span>count<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">;</span></span>
458<span class="line">    <span class="token punctuation">}</span></span>
459<span class="line">  <span class="token punctuation">}</span></span>
460<span class="line"></span>
461<span class="line">  <span class="token function-variable function">increment</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
462<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">setState</span><span class="token punctuation">(</span><span class="token parameter">state</span> <span class="token operator">=&gt;</span> <span class="token punctuation">(</span><span class="token punctuation">{</span></span>
463<span class="line">
463      <span class="token literal-property property">count</span><span class="token operator">:</span> state<span class="token punctuation">.</span>count <span class="token operator">+</span> state<span class="token punctuation">.</span>step</span>
464<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
465<span class="line">  <span class="token punctuation">}</span></span>
466<span class="line"></span>
467<span class="line">  <span class="token function-variable function">setStep</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">step</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
468<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">setState</span><span class="token punctuation">(</span><span class="token punctuation">{</span> step <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
469<span class="line">  <span class="token punctuation">}</span></span>
470<span class="line"></span>
471<span class="line">  <span class="token function">render</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
472<span class="line">    <span class="token keyword">const</span> <span class="token punctuation">{</span> count<span class="token punctuation">,</span> step <span class="token punctuation">}</span> <span class="token operator">=</span> <span class="token keyword">this</span><span class="token punctuation">.</span>state<span class="token punctuation">;</span></span>
473<span class="line">    </span>
474<span class="line">    <span class="token keyword">return</span> <span class="token punctuation">(</span></span>
475<span class="line">      <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span><span class="token plain-text"></span>
476<span class="line">        </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h1</span><span class="token punctuation">&gt;</span></span><span class="token plain-text">Count: </span><span class="token punctuation">{</span>count<span class="token punctuation">}</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h1</span><span class="token punctuation">&gt;</span></span><span class="token plain-text"></span>
477<span class="line">        </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">onClick</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span><span class="token keyword">this</span><span class="token punctuation">.</span>increment<span class="token punctuation">}</span></span><span class="token punctuation">&gt;</span></span><span class="token plain-text">+</span><span class="token punctuation">{</span>step<span class="token punctuation">}</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span><span class="token plain-text"></span>
478<span class="line">        </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> </span>
479<span class="line">          <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>number<span class="token punctuation">&quot;</span></span> </span>
480<span class="line">          <span class="token attr-name">value</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>step<span class="token punctuation">}</span></span> </span>
481<span class="line">
481          <span class="token attr-name">onChange</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span><span class="token punctuation">(</span><span class="token parameter">e</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">setStep</span><span class="token punctuation">(</span><span class="token function">Number</span><span class="token punctuation">(</span>e<span class="token punctuation">.</span>target<span class="token punctuation">.</span>value<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">}</span></span></span>
482<span class="line">        <span class="token punctuation">/&gt;</span></span><span class="token plain-text"></span>
483<span class="line">      </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span>
484<span class="line">    <span class="token punctuation">)</span><span class="token punctuation">;</span></span>
485<span class="line">  <span class="token punctuation">}</span></span>
486<span class="line"><span class="token punctuation">}</span></span>
487<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>输出(Hooks)</strong>:</p><div class="language-jsx line-numbers-mode" data-highlighter="prismjs" data-ext="jsx"><pre><code class="language-jsx"><span class="line"><span class="token keyword">import</span> <span class="token punctuation">{</span> useState<span class="token punctuation">,</span> useEffect <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">&#39;react&#39;</span><span class="token punctuation">;</span></span>
488<span class="line"></span>
489<span class="line"><span class="token keyword">function</span> <span class="token function">Counter</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
490<span class="line">  <span class="token keyword">const</span> <span class="token punctuation">[</span>count<span class="token punctuation">,</span> setCount<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
491<span class="line">  <span class="token keyword">const</span> <span class="token punctuation">[</span>step<span class="token punctuation">,</span> setStep<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token function">useState</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
492<span class="line"></span>
493<span class="line">  <span class="token comment">// 替代 componentDidMount 和 componentDidUpdate</span></span>
494<span class="line">  <span class="token function">useEffect</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
495<span class="line">    document<span class="token punctuation">.</span>title <span class="token operator">=</span> <span class="token template-string"><span class="token template-punctuation string">\`</span><span class="token string">Count: </span><span class="token interpolation"><span class="token interpolation-punctuation punctuation">\${</span>count<span class="token interpolation-punctuation punctuation">}</span></span><span class="token template-punctuation string">\`</span></span><span class="token punctuation">;</span></span>
496<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">[</span>count<span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
497<span class="line"></span>
498<span class="line">  <span class="token keyword">const</span> <span class="token function-variable function">increment</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
499<span class="line">    <span class="token function">setCount</span><span class="token punctuation">(</span><span class="token parameter">prevCount</span> <span class="token operator">=&gt;</span> prevCount <span class="token operator">+</span> step<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
500<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">;</span></span>
501<span class="line"></span>
502<span class="line">  <span class="token keyword">const</span> <span class="token function-variable function">
502handleStepChange</span> <span class="token operator">=</span> <span class="token punctuation">(</span><span class="token parameter">e</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
503<span class="line">    <span class="token function">setStep</span><span class="token punctuation">(</span><span class="token function">Number</span><span class="token punctuation">(</span>e<span class="token punctuation">.</span>target<span class="token punctuation">.</span>value<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
504<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">;</span></span>
505<span class="line"></span>
506<span class="line">  <span class="token keyword">return</span> <span class="token punctuation">(</span></span>
507<span class="line">    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>div</span><span class="token punctuation">&gt;</span></span><span class="token plain-text"></span>
508<span class="line">      </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>h1</span><span class="token punctuation">&gt;</span></span><span class="token plain-text">Count: </span><span class="token punctuation">{</span>count<span class="token punctuation">}</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>h1</span><span class="token punctuation">&gt;</span></span><span class="token plain-text"></span>
509<span class="line">      </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>button</span> <span class="token attr-name">onClick</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>increment<span class="token punctuation">}</span></span><span class="token punctuation">&gt;</span></span><span class="token plain-text">+</span><span class="token punctuation">{</span>step<span class="token punctuation">}</span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>button</span><span class="token punctuation">&gt;</span></span><span class="token plain-text"></span>
510<span class="line">      </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>input</span> </span>
511<span class="line">        <span class="token attr-name">type</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">&quot;</span>number<span class="token punctuation">&quot;</span></span> </span>
512<span class="line">        <span class="token attr-name">value</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>step<span class="token punctuation">}</span></span> </span>
513<span class="line">        <span class="token attr-name">onChange</span><span class="token script language-javascript"><span class="token script-punctuation punctuation">=</span><span class="token punctuation">{</span>handleStepChange<span class="token punctuation">}</span></span></span>
514<span class="line">      <span class="token punctuation">/&gt;</span></span><span class="token plain-text"></span>
515<span class="line">    </span><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>div</span><span class="token punctuation">&gt;</span></span></span>
516<span class="line">  <span class="token punctuation">)</span><span class="token punctuation">;</span></span>
517<span class="line"><span class="token punctuation">}</span></span>
518<span class="line"></span>
519<span class="line"><span class="token keyword">export</span> <span class="token keyword">default</span> Counter<span class="token punctuation">;</span></span>
520<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="_5️⃣-bug-修复能力" tabindex="-1"><a class="header-anchor" href="#_5️⃣-bug-修复能力"><span>5️⃣ Bug 修复能力</span></a></h2><h3 id="codex-如何修复-bug" tabindex="-1"><a class="header-anchor" href="#codex-如何修复-bug"><span>Codex 如何修复 Bug?</span></a></h3><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">Bug 修复流程:</span>
521<span class="line"></span>
522<span class="line">1. 分析代码</span>
523<span class="line">   └─ 理解代码意图和逻辑</span>
524<span class="line"></span>
525<span class="line">2. 识别问题</span>
526<span class="line">   └─ 找出错误的根本原因</span>
527<span class="line"></span>
528<span class="line">3. 提出方案</span>
529<span class="line">   └─ 生成修复建议</span>
530<span class="line"></span>
531<span class="line">4. 修复代码</span>
532<span class="line">   └─ 输出修复后的代码</span>
533<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="实战示例-4" tabindex="-1"><a class="header-anchor" href="#实战示例-4"><span>实战示例</span></a></h3><h4 id="示例-1-逻辑错误修复" tabindex="-1"><a class="header-anchor" href="#示例-1-逻辑错误修复"><span>示例 1:逻辑错误修复</span></a></h4><p><strong>有问题的代码</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">is_palindrome</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
534<span class="line">    <span class="token comment"># 检查字符串是否是回文</span></span>
535<span class="line">    <span class="token keyword">return</span> s <span class="token operator">==</span> s<span class="token punctuation">.</span>reverse<span class="token punctuation">(</span><span class="token punctuation">)</span></span>
536<span class="line"></span>
537<span class="line"><span class="token comment"># 测试</span></span>
538<span class="line"><span class="token keyword">print</span><span class="token punctuation">(</span>is_palindrome<span class="token punctuation">(</span><span class="token string">&quot;racecar&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span>  <span class="token comment"># 报错!</span></span>
539<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>让 Codex 修复</strong>:</p><p><strong>修复后</strong>:</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token keyword">def</span> <span class="token function">is_palindrome</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span><span class="token punctuation">:</span></span>
540<span class="line">    <span class="token triple-quoted-string string">&quot;&quot;&quot;</span>
541<span class="line">    检查字符串是否是回文</span>
542<span class="line">    </span>
543<span class="line">    修复说明:</span>
544<span class="line">    - 字符串没有 reverse() 方法</span>
545<span class="line">    - 应使用切片 [::-1] 来反转字符串</span>
546<span class="line">    &quot;&quot;&quot;</span></span>
547<span class="line">    <span class="token keyword">return</span> s <span class="token operator">==</span> s<span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">]</span></span>
548<span class="line"></span>
549<span class="line"><span class="token comment"># 测试</span></span>
550<span class="line"><span class="token keyword">print</span><span class="token punctuation">(</span>is_palindrome<span class="token punctuation">(</span><span class="token string">&quot;racecar&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span>  <span class="token comment"># True</span></span>
551<span class="line"><span class="token keyword">print</span><span class="token punctuation">(</span>is_palindrome<span class="token punctuation">(</span><span class="token string">&quot;hello&quot;</span><span class="token punctuation">)</span><span class="token punctuation">)</span>    <span class="token comment"># False</span></span>
552<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="示例-2-异步错误修复" tabindex="-1"><a class="header-anchor" href="#示例-2-异步错误修复"><span>示例 2:异步错误修复</span></a></h4><p><strong>有问题的代码</strong>:</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">loadUserData</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
553<span class="line">  <span class="token keyword">const</span> users <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">fetchUsers</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
554<span class="line">  </span>
555<span class="line">  <span class="token comment">
555// 问题:forEach 不等待异步操作</span></span>
556<span class="line">  users<span class="token punctuation">.</span><span class="token function">forEach</span><span class="token punctuation">(</span><span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token parameter">user</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
557<span class="line">    user<span class="token punctuation">.</span>profile <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">fetchProfile</span><span class="token punctuation">(</span>user<span class="token punctuation">.</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
558<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
559<span class="line">  </span>
560<span class="line">  <span class="token keyword">return</span> users<span class="token punctuation">;</span>  <span class="token comment">// profile 可能还未加载完成</span></span>
561<span class="line"><span class="token punctuation">}</span></span>
562<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>Codex 修复</strong>:</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">loadUserData</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
563<span class="line">  <span class="token keyword">const</span> users <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">fetchUsers</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
564<span class="line">  </span>
565<span class="line">  <span class="token doc-comment comment">/**</span>
566<span class="line">   * 修复说明:</span>
567<span class="line">   * 1. forEach 不会等待异步操作完成</span>
568<span class="line">   * 2. 改用 Promise.all + map 来并行处理</span>
569<span class="line">   * 3. 确保所有 profile 加载完成后再返回</span>
570<span class="line">   */</span></span>
571<span class="line">  <span class="token keyword">await</span> Promise<span class="token punctuation">.</span><span class="token function">all</span><span class="token punctuation">(</span></span>
572<span class="line">    users<span class="token punctuation">.</span><span class="token function">map</span><span class="token punctuation">(</span><span class="token keyword">async</span> <span class="token punctuation">(</span><span class="token parameter">user</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
573<span class="line">      user<span class="token punctuation">.</span>profile <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">fetchProfile</span><span class="token punctuation">(</span>user<span class="token punctuation">.</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
574<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span></span>
575<span class="line">  <span class="token punctuation">)</span><span class="token punctuation">;</span></span>
576<span class="line">  </span>
577<span class="line">  <span class="token keyword">return</span>
577 users<span class="token punctuation">;</span></span>
578<span class="line"><span class="token punctuation">}</span></span>
579<span class="line"></span>
580<span class="line"><span class="token comment">// 替代方案(串行处理):</span></span>
581<span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">loadUserDataSequential</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
582<span class="line">  <span class="token keyword">const</span> users <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">fetchUsers</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
583<span class="line">  </span>
584<span class="line">  <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">const</span> user <span class="token keyword">of</span> users<span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
585<span class="line">    user<span class="token punctuation">.</span>profile <span class="token operator">=</span> <span class="token keyword">await</span> <span class="token function">fetchProfile</span><span class="token punctuation">(</span>user<span class="token punctuation">.</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span></span>
586<span class="line">  <span class="token punctuation">}</span></span>
587<span class="line">  </span>
588<span class="line">  <span class="token keyword">return</span> users<span class="token punctuation">;</span></span>
589<span class="line"><span class="token punctuation">}</span></span>
590<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="_6️⃣-测试生成能力" tabindex="-1"><a class="header-anchor" href="#_6️⃣-测试生成能力"><span>6️⃣ 测试生成能力</span></a></h2><h3 id="自动生成测试用例" tabindex="-1"><a class="header-anchor" href="#自动生成测试用例"><span>自动生成测试用例</span></a></h3><p>Codex 可以根据函数实现自动生成:</p><ul><li>单元测试</li><li>集成测试</li><li>边界测试</li><li>性能测试</li></ul><h3 id="实战示例-5" tabindex="-1"><a class="header-anchor" href="#实战示例-5"><span>实战示例</span></a></h3><p><strong>给定函数</strong>:</p><div class="language-typescript line-numbers-mode" data-highlighter="prismjs" data-ext="ts"><pre><code class="language-typescript"><span class="line"><span class="token keyword">function</span> <span class="token function">calculateDiscount</span><span class="token punctuation">(</span>price<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">,</span> discountPercent<span class="token operator">:</span> <span class="token builtin">number</span><span class="token punctuation">)</span><span class="token operator">:</span> <span class="token builtin">number</span> <span class="token punctuation">{</span></span>
591<span class="line">  <span class="token keyword">if</span> <span class="token punctuation">(</span>price <span class="token operator">&lt;</span> <span class="token number">0</span> <span class="token operator">||</span> discountPercent <span class="token operator">&lt;</span> <span class="token number">0</span> <span class="token operator">||</span> discountPercent <span class="token operator">&gt;</span> <span class="token number">100</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
592<span class="line">    <span class="token keyword">throw</span> <span class="token keyword">new</span> <span class="token class-name">Error</span><span class="token punctuation">(</span><span class="token string">&#39;Invalid input&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
593<span class="line">  <span class="token punctuation">}</span></span>
594<span class="line">  </span>
595<span class="line">  <span class="token keyword">const</span> discount <span class="token operator">=</span> <span class="token punctuation">(</span>price <span class="token operator">*</span> discountPercent<span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">100</span><span class="token punctuation">;</span></span>
596<span class="line">  <span class="token keyword">return</span> Math<span class="token punctuation">.</span><span class="token function">round</span><span class="token punctuation">(</span><span class="token punctuation">(</span>price <span class="token operator">-</span> discount<span class="token punctuation">)</span> <span class="token operator">*</span> <span class="token number">100</span><span class="token punctuation">)</span> <span class="token operator">/</span> <span class="token number">100</span><span class="token punctuation">;</span></span>
597<span class="line"><span class="token punctuation">}</span></span>
598<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><p><strong>让 Codex 生成测试</strong>:</p><p><strong>输出</strong>:</p><div class="language-typescript line-numbers-mode" data-highlighter="prismjs" data-ext="ts"><pre><code class="language-typescript"><span class="line"><span class="token keyword">
598import</span> <span class="token punctuation">{</span> describe<span class="token punctuation">,</span> it<span class="token punctuation">,</span> expect <span class="token punctuation">}</span> <span class="token keyword">from</span> <span class="token string">&#39;vitest&#39;</span><span class="token punctuation">;</span></span>
599<span class="line"></span>
600<span class="line"><span class="token function">describe</span><span class="token punctuation">(</span><span class="token string">&#39;calculateDiscount&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
601<span class="line">  <span class="token function">describe</span><span class="token punctuation">(</span><span class="token string">&#39;正常情况&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
602<span class="line">    <span class="token function">it</span><span class="token punctuation">(</span><span class="token string">&#39;应该正确计算折扣价格&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
603<span class="line">      <span class="token function">expect</span><span class="token punctuation">(</span><span class="token function">calculateDiscount</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toBe</span><span class="token punctuation">(</span><span class="token number">90</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
604<span class="line">      <span class="token function">expect</span><span class="token punctuation">(</span><span class="token function">calculateDiscount</span><span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toBe</span><span class="token punctuation">(</span><span class="token number">40</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
605<span class="line">      <span class="token function">expect</span><span class="token punctuation">(</span><span class="token function">calculateDiscount</span><span class="token punctuation">(</span><span class="token number">99.99</span><span class="token punctuation">,</span> <span class="token number">15</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toBe</span><span class="token punctuation">(</span><span class="token number">84.99</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
606<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
607<span class="line"></span>
608<span class="line">    <span class="token function">it</span><span class="token punctuation">(</span><span class="token string">&#39;应该处理0%折扣&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
609<span class="line">      <span class="token function">expect</span><span class="token punctuation">(</span><span class="token function">calculateDiscount</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toBe</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
610<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
611<span class="line"></span>
612<span class="line">    <span class="token function">it</span><span class="token punctuation">(</span><span class="token string">&#39;应该处理100%折扣&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
613<span class="line">
613      <span class="token function">expect</span><span class="token punctuation">(</span><span class="token function">calculateDiscount</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toBe</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
614<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
615<span class="line"></span>
616<span class="line">    <span class="token function">it</span><span class="token punctuation">(</span><span class="token string">&#39;应该正确四舍五入到两位小数&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
617<span class="line">      <span class="token function">expect</span><span class="token punctuation">(</span><span class="token function">calculateDiscount</span><span class="token punctuation">(</span><span class="token number">33.33</span><span class="token punctuation">,</span> <span class="token number">33</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toBe</span><span class="token punctuation">(</span><span class="token number">22.33</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
618<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
619<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
620<span class="line"></span>
621<span class="line">  <span class="token function">describe</span><span class="token punctuation">(</span><span class="token string">&#39;边界情况&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
622<span class="line">    <span class="token function">it</span><span class="token punctuation">(</span><span class="token string">&#39;应该处理价格为0的情况&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
623<span class="line">      <span class="token function">expect</span><span class="token punctuation">(</span><span class="token function">calculateDiscount</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toBe</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
624<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
625<span class="line"></span>
626<span class="line">    <span class="token function">it</span><span class="token punctuation">(</span><span class="token string">&#39;应该处理非常小的价格&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
627<span class="line">
627      <span class="token function">expect</span><span class="token punctuation">(</span><span class="token function">calculateDiscount</span><span class="token punctuation">(</span><span class="token number">0.01</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toBe</span><span class="token punctuation">(</span><span class="token number">0.01</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
628<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
629<span class="line"></span>
630<span class="line">    <span class="token function">it</span><span class="token punctuation">(</span><span class="token string">&#39;应该处理非常大的价格&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
631<span class="line">      <span class="token function">expect</span><span class="token punctuation">(</span><span class="token function">calculateDiscount</span><span class="token punctuation">(</span><span class="token number">1000000</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toBe</span><span class="token punctuation">(</span><span class="token number">990000</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
632<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
633<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
634<span class="line"></span>
635<span class="line">  <span class="token function">describe</span><span class="token punctuation">(</span><span class="token string">&#39;异常情况&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
636<span class="line">    <span class="token function">it</span><span class="token punctuation">(</span><span class="token string">&#39;应该拒绝负价格&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
637<span class="line">      <span class="token function">expect</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token function">calculateDiscount</span><span class="token punctuation">(</span><span class="token operator">-</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toThrow</span><span class="token punctuation">(</span><span class="token string">&#39;Invalid input&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
638<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
639<span class="line"></span>
640<span class="line">    <span class="token function">it</span><span class="token punctuation">(</span><span class="token string">&#39;应该拒绝负折扣&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
641<span class="line">
641      <span class="token function">expect</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token function">calculateDiscount</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token operator">-</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toThrow</span><span class="token punctuation">(</span><span class="token string">&#39;Invalid input&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
642<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
643<span class="line"></span>
644<span class="line">    <span class="token function">it</span><span class="token punctuation">(</span><span class="token string">&#39;应该拒绝超过100%的折扣&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
645<span class="line">      <span class="token function">expect</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token function">calculateDiscount</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">101</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toThrow</span><span class="token punctuation">(</span><span class="token string">&#39;Invalid input&#39;</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
646<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
647<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
648<span class="line"></span>
649<span class="line">  <span class="token function">describe</span><span class="token punctuation">(</span><span class="token string">&#39;性能测试&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
650<span class="line">    <span class="token function">it</span><span class="token punctuation">(</span><span class="token string">&#39;应该能快速处理大量计算&#39;</span><span class="token punctuation">,</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">=&gt;</span> <span class="token punctuation">{</span></span>
651<span class="line">      <span class="token keyword">const</span> start <span class="token operator">=</span> Date<span class="token punctuation">.</span><span class="token function">now</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
652<span class="line">      </span>
653<span class="line">      <span class="token keyword">for</span> <span class="token punctuation">(</span><span class="token keyword">let</span> i <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">&lt;</span> <span class="token number">100000</span><span class="token punctuation">;</span> i<span class="token operator">++</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
654<span class="line">
654        <span class="token function">calculateDiscount</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">,</span> <span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
655<span class="line">      <span class="token punctuation">}</span></span>
656<span class="line">      </span>
657<span class="line">      <span class="token keyword">const</span> duration <span class="token operator">=</span> Date<span class="token punctuation">.</span><span class="token function">now</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">-</span> start<span class="token punctuation">;</span></span>
658<span class="line">      <span class="token function">expect</span><span class="token punctuation">(</span>duration<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">toBeLessThan</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 应该在100ms内完成</span></span>
659<span class="line">    <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
660<span class="line">  <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
661<span class="line"><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span></span>
662<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="🌍-多语言支持" tabindex="-1"><a class="header-anchor" href="#🌍-多语言支持"><span>🌍 多语言支持</span></a></h2><h3 id="支持语言列表" tabindex="-1"><a class="header-anchor" href="#支持语言列表"><span>支持语言列表</span></a></h3><table><thead><tr><th>
662等级</th><th>语言</th><th>支持度</th><th>适用场景</th></tr></thead><tbody><tr><td><strong>S级</strong></td><td>Python, JavaScript/TypeScript</td><td>95%+</td><td>所有场景</td></tr><tr><td><strong>A级</strong></td><td>Java, C/C++, C#, Go, Rust</td><td>90%+</td><td>企业开发</td></tr><tr><td><strong>B级</strong></td><td>PHP, Ruby, Swift, Kotlin, Scala</td><td>85%+</td><td>Web/Mobile开发</td></tr><tr><td><strong>C级</strong></td><td>SQL, Shell, HTML/CSS</td><td>80%+</td><td>配置和脚本</td></tr><tr><td><strong>D级</strong></td><td>Perl, Lua, Haskell, etc.</td><td>70%+</td><td>特定领域</td></tr></tbody></table><h3 id="语言特性理解" tabindex="-1"><a class="header-anchor" href="#语言特性理解"><span>语言特性理解</span></a></h3><p>Codex 不仅支持语法,还理解:</p><ol><li><p><strong>语言范式</strong></p><ul><li>面向对象(Java, C++)</li><li>函数式(Haskell, Elixir)</li><li>过程式(C, Go)</li></ul></li><li><p><strong>语言特性</strong></p><ul><li>异步编程(async/await)</li><li>泛型(Generics)</li><li>装饰器(Decorators)</li><li>模式匹配(Pattern Matching)</li></ul></li><li><p><strong>生态系统</strong></p><ul><li>流行框架(React, Django, Spring)</li><li>标准库</li><li>常用第三方库</li></ul></li></ol><hr><h2 id="🧠-上下文理解" tabindex="-1"><a class="header-anchor" href="#🧠-上下文理解"><span>🧠 上下文理解</span></a></h2><h3 id="什么是上下文" tabindex="-1"><a class="header-anchor" href="#什么是上下文"><span>什么是上下文?</span></a></h3><p>在代码生成中,上下文包括:</p><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">上下文的三个层次:</span>
663<span class="line"></span>
664<span class="line">1. 局部上下文(Local Context)</span>
665<span class="line">   └─ 当前文件、相邻代码</span>
666<span class="line"></span>
667<span class="line">2. 项目上下文(Project Context)</span>
668<span class="line">   └─ 其他文件、项目结构</span>
669<span class="line"></span>
670<span class="line">3. 外部上下文(External Context)</span>
671<span class="line">   └─ 依赖库、文档、最佳实践</span>
672<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="上下文管理策略" tabindex="-1"><a class="header-anchor" href="#上下文管理策略"><span>上下文管理策略</span></a></h3><h4 id="_1-显式上下文" tabindex="-1"><a class="header-anchor" href="#_1-显式上下文"><span>1. 显式上下文</span></a></h4><p><strong>方式</strong>:在提示词中明确提供上下文</p><div class="language-python line-numbers-mode" data-highlighter="prismjs" data-ext="py"><pre><code class="language-python"><span class="line"><span class="token comment"># 好的提示(包含上下文):</span></span>
673<span class="line"><span class="token triple-quoted-string string">&quot;&quot;&quot;</span>
674<span class="line">我有一个 User 模型:</span>
675<span class="line">class User:</span>
676<span class="line">    def __init__(self, id, name, email):</span>
677<span class="line">        self.id = id</span>
678<span class="line">        self.name = name</span>
679<span class="line">        self.email = email</span>
680<span class="line"></span>
681<span class="line">请创建一个函数,将 User 对象序列化为 JSON</span>
682<span class="line">&quot;&quot;&quot;</span></span>
683<span class="line"></span>
684<span class="line"><span class="token comment"># 不好的提示(缺少上下文):</span></span>
685<span class="line"><span class="token triple-quoted-string string">&quot;&quot;&quot;</span>
686<span class="line">创建序列化函数</span>
687<span class="line">&quot;&quot;&quot;</span></span>
688<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="_2-隐式上下文" tabindex="-1"><a class="header-anchor" href="#_2-隐式上下文"><span>2. 隐式上下文</span></a></h4><p><strong>方式</strong>:让工具(如 Copilot)自动读取项目文件</p><div class="language-javascript line-numbers-mode" data-highlighter="prismjs" data-ext="js"><pre><code class="language-javascript"><span class="line"><span class="token comment">// 文件:models/User.js</span></span>
689<span class="line"><span class="token keyword">class</span> <span class="token class-name">User</span> <span class="token punctuation">{</span></span>
690<span class="line">  <span class="token function">constructor</span><span class="token punctuation">(</span><span class="token parameter">id<span class="token punctuation">,</span> name<span class="token punctuation">,</span> email</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
691<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>id <span class="token operator">=</span> id<span class="token punctuation">;</span></span>
692<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span></span>
693<span class="line">    <span class="token keyword">this</span><span class="token punctuation">.</span>email <span class="token operator">=</span> email<span class="token punctuation">;</span></span>
694<span class="line">  <span class="token punctuation">}</span></span>
695<span class="line"><span class="token punctuation">}</span></span>
696<span class="line"></span>
697<span class="line"><span class="token comment">// 文件:services/UserService.js</span></span>
698<span class="line"><span class="token comment">// 只需写注释,Copilot 会理解 User 模型</span></span>
699<span class="line"><span class="token comment">// 创建函数,根据 ID 查找用户</span></span>
700<span class="line"><span class="token keyword">async</span> <span class="token keyword">function</span> <span class="token function">findUserById</span><span class="token punctuation">(</span><span class="token parameter">id</span><span class="token punctuation">)</span> <span class="token punctuation">{</span></span>
701<span class="line">  <span class="token comment">
701// Copilot 自动生成,知道返回类型是 User</span></span>
702<span class="line"><span class="token punctuation">}</span></span>
703<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><hr><h2 id="🆚-codex-vs-传统工具" tabindex="-1"><a class="header-anchor" href="#🆚-codex-vs-传统工具"><span>🆚 Codex vs 传统工具</span></a></h2><h3 id="与-intellisense-的区别" tabindex="-1"><a class="header-anchor" href="#与-intellisense-的区别"><span>与 IntelliSense 的区别</span></a></h3><table><thead><tr><th>维度</th><th>IntelliSense</th><th>Codex</th></tr></thead><tbody><tr><td>理解方式</td><td>静态分析</td><td>语义理解</td></tr><tr><td>提示内容</td><td>API 列表</td><td>完整代码块</td></tr><tr><td>学习能力</td><td>无</td><td>持续演进</td></tr><tr><td>创造性</td><td>无</td><td>可生成新逻辑</td></tr></tbody></table><h3 id="与-github-copilot-的关系" tabindex="-1"><a class="header-anchor" href="#与-github-copilot-的关系"><span>与 GitHub Copilot 的关系</span></a></h3><div class="language-text line-numbers-mode" data-highlighter="prismjs" data-ext="text"><pre><code class="language-text"><span class="line">Codex 是底层技术</span>
704<span class="line">    ↓</span>
705<span class="line">GitHub Copilot 是产品化应用</span>
706<span class="line">    ↓</span>
707<span class="line">集成到 IDE,提供完整体验</span>
708<span class="line"></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h3 id="与-chatgpt-的区别" tabindex="-1"><a class="header-anchor" href="#与-chatgpt-的区别"><span>与 ChatGPT 的区别</span></a></h3><table><thead><tr><th>维度</th><th>ChatGPT</th><th>Codex(专业版)</th></tr></thead><tbody><tr><td>训练重点</td><td>通用对话</td><td>代码专精</td></tr><tr><td>代码准确性</td><td>85%</td><td>95%</td></tr><tr><td>集成方式</td><td>Web界面</td><td>IDE / API</td></tr><tr><td>实时性</td><td>对话式</td><td>实时补全</td></tr></tbody></table><hr><h2 id="💡-核心特点总结" tabindex="-1"><a class="header-anchor" href="#💡-核心特点总结"><span>💡 核心特点总结</span></a></h2><h3 id="codex-的五大核心优势" tabindex="-1"><a class="header-anchor" href="#codex-的五大核心优势"><span>Codex 的五大核心优势</span></a></h3><ol><li><p><strong>强大的代码理解能力</strong></p><ul><li>不只是语法,还理解语义和意图</li></ul></li><li><p><strong>广泛的语言支持</strong></p><ul><li>几乎所有主流语言都有良好支持</li></ul></li><li><p><strong>灵活的上下文管理</strong></p><ul><li>从单行到整个项目的上下文理解</li></ul></li><li><p><strong>多样的应用模式</strong></p><ul><li>补全、生成、转换、修复、测试</li></ul></li><li><p><strong>持续的学习演进</strong></p><ul><li>模型不断更新,能力持续提升</li></ul></li></ol><h3 id="使用建议" tabindex="-1"><a class="header-anchor" href="#使用建议"><span>使用建议</span></a></h3><p>✅ <strong>适合用 Codex 的场景</strong>:</p><ul><li>实现明确定义的功能</li><li>转换或重构代码</li><li>生成样板代码</li><li>编写测试用例</li><li>学习新技术栈</li></ul><p>❌ <strong>不适合的场景</strong>:</p><ul><li>复杂的业务逻辑(需要人工设计)</li><li>安全关键代码(需要严格审查)</li><li>创新性算法(AI 受限于训练数据)</li></ul><hr><h2 id="🎯-下一步" tabindex="-1"><a class="header-anchor" href="#🎯-下一步"><span>🎯 下一步</span></a></h2><p>现在你已经深入了解了 Codex 的核心能力,可以:</p>`,155)),a("ul",null,[a("li",null,[n[1]||(n[1]=s("📖 ",-1)),t(p,{to:"/ai-programming/codex/03-evolution-history.html"},{default:e(()=>[...n[0]||(n[0]=[s("03 - 版本演进历史",-1)])]),_:1}),n[2]||(n[2]=s(" - 了解技术发展脉络",-1))]),a("li",null,[n[4]||(n[4]=s("📖 ",-1)),t(p,{to:"/ai-programming/codex/04-architecture.html"},{default:e(()=>[...n[3]||(n[3]=[s("04 - 架构设计详解",-1)])]),_:1}),n[5]||(n[5]=s(" - 深入技术原理",-1))]),a("li",null,[n[7]||(n[7]=s("📖 ",-1)),t(p,{to:"/ai-programming/codex/06-best-practices.html"},{default:e(()=>[...n[6]||(n[6]=[s("06 - 最佳实践",-1)])]),_:1}),n[8]||(n[8]=s(" - 学习高效使用方法",-1))])]),n[12]||(n[12]=a("hr",null,null,-1)),a("p",null,[n[10]||(n[10]=s("👉 ",-1)),t(p,{to:"/ai-programming/codex/03-evolution-history.html"},{default:e(()=>[...n[9]||(n[9]=[s("下一章:03 - 版本演进历史",-1)])]),_:1})])])}const m=l(r,[["render",k]]),b=JSON.parse('{"path":"/ai-programming/codex/02-core-features.html","title":"Codex 核心特点详解","lang":"zh-CN","frontmatter":{"title":"Codex 核心特点详解","description":"深入了解 OpenAI Codex 的核心能力和技术特点","lang":"zh-CN"}
708,"git":{"updatedTime":1766413539000,"contributors":[{"name":"wsyx","username":"","email":"[email protected]","commits":1}],"changelog":[{"hash":"6f88b92aa0bd0fb67a38a1ba536877d410aa38fb","time":1766413539000,"email":"[email protected]","author":"wsyx","message":"feat:文章结构优化"}]},"filePathRelative":"ai-programming/codex/02-core-features.md"}');export{m as comp,b as data};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.