Kafka SASL/PLAIN介绍
文章目录
- Kafka SASL/PLAIN介绍
- 1. SASL/PLAIN 简介
- 2. 配置步骤
- (1)Kafka 服务器端配置
- (2)Kafka 客户端配置
- (3)测试连接
- 3. 认证过程
- 3.1 SASL/PLAIN 认证工作原理
- 3.2 认证过程描述
- 4. 安全性考虑
- 4.1 SASL/PLAIN 的安全问题
- 4.2 保障 SASL/PLAIN 安全性的方案
- 4.3 SASL/PLAIN 的安全性处理场景
- 5. SASL/PLAIN适用场景介绍
- 5.1 简单场景中的认证需求
- (1)内部环境或测试环境
- (2)低安全性要求的应用场景
- 5.2 与其他认证方式结合使用
- 5.3 与应用层身份验证配合
- 5.4 外部系统集成
- 6. 总结
Kafka SASL/PLAIN介绍
Kafka SASL/PLAIN 是一种基于简单用户名和密码的身份验证方式,通常用于保护 Kafka 集群的访问安全。它是 Kafka 中的 SASL(Simple Authentication and Security Layer)认证机制之一。使用 SASL/PLAIN 时,客户端和服务器之间通过简单的明文用户名和密码进行身份验证。
1. SASL/PLAIN 简介
SASL(Simple Authentication and Security Layer)是一个身份验证框架,允许应用程序协议独立地进行身份验证。Kafka 支持多种 SASL 机制,其中 SASL/PLAIN 就是一种非常简单的实现方式。
-
SASL/PLAIN 的工作原理是,客户端通过用户名和密码向 Kafka 服务器发送身份验证请求。Kafka 服务器通过配置的身份验证方式(通常是基于 JAAS 配置)验证客户端提供的用户名和密码。
-
安全性:
SASL/PLAIN本身并不加密密码或任何消息内容,它仅用于身份验证。因此,它最好与 SSL/TLS 结合使用,以保证传输过程中的安全性。
2. 配置步骤
(1)Kafka 服务器端配置
在 Kafka 服务器端,需要启用 SASL/PLAIN 身份验证机制。配置文件中要指定使用 SASL 认证,并配置 SASL/PLAIN 所需的 JAAS 配置文件。
-
编辑 Kafka 服务器配置(
server.properties):启用 SASL/PLAIN 认证,并将其与 SSL 或 PLAINTEXT 一起使用(具体使用什么协议取决于你的网络要求)。比如:
listeners=SASL_PLAINTEXT://0.0.0.0:9092 listener.security.protocol=SASL_PLAINTEXT sasl.mechanism=PLAIN sasl.enabled.mechanisms=PLAIN security.inter.broker.protocol=SASL_PLAINTEXT -
配置 JAAS 配置文件:
Kafka 需要一个 JAAS 配置文件来指定如何验证客户端的用户名和密码。该文件通常位于
$KAFKA_HOME/config/kafka_server_jaas.conf,其内容如下:KafkaServer {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="kafka-server"password="server-password"user_kafka="kafka-password"; };username和password是 Kafka 服务器本身的认证信息。user_kafka和kafka-password是授权的用户。
-
在启动 Kafka 服务器时指定 JAAS 配置文件:
启动 Kafka 服务器时需要告诉它使用哪个 JAAS 配置文件。使用以下命令启动 Kafka 服务器时指定 JAAS 配置文件:
KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf" bin/kafka-server-start.sh config/server.properties
(2)Kafka 客户端配置
在 Kafka 客户端(生产者或消费者)中,也需要配置 SASL/PLAIN 认证信息。客户端需要提供正确的用户名和密码,以便进行身份验证。
-
编辑 Kafka 客户端配置(
producer.properties或consumer.properties):配置如下:
security.protocol=SASL_PLAINTEXT sasl.mechanism=PLAIN sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \username="kafka-client" \password="client-password";username和password是客户端认证所需的用户名和密码。
-
使用 Java 客户端时,还需要在启动时指定 JAAS 配置文件:
KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/client_jaas.conf" java -jar kafka-client.jar在
client_jaas.conf中,配置类似于以下内容:KafkaClient {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername="kafka-client"password="client-password"; };
(3)测试连接
在完成 Kafka 服务器和客户端的配置后,您可以测试生产者或消费者是否可以成功连接到 Kafka 集群。
例如,使用命令行生产者来测试 SASL/PLAIN 认证:
bin/kafka-console-producer.sh --broker-list kafka-server:9092 --topic test --producer.config /path/to/producer.properties
如果配置正确,生产者将能够连接到 Kafka 集群并发送消息。
3. 认证过程
Kafka SASL/PLAIN 认证过程是 Kafka 客户端和服务器之间通过用户名和密码进行身份验证的一种机制。在这种机制下,Kafka 客户端需要在连接 Kafka 集群时,提供有效的用户名和密码,而 Kafka 服务器将验证这些凭证。
3.1 SASL/PLAIN 认证工作原理
SASL(Simple Authentication and Security Layer)是一个框架,允许应用程序协议独立地进行身份验证。SASL/PLAIN 是一种简单的认证机制,它使用 明文用户名和密码 进行身份验证。具体过程如下:
-
客户端请求:Kafka 客户端(如生产者或消费者)向 Kafka 服务器发起连接请求,并在连接请求中声明将使用
SASL/PLAIN机制进行认证。 -
发送认证请求:客户端在与 Kafka 服务器的初步通信中,使用
SASL/PLAIN发送认证请求,包含用户名和密码。这些信息是通过 SASL 握手进行传递的。 -
Kafka 服务器验证:Kafka 服务器通过配置的 JAAS 文件,验证客户端提供的用户名和密码是否正确。JAAS 文件中保存了 Kafka 服务器的认证信息和用户凭证。
-
认证结果:如果用户名和密码验证成功,Kafka 服务器允许客户端继续进行通信。否则,连接被拒绝,客户端收到认证失败的错误。
-
数据传输:认证完成后,客户端和服务器之间的通信可以正常进行。
3.2 认证过程描述
假设我们有一个 Kafka 集群,客户端要连接时需要进行 SASL/PLAIN 认证。以下是认证过程的详细步骤:
步骤 1:客户端发起连接请求
客户端向 Kafka 服务器发起连接,指定使用 SASL/PLAIN 认证机制。客户端的请求包含用户名和密码(例如:kafka-client 和 client-password)。
步骤 2:Kafka 服务器验证
Kafka 服务器接收到认证请求后,从其 JAAS 配置文件中查找与客户端提供的用户名匹配的条目。如果用户名和密码验证成功,Kafka 服务器会返回认证成功的响应。
步骤 3:客户端与 Kafka 服务器建立连接
认证成功后,客户端可以通过 SASL 连接到 Kafka 服务器并发送消息。此时,客户端可以开始发布消息或订阅主题。
步骤 4:认证失败处理
如果客户端提供的用户名或密码不正确,Kafka 服务器将拒绝连接,并返回认证失败的错误信息。例如:
Error: Authentication failed: [AuthError: SASL authentication failed for user: kafka-client]
步骤 5:日志分析
Kafka 和客户端日志中会记录认证过程的详细信息。Kafka 服务器日志通常包含类似以下的信息:
[INFO] - SASL authentication failed for user: kafka-client
[INFO] - Authentication failure for client: kafka-client
4. 安全性考虑
Kafka SASL/PLAIN 安全性注意事项主要涉及以下几个方面:认证的安全性、数据传输的加密、密码保护、以及对潜在攻击的防范。SASL/PLAIN 本身存在一些安全隐患,特别是在传输过程中,用户名和密码是以明文方式发送的。因此,在使用 SASL/PLAIN 时,需要格外小心如何保障传输通道的安全以及如何避免信息泄漏。
4.1 SASL/PLAIN 的安全问题
-
明文密码传输
SASL/PLAIN使用的是明文用户名和密码进行认证。尽管用户名和密码可能存储在 Kafka 配置文件中,但这些信息在客户端和服务器之间的传输过程中是没有加密的。- 如果不加以保护,恶意的攻击者可能会截取传输中的数据包,从而获得明文的用户名和密码,导致身份验证信息泄露。
-
中间人攻击(MITM)
- 在没有加密的网络环境中,
SASL/PLAIN可能容易受到 中间人攻击(MITM)。攻击者能够拦截并篡改客户端与 Kafka 服务器之间的通信流量,从而获取认证信息或修改数据。 - 由于没有加密保护,数据流中传输的用户名和密码可能在传输过程中被泄露。
- 在没有加密的网络环境中,
-
无法验证服务器身份
- 使用
SASL/PLAIN认证时,客户端无法验证服务器的身份,因此容易受到 伪造 Kafka 服务器 的攻击。攻击者可以伪造一个 Kafka 服务器并窃取用户的认证信息。
- 使用
4.2 保障 SASL/PLAIN 安全性的方案
为了解决以上安全问题,在使用 SASL/PLAIN 时,可以采取以下措施:
(1)使用 SSL/TLS 加密通信
-
为了保护传输中的数据免受窃听和篡改,强烈建议将
SASL/PLAIN配合SSL/TLS一起使用。SASL_SSL可以确保 Kafka 客户端与服务器之间的通信加密,使认证信息和所有数据都得到加密保护。 -
配置
SASL_SSL:-
在 Kafka 服务器端配置文件
server.properties中启用SASL_SSL:listeners=SASL_SSL://0.0.0.0:9093 listener.security.protocol=SASL_SSL sasl.mechanism=PLAIN sasl.enabled.mechanisms=PLAIN security.inter.broker.protocol=SASL_SSL ssl.keystore.location=/path/to/kafka.server.keystore.jks ssl.keystore.password=password ssl.key.password=password ssl.truststore.location=/path/to/kafka.server.truststore.jks ssl.truststore.password=password -
在客户端配置文件中,也要使用
SASL_SSL:security.protocol=SASL_SSL sasl.mechanism=PLAIN sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \username="kafka-client" \password="client-password"; ssl.truststore.location=/path/to/kafka.client.truststore.jks ssl.truststore.password=password
-
-
好处:
- 使用
SASL_SSL会加密整个传输通道,确保 认证信息和所有数据在网络中不会被明文传输。 - 即使攻击者能够拦截网络流量,他们也无法解密通信内容,因为传输是加密的。
- 使用
(2)启用客户端证书验证
-
为了进一步增强安全性,可以启用 客户端证书验证。这种方式要求客户端提供有效的证书进行身份验证。
-
配置时,Kafka 服务器需要检查客户端的证书,以确保只有授权的客户端能够连接。此时不仅是用户名和密码进行身份验证,还要求客户端提供数字证书,这样可以防止未授权的客户端访问。
(3)验证 Kafka 服务器身份
-
客户端可以通过配置 Kafka 服务器的证书 来验证 Kafka 服务器的身份。这样可以防止客户端连接到伪造的 Kafka 服务器。
-
使用 SSL 验证服务器身份:
-
客户端配置文件应包含服务器的
truststore配置,信任由 Kafka 服务器提供的证书:ssl.truststore.location=/path/to/kafka.server.truststore.jks ssl.truststore.password=password -
这将确保客户端只与身份验证通过的 Kafka 服务器通信,而不会连接到恶意的伪造服务器。
-
(4)定期更新用户名和密码
-
即使使用了加密通信通道,密码泄露的风险依然存在。因此,应该定期更换用户名和密码,特别是在发生潜在的安全事件或密码泄露时。
-
密码管理:
- 使用专门的密码管理工具来存储和管理密码,避免将密码硬编码在配置文件中。
- 通过
Kafka集群的管理工具(如Kafka Manager)或使用自动化工具(如Vault)定期更新凭证。
(5)使用更安全的认证机制
- SASL/PLAIN 虽然简单且易于配置,但它的安全性较弱。如果可能,考虑使用更为安全的认证机制,如
SASL/GSSAPI(Kerberos),它提供更强的认证和加密保护。SASL/GSSAPI使用基于票证的身份验证机制,具有较强的防篡改和防伪造的能力。
4.3 SASL/PLAIN 的安全性处理场景
案例 1:使用 SASL/PLAIN 时的认证信息泄露
-
场景:公司内部部署的 Kafka 集群启用了
SASL/PLAIN认证,但没有启用 SSL/TLS 加密。某个攻击者利用网络监听工具(如 Wireshark)在公司内网中截获了 Kafka 生产者与服务器之间的通信。由于没有加密,攻击者能够看到传输中的用户名和密码。 -
解决方案:为防止认证信息泄露,配置
SASL_SSL以加密通信,并启用客户端证书验证。通过使用加密协议,攻击者即使能够截获流量,也无法读取用户名和密码。
案例 2:中间人攻击(MITM)
-
场景:攻击者利用中间人攻击拦截客户端与 Kafka 服务器之间的通信,并伪造一个假 Kafka 服务器。在没有 SSL 加密的情况下,攻击者成功窃取了客户端的用户名和密码,导致认证失败或凭证被滥用。
-
解决方案:使用
SASL_SSL来确保数据传输的加密性。同时,客户端配置truststore来验证 Kafka 服务器的身份,防止连接到伪造的 Kafka 服务器。
案例 3:客户端与 Kafka 服务器的伪造
-
场景:在某些企业环境中,内部员工可能试图通过伪造一个 Kafka 服务器来窃取公司内部数据或认证信息。由于没有验证 Kafka 服务器的身份,客户端可能会连接到恶意的伪造 Kafka 服务器,从而泄露敏感信息。
-
解决方案:配置 SSL 和
truststore,要求客户端验证 Kafka 服务器的证书。这样,客户端只会连接到受信任的 Kafka 服务器,避免伪造服务器的风险。
5. SASL/PLAIN适用场景介绍
Kafka SASL/PLAIN 适用场景主要考虑其认证机制的简洁性和使用场合。SASL/PLAIN 是一种轻量级的认证机制,适用于某些特定的场景,但由于其安全性较低,通常适合用于内部环境或与其他安全措施配合使用。
5.1 简单场景中的认证需求
(1)内部环境或测试环境
-
适用场景:在没有严格安全需求的内部环境或开发/测试环境中,
SASL/PLAIN由于其配置简单、容易实现,常被用于快速搭建 Kafka 集群。 -
优点:
- 配置简单,不需要额外的复杂认证系统(如 Kerberos)。
- 部署方便,适合小型的集群和非生产环境使用。
-
注意事项:
- 不建议在生产环境中直接使用,特别是在开放的网络环境中,因为
SASL/PLAIN使用明文传输密码,容易受到中间人攻击。
- 不建议在生产环境中直接使用,特别是在开放的网络环境中,因为
(2)低安全性要求的应用场景
-
适用场景:一些对安全性要求较低的应用,如内网应用或封闭的网络环境,可能会选择
SASL/PLAIN作为认证机制。 -
优点:
- 实现简单,通常仅需配置用户名和密码即可。
-
注意事项:
- 需要保证 Kafka 集群和客户端之间的网络是安全的,建议配合其他加密手段(如
SSL/TLS)使用,防止密码明文泄露。
- 需要保证 Kafka 集群和客户端之间的网络是安全的,建议配合其他加密手段(如
5.2 与其他认证方式结合使用
(1)简单身份验证机制的补充
-
适用场景:如果 Kafka 集群的安全需求并不高,但依然需要某种基本的认证机制,
SASL/PLAIN可以与其他安全措施(如基于 IP 的访问控制列表、VPC 安全组、VPN 等)一起使用。 -
优点:
SASL/PLAIN提供了一种轻量级的认证方式,可以作为其他安全措施的补充。
-
使用场景:
- 内部系统或小规模应用,对数据安全的需求不高,但仍需要身份验证机制来防止未经授权的访问。
(2)与 Kerberos 组合使用
-
适用场景:在一些特定情况下,企业可能同时使用 Kerberos 和
SASL/PLAIN来处理不同的客户端需求。例如,企业的大部分应用可能使用 Kerberos 进行认证,但对于某些小型应用或开发环境,使用SASL/PLAIN进行简化的认证。 -
优点:
- 提供灵活性:可以根据不同客户端的需求选择认证方式。
-
注意事项:
- 在大规模部署中,最好使用更强大的认证机制(如
SASL/GSSAPI,即 Kerberos),而SASL/PLAIN仅适用于特定需求。
- 在大规模部署中,最好使用更强大的认证机制(如
5.3 与应用层身份验证配合
前端应用与 Kafka 的连接
-
适用场景:某些前端应用需要通过 Kafka 进行消息传输,在这些应用中,可能会使用简单的用户名和密码进行身份验证。
SASL/PLAIN可以作为应用层的简单身份验证机制,避免在复杂环境中引入额外的认证流程。 -
优点:
- 对应用开发者而言,
SASL/PLAIN的实现和配置非常简单。
- 对应用开发者而言,
-
注意事项:
- 适合对安全要求较低的应用。对于涉及敏感数据的应用,可能需要使用更安全的认证方式。
5.4 外部系统集成
Kafka 与外部系统集成
-
适用场景:当 Kafka 集群需要与外部系统(如第三方服务、外部客户端等)集成时,如果外部系统能够支持用户名和密码认证,
SASL/PLAIN提供了一种简便的身份验证机制。 -
优点:
- 配置简单,尤其适用于集成外部系统或第三方应用。
- 可以快速实现客户端与 Kafka 的连接。
-
注意事项:
- 外部系统与 Kafka 之间的通信需要加密,建议使用
SASL_SSL而不是SASL_PLAINTEXT,以保障密码安全。
- 外部系统与 Kafka 之间的通信需要加密,建议使用
6. 总结
- SASL/PLAIN 是一种基于用户名和密码的身份验证机制,适用于简化认证的场景。
- 配置时需要注意 Kafka 服务器和客户端的
JAAS配置,确保用户名、密码匹配,并选择合适的security.protocol(例如SASL_PLAINTEXT或SASL_SSL)。 - 为了确保安全,
SASL/PLAIN应该与 SSL 配合使用,以加密传输通道。
相关文章:
Kafka SASL/PLAIN介绍
文章目录 Kafka SASL/PLAIN介绍1. SASL/PLAIN 简介2. 配置步骤(1)Kafka 服务器端配置(2)Kafka 客户端配置(3)测试连接 3. 认证过程3.1 SASL/PLAIN 认证工作原理3.2 认证过程描述 4. 安全性考虑4.1 SASL/PLA…...
Unbutu虚拟机+eclipse+CDT编译调试环境搭建
问题1: 安装CDT,直接Help->eclipse Market space-> 搜cdt , install,等待重启即可. 问题2:C变量不识别vector ’could not be resolved 这是库的头文件没加好,右键Properties->C Build->Enviroment,增加…...
G. XOUR
题目链接:Problem - G - Codeforces 题目大意:给你一个n长的序列, 其中你可以将a[i] XOR a[j] 的值 严格小于4的数对进行交换。 你可以操作任何几次, 让最后的数列最小。如果在 x 和 y 不同的第一个位置, xi<yi &…...
利用metaGPT多智能体框架实现智能体-1
1.metaGPT简介 MetaGPT 是一个基于大语言模型(如 GPT-4)的多智能体协作框架,旨在通过模拟人类团队的工作模式,让多个 AI 智能体分工合作,共同完成复杂的任务。它通过赋予不同智能体特定的角色(如产品经理、…...
[CVPR 2024] AnyDoor: Zero-shot Object-level Image Customization
github.com/ali-vilab/AnyDoor.写在前面: 【论文速读】按照#论文十问#提炼出论文核心知识点,方便相关科研工作者快速掌握论文内容。过程中并不对论文相关内容进行翻译。博主认为翻译难免会损坏论文的原本含义,也鼓励诸位入门级科研人员阅读文…...
高可用 Keepalived 服务部署流程
一、配置文件 vim /etc/keepalived/keepalived.confGLOBAL CONFIGURATION --- 全局配置部分VRRPD CONFIGURATION --- VRRP协议配置部分LVS CONFIGURATION --- LVS服务管理配置部分[rootlb01 ~]# cat /etc/keepalived/keepalived.…...
文件系统分析
文件系统与磁盘管理详解 一、存储设备基础 1. 存储设备类型对比 设备类型特点典型接口应用场景机械硬盘依赖磁头机械读写,转速影响性能(5400/7200/10000rpm),价格低容量大SATA/SAS冷数据存储、备份固态硬盘无机械结构ÿ…...
JS面相对象小案例:自定义安全数组
在JS中,数组不像其他语言(java、python)中那样安全,它具有动态性和弱类型性,切越界访问没有具体的报错,而是返回空,为提升数组的安全性,我们可以自行定义一个安全数组。 一、增加报…...
Microsoft Power BI:融合 AI 的文本分析
Microsoft Power BI 是微软推出的一款功能强大的商业智能工具,旨在帮助用户从各种数据源中提取、分析和可视化数据,以支持业务决策和洞察。以下是关于 Power BI 的深度介绍: 1. 核心功能与特点 Power BI 提供了全面的数据分析和可视化功能&…...
如何实现滑动列表功能
文章目录 1 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了沉浸式状态栏相关的内容,本章回中将介绍SliverList组件.闲话休提,让我们一起Talk Flutter吧。 1 概念介绍 我们在这里介绍的SliverList组件是一种列表类组件,类似我们之前介…...
计算机网络一点事(23)
传输层 端口作用:标识主机特定进程,TCP,UDP协议 端口号分类:服务器:0-1023,熟知 1024-49151 登记 客户端:49152-65535 功能:实现端到端,进程到进程的通信,…...
Linux——网络(tcp)
文章目录 目录 文章目录 前言 一、TCP逻辑 1. 面向连接 三次握手(建立连接) 四次挥手(关闭连接) 2. 可靠性 3. 流量控制 4. 拥塞控制 5. 基于字节流 6. 全双工通信 7. 状态机 8. TCP头部结构 9. TCP的应用场景 二、编写tcp代码函数…...
算法题(54):插入区间
审题: 需要我们把newinterval的区间与interval的区间合并起来,并返回合并后的二维数组地址 思路: 方法一:排序合并区间 我们可以先把newinterval插入到interval中,进行排序然后复用合并区间的代码 方法二:模…...
UE学习日志#18 C++笔记#4 基础复习4 指派初始化器和指针
1 指派初始化器 C20引入了指派初始化器,以使用他们的名称初始化所谓聚合的数据成员。 聚合类型是满足以下限制的数组类型的对象或结构或类的对象: 1.仅public数据成员, 2.无用户声明或继承的构造函数, 3.无虚函数和无虚基类、priv…...
【算法】回溯算法专题① ——子集型回溯 python
目录 引入变形实战演练总结 引入 子集 https://leetcode.cn/problems/subsets/description/ 给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。 解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。 …...
Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)
文章目录 Gradle配置指南:深入解析settings.gradle.kts(Kotlin DSL版)settings.gradle.kts 基础配置选项单项目配置多项目配置 高级配置选项插件管理(Plugin Management)基础配置模板案例:Android项目标准配…...
makailio-alias_db模块详解
ALIAS_DB 模块 作者 Daniel-Constantin Mierla micondagmail.com Elena-Ramona Modroiu ramonaasipto.com 编辑 Daniel-Constantin Mierla micondagmail.com 版权 © 2005 Voice Sistem SRL © 2008 asipto.com 目录 管理员指南 概述依赖 2.1 Kamailio 模块 2.2 外…...
【机器学习】自定义数据集 使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数
一、使用pytorch框架实现逻辑回归 1. 数据部分: 首先自定义了一个简单的数据集,特征 X 是 100 个随机样本,每个样本一个特征,目标值 y 基于线性关系并添加了噪声。将 numpy 数组转换为 PyTorch 张量,方便后续在模型中…...
Spring Boot - 数据库集成06 - 集成ElasticSearch
Spring boot 集成 ElasticSearch 文章目录 Spring boot 集成 ElasticSearch一:前置工作1:项目搭建和依赖导入2:客户端连接相关构建3:实体类相关注解配置说明 二:客户端client相关操作说明1:检索流程1.1&…...
Java篇之继承
目录 一. 继承 1. 为什么需要继承 2. 继承的概念 3. 继承的语法 4. 访问父类成员 4.1 子类中访问父类的成员变量 4.2 子类中访问父类的成员方法 5. super关键字 6. super和this关键字 7. 子类构造方法 8. 代码块的执行顺序 9. protected访问修饰限定符 10. 继承方式…...
32. C 语言 安全函数( _s 尾缀)
本章目录 前言什么是安全函数?安全函数的特点主要的安全函数1. 字符串操作安全函数2. 格式化输出安全函数3. 内存操作安全函数4. 其他常用安全函数 安全函数实例示例 1:strcpy_s 和 strcat_s示例 2:memcpy_s示例 3:strtok_s 总结 …...
ArkTS编程规范
文章目录 目标和适用范围规则来源章节概览代码风格编程实践 术语和定义总体原则命名类名、枚举名、命名空间名采用UpperCamelCase风格变量名、方法名、参数名采用lowerCamelCase风格常量名、枚举值名采用全部大写,单词间使用下划线隔开避免使用否定的布尔变量名&…...
SQL进阶实战技巧:断点去重技术详解
目录 一、核心概念 二、典型应用场景 三、实现步骤与SQL示例 场景 目标 步骤 分析 结果 四、核心原理解释 1. 核心原理:相邻比较 2. 去重的本质 3. 与传统方法的对比 4 类别理解 五、如何应对复杂场景? 1. 多字段断点检测 2. 时间窗口断点 …...
深度学习之“向量范数和距离度量”
在深度学习中,范数和向量距离是两个不同的概念。向量范数是一种函数,用于将一个实数或复数向量映射为一个值。虽然范数通常用于度量向量之间的距离,但是同样也有其它的一些表示距离的方式。 范数距离 范数是具有“长度”概念的函数。在向量…...
基于Python的简单企业维修管理系统的设计与实现
以下是一个基于Python的简单企业维修管理系统的设计与实现,这里我们会使用Flask作为Web框架,SQLite作为数据库来存储相关信息。 1. 需求分析 企业维修管理系统主要功能包括: 维修工单的创建、查询、更新和删除。设备信息的管理。维修人员…...
javascript常用函数大全
javascript函数一共可分为五类: •常规函数 •数组函数 •日期函数 •数学函数 •字符串函数 1.常规函数 javascript常规函数包括以下9个函数: (1)alert函数:显示一个警告对话框,包括一个OK按钮。 (2)confirm函数:显…...
【Leetcode 每日一题】81. 搜索旋转排序数组 II
问题背景 已知存在一个按非降序排列的整数数组 n u m s nums nums,数组中的值不必互不相同。 在传递给函数之前, n u m s nums nums 在预先未知的某个下标 k ( 0 < k < n u m s . l e n g t h ) k\ (0 < k < nums.length) k (0<k<…...
< OS 有关 > Android 手机 SSH 客户端 app: connectBot
connectBot 开源且功能齐全的SSH客户端,界面简洁,支持证书密钥。 下载量超 500万 方便在 Android 手机上,连接 SSH 服务器,去运行命令。 Fail2ban 12小时内抓获的 IP ~ ~ ~ ~ rootjpn:~# sudo fail2ban-client status sshd Status for the jail: sshd …...
【算法设计与分析】实验7:复杂装载及0/1背包问题的回溯法设计与求解
目录 一、实验目的 二、实验环境 三、实验内容 四、核心代码 五、记录与处理 六、思考与总结 七、完整报告和成果文件提取链接 一、实验目的 针对复杂装载问题、及0/1背包问题开展分析、建模、评价,算法设计与优化,并进行编码实践。 理解复杂装载…...
仿真设计|基于51单片机的温湿度、一氧化碳、甲醛检测报警系统
目录 具体实现功能 设计介绍 51单片机简介 资料内容 仿真实现(protues8.7) 程序(Keil5) 全部内容 资料获取 具体实现功能 (1)温湿度传感器、CO传感器、甲醛传感器实时检测温湿度值、CO值和甲醛值进…...
