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

Spring Boot 监视器

一、Spring Boot 监视器概述

(一)什么是 Spring Boot 监视器

  1. 定义与作用
    • Spring Boot 监视器(Spring Boot Actuator)是一个用于监控和管理 Spring Boot 应用程序的工具集。它提供了一系列的端点,可以获取应用程序的运行状态、性能指标、配置信息等,帮助开发者更好地了解和管理应用程序。
  2. 与传统监控工具的区别
    • 与传统的监控工具相比,Spring Boot 监视器更加轻量级、易于集成,并且提供了丰富的功能和灵活的配置选项。它可以与 Spring Boot 应用程序无缝集成,无需额外的安装和配置。

(二)为什么需要 Spring Boot 监视器

  1. 实时监控应用状态
    • 在生产环境中,实时了解应用程序的运行状态非常重要。Spring Boot 监视器可以提供应用程序的健康状况、内存使用情况、线程数量等信息,帮助开发者及时发现和解决问题。
  2. 性能优化
    • 通过监控应用程序的性能指标,如响应时间、吞吐量等,可以发现性能瓶颈,并进行优化。Spring Boot 监视器可以提供这些指标的实时数据,帮助开发者做出更准确的决策。
  3. 故障排查
    • 当应用程序出现故障时,Spring Boot 监视器可以提供详细的错误信息和日志,帮助开发者快速定位问题。它还可以提供应用程序的调用链信息,帮助开发者了解问题的根源。

二、Spring Boot 监视器的核心端点

(一)/health 端点

  1. 功能介绍
    • /health 端点用于提供应用程序的健康状况信息。它可以检查应用程序的各个组件,如数据库连接、缓存连接等,并返回一个状态码,表示应用程序的整体健康状况。
  2. 自定义健康检查
    • 开发者可以自定义健康检查逻辑,通过实现 HealthIndicator 接口来添加自己的健康检查项。例如,可以检查外部服务的连接状态、文件系统的可用空间等。
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;@Component
public class CustomHealthIndicator implements HealthIndicator {@Overridepublic Health health() {// 进行自定义健康检查逻辑boolean isHealthy = checkExternalService();if (isHealthy) {return Health.up().build();} else {return Health.down().withDetail("reason", "External service is down").build();}}private boolean checkExternalService() {// 检查外部服务的连接状态return true;}
}

(二)/metrics 端点

  1. 功能介绍
    • /metrics 端点用于提供应用程序的性能指标信息。它可以提供各种指标,如内存使用情况、线程数量、请求响应时间等。
  2. 自定义指标
    • 开发者可以自定义指标,通过使用 MeterRegistry 接口来注册自己的指标。例如,可以统计特定方法的调用次数、记录特定事件的发生次数等。
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class CustomMetrics {private final MeterRegistry meterRegistry;@Autowiredpublic CustomMetrics(MeterRegistry meterRegistry) {this.meterRegistry = meterRegistry;}public void recordMethodCall() {meterRegistry.counter("custom.method.call").increment();}
}

(三)/info 端点

  1. 功能介绍
    • /info 端点用于提供应用程序的基本信息,如应用程序名称、版本号、构建时间等。这些信息可以在应用程序的配置文件中进行配置。
  2. 自定义信息
    • 开发者可以自定义 (info) 端点的信息,通过在配置文件中添加相应的属性来实现。例如,可以添加应用程序的描述信息、联系人信息等。
info.app.name=My Application
info.app.version=1.0.0
info.app.description=This is my application.
info.app.contact.name=John Doe
info.app.contact.email=john.doe@example.com

三、Spring Boot 监视器的配置

(一)启用和禁用端点

  1. 配置方式
    • 通过在 application.properties 或 application.yml 文件中设置 management.endpoints.enabled-by-default 属性,可以启用或禁用所有端点。也可以通过设置单个端点的 enabled 属性来单独启用或禁用某个端点。
management.endpoints.enabled-by-default=false
management.endpoint.health.enabled=true
management.endpoint.metrics.enabled=true
management.endpoint.info.enabled=true

  1. 安全考虑
    • 在生产环境中,为了安全起见,可以禁用一些敏感的端点,如 /shutdown 端点。同时,可以通过配置安全认证和授权来限制对端点的访问。

(二)自定义端点路径

