JMeter安装使用与Java接口压测实战:从入门到指标解读

Java接口测试这件事,听着有点门槛,但只要你绕过安装和环境配置那道坎,后面其实很顺。我自己第一次接触接口压测,就是拿Jmeter对着一个Java写的注册接口反复点,一边点一边改参数,最后也没真正搞懂压测指标怎么解读。后来在几个项目里反复用,才把这套工具的脾性摸清楚。这篇围绕“Jmeter安装使用-测试Java接口”这条主线,把从安装、建脚本、发起请求、看结果到问题排查的完整过程写一遍,适合刚入门的开发和测试,以及需要自己维护接口质量的开发者。我会把关键配置的参数含义和选择逻辑讲透,你看完直接照着搭就行。

1. Jmeter安装前,先把Java环境和安装包定清楚

Jmeter本身是纯Java应用,它发的所有请求、脚本逻辑、监听器,最终都跑在JVM上。所以安装这件事,第一步不是急着下载Jmeter,而是先把Java运行环境准备好。很多人一上来就解压、启动,结果报各种Class版本、启动闪退的错误,大部分都是JDK版本不匹配造成的。

1.1 JDK版本怎么选才不出幺蛾子

Jmeter从5.x开始,对Java版本的要求一般是Java 8以上。官方新版本在Java 11、Java 17上跑得很稳,Java 8能用但不建议死守。我个人的习惯是装Java 11或17,既满足当前Jmeter需求,后续切到其他Java系工具也不用反复换环境。

安装完之后,先确认三件事:

java -version javac -version echo $JAVA_HOME

尤其是第三行,很多机器装了多个Java版本,但JAVA_HOME根本没指向你想用的那个,结果Jmeter启动时加载了PATH里排在前面、但版本不对的JVM,表现就是各种莫名其妙。解决办法是把目标JDK的bin目录放到PATH的最前面,或者在启动脚本里强制指定。

1.2 安装包、目录结构,以及为什么别放中文路径

从Apache JMeter官网的Binaries区下载,Windows用户选zip,Linux和macOS用户选tgz。这里有个非常朴素的建议:解压到纯英文路径,不要放在带中文或空格的目录里,比如D:\软件\压力测试\apache-jmeter这种。虽然新版对路径容错强了一些,但后面只要你用CSV参数文件、输出结果文件、命令行报告,中文路径就会时灵时不灵,排查起来特别耗时间。我一般放在D:\tools\apache-jmeter-5.6.3或/opt/tools/apache-jmeter-5.6.3这种结构下。

解压后建议先把目录结构认一遍:

  • bin:启动脚本和核心配置文件所在,jmeter.bat、jmeter.sh、jmeter.properties都在这里。
  • lib:Jmeter核心依赖包,扩展插件和自定义jar一般放lib/ext。
  • docs和printable_docs:离线文档,遇到问题先翻,比网上搜到的零散信息靠谱。

lib/ext是最常用的目录,如果你后面要做“直接压测Java类”或者接入第三方插件,基本都是把jar放进这里,重启Jmeter生效。

1.3 环境变量和一分钟启动验证

Windows下设置系统变量,新建JMETER_HOME,值指向解压目录,再把%JMETER_HOME%\bin加到Path。Linux下编辑~/.bashrc,写入:

export JMETER_HOME=/opt/tools/apache-jmeter-5.6.3 export PATH=$JMETER_HOME/bin:$PATH

然后执行source ~/.bashrc。

验证安装是否成功,命令行输入:

jmeter -v

能看到版本号和Java版本信息,说明环境已经通了。接下来进GUI,Windows双击jmeter.bat,Linux执行jmeter.sh,界面启动就说明安装完成。

不过有一点我强烈建议:GUI只用来调试脚本,不要拿它跑长时间压测。GUI本身要渲染各种界面,再配上监听器,每来一个请求都要画图、刷新,对压测结果的准确性影响很大。真要压测,用命令行模式:

jmeter -n -t 测试计划.jmx -l result.jtl -e -o report

这条命令会跑完整个测试计划,并在report目录生成HTML报告,后面可以拿去做评审和复盘。

2. 动手建脚本前,先想清楚这四件事

