代码审查流程化实战:open-code-review完整落地指南
去年我们线上出过一次很典型的事故一行看起来没什么问题的代码把整个服务的响应时间拖慢了将近三十倍。事后复盘的时候大家都很沉默——如果那次改动有人在合并之前认真看一遍完全能在几秒钟内发现那个循环边界写错了。也就是从那时候开始我意识到代码审查这件事不能再靠自觉而是必须靠流程。后来我把团队里磨合出来的一整套方案整理成了一个开源项目名字就叫open-code-review。它不是一个“又一个代码审查工具”而是一套可以照着做的审查流程、检查清单和团队协作规范。这篇文章就是我在这套东西落地过程中的全记录包括设计思路、实操步骤、踩过的坑以及怎么让 review 从“走过场”变成真正能拦住事故的关卡。1. 项目整体设计代码审查的痛点与 open-code-review 的解决思路1.1 为什么大部分团队 review 都在走过场先聊一个扎心的现状大多数团队的代码审查最后都会变成三种状态之一。第一种是“橡皮图章”审查人扫一眼 diff看到改动不多直接 Approve。第二种是“局部放大镜”所有人都在抠变量命名、缩进、注释真正涉及架构和逻辑的地方反而没人提意见。第三种是“沉默螺旋”一个 MR 挂了三天没人理最后要么是开发自己把分支合了要么是组长在群里催一圈然后大家在截止日期前草草approve。这三种状态我全经历过。问题根源不在于开发者不认真而在于代码审查这件事本身太“自由”了。没有统一的检查标准每个人凭自己的经验、心情、甚至当时手头忙不忙来决定审到什么程度。一个 MR 可能长达几百行涉及十几个文件如果审查人没有一张明确的“要查什么”的清单他大概率会默认走捷径只看自己熟悉的部分或者只看改动最显眼的部分。而真正的问题——比如并发边界、异常处理路径、数据一致性——恰好都藏在那些“不显眼”的代码里。open-code-review 要解决的第一个问题就是“把隐性知识显性化”。我做了三年多的审查脑子里其实有一套判断标准看到一个改动我会下意识地去想它的并发安全性、失败路径、兼容性、性能影响。但这些判断标准从来没有落成文字也就没办法复制给团队里的其他人。这个项目做的第一件事就是把一套多维度的检查逻辑固化成一份可勾选的清单。审查人不需要从零开始想“看什么”只需要按着清单逐项过每一项背后都有对应的原理说明和“什么情况算通过什么情况算打回”的判据。1.2 三个设计原则清单化、可度量、低摩擦我在设计这套流程时给自己定了三条原则你可以把它们理解为 once 的北极星。第一条是清单化。代码审查的复杂度其实很像飞机起飞前的检查不是靠机长记忆力好而是靠一张写满几十项检查内容的清单。飞行员不会觉得这是脱裤子放屁因为清单能保证最基础的东西不被遗漏。代码也一样连接有没有释放、错误有没有吞掉、配置有没有写死、接口有没有破坏兼容性这些东西如果靠“注意一下”几乎百分之百会在某个加班深夜被遗漏。所以 open-code-review 直接把检查项做成了模板每一条都是可以在实际审查中回答“通过/不通过/需要修改”的明确语句。第二条原则是可度量。如果一件事情的完成度没法衡量那它就没有持续改进的动力。我见过很多团队说“我们有 code review”但问他们“这个季度 review 拦下了多少问题平均每个 MR 审查时长多少哪一类问题出现频率最高”回答全是大概、好像、记不清了。open-code-review 里定义了一套轻量的数据记录方式——不要求团队用复杂的项目管理工具只需要审查人在合并时花十秒钟填一个简单的表格。一两个季度之后你会获得一张非常直观的问题分布图这会直接告诉你你们的团队最该补强的是单元测试习惯还是接口设计能力还是并发编程意识。第三条原则是低摩擦。任何流程一旦让开发者觉得“碍事”他们就会想办法绕过它。所以这套方案没有引入任何必须部署的服务端组件不需要装插件不需要强制迁移代码平台。它用纯文档的方式交付同时提供了一些可选的辅助脚本。你完全可以把它塞进现有的 Git 工作流里第一天就用上不需要什么迁移成本。2. 工具选型与流程搭建不是选工具是设计协作习惯2.1 开箱即用的三层审查流程open-code-review 推荐的三层审查流程是我在多个团队的实践中慢慢磨出来的。第一层是“自审”开发者在提交 MR 之前按清单里标记为“提交前”的项目自己过一遍。这一层的目的不是抓 bug而是省掉审查人的时间——比如基础格式问题、明显死代码、没有写测试的自测结果这些如果能在提交前处理掉别人审查时就能把精力集中在真正重要的地方。第二层是“并行审查”MR 发起后至少由一名熟悉这块业务的人做深度审查必要时再拉一个有全局视角的人做设计层面检查。深度审查人重点看逻辑正确性和边界条件全局审查人重点看这个改动对整套系统架构和未来扩展的影响。两层分开而不是同一个人全看是因为这两种视角是互相打架的——抠细节的时候你很难同时思考宏观设计反之亦然。第三层是“合并前复核”。我发现很多团队的问题出在 merge 的那一下所有人都以为有另一个人在把关结果谁都没做最后的检查。所以 open-code-review 规定合并动作必须由“另外一个人”来完成不让写代码的人自己动手合并。这个规则看上去很琐碎但它能很有效地倒逼审查结论落地。如果审查意见没有全部关闭合并的人就会停下来问一句这几个问题解决了没这一问就把整条流程的闭环补上了。2.2 审查清单应该怎么做才不变成“废纸”执行层面的核心是清单。清单这玩意儿很多团队也自制过但绝大部分一个月后就没人看了。原因很统一清单做得太啰嗦或者太抽象。open-code-review 里对清单设计有两条硬规则。第一条就是每个检查项必须是“可执行的”。什么叫可执行就拿“性能”这类检查来说。如果你写“合理评估本次改动对性能的影响”这就是一句废话审查人看完依然只能凭感觉。但你把它拆成几条具体问题之后任何都能执行新增的循环体内有没有数据库查询或网络调用涉及大数据量的操作有没有考虑批处理或分页热点路径上有没有不必要的对象创建跟缓存相关的改动有没有确认过期策略的合理性当你把模糊的概念拆成这些具体问句执行者的反馈就是“照着一张表打勾”而不是站在代码面前发呆。第二条是清单必须按“风险和频率”分层。有些问题很严重但很少发生比如安全漏洞有些问题很轻微但天天发生比如命名不规范。这两种问题的检查方式完全不同不能塞在同一个维度里。open-code-review 把检查项分成三层红线层只要命中直接打回不用讨论、质量层大多数情况下要求修改但可以根据实际情况商量、建议层不影响合并但作为技术债记录下来。也不光是分层这么简单我建议每个团队每季度都要重新审视一遍清单把最近半年实际发生过的事故沉淀成新的检查项同时删掉那些从来没拦住过任何问题的条目。清单只有保持这种“新陈代谢”才不会是长在文档库里的化石。2.3 辅助工具链静态扫描与人工审查的边界经常有人问我现在都有静态分析工具了还要人工 review 干嘛我的答案是它们根本不在同一个维度上。静态扫描负责的是“确定性问题”比如空指针、资源未关闭、已知安全漏洞模式这些是机器做得又快又准的事情应该让扫描在 CI 阶段自动跑完全不要占人力的时间。而人工审查负责的是“不确定性问题”这个架构设计能撑得住明年的需求变化吗这个接口抽象合理吗这种异步处理的失败恢复策略站得住脚吗这些问题是工具给不了答案的。我强烈建议的做法是在 CI 里同时跑 lint、单元测试、覆盖率检查和静态分析然后把结果作为 MR 的必要门槛。没过 CI 的 MR 根本不用搬上台面来审这能节省所有人至少三分之一的时间。而人工 review 的时间和精力全部留给代码里机器看不懂的部分。在文档上open-code-review 给出了一个“人机分工”的表格。机器负责的部分会列出常见工具类型和检查项举例人工负责的部分则按架构、逻辑、安全、运维影响等维度拆分。落地的时候你只需要把“机器负责”的部分先在 CI 里配起来人工的精力就能迅速聚焦。3. 实操过程与核心环节实现从提交 MR 到合并的完整复盘3.1 准备阶段分支策略和提交信息规范这一节我拿我们团队最近做的一个具体功能来讲。背景是一个商品列表接口的分页优化涉及服务端两个核心模块和一个前端页面的改动。如果是以前可能直接推一个分支、改完就提 MR然后等着大家浪费时间猜“这坨改动到底要干什么”。用 open-code-review 的流程之后从第一步开始就不一样了。分支策略上我们采用“短生命周期特性分支”。从主分支上拉一个feature/pagination-optimization分支开发周期控制在两到三天以内。基本等价的约定是分支生命超过一周就要主动跟主分支同步一次避免最后合并时出现大规模冲突。很多人忽略这一点结果一个分支拖了一个月合并的时候光解决冲突就花了一整天还非常容易在冲突里引入新 bug。提交信息这块我建议强制使用 Conventional Commits约定式提交规范。格式就三部分type 表示提交类型feat、fix、refactor、test、docsscope 表示影响范围subject 是简短描述。比如feat(pagination): 优化商品列表分页性能并增加游标支持。这个规范不是形式主义。一旦提交信息是结构化的Git 历史就变成了一份机器可读的“变更流水账”后面的代码审查、问题追溯、版本生成全都能自动化。拒绝无效提交这操作很简单在提交规范落地一周之后你回看历史就能发现以前那种“update”、“fix bug”、“修改了一些问题”的无效提交会被有效过滤掉。3.2 审查执行阶段按清单逐项过一遍的真实过程功能开发完MR 提上来之后作为审查人我不会直接开始读 diff。我会先花三分钟把 MR 描述和关联的任务单读完搞清楚这次改动的目标是什么、涉及哪些模块、预期的行为变化是什么。没有这一步直接看代码很容易陷入“只见树木不见森林”的状态你会因为一句写法别扭的代码跟开发者较劲却忽略了真正的内存泄漏隐患。接下来按清单一项项来。先说正确性。分页优化最常见的坑是边界前端传过来page_size超过 100 时后端会怎么处理cursor失效时表现是什么当数据库里新插入的数据正好落在分页边界附近时会不会出现一页数据重复或者丢失这些问题我会结合 diff 里的判断逻辑仔细验证。然后看性能这个功能优化的目标就是性能所以我会特别关注新增的查询有没有走到索引会不会在循环里产生 N1 次查询。在安全层面这次改动涉及前端展示需要确认新加的字段有没有权限校验。用一句话说清单不是让你读完代码以后才开始执行审查过程本身就是“带着问题清单去代码里找答案”的过程。我在实际操作中通常是左边开着 diff右边贴着相关检查项的深度问句每确认一项就打勾。这样有个非常明显的好处审查完跑了一遍流程之后你不会出现“好像看过了但忘了看到什么”的空虚感而是明确知道自己已经覆盖了哪些维度。3.3 反馈阶段什么样的审查意见别人愿意接受我发现一个挺普遍的现象很多审查人是能够发现问题的但写出来的意见极其抽象没有说服力。你写一句“这里性能有问题”开发者大概率一脸懵地回你“哪里有问题怎么改”。审查意见写得越具体被采纳的可能性越大这是我在无数个 MR 评论区里验证过的结论。我把“好的审查意见”总结成了一个三段式结构。第一段说清楚现象复述当前代码到底做了什么。第二段解释为什么这是个问题最好能给出一个具体的触发场景。第三段给出参考建议至少要给出方向性的改进路径哪怕没有最终方案。举个例子一种写得很差的评论是“建议这里用缓存优化一下”另一种按三段式写的是“这里是高频查询接口当前实现每次调用都会去数据库扫描全表如果该接口的 QPS 上来之后这个查询会成为明显的热点建议针对这个查询加 Redis 缓存缓存 key 加好过期时间就好。”是不是感觉天差地别第二段意见看起来花时间更多但它其实帮你省下了后面的反复沟通时间。你的目标不是让开发者知道“有问题”而是让开发者看到“什么接下去该怎么做更合适”。这样也有效地降低了一轮一轮无休止的评论拉锯战。4. 常见问题与排查技巧实录我踩过的坑和最终解法4.1 为什么总是没人愿意主动当审查人代码审查流程落地后团队遇到的第一个阻力就是“没人愿意审”。这个问题的根源很有意思在很多团队里审查不是一种被认可的贡献。你花两小时给别人找出一堆潜在 bug方向对的时候大家觉得你应该做这些方向不对的时候你可能把人得罪了。它的收益是隐性的成本却是显性的所以大家自然回避。我们的解法是把审查责任按模块拆分。每个模块指定一到两名“主审查人”任何涉及该模块的 MR主审查人是第一责任人。这个角色不是固定不变的按季度轮换但同一时间必须明确到人。有了指定的主审查人之后没人审的问题就自然解决了。更妙的是审查本身成了新同学熟悉模块的高效方式通过审查别人的代码他们反而比开发同学更快建立起对整个系统的全局视野。4.2 定时长把控要么走马观花要么一拖再拖时间把控这个度很难太短变成走过场太长又严重影响迭代节奏。我们的经验是一个 MR 的地板大致对应代码行数加浏览速度的乘积一个合理上限在 20 到 30 分钟之间超过这个量级的 MR 必须拆。如果一个 MR 超过 400 行审查人的专注力一定告急我们默认会被打回重拆。这个规则在最初很不受待见但当大家发现“拆小的 MR 更快被通过”“审小 MR 比审大 MR 心情愉快”之后就再也没人抱怨了。还有一个很脏很累的活就是审查节奏。在团队里我推荐大家约定“同一时间只有一个大的待审 MR”这类心照不宣的规则并设置一个共享的待审列表。审查人也需要保护自己的大块时间而不是被碎片化地打断。我们规定每天上午和下午各设一个“审查时段”之后团队的整体产出反而比原来兵来将挡的模式提高了因为每个人都有一个稳固不受干扰的大块时间用于深度工作。4.3 审查意见引发的情绪冲突怎么办代码审查说到底是一种对他人的否定它天然容易带来情绪摩擦。一条写得不好的 review 评论轻则让人郁闷重则直接在评论区引发一场大战。我们在这方面走了不少弯路最后沉淀下来几条非常有效的规则。第一条是评论对事不对人永远不要出现“你为什么要这样写”这种句式要改成“为什么这里选用了这种写法是不是有 XX 方面的考量如果没有的话我担心 XX 场景下会出问题”。第二是把探讨都放在评论区尽量减少面谈。留文字记录对话双方都有思考的时间外部的围观者也能从中学习事后复盘也想得起来当初的思考逻辑。第三是出现问题严重分歧的时候不是谁嗓门大谁有理而是回到事实层面去验证如果两边都拿不定主意可以约定一个快速实验来验证。这样一来审查就从一个“pk 谁更厉害”的地方变成了一个“共同把问题搞清楚”的地方。不同维度的团队协作细节我现在总结成了下面这个速查表比较适用于中小型研发团队直接参考问题症状建议解法MR 过大审查超过 30 分钟仍看不到边审查人失去耐心强制拆分为小于 400 行的多个 MR一次只做一个改动审查人缺席MR 长期无人问津指定模块主负责人按季度轮换明确责任到人意见太抽象开发者看了等于没看还要追问“什么意思”采用三段式写法现象 触发场景 参考建议关注点过于偏肤浅评论区持续围绕命名、格式、注释争论在审查规范中明确声明这些本属于自审查的部分机器审查后直接拦截人工只关注逻辑级别连续多轮修改MR 反复修改多次疲劳感极重对较大 MR 采用先面对面同步审一遍再补后续细节的流程5. 一些边界、扩展方向与个人心得这套 open-code-review 方案如果只是把文档拿回去自己不去做本地化适配那它很快就会失效。每个团队的技术栈、业务逻辑、人员水平都不同一个通用清单不可能让所有人每题都能直接命中。所以我在项目里特别强调“二次加工”的步骤导入清单之后先跑两周然后再做一次基于实际案例的修订。这个过程是自己团队把方法内化的过程远比照着文档执行的结果重要。更延伸一步说代码审查只是整个工程效能体系里的一个环节。如果你能让审查数据和 CI、问题跟踪系统之间形成信息闭环那你会发现它能带来的改进远远不止“少出几个线上 bug”。举个例子当你在一个季度里积累了足够多的审查数据你就能知道你们团队最常犯的五类问题分别是什么然后针对性地去补对应的自动化检查和培训内容这是普通“自由 review”模式完全做不到的。所以我把 open-code-review 的后续接口留成了文档和表格双格式。方便想深入做的团队把数据直接导入报表系统。最后分享一点我个人的真正体会代码审查带来的最大价值不是某一次拦住了一个绝顶严重的 bug而是把团队的代码水平从“个人英雄主义”慢慢推向“集体认同”。审查的过程本身就像把全队的隐性知识都摊开在桌面上来回交换了一遍。新人通过审查快速了解系统边界老人通过审查发现自己的思维盲点整个团队的代码质量底线会在不知不觉中被抬高。如果你正准备在自己团队里做 code review 流程改造我建议你不要一上来就搞大而全的工程平台。先拿 open-code-review 这套轻量的清单流程跑起来用两周收集反馈再做裁剪。流程这东西最好是从一个让大部分人愿意坚持的最小闭环开始宁可慢一点也不要折腾一次然后放弃。

