别让 AI 成为技术债制造机!Cursor 设计总监 Ryo Lu 的 12 条防坑指南与工程化实践

别让 AI 成为技术债制造机!Cursor 设计总监 Ryo Lu 的 12 条防坑指南与工程化实践

原创 薇冷Violet Vio的AI花园 2025年04月24日 11:59 北京

AI 编程进阶必读:Cursor 设计总监的 12 条硬核建议

这两天,如果你关注 AI 编程或自媒体,你很可能看到 Cursor 设计负责人 Ryo Lu 的 12 条实战指南频频刷屏。

Ryo 分享了 12 条"正确"使用 AI 编程工具的最佳实践,在社区中引发了强烈共鸣和广泛讨论。

Image

为什么 Ryo 的分享会如此火爆?因为他一针见血地指出了大家在使用 AI 编程时的普遍困境:

💡

用对了 Cursor,代码既快又干净。

用错了,就是一团 AI 意大利面(AI spaghetti),你要清理一整周的垃圾。

与其说这是 Cursor 的使用说明,不如说是一套适用于当下几乎所有 AI 编程助手的通用“心法”。它强调了结构、控制、精准沟通和持续反馈的重要性。

接下来,我会给你深入拆解这 12 条黄金法则,看看如何才能真正驾驭 AI,让它成为我们手中高效、高质量的生产力工具,而不是“意大利面”制造机。

Ryo Lu 是谁?

Ryo Lu 目前担任 Cursor 的 Head of Design。他曾在 Notion 和 Stripe 工作,并有创业经验。

Ryo Lu 以"思考到本质,用近乎科研的方式做产品"而闻名,始终致力于"解决最本质的问题,服务最本质的需求"。

Image

凭借这种注重本质和用户体验的产品背景,他对 AI 编程工具 Cursor 的使用心得和实践分享显得尤为珍贵。

基于这样的背景,Ryo Lu 在 Cursor 社区分享了 12 条 AI 编程最佳实践,帮助开发者避免产生"AI spaghetti"(意大利面式杂乱成一团的)代码,转而生成快速、干净的代码。

某种意义上, 我们确实可以把 Ryo 的分享当做 Cursor 官方的开发最佳实践指南。

一张图看懂核心(12 条黄金法则概览)

Image

可以说:Ryo 的核心观点可以总结为:要想 AI 好用,你必须给足结构、精准控制、有效沟通、并持续反馈。 把 AI 当作需要明确指令和监督的得力助手,而不是能读懂你心思的神奇黑盒。

手把手教你拆解 Ryo 分享的方法论

看完了一图流总结, 我相信你肯定感觉还有点懵, 嗯嗯, 大佬说的好像很厉害,但是我具体怎么做呢?

别慌, 我将带你一步步拆解大佬说的每一点到底是什么意思,我们又该做什么。

在接下来的旅程中,我会带你逐一解析这 12 条原则,探究并理解每一条方法论旨在解决什么问题,你又该做什么动作去实践这个方法论。

一)设定项目规则

提前设定 5-10 条明确的规则,确保 Cursor 准确理解项目结构和约束条件。建议使用/generate 命令为现有代码库生成规则模板。

它解决了什么问题?

防止 AI 生成的代码与项目既有规范不一致、使用不当的模式或库、风格迥异,最终导致代码库混乱且难以维护。

因此,在深入开发前,定义 5-10 条核心项目规则:如语言生态、语言版本、架构风格(MVC、SPA)、命名约定、错误处理策略、禁用库等。

直接利用 Cursor 命令自动生成规则

Cursor 更新 0.49.4 版本后, 可以使用 /generate rules 可以扫描现有代码生成一些基础规则(尤其是代码风格),但架构、设计模式、核心业务逻辑相关的规则,最好仍需要我们自己定义。

当我们真正在开发大型项目时, 可能 50%以上的时间实际是在写文档(笑:)

Image

Image

Image

💡

提醒

规则不是越多越好,而是越清晰、越关键越好。

规则是给 AI 的“边界”和“导航”。 它让 AI 能在正确的轨道上高效产出,而不是天马行空地制造“意大利面”。

AI 一键生成的规则不一定满足需求,有时候一键生成的废话太多,有条件最好自己创作

二)精准细化提示