很多人打开Jmeter就急着添加线程组、填接口地址、点运行,结果一跑完,除了一个平均响应时间,什么结论都得不到。建脚本之前,先花十分钟想清楚这四件事,压测才真正有意义。

2.1 被测接口的形态和测试目标

Java接口最常见的形态是HTTP接口,比如服务注册接口、登录接口、订单查询接口,这些是压测主力。除了HTTP,还有RPC接口、内部Service方法,甚至某个工具类的静态方法。测试目标也分两种:功能验证和性能摸底。

在开始之前,把接口文档里几个关键信息摘出来:

  • 请求方式(GET、POST、PUT、DELETE)
  • 完整路径和端口
  • 必填请求头(Content-Type、Authorization等)
  • 请求Body模板
  • 返回结构里用于判断成功或失败的关键字段

如果连接口文档都没有,就找开发要一份样例请求和样例响应,拿样例去构造Jmeter请求,能少走很多弯路。

2.2 线程数、Ramp-Up、循环次数:三个参数决定压测曲线

线程组里最核心的三个参数是线程数、Ramp-Up时间、循环次数。

线程数代表并发用户数,但是线程数不等于TPS。很多人以为100个线程就是每秒100个请求,错了。如果接口处理得很快,每个线程在1秒内可以发好几个请求;如果接口很慢,100个线程一秒钟连100个请求都发不出去。真正的吞吐量要跑完看聚合报告。

Ramp-Up代表启动全部线程所需的时间,单位是秒。比如100个线程,Ramp-Up设10秒,意味着每秒启动10个线程,相当于每100毫秒有一个新用户开始发请求。如果设成0,就是所有线程瞬间启动,一般用于做突然冲击的场景。

循环次数代表每个线程发多少个请求。100个线程、循环5次,总请求数就是500,这是计算压测规模的基础。

2.3 恒定负载、阶梯加压、峰值冲击怎么选

根据压测目的,场景设计一般分三种。

恒定负载最简单,线程数固定,模拟系统在某个固定并发下能不能稳定运行,适合验证目标容量。阶梯加压是依次设置50、100、200个线程,每跑一段时间看响应时间、吞吐量、错误率的变化,目的是找系统的拐点。峰值冲击是Ramp-Up设为0,瞬间把所有压力打上去,看系统能不能扛住突增流量。

我自己的做法是:先定一个预期目标,比如“预期线上峰值并发100,99%的请求响应时间小于800ms,错误率低于0.1%”,然后跑阶梯加压,看系统在哪个并发点开始恶化。如果连目标都没有,压测报告基本没法看。

2.4 断言和监听器:没有断言的压测只是数字

有些压测跑完,聚合报告一片绿,结果后来一查,所有请求都返回了错误码、只是HTTP状态码是200。这就是没做断言的恶果。

断言的作用是让Jmeter判断请求结果是否符合预期,不符合就算失败,错误率才能反映真实情况。监听器不要全加,我常用的是“查看结果树”做调试,用“聚合报告”做总览。如果要做长时间压测,监听器越少越好,避免内存被撑爆。

3. 完整实操:用Jmeter测一个Java HTTP接口

这节就用一个典型的Java HTTP接口来走完整流程,假设被测接口是某模拟项目里的注册服务,POST请求,路径/api/register,Body是JSON,返回结构里有业务码和消息。

3.1 建测试计划和线程组

打开GUI后,默认会有一个测试计划。右键点击测试计划,选择“添加 -> 线程(用户)-> 线程组”,然后把线程组改个名字,比如“注册接口-100并发”。

线程数填100,Ramp-Up填10,循环次数填5。这样计划里的总请求数是100乘5等于500。如果想限制压测时长,可以勾选调度器,配置持续时间,比如跑5分钟。注意,一旦勾选了持续时间,循环次数会被持续时间覆盖,到点就会停止。

3.2 HTTP请求Sampler的具体配置

右键线程组,选择“添加 -> 取样器 -> HTTP请求”。在HTTP请求面板里,逐项填写:

  • 协议:http,如果是https就写https
  • 服务器名称或IP:被测服务地址
  • 端口号:80或8080这类
  • 方法:POST
  • 路径:/api/register
  • Body Data:填写JSON模板

JSON模板可以先在IDE里格式化好,再粘贴进Jmeter,避免手工拼接出错。比如:

{ "username": "test_user_001", "password": "123456", "email": "test@example.com" }

