RESTler接入Jenkins:API模糊测试流水线实践指南
如果你问一个后端测试工程师最近有没有把RESTler这种API模糊测试工具接到Jenkins流水线里大概率会得到两种回答听说过或者试过但没跑通。RESTler是微软开源的一个针对REST API的模糊测试工具它把OpenAPI规范当作输入通过状态机维护请求之间的依赖能够自动生成并发送大量异常参数组合然后告诉我们哪个接口出现了未预期的5xx、无响应或者崩溃。这个能力放在Jenkins流水线里价值最大——因为它能把线上意外提前暴露到代码合并之前。我最初接触RESTler是在一次线上API被扫出连续500之后。常规的回归测试、联调用例都是按正常业务路径写的谁会想到传一个包含特殊字符的用户名就会让服务端ORM查询出错。后来我花了两个晚上把RESTler接进流水线效果立竿见影。这篇文章把整个集成过程、Jenkinsfile写法、结果解析和后续调优的实踩记录整理出来适合已经有CI基础、准备给API做自动化健壮性检查的团队参考。1. 为什么是RESTlerAPI回归测试里最缺的那一环1.1 常规回归测试的盲区在哪里大部分团队的API测试本质上是把业务用例翻译成断言。测试代码里写了什么输入就传什么输入预期返回什么就校验什么。这样做事后复盘总是很漂亮但盲区也很明显只要调用方传了约定之外的数据比如超出长度限制的字符串、负数的库存数量、非法的枚举值、缺失必填字段的组合服务端的路由、参数校验、数据库约束到底能不能兜住常规测试根本覆盖不到。这类问题往往不会在功能验证阶段暴露等线上真实流量一过来就是500、超时甚至数据错乱。更麻烦的是很多服务端错误只是偶发某个参数在特定组合下触发了空指针常规测试跑十次都不会遇到但线上流量一多就出现了。模糊测试想解决的就是这个盲区——用大量变异后的输入去打目标观测服务会不会出现未预期的异常行为。API级别的模糊测试不是把字节喂给文件解析器而是在HTTP协议层构造合法框架下的非法参数和合法参数下的非法状态序列检查后端能不能妥善处理。这也是我在做流水线集成时最先想明白的一件事模糊测试不是替代功能测试而是补上功能测试够不到的那块拼图。1.2 为什么最后选了RESTler当初选型时我系统性对比过几类工具这里直接给结论。工具/方案测试对象核心特点适合CI的程度Postman Newman接口用例基于集合与断言本质是用例复用不会主动变异输入适合回归不适合模糊埋点JMeter接口性能关注吞吐和延迟不关注参数组合鲁棒性压测场景用不能替代模糊测试AFL / libFuzzer原生代码需要插桩、源码入口适合C/C/Go不适合纯HTTP黑盒几乎无法直接用于API层SchemathesisOpenAPI接口基于规范的property-based测试轻量覆盖面不错中等状态序列能力偏弱RESTlerREST API微软开源基于OpenAPI 状态机能自动维护请求间依赖输出最小复现序列高产物文件化便于门禁选RESTler的原因有三个。第一它完整覆盖了规范读取、语法生成、状态探索、结果归并的全流程不需要自己拼一堆脚本去模拟状态依赖。第二它天生就是黑盒工具只要一个OpenAPI规范文件和能访问到被测服务的网络就能跑起来这对CI环境来说部署成本低。第三它的执行产物是文件化的bug_buckets目录下每个异常都被归成独立的JSON流水线很容易拿来做质量门禁。1.3 RESTler不擅长什么先泼盆冷水任何工具都有边界RESTler也一样。它依赖OpenAPI规范规范质量差跑出来的结果就没什么参考价值它也不是Web安全扫描器虽然能发现参数校验缺陷和异常状态码但要深挖SQL注入、越权这类安全漏洞还是要配合OWASP ZAP或专门的DAST工具它虽然有压力测试模式但定位不是压测工具别指望它替代JMeter做容量评估。我在集成之前就是因为没想清楚这些边界差点走弯路。所以建议团队接RESTler之前先明确一个问题你们想让它发现什么是参数校验漏洞、异常状态处理缺陷还是业务逻辑漏洞明确目标之后再设计流水线后面每一步都会顺很多。2. RESTler的测试逻辑从OpenAPI规范到状态感知的模糊请求2.1 它到底是怎么测一个API的RESTler把OpenAPI规范当作数据源先经过一次编译生成三样核心产物grammar.pyPython语法文件描述所有请求模板以及参数被替换时的语义、grammar.json机器可读的语法描述和dict.json可自定义的字典文件用来告诉RESTler哪些动态值该复用、哪些该生成。运行时RESTler不只是对每个endpoint发随机请求。它内部维护了一个状态机——把API文档理解为资源状态转换过程。举个例子创建一个订单会返回order_id后续查询订单、更新订单、删除订单都依赖这个ID。RESTler会自动从响应中提取该值在后续请求中替换从而走通完整的资源生命周期而不是只测一条孤立的请求。这个状态感知能力是它与普通模糊测试工具最核心的区别也是它能测出创建后立即删除这类时序性bug的原因。理解这一点对设计流水线非常有帮助。RESTler跑出来的异常往往不是单个请求触发的而是某个请求序列在特定状态下被触发。所以测试结果里最重要的反而是复现这个bug需要按什么顺序请求哪些接口这比第几个接口返回500要值钱得多。2.2 四种执行模式怎么选RESTler提供了几个执行模式我在集成时把它们分别放到了不同的流水线场景里模式行为建议使用场景restler test加载语法并按文档定义执行一次验证编译产物是否可用每次编译后先做冒烟确认语法没问题restler fuzz-lean对每个endpoint执行一轮基础模糊测试速度快覆盖主要参数和组合合并请求MR/PR时的快速门禁restler fuzz完整模糊测试包含状态依赖深度探索、多种checker耗时较长夜间定时任务或发版前的全量扫描restler replay重放之前记录的请求序列验证已发现bug是否被修复这个设计非常契合Jenkins的节奏白天代码合并阶段跑fuzz-lean夜间跑完整fuzz。没必要每次合并都跑全量fuzz否则流水线会慢到没有人愿意看结果。我见过有团队把fuzz时间设置为6小时然后挂在MR流水线上导致整个发布流程被堵死这就是没理解模式差异的典型后果。2.3 跑完之后结果都在哪里RESTler执行后会在输出目录下生成若干子目录集成前一定要搞清楚这几个东西的作用bug_buckets/按异常响应码和checker分类的JSON文件。每个文件里包含触发该异常的一系列请求这是门禁要解析的核心logs/网络节点日志和终端日志编译失败、执行异常时主要靠它排查result_analysis.txt最终统计摘要包含执行请求数、覆盖率、bug bucket数量等信息适合快速查看。我在实际项目里踩过一个坑一开始跑完RESTler只抓stdout日志没保留bug_buckets目录结果事后想分析哪个接口崩了时发现材料全没了。后来我把整个输出目录归档为Jenkins artifact这个问题才彻底解决。建议所有人接RESTler的第一天就把产物归档做进流水线不然后面会非常被动。3. 接入Jenkins前先解决镜像、规范和Agent三件事3.1 RESTler镜像的正确打开方式RESTler官方镜像在mcr.microsoft.com/restler:latest平时最简单粗暴的跑法是docker run --rm \ -v ${WORKSPACE}:/workdir \ mcr.microsoft.com/restler:latest \ restler compile --api_spec /workdir/api-spec/openapi.yaml \ --output_dir /workdir/restler_results/compile注意三个细节。第一镜像默认入口不是常驻shell所以用docker run时要在镜像名后面显式传restler子命令否则会直接进入restler的帮助界面。第二工作目录必须映射到宿主机可访问的路径因为容器退出后所有未挂载的文件都会被清掉。第三如果Agent节点本身有多个项目在执行构建最好在输出路径里加上$BUILD_ID做隔离否则并行构建会互相覆盖结果。网络方面最省心的方案是--network host让RESTler容器和被测服务共享宿主机的网络栈这样就不用在自定义bridge网络里做容器间的服务发现。如果某些环境不允许host模式至少要确保RESTler容器和被测服务在同一个自定义网络中并且被测服务的hostname要用容器名而不是localhost。3.2 API规范文件的最低要求与常见问题RESTler的输入是OpenAPI 2.0/3.0的JSON或YAML但并不是随便一个swagger文档都能直接用。我整理了几个最低要求必须声明servers或hostRESTler需要知道把请求发到哪里如果有认证保护要么在token refresh命令里动态获取token要么在规范的security配置中提前处理好对会动态生成的资源ID比如创建订单返回order_id建议在请求体的字段命名和路径参数中保持一致方便通过dict.json的custom_payload做unifier。否则RESTler会把两次创建的资源ID当成不同值状态探索的效率会非常差如果一个规范里大量使用oneOf、allOf嵌套先跑一次compile验证因为RESTler对部分OpenAPI 3.0结构支持还不够完善编译期就会报错。规范文件的版本管理也是个容易被忽视的点。我建议把OpenAPI规范提交到Git仓库里与代码同版本管理流水线从workspace拿这份文件而不是从文档站点抓。否则RESTler测的可能是旧版接口结果参考价值会大打折扣。3.3 Agent节点容易踩的权限和存储问题如果把RESTler跑在自建的Jenkins Slave上有几个配置会直接影响能否跑通。最典型的就是Jenkins执行用户没有docker命令的权限报错往往是Permission denied while trying to connect to the docker api。解决办法是把用户加入docker组或者用buildkit等替代方案。工作区磁盘空间同样值得关注。RESTler编译和运行会产生大量日志一个完整fuzz跑下来占用几十GB磁盘并不夸张。节点上如果同时跑多个RESTler任务必须用隔离目录并且定期清理旧的构建产物。我见过因为磁盘写满导致Jenkins整个挂掉的案例这种问题虽然低级但杀伤力极大。4. 一条可跑通的Jenkinsfile从构建服务到跑完整轮模糊测试4.1 流水线整体分成几个环节在动笔写Jenkinsfile之前我先想清楚了一件事RESTler模糊测试不是一个孤立的工具调用而是需要和被测服务联动。所以整个流水线应该至少包含四个环节准备并启动被测API服务、健康检查确认服务可用、执行RESTler的compile和fuzz、解析结果并做质量门禁。这样划分的好处是每个环节的日志和失败原因都互相隔离。RESTler阶段的失败不会误报成编译失败服务启动失败也不会让模糊测试白跑。整个流水线的可维护性会好很多。4.2 一段可以落地的Jenkinsfile参考下面这段是我在项目里实际用过的简化版本直接用声明式Pipeline组织适合Spring Boot类的服务但换成Go、Node服务也只需要替换启动部分。pipeline { agent any environment { WORKSPACE_DIR ${WORKSPACE} API_SPEC api-spec/openapi.yaml RESTLER_OUT ${WORKSPACE}/restler_out/${BUILD_NUMBER} TARGET_URL http://127.0.0.1:8080 } stages { stage(启动被测API服务) { steps { sh cd ${WORKSPACE_DIR} docker build -t demo-api:${BUILD_NUMBER} . docker run -d --name demo-api-${BUILD_NUMBER} \ --network host --rm demo-api:${BUILD_NUMBER} } } stage(健康检查) { steps { sh endpointhttp://127.0.0.1:8080/actuator/health for i in $(seq 1 24); do code$(curl -s -o /dev/null -w %{http_code} $endpoint || true) if [ $code 200 ]; then echo API 已就绪 exit 0 fi sleep 5 done echo API 启动超时 exit 1 } } stage(RESTler Compile) { steps { sh mkdir -p ${RESTLER_OUT} docker run --rm \ -v ${WORKSPACE_DIR}:/workdir \ --network host \ mcr.microsoft.com/restler:latest \ restler compile \ --api_spec /workdir/${API_SPEC} \ --output_dir /workdir/restler_out/${BUILD_NUMBER}/compile } } stage(RESTler Fuzz-Lean) { steps { sh docker run --rm \ -v ${WORKSPACE_DIR}:/workdir \ --network host \ mcr.microsoft.com/restler:latest \ restler fuzz-lean \ --grammar_file /workdir/restler_out/${BUILD_NUMBER}/compile/grammar.py \ --token_refresh_command curl -s -X POST http://127.0.0.1:8090/auth -d {} | jq -r .token \ --token_refresh_interval 300 \ --time_budget 600 \ --output_dir /workdir/restler_out/${BUILD_NUMBER}/test } } stage(解析结果并判断质量) { steps { sh python3 scripts/restler_parse.py \ --bug-bucket-dir ${WORKSPACE_DIR}/restler_out/${BUILD_NUMBER}/test/bug_buckets \ --max-new-bugs 0 } } } post { always { archiveArtifacts artifacts: restler_out/${BUILD_NUMBER}/**, allowEmptyArchive: true sh docker rm -f demo-api-${BUILD_NUMBER} || true } failure { emailext subject: RESTler模糊测试发现新问题 #${BUILD_NUMBER}, body: 构建日志${BUILD_URL}, to: teamexample.com } } }4.3 几个值得解释的设计细节为什么用host网络因为在很多公司的Jenkins节点上自定义docker网络并不总是可用host模式虽然不优雅但能让RESTler容器直接访问到localhost上的被测服务减少一类常见的网络排查问题。如果你的Agent跑在Kubernetes里那需要换成服务发现的方式但思路是一样的确保RESTler能稳定访问到被测API。为什么先用fuzz-lean而不是直接全量fuzz因为流水线里跑全量fuzz时间不可控而fuzz-lean已经能覆盖大部分参数组合错误。我一般是白天MR阶段跑fuzz-lean夜间定时任务跑完整fuzz这样两类任务互不干扰。还有一个细节值得注意--grammar_file指向的是compile阶段生成的grammar.py不是原始OpenAPI文件。很多第一次用RESTler的人在这里会搞混以为是直接对规范文件进行fuzz导致命令报错。5. 把RESTler的JSON结果变成流水线的质量门禁5.1 解析bug_buckets让结果可判断RESTler会把每类问题在bug_buckets目录下生成一个JSON文件文件名类似500_1.json、InvalidDynamicObject_1.json。文件内部最重要的字段是reproducible是否可复现和request_sequence触发问题的请求序列。有了这两项我们就能把一个疑似异常变成一个可追踪、可回归的缺陷。下面是一个我常用的Python解析脚本骨架可以直接放进仓库import json, os, sys, glob def parse_bug_buckets(bug_bucket_dir: str) - dict: result {} pattern os.path.join(bug_bucket_dir, *.json) for path in glob.glob(pattern): try: with open(path, r, encodingutf-8) as f: bucket json.load(f) except json.JSONDecodeError: continue name os.path.basename(path).replace(.json, ) result[name] { reproducible: bucket.get(reproducible, False), request_sequence: bucket.get(request_sequence, []), checker: bucket.get(checker_name, ), } return result if __name__ __main__: bucket_dir sys.argv[1] max_new_bugs int(sys.argv[2]) if len(sys.argv) 2 else 0 bugs parse_bug_buckets(bucket_dir) for name, info in bugs.items(): print(f[{name}] reproducible{info[reproducible]} requests{len(info[request_sequence])}) if len(bugs) max_new_bugs: print(f发现 {len(bugs)} 类异常请求超过门禁阈值 {max_new_bugs}) sys.exit(1) print(未发现新异常门禁通过)我在流水线的解析结果阶段就是调用这个脚本返回值非0则构建失败。这样RESTler发现的异常就能自动阻塞本次发布流程。5.2 门禁阈值怎么设置宁可先宽后严最开始设计门禁时我希望任何5xx都直接fail结果发现太激进——因为RESTler在探索状态时可能会触发一些测试环境特有的错误比如外部依赖超时、数据库锁冲突这些并不是代码缺陷。如果每次都fail开发同学会对结果脱敏最后没人看流水线了。我建议分三个阶段渐进收紧阶段一只要没有新增可复现的bug bucket就通过已有bucket只记录不阻塞阶段二将上一轮构建的bucket名称集合存为基线新增bucket超过N个时失败阶段三针对高价值checker比如InvalidDynamicObject、ResourceHierarchy单独设置硬性门禁命中即失败。这套思路的关键是基线对比。RESTler每次执行的路径不完全一样环境依赖也会引入噪声直接用绝对数量做门禁很容易误伤。5.3 通知环节别把整页日志贴在群里有团队喜欢在失败时把构建日志全文推到钉钉或企业微信这实际上没什么用。RESTler最有价值的信息是bug_buckets里的request_sequence它记录了用哪几个请求、按什么顺序打就能复现问题。把这个序列放到通知里开发同学拿到就能直接本地复现。我通常的做法是在解析脚本里把每个新bucket的请求序列提取出来写入一个Markdown文件Jenkins的failure通知只发这个文件的链接。这样既保护了日志的易读性又给了开发最直接的排查入口。6. 跑稳RESTler流水线的常见坑和调优建议6.1 时间控制完整fuzz可能会停不下来RESTler在探索一个有着大量动态ID和删除操作的API时会拼出非常长的请求序列。如果不加限制跑一天也是有可能的。我强烈建议在fuzz命令里显式设置--time_budget单位是秒。比如夜间任务给--time_budget 7200两小时结束足够覆盖大部分状态空间。fuzz-lean则建议控制在10到15分钟以内。6.2 数据污染为什么跑到一半全是500RESTler的模糊测试会真实地创建、修改、删除数据。如果被测服务连接的是共享数据库跑完一轮之后库里就会残留大量脏数据。脏数据越多后续请求互相干扰越严重最终结果是测试结果失真——大量500其实是数据污染造成的。解决办法很简单为RESTler准备一套独立的测试环境每次运行前重建数据库或者用docker-compose一键拉起一套带独立数据库的服务。别天真地认为反正测试环境不用清理这个坑我踩过代价是花了整整一天排查那些根本不是代码问题的500。6.3 spec兼容性编译失败和运行失败是两回事OpenAPI 3.0的一些高级特性比如复杂的oneOf、anyOfRESTler支持得并不完美。表现有两类一是编译阶段直接报错这种最好处理改spec结构或者降级到2.0格式二是编译通过但运行时的请求序列不符合预期这种最隐蔽。我在一个项目上遇到过请求体里嵌套了深层数组RESTler生成的payload总是缺少必填字段导致被测服务稳定返回400后来检查了dict.json的unifier配置才解决。所以接入RESTler后第一步不是直接跑全量fuzz而是先跑一次restler test确认编译出来的语法能对每个endpoint发出正常请求。确认这个基础之后再逐步加深。6.4 建议的执行节奏merge时lean、夜间全量、spec变更即触发最后分享一下我目前在生产环境用的执行节奏可以直接抄作业每次MR/PR时只跑fuzz-lean门禁设为新增可复现bucket则失败整体控制在10分钟以内每晚定时跑一次完整fuzz配合重新初始化的数据库产出详细报告和基线数据当OpenAPI规范文件发生变更时立即触发一次完整fuzz因为规范变更往往意味着接口行为变了这是最容易引入鲁棒性缺陷的时机。这套组合让我在不大幅拖慢发布流程的前提下保住了一定程度的API鲁棒性检查覆盖。RESTler跑出来的异常绝大多数是开发真正能复现并修复的缺陷而不是误报。这也是我敢把它放进流水线的原因——模糊测试的意义不在于每次构建都抓出一堆问题而在于它能把那些藏在边角的、常规测试永远碰不到的状态缺陷系统性地挖出来。

相关新闻

板蓝根颗粒检测数据集:VOC转YOLO格式与YOLOv8训练避坑指南

板蓝根颗粒检测数据集:VOC转YOLO格式与YOLOv8训练避坑指南

简介:面向药品包装视觉质检与目标检测教学场景,这份数据集收录了111张板蓝根颗粒袋装实拍图,并同时提供Pascal VOC与YOLO双格式标注,可直接用于YOLO系列、Faster R-CNN等主流检测模型的训练与效果验证。图像内容覆盖999感冒灵与板…

2026/10/4 3:24:36 阅读更多 →
插件加载失败排查:failed to load plugins web boot与did not activate深度解析

插件加载失败排查:failed to load plugins web boot与did not activate深度解析

搞开发这些年,我发现自己天天都在跟 plugins 打交道:早上打开 IAR 写单片机,IDE 右下角弹了个提示说某个调试组件版本过期;中午想用 MusicFree 听歌,刚装的第三方插件源又拉不到数据;下午部署流水线&#x…

2026/10/4 3:24:36 阅读更多 →
随机森林实战指南:sklearn实现、参数调优与过拟合避坑

随机森林实战指南:sklearn实现、参数调优与过拟合避坑

简介:这是一份面向Python初学者的随机森林二分类实战示例,适合正在学习scikit-learn机器学习库、希望理解RandomForestClassifier调用流程的读者,也可用于课程实验或快速原型验证。资源共2个文件,包含1个Python脚本和1个data.csv数…

2026/10/4 3:24:36 阅读更多 →

最新新闻

计及电转气协同的虚拟电厂优化调度:碳捕集与垃圾焚烧的Matlab实现

计及电转气协同的虚拟电厂优化调度:碳捕集与垃圾焚烧的Matlab实现

1. 为什么要把电转气、碳捕集和垃圾焚烧装进同一个虚拟电厂先说个我自己的切身体会。去年我拿到一个园区级综合能源项目,里面刚好有垃圾焚烧电厂、风电机组、电转气装置,还有一套碳捕集系统。按常规思路,这几个东西是各干各的:垃圾…

2026/10/4 3:54:59 阅读更多 →
工厂网络常见故障处理:从PPT教案到实战排查路径

工厂网络常见故障处理:从PPT教案到实战排查路径

简介:这份PPT学习教案面向工厂网络运维人员、自动化工程师及网络初学者,聚焦工业现场网络故障的快速定位与处理。内容围绕工厂网络环境、常用网络命令、常见故障处理方法与总结四大模块展开,先讲解由接入设备、路由设备、交换设备构成的典型拓…

2026/10/4 3:54:59 阅读更多 →
从Greenlight学Go静态扫描器设计:正则规则引擎、反模式匹配与项目级去重实现思路

从Greenlight学Go静态扫描器设计:正则规则引擎、反模式匹配与项目级去重实现思路

从Greenlight学Go静态扫描器设计:正则规则引擎、反模式匹配与项目级去重实现思路 【免费下载链接】greenlight Pre-submission compliance scanner for the Apple App Store and Google Play. Scans code, privacy manifests, Android manifests, and IPA/APK/AAB b…

2026/10/4 3:54:59 阅读更多 →
蓝桥杯省赛DFS与回溯核心模板:剪枝技巧与实战题型全拆解

蓝桥杯省赛DFS与回溯核心模板:剪枝技巧与实战题型全拆解

准备蓝桥杯省赛,如果把所有算法按出现频率排个序,DFS与回溯绝对能进前三。不少同学一听到这两个词就觉得玄乎,觉得又是递归又是状态还原的,绕来绕去把自己绕晕。其实拆开了看,就是个“往下走到底,不行就回头…

2026/10/4 3:54:59 阅读更多 →
【转】理解文中重要句子的含义

【转】理解文中重要句子的含义

来源:《图解基础知识手册高中语文》 刘来刚主编 吉林大学出版社 P469 第一部分 论述类文本阅读版权归原作者所有,如有侵权请联系删除,谢谢!学习知识必须扎实掌握语文这一重要基础工具原文:所谓“文中重要句子”&#x…

2026/10/4 3:54:59 阅读更多 →
GMM聚类中BIC选K的实战指南与避坑手册

GMM聚类中BIC选K的实战指南与避坑手册

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

2026/10/4 3:53:59 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/2 10:36:31 阅读更多 →
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/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练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/3 9:42:36 阅读更多 →