相关新闻

open-code-review:一种以可追溯性为核心的代码评审实践范式

open-code-review:一种以可追溯性为核心的代码评审实践范式

1. “open-code-review”不是开源项目,而是一套可落地的代码评审实践范式“open-code-review”这个词乍看像某个GitHub仓库名,或是某款新出的开源工具——但实际翻遍主流代码托管平台、CI/CD生态和开发者工具市场,都找不到一个叫这个名字的成…

2026/10/12 19:03:46 阅读更多 →
代码评审革命:用open-code-review构建量化、可沉淀的代码质量防线

代码评审革命:用open-code-review构建量化、可沉淀的代码质量防线

代码评审这事,说大不大,说小不小。很多人觉得评审就是“拉个会,你讲讲,我看看,没问题就过”,等到合并上线才想起,那段没人细看的代码正在生产环境里默默搞事情。我自己的团队也是踩过一次事故的…

2026/10/13 22:03:53 阅读更多 →
Spring AI RAG 实战:为问答助手添加引用溯源,杜绝大模型幻觉

Spring AI RAG 实战:为问答助手添加引用溯源,杜绝大模型幻觉

1. 为什么我要给 RAG 问答助手加上“引用溯源”大模型胡说八道这件事,只要你在生产环境里跑过问答类应用,就一定被它坑过。用户问“咱们内部报销标准是多少”,模型张口就来一个看似合理但完全错误的数字,你还找不到它到底是从哪编…

