Kafka ACL(访问控制列表)介绍

文章目录

  • Kafka ACL(访问控制列表)介绍
  • 1. Kafka ACL 的基本概念
    • 1.1 Kafka ACL 的目标
    • 1.2 Kafka ACL 的组成部分
  • 2. Kafka 支持的资源类型
    • 2.1 Topic(主题)
    • 2.2 Consumer Group(消费者组)
    • 2.3 Cluster(集群)
    • 2.4 TransactionalId(事务 ID)
    • 2.5 Delegation Token(委托令牌)
    • 2.6 ACL 管理与资源类型的结合
  • 3. Kafka ACL 操作命令
    • 3.1 列出现有的 ACL 配置
    • 3.2 添加 ACL 权限
    • 3.3 删除 ACL 权限
    • 3.4 删除所有 ACL 权限
    • 3.5 查看特定资源的 ACL 配置
    • 3.6 仅允许或拒绝特定操作
    • 3.7 组合 ACL 配置
    • 3.8 使用 Wildcard(通配符)进行配置
  • 5. Kafka ACL 管理最佳实践
    • 5.1 最小权限原则(Principle of Least Privilege)
    • 5.2 使用通配符来减少 ACL 配置的复杂性
    • 5.3 强化集群安全性:控制管理权限
    • 5.4 定期审计和监控 ACL 配置
    • 5.5 使用拒绝(Deny)策略明确禁止操作
    • 5.6 结合 Kerberos 和 SASL 强化身份认证
    • 5.7 删除不再需要的 ACL 配置
  • 6. 总结

Kafka ACL(访问控制列表)介绍

Kafka 的 ACL(Access Control List) 是一种用于控制访问权限的机制,它允许 Kafka 集群管理员细粒度地管理用户和应用程序对 Kafka 资源(如主题、消费者组、集群等)的访问权限。通过设置 ACL,Kafka 集群的安全性得到了有效保障,防止未授权的用户执行敏感操作。

1. Kafka ACL 的基本概念

1.1 Kafka ACL 的目标

Kafka ACL 的主要目标是通过细粒度的访问控制来:

  • 限制对敏感资源的访问:确保只有授权的用户或客户端能够执行某些操作(如生产、消费、创建、删除主题等)。
  • 保障数据的安全性:通过控制哪些用户可以访问哪些数据,防止数据泄露或误操作。
  • 管理集群资源:通过对集群管理操作的权限控制,避免不当操作对集群稳定性造成影响。

1.2 Kafka ACL 的组成部分

Kafka ACL 主要由以下几个组成部分:

(1)Principal(主体)

Principal 指执行操作的用户或客户端标识,Kafka 支持两种类型的主体:

  • User:表示特定的用户,格式为 User:<username>
  • ClientId:表示客户端标识,格式为 ClientId:<client-id>

例如,User:alice 表示名为 Alice 的用户,而 ClientId:producer1 表示客户端标识为 producer1 的生产者。

(2)Operation(操作)

Operation 定义了可以执行的操作类型,常见的操作包括:

  • Read:读取操作,允许消费者从主题中读取消息。
  • Write:写入操作,允许生产者将消息发送到主题。
  • Create:创建资源,允许创建新主题或其他资源。
  • Delete:删除资源,允许删除主题等资源。
  • Alter:修改资源,允许修改主题的配置(如分区数等)。
  • Describe:查看资源元数据,允许查看主题、消费者组、集群等的描述信息。
  • ClusterAction:对集群的管理操作,如集群的状态查看、控制等。

(3)Resource(资源)

Resource 是指对哪些 Kafka 资源进行权限控制,Kafka 支持以下几种类型的资源:

  • Topic:主题,是 Kafka 中最常见的资源类型。ACL 主要用于控制对主题的生产和消费权限。
  • Group:消费者组,控制用户或客户端对消费者组的访问。
  • Cluster:集群资源,控制集群级别的操作权限,例如创建、删除主题。
  • TransactionalId:事务 ID,主要用于控制事务操作的权限。