还需要加HTTP信息头管理器,右键线程组,选择“添加 -> 配置元件 -> HTTP信息头管理器”,加一行:

Content-Type: application/json

如果接口带鉴权,再加:

Authorization: Bearer <token>

如果token需要在压测前动态获取,可以把获取token的请求放在线程组前面,用正则表达式提取出来存成变量,再在头部管理器里引用,这样每个用户都能用上自己的token。

3.3 用CSV参数化让每个线程像不同用户

真实场景下,100个并发用户不可能都注册同一个用户名,否则要么接口报重复,要么数据毫无参考价值。这时就要用CSV Data Set Config。

右键线程组,选择“添加 -> 配置元件 -> CSV数据设置”,然后创建一个user_data.csv:

test_user_001,test@example.com test_user_002,test@example.com

配置项里,变量名称填username,email,分隔符填英文逗号,文件编码填UTF-8,遇到文件结束符选Stop Thread,线程共享模式选当前线程组。

然后把HTTP请求的Body Data改成:

{ "username": "${username}", "password": "123456", "email": "${email}" }

每个线程读取CSV里的一行,模拟不同用户发请求。共享模式的选择很关键,默认是“所有线程”共享一个游标,如果你希望每个线程读不同行,就要调整成“当前线程”,否则多个线程可能拿到同一行数据。

3.4 加上业务断言,别只盯着状态码

先加响应断言。右键线程组,选择“添加 -> 断言 -> 响应断言”,测试字段选“响应文本”,模式匹配规则选“包含”,填业务成功时的关键词,比如"code": 200或者success。

如果接口返回JSON,更推荐用JSON断言。添加JSON断言后,在“JSON路径”里填$.code,预期值填200,在“JSON路径”里再填$.message,预期值填success。一个JSON断言可以配多组路径和预期值,非常方便。

这里有个经验:如果响应里有动态生成的ID或时间戳,不要用“等于”去断言整个字段集合,否则每次压测数据一变化,断言就红了。只断言业务关键字段,或者用正则表达式提取非固定内容再做判断。

3.5 跑一次、看结果、导出报告

点击绿色启动按钮跑一次,先看“查看结果树”,确认请求有没有成功,响应体是否符合预期。确认无误后,清空结果,再正式开跑。

跑完后看“聚合报告”,重点关注Error %、Throughput、90% Line和99% Line。如果错误率不是0,先排查是不是断言配置问题;如果是真实的业务错误,那就回到接口本身去查。

命令行压测是更规范的姿势:

jmeter -n -t 注册接口.jmx -l result.jtl -e -o report

输出目录要求不存在或者为空,否则Jmeter会报错。运行结束后,report目录里会生成一个HTML报告,可以直接用浏览器打开,里面的图表比GUI里的数字直观多了。

4. 换个思路:不测HTTP,直接压测Java类方法

Java接口不一定都是HTTP接口,也可能是纯Java方法。有时候接口文档还没定,但Service层已经写完了;有时候你想测某个工具类在高并发下的表现,但不想为它单独包一个HTTP接口。这两种情况,Jmeter都能直接搞定。

4.1 什么场景需要直接调Java方法

最常见的场景是内部Service方法压测。比如一个用户ID生成器、一个缓存读取类、一个消息序列化工具,它们对外不暴露HTTP接口,但又是核心链路的一部分。如果想验证它们在高并发下的性能,用Jmeter直接调Java方法,比临时包装HTTP接口要快得多。

还有一类场景是第三方SDK的方法压测。拿到的SDK是编译好的jar,把它丢进Jmeter的classpath,直接用JSR223脚本调用,省去写测试入口的时间。

4.2 JSR223 Sampler + Groovy快速调用

右键线程组,选择“添加 -> 取样器 -> JSR223 Sample”,语言选Groovy。JSR223脚本的优势是每次迭代都会执行,可以直接编写调用逻辑。假设被测类在com.demo包下,有一个UserIdGenerator.generate(String prefix)方法:

import com.demo.UserIdGenerator def generator = new UserIdGenerator() def userId = generator.generate("U" + ${__counter(,)}) SampleResult.setResponseData(userId, "UTF-8") SampleResult.setSuccessful(true)

