rsyslog学习

news2024/9/22 23:16:40

rsyslog是什么

RSYSLOG(Remote System Logging)是一个开源的日志处理工具,用于在 Linux 和 Unix 系统上收集、处理和转发日志。它是一个健壮且高性能的日志处理程序,可以替换 Syslogd 作为标准的系统日志程序。RSYSLOG 提供了许多高级功能,如支持多种协议、过滤消息、模板处理和热插拔输出模块等。

RSYSLOG 具有以下主要特点:

  1. 高性能:相较于传统的 Syslogd,RSYSLOG 在日志处理和转发上提供了更高的性能。

  2. 可扩展性:通过插件和模块,可以轻松地扩展 RSYSLOG 的功能,并支持不同的输入/输出目标,例如数据库、消息队列、文件、网络等。

  3. 过滤和处理能力:RSYSLOG 提供了高级过滤和处理功能,可以基于正则表达式、属性比较、IF/THEN 构造等对日志进行筛选和处理。这使得 RSYSLOG 能更好地满足实际应用的要求。

  4. 支持多种协议:RSYSLOG 支持多种日志传输协议,如 TCP、UDP、TLS(加密日志传输)等。这为日志传输提供了更多选择。

  5. 可配置性:RSYSLOG 提供了一个灵活的配置文件(rsyslog.conf),可以通过这个文件调整日志收集、处理和转发的细节。

RSYSLOG 在许多 Linux 发行版(如 Ubuntu、CentOS 或 Debian 等)中是默认的系统日志工具。对于运维人员而言,熟悉和掌握 RSYSLOG 的使用是很有价值的,因为它可以帮助他们更好地监控和管理系统日志。

rsyslog在服务器端和客户端怎样配置(udp方式)

要配置RSYSLOG以使用UDP方式在服务器端和客户端之间传输日志,请按照以下步骤操作。

**服务器端配置**

1. 首先,打开RSYSLOG配置文件。通常,该文件位于`/etc/rsyslog.conf`。使用文本编辑器打开该文件,如`sudo nano /etc/rsyslog.conf`。

2. 在配置文件中,取消注释或添加以下行以启用UDP接收器:

module(load="imudp")
input(type="imudp" port="514")

这将加载`imudp`模块并侦听端口514上的UDP日志信息。

3. (可选)您还可以配置服务器端将远程日志存储在单独的文件中,以便于管理;在配置文件中添加以下行:

$template RemoteLogs,"/var/log/remote/%HOSTNAME%.log"
*.* ?RemoteLogs

这将为每个远程客户端创建一个单独的日志文件,文件名格式为`<客户端主机名>.log`。

4. 保存并关闭配置文件。

5. 重新启动RSYSLOG服务以应用更改:

sudo systemctl restart rsyslog

**客户端配置**

1. 打开客户端的RSYSLOG配置文件,通常位于`/etc/rsyslog.conf`。使用文本编辑器打开该文件,例如`sudo nano /etc/rsyslog.conf`。

2. 在配置文件中,添加以下行以将日志消息发送到远程服务器(将`<your_server_ip>`替换为服务器的IP地址):

*.* @<your_server_ip>:514

注意`@`符号表示使用UDP方式。另外,端口号"514"也应与服务器端的配置一致。

3. 保存并关闭配置文件。

4. 重新启动RSYSLOG服务以应用更改:

sudo systemctl restart rsyslog

现在,客户端应开始将其日志消息通过UDP方式发送到服务器。服务器将按照配置文件中指定的设置接收并存储这些日志消息。

rsyslog客户端怎样通过udp发送消息,logger怎么用

你可以使用 logger 命令在RSYSLOG客户端上通过UDP发送消息。logger 是一个用于在UNIX和类UNIX操作系统上添加日志的命令行实用程序。通过指定远程服务器的IP地址和端口,logger 可以将日志消息发送到该服务器。

假设你已经按照前面提到的指南配置了RSYSLOG客户端,那么你可以使用以下命令通过UDP发送日志消息(将<your_server_ip>替换为服务器的IP地址):

logger --udp --server <your_server_ip> --port 514 "This is a test log message."

