当前位置: 首页 > article >正文

LeetCode自动化刷题工具:从原理到实践,打造高效算法训练工作流

1. 项目概述当“刷题黑帮”遇上“猎豹”如果你是一名程序员尤其是正在准备技术面试的程序员那么“LeetCode”这个名字对你来说一定不陌生。它就像程序员界的“高考题库”是检验算法与数据结构能力的试金石。然而日复一日地刷题、调试、看题解这个过程本身充满了重复劳动和效率瓶颈。你有没有想过如果能有一个工具像猎豹一样敏捷帮你自动化处理那些繁琐的步骤让你能更专注于算法逻辑本身那该多好这正是leetcode-mafia/cheetah这个项目试图解决的问题。从名字就能看出它的野心“LeetCode Mafia”LeetCode黑帮暗示着一个致力于高效、甚至有点“硬核”地攻克LeetCode的社区或团队而“Cheetah”猎豹则象征着速度与效率。这个项目本质上是一个LeetCode自动化刷题与学习工具。它不是一个简单的题目爬虫而是一个集成了题目获取、代码生成、本地测试、提交监控乃至学习路径规划等功能的“瑞士军刀”。它的目标用户非常明确那些希望系统化、高效率提升算法能力并最终通过技术面试的开发者。无论是正在找工作的应届生还是寻求职业突破的资深工程师都能从中获益。简单来说cheetah试图将你从“打开浏览器 - 登录LeetCode - 选择题目 - 在简陋的在线编辑器中编码 - 手动运行测试用例 - 提交并等待结果”这一整套冗长流程中解放出来。它让你能在自己最熟悉的本地开发环境如VSCode、PyCharm中用上版本控制、代码补全、强大的调试器等所有现代开发工具来应对算法挑战。这不仅仅是节省了几次点击更是将刷题体验从“网页应用”升级到了“专业开发”的维度。2. 核心设计思路与架构拆解要理解cheetah如何工作我们需要先拆解一个典型的LeetCode刷题流程中的痛点并看它是如何针对性地设计解决方案的。2.1 痛点分析与解决方案映射传统的刷题流程存在几个明显的效率洼地环境割裂在线编辑器的功能远不如本地IDE强大缺乏代码补全、重构、断点调试等能力。流程繁琐每次做题都需要重复登录、查找题目、手动输入测试用例。状态管理困难自己的解题代码、笔记、不同的解法分散各处难以系统化复习和管理。缺乏个性化LeetCode官方的题目列表和顺序是固定的难以根据个人的薄弱环节进行针对性训练。cheetah的架构正是围绕解决这些痛点构建的。它通常采用客户端-服务端协作的模式尽管有些实现可能是纯客户端工具。客户端CLI / IDE插件这是用户直接交互的部分。一个命令行工具是核心它负责接收用户指令如“获取第1题”、“用Python3测试我的代码”、“提交答案”。更高级的版本可能会提供图形界面或深度集成到VSCode等编辑器的插件让操作更加无缝。核心引擎这是项目的大脑。它包含几个关键模块题目管理模块负责与LeetCode的接口通信获取题目描述、示例、初始代码模板、测试用例等信息。这里涉及到模拟登录、会话维持、API调用或网页爬取需谨慎处理反爬机制。代码生成与文件管理模块根据获取的题目信息在本地预定义的项目目录结构中生成对应语言Python、Java、C等的解题文件。文件命名和存放通常有固定规则例如problems/001-two-sum/solution.py。测试运行器这是核心价值所在。它能够自动将用户本地编写的解法代码与从LeetCode获取的示例测试用例甚至隐藏用例如果可能结合起来在本地运行并验证结果。这避免了频繁的“提交-失败-修改”循环节省了大量时间。提交与状态同步模块当用户对本地测试结果满意后可以通过该模块将代码提交回LeetCode并获取判题结果Accepted/Wrong Answer/Time Limit Exceeded等。同时它可能将提交状态、用时、内存消耗等信息同步回本地用于生成个人数据报告。本地仓库结构一个良好的cheetah项目会强制或推荐一种清晰的本地方案结构。例如leetcode-cheetah-workspace/ ├── config.json # 配置文件存放LeetCode账号、偏好语言等 ├── problems/ # 所有题目目录 │ ├── 001-two-sum/ # 以题号-题目名称命名的文件夹 │ │ ├── README.md # 从LeetCode拉取的题目描述Markdown格式 │ │ ├── solution.py # 你的解法代码 │ │ ├── test_cases.py # 自动生成的测试用例文件 │ │ └── notes.md # 你的个人解题笔记 │ └── 002-add-two-numbers/ ├── templates/ # 代码模板用于自动生成solution文件 └── stats.json # 你的刷题统计信息通过数、提交记录等这种结构化的存储使得所有资料本地化、版本可控可以用Git管理极大方便了复习和整理。2.2 技术选型背后的考量一个典型的cheetah类项目可能会选择以下技术栈每项选择都有其实际考量编程语言Python / Node.js这是最常见的选择。原因在于它们拥有丰富的网络请求库requests,axios、HTML解析库BeautifulSoup,cheerio用于应对可能的网页抓取以及强大的脚本能力来组织整个工作流。Python尤其受欢迎因为其语法简洁本身就是LeetCode的主流解题语言之一工具链用同样的语言写对用户更友好。网络交互Session API / Puppeteer与LeetCode交互有两种主流方式。一是直接调用其内部API这需要逆向工程其网络请求效率高但可能因官方改动而失效。二是使用无头浏览器工具如Puppeteer,Selenium模拟真实用户操作稳定性更强但资源消耗更大。成熟的cheetah项目通常会实现一种降级策略优先使用API失败时回退到浏览器模拟。配置管理JSON / YAML / TOML用于存储用户凭证、偏好设置、题目过滤条件等。JSON因其普遍性和简单性被广泛使用。测试框架集成虽然可以自己写测试运行逻辑但更优雅的方式是集成流行的测试框架如pytestPython或jestJavaScript。这样用户可以直接使用这些框架强大的断言和夹具功能cheetah只需负责生成测试用例文件。注意任何涉及自动化与LeetCode服务器交互的工具都必须严格遵守LeetCode的robots.txt和服务条款。过度频繁的请求可能导致IP被封。因此一个负责任的cheetah工具必须内置请求频率限制、缓存机制避免对同一题目重复请求并明确提示用户将其用于个人学习目的。3. 核心功能模块深度解析接下来我们深入cheetah的几个核心功能模块看看它们是如何具体实现的以及你在使用中需要注意的细节。3.1 身份认证与会话管理这是所有操作的起点。cheetah需要以你的身份与LeetCode通信。实现原理凭证存储工具会提供一个配置命令如cheetah config --username your_email --password your_password将你的LeetCode账号密码加密后存储在本地配置文件中。绝对不要将配置文件提交到公开的Git仓库登录与维持会话工具启动时会读取凭证并向LeetCode的登录接口发送POST请求。成功后服务器会返回一个会话Cookie通常是LEETCODE_SESSION和csrftoken。核心引擎会维护这个Cookie并在后续的所有请求中自动携带以保持登录状态。安全考虑密码的存储是一个敏感问题。较好的实践是使用操作系统提供的密钥环如macOS的Keychain、Linux的KWallet、Windows的Credential Manager来存储密码而不是明文存放在文本文件中。如果只能存文件至少要进行简单的对称加密。实操心得如果遇到登录失败首先检查LeetCode账号密码是否正确其次检查网络环境。有些地区可能需要处理网络连通性问题。工具可能会因为LeetCode登录页面改版或增加验证码如Recaptcha而暂时失效。这时需要维护者更新工具的解码逻辑。作为用户可以关注项目的Issue页面是否有类似反馈。建议专门为工具创建一个LeetCode账号或者使用第三方账号如GitHub登录以隔离风险。3.2 题目获取与本地化这是构建本地知识库的基础。命令可能类似于cheetah fetch 153或cheetah get two-sum。工作流程解析输入工具需要能处理题号153、题目名称的slugtwo-sum或完整的URL。请求数据向LeetCode的题目详情API端点如https://leetcode.com/api/problems/algorithms/下的某个具体链接发送请求或者解析题目页面的HTML。提取结构化信息从返回的数据中解析出题目描述包括文本、示例、约束条件。通常需要将HTML转换为Markdown以便本地阅读。初始代码模板LeetCode为每种支持语言提供的函数签名。例如Python中two-sum的模板可能是class Solution: def twoSum(self, nums: List[int], target: int) - List[int]:。示例测试用例题目中给出的输入输出示例。有些高级工具会尝试获取更多的测试用例但这通常需要更复杂的逆向工程。生成本地文件在problems/001-two-sum/目录下创建README.md写入题目描述。创建solution.py写入获取到的代码模板。创建test_cases.py或test_solution.py将示例测试用例编写成可执行的测试代码。注意事项代码模板的适配LeetCode的模板可能包含一些特殊的导入如List,TreeNode。工具在生成本地文件时需要确保这些导入语句在本地环境中是有效的例如在Python中添加from typing import List。图片等资源的处理题目描述中可能包含图片。简单的工具可能会忽略或保留图片链接但这会导致本地README无法显示图片。更完善的工具会将这些图片下载到本地并替换Markdown中的链接。题目分类与标签好的工具在获取题目时还会一并拉取题目的标签如“数组”、“哈希表”、“困难”并可能将这些信息写入本地文件的元数据中便于后续按标签筛选复习。3.3 本地测试运行器效率提升的核心这是cheetah的灵魂功能。你写完代码后不需要去网页点“Run Code”而是在终端执行cheetah test 001或cheetah test two-sum。内部机制测试用例加载运行器读取为该题目生成的test_cases.py文件或者直接从内存中获取之前拉取的测试用例数据。环境准备它会在一个独立的进程或沙箱中导入你刚刚编写的solution.py中的Solution类。执行与比对对于每一个测试用例输入运行器调用你的解法函数得到输出然后与预期输出进行比对。比对不是简单的因为有些题目输出可能是链表或树需要专门的比较函数例如对于链表需要遍历比对每个节点的值。结果报告清晰地在终端打印出哪些用例通过哪些失败。对于失败的用例会打印出输入、你的输出和预期输出方便调试。高级特性自定义测试用例除了自动获取的示例你应该能在本地方便地添加自己的测试用例用于测试边界条件。这可以通过修改test_cases.py或提供一个额外的自定义用例文件来实现。性能测试一些工具会粗略地计算你的代码运行时间并与一个阈值进行比较提前预警可能存在的性能问题超时风险。多语言支持运行器需要根据题目和你的选择调用不同的解释器或编译器python3,node,javacjava,g。踩坑记录全局变量状态LeetCode的判题系统每次测试都会重新初始化你的Solution类实例。如果你的解法函数依赖于类的实例变量并且没有在函数内正确初始化可能会导致前一个测试用例的状态影响下一个在本地测试时可能发现不了但提交后会出错。本地测试器应模拟这种行为每次测试前重新实例化类。输入输出格式务必注意输入参数的类型。LeetCode传递的是列表而不是字符串化的列表。你的本地测试用例必须精确模拟这一点。3.4 一键提交与状态同步当本地测试全部通过后使用cheetah submit 001提交代码。提交过程代码读取与格式化工具读取你本地的solution.py可能需要做一些格式化如去除多余的空行、确保编码正确然后构建成LeetCode提交API所需的JSON payload。发送提交请求向LeetCode的提交接口发送包含题目ID、语言ID、代码内容的请求。轮询获取结果提交后不会立即返回结果。工具需要每隔1-2秒向结果查询接口发起请求直到返回Accepted,Wrong Answer,Runtime Error等最终状态。结果解析与展示将结果以友好的格式打印在终端。如果出错了要尽可能展示错误信息如错误的测试用例输入输出、运行时错误堆栈。更新本地状态将本次提交的结果是否通过、用时、内存消耗记录到本地的stats.json文件中。这为生成个人刷题报告奠定了基础。注意事项网络超时与重试提交和查询结果的过程可能因网络问题失败。工具需要有合理的超时设置和重试机制。提交频率限制虽然不如登录严格但过于频繁的提交也可能触发风控。工具应在连续提交间添加微小延迟。处理多种结果除了常见的几种状态还可能遇到Compile Error,Time Limit Exceeded (TLE),Memory Limit Exceeded (MLE)。工具需要能妥善解析和展示这些信息给用户明确的调试方向。4. 从零开始搭建你的Cheetah工作流了解了核心原理后我们可以一步步搭建自己的高效刷题环境。这里不局限于某个特定的leetcode-mafia/cheetah项目而是提供一种通用的、可复现的思路。4.1 环境准备与工具选型首先你需要选择或组装你的“猎豹”。有几个方向使用成熟的开源项目在GitHub上搜索leetcode cli、leetcode helper等关键词能找到很多类似cheetah的项目。例如leetcode-sync、leetcode-tools等。选择时看星星数、最近更新日期和Issue的活跃度。自行组装如果你喜欢折腾可以用几个工具拼凑题目获取使用leetcode-api这类第三方封装好的API库如果可用且稳定。本地测试自己写脚本利用pytest框架。你只需要写一个通用的测试加载和运行逻辑。文件管理用简单的Python/Shell脚本创建标准化的目录和文件。IDE插件许多流行的编辑器都有LeetCode插件如VSCode的LeetCode Extension。它们提供了非常类似cheetah的集成体验并且通常更稳定因为维护者众。这可能是最省心的入门方式。我的选择与理由 我个人偏好“成熟开源CLI工具 自定义脚本补强”的模式。原因在于成熟工具解决了最复杂的网络交互和解析问题而自定义脚本可以灵活地适配我的个人工作流比如自动生成包含特定笔记模板的Markdown文件或者将刷题记录同步到我的Notion知识库中。纯粹的IDE插件虽然方便但有时在定制化方面受限。假设我们选择了一个基于Python的CLI工具安装通常很简单pip install leetcode-cheetah-cli # 假设工具包名如此 cheetah config # 进行初始配置设置账号和语言4.2 初始化工作区与目录结构规划运行初始化命令后工具会创建一个基础目录。但我建议你在此基础上规划一个更有助于长期学习和复习的结构。这是我使用的结构leetcode/ ├── .cheetahconfig # 工具配置文件通常自动生成 ├── scripts/ # 我自定义的辅助脚本 │ ├── generate_summary.py # 生成刷题进度总结报告 │ └── sync_to_notion.py # 同步到Notion数据库 ├── by_tag/ # **按标签分类的解题笔记核心** │ ├── array.md │ ├── hash-table.md │ ├── two-pointers.md │ └── ... ├── by_difficulty/ # 按难度分类的索引 │ ├── easy.md │ ├── medium.md │ └── hard.md └── problems/ # 工具管理的原始题目目录工具生成 ├── 001-two-sum/ ├── 002-add-two-numbers/ └── ...关键点problems/目录交给工具自动管理你只在这里面写解法代码和基础的测试。by_tag/和by_difficulty/目录是你个人知识体系的结晶。每当你攻克一道题除了在problems/下提交代码你还需要手动或通过脚本将这道题的核心思路、时间复杂度分析、一题多解对比、易错点总结到对应的标签文件中。例如在by_tag/hash-table.md中记录下“#1 Two Sum经典哈希表应用key存值value存索引...”。这个过程就是“把题刷薄”从“做1000道题”到“掌握100个套路”。scripts/目录下的自动化脚本能极大提升效率后文会举例。4.3 每日刷题实操流程假设今天要刷第15题“3Sum”。获取题目在终端进入你的leetcode目录运行cheetah fetch 15。工具会自动在problems/015-3sum/下创建文件。理解题目用你喜欢的Markdown阅读器打开problems/015-3sum/README.md仔细阅读。本地编码在IDE中打开problems/015-3sum/solution.py。你可以享受完整的代码补全、语法高亮和函数跳转。运行测试在IDE的终端或系统终端中运行cheetah test 15。如果失败根据输出调试。这里有个技巧不要只满足于通过示例用例。在test_cases.py里自己加几个边界用例比如空数组、全零数组、非常大的数组等确保代码健壮性。提交代码测试通过后运行cheetah submit 15。等待结果。记录与总结最重要的一步如果通过打开by_tag/two-pointers.md和by_tag/array.md因为3Sum常用双指针和数组排序添加一条新记录。格式可以自定我习惯这样## 15. 3Sum **链接**[LeetCode 15](https://leetcode.com/problems/3sum/) **核心思路**排序 固定一个数 对剩余部分使用双指针寻找两数之和。关键在于去重处理。 **时间复杂度**O(n^2) **空间复杂度**O(1) (忽略排序所需空间) 或 O(n) (取决于排序算法) **关键代码片段** python def threeSum(self, nums: List[int]) - List[List[int]]: nums.sort() res [] for i in range(len(nums)-2): if i 0 and nums[i] nums[i-1]: # 去重 continue l, r i1, len(nums)-1 while l r: s nums[i] nums[l] nums[r] if s 0: l 1 elif s 0: r - 1 else: res.append([nums[i], nums[l], nums[r]]) while l r and nums[l] nums[l1]: l 1 # 去重 while l r and nums[r] nums[r-1]: r - 1 # 去重 l 1; r - 1 return res易错点忘记对数组先排序。去重逻辑写错位置或遗漏固定位去重和双指针去重。在找到一组解后双指针需要同时移动。如果未通过在对应的标签文件里同样记录这道题但重点分析错误原因。是思路错误、边界条件没考虑还是实现有bug把这个思考过程写下来其价值远大于单纯记录正确答案。定期复习每周或每两周回顾by_tag/下的文件。看着自己的总结尝试在不看代码的情况下复现解法。这是巩固记忆、形成肌肉记忆的关键。4.4 效率提升自定义脚本自动化手动更新by_tag/文件虽然效果好但有点麻烦。我们可以写个小脚本半自动化这个过程。以下是一个Python脚本示例scripts/update_note.py的简化思路#!/usr/bin/env python3 import json import os from datetime import datetime # 假设你的工具在提交成功后会在题目目录下生成一个 meta.json包含题目信息和提交结果 PROBLEMS_DIR ./problems TAGS_DIR ./by_tag def update_note(problem_slug): problem_path os.path.join(PROBLEMS_DIR, problem_slug) meta_file os.path.join(problem_path, meta.json) with open(meta_file, r) as f: meta json.load(f) problem_id meta[id] title meta[title] url meta[url] difficulty meta[difficulty] tags meta[tags] # 假设tags是一个列表如 [Array, Two Pointers, Sorting] status meta[last_submission_status] note_content f ## {problem_id}. {title} **难度**{difficulty} **链接**{url} **状态**{status} **日期**{datetime.now().strftime(%Y-%m-%d)} **我的思路** 此处需要手动填写脚本可以打开编辑器让你输入 --- # 为每个标签文件追加内容 for tag in tags: tag_file os.path.join(TAGS_DIR, f{tag.lower().replace( , -)}.md) # 如果标签文件不存在创建它并添加一个标题 if not os.path.exists(tag_file): with open(tag_file, w) as f: f.write(f# {tag} 相关题目总结\n\n) # 在文件末尾追加该题目的笔记区块 with open(tag_file, a) as f: f.write(note_content) print(f笔记框架已添加到标签: {, .join(tags)}) # 随后你可以用系统命令打开一个编辑器让用户填写“我的思路”部分 # os.system(fcode {tag_file}) # 例如用VSCode打开 if __name__ __main__: import sys if len(sys.argv) 1: update_note(sys.argv[1]) else: print(请提供题目slug例如: python update_note.py 3sum)这个脚本只是一个起点。你可以将它集成到你的cheetah提交后钩子hook中实现每次成功提交后自动触发弹出编辑框让你填写思路然后自动归档。自动化程度越高你坚持记录和总结的阻力就越小。5. 常见问题与排查技巧实录即使工具再完善在实际使用中也会遇到各种问题。下面记录了一些典型场景和解决思路。5.1 网络与认证问题问题现象可能原因排查与解决思路登录失败提示无效凭证1. 账号密码错误2. LeetCode登录页面改版工具解析失败3. 账号被要求进行二次验证如邮箱验证码1. 用浏览器手动登录LeetCode确认凭证无误。2. 检查工具项目的GitHub Issue页面看是否有类似问题报告。3. 尝试使用GitHub授权登录LeetCode然后在工具中使用该方式如果工具支持。获取题目或提交时超时1. 网络连接问题2. LeetCode服务器不稳定3. 工具请求频率过高被临时限制1. 检查本地网络尝试访问leetcode.com看是否正常。2. 等待一段时间再试或访问LeetCode状态页面。3. 工具应有内置延迟如果没有可手动在配置中增加请求间隔。能登录但无法获取题目详情题目API接口变更这是开源工具最常见的失效原因。需要等待项目维护者更新API解析逻辑或者自己查看网络请求尝试修改工具源码。实操心得对于重度用户建议将工具的请求超时时间设置得长一些如30秒并启用请求重试2-3次。另外可以考虑使用本地缓存将获取过的题目描述和示例缓存起来避免每次都要重新请求。5.2 本地测试与运行问题问题现象可能原因排查与解决思路本地测试通过但提交后错误1. 全局变量/类变量状态污染前文已述2. 本地测试用例覆盖不全3. 时间复杂度或空间复杂度超限1. 检查解法函数是否依赖了外部变量或类属性确保函数是“纯”的。2. 在本地多构造一些边界和极端用例测试。3. 分析算法复杂度尝试用更大的数据量在本地粗略测试性能。测试运行器报导入错误1. 工具生成的代码模板缺少必要的导入如List,TreeNode2. Python路径问题1. 手动在solution.py开头添加正确的导入语句例如from typing import List, Optional。2. 确保在项目根目录或题目目录下运行测试命令。多语言支持问题工具配置的语言与实际文件语言不匹配检查工具的配置文件确认language设置是否正确如python3,java,cpp。确保本地安装了对应语言的运行环境。排查技巧当遇到“提交错误但本地测试通过”时最有效的方法是仔细阅读LeetCode的错误信息。如果是“Wrong Answer”它会给出第一个出错的测试用例的输入和预期输出。将这个用例精确地添加到你的本地test_cases.py中然后在本地重现和调试。这能解决90%以上的问题。5.3 工具本身的使用与配置问题问题现象可能原因排查与解决思路命令不存在或报错1. 工具未正确安装2. 环境变量PATH未配置3. Python依赖包缺失1. 重新安装工具pip install --upgrade package-name。2. 确认安装后命令行可执行文件的位置并将其添加到系统PATH。3. 查看工具文档安装所有必需的依赖pip install -r requirements.txt。配置文件损坏或丢失误删或手动编辑错误运行工具的初始化或配置命令如cheetah config --init重新生成。最好将配置文件备份。工具行为不符合预期如拉取题目到错误位置配置文件中的路径设置错误检查配置文件如.cheetahconfig或config.json中的workspace,problem_dir等路径设置确保是有效的绝对路径或相对于当前目录的正确相对路径。我的经验我将整个leetcode目录放在云同步盘如iCloud Drive、Google Drive中这样可以在多台电脑间无缝切换刷题环境。同时用Git进行版本控制但切记在.gitignore文件中忽略包含个人账号信息的配置文件如.cheetahconfig和可能包含密码的缓存文件。只提交题目描述、自己的解法代码和个人笔记这样既安全又便于回溯历史解法。最后工具终究是辅助。leetcode-mafia/cheetah这类项目提供的自动化能力就像给你配备了一辆高性能赛车和一条专业赛道但如何驾驶、如何规划训练计划、如何从每次练习中吸收经验仍然取决于驾驶者——也就是你自己。将节省下来的时间投入到更深度的思考、更系统的总结和更频繁的复习中才是提升算法能力的根本。