${__counter(,)}是Jmeter内置函数,从1开始递增,用来拼不同参数。SampleResult是JSR223 Sampler里预置的变量,调用setResponseData后,查看结果树就能看到具体返回值。

这种方式的优点是不需要编译,脚本即改即用,非常适合快速验证某个方法。如果想模拟多线程并发,直接在线程组里设线程数,JSR223脚本会被各线程独立执行。

4.3 自定义Java Sampler的扩展方案

当业务逻辑比较复杂,JSR223脚本里写太多代码会变得难维护,这时可以写自定义Java Sampler。做法是写一个类,继承AbstractJavaSamplerClient,重写关键方法,打成jar放到lib/ext目录。

import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; import org.apache.jmeter.samplers.SampleResult; public class UserMethodSampler extends AbstractJavaSamplerClient { @Override public SampleResult runTest(JavaSamplerContext context) { SampleResult result = new SampleResult(); result.sampleStart(); try { String userId = new UserIdGenerator().generate("U"); result.setResponseData(userId, "UTF-8"); result.setSuccessful(true); } catch (Exception e) { result.setSuccessful(false); result.setResponseData(e.toString(), "UTF-8"); } finally { result.sampleEnd(); } return result; } }

runTest是每次迭代都会执行的方法,sampleStart和sampleEnd之间的耗时就是Jmeter记录的响应时间。把类打包成jar放进lib/ext,重启Jmeter,在添加取样器时就能看到自定义的Sampler。

有一个容易踩的坑:如果Sampler类里保存了可变状态,比如一个HashMap、一个计数器,并发下多个线程会因为状态共享出问题。因为Jmeter会为每个线程创建Sampler实例,同一个线程内的迭代会复用实例,但不同线程之间不共享实例。安全做法是把可变状态放到Jmeter变量里,或者自己做好线程同步。

5. 压测数据怎么读,才算真正看懂接口状况

压测跑完,面对一堆数字,很多人最先看的是平均响应时间。其实平均响应时间是最容易忽悠人的指标,一个超时请求就能把平均值拉高几百毫秒。真正要看的,是百分位、错误率和吞吐量这三个维度。

5.1 聚合报告里每个字段都代表什么

聚合报告里的关键字段可以用下面这张表理解:

字段含义关注要点
Samples请求总数确认压测规模是否符合预期
Average平均响应时间容易被极端值拉偏,不能作为唯一依据
Median中位数响应时间反映一半请求的耗时水平
90% Line / 95% Line / 99% Line百分位响应时间核心指标,反映绝大多数请求的耗时
Min / Max最短、最长响应时间观察是否有异常超时
Error %错误率压测结果的红灯,超过0.1%就要查原因
Throughput吞吐量默认是每秒完成的请求数

百分位的意思很直观:100个请求按响应时间从小到大排队,第90个请求的耗时就是90% Line。也就是说,90%的请求比这个值快,剩下10%比它慢。99% Line比平均响应时间更有价值,因为它剔除掉了少数极快请求的影响,更能反映绝大多数用户感受到的延迟。

5.2 响应时间、吞吐量、错误率的组合分析

三个数据要放一起看,单看任何一个都容易误判。

如果Throughput很低但响应时间很高,说明服务端处理不过来,请求都在队列里排队,这时候加线程数只会让情况更糟糕,要查的是服务端的线程池、数据库连接池是否被打满。

如果错误率突然升高,可能性很多:数据库连接池被耗尽、内存溢出、服务端线程池拒绝新请求。有一种很常见的假象是HTTP状态码一直200,但业务响应码显示系统繁忙,这就是前面说断言的价值。

如果响应时间随着线程数增加呈线性上升,说明系统已经进入排队状态;如果TPS出现明显波动,大概率是Full GC频繁,压测期间可以同步看GC日志确认。

5.3 压测期间一定要同时看的系统指标

压测不能只看Jmeter一边的数据,服务端的系统指标必须同步观察。我自己压测时习惯在服务端开着三个命令:

top jstat -gcutil <pid> 1000

top看CPU、负载、内存,jstat看GC频率和耗时。如果Jmeter显示吞吐上不去,但服务端CPU只有20%,那瓶颈大概率不在服务端,可能在Jmeter自己身上,也就是客户端跑满CPU了,产生的压力不够。这种情况在笔记本上尤其常见,解决办法是降低线程数,或者换一台性能更强的机器运行Jmeter。