在提示中具体说明。明确技术栈、行为及约束条件,如同编写一份迷你规格书般详细说明。

它解决了什么问题?

应对那些模糊指令(例如“做一个登录功能”)迫使 AI 进行猜测,常常导致输出不准确、不完整或完全错误,浪费大量时间。

学会给定准确的要求和指标

有效的需求表达应当涵盖系统架构、技术栈选择、性能基准、安全规范等关键维度。

在实践中,我们可以通过详细说明

  • 系统的架构设计要求(如微服务架构设计、负载均衡策略)
  • 页面设计规范(如使用的 UI 样式库,图标库,CSS 库)
  • 具体的性能指标(如响应时间阈值、并发用户数)
  • 安全合规要求(如数据加密标准、访问控制机制)等方式

建立起 AI 能够准确理解和执行的需求模型。通过构建这样的系统化框架,不仅能够提升需求理解的准确度,还能为后续的迭代优化提供可靠的基础。例如:

"这个表格组件在处理 5000 条数据时出现明显卡顿,需要优化渲染性能,目标是将首次加载时间控制在 1 秒内,请考虑使用虚拟滚动或数据分片加载的方案。"

学会像写需求文档一样写提示词

当你需要开发一个网站时,你不能简单地告诉 AI"我要一个购物网站",而是最好绘制出一幅清晰的蓝图。在设计系统架构时会仔细考虑每个组件的作用一样,我们需要详细描述网站的功能需求、用户界面设计、性能要求以及安全考虑。

例如,你可以这样表达:

"我需要开发一个响应式的电子商务平台,支持多语言切换,集成支付系统,具备实时库存管理功能,并能承载至少 1000 个并发用户访问。用户界面需要遵循 Material Design 规范,确保跨平台兼容性。"

学会描述代码用例

进一步深入,我们可以通过具体场景来优化与 AI 的协作过程。假设你正在开发一个特定的功能模块,比如用户认证系统,你可以通过描述用例来引导 AI 理解需求:

"当新用户注册时,系统需要验证邮箱的唯一性,发送确认邮件,并在用户确认后自动创建账户。同时,我们需要实现 OAuth 2.0 协议,支持 Google 和 GitHub 账号登录,并确保所有密码都经过 bcrypt 加密存储。"

这种方式不仅让 AI 理解了具体的技术要求,还帮助它理解了背后的业务逻辑和安全考虑。这就像是在进行结对编程,通过清晰的沟通建立起默契的配合关系。

学会描述项目架构和业务逻辑

在需求描述的艺术方面,要学会从技术架构和业务逻辑两个层面来表达需求。例如,当需要 AI 协助设计一个用户认证系统时,应该这样写:

"我们正在开发一个企业级 React 应用,使用 React Query 处理服务端状态,需要实现基于 JWT 的认证系统。关键需求包括:支持多角色权限控制、集成 Single Sign-On、处理令牌刷新逻辑,并需要考虑前端路由保护的实现。"

三)化整为零,逐步实现

💡

逐文件处理;分小段生成、测试和审查,保持专注。

  • 它解决了什么问题? 避免一次性要求 AI 生成大型复杂功能时可能遇到的问题:输出质量下降、错误累积,或者产生难以理解、测试和调试的“庞然大物”式代码块。
     
  • 具体方法: 将大任务分解为更小、更易于管理的单元(单个函数、组件、API 端点)。对每个小的、聚焦的单元应用生成 → 测试 → 评审的循环。

像搭积木一样构建项目框架

正如之前所说, 我们需要明确的指定技术栈的提问方式:

如何使用 Vite 初始化一个 React+Typescript+pnpm 项目 chatbot

而不是

× 初始化我们的项目

得到的回答自然就会准确

Image

项目结构划分的最佳实践

我们要像搭积木一样,将项目划分为一个个不同的目录结构

我们首先运用之前学到的 上下文引用 的技巧

Image

快速了解一个 Web 项目需要有什么样的结构

不难得出一个结论:

项目的结构越规范, AI 理解的难度就越低, 给出答案的正确率就越高

Image

四)测试驱动开发

先编写测试并固定规则,持续生成代码直至所有测试通过。

它解决了什么问题?

确保 AI 生成的代码不仅能够运行,而且真正满足预期的功能需求并正确处理边界情况,防止出现“看似可行但逻辑错误”的输出。

