news 2026/9/6 14:04:35

JMeter性能测试实战教程:从脚本编写到报告生成与常见排查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JMeter性能测试实战教程:从脚本编写到报告生成与常见排查

JMeter 是目前后端性能测试里最常用的开源工具之一,很多人的第一份性能测试脚本、第一份压测报告,都是从它开始的。但“会用 JMeter”和“能完成一次有效压测”之间,差的往往不是功能列表,而是对线程组、参数、监听器、结果分析和排查方式的理解。这篇教程不做功能罗列,直接按实际学习路线拆:环境准备、第一个脚本、接口场景、命令行压测、报告生成、参数化、常见报错,最后落回到岗位面试里最常被问到的性能测试概念。整个过程既可以按顺序操作,也可以作为你后续做真实压测时的查漏清单。

1. 先搞清楚 JMeter 到底解决什么问题,以及新手最容易走偏的地方

1.1 JMeter 的核心定位不是“录制脚本”,而是构造并发和采集指标

JMeter 是 Apache 下面的开源工具,基于 Java 开发,最擅长的是对 HTTP、HTTPS 接口做压力测试。说得直白一点,它的核心能力就两件事:一是模拟多个用户同时访问系统,二是把请求的响应时间、成功失败数量、吞吐量这些指标采集出来,形成结果数据。

很多人第一次接触 JMeter 是想录脚本,尤其是看到录制功能、代理服务器、HTTP 脚本记录器这些名词后,会觉得这个工具应该是“录制回放”为主。实际上日常做后端接口压测时,用手写 HTTP 请求比录制更稳定、更可控。录制适合有浏览器的 Web 端流程,不适合你只想压一个登录接口或者查询接口的场景。

我一般建议新手把 JMeter 先当成一个“并发请求构造器”来理解。你给它一个请求地址,设置好请求方式、请求头和请求体,然后告诉它模拟多少个用户、持续多长时间,它就会按你的要求发起请求,并把每个请求的响应数据记录下来。至于报告里面的响应时间、错误率、吞吐量,都是额外计算出来的结果。

1.2 常见的学习误区:一味追求插件、录制和花哨功能

在搜索 JMeter 相关热词时,会发现很多人会问 jmeter 上传文件、jmeter 安全证书、jmeter 录制 https 脚本、jmeter jp@gc - webdriver sampler 这类问题。这些确实是 JMeter 的功能,但并不代表你一开始就要掌握。

从我的实际经验看,新手最容易被带偏的是这两个方向:

一个是一上来就装各种插件。JMeter 默认功能其实很够用,HTTP 请求、线程组、CSV 参数化、JSON 提取器、聚合报告、HTML 报告生成,这些原生能力足够完成 80% 的接口性能测试场景。插件主要解决的是服务器性能监控、图形化展示、WebDriver 自动化等扩展需求,属于“进阶要学,入门别碰”。

另一个是非要录脚本不可。录制功能在 JMeter 里不是没有价值,但它会带来大量额外元素:Cookie 管理器、正则表达式提取器、各种资源请求,一个页面能录出几十个请求,新手根本不知道哪些是核心请求。真正做接口压测时,你只需要关心被测系统的关键接口,而不是把所有静态资源都压一遍。

2. 环境准备:JDK 版本、下载方式、启动验证

2.1 先装 JDK,再装 JMeter,顺序不要反

JMeter 是 Java 程序,没有 JDK 或 JRE 无法运行。安装 JDK 时要注意版本匹配。JMeter 5.x 版本通常要求 JDK 8 或以上,部分新版本推荐 JDK 11 或 JDK 17。这里不要凭记忆硬套,直接在你下载的 JMeter 版本说明里确认要求即可。

装完 JDK 之后,建议在命令行里验证一下环境变量是否生效:

java -version

如果提示找不到 java,说明 JAVA_HOME 没配置或没生效。Windows 下确认系统环境变量里的 PATH 包含%JAVA_HOME%\bin,macOS 和 Linux 下检查~/.bashrc~/.zshrc

还有一种情况是机器上装了多个 JDK 版本,命令行里输出的是旧版本,导致 JMeter 启动报不兼容。遇到这种问题,最直接的做法是修改 JMeter 安装目录下的bin/jmeter.bat(Windows)或bin/jmeter(Linux/macOS)配置,显式指定JAVA_HOME,避免全局环境变量干扰。

2.2 下载安装:解压即用,不需要复杂安装向导