这里:

  • --udp 表示使用UDP协议。
  • --server 指定了远程服务器的IP地址。
  • --port 指定了远程服务器的UDP端口号。
  • This is a test log message. 是要发送的日志消息。

执行此命令后,日志消息将被发送到指定的远程服务器,服务器应根据其配置文件接收并处理消息。

同时,logger 还具有其他选项可以用于定制日志消息。例如:

  • -p:设置消息的优先级,例如-p local0.info(默认为:user.info)。
  • -t:为消息添加TAG,例如-t MyCustomTag(默认为:logger)。

要获取有关 logger 的更多信息和选项,您可以在终端中输入 man logger 或 logger --help 以查看帮助文档。

rsyslog内部处理机制

RSYSLOG 的内部处理机制主要包括以下几个阶段:

1. **输入模块(Input Modules)**:输入模块负责从各种来源收集日志数据。输入模块可以获取来自文件、内核、程序、网络(TCP/UDP)等的日志。RSYSLOG 提供了一系列内置模块,同时还支持自定义开发的模块。输入模块将收集到的数据转换成公共格式,然后传递给主管道进行处理。

2. **主管道(Main Message Queue)**:主管道是 RSYSLOG 内部处理过程的核心。日志消息从输入模块进入主管道,然后根据配置文件中指定的规则进行处理。主管道可以进行数据过滤、转换、聚合等操作。配置文件中定义的各种条件、模板和动作都在主管道中执行。

3. **动作队列(Action Queues)**:主管道处理完日志消息后,消息会进入动作队列。动作队列负责将日志消息以异步方式传递给对应的输出模块。动作队列可以为每个输出模块维护一个单独的队列,确保输出模块可以独立地处理消息,而不影响其他模块。动作队列还可以使用不同的调度策略、磁盘缓存和流控等机制,提高系统的稳定性。

4. **输出模块(Output Modules)**:输出模块负责将日志消息写入最终的目标。RSYSLOG 支持多种输出目标,包括文件、数据库、远程服务器、消息队列等。输出模块会从动作队列中获取日志消息,然后根据指定的格式和设置将消息写入对应的目标。

RSYSLOG 的内部处理机制采用了模块化、分层的设计,提供了丰富的功能和灵活性。通过合理配置输入、主管道、动作队列和输出模块,您可以实现各种复杂的日志处理需求。

rsyslog中的队列

RSYSLOG 中的队列是一个用于在输入模块、主管道、动作队列之间传递日志消息的缓冲区。队列以异步方式处理日志消息,提高了 Rsyslog 的性能和稳定性。在 Rsyslog 中有两种队列类型:主消息队列(Main Message Queue)和动作队列(Action Queues)。

1. **主消息队列(Main Message Queue)**

主消息队列是 Rsyslog 中的主要队列。当输入模块接收到日志消息时,它们首先存储在主消息队列。接着,Rsyslog 根据配置文件中定义的规则、过滤器和模板处理这些日志消息。经过处理后,日志消息会被分发到相应的动作队列。

主消息队列具有以下特点:

- 异步处理:主消息队列能够确保输入模块在将数据写入队列后立即返回,而不需要等待主管道处理完成。
- 内存限制:主消息队列可以配置内存限制,当队列达到最大内存值时,可以选择丢弃消息或将其写入磁盘。
- 调度策略:Rsyslog 可以在主消息队列中实现不同的调度策略,如直接、平衡、随机等。

2. **动作队列(Action Queues)**

当主消息队列处理完日志消息后,消息会进入相应的动作队列,动作队列负责将消息传递给对应的输出模块。每个输出目标都可以有一个单独的动作队列。

动作队列具有以下特点:

- 异步处理:动作队列确保输出模块在接收到消息后不会阻塞主消息队列的处理速度。
- 独立性:每个输出目标可以维护一个单独的动作队列,确保输出模块之间不会相互干扰。
- 磁盘缓存:动作队列支持将消息在磁盘上进行缓存,当内存队列溢出或系统未响应时,缓存的消息可以重启后继续处理。
- 流控制:通过流控制机制,动作队列能够限制输出模块的处理速度,以避免过载系统。

