本地运行的 LeetCode 风格编程练习系统,让你在 100% 离线环境下浏览、编码和测试算法题目——非常适合飞机上、游轮上或任何无网络场景。
- Node.js 16+ (点击下载)
- 任意现代网页浏览器
注意: 仅在首次设置和构建时需要网络连接。构建完成后,应用可完全离线使用。
# 双击运行或在终端中执行
start-local.bat非交互模式(用于 CI 或自动化):
REM 接受默认并优先从 .env.example 复制
start-local.bat --yes
REM 或在 PowerShell 中设置环境变量
set START_LOCAL_NONINTERACTIVE=1 && start-local.bat# 首次使用需要赋予执行权限
chmod +x start-local.sh
# 运行启动脚本
./start-local.sh启动脚本会自动:
- 检查 Node.js 安装
- 安装依赖 (npm install) - 需要网络
- 构建应用 (npm run build) - 需要网络
- 启动本地服务器
然后在浏览器中打开 http://localhost:3000 即可!
注意: 首次构建完成后,您可以离线使用应用而无需重新构建。
# 克隆仓库
git clone https://github.com/yourusername/OfflineLeetPractice.git
cd OfflineLeetPractice
# 安装依赖 - 需要网络
npm install
# 构建生产版本 - 需要网络
npm run build
# 启动服务器(可离线工作)
npm start- 本地题库: 内置 10+ 道经典算法题目
- AI 题目生成器: 使用多种 AI 提供商生成无限自定义题目
- 多语言支持: 支持 JavaScript、Python、Java、C++ 和 C 语言编码和测试
- Monaco 代码编辑器: VS Code 级别的编辑体验
- 即时测试: 立即运行测试并查看详细结果
- 性能指标: 执行时间和内存使用量跟踪
- 动态题目管理: 无需重新构建即可添加/编辑题目
- 自定义题目创建: 用中文描述你想练习的内容
- 完整解法: 每个题目都包含工作的参考解法
- 全面测试: 自动生成包括边界情况的测试用例
- 即时集成: 题目自动添加到你的本地库中
- 浏览题目: 查看包含难度和标签的题目列表
- 选择题目: 点击任意题目打开详情页面
- 编写解法: 使用 Monaco 编辑器(支持自动补全、语法高亮)
- 运行测试: 点击"提交并运行测试"执行你的代码
- 查看结果: 查看测试结果和性能指标
- 访问 AI 生成器: 点击首页的"AI 生成器"按钮
- 描述你的需求: 输入你想要的题目类型
- 生成题目: AI 创建包含测试用例和解法的完整题目
- 立即练习: 生成的题目自动添加到你的库中
要使用 AI 题目生成器,您可以配置以下任一 AI 提供商(或多个):
当您运行仓库根目录下的启动脚本(start-local.sh 或 start-local.bat)且项目中不存在 .env 文件时,脚本会将其视为首次启动并提供交互式配置 AI 的选项。在非交互模式下(使用 --yes 或 START_LOCAL_NONINTERACTIVE=1),脚本会尝试从 .env.example 复制到 .env;如果 .env.example 不存在,则创建包含默认模型名和空 API key 的最小 .env。交互流程包括:
- 询问是否启用 AI 功能;
- 对每个提供商(OpenAI、DeepSeek、Qwen、Claude、Ollama)询问是否启用,然后要求输入模型名和 API key(Ollama 会询问 endpoint 与 model);
- 若直接按回车接受默认值,将使用如下默认值:
- OpenAI model:
gpt-4-turbo - DeepSeek model:
deepseek-chat - Qwen model:
qwen-turbo - Claude model:
claude-3-haiku-20240307 - Ollama endpoint:
http://localhost:11434,model:llama3
- OpenAI model:
脚本会把配置写入项目根目录下的 .env 文件。如果 .env 已存在,脚本会跳过交互配置。之后要修改配置,请直接编辑 .env 文件。
- 获取 API 密钥: 从 DeepSeek 平台 获取 API 密钥
- 配置密钥: 通过以下方法之一将 API 密钥添加到应用程序:
- 在项目根目录创建
.env.local文件,内容如下:DEEPSEEK_API_KEY=your_deepseek_api_key_here
- 或者在系统中设置环境变量:
# Windows (PowerShell) $env:DEEPSEEK_API_KEY="your_deepseek_api_key_here" # macOS/Linux (Bash) export DEEPSEEK_API_KEY="your_deepseek_api_key_here"
- 在项目根目录创建
- 获取 API 密钥: 从 OpenAI 平台 获取 API 密钥
- 配置密钥: 通过以下方法之一将 API 密钥添加到应用程序:
- 在项目根目录创建
.env.local文件,内容如下:OPENAI_API_KEY=your_openai_api_key_here
- 或者在系统中设置环境变量:
# Windows (PowerShell) $env:OPENAI_API_KEY="your_openai_api_key_here" # macOS/Linux (Bash) export OPENAI_API_KEY="your_openai_api_key_here"
- 在项目根目录创建
- 获取 API 密钥: 从 Qwen 平台 获取 API 密钥
- 配置密钥: 通过以下方法之一将 API 密钥添加到应用程序:
- 在项目根目录创建
.env.local文件,内容如下:QWEN_API_KEY=your_qwen_api_key_here
- 或者在系统中设置环境变量:
# Windows (PowerShell) $env:QWEN_API_KEY="your_qwen_api_key_here" # macOS/Linux (Bash) export QWEN_API_KEY="your_qwen_api_key_here"
- 在项目根目录创建
- 获取 API 密钥: 从 Claude 平台 获取 API 密钥
- 配置密钥: 通过以下方法之一将 API 密钥添加到应用程序:
- 在项目根目录创建
.env.local文件,内容如下:CLAUDE_API_KEY=your_claude_api_key_here
- 或者在系统中设置环境变量:
# Windows (PowerShell) $env:CLAUDE_API_KEY="your_claude_api_key_here" # macOS/Linux (Bash) export CLAUDE_API_KEY="your_claude_api_key_here"
- 在项目根目录创建
-
安装 Ollama: 从 https://ollama.com/ 下载并安装 Ollama
-
下载模型: 运行
ollama pull llama3下载推荐的模型 -
配置 Ollama: 通过以下方法之一配置 Ollama:
- 在项目根目录创建
.env.local文件,内容如下:# 可选:设置 Ollama 端点(默认:http://localhost:11434) # OLLAMA_ENDPOINT=http://localhost:11434 # 可选:设置 Ollama 模型(默认:llama3) # OLLAMA_MODEL=llama3
- 或者在系统中设置环境变量:
# Windows (PowerShell) $env:OLLAMA_ENDPOINT="http://localhost:11434" # 可选 $env:OLLAMA_MODEL="llama3" # 可选 # macOS/Linux (Bash) export OLLAMA_ENDPOINT=http://localhost:11434 # 可选 export OLLAMA_MODEL=llama3 # 可选
- 在项目根目录创建
-
启动 Ollama: 确保 Ollama 服务正在运行(通常会自动启动)
如果您配置了多个 AI 提供商,系统将按以下优先级顺序自动选择:
- Ollama(本地)
- OpenAI
- Claude
- Qwen
- DeepSeek
您可以使用 AI 生成器页面上的 UI 控件在提供商之间切换。
系统通过服务器端检查自动检测配置了哪些提供商。前端通过 /api/ai-providers 端点获取此配置,确保正确的安全性和符合 Next.js 环境变量限制。
- 通过点击首页的"🤖 AI 生成器"按钮导航到 AI 生成器页面
- 输入您的问题请求(中文或英文),例如:
- "Generate a medium difficulty array manipulation problem"
- "我想做一道动态规划题目"
- "创建一个包含边界情况的二分搜索问题"
- 点击"生成题目"并等待 AI 创建您的自定义问题
- 生成的问题将自动添加到您的本地问题库中
- 点击"尝试最后生成的问题"立即开始解决它
查看 AI_GENERATOR_README.md 获取更详细的配置说明和故障排除指南!
- 手动添加: 使用"添加题目"页面添加自定义题目
- JSON 导入: 上传或粘贴 JSON 格式的题目数据
- 直接编辑: 修改
public/problems.json即时生效(无需重新构建)
- 前端: React 18 + Next.js 13 + TypeScript
- UI 框架: Mantine v7 (现代 React 组件)
- 代码编辑器: Monaco Editor (VS Code 引擎)
- 代码执行: vm2 (安全的 JavaScript 沙箱)
OfflineLeetPractice/
├── pages/ # Next.js 页面和 API 路由
│ ├── api/
│ │ ├── problems.ts # 题目数据 API
│ │ ├── run.ts # 代码执行 API
│ │ ├── generate-problem.ts # AI 题目生成 API
│ │ └── add-problem.ts # 手动添加题目 API
│ ├── problems/[id].tsx # 题目详情页面
│ ├── generator.tsx # AI 生成器页面
│ ├── add-problem.tsx # 手动添加题目页面
│ └── index.tsx # 首页
├── problems/
│ └── problems.json # 本地题目数据库
├── src/
│ ├── components/ # React 组件
│ │ ├── ProblemGenerator.tsx # AI 生成器组件
│ │ ├── ProblemForm.tsx # 手动添加题目表单
│ │ └── LanguageThemeControls.tsx # 语言/主题切换器
│ └── styles/ # 全局样式
├── start-local.bat # Windows 启动脚本
├── start-local.sh # Unix 启动脚本
└── AI_GENERATOR_README.md # AI 生成器详细文档
应用支持在离线环境下添加/修改题目,无需重新构建!
- 编辑题目数据库: 在构建后的应用文件夹中打开
public/problems.json - 添加你的题目: 按照 JSON 格式(详见
MODIFY-PROBLEMS-GUIDE.md) - 保存并刷新: 更改立即生效!
例子: 通过编辑 public/problems.json 添加新题目:
{
"id": "reverse-string",
"title": {
"en": "Reverse String",
"zh": "反转字符串"
},
"difficulty": "Easy",
"tags": ["string"],
"description": {
"en": "Write a function that reverses a string.",
"zh": "编写一个函数来反转字符串。"
},
"template": {
"js": "function reverseString(s) {\n // 你的代码\n}\nmodule.exports = reverseString;"
},
"tests": [
{ "input": "[\"h\",\"e\",\"l\",\"l\",\"o\"]", "output": "[\"o\",\"l\",\"l\",\"e\",\"h\"]" }
]
}查看 MODIFY-PROBLEMS-GUIDE.md 获取完整说明!
我们欢迎贡献!改进方向:
- 更多题目: 添加经典算法挑战
- 更多语言: Python、Java、C++ 支持
- 增强功能: 更好的性能分析
MIT 许可证 - 随意使用、修改和分发!
在 30,000 英尺高空愉快编程!
完美适用于你的下一次飞行、游轮旅行或任何没有可靠网络的地方!