(4)Permission(权限)

Permission 表示是否允许或拒绝特定的操作,Kafka 的 ACL 中有两种权限:

  • Allow:允许执行指定的操作。
  • Deny:拒绝执行指定的操作。

管理员可以通过 AllowDeny 来控制特定用户或客户端对资源的操作权限。

2. Kafka 支持的资源类型

Kafka 支持多种 资源类型,每种资源类型可以应用访问控制列表(ACL)来管理对该资源的访问权限。这些资源类型包括 主题(Topic)消费者组(Consumer Group)集群(Cluster) 等。

2.1 Topic(主题)

Topic 是 Kafka 中最常见的资源类型。它用于存储和组织消息,生产者向主题发送消息,而消费者从主题读取消息。Kafka 的 ACL 可以精确地控制对主题的读写操作。

常见的操作权限

  • Read:允许从主题读取消息。
  • Write:允许向主题写入消息。
  • Create:允许创建新的主题。
  • Delete:允许删除主题。
  • Alter:允许修改主题的配置(如分区数量、保留策略等)。
  • Describe:允许查看主题的元数据(如分区数、日志保留策略等)。

示例

  • 允许用户 alice 写入 test-topic

    bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:alice --operation Write --topic test-topic
    
  • 允许用户 bob 读取 test-topic

    bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:bob --operation Read --topic test-topic
    

2.2 Consumer Group(消费者组)

Consumer Group 是 Kafka 中的一种资源类型,它表示一个消费者实例的集合,负责从主题中消费消息。多个消费者可以组成一个消费者组,每个消费者组内的多个消费者共同消费一个主题的消息。Kafka 的 ACL 允许对消费者组设置访问控制权限。

常见的操作权限

  • Read:允许消费者组读取消息。
  • Describe:允许查看消费者组的状态、偏移量等元数据。

示例

  • 允许用户 alicegroup1 消费消息:

    bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:alice --operation Read --group group1
    
  • 允许用户 bob 查看 group1 的消费者组状态:

    bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:bob --operation Describe --group group1
    

2.3 Cluster(集群)

Cluster 是 Kafka 集群的资源类型,表示 Kafka 系统本身。集群级别的 ACL 允许对整个集群进行管理操作,如创建、删除、修改主题等操作。

常见的操作权限

  • Create:允许创建主题。
  • Delete:允许删除主题。
  • Describe:允许查看集群状态、元数据等。
  • Alter:允许修改集群级别的配置。

示例

  • 允许用户 admin 创建和删除主题:

    bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:admin --operation Create --topic *
    bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:admin --operation Delete --topic *
    
  • 允许用户 admin 查看集群信息:

    bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:admin --operation Describe --cluster
    

2.4 TransactionalId(事务 ID)

Kafka 中的 TransactionalId 是一种用于管理 Kafka 事务的资源类型,特别是对于支持 事务 的 Kafka 生产者。事务 ID 用于在 Kafka 中处理生产者的事务,确保消息的精确一次传递。

常见的操作权限

  • Read:允许读取事务消息。
  • Write:允许创建或写入事务消息。

示例

  • 允许用户 producer1 使用事务 ID txn-1 写入消息:

    bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:producer1 --operation Write --transactional-id txn-1
    
  • 允许用户 consumer1 读取事务消息:

    bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:consumer1 --operation Read --transactional-id txn-1
    

2.5 Delegation Token(委托令牌)

Delegation Token 是一种用于认证和授权的临时凭证,适用于分布式系统中的短期权限授予。在 Kafka 中,委托令牌通常用于支持跨集群访问或通过 OAuth 等第三方认证机制授权。

常见的操作权限

  • Read:允许获取委托令牌。
  • Write:允许创建或删除委托令牌。

2.6 ACL 管理与资源类型的结合

Kafka 允许将 ACL 配置应用于上述资源类型中的任意组合,并且 ACL 操作权限可以根据不同的资源类型设置。这种细粒度的控制保证了 Kafka 系统的安全性,防止未授权的操作对集群资源造成影响。