思考需求,编写测试

拿到一个新功能需求后,首先思考:“我如何验证这个功能是正确的?”

将这些验证点转化为具体的测试用例(通常是单元测试或集成测试)。

使用你选择的测试框架(如 Jest, Pytest, JUnit 等)编写这些测试代码。

此时,这些测试理应是失败的(红色的),因为实现代码还不存在。

清晰指示,AI 实现

现在,向 AI 发出指令:

“请为 [某个类/函数/模块] 实现功能,使其能够通过 @/tests/test_feature_x.py 中的所有测试。”

你甚至可以把测试代码本身作为上下文提供给 AI。

运行测试,迭代修正

让 AI 生成代码后,立即运行测试套件。

如果全部通过: 太棒了!进行代码审查(Code Review),确认代码风格、效率等方面没问题后,可以认为任务完成了。

如果部分或全部失败: 查看失败的测试用例和错误信息。判断是 AI 理解有误,还是你的测试本身有问题。如果是 AI 的问题,可以向 AI 指出错误:

“这个测试 @test_invalid_input 失败了,预期是抛出 ValueError,但实际没有。请修正代码。”

或者,如果错误比较复杂,可以自己动手修改,然后(如心法 5 和 8 所述)反馈给 AI。

重复循环

持续这个“测试-重构”的循环,直到所有预期的测试都通过,并且你对代码实现感到满意。

五)审核输出——评审、修正并反馈

始终仔细检查 AI 的输出,及时修复其中出现的问题,并让 Cursor 将其作为参考示例。

解决了什么问题

AI 可能引入细微的 Bug、性能问题、安全隐患,或者只是不符合最佳实践的代码。盲目接受 AI 输出会累积技术债。同时,不提供反馈会阻碍 AI 的学习过程。

具体方法——学会代码审查

善用代码审查式的反馈方式来优化实现。当 AI 提供的代码需要改进时,可以这样说:

"这个实现中的 useEffect 依赖项没有完全声明,可能导致闭包陷阱,另外考虑到可复用性,建议将这个逻辑抽取为自定义 Hook。"

通过掌握这些技巧,我们能够更好地引导 AI 理解专业的技术需求,获得更高质量的代码实现和解决方案。

与 AI 的技术对话是一个反复优化的过程,需要我们不断调整表达方式和技术细节的深度。

六)精准定位 —— @ 的神奇妙用

使用@文件、@文件夹、@git 将 Cursor 的注意力精准定位到代码库的相关部分。

它解决了什么问题

AI 模型的上下文窗口有限。为每个查询提供整个代码库的访问权限,可能会让 AI 被不相关信息淹没,导致响应缓慢、建议不准确或遗漏关键的局部上下文。

使用 @ 的具体方法

在 Cursor 中,通过@明确指定文件,目录,代码片段,文档,项目代码库,互联网为上下文,精确地将 AI 的注意力引导至当前任务相关的代码部分,并明确排除不相关部分。能极大增强 Cursor 理解能力

Image

让我们再次明确,编程提示词的最佳实践是清晰明确且具有针对性,能够准确引导模型理解并回应你的问题

一个引用上下文的最佳实践示例
我希望实现一个新的功能:当 @ChatPages 聊天页面加载初始化时动态渲染逻辑。
根据 @ControlStore 中的 @enableRefreshWelcome 的值动态决定是加载 @Welcome 欢迎页面, 还是从 @SessionStore 中调用 @getCurrentSession 方法获取上一次最后的会话连接,渲染消息页面@MessagesRender 组件

七)文档驱动开发

将设计文档和检查清单保存在 .cursor/rules/ 目录下,确保 AI 代理能全面掌握后续任务所需的上下文信息。

它解决了什么问题

有时,理解为何需要某种方法与知道做什么同样重要。缺乏背景信息,AI 的建议可能在技术上可行,但与更广泛的项目目标或架构理念相悖。

文档驱动开发的具体方法

将相关的元信息——设计文档、架构决策记录 (ADRs)、API 规范、风格指南、检查清单——存储在 AI 可访问的位置(例如 .cursor/rules/目录)。

第一层:简单程序(如 SVG 图标、静态 HTML 页面、浏览器拓展)

复杂度特点: 范围小,依赖少,逻辑简单,通常单文件或少数几个文件。