要配置 Rsyslog 队列,你需要编辑配置文件(通常位于 `/etc/rsyslog.conf` )。配置文件中,你可以设置队列的内存限制、磁盘缓存、调度策略等参数。具体的配置选项和语法可以参考 Rsyslog 官方文档:https://www.rsyslog.com/doc/v8-stable/configuration/queues.html

rsyslog中的多线程是在哪个模块中

RSYSLOG 中的多线程支持主要适用于输入模块、动作队列和部分输出模块。通过多线程,RSYSLOG 可以更有效地处理并发日志事件,并提高其处理能力和性能。

1. **输入模块**: 对于多个输入源(如网络、文件、系统日志等)的处理,输入模块可以采用多线程。RSYSLOG 中的某些输入模块已实现了多线程处理,如 `imrelp` (用于 RELP 协议) 和 `imtcp` (用于 TCP 协议)。这些输入模块可以在独立的线程中接收和处理日志消息,减轻了主消息队列的负担。

2. **动作队列**: 动作队列是 RSYSLOG 中实现多线程处理的关键部分。每个动作队列可以在独立的线程中运行,将日志消息传递给对应的输出模块。这样一来,不同的输出目标之间可以实现并行处理,提高了整体性能。

3. **输出模块**: 部分输出模块也支持多线程处理。例如,`omfwd` (用于将日志消息转发到远程服务器) 和 `omelasticsearch` (用于将日志消息传输到 Elasticsearch)。这些多线程输出模块可以在独立的线程中处理消息传输任务,防止阻塞其他输出操作。

综上所述,RSYSLOG 的多线程支持主要集中在输入模块、动作队列和部分输出模块。通过多线程处理,RSYSLOG 可以实现更高效的日志处理和传输。

rsyslog中的队列是无锁队列

RSYSLOG 中的队列采用了无锁队列(Lock-Free Queue)的设计。无锁队列可以在多线程环境下高效并发地操作,避免了因为锁争用导致的性能问题。相比于传统的基于锁的队列,无锁队列在保证线程安全的前提下,节省了锁操作的开销,从而提高了性能。

RSYSLOG 之所以采用无锁队列设计,主要是为了在多线程处理模式下提供更好的性能。当输入模块、主消息队列、动作队列和输出模块之间存在多线程并发时,无锁队列可以降低线程之间的争用,减少等待时间,提高吞吐量。

需要注意的是,虽然无锁队列有较好的性能优势,但在实现和调试方面会比基于锁的队列更加复杂。在架构和开发 RSYSLOG 之初,开发团队充分权衡了这些因素,最终选择了无锁队列作为 RSYSLOG 的核心队列实现。

总之,RSYSLOG 中的队列是采用无锁队列设计的,这有助于在多线程环境下提高并发性能,避免锁争用带来的性能问题。

rsyslog可以用在公网收集日志吗

RSYSLOG 本身具备通过公网收集日志的能力。然而,将 RSYSLOG 配置在公网中的日志收集服务时,需要注意一些安全和可靠性方面的问题。以下是一些建议,可以帮助你更安全地在公网部署 RSYSLOG :

1. **使用加密协议**:使用如 RELP(Reliable Event Logging Protocol)或者 TLS/SSL 以加密方式传输日志数据。这可以提高数据传输的安全性,防止日志数据被截获或篡改。

2. **强制身份验证**:为发送和接收方配置身份验证,以确保只有合法的客户端和服务器之间才能传输日志数据。例如,可以使用 TLS/SSL 证书进行双向认证。

3. **使用防火墙限制访问**:配置防火墙限制访问 RSYSLOG 服务器的来源 IP 和端口,以减少潜在的恶意攻击。

4. **遵循最小权限原则**:确保 RSYSLOG 以最小权限运行,以减少安全漏洞风险。避免使用 root 用户运行 RSYSLOG 进程。

5. **定期更新和打补丁**:跟踪和应用 RSYSLOG 及其依赖库的安全更新,及时修补潜在的安全漏洞。

6. **日志审计和监控**:定期审查和监控 RSYSLOG 服务器的日志记录,以便迅速发现和应对潜在的安全威胁。