6. 常见问题与排查技巧实录

Jmeter用久了,会遇到一些重复率很高的坑。我按启动类、脚本类、数据异常三类,把典型问题和排查思路整理一下。

6.1 启动类问题:版本、端口、内存

启动时如果报UnsupportedClassVersionError,基本是JDK版本过旧,把JDK升级到符合Jmeter要求的版本,重新设置JAVA_HOME。

如果GUI启动后很快消失,先看命令行有没有报错,很多是端口被占用。Jmeter有自己的RMI端口做本机通信,端口被占时启动就会失败。可以打开jmeter.properties,把端口改成一个不常用的值,再试一次。

长时间压测时内存溢出也很常见。默认JVM堆内存不够大,可以修改bin目录下的jmeter脚本,在启动参数里加大-Xmx,比如设置4G或8G。但要注意,加大内存不代表能无限压测,如果监听器记录了大量请求详情,内存一样会被填满,所以长时间压测尽量去掉结果树,只保留聚合报告或后端监听器。

6.2 脚本类问题:乱码、参数读取、断言失败

接口返回中文乱码,先确认服务端返回的字符集是什么,然后在HTTP请求里配置Content Encoding,或者修改jmeter.properties里的sampleresult.default.encoding=UTF-8,再重启Jmeter。新版默认UTF-8,如果还乱码,重点检查请求头里是否声明了错误的Charset。

CSV参数读取不到,第一看文件路径,路径里的中文和空格是最常见杀手,改成纯英文绝对路径;第二看变量名称是否和请求里的${变量名}保持一致,拼写错一个字符都会导致参数为空;第三看分隔符,如果CSV里内容本身含逗号,要用引号包起来或者换分隔符。

断言失败但接口用curl测是通的,大概率是Jmeter这边的问题:请求头缺了Content-Type、少了Cookie、token过期、或者请求Body里变量没替换成功变成了空。先开查看结果树,看实际发送的请求内容,再和服务端日志对比,很快就能定位。

6.3 压测数据异常:吞吐上不去、连接被重置

压测时吞吐量提不上去,先看Jmeter所在机器的CPU。如果CPU已经打满,说明压测客户端成了瓶颈,需要减小线程数或者分布式压测。如果CPU很低,再看服务端负载,有可能服务端连接池不够,或者请求本身耗时长。

错误信息里出现Connection reset,说明服务端主动关闭了连接。常见原因是并发超过服务端处理能力,或者请求Keep-Alive配置不当,也可能是超时时间设的太短。排查顺序是先降并发看错误是否消失,再逐步递增,找到服务端能承受的临界值。

压测结束后,把聚合报告、结果树、服务端日志、系统监控记录归档。数据不归档,下次复盘时只能凭记忆说“当时好像跑到多少”,这样的压测报告是没什么说服力的。

我个人体会是,新手最忌讳一上来就上高并发,先跑通功能,再从小并发开始,10、20、50、100,一顿一顿加,观察每档的响应时间和错误率,系统拐点自然就出来了。Jmeter的GUI用来调试很好,但真正压测一定要切命令行,否则数据不准还可能自己先崩掉。脚本也要纳入版本管理,场景参数写在测试计划注释里,不然过两周回头再看,可能连自己测过什么都不记得。

相关新闻

虚拟试衣技术全解析:从换装Demo到可落地系统的分水岭

虚拟试衣技术全解析:从换装Demo到可落地系统的分水岭

简介&#xff1a;这份PDF资料面向虚拟现实、服装仿真与3D建模方向的研究者、工程师及服装行业数字化转型从业者&#xff0c;系统讲解3D虚拟试衣系统的构建方法。内容基于MIRALab多年研究成果&#xff0c;覆盖人体建模、服装物理仿真、触觉交互与在线定制等核心技术&#xff0c;…

2026/10/20 8:24:47 阅读更多 →
CHS-DRG分组器开发实战:Python病案首页数据提取与ICD线性化处理

CHS-DRG分组器开发实战:Python病案首页数据提取与ICD线性化处理

简介&#xff1a;这份资源是一套基于Python实现的CHS-DRG分组器&#xff0c;面向医疗机构信息科人员、医保数据分析师及医疗信息化方向的学习者&#xff0c;用于解决主要诊断类别&#xff08;MDC&#xff09;对应关系、基础诊断相关组&#xff08;ADRG&#xff09;判定规则以及…