目标: 确保基本格式、语法、核心要求被遵守。

实操方式: 使用一个简单的 requirements.md 文件,甚至直接在提示词(Prompt)的开头明确规则。

requirements.md 或 Prompt 开头示例内容:

# 项目规则 (Project Rules for Simple SVG Card)

目标: 创建一个包含用户头像、姓名和邮箱的 SVG 卡片。
技术: 使用 SVG 1.1 标准。不使用任何外部 CSS 或 JavaScript。所有样式内联。
结构: 必须包含 <svg> 根元素,内部有 <image> (头像), 两个 <text> 元素 (姓名, 邮箱)。
样式:
背景色: #f0f0f0
字体: Arial, 14px
头像: 圆形, 50x50px
元素间距: 10px
命名: SVG 元素 ID 使用 kebab-case (例如 user-avatar, user-name)。
禁止: 不要使用 <defs>, <g> 元素(除非绝对必要)。

与 Cursor 交互示例:

 请根据 @requirements.md 中的要求,生成一个 SVG 用户卡片的代码。

第二层:中等难度程序(如小程序、无数据库纯前端应用)

复杂度特点: 涉及多个页面/组件、基本的用户交互、可能有模拟数据或调用简单 API、使用前端框架。

目标: 保证技术栈统一、组件结构规范、基本代码风格一致、关键功能点明确。

实操方式: 将规则拆分到几个专门的 Markdown 文件中,通常放在项目根目录的 .cursor/rules/ 或 docs/ 文件夹下,方便 Cursor (通过 @ 引用) 和开发者查阅。

示例文件结构与内容:

.cursor/rules/overview.md: 项目总体目标、核心功能点、目标用户。

.cursor/rules/tech_stack.md:

# 技术栈规则 (Tech Stack Rules)

框架: React 18+ (使用 Function Components 和 Hooks)
语言: TypeScript 5.x (启用严格模式 strict: true)
状态管理: Zustand (禁止使用 Redux 或 Context API 进行全局状态管理)
路由: React Router v6
UI 库: Material UI (MUI) v5
代码风格: 使用 Prettier (配置见 .prettierrc) 和 ESLint (配置见 .eslintrc.js),遵循 Airbnb 风格指南。
禁止: 禁止使用 any 类型,除非有明确注释说明原因。禁止直接操作 DOM。

.cursor/rules/component_guidelines.md:

# 组件开发规范 (Component Guidelines)

命名: 组件文件 PascalCase.tsx,样式文件 ComponentName.module.css (使用 CSS Modules)。
结构: 每个组件一个文件夹,包含 index.tsx (导出组件) 和样式文件。
Props: 使用 TypeScript Interface 定义 Props,命名为 ComponentNameProps。
状态: 优先使用局部状态 (useState),必要时才用 Zustand。
测试: 简单组件需包含基本的渲染测试 (使用 React Testing Library)。

.cursor/rules/todo.md: 当前要开发的功能列表或用户故事。

与 AI 交互示例:

请在 @/components 目录下创建一个新的 UserProfile 组件,遵循 @./.cursor/tech_stack.md 和 @./.cursor/component_guidelines.md 中的规范。该组件需要显示用户名和邮箱(从 props 接收)。

第三层:复杂全栈应用(前后端分离、数据库、单体服务应用)

复杂度特点: 涉及前后端、数据库、API 设计、认证授权、部署、团队协作、高可维护性要求。

目标: 全方位规范化,确保架构一致性、技术选型合理、代码质量、安全性、可测试性、团队协作效率。

实操方式: 需要更系统化、结构化的文档体系,这些文档本身就是一个项目的重要数字资产。通常由架构师、技术负责人和产品经理共同制定,也就是需要你让 AI 分别扮演不同角色

这一点 Roo 交互体验做的很好, Trae 新上线的智能体也是一种方式,Cursor 反而落后了,虽然也有自定义 Agent, 但是交互做的很烂

示例文件/文档体系放在项目根目录的 .cursor/rules/ 或 docs/ 文件夹下,方便 Cursor (通过 @ 引用) 和开发者查阅:

  • ProductRequirementsDocument (PRD).md:

产品需求文档,定义业务目标、用户故事、功能范围。(给 AI 提供业务背景)

  • Architecture.md:

系统架构设计,描述服务划分(如微服务)、核心组件、技术选型理由、数据流。( 告诉 AI 系统的宏观蓝图)

  • TechStack_Frontend.md / TechStack_Backend.md:

分别定义前后端详细的技术栈、库版本、构建工具。( 类似中等复杂度的 tech_stack.md,但更详尽)

  • API_Design_Guide.md: API 设计规范 (如 RESTful 风格、GraphQL 规范)、URL 命名、请求/响应格式、版本策略、认证方式 (JWT, OAuth)。(指导 AI 如何设计和实现 API)

  • Database_Schema_Design.md:

数据库选型 (PostgreSQL, MongoDB...)、表/集合设计原则、字段命名规范、索引策略、ORM 使用规范。( 指导 AI 如何与数据库交互)

  • CodeStyle_Guide.md:

统一的代码风格规范 (可能包含链接到 ESLint/Prettier 配置文件)、详细的命名约定 (变量、函数、类、接口、数据库表/字段等)、注释要求。( 比中等复杂度更严格和细致)

  • ErrorHandling_Strategy.md:

全局错误处理机制、不同层级 (UI, Service, Controller, DB) 的错误处理方式、错误码定义、日志记录规范。( 指导 AI 如何健壮地处理异常)

  • Testing_Strategy.md:

单元测试、集成测试、端到端测试的要求、测试覆盖率目标、使用的测试框架和库。( 指导 AI 编写符合要求的测试)

  • Security_BestPractices.md:

安全最佳实践清单,如输入验证、输出编码、防止 SQL 注入、XSS、CSRF、密码存储策略、依赖库安全扫描要求。( 让 AI 生成的代码更安全)

  • BadPractices_AntiPatterns.md:

明确禁止使用的技术、库、设计模式或代码写法。( 为 AI 划定红线)

与 AI 交互示例:

"请为后端服务 (@./services/backend) 实现一个新的 RESTful API endpoint /users/{userId}/profile (GET 请求)。需遵循 @./docs/API_Design_Guide.md 规范,从 PostgreSQL 数据库( schema 见 @./docs/Database_Schema_Design.md)获取用户信息。确保代码符合 @./docs/CodeStyle_Guide.md 和 @./docs/ErrorHandling_Strategy.md。禁止直接在 Controller 层调用数据库,需通过 Service 层。"

八)行胜于言 —— 你自己写的代码才是最好的代码

如果代码有误,就自己重新编写通过修改来学习得更快,而不是通过解释。

它解决了什么问题

当 AI 输出存在显著缺陷或概念性错误时,试图通过冗长的自然语言提示来解释所需的更改,往往效率低下且效果不如直接修改。

直接编辑代码以体现正确的实现。

处理 AI 误解时,最有效的方法是通过代码示例来澄清。当发现 AI 的实现偏离预期时,可以指出:"这个实现使用了 class 类模式,但我们项目中统一使用函数式组件和 Hooks 模式,请参考以下代码风格重构:

// 期望的实现风格
constUserProfile: React.FC<UserProfileProps> = ({ userId }) => {
  const { data, isLoading } = useQuery(['user', userId], fetchUserData);
  const [isEditing, setIsEditing] = useState(false);
  // ...
}

九)善用历史 —— 在对话中迭代优化

利用聊天历史对旧提示进行迭代,无需从头开始。

它解决了什么问题

每次需要基于之前的 AI 交互进行微调、功能扩展或小错误修复时,都重新解释全部背景信息既繁琐又容易出错。AI 助手通常能维持对话上下文。利用历史记录可以实现高效迭代,在先前结果的基础上进行构建,无需重复整个设置过程,使开发流程更加顺畅。

具体方法——@Past Chats

使用 @Past Chats 引用之前的交互内容,并基于已建立的上下文请求增量式的更改或改进。

Image

十)因“模”施教 —— 有策略地选择模型

有目的地选择模型:Gemini 侧重精确性,Claude 侧重广度。

它解决了什么问题

不同的底层大语言模型 (LLMs) 各有优劣。对所有任务都使用单一默认模型可能无法在每个特定需求上都获得最佳效果。理解可用模型的特性。

如何选择合适的模型

Ryo 认为 Gemini 可能更侧重精确性和深度,而 Claude 可能更擅长处理广度(具体特性会演变)。根据当前任务的需求(例如,逻辑准确性 vs 创造性生成 vs 长上下文处理),有意识地选择其优势最匹配的模型。