综上,虽然 RSYSLOG 可以用于公网日志收集,但你需要确保采取有效的安全措施来降低风险。在公网环境下,保护日志数据的安全性和确保系统的可靠性非常重要。

怎样优化rsyslog的性能

在详细解释如何优化 RSYSLOG 性能之前,需要了解影响 RSYSLOG 性能的因素主要包括:硬件资源、输入和输出模块的配置、队列配置、过滤器和模板等。下面详细介绍一些优化 RSYSLOG 性能的策略:

1. **使用多线程输入模块**:对于多个输入源(如网络、文件、系统日志等)的处理,使用多线程输入模块可以缩短处理时间并提高并发性能。例如,选择使用 `imtcp` 和 `imrelp` 等支持多线程的输入模块。

2. **调整队列配置**:
   - *使用内存队列*:在内存队列中存储日志消息比磁盘队列更快。如果在容量和数据可靠性方面允许的情况下,可以使用内存队列代替磁盘队列。
   - *增加队列大小*:根据系统负载情况,增加主消息队列和动作队列的大小,以便在高流量情况下避免队列阻塞。
   - *使用批量处理*:通过调整队列的高窗口水位线、低窗口水位线和批量处理数,可以减少每次处理日志消息时的系统开销。

3. **优化日志过滤器和模板**:
   - 使用简单的过滤器规则,避免使用复杂的正则表达式,以减少规则匹配过程中的计算开销。
   - 优化模板,确保模板格式化过程简洁高效。
   - 如果有多个类似的过滤条件,可以合并为一个条件,以简化规则和提高性能。

4. **调整 I/O 缓冲区大小和批量处理设置**:
   - 根据系统环境和网络条件,调整 I/O 缓冲区大小,以减少 I/O 阻塞和等待时间。
   - 启用批量处理功能,可以减少每次处理日志消息时的系统开销。

5. **使用高性能硬件和网络设备**:
   - 高性能的 CPU、内存和存储设备可以提高 RSYSLOG 处理能力。
   - 使用高带宽、低延迟的网络设备,保证日志消息快速传输。

6. **限制无用日志的接收和处理**:
   - 尽量过滤掉不相关、无用的日志,避免额外的处理和存储开销。
   - 在配置中设置日志丢弃功能,以应对突发流量过载。

7. **调整 RSYSLOG 各项配置**:
   - 配置文件中增加 `$ActionQueueType LinkedList`,设置队列类型为链表。
   - 设置 `$ActionResumeRetryCount` 为较大值,以减少失败和重连尝试导致的资源浪费。
   - 调整 `$ActionQueueDequeueBatchSize`,设置更高的批量处理数目。

8. **监控和调整 RSYSLOG 性能**:
   - 定期监控 RSYSLOG 的性能指标(如 CPU 占用、内存占用等),以便针对性地进行调优。
   - 及时发现潜在的性能瓶颈,进一步优化配置和使用策略。

这些优化策略可以帮助你在实际环境中提高 RSYSLOG 的性能。不过,在尝试这些优化策略时,请务必根据自己的系统环境和需求进行调整。并通过测试和监控,确定最佳配置。

rsyslog匹配解析日志

当然可以。这里有一个更复杂的示例,展示了如何使用 rsyslog 配置文件中的过滤器和模板来匹配、解析和处理日志消息。这个示例包括从日志消息中提取关键信息,同时将不同类型的日志消息写入不同的日志文件。

首先,我们在 rsyslog 配置文件中定义两个模板,分别针对 error 和 info 日志级别:

# Custom templates
$template ErrorTemplate, "[%timestamp% %host%] %msg%\n"
$template InfoTemplate, "[%timestamp% %host%] %msg%\n"

接下来,我们创建一个过滤器,该过滤器首先检查消息是否包含 "error" 或 "info"。然后我们使用正则表达式提取日志消息中的一些关键信息,如用户 ID 和错误代码,并根据日志级别将消息写入不同的日志文件:

# Define regular expressions for key information extraction
$!UID=regex:^(?:.*UserID[:=]{1}\s?)(\d+).*
$!ErrorCode=regex:^(?:.*ErrorCode[:=]{1}\s?)(\w+).*

# Filter for error messages
:msg, contains, "error" {
  # Extract key information using regular expressions
  set $!UID = re_extract($!msg, $!UID, 0, "", "");
  set $!ErrorCode = re_extract($!msg, $!ErrorCode, 0, "", "");

  # Save message with ErrorTemplate
  action(type="omfile" file="/var/log/custom_error.log" template="ErrorTemplate")
  stop # Stop processing this message
}

# Filter for info messages
:msg, contains, "info" {
  # Extract key information using regular expressions
  set $!UID = re_extract($!msg, $!UID, 0, "", "");

  # Save message with InfoTemplate
  action(type="omfile" file="/var/log/custom_info.log" template="InfoTemplate")
  stop # Stop processing this message
}

在这个示例中,我们定义了两个过滤器,一个用于处理包含 "error" 的日志消息,另一个用于处理包含 "info" 的日志消息。在每个过滤器中,我们使用正则表达式提取关键信息,并将消息写入不同的日志文件。如果日志消息与过滤器中的条件匹配,则通过 stop 命令阻止进一步处理该日志消息。

这个示例展示了使用 rsyslog 配置文件进行更复杂的匹配、解析和处理日志消息。您可以根据自己的需求调整过滤器的逻辑,以满足特定的日志处理场景。

在上面的示例中,我们使用 re_extract() 函数和正则表达式提取日志消息中的关键信息。以下两行定义了提取用户 ID 和错误代码所需的正则表达式:

$!UID=regex:^(?:.*UserID[:=]{1}\s?)(\d+).*
$!ErrorCode=regex:^(?:.*ErrorCode[:=]{1}\s?)(\w+).*

接下来,在每个过滤器中,我们使用 set 语句与 re_extract() 函数结合前面定义的正则表达式来实际提取关键信息:

set $!UID = re_extract($!msg, $!UID, 0, "", "");
set $!ErrorCode = re_extract($!msg, $!ErrorCode, 0, "", "");

re_extract() 函数的参数解释如下:

  1. $!msg - 输入日志消息。
  2. $!UID 或 $!ErrorCode - 用于在日志消息中查找指定内容的正则表达式。
  3. 0 - 子匹配的起始索引值,通常设置为 0(第一个子匹配)。
  4. "" - 如果找不到匹配项,返回的默认值,此处为空字符串。
  5. "" - 分隔符,仅在提取多个子匹配时使用,此处为空字符串。

所以,在这个示例中,我们使用 re_extract() 函数和正则表达式从日志消息中提取用户 ID 和错误代码。提取到的信息随后可以用于进一步的处理和记录。

rsyslog的action有哪些

action() 是用于定义 rsyslog 输出操作的配置指令。type 参数指定了要使用的输出模块。rsyslog 提供了多种输出模块,您可以根据需求选择不同的模块。以下是一些常见的输出模块类型:

  1. omfile:将日志消息写入到本地文件系统中的文件。 示例:

    action(type="omfile" file="/var/log/example.log")
    
  2. omfwd:将日志消息转发到远程主机,通过 TCP、UDP 或 RELP 协议。 示例:

    action(type="omfwd" target="192.168.1.100" port="514" protocol="udp")
    
  3. omrelp:通过可靠事件日志协议(RELP)将日志消息转发到远程主机。 示例:

    action(type="omrelp" target="192.168.1.100" port="20514")
    
  4. ommail:将日志消息通过电子邮件发送。 示例:

    action(type="ommail" server="mail.example.com" mail.from="rsyslog@example.com" mail.to="admin@example.com" subject="Rsyslog Alert")
    
  5. omprog:将日志消息发送到外部程序进行处理。 示例:

    action(type="omprog" binary="/path/to/your/script.sh")
    
  6. omelasticsearch:将日志消息发送到 Elasticsearch 服务器。 示例:

    action(type="omelasticsearch" server="localhost" serverport="9200" searchIndex="rsyslog_test")
    
  7. omkafka:将日志消息发送到 Apache Kafka 集群。 示例:

    action(type="omkafka" topic="rsyslog_test" broker=["localhost:9092"])
    
  8. ommongodb:将日志消息保存到 MongoDB 数据库。 示例:

    action(type="ommongodb" server="localhost" db="your-db-name" collection="your-collection-name")
    
  9. ommysql:将日志消息保存到 mysql 数据库。 示例:

    action(type="ommysql" server="localhost" db="your_db_name" uid="your_db_user" pwd="your_db_password")
    
  10. 上述列表中的输出模块只是 rsyslog 支持的部分类型。您可以在 rsyslog 文档中找到更多输出模块和详细信息:rsyslog documentation - Output modules

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1249168.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何利用4G路由器构建茶饮连锁店物联网