举例:资源类型与权限结合

  • 允许用户 alicetopic1 进行写入操作:

    bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:alice --operation Write --topic topic1
    
  • 允许用户 bobgroup1 中消费 topic1 的消息:

    bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:bob --operation Read --group group1 --topic topic1
    
  • 允许用户 admin 对整个集群进行描述:

    bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:admin --operation Describe --cluster
    

3. Kafka ACL 操作命令

Kafka 提供了 kafka-acls.sh 工具用于管理集群中的访问控制列表(ACL)。通过该命令,你可以配置、查看和删除访问控制规则,限制不同用户或客户端对 Kafka 资源(如主题、消费者组、集群等)的访问权限。

3.1 列出现有的 ACL 配置

使用 --list 选项可以列出当前 Kafka 集群的 ACL 配置。这将显示所有资源和相关的访问控制策略。

命令格式

bin/kafka-acls.sh --bootstrap-server <broker> --list

示例
列出 Kafka 集群上的所有 ACL 配置:

bin/kafka-acls.sh --bootstrap-server localhost:9092 --list

此命令会输出当前集群中所有资源的 ACL 配置。

3.2 添加 ACL 权限

使用 --add 选项可以向 Kafka 资源添加访问权限。你可以为特定的 用户客户端 授予对特定资源(如主题、消费者组)的操作权限。

命令格式

bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal <principal> --operation <operation> --resource <resource-type> --topic <topic-name> --group <group-name>
  • --add: 添加 ACL 条目。
  • --allow-principal: 指定允许访问资源的主体(可以是用户或客户端)。
  • --operation: 指定允许的操作,如 Read, Write, Create, Delete 等。
  • --resource: 指定资源类型(如 Topic, Group, Cluster)。
  • --topic: 指定操作的主题名称。
  • --group: 指定消费者组名称。

示例 1:允许用户 alice 写入 test-topic 主题

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:alice --operation Write --topic test-topic

示例 2:允许消费者组 group1 读取 test-topic 主题

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal Group:group1 --operation Read --topic test-topic

示例 3:允许用户 admin 创建主题

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:admin --operation Create --topic *

示例 4:允许用户 alice 删除 test-topic 主题

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:alice --operation Delete --topic test-topic

3.3 删除 ACL 权限

使用 --remove 选项可以删除已存在的 ACL 条目,撤销某个用户或客户端对某个资源的访问权限。

命令格式

bin/kafka-acls.sh --bootstrap-server <broker> --remove --allow-principal <principal> --operation <operation> --resource <resource-type> --topic <topic-name> --group <group-name>

示例 1:删除用户 alicetest-topic 的写入权限

bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --allow-principal User:alice --operation Write --topic test-topic

示例 2:删除消费者组 group1test-topic 的读取权限

bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --allow-principal Group:group1 --operation Read --topic test-topic

3.4 删除所有 ACL 权限

要删除所有与某个资源相关的 ACL 权限,可以通过指定通配符(*)删除某个类型资源的所有 ACL 配置。

命令格式

bin/kafka-acls.sh --bootstrap-server <broker> --remove --all --topic <topic-name>

示例
删除 test-topic 主题上所有的 ACL 配置:

bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --all --topic test-topic

3.5 查看特定资源的 ACL 配置

使用 --list 选项可以查看指定资源的 ACL 配置。例如,可以查看某个主题或消费者组的 ACL。

命令格式

bin/kafka-acls.sh --bootstrap-server <broker> --list --topic <topic-name> --group <group-name>

示例 1:查看 test-topic 主题的所有 ACL 配置

bin/kafka-acls.sh --bootstrap-server localhost:9092 --list --topic test-topic

示例 2:查看消费者组 group1 的 ACL 配置

bin/kafka-acls.sh --bootstrap-server localhost:9092 --list --group group1

3.6 仅允许或拒绝特定操作

Kafka 允许对某些操作使用 Deny 权限来显式拒绝访问。

命令格式