JMeter 官网提供两种包:一种是源码包,一般不需要;另一种是二进制发行包,Windows 下通常是 zip,Linux/macOS 下也提供 tar.gz。下载二进制包,解压到你想要的位置即可。

Windows 启动方式:进入bin目录,双击jmeter.bat。macOS 或 Linux 执行:

sh jmeter.sh

如果是第一次运行,建议用命令行方式启动,这样可以看到日志输出。如果 GUI 正常弹出来,并且命令行没有ExceptionError级别的日志,说明环境没问题。

2.3 启动后的基础检查项

打开 JMeter GUI 后,建议先做两个简单检查:

第一,左侧导航能看到“测试计划”节点,右键可以创建线程组、HTTP 请求等元素,说明插件加载正常。

第二,在“选项”菜单里检查语言切换是否正常。JMeter 默认可能是英文界面,如果看不习惯,可以改成简体中文,不影响功能。

如果双击没有反应,最常见的原因就是 JDK 未安装或版本不匹配。先确认java -version输出版本不是 1.7 以下的旧版本。另一个隐蔽问题是磁盘路径包含中文或空格,极少数情况下会导致脚本元素保存异常,建议把 JMeter 解压到一个纯英文路径。

3. 第一个压测脚本:从最简单的 HTTP 请求开始

3.1 不需要复杂逻辑,先用一个公开接口跑通

新手学习 JMeter 时最容易卡住的是:打开工具后不知道从哪下手。这时候不要想太多,直接创建四个元素:

  • 线程组:定义并发用户数、启动时间和执行次数
  • HTTP 请求:定义被测接口的协议、地址和参数
  • 查看结果树:看单个请求的请求信息和响应信息
  • 聚合报告:看整体响应时间、错误率、吞吐量

先说线程组。右键“测试计划” → “添加” → “线程(用户)” → “线程组”,打开后主要有三个参数:

  • 线程数:模拟多少个用户
  • Ramp-up 时间:多少秒内启动完所有线程
  • 循环次数:每个线程执行多少次请求

这三个参数要连起来理解。如果线程数设为 100,Ramp-up 设为 10,意思是 10 秒内逐步把 100 个线程都启动起来。循环次数设为 1,就是每个线程跑 1 次请求,总请求数就是 100 次。不要只关注线程数而忽略循环次数,因为实际压测时总请求量是这两个参数共同决定的。

3.2 HTTP 请求怎么填

在刚开始做接口测试时,我不会找特别复杂的系统,一般直接用 GET 请求验证。你可以填一个自己项目中准备测试的环境地址,也可以先用本地调试服务或者公开的接口来验证 JMeter 流程。

协议、服务器名称或 IP、端口、路径这四项是核心。如果接口是 RESTful 风格,还需要在参数部分填请求参数。

需要注意一个细节:查看结果树的“响应数据”能直观看到接口返回的内容,但如果你请求的是 HTTPS 接口,并且对方用了自签证书,JMeter 可能会提示证书不可信。这个问题并不难解决,但你应该先分清是证书问题还是网络问题。如果只是本地做接口调试,更稳妥的做法是先用 HTTP 接口跑通整个流程。

3.3 聚合报告里每一项指标到底怎么看

跑完一次压测后,聚凌报告会有几个重要指标,这里需要看懂,而不是只看有没有请求成功:

  • Samples:请求总数
  • Average:平均响应时间
  • Min / Max:最短、最长响应时间
  • Std.Dev.:响应时间标准差,值越大说明波动越明显
  • Error %:错误率
  • Throughput:吞吐量,单位通常是 requests/sec

我一般会先看 Error% 和 Average。如果错误率很高,说明接口本身有问题,或者测试环境压力已经超过系统的处理能力。如果错误率为 0,但平均响应时间已经高到不满足预期,那就要继续加压力,找到系统的瓶颈点。

不要只跑一次就下结论。性能测试最少跑三次以上,取趋势稳定的结果。如果第一次平均响应时间是 200ms,第二次变成 800ms,那首先要看测试环境是否被别人占用了,而不是急着调 JMeter 参数。

3.4 “单用户跑 1 分钟”这个操作是在验证什么

搜索热词里出现了 jmeter 单用户1分钟,这个操作在实际工作中很常用。它的核心目的不是测并发,而是验证脚本稳定性和接口基线性能。

实现方式很简单:线程数设为 1,循环次数设为永远,勾选调度器,设置持续时间(Duration)为 60 秒。这样 JMeter 会以 1 个用户持续发送请求 1 分钟。