  1. 配置方式
    • 通过在 application.properties 或 application.yml 文件中设置 management.endpoints.web.base-path 属性,可以自定义端点的基础路径。例如,可以将端点的路径设置为 /admin/actuator,以提高安全性。
management.endpoints.web.base-path=/admin/actuator

  1. 注意事项
    • 在自定义端点路径时,需要确保客户端能够正确访问新的路径。同时,需要注意与其他安全配置的兼容性。

(三)配置端点的访问权限

  1. 安全认证和授权
    • 可以通过配置 Spring Security 来实现对端点的安全认证和授权。例如,可以要求用户提供用户名和密码才能访问端点,或者限制只有特定的用户角色才能访问某些端点。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Overrideprotected void configure(HttpSecurity http) throws Exception {http.authorizeRequests().antMatchers("/admin/actuator/health").permitAll().antMatchers("/admin/actuator/**").hasRole("ADMIN").and().httpBasic();}
}

  1. IP 地址限制
    • 可以通过配置网络防火墙或代理服务器来限制对端点的访问,只允许特定的 IP 地址访问端点。这样可以提高安全性,防止未经授权的访问。

四、Spring Boot 监视器的集成

(一)与日志系统集成

  1. 记录端点访问日志
    • 可以将端点的访问日志记录到日志系统中,以便进行审计和故障排查。可以通过配置日志级别和过滤器来实现对端点访问日志的记录。
import org.springframework.boot.actuate.logging.LoggingEndpoint;
import org.springframework.boot.actuate.logging.LoggingSystem;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class LoggingConfig {@Beanpublic LoggingEndpoint loggingEndpoint(LoggingSystem loggingSystem) {return new LoggingEndpoint(loggingSystem);}
}

  1. 结合日志分析工具
    • 可以将日志系统与日志分析工具(如 ELK Stack)集成,以便进行更深入的分析和可视化。这样可以更好地了解应用程序的运行状态和性能指标。

(二)与监控系统集成

  1. 推送指标到监控系统
    • 可以将应用程序的性能指标推送到监控系统(如 Prometheus、Grafana)中,以便进行实时监控和报警。可以通过使用 Micrometer 库来实现指标的推送。
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.prometheus.PrometheusConfig;
import io.micrometer.prometheus.PrometheusMeterRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MetricsConfig {@Beanpublic MeterRegistry meterRegistry() {return new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);}
}

  1. 可视化监控数据
    • 可以使用监控系统提供的可视化工具(如 Grafana)来展示应用程序的性能指标和运行状态。这样可以更直观地了解应用程序的情况,及时发现问题并进行处理。

五、Spring Boot 监视器的实际应用案例

(一)案例背景

假设有一个电商应用程序,需要实时监控应用程序的运行状态和性能指标,以便及时发现和解决问题。同时,需要将监控数据推送到监控系统中,进行可视化展示和报警。

(二)技术选型

  1. 使用 Spring Boot 监视器
    • 选择 Spring Boot 监视器作为监控工具,因为它提供了丰富的功能和灵活的配置选项,可以满足电商应用程序的监控需求。
  2. 结合监控系统
    • 选择 Prometheus 和 Grafana 作为监控系统,因为它们是开源的、功能强大的监控工具,可以与 Spring Boot 监视器无缝集成。

(三)具体实现

  1. 配置 Spring Boot 监视器
    • 在电商应用程序的配置文件中,启用 Spring Boot 监视器的相关端点,并进行必要的配置。例如,启用 /health、/metrics、/info 端点,并配置端点的访问权限。
management.endpoints.enabled-by-default=true
management.endpoint.health.enabled=true
management.endpoint.metrics.enabled=true
management.endpoint.info.enabled=true
management.endpoints.web.base-path=/admin/actuator
management.security.enabled=true
management.user.name=admin
management.user.password=admin123

  1. 自定义健康检查和指标
    • 在电商应用程序中,自定义健康检查逻辑和指标,以便更好地了解应用程序的运行状态和性能指标。例如,可以检查数据库连接状态、缓存命中率、订单处理时间等。
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;@Component
public class DatabaseHealthIndicator implements HealthIndicator {@Overridepublic Health health() {// 检查数据库连接状态boolean isConnected = checkDatabaseConnection();if (isConnected) {return Health.up().build();} else {return Health.down().withDetail("reason", "Database connection failed").build();}}private boolean checkDatabaseConnection() {// 检查数据库连接的逻辑return true;}
}
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class OrderMetrics {private final MeterRegistry meterRegistry;@Autowiredpublic OrderMetrics(MeterRegistry meterRegistry) {this.meterRegistry = meterRegistry;}public void recordOrderProcessingTime(long processingTime) {meterRegistry.timer("order.processing.time").record(processingTime, java.util.concurrent.TimeUnit.MILLISECONDS);}
}

  1. 集成 Prometheus 和 Grafana
    • 在电商应用程序中,集成 Prometheus 和 Grafana,将应用程序的性能指标推送到 Prometheus 中,并使用 Grafana 进行可视化展示和报警。可以通过使用 Micrometer 库来实现指标的推送。
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.prometheus.PrometheusConfig;
import io.micrometer.prometheus.PrometheusMeterRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MetricsConfig {@Beanpublic MeterRegistry meterRegistry() {return new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);}
}

  1. 配置 Grafana 仪表盘
    • 在 Grafana 中,配置仪表盘,展示电商应用程序的性能指标和运行状态。可以使用 Grafana 的模板和插件,快速创建美观、实用的仪表盘。
{"title": "E-commerce Dashboard","panels": [{"title": "Orders per Minute","type": "graph","targets": [{"expr": "rate(order_processing_time_count[1m])","legendFormat": "Orders per Minute"}]},{"title": "Database Health","type": "singlestat","targets": [{"expr": "up{job='ecommerce'}","legendFormat": "Database Health"}]}]
}

(四)效果评估

  1. 实时监控应用状态
    • 通过使用 Spring Boot 监视器和 Prometheus/Grafana,能够实时监控电商应用程序的运行状态和性能指标。可以及时发现数据库连接故障、订单处理时间过长等问题,并采取相应的措施进行处理。
  2. 性能优化
    • 通过分析监控数据,可以发现性能瓶颈,并进行优化。例如,可以优化数据库查询语句、增加缓存命中率等,提高应用程序的性能。
  3. 故障排查
    • 当应用程序出现故障时,可以通过查看监控数据和日志,快速定位问题的根源。可以使用 Grafana 的报警功能,及时通知开发者进行处理,减少故障时间。

六、Spring Boot 监视器的高级用法

(一)自定义端点

  1. 定义和实现自定义端点
    • 开发者可以根据自己的需求,定义和实现自定义端点。可以通过继承 AbstractEndpoint 类或使用 @Endpoint 注解来实现自定义端点。
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
import org.springframework.stereotype.Component;@Component
@Endpoint(id = "customEndpoint")
public class CustomEndpoint {@ReadOperationpublic String getCustomData() {// 返回自定义数据return "Custom data";}
}

  1. 访问自定义端点
    • 自定义端点可以通过与其他端点相同的方式进行访问。例如,如果自定义端点的路径为 /admin/actuator/customEndpoint,可以使用 HTTP GET 请求访问该端点,获取自定义数据。

(二)扩展监视器功能

  1. 使用插件和扩展点
    • Spring Boot 监视器提供了一些插件和扩展点,可以用于扩展监视器的功能。例如,可以使用 Micrometer 的插件来支持其他监控系统,或者使用 Spring Boot 的扩展点来添加自定义的健康检查逻辑。
  2. 自定义监控指标采集
    • 开发者可以自定义监控指标的采集方式,通过实现 MeterBinder 接口来注册自己的指标采集器。例如,可以采集特定的系统资源使用情况、业务指标等。
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.binder.MeterBinder;
import org.springframework.stereotype.Component;@Component
public class CustomMeterBinder implements MeterBinder {@Overridepublic void bindTo(MeterRegistry meterRegistry) {// 注册自定义指标meterRegistry.gauge("custom.metric", 123);}
}

七、Spring Boot 监视器的性能优化

(一)减少端点响应时间

  1. 优化健康检查逻辑
    • 健康检查逻辑应该尽可能简单和快速,避免进行耗时的操作。可以使用缓存来存储健康检查结果,减少重复检查的时间。
  2. 限制指标采集频率
    • 指标采集频率应该根据实际需求进行调整,避免过于频繁的采集导致性能问题。可以使用采样技术,减少指标采集的数量。

(二)降低资源消耗

  1. 禁用不必要的端点
    • 在生产环境中,应该禁用不必要的端点,以减少资源消耗。可以根据应用程序的实际需求,只启用必要的端点。
  2. 优化监控数据存储
    • 监控数据的存储应该进行优化,避免占用过多的磁盘空间。可以使用压缩技术,减少存储的数据量。

八、Spring Boot 监视器的安全注意事项

(一)保护端点访问

  1. 配置安全认证和授权
    • 应该配置安全认证和授权,限制对端点的访问。可以使用 Spring Security 或其他安全框架,要求用户提供用户名和密码才能访问端点。
  2. 限制端点访问 IP 地址
    • 可以通过配置网络防火墙或代理服务器,限制只有特定的 IP 地址才能访问端点。这样可以提高安全性,防止未经授权的访问。

(二)防止信息泄露

  1. 谨慎暴露敏感信息
    • 在配置端点时,应该谨慎暴露敏感信息。例如,不要在 /info 端点中暴露数据库密码、API 密钥等敏感信息。
  2. 定期更新端点密码
    • 如果配置了端点的用户名和密码,应该定期更新密码,以提高安全性。同时,应该使用强密码,避免使用容易被猜测的密码。

九、常见问题及解决方案

(一)端点无法访问

  1. 问题描述
    • 在某些情况下,可能会出现端点无法访问的问题。例如,配置错误、网络问题、安全限制等都可能导致端点无法访问。
  2. 解决方案
    • 首先,检查配置文件是否正确配置了端点的路径和访问权限。其次,检查网络连接是否正常,是否存在防火墙或代理服务器的限制。最后,如果使用了安全认证和授权,检查用户名和密码是否正确。

(二)监控数据不准确

  1. 问题描述
    • 有时候,监控数据可能不准确,与实际情况不符。这可能是由于指标采集逻辑错误、数据采样不准确、系统负载变化等原因导致的。
  2. 解决方案
    • 检查指标采集逻辑,确保采集的数据准确反映应用程序的实际情况。可以使用测试数据进行验证,或者对比其他监控工具的数据。调整数据采样频率和方法,以适应系统负载的变化。同时,关注系统的负载情况,避免在高负载时采集数据,以免影响应用程序的性能。

(三)安全漏洞

 

