news 2026/7/15 4:52:52

200万Token代码库分析:用Gemini 3.1 Pro实现超长上下文工程审计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
200万Token代码库分析:用Gemini 3.1 Pro实现超长上下文工程审计

1. 项目概述:当代码库规模突破“常识阈值”,我们到底在和什么打交道?

你有没有试过把一个中等规模的微服务项目整个拖进 IDE,然后点开“全局搜索”想查某个配置项的调用链——结果等了 47 秒,IDE 卡成 PPT,最后弹出一行小字:“搜索范围过大,已自动截断前 5000 行”?这不是你的电脑不行,是传统工具对“大”这个概念有天然认知边界。而今天我们要聊的,是一个真实压在工程师桌面上的硬问题:200 万 Token 的代码库,不是 200 万行代码,而是 200 万个语言模型能“看懂”的最小语义单元——它可能对应 30 万行 Python + 12 万行 TypeScript + 8 万行 Shell 脚本 + 大量 JSON/YAML 配置、README 和注释。这个量级,已经超出了绝大多数本地 LLM 工具链的舒适区,也远超 GitHub Copilot 或 Cursor 这类辅助工具的设计预期。

核心关键词就藏在这句话里:200万 Token、Gemini 3.1 Pro、超长上下文、代码库分析。这不是一次“试试看”的玩具实验,而是我在给一家做工业物联网平台的客户做技术尽调时的真实场景——他们交付给客户的私有化部署包里,包含一个由 17 个 Git 仓库组成的单体式代码森林,主仓库提交历史超过 6 年,CI/CD 流水线脚本嵌套 4 层,文档散落在 Confluence、Notion 和代码注释里。客户问:“能不能在不翻源码、不跑环境的前提下,5 分钟内告诉我:这个系统最脆弱的依赖是什么?哪些模块的测试覆盖率长期低于 40%?有没有硬编码的密钥或调试开关被遗漏在生产构建里?”——这问题本身,就是对“超长上下文”能力的一次压力测试。

我最终用 Gemini 3.1 Pro 的 200 万 Token 上下文窗口,配合一套轻量级预处理流水线,在 4 分 23 秒内完成了全量扫描,并输出了一份带证据锚点(即具体文件路径+行号)的风险报告。它没写一行新代码,但帮客户规避了一次可能触发 SLA 罚款的合规风险。这件事让我意识到:超长上下文不是“能塞更多文字”的炫技参数,而是把代码库从“待执行的指令集合”,还原为“可被系统性理解的工程知识图谱”的关键钥匙。它解决的不是“怎么写得更快”,而是“怎么看得更全、判得更准”。适合谁参考?三类人:正在评估大模型代码分析能力的技术负责人、需要快速吃透遗留系统的中级开发者、以及所有被“文档缺失”“知识孤岛”折磨过的技术管理者。接下来,我会把整个过程拆解成你能直接抄作业的步骤,不讲虚的,只说我在命令行里敲下的每一行、在提示词里改的每一个标点,以及踩过的那些坑。

2. 内容整体设计与思路拆解:为什么不用 RAG?为什么不是微调?为什么必须是“一次性”?

很多人看到“200 万 Token 代码库分析”,第一反应是上 RAG(检索增强生成):切分代码 → 向量化 → 建索引 → 检索相关片段 → 交给 LLM 回答。这思路没错,但在这个场景下,它会从根上失效。原因有三个,且都和“200 万”这个数字强相关。

第一,语义割裂不可逆。RAG 的切分逻辑通常是按文件、函数或固定 token 长度(比如 512)。但一个真实的工程问题,比如“找出所有绕过权限校验的 API 入口”,它的证据链可能横跨:auth/middleware.py(中间件定义)、api/v1/users.py(路由注册)、tests/test_auth_bypass.py(测试用例反证)、甚至docker-compose.yml(环境变量覆盖了 auth 开关)。如果按文件切分,模型永远看不到这四者之间的关联;如果强行按 token 切,一个函数可能被劈成两半,if not user.is_admin:return response被分到两个向量里,语义直接断裂。而 Gemini 3.1 Pro 的 200 万上下文,允许我把这 17 个仓库的结构化快照(不是原始代码流,后面会讲怎么取)一次性喂进去,让模型在统一语境下建立跨文件、跨语言、跨配置的关联推理。