单用户跑 1 分钟的好处有三个:第一,确认脚本本身不会报错;第二,观察单请求时间是否稳定;第三,给后续并发测试提供一个基础参照。如果单用户下去响应时间都忽高忽低,那问题大概率不在 JMeter 配置,而在被测系统或测试数据上。

4. 接口常见场景:POST 请求、上传文件、JSON 提取器与关联

4.1 从 GET 到 POST:请求头、请求体怎么配置

很多接口不只是简单的 GET 请求。做登录、提交订单、保存配置时,通常都是 POST 请求,并且需要在请求体中传递 JSON 数据。

在 JMeter 里添加一个 HTTP 请求,选择 “POST” 后,有两个地方要关注:

一个是通过“参数”页签添加键值对,适合表单提交。另一个是通过“Body Data”页签发 JSON 字符串,适合接口要求application/json的情况。

如果接口要求请求头里带Content-Type: application/json,建议在 HTTP 请求下添加一个 HTTP Header 管理器,复用性更好。一个线程组里的多个请求可以共用同一个 Header 管理器。

不要默认所有接口都只加 Content-Type 就行。还是需要看接口文档,有些接口还需要加 Authorization、Token、User-Agent 等头信息。

4.2 上传文件:核心在 Files Upload 页签

jmeter 上传文件这个场景主要出现在文件上传接口的压测中。操作方法是在 HTTP 请求里找到 “Files Upload” 页签,填入:

  • 文件路径:本地文件绝对路径
  • 参数名称:接口要求的上传字段名,通常是 file
  • MIME 类型:根据文件类型填,比如image/jpegapplication/zip

同时要注意请求方式一般是 POST,并且不要手动去加Content-Type,JMeter 在文件上传时通常会自动生成带 boundary 的 multipart 请求头。如果你手动加上普通 Content-Type,反而可能导致上传失败。

4.3 JSON 提取器:登录后拿到 Token,再调其他接口

压测登录接口之后,通常还要拿返回里的 Token 去请求查询接口或业务接口。这个过程叫关联,意思是后一个请求的某个参数值,来自前一个请求的响应结果。

JMeter 里最常用的是 JSON 提取器。添加路径:右键 HTTP 请求 → 添加 → 后置处理器 → JSON Extractor(JSON 提取器)。

关键配置是:

  • Apply to:一般选 Main sample only
  • Names of created variables:变量名,比如 token
  • JSONPath expressions:对应响应体里的路径,比如$.data.token
  • Default Values:提取失败时的默认值,建议填一个不会导致后续请求误成功的值,方便你发现提取失败

后续请求需要用到 Token 时,直接写成${token}。如果 Token 放在请求头里,就在 Header 管理器里写Authorization: Bearer ${token}

4.4 最常见的提取失败原因

JSON 提取器报错的概率不低,但大部分不是工具问题,而是响应结构判断错误。

第一个原因:路径写错。比如响应里数据可能在$.data.token,你写成了$.token,结果提取到空值。

第二个原因:没有确认响应格式。如果接口返回的不是 JSON,而是 XML 或纯文本,JSON 提取器就无能为力,需要改用正则表达式提取器。

第三个原因:没有开启“查看结果树”中的响应数据。压测时响应数据本来就值得先看一步。我一般会先用查看结果树确认返回里确实有 token 字段,再去做提取器配置。

5. 用命令行模式跑压测,并生成 HTML 测试报告

5.1 为什么大并发压测不能用 GUI 跑

GUI 模式跑一个小流程没问题,但真正做并发压测时,我建议尽量用命令行模式。原因很简单:JMeter 本身在 GUI 模式下会消耗内存和 CPU,得像渲染界面、刷新曲线图,这些都会占用掉本该用来施压的资源。

还有一个风险:压测规模比较大的时候,GUI 界面容易出现卡顿、无响应,甚至导致测试结果丢失。所以生产级压测、长时间稳定性测试,都要在命令行模式下执行。

5.2 命令行压测的标准写法

JMeter 命令行模式的基本格式:

jmeter -n -t test_plan.jmx -l result.jtl -e -o report_dir

四个核心参数:

  • -n:非 GUI 模式
  • -t:指定测试计划文件,也就是你保存的 .jmx 文件
  • -l:输出结果文件,格式是 .jtl,里面记录每个请求的响应数据
  • -e:在测试结束后生成 HTML 报告
  • -o:HTML 报告输出目录,必须是一个不存在的目录,或空目录,否则会报错