随着年轻消费群体的增长&#xff0c;加上移动互联网营销的助推&#xff0c;各类新式奶茶消费风靡大街小巷&#xff0c;也促进了品牌奶茶连锁店的快速扩张。 在店铺快速扩张的局势下&#xff0c;品牌总部对于各间连锁店的零售统计、营销规划、物流调配、卫生监测、安全管理等事务…

qs-一个序列化和反序列化的JavaScript库

起因 一个业务场景中&#xff0c;最终得到一串字符"status[0]value1&status[1]value2" 通过解析&#xff0c;理应得到一个数组&#xff0c;却得到一个对象 于是展开问题排查 最终发现是qs.parse 这个地方出了问题 排查结果 qs解析这种带下标的字符串时&#xff…

视频号小店如何上架商品?新手应该怎么做?实操分享!

我是电商珠珠 视频号小店开通之后&#xff0c;很多人都不明白怎么去进行商品上架的。 其实&#xff0c;上架方式一共有两种&#xff0c;接下来我详细的来给大家讲一讲具体的上架流程。 一、软件 在商品上架的时候&#xff0c;我一般会用到软件来采集商品上架。 软件上架的…

19.oracle11g中的游标

oracle11g中的游标 一、案例引入二、什么是游标三、隐式游标1、隐式游标的属性2、创建语法3、示例 四、显示游标1、显示游标的属性2、创建语法3、示例 五、REF游标1、REF游标的属性2、创建语法3、示例 六、循环游标1、 循环游标的作用2、用for 与 loop 创建3、示例 一、案例引入…

渗透测试信息搜集

注&#xff1a;太简陋了&#xff0c;不忍直视 渗透测试信息收集 黑盒测试&#xff1a;给域名 灰盒测试&#xff1a;给域名、账户(或密码) 白盒测试&#xff1a;给域名、账户、密码 授权书 对安全公司进行授权 攻防演习 是对个人进行授权 渗透测试&#xff1a;&#xff0…

【2023.11.24】Mybatis基本连接语法学习➹

基本配置 1.如果使用Maven管理项目&#xff0c;需要在pom.xml中配置依赖。 2.安装Mybatis-3.5.7.jar包 3.进行XML配置&#xff1a;这里将文件命名为mybatis-config.xml 配置数据库连接XML文件 <?xml version"1.0" encoding"UTF-8" ?> <!DO…

【华为数通HCIP | 网络工程师】821-IGP高频题、易错题之OSPF(5)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

周报6_YMK

周报6 本周主要在看代码&#xff1a;看Medusa头的代码发现不是很了解base_model那部分&#xff0c;所以又去看了llama2的代码和一些相关博客。 重写了一部分佛山中医学院项目的代码&#xff0c;更规范一些。 调研CosmoFlow&#xff0c;是一个深度学习预测宇宙参数的模型&…

面试题:Java 对象不使用时,为什么要赋值 null ?

文章目录 前言示例代码运行时栈典型的运行时栈Java的栈优化提醒 GC一瞥提醒 JVM的“BUG”总结 前言 最近&#xff0c;许多Java开发者都在讨论说&#xff0c;“不使用的对象应手动赋值为null“ 这句话&#xff0c;而且好多开发者一直信奉着这句话&#xff1b;问其原因&#xff…

python命令行交互 引导用户选择宠物

