新闻详情

新闻详情

首页 / 资讯中心 / 详情

开放代码审查:从走过场到高效团队协作的实践指南

发布时间:2026/9/25 6:03:15来源:尧图网络
开放代码审查:从走过场到高效团队协作的实践指南
1. 为什么绝大多数团队的 Code Review 最终会沦为走过场先讲一个我亲历的现场。某个周五晚上线上支付回调突然大量超时工程师回滚后拉日志排查发现问题出在一个并发标记位上——两个服务同时写同一个状态字段而这段逻辑在三天前刚刚合入主干。诡异的是这个 PR 在代码评审里已经被人点了 Approve评论区一片祥和连一个 nit 都没有。事后回溯那位 reviewer 自己承认那天在开会间隙刷了一眼觉得改得不多就没细看。这不是个别现象。我前后待过几个不同规模的团队见过太多 team 把 Code Review 当成发版前的一道工序跟打卡一样reviewer 看一眼标题、瞄一眼 diff、点个 Approve 就算完事。更常见的情况是大 PR 动不动几千行reviewer 根本看不过来只能挑几个文件名眼熟的目录随便翻翻或者反过来评论区里跟代码风格较劲吵了三天真正致命的逻辑错误反而没人提。于是我想把开放的代码审查这件事摊开讲一讲。所谓 open-code-review我理解它不只是某个工具、某套插件的名字而是一种把审查流程、规则、反馈和心态全部打开的做法流程对所有人透明规则靠自动化兜底评论不搞人身攻击作者和 reviewer 之间是合作关系而不是互相刁难。这篇文章适合三类人正在搭代码评审流程的技术 Leader、成天被低质量 review 折磨的一线工程师以及想把自己的团队从走过场里拽出来的任何一个人。先说一个反直觉的结论Code Review 做得好的团队reviewer 花的时间反而是少的。不是因为他们不认真而是因为他们把什么该看、什么不该看、看到什么程度、卡什么标准这件事想清楚了。一个没有边界感的审查流程最后只会逼着所有人用最低成本敷衍过去——反正只要 Approve 就完事了。2. 把开放拆开看开放式审查的三个层次2.1 工具开放让审查记录可追溯、可复用很多团队对 Code Review 的理解就是在 GitLab 上建个 MR找人点一下。工具当然是基础但开放的第一层意思是审查的过程和结果要能被事后查证能形成团队的知识资产。具体落地时候我建议至少做到三件事每个合并请求必须关联需求单或缺陷单号保证 review 的时候 reviewer 能知道这段代码是为解决什么问题而写的而不是对着天书猜意图。评论按类型做标签阻塞、建议、纯风格方便后续统计哪类问题反复出现哪类问题根本没人提。允许 reviewer 在关键评论里留下为什么不建议这么写的上下文说明而不只是一句这样写不对。几个月之后有人翻到这条评论能直接看懂当初的取舍。工具开放还有一个容易被忽略的细节不要把 review 讨论局限在本地 IDE 里。像 JetBrains 系自带的本地 review 功能虽然方便但讨论记录不落到远端别人看不到等于没审。我们团队从 2023 年开始强制要求所有 review 评论必须发在 GitLab MR 或 GitHub PR 上哪怕只是私聊里达成的共识也要回帖一句按刚才讨论这里我改成 X把最终结论沉淀到代码仓库。这半年下来翻看历史 MR 的成本大幅降低新人上手时看几条典型 MR 就能理解团队的一些隐性约定。2.2 流程开放规则透明而不是看人下菜我见过不少团队表面上有一套 review 规则实际上执行的时候全靠关系关系好的随便过新来的被挑刺挑到怀疑人生架构组的代码没人敢动实习生的代码谁都能踩两脚。这种暗箱式的审查是最伤团队信任的。流程开放的核心是规则一致。有几个值得直接写进团队规范的点明确规定哪些变更必须人工审。一般来说涉及核心链路、支付、权限、数据迁移的代码必须双人审纯文档、配置、测试代码可以放宽到单人审甚至依赖 CI。明确评审时限。我见过最离谱的情况是 MR 挂了两个星期没人管作者催了三次最后 reviewer 来一句不好意思我忘了。时限写清楚Urgent 半天正常一天大 MR 一个工作日超时自动升级提醒。明确谁能合入。最稳妥的做法是作者不能合自己的 MR即便你有权限也尽量避开这个动作。别小看这一条它能避免很多我自己确认过了没问题式的侥幸。我见过一个很有效的玩法让团队轮流当本周 review 协调人负责盯 MR 队列、清点超时的单子、找出所有 MR 都挤在周五下午这类节奏问题。这倒不是为了加重谁的负担而是让每个人都体验一次我自己也被人催着审代码是啥感受比 Leader 天天在群里喊大家记得 review有用得多。2.3 心态开放把评论当礼物而不是攻击这一层最难但恰恰是决定 review 文化好坏的分水岭。技术团队里从来不缺毒舌型 reviewer。我见过有人写评论写得跟 Stack Overflow 置顶帖似的字字句句都透着你连这都不会的优越感。也有玻璃心型作者一看到 nit 就觉得对方在否定自己的技术能力两个人能在评论底下吵二十楼。开放的心态落到操作上其实是几条硬规矩reviewer 提意见之前先问自己我是否完全理解了这段代码的上下文不理解就先提问不要上来就下结论。作者收到不同意见时先默认对方是善意的然后再判断技术细节哪怕对方语气不好也尽量就事论事回复。团队里出现评论火药味过浓的苗头Leader 要第一时间下场调停把话题拉回技术本身而不是和稀泥。说个真实案例。我前团队有个资深后端技术很强但写评论经常用我不太懂你为啥要这么写这种高姿态句式搞得组里两个年轻工程师压力巨大每回提 MR 前都要把代码念三遍。后来我跟他深聊了一次发现他不是故意的纯粹是过去在上一家公司被这么对待过下意识学了这套话术。我们约定凡是带情绪的评论发出去之前先删掉重写一遍只留事实和理由。三个月后他的评论风格明显变了组里 review 的气氛也松快了很多。3. 从零搭一套可落地的 Code Review 流程关键决策与分工3.1 先想清楚审查策略适合全量互审还是专职守护者很多人一上来就问用什么工具我反而觉得第一个要决策的是审查策略。不同规模的团队、不同耦合度的仓库策略差别很大。小团队5 人以内适合全员互审因为每个人对整体代码都有感知互审能顺便传递知识。但要注意节奏控制否则每个人每天一半时间都耗在看别人代码上。中等团队6-15 人建议负责制审查每个 MR 指定一个 primary reviewer 和一个 secondaryprimary 对本次合入负责secondary 侧重从使用者角度提建议。这里的关键是 primary 不能是随便拉个人得是对这个模块有足够上下文的人。我见过太多团队随便一个好像写过这个目录代码的人来审结果 reviewer 自己都不熟只能审一下命名和格式化深层问题根本发现不了。大团队或复杂仓库我建议引入维护者守护制核心目录有固定的 maintainer所有改动要过维护者的手。这听起来像瓶颈但实际是保护——核心模块的变更速度本来就不应该太快慢一点换来稳定是值得的。3.2 规则制定边界感比数量更重要我发现很多团队 review 规则写了几大页最后执行不下去。原因很简单规则太多记不住等于没规则。真正能长期跑下去的规则一定是少而清晰、每条都能用一句话说清的。场景建议规则说明改动量超过 400 行必须拆 MR一次审 400 行以内review 质量最高超过 800 行review 基本失效涉及 SQL 迁移或权限变更需专门 review 并附带自测说明这类问题合入之后才发现修的成本至少 5 倍测试覆盖率明显下降CI 直接拦截不允许合入人盯覆盖率容易漏交给自动化author 提交了新一轮 commit必须答复所有 blocker 评论后才能合入避免作者默默改了代码reviewer 不知道的情况这里要特别解释一下拆 MR这件事。很多工程师不喜欢拆 MR理由是这个功能就是一个整体拆开没法跑。但实际上拆 MR 不一定要按功能拆可以按修改层次拆先合重构的纯移动代码纯移动、无逻辑变化再合数据结构入参的变化最后合真正的业务逻辑改动。每一个阶段都是可编译、可测试的reviewer 能按顺序理解设计脉络。那种一个 3000 行的巨型 MR 500 字描述的做法本质上是在逼 reviewer 走马观花最后必然漏掉问题。3.3 工具选型的核心逻辑别让工具绑架流程我用过 GitHub、GitLab、Gitea也用过商业化的 Reviewable、Upsource 一类工具最后还是回到了标准平台 自动化插件这套组合。选型的逻辑其实很简单团队日常交流在哪review 就放在哪不要在家里装一套额外的重型工具却没人养。具体点说我们最终用的是 GitLab MR 自建 CI。CI 负责机械性检查格式、静态扫描、覆盖率变化、常见反模式检测比如直接 catch 吞异常、明文密码入库这类高危项这样 reviewer 的精力可以全部放在逻辑设计、边界条件和异常处理上。这里我强烈建议把危险模式扫描做成 MR 里的一个强制 job不通过就标红而不是靠 reviewer 肉眼去找——人眼找规律性问题永远不如脚本可靠。另外一定一定要开启只有通过所有检查才能点 Merge这个配置。很多团队 CI 跑了但允许强推合并那 CI 就变成了摆设人的惰性会第一时间把捷径走穿。3.4 评审范围控制一眼能看完的 diff 才有意义我自己的经验是一个 MR 如果 reviewer 花超过 30 分钟还看不完这个 MR 就太大了。这不是说人不行而是认知负荷已经超过大脑的短期记忆容量。研究表明代码评审的有效性在 diff 超过 400 行之后断崖式下降——不是说完全没有 reviewer 能审 1000 行的 MR而是这种能力极稀缺你不能赌 team 里每个人都有。所以拆 MR 不是妥协是一种对 reviewer 注意力资源的尊重。我在团队里推过一个硬指标单个 MR 不超过 400 行实在拆不开的在描述里写清楚为什么这次必须大并主动提议开个短会一起过。试行两个月review 的平均响应时间从两天缩到四个小时评论的有效率也涨了不少——因为大家终于能看完而不是看个开头了。4. 让评论从垃圾信息变成有效反馈的实战技巧4.1 分级评论法Block、Suggest、Nit这是我认为提高 review 沟通效率最立竿见影的做法。评论不要一股脑堆上去而是明确标注级别让作者一眼就能分清主次。级别含义处理规则Block必须改会导致线上事故、逻辑错误、安全隐患不改不能合入author 必须回应并修改Suggest建议改有更好的写法或当前写法未来会踩坑作者可改可不改但必须说明为什么保留Nitpick纯风格命名、格式、个人偏好合并时批量处理不必逐条纠缠这套分级我在多个团队里推行过有个附带的好处它天然抑制了 reviewer 的表演欲。很多人写一堆 nit 不是为了代码好是为了显得自己看得很仔细。分级之后这类评论的权重明显降低真正有价值的 Suggest 和 Block 反而更容易被重视了。4.2 有效评论的样子给结论也给理由和示例大多数低质量评论的共性是只给结论不给上下文。这里写错了这个函数命名不好能不能优化一下——这类评论对作者来说毫无营养因为作者大概率不知道哪错了、为什么要改、怎么改才更好。一个好的 review comment 至少包含三要素问题定位这段代码在什么场景下会出问题根因分析为什么当前写法有问题边界条件、并发、异常路径等建议方案给出具体改法或者至少给一个可参考的代码片段。举个例子不说这里需要加锁而是**Block** updateBalance 在并发转账场景下存在竞态条件 两个请求同时读到 balance100各自加 50最后写回去还是 150 而不是 200。 建议用数据库的原子更新UPDATE ... SET balancebalance50 WHERE id? 或引入分布式锁。 参考实现 \sql UPDATE accounts SET balance balance ? WHERE id ? AND version ? \这段评论把为什么要改说清楚了作者拿到手就能改不需要再来回追问review 轮次自然也少了。相比之下加锁两个字虽然方向没错但没解决加到哪、怎么加的疑问作者十有八九还要再问一轮。4.3 提问式评论 vs 命令式评论建议多用前者这里用 Docker 镜像直接跑不就好了搞这么复杂干嘛——这种命令式评论的潜台词是你是个傻子吗。久而久之作者会形成防御心理任何评论都条件反射地想反驳review 变成辩论赛。更有效的做法是提问式这里如果不用 Docker 镜像会导致安装环境不一致的问题吗我有点困惑为什么不用 Docker 镜像因为项目里其他服务都用它。如果有什么特殊考虑可以解释下吗提问式评论的妙处在于它默认作者有足够的判断能力只是可能存在信息差。作者收到这种评论大概率会认真解释背景双方基于信息互换达成共识。就算最后真的是作者写错了他也会因为被当成专业人士对待而更愿意接受修改意见。4.4 作者侧的回应礼仪吸收、讨论、明确拒绝我见过太多作者被 Block 之后一声不吭把代码改了也没回一句已处理reviewer 还得点开 diff 一个一个对。也有作者直接在评论区怼回去这块你不懂别看这个目录了。这两种都不健康。作者收到 Block 评论的规范动作是三步确认问题存在回复同意已修改并在新 commit 里体现。觉得有异议先回复我想了一下这里其实有个约束是XXX所以暂时这样写但你的建议我记下了后续如果XXX我再改给出讨论空间。如果最终决定不改明确回复我评估过了这个位置的 XXX 不影响主流程且现在改的风险大于收益先保持现状加了个 TODO 记录。拒绝得干脆但有理有据比沉默然后悄悄改了强。最关键的是作者在新一轮 commit 里要主动回应每一条 Block 和 Suggest哪怕只是写没改原因见上面的回复。这样 reviewer 才知道自己的意见被人认真对待了他下次才会继续认真审。5. 落地过程中我踩过的坑从橡皮图章到注水 KPI5.1 橡皮图章效应为什么必须两人过审仍然无效有一段时间我们定了死规矩所有 MR 必须两个 Approve 才能合。结果不到两个月我发现一个诡异现象数以百计的 MR 都是同一个人 Approve 的而且经常在提交后五分钟内就审完。我找了那个哥们聊他说反正 leader 定的规则必须两个 approve我不尽快点了别人的活就卡在我这。他也不想当橡皮图章但规则倒逼他变成了橡皮图章。这就引出开篇那个反直觉结论盲目提高 Approve 门槛只会让 review 变成形式主义。后来我们做了两个改动情况明显改善把必须两个 Approve改成必须有 1 个熟悉该模块的 reviewer 明确 Approve CI 全绿另一个 Approve 变成可选项。在 CI 里加了一个review 状态检查如果一个 MR 在 5 分钟内被 Approve 且 diff 超过 100 行直接标记为疑似橡皮图章在合并记录里打个标签方便事后抽查。这事给我最大的教训是流程设计要考虑人的天性。任何规则如果执行成本太高最后一定会被人用最低成本满足形式而真正想要的质量目标根本没达到。5.2 过大 PR 的灾难当 review 变成了考古我在一个老项目上见过一个史诗级 MR重构了一个核心模块同时改了数据模型、接口签名、前端调用、测试用例还顺手升级了依赖版本总行数将近 6000 行。描述里写着本次升级了 XX 模块涉及底层 API 变更请各位重点 review。结果自然是可以预料的没有一个 reviewer 能看完大家最多看看自己负责的那块然后在评论区里互相客气我这边没问题你瞅瞅你那块。合入后一个月里连续出现三次事故全是跨模块交互的边界问题。这件事之后我把单 MR 不超过 400 行写成团队规范并且给了两个变通出口一个是纯代码移动类比如从 util 移到 common不触发行数限制但要保证逻辑零变化并在描述里列明纯移动清单另一个是确属无法拆分的大重构需要先写一个 RFC 文档在 MR 里附上设计文档链接并强制安排一次线下 review 会议而不是线上散养。这两个出口用下来大重构反而比平时更稳了因为组织开了一次真正认真的人工审查会。5.3 不要把 KPI 玩成评论数量竞赛有一段时间我想量化 review 质量定了个指标每个 MR 平均评论数。结果两周之内评论数量翻了三倍但内容几乎全是LGTM、1、可以可以这类废话真正有价值的 Block 和 Suggest 反而没见涨。后来我把统计口径改成了阻塞级评论的数量和由 review 发现的线上缺陷数。前者自动从 MR 的 Block 标签里数后者靠回填工单统计线上问题回溯时标注是否在 review 阶段可被拦截。这两个指标才是真正跟工程质量挂钩的。评论数量这种虚荣指标除了让团队学会注水之外解决不了任何问题。顺带说一句任何量化指标都要小心被玩坏。Betteridge 说过任何以 Judge 为名的系统最终都会被 Judge——KPI 也一样。所以我现在更看重的是定性观察review 是否在提前暴露问题作者是否在主动寻求 feedback新人是否从 review 中学到东西。指标只是辅助不是目的。5.4 历史包袱仓库的渐进式改革有的团队不是不想做好 review而是仓库太老了几百万行代码单元测试基本是空的CI 跑一次要一个小时。新人提一个 MR光跑完测试就花掉半天reviewer 自然是能拖就拖。这种情况不要妄图一夜之间全面铺开我也犯过这种错误结果是被全 team 的怨念淹没。后来换了个思路划新代码保护区。规定只有本次 MR 新增或修改的代码才走强制 review 流程存量代码只做触碰检测改到了哪块哪块就必须有对应测试。同时对老代码做增量迁移每次改到底层公共组件就顺手补一个关键链路的测试。一年下来保护区的覆盖面越来越大老代码的债务虽然不是直接还完的但至少再也没长新债。这中间最让我意外的是团队态度的变化。一开始反对声很大说这不就是不做 review 吗但真的跑起来之后由于新代码的保护质量上去了存量代码也慢慢摸清了边界反而出现了越来越多我主动把老代码里的一段逻辑抽出来重构一下的行为。这是靠管束逼不出来的是好的 review 文化给到的安全感。6. 衡量 Code Review 是否有效一组值得跟踪的信号指标6.1 覆盖率不等于质量先看审查覆盖率再看拦截率审查覆盖率我们设有两条线一条是人工审查覆盖率多少人看过这个 MR一条是自动化检查覆盖率CI 是否跑过关键检查。后者一般靠工具配置就能做到接近 100%前者才是关键变量。但我特别想强调一点覆盖率只是一个前置条件不等于质量。一个 100% 覆盖、人人 Approve 的 MR 完全可能带着致命缺陷上线。所以更有价值的指标是拦截率——也就是线上缺陷里有多少能在 review 阶段被抓住。这个数据的统计方式不复杂每次线上 issue 闭环后勾选一下这个问题如果做 review 是可以拦截的吗攒上几个月就能看出趋势。如果一个团队长期回答是的比例很低说明 review 的视角和维度有问题光提覆盖率没用。6.2 响应时间是体验的晴雨表Review Turnaround TimeReview Turnaround Time从 MR 提交到第一条有效评论的时间是我最关注的体验指标。它不是直接的质量指标但它直接决定了作者的 waiting frustration 和团队节奏。我以前在的团队这个时长中位数是 19 小时基本上一个 MR 从写完到合入要熬两三天后来拆小 MR 明确时限 自动催办中位数降到 2.5 小时。神奇的是这个改善本身还在反哺质量——作者等得没那么焦躁了就不会因为急着上而强行绕过 review。6.3 评论密度的正确解读不是越多越好评论密度每个 MR 的评论条数这个指标只有在配合 diff 大小一起看的时候才有意义。一个 50 行的 MR 有 6 条 Block 评论那大概率说明作者在设计阶段就走偏了一个 400 行的 MR 只有 2 条 nit那可能是审得比较认真而且代码确实干净也可能是 reviewer 在放水。单看评论数没法判断一定要结合 diff 行数、评论级别分布、修改后的 commit 轮数一起看。6.4 周期性复盘把 review 中的讨论变成团队知识最后推荐一个我坚持了很久的习惯每月做一次 review 复盘会。不是过代码而是把当月最有代表性的 3-5 条 review 讨论拿出来过一遍——包括好的能体现设计思考的和坏的引起过争议的。目的有三个让 good patterns 在团队里传播不靠口口相传靠具体案例。让争议过的问题有一个公开定论以后遇到类似的不用再吵一遍直接引述结论。让 Leader 了解团队的技术薄弱点在哪下个月的分享、培训、架构调整都有据可依。复盘会不需要长30 分钟足够关键是氛围要安全讨论的是代码不是人目标是共识不是追责。7. 最后再说几句关于 Code Review 文化的实在话我在很多团队里观察到真正让 Code Review 瘫痪的往往不是工具也不是规则而是团队里弥漫的一种微妙心态——review 是给我添麻烦的事。作者觉得提 MR 就像把作业交给老师检查天然抗拒reviewer 觉得看别人代码是额外负担能拖就拖leader 觉得流程已经建了大家都已经 Approve 了质量却还是没上去。这三方谁都不开心Code Review 自然就成了走过场。让这套东西真正转起来我个人觉得最有效的方法是从一件小事开始建立正反馈循环。找一个不算敏感的小模块认认真真拉一次 review 会议现场讨论问题当场修改让大家体验到原来 review 真的能帮我把代码变得更好。这个体验一旦建立起来后面推什么规则都顺了。反过来如果团队里弥漫着review 就是找茬的味道再完美的流程文档都是废纸。我在实际推动 open-code-review 这套理念的时候遇到阻力最大、收益也最大的一件事其实是把 review 的话语权交给每个普通工程师。Leader 不再扮演最终裁判架构师也不再用身份压人每个人都能对任何一段代码提出基于事实的技术意见。这个转变花了我大概三个月但之后团队里的讨论质量明显上了一个台阶几个平时不爱说话的后端开始主动评论了新人也能放心提出问题而不怕被嘲讽。最后分享一个让你少走弯路的小技巧如果你刚开始在团队里推 Code Review 文化可以先别急着定一堆指标。先花两周时间每天挑一个 MR你自己带头认真写三条有信息量的评论并在周会上把这三条评论背后的思考过程讲出来。相信我用不了太久就会有人跟着模仿——因为在一个技术团队里具体、真诚、有建设性的反馈本身就是最有感染力的东西。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

BMI088+TLS205B0EJ+ESP32+NSI8221C工业级姿态感知硬件链路设计 2026/9/25 6:30:34

BMI088+TLS205B0EJ+ESP32+NSI8221C工业级姿态感知硬件链路设计

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

阅读更多 →
SMIC 180nm工艺下二阶带隙基准源设计实战指南 2026/9/25 6:30:34

SMIC 180nm工艺下二阶带隙基准源设计实战指南

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

阅读更多 →
LVGL中文字体显示实战:从底层原理到生成优化全攻略 2026/9/25 6:30:09

LVGL中文字体显示实战:从底层原理到生成优化全攻略

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

阅读更多 →
macOS上PyG报错Symbol not found?C++符号缺失原因与修复 2026/9/25 6:30:09

macOS上PyG报错Symbol not found?C++符号缺失原因与修复

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

阅读更多 →
Django+MySQL协同过滤推荐系统(毕设可用) 2026/9/25 6:30:09

Django+MySQL协同过滤推荐系统(毕设可用)

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

阅读更多 →
Simulink入门指南:安装、建模与首次仿真全流程 2026/9/25 6:30:09

Simulink入门指南:安装、建模与首次仿真全流程

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