bin/kafka-acls.sh --bootstrap-server <broker> --add --deny-principal <principal> --operation <operation> --resource <resource-type> --topic <topic-name> --group <group-name>

示例 1:显式拒绝用户 alicetest-topic 主题的写入权限

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --deny-principal User:alice --operation Write --topic test-topic

示例 2:显式拒绝消费者组 group1test-topic 主题的读取权限

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --deny-principal Group:group1 --operation Read --topic test-topic

3.7 组合 ACL 配置

可以在同一命令中为多个资源类型添加或删除 ACL。例如,可以为多个主题、消费者组同时设置权限。

命令格式

bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:<username> --operation <operation> --topic <topic1>,<topic2> --group <group-name>

示例

  • 允许用户 alicetest-topicanother-topic 写入消息,并允许 group1 从这两个主题读取消息:
    bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:alice --operation Write --topic test-topic,another-topic
    bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal Group:group1 --operation Read --topic test-topic,another-topic
    

3.8 使用 Wildcard(通配符)进行配置

Kafka 支持使用通配符来配置多个主题或资源。例如,使用 * 表示所有主题,* 表示所有消费者组。

命令格式

bin/kafka-acls.sh --bootstrap-server <broker> --add --allow-principal User:<username> --operation <operation> --topic *

示例 1:允许用户 alice 对所有主题进行写入

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:alice --operation Write --topic *

示例 2:允许消费者组 group1 读取所有主题

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal Group:group1 --operation Read --topic *

5. Kafka ACL 管理最佳实践

在 Kafka 集群中,使用 ACL(访问控制列表) 来管理权限是确保数据安全和集群控制的关键。合理的 ACL 管理能够帮助组织在多租户环境中保护 Kafka 资源,同时确保不同的用户、应用程序或消费者组仅能执行必要的操作。

5.1 最小权限原则(Principle of Least Privilege)

最佳实践:为每个用户、客户端和消费者组配置最小权限,只允许他们执行必要的操作。这有助于减少潜在的安全风险,确保每个实体只能访问它们需要的资源。

示例 1:为生产者用户配置写入权限

场景:允许用户 producer-user 只能写入 test-topic 主题,不能读取或执行其他操作。

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:producer-user --operation Write --topic test-topic

解释

  • --allow-principal User:producer-user: 允许 producer-user
  • --operation Write: 仅授予写入权限,禁止其他操作。

示例 2:为消费者组配置读取权限

场景:允许消费者组 consumer-group 读取 test-topic 主题的数据,但不能进行写入。

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal Group:consumer-group --operation Read --topic test-topic

解释

  • --allow-principal Group:consumer-group: 允许 consumer-group
  • --operation Read: 仅授予读取权限,禁止写入。

5.2 使用通配符来减少 ACL 配置的复杂性

最佳实践:使用通配符(*)来简化 ACL 配置,尤其在资源众多时。通配符允许你一次性授予对多个资源的访问权限。

示例 3:允许某个用户读取所有主题

场景:允许用户 alice 读取集群中所有的主题,而不授予写入权限。

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:alice --operation Read --topic *

解释

  • --topic *: 允许访问所有主题。
  • --operation Read: 仅授予读取权限。

示例 4:允许消费者组写入所有主题

场景:允许消费者组 group1 向集群中所有的主题写入消息。

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal Group:group1 --operation Write --topic *

解释

  • --topic *: 允许访问所有主题。
  • --operation Write: 仅授予写入权限。

5.3 强化集群安全性:控制管理权限

最佳实践:应限制对集群级别操作的访问权限,例如集群配置修改、创建和删除主题等。这些操作通常由管理员执行。

示例 5:限制用户只能查看集群元数据

场景:允许 read-only 用户仅查看集群元数据(如主题、分区等),而不能进行任何修改操作。

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:read-only --operation Describe --cluster

解释

  • --operation Describe: 允许查看集群元数据。
  • --cluster: 针对集群资源进行权限配置。

示例 6:仅允许管理员创建和删除主题