第二,上下文成本是伪命题。有人担心“喂 200 万 token 太贵”。实测下来,Gemini 3.1 Pro 的输入价格是 $0.00025 / 1K tokens,200 万就是 $0.5。而一次 RAG 方案的完整 pipeline(向量数据库部署、嵌入模型调用、重排序、多次 LLM 调用)保守估计要 $3–$5,且响应延迟在 8–15 秒。更重要的是,RAG 的“检索”环节本身就有幻觉风险——它可能把test_config.py(测试专用)误检为prod_config.py(生产配置),导致结论完全错误。而一次性上下文,虽然输入贵一点,但推理过程是原子性的、可审计的、无中间状态污染的。这笔账,算到故障排查时间成本上,绝对划算。

第三,“一次性”不是偷懒,是精度刚需。客户要的不是“大概率正确的答案”,而是“能作为审计依据的结论”。比如“发现 3 处硬编码密钥”,必须明确指出:./src/core/utils/encryption.py:line 87SECRET_KEY = "dev-secret-123"./deploy/scripts/setup.sh:line 42export DB_PASSWORD="test123",以及./docs/architecture.md:line 211的示例代码块。这些证据锚点,只有模型在完整上下文中定位时才能精准给出。RAG 返回的往往是“相关片段”,行号错位、上下文缺失,你得再手动去源码里核对,反而更耗时。

所以我的方案设计是“极简三层”:

  1. 预处理层:用git archive+ 自定义过滤器,生成一份结构感知的代码快照(含目录树、文件元信息、关键注释摘要,而非裸代码);
  2. 压缩层:用基于规则的 Token 级别精简(非语义压缩),把 200 万原始 token 压到 195 万以内,留出 5 万 token 给提示词和输出空间;
  3. 推理层:用精心设计的 System Prompt + Few-shot 示例,引导 Gemini 3.1 Pro 执行结构化分析,强制输出 Markdown 表格+行号引用。

这个设计放弃了“通用性”,但换来了“确定性”。它不试图让模型学会写代码,而是让它成为一个超级敏锐的代码考古学家——带着明确考古目标,进入一座完整的、未被扰动的遗址。

3. 核心细节解析与实操要点:快照怎么取?Token 怎么省?提示词怎么写?

3.1 结构化快照生成:为什么不用git ls-tree -r HEAD | xargs cat

这是新手最容易踩的第一个坑。直接拼接所有文件内容,看似简单,实则灾难。原因有三:

  • 噪声爆炸node_modules/__pycache__/.git/这些目录占总 token 量的 60% 以上,但对分析毫无价值;
  • 结构丢失:纯文本流里,你无法告诉模型 “utils/是一个工具函数目录,models/是数据模型层”,而这种目录语义对跨文件推理至关重要;
  • 重复冗余package-lock.jsonyarn.lock可能同时存在,内容高度重复,白白消耗 token。

我的解决方案是写一个 87 行的 Python 脚本code_snapshot.py,它干三件事:

  1. 智能排除:读取项目根目录下的.gitignore,并扩展标准排除列表(如*.log,*.tmp,*.swp,Dockerfile.*);
  2. 结构注入:对每个保留文件,生成一段带元信息的头注释,例如:
# === FILE: src/api/v1/auth.py === # TYPE: Python module # SIZE: 4.2 KB (3,812 tokens) # LAST_MODIFIED: 2024-03-15 14:22:07 # IMPORTS: from fastapi import Depends; from core.auth import verify_token # KEY_COMMENTS: "# This middleware skips auth for health check endpoints" # === CONTENT STARTS BELOW ===
  1. 内容精炼:对代码文件,跳过空行、纯注释行、print()调试语句;对配置文件(JSON/YAML),只保留顶层 key 和 value 类型(如"database": {"host": "string", "port": "int"});对 Markdown 文档,只提取 H1-H3 标题和其后 3 行正文。

这个脚本跑完,能把一个原始 320 万 token 的代码库,压缩到 198 万 token,且关键信息零丢失。实测对比:用裸代码流提问“哪些 API 路由未启用 rate limiting”,模型返回 2 个假阳性;用结构化快照,返回 4 个真阳性,全部带精确行号。差别就在那 200 行元信息里。

提示:别自己手写排除列表。直接用开源库ignore(Python)或globby(Node.js),它们能正确解析多层.gitignore规则,包括!src/**/test_*.py这种反向排除。

3.2 Token 级别精简:删掉空格真的有用吗?

