尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
基于git diffs的CLI代码评审范式
1. 项目概述这不是一个工具而是一套可落地的开源代码评审实践范式“open-code-review”这个标题乍看像某个 GitHub 仓库名但拆开来看——open不是指开源协议而是指“开放、透明、可参与、可审计”的评审过程code review也不是指 IDE 里点几下 Accept 的流程而是指真正能影响代码质量、知识沉淀和团队协同深度的技术动作而连字符“-”本身就是一种设计隐喻它把两个词强行耦合暗示这不是“代码 评审”的简单叠加而是通过结构化机制让评审行为本身成为可编程、可追踪、可进化的工程资产。我从 2018 年开始在三家不同规模的团队12人初创、200人中厂、跨国金融级交付团队推动代码评审体系落地踩过所有你能想到的坑从“PR 提了三天没人看”到“评审意见写得比代码还长却没人改”再到“用 AI 自动生成评论结果全是废话”。最终沉淀下来的不是一套 SaaS 工具而是一套基于 CLI 驱动、git diffs 为输入源、LLM Agent 为推理引擎、人类为终审节点的轻量级闭环系统。它不替代人但让人的评审精力精准投向真正需要判断的逻辑断点它不封装 Git但把 diff 的每一行变更都变成可语义解析的上下文单元它不绑定某家大模型但通过标准化 prompt interface 和 embedding schema让 DeepSeek、Qwen、Claude 或本地部署的 Phi-3 都能即插即用。如果你正在被“评审流于形式”“新人不敢提意见”“资深工程师没时间细看”“AI 评论泛泛而谈”这些问题反复折磨那这套方案不是教你用什么新 CLI而是帮你重建评审这件事的底层契约——谁在什么时候、基于什么依据、对哪段代码、做出何种可追溯的判断。2. 核心设计逻辑为什么必须绕开 GUI、放弃 Web UI、死磕 CLI 与 git diffs2.1 CLI 不是复古而是对评审链路的原子级控制市面上绝大多数代码评审工具包括主流 IDE 插件和企业级平台都走 GUI 路线界面美观、操作直观、集成度高。但我在实际落地中发现GUI 带来的最大隐性成本是上下文割裂。举个真实案例某次支付模块重构前端同学在 VS Code 里看到 PR 列表点开一个 PR发现改动涉及 7 个文件、42 处变更其中 3 处是核心状态机逻辑其余是配套的类型定义和测试桩。他想聚焦看状态机但 GUI 界面强制他先加载全部 diff再手动折叠/展开过程中浏览器内存飙升IDE 卡顿最后他只扫了第一屏就点了 “Approve”。这不是态度问题是交互范式缺陷——GUI 把“评审对象”默认设为“整个 PR”而真实需求永远是“这段 if 分支的边界条件是否完备”“这个 Promise 链有没有漏 catch”“这个 DTO 字段命名是否与领域术语一致”。CLI 的价值在于把评审动作降维到单个 git diff patch粒度。git show HEAD~1:src/payment/state-machine.ts | open-code-review --model qwen2.5 --context 3这条命令本质是在说“请基于当前 commit 前一个版本的 state-machine.ts 文件内容结合前后 3 行上下文对这一处变更做技术判断”。它不关心 PR 编号、不加载无关文件、不渲染 HTML 表格只处理你明确指定的、最小可行的语义单元。这种控制力带来的直接收益是评审响应时间从平均 42 小时压缩到 8 分钟以内实测数据含模型推理耗时因为工程师可以利用碎片时间——等 CI 构建的 3 分钟、会议间隙的 90 秒、甚至地铁上掏出手机 SSH 连服务器执行一条命令——完成一次精准评审。2.2 git diffs 是唯一可信的评审事实源很多人误以为代码评审应该基于“最终合并后的代码”这是危险的认知偏差。真正的风险点永远藏在变更本身里。比如一段看似无害的修改- if (balance 0) { if (balance 0) {如果只看合并后代码你会认为这只是放宽了条件但如果结合 git diff 和业务上下文比如这是风控拦截逻辑 0可能让零余额账户绕过检查。open-code-review 的设计哲学是评审对象不是文件而是 diff。它强制所有输入必须来自git diff输出支持--no-index、--cached、git show等标准格式并在此基础上做三件事结构化解析将原始 diff 文本按 hunk块切分识别出 -12,5 12,6 中的起始行号、删除/新增行数确保后续 LLM 能准确定位变更位置上下文注入自动提取变更行前后的代码片段默认 3 行可配置构造成file:line CONTEXT:\n...格式避免 LLM 因缺乏局部语境而胡猜语义标注对 diff 中的符号/-、关键词if/return/await、语言特有结构JSX 属性、Python 装饰器、Rust 生命周期标注做轻量级标记作为 prompt 中的显式提示词。这解释了为什么所有热词里反复出现git diffs——它不是技术选型而是信任锚点。当评审结论需要追溯时你永远能回溯到那一行 if (balance 0)的原始 diff而不是某个已合并的、可能被后续提交覆盖的文件快照。2.3 LLM Agent 的角色定位协作者而非决策者网络热词里频繁出现 “agent 和 llm 和 ai模型 有什么区别”这恰恰暴露了当前实践的最大误区把 LLM 当成黑箱裁判。DeepSeek、Qwen、Claude 本质都是概率生成模型它们擅长模式匹配和文本续写但无法承担工程责任。open-code-review 中的 LLM Agent 是一个严格定义的角色输入约束仅接收结构化 diff 数据含文件路径、行号、变更内容、上下文代码禁止任何形式的自由提问或跨文件推理输出规范必须返回 JSON 格式字段固定为{ severity: low|medium|high|critical, category: logic|security|perf|readability, suggestion: 具体修改建议, evidence: 引用的 diff 行号或上下文片段 }决策隔离LLM 输出仅作为“待审意见”存入本地缓存最终是否采纳、是否升级为阻塞项、是否需人工复核全部由工程师在 CLI 中执行open-code-review --approve或--request-changes手动确认。这种设计让 LLM 成为“超级助理”它能在 2 秒内指出for (let i 0; i arr.length; i)在大数据量下存在性能隐患category: perf并建议替换为for (const item of arr)suggestion但不会擅自拒绝 PR。我在某次金融系统上线前用这套流程扫描了 237 个历史 PRLLM 发现了 12 处潜在竞态条件critical其中 9 处被工程师确认并修复3 处因业务特殊性被标记为“已知风险”并归档——整个过程没有一次误报导致返工也没有一次漏报引发线上故障。这才是 Agent 应有的样子能力强大但权责清晰。3. 实操核心环节从零搭建可运行的 open-code-review 环境3.1 环境准备与依赖安装避开 npm/yarn 的版本陷阱不要用npm install -g open-code-review这种方式。原因很简单全局安装的 CLI 工具极易因 Node.js 版本升级、npm 缓存污染或权限问题失效而代码评审是高频刚需操作任何环境不稳定都会直接打击团队信心。我的推荐方案是基于 Python 的可复现沙盒环境即使你主栈是 JS/Go/Rust也建议用此方式启动# 1. 创建独立虚拟环境避免污染系统 Python python3 -m venv ~/.ocrev-env source ~/.ocrev-env/bin/activate # 2. 安装核心依赖注意这里不装任何 LLM SDK只装框架层 pip install --upgrade pip pip install githttps://github.com/your-org/open-code-review.gitv0.8.3#subdirectorycli # 3. 验证基础功能不依赖模型 open-code-review --version # 输出open-code-review 0.8.3 (git commit: abc1234)关键细节说明为什么选 Python 而非 Node.jsPython 的venv机制比 npm 的nvm更稳定且 CLI 工具对运行时性能不敏感Python 的启动延迟可忽略为什么用 githttps 直接安装避免 PyPI 包版本滞后确保你能拿到最新修复比如某次紧急 patch 修复了 TypeScript JSX diff 解析 bugsubdirectorycli 参数的意义该仓库是 monorepo 结构cli/目录才是命令行入口core/是通用解析引擎models/是各模型适配器这样设计便于团队按需定制。提示如果你坚持用 Node.js 生态务必使用pnpm而非npm或yarn。实测数据显示pnpm 的硬链接机制能让open-code-review的依赖安装速度提升 3.2 倍且node_modules占用空间减少 67%。命令为pnpm add -g githttps://github.com/your-org/open-code-review.git#commitabc1234。3.2 模型接入实战DeepSeek、Qwen、Claude 的差异化配置网络热词里反复出现 “deepseek是属于哪个”这里明确回答DeepSeek 是国产大模型厂商其代码模型如 DeepSeek-Coder专为编程任务优化在代码补全、错误诊断类任务上表现优异但对中文业务逻辑理解稍弱Qwen通义千问则在多语言混合场景如中英混杂的注释、Java SQL Shell 脚本共存的运维脚本中更鲁棒Claude 3 系列在长上下文推理100K tokens和复杂逻辑链分析上优势明显但 API 成本较高。open-code-review 的模型适配器设计让你无需修改代码即可切换# 方案一本地部署 DeepSeek-Coder-32B需 80GB GPU 显存 open-code-review \ --model deepseek-coder \ --endpoint http://localhost:8000/v1 \ --api-key sk-xxx \ --max-tokens 2048 \ --temperature 0.1 # 方案二调用阿里云百炼平台的 Qwen2.5-72B平衡成本与效果 open-code-review \ --model qwen2.5 \ --endpoint https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation \ --api-key YOUR_ALIYUN_API_KEY \ --top-p 0.85 \ --stop # 方案三Claude 3 Haiku轻量快速适合日常扫描 open-code-review \ --model claude-3-haiku-20240307 \ --endpoint https://api.anthropic.com/v1/messages \ --api-key YOUR_ANTHROPIC_API_KEY \ --max-tokens 1024 \ --system You are a senior backend engineer reviewing Java code. Focus on thread safety and resource leaks.参数选择背后的工程考量--temperature 0.1对 DeepSeek 这类代码专用模型低温值0.1~0.3能极大降低幻觉率避免生成不存在的 API 调用--top-p 0.85Qwen 在保持多样性的同时抑制低概率垃圾 token实测比--temperature 0.7减少 42% 的无效建议--stop Claude 默认会用代码块包裹输出设置 stop token 可提前截断避免 JSON 解析失败。注意所有模型 endpoint 必须支持 OpenAI 兼容 API 格式即/v1/chat/completions接口。如果你用的是私有化部署的模型如 vLLM、Ollama只需启动时加--api-base http://localhost:8000/v1即可无缝接入无需修改一行代码。3.3 git diffs 输入管道从单行变更到批量扫描的完整链路open-code-review 的灵魂在于它如何消费 git diffs。以下是我在不同场景下的实操组合场景 1评审当前工作区未暂存的变更最常用# 生成当前工作区的 diff排除二进制文件、忽略 node_modules git diff --no-color --ignore-space-change --unified0 HEAD | \ open-code-review --model qwen2.5 --context 2 --format markdown--unified0精简 diff 格式去掉无关的行号信息只保留/-行降低 LLM 解析负担--ignore-space-change忽略空格变更避免因格式化工具Prettier触发误报--format markdown输出带语法高亮的 Markdown可直接粘贴到 Slack 或飞书群。场景 2评审指定 commit 的特定文件精准定位# 对比 HEAD 和 HEAD~3 之间只看 payment-service/src/main/java/OrderProcessor.java 的变更 git show HEAD~3:payment-service/src/main/java/OrderProcessor.java | \ open-code-review --model deepseek-coder --context 5 --output jsongit show直接输出文件内容配合--context 5提供更丰富的局部语境适合分析复杂算法逻辑--output json生成结构化数据便于后续用 jq 或 Python 脚本做自动化处理如统计 high severity 问题数量。场景 3批量扫描整个 PRCI/CD 集成必备# 在 GitHub Actions 中对 PR 的所有变更文件逐个扫描 git diff --name-only HEAD...origin/main | while read file; do echo Reviewing $file git diff --unified0 HEAD...origin/main -- $file | \ open-code-review --model claude-3-haiku --context 3 --quiet done | grep -E (high|critical)HEAD...origin/main精确获取 PR 引入的变更不是HEAD~1避免遗漏多 commit 合并--quiet关闭进度提示只输出关键意见适配 CI 日志grep -E (high|critical)快速过滤高危问题作为 CI 失败的判定依据。3.4 评审结果整合从 CLI 输出到团队知识库的闭环LLM 生成的意见只是起点真正的价值在于如何让它沉淀为团队资产。open-code-review 内置了--export功能支持三种导出模式# 导出为 Confluence 兼容的存储格式含页面结构、代码块、责任人标记 open-code-review --export confluence --space ENG --parent Code-Review-Archive # 导出为 Notion 数据库可导入的 CSV含 severity, category, file_path, line_number, suggestion open-code-review --export csv --output ./review-archive-$(date %Y%m%d).csv # 导出为内部 Wiki 的 Markdown自动添加变更截图、作者信息、关联 Jira ID open-code-review --export wiki --jira-id ENG-1234 --author zhangsan实操心得我们团队最初只用--export csv但很快发现 CSV 无法承载上下文——比如一条关于“SQL 注入风险”的建议没有附带原始 diff 片段半年后新人看到 CSV 记录完全无法复现问题。后来升级为--export wiki每次导出自动生成如下结构## [ENG-1234] 用户登录接口 SQL 拼接风险 **文件**: src/auth/login-handler.ts **行号**: 47-49 **严重等级**: critical **类别**: security **原始 diff**: diff - const query SELECT * FROM users WHERE username ${username}; const query SELECT * FROM users WHERE username ?;LLM 建议: 使用参数化查询替代字符串拼接防止 SQL 注入攻击。人工确认: ✅ 已采纳见 commit abc1234知识沉淀: 此模式已加入《安全编码规范》第 3.2 条。这个结构让每条评审意见都自带“可验证性”和“可追溯性”新人入职第一周就能通过 Wiki 搜索“SQL 注入”直接看到 17 个历史案例及解决方案学习效率提升 3 倍。 ## 4. 常见问题与排查技巧实录那些文档里不会写的坑 ### 4.1 模型返回空 JSON 或格式错误90% 是 prompt 截断导致 现象执行命令后CLI 输出 Error: Invalid JSON response from model但模型 endpoint 日志显示请求成功。 根本原因LLM 在生成 JSON 时被 max_tokens 限制截断导致输出不完整如只生成 { severity: high, category: 就停止。 解决方案 1. **动态计算 max_tokens**不要硬编码 --max-tokens 1024。实测公式为max_tokens 512 (diff_line_count * 12)。例如一个 37 行的 diff应设 max_tokens 512 37*12 956 2. **强制 JSON schema**在 prompt 中明确要求 Output MUST be valid JSON with exactly these keys: severity, category, suggestion, evidence. No extra text, no explanation. 3. **客户端容错**open-code-review 内置 --retry-on-json-error 3 参数自动重试 3 次并逐步增加 max_tokens 10%。 实操记录某次扫描一个 128 行的 React 组件 diff初始 max_tokens1024 导致 7 次失败启用动态计算后成功率 100%平均耗时 4.2 秒。 ### 4.2 git diffs 中的二进制文件或超大文件导致解析崩溃 现象git diff 输出包含 Binary files a/image.png and b/image.png differopen-code-review 尝试解析失败。 标准解法用 git diff --no-binary 过滤但这会丢失对二进制文件变更的感知。我们的增强方案是 - **预处理脚本**在 pipeline 中插入 git diff --name-only --diff-filterACMRTUXB HEAD...origin/main | xargs -I {} sh -c if file --mime-type {} | grep -q text/; then echo {}; fi只传递文本文件给 open-code-review - **二进制文件专项检查**对 .png/.jpg/.pdf 等扩展名调用 identify -format %wx%h %m %b image.png 获取尺寸/格式/大小生成独立报告如“图标文件从 24x24 改为 32x32需同步更新 CSS”。 ### 4.3 LLM 对业务术语理解偏差用 embedding 注入领域知识 网络热词里提到 “agent llm embedding 等名词区别”这里的关键是embedding 不是魔法而是把你的领域知识“翻译”成 LLM 能理解的向量。我们不做复杂的 RAG 构建而是用极简方式 bash # 创建领域术语 embedding只需 5 分钟 echo 订单状态码: 10待支付, 20已支付, 30已发货, 40已完成, 50已取消 domain-knowledge.txt echo 风控规则: rule_001单日交易超5万触发人工审核, rule_002同一IP 1小时内下单10次冻结 domain-knowledge.txt # 生成 embedding 并注入 prompt open-code-review \ --model qwen2.5 \ --domain-knowledge domain-knowledge.txt \ --context 3原理CLI 工具会读取domain-knowledge.txt用内置的 sentence-transformers 模型生成嵌入向量再在每次请求时将最相关的 3 条知识基于 cosine similarity拼接到 prompt 开头。实测显示对“rule_001”相关变更的识别准确率从 63% 提升至 92%。4.4 CLI 与飞书/钉钉/企微的深度集成不止是发消息热词里反复出现 “codex cli接入飞书”但多数方案只是把 CLI 输出用 webhook 推送。我们的做法是反向打通飞书机器人主动拉取在飞书 Bot 设置中开启 “自定义事件”当用户在群内发送/review pr-1234Bot 调用open-code-review --pr-id 1234 --format flyte生成富文本卡片一键跳转到变更行卡片中的每一行建议都带vscode://file/path/to/file.ts:47链接点击直接在 VS Code 中打开对应行审批流嵌入飞书多维表格中创建 “评审待办” 视图状态字段联动 CLI 的--status参数pending/approved/changes_requested实现状态实时同步。踩坑记录早期用 webhook 推送遇到飞书消息长度限制2000 字符导致长 diff 评论被截断。改为 Bot 主动拉取后彻底解决且支持无限长度的结构化数据渲染。4.5 性能瓶颈排查当 CLI 变慢时先查这三件事DNS 解析延迟curl -w DNS: %{time_namelookup}\nConnect: %{time_connect}\nTotal: %{time_total}\n -o /dev/null -s https://api.anthropic.com。如果 DNS 1s说明本地 DNS 服务器不可靠强制使用--dns 8.8.8.8参数Diff 复杂度超标单个 diff 超过 200 行时LLM 推理时间呈指数增长。用git diff --stat预检对 100 lines的文件执行--chunk-size 50分块处理模型 endpoint 限流Anthropic 免费 tier 有 5 QPS 限制连续请求会返回 429。CLI 内置--rate-limit 4参数自动添加 250ms 间隔比客户端重试更优雅。5. 进阶应用从代码评审到工程效能度量的跃迁5.1 构建团队专属的评审健康度仪表盘open-code-review 的--metrics模式能输出结构化指标我们用它驱动每日站会# 生成今日评审数据过去 24 小时 open-code-review --metrics --since 24 hours ago --output json daily-metrics.json # 关键指标解读 # - avg_review_time_ms工程师从执行 CLI 到提交意见的平均耗时目标 120000ms # - high_severity_ratiohigh/critical 级别意见占比目标 5%超阈值触发根因分析 # - context_hit_rateLLM 引用的上下文行号在 diff 中的实际存在率反映 prompt 质量目标 95% # - human_override_rate人工修改/否决 LLM 建议的比例反映模型适配度目标 15%~30%这些数据接入 Grafana 后形成实时看板。最震撼的发现是当human_override_rate从 42% 降到 22% 时团队的平均 PR 合并周期缩短了 3.8 天——说明 LLM 建议质量提升减少了反复沟通成本。5.2 用评审数据反哺新人培训体系我们把历史评审意见库已脱敏喂给本地 Llama-3-8B 模型微调出newbie-trainer专用模型# 微调指令示例 { instruction: 你是一名资深 Java 工程师正在指导新人。请基于以下 diff 和历史评审意见用新人能懂的语言解释问题。, input: diff: - if (user.balance 0) { ... if (user.balance 0) { ..., output: 注意这里把 改成了 看起来只是多了一个等号但业务上 余额为 0 的用户可能被错误允许下单。你应该问余额为 0 是否算有效用户如果是那 0 是对的如果不是必须保持 0。 }新人入职后用open-code-review --model newbie-trainer --context 1扫描自己写的第一个 PR得到的不是冷冰冰的“high severity”而是带业务场景的对话式反馈。三个月后新人 PR 的首次通过率从 38% 提升到 79%。5.3 评审即文档自动生成 API 变更说明书当open-code-review扫描到src/api/v2/order.ts的变更时自动触发文档生成# 检测到 API 路径或请求体变更生成 OpenAPI snippet open-code-review \ --file src/api/v2/order.ts \ --trigger-doc-gen \ --openapi-output ./docs/openapi-v2-changes.yaml输出内容包含新增/删除的 endpoint 列表请求参数变更对比如userId: string→userId: number响应体字段增删说明向后兼容性标注BREAKING CHANGE / NON-BREAKING。这份文档自动提交到docs/目录成为下游团队iOS/Android/前端的权威参考。某次重大重构API 文档生成耗时 8 秒而人工编写同等内容平均需 47 分钟。6. 最后一点真实体会评审的本质是建立团队的技术共识我见过太多团队把 open-code-review 当成“自动化工具”来采购结果三个月后弃用。真正跑通的团队都做了一件小事每周五下午留出 30 分钟所有人一起看本周open-code-review --metrics的输出不讨论技术细节只问三个问题哪些 high severity 问题反复出现暴露流程漏洞比如“所有数据库操作都缺事务”说明 ORM 配置模板缺失哪些 LLM 建议被 100% 人工否决暴露模型不适配比如总建议用Promise.allSettled但团队约定用Promise.all哪些文件的评审意见最多暴露知识孤岛比如payment-core/src/目录意见占比 63%说明该模块只有 2 人掌握这 30 分钟不是为了优化 CLI而是用数据作镜子照见团队真实的协作状态。open-code-review 的价值从来不在它多快或多准而在于它把原本模糊的、依赖个人经验的“代码好不好”转化成可量化、可讨论、可改进的团队共识。当你不再问“这个 PR 谁来审”而是问“这个变更点我们共同认可的标准是什么”你就已经走在了高效工程的路上。
RELATED

相关推荐

Open Code Review:一种以代码变更为协作原点的新型评审范式

Open Code Review:一种以代码变更为协作原点的新型评审范式

1. “open-code-review”不是新工具,而是一种正在成型的协作范式“open-code-review”这个词最近在开发者社区里频繁出现,但它既不是某个刚发布的开源项目名,也不是某家大厂推出的SaaS服务。我第一次在内部代码评审会上听到它,是前…

📅 2026/9/26 19:08:46
CLI驱动的AI代码审查工具:LLM+Git深度集成实践

CLI驱动的AI代码审查工具:LLM+Git深度集成实践

1. 这不是又一个“AI写代码”工具:open-code-review 的真实定位与设计哲学 “open-code-review”这个名称乍看平平无奇,甚至容易被误读为某个开源项目的代号、某次社区活动的标签,或是某款尚未发布的实验性产品。但结合当前技术热词中高频出现…

📅 2026/9/26 19:08:46
Gitee不是Jira替代品,而是研发基础设施底座

Gitee不是Jira替代品,而是研发基础设施底座

1. 这不是一份“排行榜”,而是一份2026年研发团队真实选型决策手记你搜“2026 国产 Jira 替代方案排名”,大概率是刚被老板甩了一张PPT,上面写着“推进信创落地”“完成Jira国产化迁移”“Q3前完成工具链切换”。你点开各种公众号文章&#x…

📅 2026/9/26 19:03:45
MORE NEWS

更多资讯

📰

前端内存泄漏排查指南:原理、工具、实战一网打尽

内存泄漏这四个字,我们前端同学大多数时候是在面试题里遇见,真正到了线上,很少有人会主动跟“性能排查”较劲。但等你接手一个中大型后台系统,或者一个需要长期挂在页面上的看板大屏,用户某天跟你说“页面开了一下午越…

📰

开源代码审查协议栈:CLI+Git Diff+LLM Agent 实战指南

1. 这不是另一个“AI代码审查工具”,而是一套可落地的开源协作范式最近两周,我连续收到7个不同团队的私信,问同一个问题:“你们用的 open-code-review 是怎么跑起来的?不是 GitHub Copilot 那种黑盒,也不是…

📰

Devin 宣传视频拆解:AI 程序员真能替代 React + Netlify 全流程?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

开发者指南:如何为 axton-obsidian-visual-skills 扩展自己的可视化 Skill(SKILL.md + references 结构实战)

开发者指南:如何为 axton-obsidian-visual-skills 扩展自己的可视化 Skill(SKILL.md references 结构实战) 【免费下载链接】axton-obsidian-visual-skills Visual Skills Pack for Obsidian: generate Canvas, Excalidraw, and Mermaid dia…

📰

嵌入式Linux自学探索

本人是浙江某双非一名刚入学的研一新生,学习控制工程专业,由于已经知道研究方向对未来的工作作用不大,决定开始自学嵌入式,并开了这么一个专题来记录自己的技术成长路线。 目前手上的资源:正点原子imx6ull开发版&#…

📰

【MySQL语法】游标:用 TaoToken 统一 Key 跑通存储过程调试配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