2026/10/20 8:24:47 阅读更多 →
开放智能体安全平台:从提示词约束到策略引擎的智能体行为管控

开放智能体安全平台:从提示词约束到策略引擎的智能体行为管控

1. 从“上锁”说起&#xff1a;这个平台到底在解决什么问题第一次看到“开放智能体安全平台”这个说法&#xff0c;我脑子里蹦出来的画面是给一台高速运转的工业机器人加装围栏和急停按钮。智能体这东西&#xff0c;本质上就是让大模型从“只会聊天”进化到“能动手做事”——它…

2026/10/20 8:24:47 阅读更多 →

最新新闻

ZooKeeper Java API 实战:节点CRUD、监听与权限控制

ZooKeeper Java API 实战:节点CRUD、监听与权限控制

之前维护某个调度系统时&#xff0c;ZooKeeper 几乎撑起了所有核心链路——分布式锁、任务节点注册、配置下发&#xff0c;哪一环离了它都容易出事。当时最头疼的反而不是 ZK 集群本身&#xff0c;而是原生 Java API 那套写起来别扭的姿势&#xff1a;Session 状态要自己盯、Wa…

2026/10/20 10:45:37 阅读更多 →
EspoCRM 部署指南:30分钟从零上线你的开源CRM系统

EspoCRM 部署指南:30分钟从零上线你的开源CRM系统

EspoCRM 部署指南&#xff1a;30分钟从零上线你的开源CRM系统 【免费下载链接】espocrm EspoCRM – Open Source CRM Application 项目地址: https://gitcode.com/GitHub_Trending/es/espocrm EspoCRM 部署指南&#xff1a;面向中小团队与开发者的开源客户关系管理系统&…

2026/10/20 10:45:37 阅读更多 →
HTTPS抓包与逆向分析:从中间人代理到App签名算法还原

HTTPS抓包与逆向分析:从中间人代理到App签名算法还原

1. 分析前的工程准备&#xff1a;抓包、反编译与绕过证书检测1.1 为什么抓包环境会直接决定后续分析效率我第一次处理某虾App的数据需求时&#xff0c;心里想得很简单&#xff1a;把接口请求抓到&#xff0c;照着参数模拟一套不就完事了&#xff1f;结果打开抓包工具一看&#…

2026/10/20 10:45:37 阅读更多 →
工控调试必修课:掌握字节、十六进制与大小端

工控调试必修课:掌握字节、十六进制与大小端

前阵子在某现场处理一台仪表的通信问题&#xff0c;报文已经抓出来了&#xff0c;十六进制字符串干干净净摆在屏幕上&#xff0c;可上位机显示的温度永远是乱码。折腾到最后&#xff0c;原因特别简单&#xff1a;寄存器里两个字节的顺序反了。类似的故事&#xff0c;在工控调试…

2026/10/20 10:45:37 阅读更多 →
降重降AI的软件哪个好?能同时降重复率和AI率的才省事,AI率降到20%以下!

降重降AI的软件哪个好?能同时降重复率和AI率的才省事,AI率降到20%以下!

降重降AI的软件哪个好&#xff1f;能同时降重复率和AI率的才省事&#xff0c;AI率降到20%以下&#xff01; 降重降AI的软件哪个好&#xff1f;这是很多同学在交稿前一周反复搜的问题。查重报告刚压到合格&#xff0c;AIGC报告又标了一片红&#xff1b;换个工具专门降AI&#x…

2026/10/20 10:45:37 阅读更多 →
为什么一降重AI率就升高?手动降重越改越像AI,降重降AI一起做才是正解!

为什么一降重AI率就升高?手动降重越改越像AI,降重降AI一起做才是正解!

为什么一降重AI率就升高&#xff1f;手动降重越改越像AI&#xff0c;降重降AI一起做才是正解&#xff01; 为什么一降重AI率就升高&#xff1f;不少同学都碰到过&#xff1a;查重报告上的红色总算改少了&#xff0c;再送去做AIGC检测&#xff0c;AI率反而比改之前还高。明明每…

2026/10/20 10:44:37 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

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

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

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

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

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

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →