当前位置: 首页 > news >正文

Java和SQL测试、性能监控中常用工具

下面我会详细列举一些在Java和SQL测试、调试、性能监控中常用的工具,并结合项目中提到的各个技术点说明如何选择合适的工具和方法。


一、Java项目常用的测试、调试与性能监控工具

单元测试与集成测试:JUnit/TestNG: 用于编写单元测试和集成测试。负责定义测试用例、断言结果,并执行测试。Mockito: 用于模拟外部依赖(如数据库、HTTP服务、消息队列),确保测试专注于被测代码逻辑,隔离单元测试时的环境。

协作流程:用JUnit/TestNG编写测试类和方法。用Mockito创建Mock对象,定义其行为(如返回特定值、抛出异常)。执行测试,验证Mockito对象的调用情况。

#### Mockito 是如何识别 Mock 对象的?

Mockito 使用 Java 动态代理(Dynamic Proxy)CGLIB 生成一个代理对象,该代理对象模拟了被Mock类(@Mock)的方法,并拦截所有对该对象的方法调用。

拦截方法调用: mockEmail.sendWelcomeEmail("test@example.com") 被调用时:这个方法不会执行真实的 EmailService 逻辑。而是被Mockito拦截,记录该方法调用(包括方法名、参数等)。verify(mockEmail).sendWelcomeEmail("test@example.com") 会检查 这个方法是否被调用过,如果调用了,则测试通过,否则失败。

场景1:单元测试——隔离被测对象

什么是外部依赖?
 

// 被测类:订单服务,依赖支付网关
public class OrderService {private PaymentGateway paymentGateway;public OrderService(PaymentGateway paymentGateway) {this.paymentGateway = paymentGateway;}public boolean processOrder(Order order) {return paymentGateway.charge(order.getAmount());}
}// 测试类:使用Mockito模拟PaymentGateway
@ExtendWith(MockitoExtension.class) // JUnit 5扩展
class OrderServiceTest {@Mockprivate PaymentGateway paymentGateway;@InjectMocksprivate OrderService orderService;@Testvoid testProcessOrderSuccess() {// 定义Mock行为:当charge(100.0)被调用时返回truewhen(paymentGateway.charge(100.0)).thenReturn(true);Order order = new Order(100.0);assertTrue(orderService.processOrder(order));// 验证charge方法是否被调用verify(paymentGateway).charge(100.0);}
}

在你的 OrderService 代码中,有一个依赖:

private PaymentGateway paymentGateway;

这个 PaymentGateway 代表的是一个“支付网关”,它可能是:真正的银行支付接口 /一个调用第三方API(如支付宝、Stripe、PayPal)/ 某个真实的远程服务器

如果在测试时真的调用 PaymentGateway:

  • 你需要网络连接,可能会真的扣款(测试时不想让银行真的收钱吧?)

  • 无法控制 PaymentGateway 的返回结果(比如,有时候它超时,有时候它失败)

  • 测试会变慢(因为网络请求会有延迟)

所以,我们想在测试时“假装”有这个支付网关,而不是让它真的执行支付。这就叫做**“隔离外部依赖”**——用Mockito创建一个假的 PaymentGateway

使用Mockito(隔离依赖,模拟行为)

@ExtendWith(MockitoExtension.class) // 让Mockito生效
class OrderServiceTest {@Mock // 创建一个假的 PaymentGatewayprivate PaymentGateway paymentGateway;@InjectMocks // 让 OrderService 使用这个假的 PaymentGatewayprivate OrderService orderService;@Testvoid testProcessOrderSuccess() {// 告诉Mockito:当调用 charge(100.0) 时,不是真的去支付,而是假装返回 truewhen(paymentGateway.charge(100.0)).thenReturn(true);Order order = new Order(100.0);assertTrue(orderService.processOrder(order)); // 这里不会真的扣款// 验证 charge 方法是否被调用了verify(paymentGateway).charge(100.0);}
}

这里Mockito做了三件事:1. 创建了一个假的 PaymentGateway,不会真的去支付。2. 告诉这个假的 PaymentGateway,如果别人调用 charge(100.0),就返回 true,模拟支付成功。3. 测试结束后,验证 charge(100.0) 是否真的被调用了,确保 OrderService 的逻辑正确。

总结Mockito的作用

场景

没有Mockito

使用Mockito

依赖调用

真的调用支付API,可能真的扣款

只是假装调用,不会真的付款

测试速度

可能需要网络请求,速度慢

本地运行,速度快

可控性

无法控制API返回什么

可以让API返回任何你想要的值(成功、失败、超时)

稳定性

网络波动、接口变更会影响测试

结果可预测,测试稳定

场景2:集成测试(部分模拟)只Mock部分依赖,例如:连接真实数据库,但Mock外部API调用,测试Web服务时,Mock邮件发送功能,避免真实邮件发送

// 被测类:用户服务,依赖数据库和邮件服务
public class UserService {private UserRepository userRepository;private EmailService emailService;public void registerUser(User user) {userRepository.save(user);emailService.sendWelcomeEmail(user.getEmail());}
}// 测试类:Mock邮件服务,真实数据库
@Test
void testRegisterUser() {// 真实数据库连接UserRepository realRepo = new JdbcUserRepository();// Mock邮件服务EmailService mockEmail = mock(EmailService.class);UserService service = new UserService(realRepo, mockEmail);service.registerUser(new User("test@example.com"));// 验证邮件服务是否被调用verify(mockEmail).sendWelcomeEmail("test@example.com");
}

场景3:模拟复杂依赖行为(链式调用、异常模拟):3.1 模拟方法链式调用:例如,模拟数据库查询时,先findById,再调用getName

User mockUser = mock(User.class);
when(mockUser.getName()).thenReturn("Alice");UserRepository mockRepo = mock(UserRepository.class);
when(mockRepo.findById(1)).thenReturn(Optional.of(mockUser));assertEquals("Alice", mockRepo.findById(1).get().getName());

 3.2 模拟方法抛出异常:测试超时异常的处理逻辑:Mockito的作用:模拟各种可能出现的异常,测试系统容错能力。

@Test
void testHttpClientTimeout() {HttpClient mockClient = mock(HttpClient.class);when(mockClient.get(anyString())).thenThrow(new SocketTimeoutException("Timeout"));MyApiClient client = new MyApiClient(mockClient);assertThrows(ApiException.class, () -> client.fetchData());
}

何时使用Mockito? Mockito适用于单元测试,但在集成测试中不建议Mock所有依赖,否则失去测试意义!

#### TestNG vs JUnit

TestNG:定位为下一代测试框架(Test Next Generation),替代JUnit,通常不需要同时用,覆盖了JUnit的核心功能,但额外提供:

  • 测试分组(Groups):按功能、优先级等分组运行测试用例。

  • 依赖管理:定义测试方法的执行顺序(如dependsOnMethods)。

  • 参数化测试:支持更灵活的数据驱动(通过@DataProvider)。

  • 并发测试:多线程并行执行测试方法或套件。

  • 生命周期钩子:丰富的注解(如@BeforeSuite、@AfterTest)。

  • 测试报告:生成更详细的HTML报告。

    协作示例:结合TestNG + Mockito

public class PaymentServiceTest {@Mock private PaymentGateway gateway;@InjectMocks private PaymentService service;@BeforeMethodvoid setup() {MockitoAnnotations.openMocks(this);}@Test(groups = "integration")void testPaymentRetry() {when(gateway.process(any())).thenThrow(new PaymentException()).thenReturn(true);service.retryPayment(new Payment());verify(gateway, times(2)).process(any());}
}

#### 静态代码分析:
  • SonarQube: 可以在CI/CD流水线中集成,对代码质量、漏洞、重复代码等进行静态扫描。
  • FindBugs/SpotBugs: 检查代码潜在的bug和不规范用法。

#### 性能测试:JMeter Gatling

JMeter 用于对RESTful API、SQL查询等进行压力测试、负载测试,能精确量化响应时间(例如文中提到的减少API响应时间、SQL查询响应时间等指标)。Gatling 用于模拟高并发场景:

一、测试指标 两者均可测试以下核心性能指标:

  1. 响应时间:包括平均响应时间、中位数、90%用户响应时间等(如HTTP请求的延迟)。

  2. 吞吐量(Throughput):单位时间内系统处理的请求数(如每秒请求数RPS)。

  3. 并发用户数:模拟同时访问系统的用户量。

  4. 错误率:请求失败的比例。

  5. 资源利用率:如CPU、内存、磁盘等服务器资源占用情况(需搭配插件,如JMeter的PerfMon)。

JMeter还可测试数据库、JMS等协议的性能,而Gatling更专注于Web应用。

二、JMeter操作流程

JMeter入门:打造100人并发压力测试教程-CSDN博客

测试步骤

  • 脚本录制:配置 JMeter 代理:在 JMeter 中添加 “HTTP(S) Test Script Recorder” 设置代理端口(默认 8888)选择录制的目标(如 HTTP 请求)配置浏览器代理 在 Chrome/Firefox 的代理设置中,手动将代理服务器设为 localhost:8888,这样,所有浏览器发出的 HTTP 请求都会通过 JMeter 代理。

  • 设置线程组:定义并发用户数、循环次数等参数,模拟多用户场景。

  • 参数化与断言:使用CSV文件分离测试数据,设置断言验证响应结果。

  • 添加监听器:通过“查看结果树”“聚合报告”等组件收集数据。

JMeter 并不是专门用于测试 Java 程序的,而是一个 通用的负载测试工具,可以用于测试 Web 应用、数据库、JMS、FTP 等多种协议的性能。


1. 什么是“录制请求”?为什么只录制 HTTP 请求?

“录制请求” 指的是 JMeter 监听并记录浏览器或应用程序发送的请求,然后自动生成对应的 JMeter 测试脚本(.jmx 文件)。JMeter 不仅支持 HTTP 请求,还支持:数据库请求(JDBC)FTP 请求, WebSocket, JMS(Java 消息服务),TCP 请求

2. JMeter 如何定义并发用户数?在哪里设置?

并发用户数的设置在 JMeter 内部完成,模拟并发的核心:线程组(Thread Group)

  • 线程数(Number of Threads):表示模拟多少个用户(相当于并发用户数)。

  • Ramp-Up 时间(Ramp-Up Period in seconds):多少秒内启动所有用户。

  • 循环次数(Loop Count):每个用户执行多少次请求。

测试计划 下,添加 “线程组(Thread Group)”配置参数:Number of Threads(线程数) = 100Ramp-Up Period(递增时间) = 10, Loop Count(循环次数) = 5

线程组 下面,添加 “HTTP 请求” 采样器,配置请求信息。运行测试

JMeter 的 .jmx 文件是 XML 格式,可以手动修改:

<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="测试用户组" enabled="true"><stringProp name="ThreadGroup.num_threads">100</stringProp>  <!-- 并发用户数 --><stringProp name="ThreadGroup.ramp_time">10</stringProp>    <!-- 10秒内启动所有用户 --><stringProp name="ThreadGroup.duration">60</stringProp>    <!-- 测试持续时间 -->
</ThreadGroup>

3. 如何验证结果?测试报告:运行命令:生成 HTML 形式的报告,包含:响应时间分布,吞吐量趋势,并发用户数曲线

jmeter -n -t test.jmx -l results.jtl -e -o report/

 

三、Gatling操作流程

  1. 测试步骤

  • 编写脚本:使用Scala或Java DSL定义测试场景(如用户登录、下单流程)。

  • 配置并发模型:设置虚拟用户数、请求频率(如每秒注入用户数)。

  • 执行测试:

    • 命令行运行:通过以下命令启动测试并生成报告: ./gatling.sh -s <测试脚本类名> 测试结束后自动生成HTML报告。
      最终报告:生成交互式HTML报告,包含响应时间百分位数、吞吐量曲线等。

四、工具对比与适用场景

特性

JMeter

Gatling

脚本编写

图形界面或XML配置,适合非开发人员

基于Scala/Java DSL,适合开发者

资源消耗

较高(多线程模型)

较低(异步IO模型)

报告功能

需插件支持,基础报告较简单

内置丰富图表,支持动态分析

扩展性

插件生态丰富(如PerfMon监控资源)

依赖Scala/Java代码扩展

  • JMeter适合需要图形化操作和多样化协议支持的场景,而Gatling更适合开发者编写高并发测试脚本。

  • 命令行输出:两者均不会实时显示完整指标,需通过生成的日志或报告分析结果。

  • 自动化集成:均可通过命令行集成到CI/CD流程,实现持续性能测试。


#### 调试和监控:
  • IDE内置调试器(如IntelliJ IDEA/Eclipse调试器): 方便在本地进行断点调试,查看变量状态、堆栈信息。
  • Java Profiler(如VisualVM、JProfiler、Java Flight Recorder): 用于分析内存使用、CPU瓶颈、GC行为等。例如,检测内存泄漏、GC停顿情况等具体数据;
  • jconsole/jstat/jmap/jstack: 这些JDK自带工具也可以监控JVM状态、内存使用情况,并帮助分析线程问题。
  • GC日志分析工具(如GCViewer、GCeasy): 通过GC日志的采集与分析,可以得到GC停顿时间、内存回收效率等指标。
#### 日志管理:
  • 日志框架(如Logback、Log4j2): 用于记录系统运行日志。可以配置不同级别的日志(INFO、DEBUG、ERROR),帮助追踪问题。
  • ELK Stack(Elasticsearch, Logstash, Kibana): 用于收集、聚合、可视化日志数据,便于分析和追踪问题。

二、SQL测试、优化和调试工具

  1. SQL执行计划分析:

    • EXPLAIN / EXPLAIN ANALYZE: MySQL(或其他数据库)自带的语句,可以查看查询的执行计划,识别全表扫描、索引使用情况等。
    • MySQL Workbench: 提供图形化的查询分析工具,能直观展示查询瓶颈。
    • pt-query-digest(Percona Toolkit): 分析慢查询日志,统计查询执行次数、响应时间等,帮助优化索引和SQL语句。
  2. 数据库日志和监控:

    • MySQL慢查询日志: 配置并开启慢查询日志,可以捕捉响应时间超过设定阈值的SQL语句,便于后续优化。
    • 监控工具(如MySQL Enterprise Monitor、Prometheus+Grafana): 实时监控数据库性能、连接数、查询响应时间等。
  3. 负载测试工具:

    • JMeter: 不仅可以用于Java API性能测试,也适合对数据库查询进行压力测试,模拟高并发场景下的查询表现。
    • Apache Bench(ab): 简单的HTTP负载测试工具,也可以用来测试基于RESTful接口的数据库访问。

三、各项目条目中可能用到的工具及方法

  1. NLP Pipeline与API性能(如Achieved sub-300ms response times):

    • API测试: 使用Postman或REST-assured编写自动化测试脚本;
    • 性能测试: 使用JMeter模拟并发请求,收集响应时间、吞吐量数据;
    • 调试与监控: 使用Java Flight Recorder和GC日志工具监控内存和CPU使用情况,确保在高并发下系统响应时间稳定。
  2. SQL Query优化和测试:

    • SQL执行计划工具: 利用EXPLAIN语句,MySQL Workbench以及pt-query-digest分析SQL执行效率;
    • 负载测试: 利用JMeter模拟查询请求,测量改造前后SQL响应时间(如从450ms降到320ms);
    • 持续集成中的代码质量检测: 集成JUnit和SonarQube确保每次提交后查询逻辑和性能不退步。
  3. mySQL Middleware项目:

    • 数据库连接池调优: 使用HikariCP监控连接池指标(如响应时间1.80ms平均读取延迟和920 QPS),可以通过监控连接池的指标接口;
    • 异步日志和锁机制: 对比同步与异步日志写入的性能差异,利用日志分析工具统计日志写入时间;
    • 压力测试: 用JMeter模拟高并发(200并发线程),收集整体系统的吞吐量和响应时间。

四、关于Customizable Tic-Tac-Toe Engine项目与Selenium测试的讨论

项目概况:前端采用Vue 3,后端使用Spring Boot,通过Docker容器化部署;游戏引擎在8×8棋盘上实现了高准确度的模式匹配算法,同时具备WebSocket实时更新(<50ms延迟),以及前端性能指标(FCP 1.3s,TTI 2.2s)。

Selenium测试适用性分析:

  1. 适合测试的部分:

    前端UI自动化: 功能验证: 可以模拟用户点击、输入、交互,验证页面布局、按钮功能、状态变化等是否符合预期。流程测试: 验证游戏开始、落子、判断胜负等业务流程的正确性。

    端到端测试: 与后端接口交互时,可以使用Selenium搭配Headless浏览器测试整个应用的端到端流程。
  2. 不太适合测试的部分:

    实时性与性能指标:Selenium本身不适合精确测量实时WebSocket消息传递的延迟(如<50ms的要求)。对于页面性能指标(如FCP、TTI),推荐使用Lighthouse或WebPageTest等专门的性能测试工具。

    高并发场景: Selenium不擅长模拟大量并发用户,这种场景更适合使用JMeter、Gatling等工具。
  3. 如何使用Selenium测试:

    • 测试用例编写:模拟用户在浏览器上的操作,比如启动游戏、点击棋盘上的格子、验证棋盘状态更新。利用断言功能,检测页面元素是否按照预期变化(例如棋子是否正确落子、游戏结束弹窗是否出现等)。

    • 自动化测试流程:将Selenium测试脚本集成到CI/CD流水线中,实现每次代码提交后自动执行UI回归测试。可结合截图和日志记录功能,方便调试错误。

    • 扩展测试场景:如果需要测试多浏览器兼容性,可以使用Selenium Grid实现分布式并发测试。对于WebSocket及实时数据更新,可考虑在前端增加专门的测试钩子,通过脚本检测状态更新的时间间隔,但这通常需要自定义开发,而不是依赖Selenium本身的能力。

总结:Selenium可以用于测试Customizable Tic-Tac-Toe Engine的前端交互和UI逻辑。但对于实时性、性能及高并发场景的指标测量,需要配合其他工具(如Lighthouse、JMeter)来全面评估系统表现。


测试类型术语,使用指标,计算方式,使用场景总结-CSDN博客

相关文章:

Java和SQL测试、性能监控中常用工具

下面我会详细列举一些在Java和SQL测试、调试、性能监控中常用的工具&#xff0c;并结合项目中提到的各个技术点说明如何选择合适的工具和方法。 一、Java项目常用的测试、调试与性能监控工具 单元测试与集成测试&#xff1a;JUnit/TestNG&#xff1a; 用于编写单元测试和集成测…...

SQL 注入攻击详解[基础篇]:Web 应用程序安全漏洞与防御策略

目录 SQL注入的简介 现代 Web 应用程序中的数据库交互与 SQL 注入攻击 数据库管理系统&#xff08;DBMS&#xff09;架构与 SQL 注入 什么是 SQL 注入&#xff1f; SQL 注入的工作原理 SQL 注入的用例与影响 如何预防 SQL 注入&#xff1f; 数据库分类 数据库类型&am…...

【ArcGIS Pro二次开发】(87):样式_Style的用法

.Stylx类型的文件即为样式库文件&#xff0c;保存了符号样式。 1、根据名字获取当前工程中的style //获取当前工程中的所有style var ProjectStyles Project.Current.GetItems<StyleProjectItem>();//根据名字找出指定的style StyleProjectItem style ProjectStyles.F…...

DEX-EE三指灵巧手:扩展AI与机器人研究的边界

DEX-EE三指灵巧手&#xff0c;由Shadow Robot与Google DeepMind合作开发&#xff0c;以其先进技术和设计&#xff0c;正在引领AI与机器人研究的新趋势。其高精度传感器和灵活的机械手指&#xff0c;能够捕捉复杂的环境数据&#xff0c;为强化学习实验提供了可靠支持。 Shadow R…...

简站主题:简洁、实用、SEO友好、安全性高和后期易于维护的wordpress主题

简站主题以其简洁的设计风格、实用的功能、优化的SEO性能和高安全性而受到广泛好评。 简洁&#xff1a;简站主题采用扁平化设计风格&#xff0c;界面简洁明了&#xff0c;提供多种布局和颜色方案&#xff0c;适合各种类型的网站&#xff0c;如个人博客和企业网站。 实用&…...

23种设计模式 - 责任链

模式定义 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;允许多个对象按链式顺序处理请求&#xff0c;直到其中一个对象处理为止。该模式将请求的发送者和接收者解耦&#xff0c;使多个对象都有机会处理请求。 模式结构…...

Flink SQL与Doris实时数仓Join实战教程(理论+实例保姆级教程)

目录 第一章:Regular Joins 深度解析 1.1 核心原理与适用场景 1.2 电商订单 - 商品实时关联案例 1.2.1 数据流设计 1.2.2 Doris 表设计优化 1.2.3 性能调优要点 第二章:Interval Joins 实战应用 2.1 时间区间关联原理 2.2 优惠券使用有效性验证 2.2.1 业务场景说明 …...

算法——舞蹈链算法

一&#xff0c;基本概念 算法简介 舞蹈链算法&#xff08;Dancing Links&#xff0c;简称 DLX&#xff09;是一种高效解决精确覆盖问题的算法&#xff0c;实际上是一种数据结构&#xff0c;可以用来实现 X算法&#xff0c;以解决精确覆盖问题。由高德纳&#xff08;Donald E.…...

【复现DeepSeek-R1之Open R1实战】系列6:GRPO源码逐行深度解析(上)

目录 4 GRPO源码分析4.1 数据类 GRPOScriptArguments4.2 系统提示字符串 SYSTEM_PROMPT4.3 奖励函数4.3.1 accuracy_reward函数4.3.2 verify函数4.3.3 format_reward函数 4.4 将数据集格式化为对话形式4.5 初始化GRPO Trainer 【复现DeepSeek-R1之Open R1实战】系列3&#xff1…...

若依Flowable工作流版本监听器使用方法

1.前言 本文详细介绍如何在若依Flowable工作流版本&#xff08;RuoYi-Vue-Flowable&#xff09;中配置执行监听器和任务监听器。是以我二次开发的代码为基础&#xff0c;介绍如何配置监听器&#xff0c;已解决源码在新增或删除监听器出现的问题&#xff0c;如果需要二次开发的…...

机器视觉--图像的运算(乘法)

一、引言 在图像处理领域&#xff0c;Halcon 是一款功能强大且广泛应用的机器视觉软件库。它提供了丰富的算子和工具&#xff0c;能够满足各种复杂的图像处理需求。图像的乘法运算作为其中一种基础操作&#xff0c;虽然不像一些边缘检测、形态学处理等操作那样被频繁提及&…...

突破反爬困境:从服务端渲染到客户端SPA,爬虫环境的演变与新挑战(一)

声明 本文所讨论的内容及技术均纯属学术交流与技术研究目的&#xff0c;旨在探讨和总结互联网数据流动、前后端技术架构及安全防御中的技术演进。文中提及的各类技术手段和策略均仅供技术人员在合法与合规的前提下进行研究、学习与防御测试之用。 作者不支持亦不鼓励任何未经授…...

matlab下载安装图文教程

【matlab介绍】 MATLAB是一款由美国MathWorks公司开发的专业计算软件&#xff0c;主要应用于数值计算、可视化程序设计、交互式程序设计等高科技计算环境。以下是关于MATLAB的简要介绍&#xff1a; MATLAB是MATrix LABoratory&#xff08;矩阵实验室&#xff09;的缩写&#…...

七、敏捷开发工具:持续集成与部署工具

一、敏捷开发工具——持续集成与部署工具 持续集成(CI)与持续部署(CD)是现代敏捷开发中不可或缺的关键实践。通过自动化构建、测试和部署流程,团队可以快速反馈、提高代码质量,并加速产品交付。为此,持续集成与部署工具应运而生,它们能够帮助开发团队在整个开发周期内…...

重看Spring聚焦BeanDefinition分析和构造

目录 一、对BeanDefinition的理解 &#xff08;一&#xff09;理解元信息 &#xff08;二&#xff09;BeanDefinition理解分析 二、BeanDefinition的结构设计分析 &#xff08;一&#xff09;整体结构体会 &#xff08;二&#xff09;重要接口和类分析 三、构造 BeanDef…...

2025年新型智慧城市整体解决方案下载:顶层规划设计,应用总体建设方案

一、引言 随着信息技术的飞速发展和城市化进程的加速&#xff0c;智慧城市已成为未来城市发展的新趋势。新型智慧城市通过深度融合物联网、大数据、云计算、人工智能等先进技术&#xff0c;旨在实现城市管理的智能化、精细化和服务的人性化&#xff0c;提升城市治理效能&#…...

【旋转框目标检测】基于YOLO11/v8深度学习的遥感视角船只智能检测系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

【物联网】电子电路基础知识

文章目录 一、基本元器件1. 电阻2. 电容3. 电感4. 二极管(1)符号(2)特性(3)实例分析5. 三极管(1)符号(2)开关特性(3)实例6. MOS管(产效应管)(1)符号(2)MOS管极性判定(3)MOS管作为开关(4)MOS管vs三极管7. 门电路(1)与门(2)或门(3)非门二、常用元器件…...

Linux-GlusterFS配置

文章目录 GlusterFS配置 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Linux专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2025年02月18日19点21分 GlusterFS配置 1、分区操作 fdisk -l #查看本地磁盘 fdisk /dev/vdb #对/dev/vdb进…...

IIS asp.net权限不足

检查应用程序池的权限 IIS 应用程序池默认使用一个低权限账户&#xff08;如 IIS_IUSRS&#xff09;&#xff0c;这可能导致无法删除某些文件或目录。可以通过以下方式提升权限&#xff1a; 方法 1&#xff1a;修改应用程序池的标识 打开 IIS 管理器。 在左侧导航树中&#x…...

CTF show Web 红包题第六弹

提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框&#xff0c;很难让人不联想到SQL注入&#xff0c;但提示都说了不是SQL注入&#xff0c;所以就不往这方面想了 ​ 先查看一下网页源码&#xff0c;发现一段JavaScript代码&#xff0c;有一个关键类ctfs…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...