例如:

jmeter -n -t login_test.jmx -l login_result.jtl -e -o login_report

跑完后打开login_report目录下的index.html,就能看到完整的测试报告。

5.3 HTML 报告里重点看哪几块

JMeter 生成的 HTML 报告很庞大,但实际看的时候不需要所有图表都看一遍。我一般按顺序关注四个地方:

第一个是 APDEX 指数。APDEX 是用户满意度的一个指标,需要在 JMeter 配置文件里设置容忍阈值和满意阈值。如果系统要求 2 秒内完成请求,可以设置阈值为 2000ms,报告里会告诉你用户满意比例是多少。

第二个是 Summary 总览。包括总请求数、平均响应时间、错误率、吞吐量。这些数据可以帮你快速判断整体表现。

第三个是响应时间的分布图,特别是 Percentiles。中位数(50%)和 90%、95%、99% 响应时间是最常看的。如果平均值很低但 99% 响应时间很高,说明存在少数慢请求,这种情况要特别留意。

第四个是吞吐量趋势图。结合线程数变化,看系统在并发增加时,吞吐量是线性增长,还是达到某个阈值后开始下降。这个拐点通常就是系统的性能瓶颈。

5.4 结果文件 .jtl 和 HTML 报告的区别

.jtl 是原始数据文件,记录了每个请求的时间戳、线程名、响应码、响应时间等明细。HTML 报告是由 .jtl 计算出来的可视化结果。保留 .jtl 文件的价值在于:后续可以重新生成不同样式的报告,或者在排查问题时回看明细数据。

如果忘记加-e -o参数,导致没有生成 HTML 报告,也可以用已有的 .jtl 文件补生成:

jmeter -g result.jtl -o report_dir

这个命令在实际工作中很实用,尤其是测试已经跑完,但你没有提前预留报告目录时。

6. 参数化与稳定性测试:真实压测里的常见操作

6.1 CSV 参数化:每个用户用不同的账号密码

真实业务系统不会允许几百个用户用同一个账号并发登录。这时候你就需要参数化测试数据。JMeter 里最常用的参数化方式是通过 CSV Data Set Config 读取外部文件。

添加路径:右键线程组 → 添加 → 配置元件 → CSV 数据文件设置。

配置要点:

  • 文件名:填写 CSV 文件路径
  • 文件编码:建议 UTF-8
  • 变量名称:多个字段用英文逗号分隔,比如 username,password
  • 分隔符:默认英文逗号
  • 是否循环:线程数超过数据行数时,可以设置是否重新读取

在 HTTP 请求的 Body Data 里就可以引用:

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

要注意的是,CSV 文件的路径最好不要写死绝对路径。如果你换了机器,或把脚本提交到 CI 环境,路径不一致会导致读取失败。更稳妥的做法是把 CSV 文件放在 JMeter 的 bin 目录或脚本同目录,然后配置相对路径;在团队协作时,也要在脚本旁边附上测试数据文件,避免别人拿到 .jmx 后跑不起来。

6.2 定时器:模拟真实用户的操作间隔

真实用户不会像机器人一样毫秒不差地连续点接口。JMeter 里的定时器就是用来模拟用户思考时间的。

常用的是常数吞吐量定时器和固定定时器。固定定时器最简单,在每次请求前或请求后等待固定时间。如果需要模拟更自然的时间分布,可以用高斯随机定时器或泊松随机定时器,让间隔时间不是完全固定。

但要注意:压测时要不要加定时器,取决于测试目的。如果是为了摸清系统最大处理能力,通常不加思考时间;如果是为了模拟接近真实业务场景,则需要加合理思考时间。一个常见的初学错误是:加了一个很大的固定定时器,导致并发量根本没上去,报告里的吞吐量也不是系统的真实上限。

6.3 稳定性测试怎么做

单次短时间压测只能看到系统在某个瞬间的表现。长期运行环境下,内存泄漏、连接数耗尽、日志积压等问题往往要跑 30 分钟、1 小时、甚至更久才暴露。

做稳定性测试时,建议这样设计:

  • 线程数保持不变,模拟固定并发
  • 调度器持续时间设为预期时长,比如 1800 秒或 3600 秒
  • 用命令行模式执行,避免 GUI 干扰
  • 监听目标机器的 CPU、内存、磁盘、网络和中间件日志