  1. 问题描述
    • Spring Boot 监视器可能存在安全漏洞,如未授权访问端点、信息泄露等。这些漏洞可能会被攻击者利用,导致应用程序的安全受到威胁。
  2. 解决方案
    • 及时更新 Spring Boot 版本,以修复已知的安全漏洞。配置安全认证和授权,限制对端点的访问。避免在端点中暴露敏感信息,如数据库密码、API 密钥等。定期进行安全审计,检查应用程序的安全性。

十、总结与回顾

 

Spring Boot 监视器是一个强大的工具,用于监控和管理 Spring Boot 应用程序。它提供了一系列的端点,可以获取应用程序的运行状态、性能指标、配置信息等。通过合理配置和使用 Spring Boot 监视器,可以实时监控应用程序的运行状态,及时发现和解决问题,提高应用程序的可靠性和稳定性。

 

在实际应用中,需要根据应用程序的特点和需求,选择合适的端点进行监控,并进行必要的配置和定制。同时,需要注意安全问题,保护端点的访问,防止信息泄露。通过与其他监控系统和工具的集成,可以实现更强大的监控功能,提高应用程序的管理效率。

相关文章:

Spring Boot 监视器

一、Spring Boot 监视器概述 (一)什么是 Spring Boot 监视器 定义与作用 Spring Boot 监视器(Spring Boot Actuator)是一个用于监控和管理 Spring Boot 应用程序的工具集。它提供了一系列的端点,可以获取应用程序的运…...

Javascript如何获取指定网页中的内容?

这两天有一个需求,就是通过JS去获取网页的内容,当然,除了今天我要分享的这个方法以外,其实通过Ajax的Get方法也是可以实现这个功能的,但是Ajax就比较麻烦一些了,如果只是单纯的想要获取一下纯内容&#xff…...

第2章2.3立项【硬件产品立项的核心内容】

硬件产品立项的核心内容 2.3 硬件产品立项的核心内容2.3.1 第一步:市场趋势判断2.3.2 第二步:竞争对手分析1.竞争对手识别2.根据竞争对手分析制定策略 2.3.3 第三步:客户分析2.3.4 第四步:产品定义2.3.5 第五步:开发执…...

区块链:Raft协议

Raft 协议是一种分布式共识机制,这种机制适用于网络中存在一定数量的故障节点,但不考虑“恶意”节点的情况,所以更适合作为私有链和联盟链的共识算法。 在此协议中,每个节点有三种状态: 候选者 ,可以被选…...

【C语言】位运算

我们在上学计算机的第一节课,就应该见过这些常见的运算符。然而,你可能有印象,但记不住众多操作符当中的位运算符,以及它们的作用和使用场景,我们的大脑会选择性地遗忘它认为没用的信息,存储下那些“有实际…...

计算机体系结构之多级缓存、缓存miss及缓存hit(二)

前面章节《计算机体系结构之缓存机制原理及其应用(一)》讲了关于缓存机制的原理及其应用,其中提出了多级缓存、缓存miss以及缓存hit的疑问。故,本章将进行展开讲解, 多级缓存、缓存miss以及缓存hit存在的意义是为了保持…...

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线 主要介绍了 R78/G15 开发板基于 Arduino IDE 环境串口打印温湿度传感器 DHT11 和温度传感器 DS18B20 传感器的数据,并通过LabVIEW上位机绘制演…...

Oracle Fetch子句

FETCH 子句在 Oracle 中可以用来限制查询返回的行数 Oracle FETCH 子句语法 以下说明了行限制子句的语法: [ OFFSET offset ROWS]FETCH NEXT [ row_count | percent PERCENT ] ROWS [ ONLY | WITH TIES ]OFFSET 子句 OFFSET 子句指定在行限制开始之前要跳过行…...

Linux应用——线程池

1. 线程池要求 我们创建线程池的目的本质上是用空间换取时间,而我们选择于 C 的类内包装原生线程库的形式来创建,其具体实行逻辑如图 可以看到,整个线程池其实就是一个大型的 CP 模型,接下来我们来完成它 2. 整体模板 #pragma …...

95.【C语言】数据结构之双向链表的头插,头删,查找,中间插入,中间删除和销毁函数

目录 1.双向链表的头插 方法一 方法二 2.双向链表的头删 3.双向链表的销毁 4.双向链表的某个节点的数据查找 5.双向链表的中间插入 5.双向链表的中间删除 6.对比顺序表和链表 承接94.【C语言】数据结构之双向链表的初始化,尾插,打印和尾删文章 1.双向链表的头插 方法…...

leetcode82:删除排序链表中的重复节点||

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。 示例 1: 输入:head [1,2,3,3,4,4,5] 输出:[1,2,5]示例 2: 输入:head [1,1,1,2…...

【C#】使用.net9在C#中向现有对象动态添加属性

在 C# 中向现有对象动态添加属性并不像在 Python 或 JavaScript 中那样容易,因为 C# 是一种强类型语言。 但是,我们可以通过使用一些技术和库来实现这一点,例如扩展方法、字典等。本文将详细介绍如何在 C# 中实现这一点。ExpandoObject 方法 …...

Linux进程信号(信号的产生)

目录 什么是信号? 信号的产生 信号产生方式1:键盘 前台进程 后台进程 查看信号 signal系统调用 案例 理解进程记录信号 软件层面 硬件层面 信号产生方式2:指令 信号产生方式3:系统调用 kill系统调用 案例 其他产生信号的函数调用 1.rais…...

97_api_intro_imagerecognition_pdf2word

通用 PDF OCR 到 Word API 数据接口 文件处理,OCR,PDF 高可用图像识别引擎,基于机器学习,超精准识别率。 1. 产品功能 通用识别接口;支持中英文等多语言字符混合识别;formdata 格式 PDF 文件流传参&#xf…...

【算法】【优选算法】二分查找算法(上)

目录 一、二分查找简介1.1 朴素二分模板1.2 查找区间左端点模版1.3 查找区间右端点模版 二、leetcode 704.⼆分查找2.1 二分查找2.2 暴力枚举 三、Leetcode 34.在排序数组中查找元素的第⼀个和最后⼀个位置3.1 二分查找3.2 暴力枚举 四、35.搜索插⼊位置4.1 二分查找4.2 暴力枚…...

springboot初体验

目录 环境 controller 修改端口号 更改banner图标 运行结果 最核心的:自动装配 环境 jdk17springboot3.3.5maven3.8.2 controller controller层和启动类同级 package com.example.demo.controller; ​ import org.springframework.web.bind.annotation.RequestMapping;…...

使用kalibr_calibration标定相机(realsense)和imu(h7min)

vslam-evaluation/VINS/Installation documentation/4.IMU和相机联合标定kalibr_calibration.md at master DroidAITech/vslam-evaluation GitHub 目录 1.kalibr安装 1.1安装依赖项 1.2创建工作空间 1.3下载kalibr并编译 1.4设置环境变量 2.准备标定板 3.配置驱动和打…...

绿色工厂认定流程

以下是认定绿色工厂的一般流程: 编制年度创建计划 各省辖市、省直管县(市)会结合本地区重点产业发展现状,挑选一批基础条件良好、有创建意愿和条件的企业进行储备培育,并依据当地工业企业发展实际情况按年度制定绿色工…...

《Python游戏编程入门》注-第5章5

《Python游戏编程入门》的“Analog Clock示例程序”部分讲解了模拟时钟的实现方法。该模拟时钟可以通过时针、分针和秒针的旋转,显示当前时间,如图1所示。 图1 模拟时钟 1 绘制圆 从图1中可以看出,时钟的边缘是一个白色的圆,可以通过如图2所示的代码进行绘制。 图2 绘制圆…...

LangChain Ollama实战文献检索助手(二)少样本提示FewShotPromptTemplate示例选择器

本期是用样例来提示大模型生成我们想要的答案。即在输入中给定提示的样例,以及提示模板,然后匹配较相关的样例进行文献综述。 创建示例样本FewShotPromptTemplate 这里我用GTP-o1生成了几个回答,作为样本 samples [{"theme": &…...

K倍区间 C++

1230. K倍区间 - AcWing题库 一开始想到的用前缀和来做&#xff0c;时间复杂度为O(n^2),Time Limit Exceeded #include <iostream> #include <cstring> #include <algorithm> #include <cstdio>using namespace std;const int N 100010;int n,k; in…...

Linux - 弯路系列3:安装和编译libvirt-4.5.0

系统&#xff1a;Anolis8&#xff08;离线&#xff09; 目录 1、步骤2、make过程中的错误错误1&#xff1a;error: xdr_u_int64_t undeclared (first use in this function) 3、make install的错误错误1&#xff1a;/usr/bin/mkdir -p ""/usr/local/etc/libvirt/nwf…...

Jenkins插件使用问题总结

Git Push插件 插件介绍 主要是用于git推送代码到远程仓库中使用&#xff0c;插件地址 pipeline中使用 官方说明中只有一句代码gitPush(gitScm: scm, targetBranch: env.BRANCH_NAME, targetRepo: origin) 流水线语法中也做的不齐全所以一开始我老是设置错&#xff0c;导致代…...

u盘怎么重装电脑系统_u盘重装电脑系统步骤和详细教程【新手宝典】

u盘怎么重装电脑系统&#xff1f;一个u盘怎么重装电脑系统呢&#xff0c;需要将u盘制作成u盘启动盘pe&#xff0c;然后通过U盘启动盘进入pe进行安装系统&#xff0c;下面小编就教大家u盘重装电脑系统步骤和详细教程。 u盘启动是什么意思&#xff1f; U盘启动盘是一种具有特殊功…...

Sql server查询数据库表的数量

SELECT count(*) FROM sys.objects WHERE typeU --统计表数量 SELECT NAME FROM sys.objects WHERE typeU --列出表名称 或者 SELECT COUNT(*) FROM SysObjects Where XTypeU --统计表数量 SELECT Name FROM SysObjects Where XTypeU --列出表名称 --判断字…...

Linux学习笔记之软件包管理RPM与YUM

RPM包的管理 介绍 RPM&#xff08;RedHat Package Manager&#xff09;用于互联网下载包的打包及安装工具&#xff0c;它包含在某些Linux分发版中。他生成具有.RPM扩展名的文件。RPM类似Windows的setup.exe&#xff0c;这一文件格式虽然打上了RedHat的标志&#xff0c;但理念…...

15分钟学 Go 第 41 天:中间件的使用

第41天&#xff1a;中间件的使用 目标&#xff1a;学习如何在Go语言的Web服务中使用中间件 中间件&#xff08;Middleware&#xff09;是Web开发中的一种常见设计模式&#xff0c;通常用于处理请求和响应过程中的一些共通功能。比如&#xff1a;日志记录、认证授权、请求处理…...

《Python 与 SQLite:强大的数据库组合》

《Python 与 SQLite&#xff1a;强大的数据库组合》 一、Python 与 SQLite 的结合二、安装与连接&#xff08;一&#xff09;安装 SQLite 模块&#xff08;二&#xff09;连接到数据库 三、数据库操作&#xff08;一&#xff09;创建表格&#xff08;二&#xff09;插入数据&am…...

Golang | Leetcode Golang题解之第552题学生出勤记录II

题目&#xff1a; 题解&#xff1a; const mod int 1e9 7type matrix [6][6]intfunc (a matrix) mul(b matrix) matrix {c : matrix{}for i, row : range a {for j : range b[0] {for k, v : range row {c[i][j] (c[i][j] v*b[k][j]) % mod}}}return c }func (a matrix) p…...

Vue3 常用代码指南手抄,超详细 cheatsheet

一、Vue3 基础 1.1 创建 Vue3 项目 使用 Vite 创建 npm create vitelatest my-vue-app -- --template vue cd my-vue-app npm install npm run dev使用 Vue CLI 创建 npm install -g vue/cli vue create my-vue-app1.2 项目结构 my-vue-app ├── node_modules ├── pu…...

网站页面设计的重要性/网站快速上排名方法

二分查找 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值存在返回下标&#xff0c;否则返回 -1。 示例 1: 输入: nums [-1,0,3,5,9,12], target 9 输出: 4 解…...

黄页网站介绍/营销渠道的三个类型

我们已经知道了值类型和引用类型,但是一定要区别"值类型和值参数","引用类型和引用参数",这一点是最容易让初学者搞晕的,说白了,所谓"类型",就是一种相似或相同的东西的抽象,它表示了一种相类似,例如,把东西分"类",此时这个类就是我们…...

华强北网站建设设计/百度指数热度榜

(化学泥浆)聚合物泥浆在地下连续墙施工中发挥巨大的优势不需要泥浆搅拌池化学泥浆的添加量10000粉之4(粘度达到25秒左右)&#xff0c;所以就是省事。只需要一名工把泥浆粉顺着的水流冲入池里或者槽里即可形成良好的浆液。由于化学泥浆是速溶型产品&#xff0c;1-2分基本达到80%…...

做网站的不足 心得/优化设计电子课本

导航在这里&#xff1a;白泽四足机器人导航贴 1.给esp8266模块烧录透传程序 这个程序烧录进esp8266模块之后&#xff0c;它就可以接收手机指令了。 //修改自&#xff1a;https://blog.csdn.net/wangke0809/article/details/70146378?ops_request_misc%257B%2522request%255F…...

百度网站公司信息推广怎么做/seo在线优化工具 si

2019年6月28日&#xff0c;在中国国际软件博览会上&#xff0c;蚂蚁金服金融科技产品技术总监杨冰发表主题演讲&#xff0c;分享了蚂蚁金服在过去的十多年里&#xff0c;是如何通过商业创新与技术创新的双轮驱动&#xff0c;创造出数字时代的普惠金融“奇迹”。 蚂蚁金服金融科…...

自己做营销网站/网站推广seo是什么

相关资料&#xff1a; 《21天学通Java Web开发》 结果总结&#xff1a; 1.一类可以在客户端显示的注释&#xff0c;即HTML注释。2.<!-- -->&#xff0c;中间为注释部分。3.如果使用MyEclipse编写JSP&#xff0c;提示无法保存&#xff0c;需要增加一行“<% page pageEn…...