2026/10/13 21:20:27 阅读更多 →

最新新闻

风电水电联合调度优化算法与工程实践

风电水电联合调度优化算法与工程实践

1. 项目背景与核心价值去年参与某省级电网清洁能源消纳项目时,我第一次接触到风-水联合调度这个课题。当时面对风电出力的强随机性和水电调节的滞后性,团队在制定优化运行方案时遇到了不少挑战。这个经历让我深刻认识到:在双碳目标下&#xf…

2026/10/14 2:21:24 阅读更多 →
从PowerDesigner迁移到PDMan:开源数据库建模与Git版本管理实践

从PowerDesigner迁移到PDMan:开源数据库建模与Git版本管理实践

1. 为什么我最终把数据库建模从商业软件迁到了PDMan做后端开发时间长了,数据库建模这件事几乎绕不开。早些年团队里清一色用PowerDesigner,画物理模型、生成DDL、导出字段文档,一套流程走下来确实顺手。但问题也很明显:正版授权费…

2026/10/14 2:21:24 阅读更多 →
微信小程序仿智行火车票开发实战:云开发+数据离线化方案

微信小程序仿智行火车票开发实战:云开发+数据离线化方案

简介:本资源是一套完整的微信小程序仿智行火车票12306系统实战项目,面向Java后端与小程序前端初学者及全栈学习者,聚焦铁路订票核心业务场景,涵盖用户查询、车次管理、订单生成等全流程功能实现。项目采用SSM(SpringSp…

2026/10/14 2:21:23 阅读更多 →
RTMP Flash播放插件替代方案:flv.js迁移实战与参数调优

RTMP Flash播放插件替代方案:flv.js迁移实战与参数调优

简介:这份资源是面向需要在网页中播放RTMP流媒体的开发者与运维人员的一套Flash播放插件实现方案,核心解决旧系统或特定场景下通过Flash技术播放RTMP直播、点播流的问题。压缩包共5个文件,约1.15MB,包含2个swf播放器与安装检测组件…

2026/10/14 2:21:23 阅读更多 →
AI编程助手代码质量救星:TypeScript静态类型约束实战

AI编程助手代码质量救星:TypeScript静态类型约束实战

AI 编程助手越帮越乱,这个话题我最近真的是感同身受。我们团队接入 AI 编程助手之后,合并请求里的代码量倒是上去了,可编译期错误非但没减少,反而冒出来一批"语法完全合法、类型对不上、一跑就崩"的代码。后来大家坐下来…

2026/10/14 2:21:23 阅读更多 →
LaTeX 2025环境配置:texlive + TeXstudio

LaTeX 2025环境配置:texlive + TeXstudio

文章目录Latex2025环境配置一、LaTeX 简介1.1 什么是 LaTeX?1.2 为什么使用 LaTeX?1.3 如何开始使用 LaTeX?二、texlive下载安装2.1 texlive下载2.2 texlive安装2.3 常见问题2.3.1 用管理员权限打开install-tl-windows.bat 报错2.3.2 Latex安…

2026/10/14 2:20:23 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战: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/13 22:01:27 阅读更多 →
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 阅读更多 →