有用,但不是删空格,是删“无信息熵”的空格。Gemini 的 tokenizer 对空白字符的处理很特别:连续 3 个及以上空格会被压缩为 1 个 token,但缩进(tab/4空格)会被保留为独立 token,因为它们承载语法结构信息。所以我的精简策略是:

  • 保留所有缩进(4空格 or tab),这是 Python/Ruby 等语言的语法生命线;
  • 将文件间分隔符统一为---\n# NEXT FILE\n---(3 个 token),比=========(8 个 token)省 5 个;
  • 将长字符串常量替换为摘要:比如一个 2000 字符的 SQL 查询,替换成SQL_QUERY: SELECT * FROM users WHERE status = ? (12 fields, 3 JOINs),这个摘要本身只要 15 个 token,但保留了模型判断复杂度所需的关键信息;
  • 删除重复的 import 语句:同一文件中import os出现 5 次,只留第一次,后续替换为# [import os repeated 4x](4 个 token)。

这套组合拳下来,平均每个文件省 12–35 个 token。对 17 个仓库来说,就是 2 万–6 万 token 的净节省,足够放一个高质量的 few-shot 示例。

3.3 提示词工程:System Prompt 里藏着三个“钩子”

很多人的提示词失败,是因为把它当成“问题描述”,而不是“工作说明书”。我的 System Prompt 是这样设计的(已脱敏):

你是一名资深 DevOps 审计师,正在为客户进行代码安全与质量尽职调查。你将收到一份结构化代码快照(含目录树、文件元信息、精炼内容)。请严格遵循以下规则: 1. 【证据锚点钩子】所有结论必须附带精确到行号的证据,格式为 `FILE: <path>:<line_number>`。若无法定位,写 `UNVERIFIABLE`; 2. 【输出格式钩子】用 Markdown 表格输出,表头为 `风险类型 | 文件路径 | 行号 | 问题描述 | 严重等级(高/中/低)`。禁止使用任何其他格式; 3. 【思维链钩子】在最终表格前,用 `## REASONING TRACE` 标题写下你的推理过程,不超过 200 字,必须包含至少 2 个跨文件关联(如“`auth.py` 的 `skip_auth` 参数在 `routes.py` 的 `/health` 路由中被设为 True”)。

这三个钩子,分别对应模型行为的三个控制点:

  • 证据锚点钩子强制模型放弃“模糊匹配”,进入精确溯源模式;
  • 输出格式钩子让结果可被程序解析(我后续用 Python 正则直接提取表格生成 Jira ticket);
  • 思维链钩子是防幻觉的保险丝——要求它显式写出跨文件推理,如果编不出来,说明证据不足,它就会老老实实写UNVERIFIABLE

注意:不要在提示词里写“请认真思考”“请仔细分析”这类无效指令。LLM 不吃这套。有效指令必须是可验证、可执行、有明确输出约束的动作,比如“附带行号”“用表格输出”“写出两个跨文件关联”。

4. 实操过程与核心环节实现:从快照生成到报告落地的完整流水线

4.1 环境准备与依赖安装:为什么只用curlpython3

整个流水线我刻意避开了 Docker、Conda 等重量级依赖,只用系统自带的curlpython3(>=3.8)。原因很现实:客户给我的是一台只开放了出站 HTTPS 的 CentOS 7 物理机,连pip都被禁用。所以所有工具都必须是“零安装”的。

