开放代码评审实战:从流程设计到工程能力落地
1. 从“open-code-review”这个名字说起它到底想解决什么问题第一次看到open-code-review这个标题我脑子里冒出来的第一个念头是这大概率不是一个具体的工具名而是一类工程实践的统称。后来跟几个做研发效能的朋友聊发现大家的理解也基本一致——它指向的是“把代码评审这件事从封闭的、依赖人工记忆和口头约定的状态变成开放的、可沉淀、可复用、可自动化的流程”。换句话说它关心的不是“某一次评审怎么过”而是“评审这件事本身怎么被组织起来”。代码评审这件事做过的人都知道它有多拧巴。写代码的人觉得评审是负担评审的人觉得看别人的代码是额外工作量管理者觉得评审拖慢了交付节奏。三方都不满意但谁也不敢把评审砍掉因为线上事故的复盘里十次有八次能追溯到“当时这个改动没人仔细看”。open-code-review这个命题的价值就在于它试图回答一个很实际的问题有没有一种方式让评审既保持质量守门的作用又不至于变成团队里最让人抵触的环节。我自己的经验是评审出问题从来不是“大家不认真”而是“没有结构”。没有结构意味着评审什么、谁来评审、评审到什么程度算通过、评审意见怎么跟踪、评审结果怎么沉淀全靠个人习惯。十个人的团队能有十种评审风格新人进来完全靠悟。open-code-review要做的就是把这套东西显性化、标准化、工具化让评审从“手艺”变成“流程”再从“流程”变成“可度量的工程能力”。这篇文章适合谁看如果你是团队里那个“被迫负责代码质量”的人比如技术负责人、研发效能工程师、或者单纯是那个总在群里喊“这个 PR 谁来看一下”的人那这篇内容应该能给你一些可以直接抄作业的思路。如果你只是想知道代码评审有哪些工具那可能会觉得这里讲得有点“重”因为我更想聊的是流程设计和落地细节而不是罗列工具清单。2. 评审流程的“开放化”到底开放了什么2.1 从“谁有空谁看”到“按变更类型路由”大多数团队的评审现状是这样的提交一个 PR然后在群里发一句“求 review”谁正好不忙就点进去看两眼。这种模式最大的问题是随机性太强。一个涉及数据库 schema 变更的 PR可能被一个刚入职三个月、还没接触过线上库表规范的同学审了他只能看出变量命名不太对真正的风险点完全漏掉。open-code-review思路下的第一个改变是把评审人从“随机”变成“路由”。具体做法是给变更打标签然后按标签匹配评审人。比如变更类型触发条件建议评审人数据库变更涉及 migration 文件或 SQL 改动DBA 或后端架构组成员接口契约变更修改了 API 定义文件接口负责人 调用方代表核心链路逻辑改动命中核心模块路径模块 owner 一位跨组资深工程师配置与依赖修改了依赖版本或环境配置运维代表 安全接口人文档与注释仅文档类改动同组任意成员即可这张表看起来简单但落地时有个关键细节路由规则不能太细否则维护成本会高到没人愿意更新。我的建议是初期只分三到四类跑两个月之后再根据实际漏审情况调整。另外路由规则一定要写进代码仓库的配置文件里而不是放在某个人的脑子里或者聊天记录里。放在文件里意味着它可以被版本管理、可以被新人看到、可以在评审时被引用。2.2 评审意见的“开放”从一次性对话到可检索资产评审意见是团队里最容易被浪费的资产。一个资深工程师在 PR 里写了一段关于“为什么这里不能用懒加载”的分析三个月后另一个新人遇到同样的问题这段分析早就沉在几百个已关闭的 PR 里找不到了。open-code-review的另一个核心动作是把评审意见结构化沉淀下来。具体怎么做我试过几种方案最后觉得最可持续的是“标签 摘要”的方式。每条评审意见在提交时要求评审人至少打一个标签比如#性能、#安全、#可读性、#边界条件、#历史坑。然后每周由一个人花二十分钟把本周标记为#历史坑和#安全的意见摘出来放到团队 wiki 的一个固定页面里。这个动作看起来很小但坚持三个月之后那个页面就成了新人入职必读的材料比任何官方文档都管用。注意不要试图一开始就建一个“完美”的知识库。我见过有团队花两周设计了一套复杂的分类体系结果没人往里写。正确的做法是先跑起来用最粗糙的方式收集等积累到一定量之后再考虑整理和归类。2.3 评审标准的“开放”把“我觉得”变成“我们约定”评审中最容易吵架的场景是评审人说“这里写得不好”作者说“哪里不好”评审人说“就是感觉不太好”。这种对话没有产出只有消耗。open-code-review要求把评审标准显性化也就是把“感觉”翻译成“条款”。比如“代码可读性”这个维度可以拆成几条可检查的约定函数长度是否超过 80 行超过则需要说明理由是否存在超过三层的嵌套条件变量命名是否使用了领域内的通用术语而不是自造缩写是否有注释解释了“为什么这么做”而不仅仅是“做了什么”这些条款不需要多一个维度三到五条就够了。关键是它们要被写下来并且在评审时被引用。当评审人说“这个函数 120 行超过了我们约定的 80 行能拆一下吗”对话就从主观判断变成了对约定的执行摩擦会小很多。3. 把评审“跑起来”一套可落地的操作框架3.1 提交前的自检清单让作者先过一遍很多评审的低效是因为作者提交了一个“半成品”。评审人花二十分钟看代码提了八个问题其中五个是作者自己稍微检查一下就能发现的。open-code-review的一个基本要求是作者在提交评审之前先过一遍自检清单。我常用的自检清单长这样本地是否跑通了相关测试不只是编译通过是否删除了调试用的日志和临时注释新增的配置项是否在示例配置文件中同步更新如果改动了接口是否通知了调用方是否有对应的文档更新如果有文档的话提交信息是否说清楚了“为什么改”而不只是“改了什么”这个清单不需要很长六到八条足够。关键是它要放在提交 PR 的模板里让作者每次都能看到。我实测下来光是这一条就能把评审轮次从平均 3.2 轮降到 2.1 轮左右。因为很多低级问题在提交前就被作者自己拦掉了。3.2 评审人的时间盒二十分钟原则评审人最大的抱怨是“看别人的代码太花时间”。这个问题有一部分是真实的有一部分是心理上的。真实的那个部分可以通过限制单次评审的代码量来缓解。我的经验是单次评审的 diff 行数超过 400 行评审质量就会断崖式下降。所以open-code-review里有一条硬规则如果一个 PR 的 diff 超过 400 行作者需要先拆分或者至少提前跟评审人沟通约定一个专门的时段来看。心理上的那个部分可以用“时间盒”来解决。我建议评审人给自己设一个 20 分钟的闹钟在这 20 分钟里专注看代码时间一到就停下来写下已经发现的问题然后决定是继续还是约作者当面聊。这个做法听起来有点机械但它解决了一个很实际的问题评审人因为担心“看不完”而拖延越拖延积压越多越多越不想看。时间盒把“看完”这个模糊的目标变成了“看 20 分钟”这个可执行的动作。3.3 评审意见的优先级标记不是所有问题都必须改评审意见最让人头疼的地方在于作者分不清哪些是“必须改”哪些是“建议改”哪些是“随便说说”。结果要么全部改浪费时间要么全部不改漏掉关键问题。open-code-review要求评审人在每条意见前加一个优先级标记[blocker]必须改不改不能合并[suggestion]建议改作者可以决定是否采纳[nit]小问题改不改都行不影响合并[question]不是问题只是提问作者回答即可这个标记体系看起来简单但它极大地降低了沟通成本。作者看到[blocker]就知道要认真处理看到[nit]就知道可以快速扫过。评审人也被迫思考这个问题真的严重到必须阻塞合并吗很多时候标记的过程本身就是一次自我校准。3.4 合并后的回顾评审质量的闭环大多数团队的评审流程在“合并”那一刻就结束了。但open-code-review认为合并之后还有一个重要动作回顾这次评审的质量。具体做法是每周抽 15 分钟随机选三个已合并的 PR看两件事第一评审意见里标记为[blocker]的问题是否真的在合并前被解决了。我见过不止一次作者回复“已修复”但实际上只是改了变量名核心逻辑问题还在。这种“假修复”如果不回顾永远不会被发现。第二合并后一周内这个 PR 是否引发了线上问题或回滚。如果有就回头看看当时的评审意见是不是有人提了相关的问题但被忽略了。这个动作不是为了追责而是为了校准评审的敏感度。如果连续几次发现“评审时没人提但事后出了问题”那就说明评审清单需要补充新的检查项。4. 工具选型别让工具成为流程的瓶颈4.1 自建脚本 vs 现成平台先看团队规模聊到open-code-review的落地绕不开工具选型。我的观点很明确十人以下的团队不要自建评审系统。用现成的代码托管平台自带的评审功能就够了把精力花在流程约定上而不是造轮子。十人到五十人的团队可以考虑在现成平台之上加一层轻量脚本比如自动打标签、自动路由评审人、自动生成评审周报。五十人以上才需要考虑自建或深度定制因为这时候流程的复杂度已经超出了通用工具的覆盖范围。自建脚本的典型场景是自动路由。比如用一段简单的脚本监听 PR 创建事件根据变更文件路径匹配评审人然后自动添加评审请求。这个脚本不需要多复杂一百行以内就能搞定。关键是它要足够稳定不能因为脚本挂了导致评审流程卡住。所以我的建议是脚本只做“建议”不做“强制”。它自动添加评审人但作者仍然可以手动调整。这样即使脚本出问题流程也不会断。4.2 评审数据的度量哪些指标值得看哪些是虚荣指标open-code-review强调可度量但度量这件事很容易跑偏。我见过团队把“评审意见数量”当成核心指标结果评审人为了凑数把“这里少个空格”也写成一条意见。这种度量不仅没用还有害。真正值得看的指标只有三个指标含义健康范围首次响应时间PR 创建到第一条评审意见的时间4 小时以内评审轮次从创建到合并经历了几轮修改平均 2 轮以内漏审率合并后引发问题的 PR 占比5% 以下首次响应时间反映的是团队的响应速度轮次反映的是评审意见的质量如果一轮就能说清楚说明评审人表达清晰如果需要反复拉扯说明沟通有问题漏审率反映的是评审的有效性。这三个指标之外的东西比如“每人每周评审多少行代码”基本可以忽略。4.3 评审机器人的边界它能做什么不能做什么现在很多团队会用机器人来做自动化检查比如代码风格、静态分析、测试覆盖率。这些工具确实能减轻评审人的负担但open-code-review提醒我们注意边界机器人只能检查“可规则化”的问题不能替代人对“设计合理性”的判断。我见过一个反例某团队把测试覆盖率设成硬性门槛覆盖率低于 80% 直接拒绝合并。结果开发人员为了凑覆盖率写了一堆没有断言的测试或者把无关代码也纳入统计。这种“为了过机器人而写代码”的行为比不写测试还糟糕。正确的做法是把机器人检查结果作为评审的参考信息而不是合并的门槛。评审人看到覆盖率下降可以问一句“这部分为什么没有测试”而不是直接拒绝。5. 那些只有踩过坑才知道的细节5.1 评审人的轮换不要让同一个人一直审有个坑我踩过团队里有一个资深工程师代码质量意识特别强于是所有重要 PR 都默认找他审。前三个月效果很好问题发现率很高。但到了第四个月他开始明显敷衍评审意见从原来的五六条变成一两条“LGTM”。原因很简单审美疲劳。再认真的人连续看三个月别人的代码也会麻木。open-code-review的解法是强制轮换。每个模块设置两到三个备选评审人按周轮换。这样每个人都有休息的时间也能避免“只有一个人懂这个模块”的单点依赖。轮换的另一个好处是知识扩散当第二个人开始评审某个模块时他被迫去理解这个模块的逻辑这本身就是一种交叉培训。5.2 大 PR 的拆分策略按什么维度拆前面提到 diff 超过 400 行要拆分但怎么拆是个技术活。我试过几种拆法最后觉得最有效的是“按可独立验证的单元拆”。比如一个功能改动可以拆成数据层改动schema、model逻辑层改动service、handler接口层改动API 定义、路由测试和文档每一层单独提交一个 PR每个 PR 都可以独立跑测试、独立合并。这样评审人每次只需要关注一个层面认知负担小很多。而且这种拆法有个额外好处如果逻辑层出了问题回滚只需要回滚那一个 PR不会把数据层的改动也带回去。5.3 评审意见的“保鲜期”超过 48 小时的意见还有意义吗这是一个很少被讨论但很实际的问题评审意见的时效性。一个 PR 提交后如果评审人隔了三天才给出意见作者可能已经在这个分支上继续开发了新的功能或者已经切换到了别的任务。这时候评审意见的上下文已经变了作者需要花额外的时间去回忆“当时为什么这么写”。我的经验是评审意见的保鲜期大约是 48 小时。超过这个时间评审人应该先问一句“这个 PR 还需要评审吗”而不是直接开始提意见。如果作者说“已经改了”那就关掉这个 PR重新提交一个新的。这个做法看起来有点浪费但它避免了“在过期的上下文里讨论问题”这种更浪费的情况。5.4 评审中的情绪管理对事不对人的具体做法评审最容易引发情绪的场景是评审人写了一句“这里逻辑有问题”作者读成了“你有问题”。这种误读几乎无法完全避免但可以通过一些具体做法来降低概率。我的做法是评审意见里尽量用“这个函数”“这段逻辑”作为主语而不是“你”。比如写“这个函数的边界条件没有处理空数组的情况”而不是“你忘了处理空数组”。另外对于[blocker]级别的意见尽量附上一个具体的修改建议而不是只指出问题。比如“建议在这里加一个空数组的判断返回空列表而不是抛异常”。这样作者感受到的是“有人在帮我完善”而不是“有人在挑我的毛病”。6. 从“评审”到“开放评审”的思维转变6.1 评审不是关卡是协作界面大多数团队把评审当成一道关卡代码写完了提交评审评审通过才能合并。这种心态下评审人和作者天然是对立的——一个负责“拦”一个负责“过”。open-code-review想推动的转变是把评审看成协作界面而不是关卡。这个转变的具体表现是作者在写代码的过程中就可以把未完成的 PR 发出来标注[WIP]进行中让评审人提前看到方向。评审人可以在早期就提出“这个思路可能有问题建议换个方向”而不是等到代码全部写完再推翻。这种“早期介入”看起来增加了评审人的负担但实际上节省了大量返工时间。我自己的经验是在 PR 完成度 30% 的时候介入比在 100% 的时候介入平均能节省 40% 的评审时间。6.2 评审能力的培养新人怎么学会评审评审是一项技能但大多数团队默认“代码写得好的人自然会评审”。这个假设不成立。我见过很多技术很强的人评审时只会说“这里不好”但说不清楚为什么不好也提不出替代方案。评审能力需要刻意培养。open-code-review建议的做法是新人前三次评审由一位资深工程师陪同。不是代劳而是新人先写评审意见资深工程师看完之后再补充。然后两个人对比一下新人漏掉了什么资深工程师关注了什么。这种“影子评审”做上三五次新人的评审敏感度会有明显提升。另一个做法是定期做“评审复盘”选一个已合并的 PR让两个人分别独立评审然后对比两人的意见差异。差异本身就是最好的学习材料。6.3 评审文化的底线什么情况下可以跳过评审最后聊一个敏感但必须面对的问题有没有可以跳过评审的情况我的答案是有但必须满足严格的条件。比如线上故障的紧急修复可以走“先合并后补审”的流程但必须满足三个条件第一修复范围极小只改必要的几行第二合并后 24 小时内必须补上评审第三补审时如果发现问题需要单独提交修复 PR而不是直接改。这个“紧急通道”必须被明确写下来并且被严格限制使用频率。我见过团队因为“紧急通道”太方便导致所有 PR 都走紧急通道评审形同虚设。所以我的建议是紧急通道每月使用次数超过三次就要在团队回顾里专门讨论看看是不是流程本身有问题而不是继续滥用例外。7. 我个人在实际操作中的几点体会做了几年研发效能相关的事情关于open-code-review这个方向我有三个比较深的体会。第一个体会是流程的复杂度要和团队的成熟度匹配。我见过一个十人团队照搬大厂的评审流程设计了五级评审、三种评审类型、两套度量体系结果跑了两个月就没人执行了。后来砍到只剩“提交前自检 一人评审 优先级标记”三件事反而跑得很顺。流程不是越完整越好而是越能被执行越好。第二个体会是评审的改进要从“减少摩擦”入手而不是从“增加检查”入手。很多团队一提到提升代码质量第一反应是加检查项、加门槛、加审批。但评审的本质是人和人的协作摩擦越小协作越顺畅。所以我的优先级永远是先让评审变得不讨厌再让评审变得有效。顺序反了再好的流程也推不动。第三个体会是评审的最终目标不是“发现更多问题”而是“让问题更少地出现”。如果评审做得好评审意见的数量应该是逐渐下降的因为同样的问题在之前的评审里已经被讨论过、被沉淀成约定、被写进了自检清单。当评审意见从“这个逻辑有问题”变成“这个逻辑和上次讨论的约定不一致”时说明评审已经从“救火”变成了“防火”。这才是open-code-review真正想要达到的状态。