判断稳定性不只是看错误率,还要看响应时间是否随运行时间缓慢上升。如果平均响应时间在前 10 分钟是 100ms,跑到第 50 分钟变成 800ms,那就说明系统可能存在资源泄漏或缓存失效的问题。只看最终平均值会掩盖这个问题,最好在报告里观察响应时间趋势。

6.4 压力测试和负载测试不要混为一谈

面试和实际工作里经常出现两个词:压力测试和负载测试。它们的区别虽然没有那么绝对,但目标不一样。

负载测试是在接近预期峰值的压力下看系统是否稳定;压力测试是不断加压,找到系统在什么并发下开始明显劣化或崩溃。两者使用的脚本可能相同,但线程数和运行时长设计不同。

我建议做压测前先问清目标:你是在验证系统能不能撑住 1000 并发,还是在找它能撑住多少并发。目标不同,测试设计和结果判断都不应该一样。不要拿一份脚本、一组线程数,既想证明系统没问题,又想找出系统底线,那样结果很难有说服力。

7. 常见报错排查:按这个链路走,能少踩一半坑

7.1 连接失败、502、503,先判断是网络、环境还是服务问题

JMeter 返回错误时,千万不要只看请求失败就直接去调 JMeter 参数。我一般按这个顺序排查:

先看响应信息。查看结果树里每个失败请求都有响应码、响应信息和返回内容。比如 502 Bad Gateway 通常是反向代理后端的服务不可用,504 Gateway Timeout 是网关超时,ConnectException 是 TCP 连接建立失败。

再看网络可达性。从执行压测的机器上,用 telnet 或 curl 直接测被测地址的端口是否通。JMeter 跑不通不代表系统有问题,也可能是网络策略、防火墙、安全组没放通。

最后确认被测系统状态。压测过程中系统资源耗尽、应用假死,也会表现为大量超时或连接异常。这时候要去看服务端日志、中间件日志和数据库慢查询,而不是继续调大 JMeter 的线程数。

7.2 请求返回成功但数据不对,检查断言和参数值

有些场景下 JMeter 请求没有报错,HTTP 状态码是 200,但结果明显不对。比如登录接口返回了“该用户不存在”,查询订单返回空列表。这种问题最隐蔽。

解决办法是加断言。JMeter 里最常用的是响应断言,比如检查响应中是否包含“code”:0”或“成功”关键字。如果断言失败,JMeter 会将该请求标记为失败,这样错误率的统计才更接近真实。

加完断言之后,再排查请求参数是否被正确引用。特别是关联场景,如果${token}没有提取到值,请求头里可能带着空字符串,服务端直接拒绝。这类问题用查看结果树里的请求数据就能看出来。

7.3 并发上不去,优先看客户机资源和 JVM 配置

当 JMeter 客户端本身成为瓶颈时,会出现 CPU 使用率接近 100%、响应时间波动剧烈、本机内存占用过高等现象。

常见调整方向有两个。

一个是调 JVM 堆内存。JMeter 默认的堆内存可能不够用,可以在jmeter.batjmeter脚本里设置:

HEAP="-Xms1024m -Xmx4096m -XX:MaxMetaspaceSize=1024m"

但不要无限调大。堆内存过大会导致 GC 停顿明显,反而影响压测稳定性。建议压测前先看本机可用内存,预留一部分给系统本身。

另一个是降低监听器开销。不要在大规模压测时使用图形化监听器,尤其是“查看结果树”“图形结果”这种组件。它们会频繁记录和绘制结果,消耗大量资源。命令行模式下结果输出会更轻量。

如果单台机器压不动怎么办?压测机的瓶颈不在 JMeter 配置上时,可以考虑分布式压测。但分布式会引入主从节点同步、网络传输、结果汇总等新问题,一开始不要碰,先把单机压测做明白。

7.4 HTTPS 证书问题,只在需要录制或客户端校验时才会遇到

录制 HTTPS 脚本时,JMeter 需要安装自己的证书到浏览器或系统中,否则浏览器会报证书不可信。对于直接手写 HTTP 请求做接口压测的场景,一般不需要关心证书问题。

如果你确实遇到 HTTPS 接口提示证书错误,先确认是不是自签证书。如果是自签证书,可以临时让 JMeter 跳过证书校验,但生产环境是否允许这样做、安全策略是否允许,必须按公司的合规流程来。不推荐在真实压测中直接关闭所有证书校验,这会影响测试结果的可信度。