相关文章:

LeetCode自动化刷题工具:从原理到实践,打造高效算法训练工作流

1. 项目概述:当“刷题黑帮”遇上“猎豹”如果你是一名程序员,尤其是正在准备技术面试的程序员,那么“LeetCode”这个名字对你来说一定不陌生。它就像程序员界的“高考题库”,是检验算法与数据结构能力的试金石。然而,日…...

基于Cursor AI与Next.js+Prisma的全栈Todo应用开发实战

1. 项目概述:一个由AI驱动的全栈待办事项应用最近在GitHub上发现一个挺有意思的项目,叫santosflores/todo_list_cursor。光看名字,你可能觉得这不就是个普通的待办事项列表吗?市面上这种项目一抓一大把。但如果你点进去&#xff0…...

EASY-HWID-SPOOFER:3大核心技术深度解析与实战指南

EASY-HWID-SPOOFER:3大核心技术深度解析与实战指南 【免费下载链接】EASY-HWID-SPOOFER 基于内核模式的硬件信息欺骗工具 项目地址: https://gitcode.com/gh_mirrors/ea/EASY-HWID-SPOOFER EASY-HWID-SPOOFER是一款基于Windows内核模式的硬件信息欺骗工具&am…...

ch32v003记录2,串口通信例程

#include “ch32v00x.h” #include <stdio.h> /* 发送一个字符 */ void uart_putc(char ch) { while (USART_GetFlagStatus(USART1, USART_FLAG_TC) RESET); USART_SendData(USART1, ch); } /* 接收一个字符&#xff08;阻塞&#xff09; */ char uart_getc(void) { whi…...