场景:只允许用户 admin 创建和删除主题,而不允许普通用户进行这些操作。

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:admin --operation Create --operation Delete --topic *

解释

  • --operation Create --operation Delete: 授予创建和删除主题的权限。
  • --topic *: 对所有主题资源进行配置。

5.4 定期审计和监控 ACL 配置

最佳实践:定期审计 Kafka 集群中的 ACL 配置,确保权限正确且没有过度权限。在大型集群中,手动管理 ACL 可能导致错误,使用自动化工具和监控机制非常重要。

示例 7:列出所有 ACL 配置

场景:审计当前集群中的所有 ACL 配置,检查每个用户和消费者组的访问权限。

bin/kafka-acls.sh --bootstrap-server localhost:9092 --list --topic *

解释

  • --list: 列出当前所有的 ACL 配置。
  • --topic *: 针对所有主题列出 ACL 配置。

示例 8:定期检查某个用户的权限

场景:定期检查用户 alicetest-topic 的权限。

bin/kafka-acls.sh --bootstrap-server localhost:9092 --list --principal User:alice --topic test-topic

解释

  • --list: 列出用户的所有 ACL 配置。
  • --principal User:alice: 指定要查看的用户。
  • --topic test-topic: 仅查看该用户在 test-topic 上的权限。

5.5 使用拒绝(Deny)策略明确禁止操作

最佳实践:通过明确的拒绝(Deny)策略来防止特定操作,即使在一些 ACL 中未显式列出。这有助于更好地控制资源访问,特别是在多租户环境中。

示例 9:拒绝某个用户读取敏感主题

场景:拒绝用户 bobsensitive-topic 主题的读取权限。

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --deny-principal User:bob --operation Read --topic sensitive-topic

解释

  • --deny-principal User:bob: 明确拒绝用户 bobsensitive-topic 主题的读取权限。
  • --operation Read: 仅拒绝读取权限。

示例 10:拒绝所有用户对特定主题进行写入

场景:拒绝所有用户对 restricted-topic 进行写入操作。

bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --deny-principal User:* --operation Write --topic restricted-topic

解释

  • --deny-principal User:*: 拒绝所有用户。
  • --operation Write: 明确拒绝写入操作。

5.6 结合 Kerberos 和 SASL 强化身份认证

最佳实践:对于更高的安全需求,应结合 Kerberos 或 SASL 认证机制来进行身份验证,并与 ACL 配置结合使用。这样能够确保仅经过身份验证的用户和客户端能够执行权限操作。

示例 11:配置 Kafka 与 SASL/Kerberos 集成后使用 ACL

场景:配置 Kafka 使用 SASL/Kerberos 进行身份验证,确保只有通过身份验证的用户才能访问特定资源。

  1. 配置 Kafka 集群启用 SASL/Kerberos 认证。
  2. 配置用户 ACL。
bin/kafka-acls.sh --bootstrap-server localhost:9092 --add --allow-principal User:alice --operation Read --topic test-topic

解释

  • User:alice:指定一个已通过 Kerberos 或 SASL 认证的用户。
  • --operation Read:授予 alice 用户对 test-topic 主题的读取权限。

5.7 删除不再需要的 ACL 配置

最佳实践:定期清理不再使用的 ACL 配置,避免过度权限配置并保持集群的整洁。

示例 12:删除某个用户的 ACL 配置

场景:删除 user1test-topic 主题的所有权限。

bin/kafka-acls.sh --bootstrap-server localhost:9092 --remove --principal User:user1 --topic test-topic

解释

  • --remove: 删除指定用户的 ACL 配置。
  • --principal User:user1: 指定要删除权限的用户。
  • --topic test-topic: 删除用户在 test-topic 上的所有权限。

6. 总结

Kafka 的 ACL 是集群访问控制的核心机制,允许管理员根据用户、客户端、消费者组等标识,精细化地控制对 Kafka 资源的访问。通过合适的 ACL 配置,管理员可以确保只有授权的用户能够执行操作,从而有效提高 Kafka 集群的安全性。