相关新闻

把代码审查做成开放机制:分支保护、自动化门禁与评审机器人的工程实践

把代码审查做成开放机制:分支保护、自动化门禁与评审机器人的工程实践

1. 为什么要把代码审查做成“开放”的:从一次线上事故说起那次事故的根因其实特别蠢:有人直接往主干分支推了一段配置修改,把生产环境的超时时间从 30 秒改成了 3 秒。代码在本地跑了没问题,因为本地流量小、接口快,但…

2026/10/13 8:20:23 阅读更多 →
Windows SDK v6.0A 安装配置与老工程编译避坑指南

Windows SDK v6.0A 安装配置与老工程编译避坑指南

简介:Microsoft Windows SDK v6.0A 是微软面向 Windows 平台开发者提供的经典 SDK6.0 工具集,适合用 C/C、C# 构建 Win32 原生程序、COM 组件及 .NET 应用的开发人员,也适合排查系统 API 调用、做兼容性调试和性能优化的进阶用户。压缩包共 2…

2026/10/13 8:20:23 阅读更多 →
Java双端队列实现滑动窗口最大值:单调队列O(n)解法详解

Java双端队列实现滑动窗口最大值:单调队列O(n)解法详解

力扣239这道题,我几乎每次给人讲单调队列的时候都会拿出来当入门案例。题目本身不复杂——给你一个数组和一个窗口大小k,窗口每向右移动一格,让你返回每个窗口里的最大值。可就是这么一道题,能让很多人从暴力解一路优化到双端队列…