但这是我最困惑的一点!我一直以来的开发体验是——Gemini 更适合超长上下文理解和项目整体架构、跨模块的实现与解耦合设计,Claude 反而在 React 组件这种函数级精确性上更胜一筹

💡

不知道你的体验如何,把你的感受打在评论区

十一)探索未知 —— 让 AI 成为你的人生导师

在新或陌生的技术栈中,提供文档链接。要求 Cursor 逐行解释所有错误及修复步骤。

它解决了什么问题

面对不熟悉的技术栈时,学习曲线陡峭,难以理解的错误信息可能成为主要障碍。

当你或者 AI 面对一个全新的、不熟悉的技术栈(编程语言、框架、库)时,不要期望 AI 能“无师自通”。

如何用好 Cursor 强大的文档理解能力

当遇到编译错误或运行时异常时,不要仅仅满足于 AI 给出的解决方案。

而是主动将官方文档的链接提供给它。要求它 逐行解释 错误发生的根本原因是什么,以及它提出的修复方案背后的逻辑依据。

这不仅能加速你对新技术的学习和理解,同时也是检验 AI 是否真正理解了文档和问题本质的有效方法。

只需要复制官方文档链接。直接添加到 Docs 模块中

Image

十二)如何驾驭大型项目

💡

让大型项目整夜进行索引,并限制上下文范围以保持性能流畅。

它解决了什么问题

对于代码量巨大的项目,AI 工具首次进行全量索引(理解整个项目的结构和依赖关系)可能需要较长时间。

首次索引非常大的代码库可能耗时较长。在日常开发中,过于宽泛的上下文查询也会降低 AI 的响应速度,打断工作流。

可以考虑在非工作时间(如夜间)让它在后台完成这个过程。而在日常开发中,为了保持 AI 的响应速度和交互体验,应尽可能利用 @ 等功能,将 AI 的注意力限制在当前任务最相关的较小范围内,避免不必要的计算开销。

具体方法:

为大型项目的首次索引预留足够时间(例如,在非工作时间进行)。在日常工作中,积极使用范围限定功能(@)将 AI 的上下文限制在当前任务最相关的代码部分。不过这个我们一般用到的不多。

三、心法背后的哲学:结构与控制,驾驭 AI 的不变法则

仔细品味这 12 条建议,你会发现它们贯穿始终的核心思想,

正是 结构 (Structure) 与 控制 (Control)。

在 AI 能力飞速发展,但尚未达到通用人工智能(AGI)的当下,人与 AI 的高效协作模式,必然是 人类主导 的模式。我们必须扮演好“架构师”、“导航员”的角色:

  • 我们定义目标和边界:通过设定规则、编写测试、明确需求。
  • 我们提供结构化的输入和上下文:通过精准的提示词、限定范围、提供背景文档。
  • 我们控制流程和节奏:通过拆分任务、小步迭代、利用历史记录。
  • 我们进行最终的审核和把关:通过人工审查、动手修正、提供反馈。

将 AI 视为一个潜力巨大、学习飞快,但仍需悉心指导的“强力实习生”或“初级队友”。给予它清晰的路线图,必要的工具和信息,及时的纠偏和指导,它就能爆发出惊人的能量,成为你手中无往不利的开发利器。

反之,如果缺乏这种结构化的引导和必要的控制,过于迷信 AI 的自主能力,盲目地将任务“外包”给它,那么等待你的,很可能就是那一盘难以下咽、越理越乱的“AI 意大利面”。

AI 编程的浪潮已然到来,它无疑会极大地提升我们的开发效率,改变我们的工作方式。但工具的价值,终究取决于使用工具的人。

掌握了这些“术”,你手中的 Cursor 才能真正发挥出最大效能。

你将不再仅仅是 AI 的使用者,而是能够驾驭 AI、指导 AI,共同完成复杂创造任务的“工程师”。

希望这篇拆解能为你带来启发。从下一个 git commit 开始,尝试将这些原则融入你的日常开发吧,看看你和你的 AI 队友,能共同谱写出怎样更优雅、更高效的代码篇章。

将 Cursor 视为一个资深的初级开发者

——若正确指导,它便能快速高效地完成任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值