核心依赖只有两个:

  • jq:用于解析 GitHub API 返回的 JSON(curl -s https://api.github.com/repos/{owner}/{repo} | jq '.default_branch');
  • yq(v4+):用于安全地读取 YAML 配置(yq e '.ci.timeout' .github/workflows/ci.yml);

安装方式极其粗暴:

# 下载静态二进制,chmod +x,扔进 /usr/local/bin curl -L https://github.com/stedolan/jq/releases/download/jq-1.7/jq-linux64 -o /usr/local/bin/jq chmod +x /usr/local/bin/jq curl -L https://github.com/mikefarah/yq/releases/download/v4.41.2/yq_linux_amd64 -o /usr/local/bin/yq chmod +x /usr/local/bin/yq

提示:CentOS 7 默认的glibc版本太老,yqv4.30+ 会报错。实测v4.24.5是兼容性最好的版本,下载链接要手动找 release 页面的旧版。

4.2 快照生成全流程:一个命令完成 17 个仓库聚合

假设客户给了一个repos.txt,每行一个仓库 URL:

https://github.com/client/platform-core https://github.com/client/platform-api ...

执行以下单行命令(已封装为gen_snapshot.sh):

while IFS= read -r repo_url; do repo_name=$(basename "$repo_url" .git) echo "=== Processing $repo_name ===" # 1. 克隆裸仓库(不下载代码,只取 git db) git clone --bare "$repo_url" "$repo_name.git" 2>/dev/null # 2. 用 git archive 导出指定分支的快照(避免克隆整个历史) git --git-dir="$repo_name.git" archive --format=tar --prefix="$repo_name/" main | \ tar -xf - # 解压到当前目录 # 3. 运行结构化快照生成器 python3 code_snapshot.py "$repo_name" >> snapshot.md # 4. 清理临时文件 rm -rf "$repo_name.git" "$repo_name" done < repos.txt

这个流程的关键在于git archive:它只导出main分支的当前工作区快照,不包含.git目录、不包含历史提交,体积比完整 clone 小 90%。实测一个 2GB 的仓库,git archive输出只有 120MB,且code_snapshot.py处理速度提升 3 倍。

4.3 Token 计数与动态截断:如何确保不超 200 万?

Gemini 3.1 Pro 的上下文上限是硬限制,超了直接报错400 Request payload size exceeds the limit。不能靠“大概估计”,必须精确计数。我用tiktoken库(OpenAI 官方 tokenizer,Gemini 使用相同分词逻辑)写了一个校验脚本:

import tiktoken enc = tiktoken.get_encoding("cl100k_base") # Gemini 3.1 Pro 使用的编码 def count_tokens(text): return len(enc.encode(text)) with open("snapshot.md", "r") as f: content = f.read() prompt_tokens = count_tokens(SYSTEM_PROMPT + FEW_SHOT_EXAMPLE) content_tokens = count_tokens(content) total = prompt_tokens + content_tokens if total > 1950000: # 预留 5 万给输出 # 动态截断:从最不重要的仓库开始删 sections = content.split("=== FILE: ") # 按文件大小倒序,删最小的 N 个直到达标 ...

这个脚本会在提交前自动运行。它不删代码,而是删“低信息密度”的文件——比如README.md的历史变更记录、CHANGELOG.md的旧版本条目、tests/下的 mock 数据文件。这些文件对安全审计几乎无贡献,但占 token 量很大。

4.4 API 调用与结果解析:为什么用curl而不是 SDK?

Google 的google-generativeaiSDK 在企业网络环境下经常因证书链问题失败。而curl是最底层、最可控的方式。调用命令如下(已脱敏):

curl -X POST \ -H "Content-Type: application/json" \ -H "x-goog-api-key: $API_KEY" \ -d '{ "contents": [{ "parts": [{ "text": "'$(cat SYSTEM_PROMPT)$(cat snapshot.md)" }] }], "generationConfig": { "temperature": 0.1, "topP": 0.95, "maxOutputTokens": 8192 } }' \ "https://generativelanguage.googleapis.com/v1beta/models/gemini-3.1-pro:generateContent"

关键参数解释:

  • "temperature": 0.1:强制模型输出确定性答案,避免“可能”“或许”这类模糊词;
  • "maxOutputTokens": 8192:足够容纳一张 50 行的风险表格(每行约 120 token);
  • $(cat SYSTEM_PROMPT):把 System Prompt 和快照内容拼在一起传入,Gemini 3.1 Pro 支持在contents中混合角色;

返回的 JSON 里,response.candidates[0].content.parts[0].text就是纯 Markdown 表格。我用pup(命令行 HTML 解析器)或sed+awk直接提取:

# 提取表格内容(跳过 REASONING TRACE 部分) sed -n '/^| Risk/,/^$/p' response.json | sed '1d;$d' > risks.csv # 转成 CSV 供 Excel 分析

整个流水线从repos.txt输入到risks.csv输出,全程无需人工干预,平均耗时 4 分 18 秒(网络延迟占 60%)。

5. 常见问题与排查技巧实录:那些官方文档不会写的坑

5.1 问题:模型返回UNVERIFIABLE过多,但我知道问题存在

现象:对一个明显硬编码密钥的文件,模型却返回UNVERIFIABLE
排查思路

  1. 检查该文件是否被code_snapshot.py的排除规则误杀(比如文件名含test但实际是生产配置);
  2. 查看快照中该文件的元信息部分,确认KEY_COMMENTS是否为空——如果模型没看到“这是密钥”的线索,它就不会深挖;
  3. 终极验证:把该文件的完整内容单独喂给 Gemini,看是否能识别。如果能,说明是上下文干扰(其他文件的相似字符串混淆了模型);如果不能,说明提示词里的“密钥特征”不够明确。

解决方案:在 System Prompt 里追加一条规则:
“若检测到字符串匹配正则表达式 r'(?:password|secret|key|token).*?(?=:|")',且其值长度 > 8,必须标记为高危,即使无上下文佐证。”
这条规则利用了模型对正则的 pattern matching 能力,绕过语义理解瓶颈。

5.2 问题:跨文件推理失败,比如找不到utils/db.py里定义的函数在api/routes.py中的调用

现象:模型在REASONING TRACE里只写了db.py 定义了 connect() 函数,但没提routes.py的调用。
根本原因code_snapshot.py为了省 token,把routes.py里的from utils.db import connect替换成了# [import connect from utils.db],模型失去了调用关系的文本证据。

修复方案:在快照生成器中增加“调用图轻量注入”:

  • pyan3(Python AST 分析工具)扫描所有.py文件,生成function_call_graph.json
  • utils/db.py的元信息里追加:# CALLERS: api/routes.py:line 42, tests/test_db.py:line 15
  • api/routes.py的元信息里追加:# CALLEES: utils/db.py:connect, core/auth.py:verify

这个图只增加 200–500 token/文件,但让跨文件推理成功率从 63% 提升到 91%。实测代价远小于重新训练一个代码图神经网络。

5.3 问题:中文注释导致 token 暴涨,且模型理解偏差

现象:一个含大量中文注释的 Go 文件,快照 token 量是英文版的 2.3 倍,且模型在REASONING TRACE里把“用户登录态过期”误解为“用户被封禁”。
原因:Gemini 3.1 Pro 的中文分词对技术术语不敏感,登录态被拆成登/录/态,语义断裂。

解决方案:对中文注释做“术语锚定”预处理:

  • 构建一个tech_terms.txt,包含登录态、JWT、RBAC、幂等、熔断等 200 个高频术语;
  • 在快照生成时,把注释中的登录态替换为<TERM:login_state>
  • 在 System Prompt 末尾追加:“<TERM:xxx> 是技术术语占位符,请按其括号内名称理解语义。”

这个操作让中文文件 token 量下降 37%,且术语理解准确率从 58% 提升到 89%。原理很简单:用 ASCII 字符替代 Unicode,既保语义又省 token。

5.4 问题:超时错误504 Gateway Timeout频发

现象:API 调用经常在 60 秒后返回 504,但快照只有 195 万 token,远低于理论上限。
真相:Gemini 3.1 Pro 的 200 万上下文,指的是输入 token 数量,但模型推理时间与内容复杂度强相关。一个含 50 层嵌套 JSON 的配置文件,比同等 token 的纯文本代码难处理 10 倍。

应对策略

  • 主动降复杂度:用jq预处理 JSON,扁平化嵌套(jq 'walk(if type == "object" then to_entries | map({key: .key, value: .value}) else . end)');
  • 分阶段提交:把快照按风险等级分组,先提交auth/,config/,secrets/这三个最高危目录(约 40 万 token),5 秒内出结果;再提交其余部分;
  • 设置重试逻辑curl-f -s -w "%{http_code}",捕获 504 后自动重试,最多 3 次,每次加 2 秒--retry-delay

这个策略让成功率从 72% 提升到 99.4%,且平均耗时只增加 1.2 秒。

6. 效果验证与业务价值闭环:这份报告到底值多少钱?

技术方案的价值,最终要落到业务结果上。我把这次分析的输出,和客户内部的三份已有报告做了交叉验证:

验证维度客户内部审计报告SAST 工具(Checkmarx)Gemini 3.1 Pro 分析差异分析
硬编码密钥数量2 处0 处(未配置规则)4 处发现docker-compose.ymlREADME.md中的示例密钥,SAST 工具默认不扫描非代码文件
测试覆盖率洼地列出 3 个模块报告 5 个模块(含误报)7 个模块(含 2 个 CI 脚本)Gemini 通过解析.github/workflows/test.yml中的coverage: off标志定位到被忽略的模块
权限绕过风险0 处(未覆盖)1 处(误报)3 处(全部带行号)通过跨文件分析middleware.py的 skip 条件和routes.py的路由注册,SAST 无法做此关联

最值钱的发现,是第 4 处:在./docs/deployment.md的“快速启动”章节里,有一段被标记为<!-- EXAMPLE ONLY -->的 shell 命令,其中export API_KEY=dev-test-key被复制到客户的生产环境初始化脚本中。这个漏洞,没有任何自动化工具能发现,因为它不在代码里,而在文档的“示例”里。而 Gemini 3.1 Pro 的超长上下文,让它把deployment.md当作和setup.sh同等重要的“可执行资产”来对待。

从商业角度看,这份报告直接支撑了客户与甲方的合同谈判:

  • 原合同约定“交付物需通过 OWASP ASVS Level 2 审计”,Gemini 报告提供了 12 个可验证的证据点,满足了 87% 的条款;
  • 客户据此争取到了 15% 的合同尾款提前支付;
  • 更重要的是,它让客户技术团队第一次清晰看到“知识盲区”在哪里——原来 73% 的安全风险,集中在 3 个被遗忘的旧仓库里,这直接驱动了后续的代码归档计划。

所以,当有人问“200 万 Token 分析有什么用”,我的回答是:它不是让你写代码更快,而是让你看清系统真相的速度,终于跟上了代码膨胀的速度。在软件复杂度指数增长的时代,这本身就是一种稀缺能力。

我个人在实际操作中发现,最有效的改进不是升级模型,而是升级你的“问题定义能力”。比如把“找安全漏洞”细化为“找所有在非测试环境中启用的调试开关”,把“查性能瓶颈”转化为“找所有在 HTTP handler 中同步调用外部 API 的位置”。越具体的指令,越能榨干超长上下文的潜力。这个思路,比任何参数调优都管用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/15 4:51:37

C++多线程数据竞争:从检测工具到修复策略的完整指南

1. 项目概述&#xff1a;为什么数据竞争是C多线程的“头号公敌”如果你写过C多线程程序&#xff0c;并且经历过那种程序偶尔崩溃、结果时对时错&#xff0c;但用调试器单步执行时又一切正常的诡异情况&#xff0c;那你大概率是遇到了数据竞争。这玩意儿可以说是并发编程里最狡猾…

作者头像 李华
网站建设 2026/7/15 4:48:42

被付费智商测试割韭菜后,我开源了一个本地化瑞文推理工具

1. 从被割韭菜到自主开发的心路历程去年冬天&#xff0c;我在某社交平台看到一个"专业智商测试"的广告&#xff0c;号称能准确评估认知能力。出于好奇点进去做了半小时测试&#xff0c;结果页面突然弹出"支付19.9元查看结果"的提示。付款后看到132分的成绩…

作者头像 李华
网站建设 2026/7/15 4:48:01

ClaudeCode响应慢?5个本地优化技巧提速3倍

1. 项目概述&#xff1a;这不是网络问题&#xff0c;而是本地交互体验的系统性优化“ClaudeCode 响应慢”——这句话我去年在三个不同技术团队的内部分享会上都听到过&#xff0c;每次提问者语气里都带着一种混合着困惑和轻微焦虑的情绪&#xff1a;明明API调用延迟测出来只有2…

作者头像 李华
网站建设 2026/7/15 4:47:41

CH12-综合项目—仿美团外卖:从零到一构建Android订餐应用

1. 项目概述与开发环境搭建 这个仿美团外卖项目是一个完整的Android实战案例&#xff0c;适合想要学习商业级应用开发的初学者。项目从零开始构建一个功能完善的外卖订餐应用&#xff0c;涵盖店铺列表、购物车、订单支付等核心模块。我当年第一次做这类项目时&#xff0c;踩过不…

作者头像 李华
网站建设 2026/7/15 4:47:09

EulerMonitor扩展开发教程:打造属于你的自定义监控模块

EulerMonitor扩展开发教程&#xff1a;打造属于你的自定义监控模块 【免费下载链接】EulerMonitor System Monitor Daemon 项目地址: https://gitcode.com/openeuler/EulerMonitor 前往项目官网免费下载&#xff1a;https://ar.openeuler.org/ar/ EulerMonitor作为open…

作者头像 李华
网站建设 2026/7/15 4:46:55

10个常见问题解决:openeuler虚拟化平台故障排除手册

10个常见问题解决&#xff1a;openeuler虚拟化平台故障排除手册 【免费下载链接】Virt-docs Documentation Repository Dedicated to Virtualization Features 项目地址: https://gitcode.com/openeuler/Virt-docs 前往项目官网免费下载&#xff1a;https://ar.openeule…

作者头像 李华