常见的操作包括:

  • 控制用户对主题的读写权限。
  • 设置消费者组的访问权限。
  • 管理集群级别的操作权限,如创建、删除主题等。

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

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

相关文章

Spring Boot 2 快速教程:WebFlux处理流程(五)

WebFlux请求处理流程 下面是spring mvc的请求处理流程 具体步骤&#xff1a; 第一步&#xff1a;发起请求到前端控制器(DispatcherServlet) 第二步&#xff1a;前端控制器请求HandlerMapping查找 Handler &#xff08;可以根据xml配置、注解进行查找&#xff09; 匹配条件包括…

小程序设计和开发:如何研究同类型小程序的优点和不足。

一、确定研究目标和范围 明确研究目的 在开始研究同类型小程序之前&#xff0c;首先需要明确研究的目的。是为了改进自己的小程序设计和开发&#xff0c;还是为了了解市场趋势和用户需求&#xff1f;不同的研究目的会影响研究的方法和重点。例如&#xff0c;如果研究目的是为了…

Vue3.0实战:大数据平台可视化(附完整项目源码)

文章目录 创建vue3.0项目项目初始化项目分辨率响应式设置项目顶部信息条创建页面主体创建全局引入echarts和axios后台接口创建express销售总量图实现完整项目下载项目任何问题都可在评论区,或者直接私信即可。 创建vue3.0项目 创建项目: vue create vueecharts选择第三项:…

Java自定义IO密集型和CPU密集型线程池

文章目录 前言线程池各类场景描述常见场景案例设计思路公共类自定义工厂类-MyThreadFactory自定义拒绝策略-RejectedExecutionHandlerFactory自定义阻塞队列-TaskQueue&#xff08;实现 核心线程->最大线程数->队列&#xff09; 场景1&#xff1a;CPU密集型场景思路&…

【VM】VirtualBox安装ubuntu22.04虚拟机

阅读本文之前&#xff0c;请先根据 安装virtualbox 教程安装virtulbox虚拟机软件。 1.下载Ubuntu系统镜像 打开阿里云的镜像站点&#xff1a;https://developer.aliyun.com/mirror/ 找到如图所示位置&#xff0c;选择Ubuntu 22.04.3(destop-amd64)系统 Ubuntu 22.04.3(desto…

C#,shell32 + 调用控制面板项(.Cpl)实现“新建快捷方式对话框”(全网首发)

Made By 于子轩&#xff0c;2025.2.2 不管是使用System.IO命名空间下的File类来创建快捷方式文件&#xff0c;或是使用Windows Script Host对象创建快捷方式&#xff0c;亦或是使用Shell32对象创建快捷方式&#xff0c;都对用户很不友好&#xff0c;今天小编为大家带来一种全新…

国产编辑器EverEdit - 输出窗口

1 输出窗口 1.1 应用场景 输出窗口可以显示用户执行某些操作的结果&#xff0c;主要包括&#xff1a; 查找类&#xff1a;查找全部&#xff0c;筛选等待操作&#xff0c;可以把查找结果打印到输出窗口中&#xff1b; 程序类&#xff1a;在执行外部程序时(如&#xff1a;命令窗…

Vue-data数据

目录 一、Vue中的data数据是什么&#xff1f;二、data支持的数据类型有哪些&#xff1f; 一、Vue中的data数据是什么&#xff1f; Vue中用到的数据定义在data中。 二、data支持的数据类型有哪些&#xff1f; data中可以写复杂类型的数据&#xff0c;渲染复杂类型数据时只要遵…

02.03 递归运算

使用递归求出 1 1/3 -1/5 1/7 - 1/9 ... 1/n的值。 1>程序代码 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #inc…

数据分析系列--⑥RapidMiner构建决策树(泰坦尼克号案例含数据)

一、资源下载 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 2.划分训练集和测试集 3.应用模型 4.结果分析 一、资源下载 点击下载数据集 二、数据处理 1.导入数据 2.数据预处理 三、构建模型 1.构建决策树 虽然决策树已经构建,但对于大多数初学者或…