LLM微调实战:使用LLM-Finetuning-Toolkit高效微调Mistral-7B模型

1. 项目概述与核心价值最近在折腾大语言模型&#xff08;LLM&#xff09;的微调&#xff0c;发现了一个宝藏项目&#xff1a;georgian-io/LLM-Finetuning-Toolkit。这可不是一个简单的脚本集合&#xff0c;而是一个旨在将LLM微调从“实验室玩具”变成“生产级工具”的综合性工具…...

【前端(十)】CSS 过渡与动画笔记

文章目录 1. 过渡&#xff08;transition&#xff09;1.1 过渡的触发1.2 transition 写在哪里&#xff1f;1.3 过渡相关属性transition-propertytransition-durationtransition-delaytransition-timing-functiontransition 复合属性 1.4 过渡体验示例 2. 动画&#xff08;anima…...

当核心交换机宕机时,你的业务能扛几秒?深度拆解MSTP+VRRP的故障切换实战

核心交换机宕机瞬间&#xff1a;MSTPVRRP毫秒级切换的实战解密 凌晨3点17分&#xff0c;某金融公司数据中心警报声骤然响起。监控大屏上&#xff0c;核心交换机C-SW9的图标由绿转红&#xff0c;数十个业务系统的流量曲线同时跳水。但令人惊讶的是&#xff0c;所有交易业务在0.8…...