7.5 WebDriver Sampler 和“人机交互”类测试要单独考虑

搜索热词里有 jmeter jp@gc - webdriver sampler,这是 JMeter 的一个扩展插件,可以驱动真实浏览器执行点击、输入、跳转等操作。它适合做 Web UI 自动化和少量浏览器级别的性能验证,但它并不是 JMeter 压测体系的核心。

真正做高并发压测时,跑的是接口层,而不是浏览器请求。浏览器组件会引入大量渲染开销,既跑不高并发,也容易导致结果不稳定。如果你想学 Web 自动化,建议单独去学 Selenium 或 Playwright;JMeter 的 WebDriver Sampler 可以作为兴趣扩展,但不要把它当成性能测试入门路线。

8. 从性能测试教程走向岗位面试:重点准备这些能力

8.1 面试官真正想考察的三件事

很多人在学习 JMeter 时会收集大量面试题,比如性能测试的流程、并发数和线程数的区别、压力测试和负载测试的差异、响应时间怎么分析等。面试题本身并不难,难的是你有没有真正亲手跑过一轮压测,并且能说清楚测试思路和结果判断。

面试官通常会从三个角度提问:

第一,脚本设计能力。给你一个登录接口,你会怎么设计测试计划?线程数、Ramp-up、循环次数怎么设?这题考察的是你是否理解并发模型,而不是只会填参数。

第二,结果分析能力。给你一份聚合报告,你会看哪些数据?如果错误率很高,你会如何排查?这题考察的是你能不能把 JMeter 报告转化为系统性能判断。

第三,场景落地能力。比如需求说系统要支持 5000 人同时在线,你会怎么做测试?这里的关键不是直接回答“线程数设 5000”,而是要先拆分指标:在线用户缓存不一定等于并发操作数,真正需要压测的是用户同时进行业务操作的并发峰值。

8.2 没有实际项目经验的替代方案

很多人会说:“我没有做过性能测试项目,面试怎么办。”实际上面试官也会理解新人没有完整项目经验。重点是你有没有一个可以讲清楚的个人实践。

你可以自己搭一套简单的测试环境,比如在本地部署一个 Web 应用,用 JMeter 对登录、查询、列表等接口做压测,记录下不同并发下的响应时间变化,整理成一份简单的测试报告。面试的时候讲的不只是“我会用 JMeter”,而是“我用 JMeter 在一个实际接口上做了 100、500、1000 并发测试,发现响应时间在 500 并发以后明显上升,服务端 CPU 达到 90%,初步判断瓶颈在服务端计算资源”。

这类描述比“我会性能测试”有用得多。它能证明你已经跑通过完整链路,并且具备最基本的性能分析和判断意识。

8.3 先跑稳,再问自己能不能解释每个参数

最后一个建议是:学习 JMeter 的过程中,不要只追求“会操作”,还要追求“能讲清楚为什么”。

线程数和 Ramp-up 为什么会影响压测结果?循环次数和持续时间的差别在哪?为什么大压测不用 GUI 模式?聚合报告里的 Throughput 和平均响应时间如何互相印证?如果这些问题你都能用实际压测的数据解释,那即使遇到面试官问项目细节,也不会心虚。

执行层的能力很容易练,分析层的能力才决定你在这个方向上能走多远。先把单用户跑稳,再上并发;先看错误率,再盯响应时间分布;先学会看报告,再学着做调优。这套顺序比收藏更多教程、下更多插件更有用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/6 14:04:26

Pi 编程 Agent 实战:Ubuntu 与 VS Code 下的免费替代方案

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

作者头像 李华
网站建设 2026/9/6 13:58:19

通达信波段操作指标:双均线双金叉源码与实战过滤

简介:一套面向通达信软件用户的波段操作指标公式源码文档,适合有一定技术分析基础、希望把买卖判断工具化的投资者。文档提供了较复杂的附图公式,核心思路是结合6日、24日、32日移动平均线、KDJ类指标、ZIG转向及量能条件,在图表中…

作者头像 李华
网站建设 2026/9/6 13:57:26

视觉SLAM硬件选型指南:瑞迅科技RK3588/3576/3568三档方案深度解析

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

作者头像 李华
网站建设 2026/9/6 13:53:33

2026跨平台SSH客户端横评:MobaXterm、Termius、Xterminal怎么选

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

作者头像 李华
网站建设 2026/9/6 13:48:38

微型涡喷飞行器连接与控制集成装置设计与试车要点

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

作者头像 李华