100 ,【8】 buuctf web [蓝帽杯 2021]One Pointer PHP(别看)

进入靶场 没提示&#xff0c;去看源代码。 user.php <?php // 定义一个名为 User 的类&#xff0c;该类可用于表示用户相关信息或执行与用户有关的操作 class User{// 声明一个公共属性 $count&#xff0c;可在类的内部和外部直接访问// 这个属性可能用于记录与用户相关…

巧妙利用数据结构优化部门查询

目录 一、出现的问题 部门树接口超时 二、问题分析 源代码分析 三、解决方案 具体实现思路 四、优化的效果 一、出现的问题 部门树接口超时 无论是在A项目还是在B项目中&#xff0c;都存在类似的页面&#xff0c;其实就是一个部门列表或者叫组织列表。 从页面的展示形式…

QT简单实现验证码(字符)

0&#xff09; 运行结果 1&#xff09; 生成随机字符串 Qt主要通过QRandomGenerator类来生成随机数。在此之前的版本中&#xff0c;qrand()函数也常被使用&#xff0c;但从Qt 5.10起&#xff0c;推荐使用更现代化的QRandomGenerator类。 在头文件添加void generateRandomNumb…

JavaFX - 3D 形状

在前面的章节中&#xff0c;我们已经了解了如何在 JavaFX 应用程序中的 XY 平面上绘制 2D 形状。除了这些 2D 形状之外&#xff0c;我们还可以使用 JavaFX 绘制其他几个 3D 形状。 通常&#xff0c;3D 形状是可以在 XYZ 平面上绘制的几何图形。它们由两个或多个维度定义&#…

深入理解开放寻址法中的三种探测序列

一、引言 开放寻址法是解决散列表中冲突的一种重要方法&#xff0c;当发生冲突&#xff08;即两个不同的键通过散列函数计算得到相同的散列值&#xff09;时&#xff0c;它会在散列表中寻找下一个可用的存储位置。而探测序列就是用于确定在发生冲突后&#xff0c;依次尝试哪些…

【双指针题目】

双指针 美丽区间&#xff08;滑动窗口&#xff09;合并数列&#xff08;双指针的应用&#xff09;等腰三角形全部所有的子序列 美丽区间&#xff08;滑动窗口&#xff09; 美丽区间 滑动窗口模板&#xff1a; int left 0, right 0;while (right < nums.size()) {// 增大…

嵌入式八股文面试题(一)C语言部分

1. 变量/函数的声明和定义的区别&#xff1f; &#xff08;1&#xff09;变量 定义不仅告知编译器变量的类型和名字&#xff0c;还会分配内存空间。 int x 10; // 定义并初始化x int x; //同样是定义 声明只是告诉编译器变量的名字和类型&#xff0c;但并不为它分配内存空间…

go-zero学习笔记(三)

利用goctl生成rpc服务 编写proto文件 // 声明 proto 使用的语法版本 syntax "proto3";// proto 包名 package demoRpc;// golang 包名(可选) option go_package "./demo";// 如需为 .proto 文件添加注释&#xff0c;请使用 C/C 样式的 // 和 /* ... */…

【25考研】南开软件考研复试复习重点!

一、复试内容 复试采取现场复试的方式。复试分为笔试、机试和面试三部分。三部分合计100分&#xff0c;其中笔试成绩占30%、机试成绩占30%、面试成绩占40%。 1.笔试&#xff1a;专业综合基础测试 考核方式&#xff1a;闭卷考试&#xff0c;时长为90分钟。 笔试考查内容范围…

【最长上升子序列Ⅱ——树状数组,二分+DP,纯DP】

题目 代码&#xff08;只给出树状数组的&#xff09; #include <bits/stdc.h> using namespace std; const int N 1e510; int n, m; int a[N], b[N], f[N], tr[N]; //f[i]表示以a[i]为尾的LIS的最大长度 void init() {sort(b1, bn1);m unique(b1, bn1) - b - 1;for(in…