AI驱动社交媒体自动化:从CLIP图像识别到GPT文案生成的技术实践

1. 项目概述&#xff1a;当AI成为你的社交媒体管家 最近在GitHub上看到一个挺有意思的项目&#xff0c;叫 summitsingh/ai-instagram-organizer 。光看名字&#xff0c;你大概就能猜到它的核心&#xff1a;用人工智能来帮你打理Instagram。作为一个在社交媒体运营和自动化工…...

轻量级爬虫框架easyclaw:快速上手与实战指南

1. 项目概述&#xff1a;一个面向开发者的轻量级网络爬虫框架最近在GitHub上闲逛&#xff0c;又发现了一个挺有意思的仓库&#xff1a;ybgwon96/easyclaw。光看名字&#xff0c;easy&#xff08;简单&#xff09;和claw&#xff08;爪子&#xff0c;引申为爬虫&#xff09;的组…...

从同步阻塞到毫秒级响应:PHP 9.0 + Swoole 5.1 + LangChain-PHP构建企业级AI助手,7步完成生产就绪配置

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;PHP 9.0 异步编程与 AI 聊天机器人 配置步骤详解 PHP 9.0 尚未正式发布&#xff08;截至 2024 年&#xff09;&#xff0c;但其官方 RFC 已明确将原生协程&#xff08;async/await&#xff09;、事件循…...

借助gitee仓库构建私有图床

架构和准备具体实现细节 仓库和源码地址服务端yaml配置启动类同步git 云图 演示 借助gitee仓库构建私有图床 架构和准备 创建gitee服务端仓库创建gitee图床仓库日常图片存储gitee仓库&#xff0c;通过git提交&#xff0c;保障本地电脑和云上备份双份创建spring-boot服务端应用…...

告别F5乱按!VSCode + CMake + GDB调试大型C++项目(HM源码实战)

高效调试大型C项目的VSCode实战指南&#xff1a;从HM源码剖析到生产力跃升 在开源社区蓬勃发展的今天&#xff0c;越来越多的开发者需要面对动辄数十万行代码的C项目。以HM视频编码器为例&#xff0c;这个被广泛使用的HEVC参考软件实现&#xff0c;其代码结构复杂、模块耦合度高…...

Cursor编辑器无缝继承VSCode生态:配置与扩展迁移全攻略

1. 项目概述&#xff1a;一个为 Cursor 编辑器注入 VSCode 灵魂的安装器 如果你和我一样&#xff0c;是那种在编辑器选择上有点“贪心”的程序员&#xff0c;那你肯定对 Cursor 和 Visual Studio Code 之间的微妙关系深有体会。Cursor 凭借其深度集成的 AI 能力&#xff0c;在智…...

Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(第一章 为什么要用 Python 为 Excel 编程)

Excel Python&#xff1a;飞速搞定数据分析与处理前言 本系列笔记是博主学习 Python 数据分析的详细记录&#xff0c;主要记录了在学习过程中遇到的各种实际问题与解决方法。相信小伙伴们跟随本系列笔记&#xff0c;也一定能够成功复现《Excel Python&#xff1a;飞速搞定数据分…...

ATC美国技术陶瓷原厂一级代理分销经销

ATC美国技术陶瓷原厂原装代理分销经销一级代理分销经销ATC美国技术陶瓷原厂原装代理分销经销一级代理分销经销 现有ATC100B系列 600L/600S/600F系列库存。欢迎询价采购! 型号 数量 600S0R1BT250XT 3650 600S0R2BT250XT 2820 600S0R3BT250XT 2800 600S0R4BT250XT 2394 600S0R5BT…...

STM32F4项目实战:用广州大彩M系列串口屏打造动态数据监控界面

STM32F4项目实战&#xff1a;用广州大彩M系列串口屏打造动态数据监控界面 在工业控制和设备监控领域&#xff0c;实时数据显示的直观性和交互友好性直接影响着用户体验和操作效率。传统LCD屏虽然成本较低&#xff0c;但需要占用大量GPIO资源&#xff0c;且UI开发复杂。广州大彩…...

若依单体版Excel导出进阶:利用反射和字典实现可配置化列选择功能

若依单体版Excel导出进阶&#xff1a;基于反射与字典的动态列配置实战 在企业管理系统的开发中&#xff0c;Excel导出功能几乎是每个业务模块的标配需求。传统做法是为每个实体类编写固定的导出模板&#xff0c;但当业务字段频繁变更或需要根据不同场景动态调整导出列时&#x…...

告别混乱!Unity Timeline信号轨道自定义Marker实战:一个接收器处理所有带参信号

告别混乱&#xff01;Unity Timeline信号轨道自定义Marker实战&#xff1a;一个接收器处理所有带参信号 在Unity游戏开发中&#xff0c;Timeline作为可视化编排工具能大幅提升过场动画和事件序列的制作效率。但原生SignalTrack的局限性常让开发者陷入"接收器地狱"——…...

不止是Python:用Go/Node.js调用钉钉机器人,如何避免‘缺少参数json’错误

跨语言调用钉钉机器人实战&#xff1a;Go/Node.js如何规避40035参数错误 钉钉机器人作为企业级消息推送的利器&#xff0c;早已超越单一技术栈的范畴。当开发者从Python转向Go或Node.js时&#xff0c;常会遇到一个看似简单却令人困惑的报错&#xff1a;{"errcode":40…...

Gazebo仿真物体一直往下掉?别慌,手把手教你搞定缺失的ground_plane模型

Gazebo仿真物体下坠问题全解析&#xff1a;从原理到实战修复指南 当你满怀期待地启动第一个Gazebo仿真场景&#xff0c;却发现机器人像断了线的风筝一样径直坠落&#xff0c;最终消失在视野中——这种挫败感我深有体会。作为ROS/Gazebo入门必经的"成人礼"&#xff0c…...

从Selective Search到RPN:目标检测的“找茬”进化史,以及为什么Faster RCNN是里程碑

目标检测的范式革命&#xff1a;从手工特征到端到端学习的演进之路 在计算机视觉领域&#xff0c;目标检测一直是最具挑战性的任务之一——不仅要识别图像中的物体是什么&#xff0c;还要精确标出它们的位置。这个看似简单的需求背后&#xff0c;却经历了从手工特征到深度学习&…...

solution说明

一、solution 1.设计中可以有多个solution二、solution中组成 1.constraints约束 directives.tcl脚本是用于存放优化指令$pragram指令的 script.tcl脚本用于打开工程&#xff0c;创建工程&#xff0c;工程的编译和运行&#xff0c;使用这个脚本可以恢复和建立vivado hls工程。 …...

从MobileNet到EfficientNet:深度可分离卷积的‘进化史’与实战性能对比

从MobileNet到EfficientNet&#xff1a;深度可分离卷积的进化与实战性能全景分析 当你在手机相册里用AI一键美化照片时&#xff0c;当智能门锁瞬间识别出你的面容时&#xff0c;背后都运行着经过精心优化的轻量级神经网络。这些算法需要在有限的算力资源下&#xff0c;同时保证…...

综合案例设计描述和分析

一、设计报告说明 1.从设置,代码转换,架构综合到硬件综合,最终生成了rtl; 2.从正太来看,综合是成功的,编译的宗师级是28秒,占用的内存空间为305MB 3.综合报告中有些警告: 数据完整分区导致警告,数组全部打散后生成寄存器,这个倒是没有问题,但是这个 全部打算后会造成…...

华硕笔记本性能管家G-Helper:轻量级替代方案完全指南

华硕笔记本性能管家G-Helper&#xff1a;轻量级替代方案完全指南 【免费下载链接】g-helper G-Helper is a fast, native tool for tuning performance, fans, GPU, battery, and RGB on any Asus laptop or handheld - ROG Zephyrus, Flow, Strix, TUF, Vivobook, Zenbook, Pr…...

Cascadia OS:构建可靠、可审计的本地AI智能体执行平台

1. 项目概述&#xff1a;一个为真实工作而生的AI执行层如果你和我一样&#xff0c;对市面上那些“看起来很美”的AI助手感到过失望——它们在演示中无所不能&#xff0c;一旦投入真实工作流&#xff0c;就变得健忘、鲁莽、脆弱&#xff0c;甚至会在关键时刻掉链子——那么Casca…...

告别MATLAB!手把手教你用Vivado IP核搞定FPGA上的卷积编码与维特比译码(附完整仿真代码)

FPGA实战&#xff1a;从MATLAB到硬件的卷积编码与维特比译码全流程解析 通信算法工程师在完成MATLAB仿真后&#xff0c;常面临将算法移植到FPGA的挑战。本文将以卷积编码和维特比译码为例&#xff0c;详解从软件仿真到硬件实现的完整迁移路径&#xff0c;提供可复用的工程模板和…...

告别clickhouse-driver的端口噩梦,用clickhouse-connect轻松搞定Python连接(附完整代码)

从clickhouse-driver到clickhouse-connect&#xff1a;Python连接ClickHouse的优雅实践 如果你曾经尝试用Python连接ClickHouse数据库&#xff0c;大概率经历过这样的场景&#xff1a;在搜索引擎输入"Python连接ClickHouse"&#xff0c;跳出来的教程清一色推荐使用cl…...

Bibata Cursor:开源鼠标指针主题的设计、安装与深度定制指南

1. 项目概述&#xff1a;不只是换个鼠标指针那么简单 如果你和我一样&#xff0c;每天有超过8小时的时间与电脑屏幕为伴&#xff0c;那么鼠标指针这个看似微不足道的细节&#xff0c;其实在潜移默化中影响着你的操作效率和视觉舒适度。我最初接触 Bibata_Cursor 这个项目&am…...

使用 ibelick/nim Docker 镜像快速搭建标准化 Nim 开发环境

1. 项目概述&#xff1a;一个“小而美”的现代编程语言镜像如果你最近在Docker Hub上搜索过“nim”&#xff0c;或者想找一个开箱即用、配置完善的Nim语言开发环境&#xff0c;那么ibelick/nim这个镜像很可能已经进入了你的视野。这不是一个官方镜像&#xff0c;但它却凭借其精…...