2026/10/13 8:20:23 阅读更多 →

最新新闻

VAR模型与Stata实操:从时间序列分析到论文实证

VAR模型与Stata实操:从时间序列分析到论文实证

1. VAR模型入门:为什么论文里它如此常见最近几年,经济金融类论文里出现频率最高的计量模型,向量自回归(VAR)绝对算一个。不管是宏观政策效应评估、股价与宏观变量的动态关系,还是行业间的溢出效应&#xff…

2026/10/13 18:57:02 阅读更多 →
C++全量编译从40分钟到5分钟:ccache与sccache缓存加速实战

C++全量编译从40分钟到5分钟:ccache与sccache缓存加速实战

刚接手这个C项目的时候,最让我头疼的倒不是代码历史包袱,而是全量编译一次要等足足四十分钟。项目体量不算夸张,真实业务代码也就几百个编译单元,但牵扯到Protobuf、Boost这类重型依赖,每次clean build都像一次长途旅行…

2026/10/13 18:57:02 阅读更多 →
Python内存泄漏排查实战:引用计数、垃圾回收与gc模块用法

Python内存泄漏排查实战:引用计数、垃圾回收与gc模块用法

很多写Python的朋友都有过这种经历:线上服务跑了几天,内存占用从几百MB一路涨到几个GB,最后被运维盯上,开会点名要看排查报告。我也遇到过,而且不止一次。第一反应是加机器、重启进程,但治标不治本。直到我…

2026/10/13 18:57:02 阅读更多 →
Flutter EventBus原理与工程实践:解耦跨组件通信

Flutter EventBus原理与工程实践:解耦跨组件通信

1. 为什么在Flutter里还要用EventBus?原生机制真不够用吗?刚接触Flutter的开发者常会困惑:Dart本身有Stream、Future,Widget树有InheritedWidget、Provider、Riverpod这些状态管理方案,官方文档也反复强调“不要过早引…

2026/10/13 18:57:02 阅读更多 →
Windows进程后台运行原理与CE精准干预技术

Windows进程后台运行原理与CE精准干预技术

1. 这个标题背后的真实技术图谱:不是“挂机”,而是进程级资源调度控制“CE实现植物大战僵尸后台运行”——看到这个标题,很多人第一反应是“挂机刷金币”“自动种豆子”,甚至联想到某些灰色外挂工具。但作为在游戏逆向与系统底层调…

2026/10/13 18:57:02 阅读更多 →
卡尔曼滤波器从一维到EKF:机器人状态估计实战笔记

卡尔曼滤波器从一维到EKF:机器人状态估计实战笔记

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

2026/10/13 18:56:01 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/12 18:11:17 阅读更多 →