字多不看&#xff0c;直接体验 代码 以下代码将在命令行中&#xff0c;引导用户选择一个或者多个宠物&#xff0c;并反馈用户选择的宠物 # -*- coding:UTF-8 -*- """ author: dyy contact: douyaoyuan126.com time: 2023/11/22 15:19 file: 在命令行中引导用户…

实例分割12篇顶会论文及代码合集,含2023最新

同学们&#xff0c;你们觉得视觉经典四个任务中哪个最难&#xff1f;我个人觉得是实例分割。 因为它既具备语义分割的特点&#xff0c;需要做到像素层面上的分类&#xff0c;也具备目标检测的一部分特点&#xff0c;即需要定位出不同实例&#xff0c;即使它们是同一种类。 但…

C# 时间计算(二)

目录 五、时间比较 六、时间数据转换 七、时间间隔计算 八、获取网络时间 九、时间戳 十、时区时间 结束 概述 在 C# 中&#xff0c;DateTime 用于处理日期和时间的内置类&#xff0c;其值范围为 00&#xff1a;00&#xff1a;00 (午夜) &#xff0c; 0001年1月1日&…

高压放大器应用领域分享:关于电磁波的极化,看这篇文章就够了!

谈到电磁波&#xff0c;除了频率和幅度之外&#xff0c;还有一个比较重要的方面就是&#xff1a;极化。极化&#xff0c;就是指波振动的平面&#xff0c;电磁波的传播是由相互垂直的电场和磁场产生的。因此存在电场和磁场两个相互垂直的振荡平面&#xff0c;所以呢&#xff0c;…

力扣 3. 无重复字符的最长子串

题目 题解 方法 public static int lengthOfLongestSubstring(String s) {HashSet<Character> charSet new HashSet<Character>();int i 0,l0,max0;for (int j 0; j < s.length(); j) {while (charSet.contains(s.charAt(j))) {charSet.remove(s.charAt(l…

一个干净的前端架构是什么样的?

干净的前端架构,围绕这个话题有很多原则&#xff1a; SOLID、KISS&#xff08;保持简单明了&#xff09;、DRY&#xff08;不要重复自己&#xff09;、DDD&#xff08;领域驱动设计&#xff09;等等。 为什么需要前端架构&#xff1f; 功能性和非功能性的要求不仅应该在后端…

如何处理git多分支

本篇文章主要处理以下两种多分支问题 如何将自己在本地的修改上传到一个新的Git分支&#xff08;比如用于测试&#xff0c;不合并进main分支&#xff09;&#xff1f;如何在一个新的本地仓库拉取一个项目的非main分支&#xff0c;并处理他们关联关系&#xff1f; 1. 将自己在…

智能条件单具体操作步骤,解放你投资双手!

一般我们说到量化交易都觉得很困难&#xff0c;写策略难&#xff0c;看python难&#xff0c;不会使用程序难&#xff0c;电脑交易不方便难&#xff0c;今天我们来看看手机电脑都可以使用的量化基础条件单的操作。迈入量化第一步&#xff0c;条件单的使用。 很多投资者不清楚条件…

C语言——输入一个4位正整数,输出其逆数。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,j 0;int a1,a2,a3,a4;printf("输入一个4位正整数&#xff1a;\n");scanf("%d",&i);a1 i/1000; a2 i/100%10; a3 i/10%10; a4 i%10; printf("千位a1%d,百位a…

SQL 语句 UNION 连接,查询字段数量必须一致

MySQL&#xff1a;The used SELECT statements have a different number of columns 执行SQL报错&#xff1a;The used SELECT statements have a different number of columns 以上翻译&#xff1a;使用的SELECT语句具有不同数量的列 原因&#xff1a;我们在 SQL 语句中使用…

Java 简单配置环境变量,切换多个jdk版本

文章目录 前言一、jdk下载二、配置环境变量三、查看jdk版本四、配置多个jdk五、切换jdk 前言 windows 配置jdk环境变量&#xff0c;如果项目没有规定使用的jdk版本的话&#xff0c;建议使用jdk8&#xff0c;这是最常用也是最稳定的版本 一、jdk下载 https://www.oracle.com/ja…