Kafka高频面试题整理
文章目录
- 1、什么是Kafka?
- 2、kafka基本概念
- 3、工作流程
- 4、Kafka的数据模型与消息存储机制
- 1)索引文件
- 2)数据文件
- 5、ACKS 机制
- 6、生产者重试机制:
- 7、kafka是pull还是push
- 8、kafka高性能高吞吐的原因
- 1)磁盘顺序读写:保证了消息的堆积
- 2)零拷贝机制
- 3)分区分段+索引
- 4)批量压缩
- 5)直接操作pagecache
- 9、kafka的rebalance是什么
- 1) Rebalance 的触发条件
- 2)Rebalance 过程
- 3)分区分配策略
- 4)Rebalance 的影响
- 5)Rebalance 的优化
- 10、kafka能保证消息的顺序消费吗
- 11、kafka消息如何保证不被重复消费
- 12、kafka如何保证消息不丢失
- 1)生产者端保证
- 2)Broker端保证
- 3)消费者端保证
- 4)事务保证
- 13、简述kafka副本同步机制
1、什么是Kafka?
Kafka 是一个分布式流处理平台
,最初由Linkedln开发并开源,后来成为Apache软件基金会的一个顶级项目。它被设计用于高吞吐量、持久性、分布式的数据流处理。
2、kafka基本概念
- Producer - 消息生产者,就是向kafka broker发消息的客户端
- Consumer - 消息消费者,是消息的使用方,负责消费Kafka服务器上的消息。
- Topic - 主题,由用户定义并配置在Kafka服务器,用于建立Producer和Consumer之间的订关系。生产者发送消息到指定的Topic下,消息者从这个Topic下消费消息。
- Partition - 消息分区,一个topic可以分为多个 partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id (offset)
- Broker - 一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。
- Consumer Group - 消费者分组,用于归组同类消费者。每个consumer属于一个特定的consumer group,多个消费者可以共同消息一个Topic下的消息,每个消费者消费其中的部分消息,这些消费者就组成了一个分组,拥有同一个分组名称,通常也被称为消费者集群。
- Offset - 消息在partition中的偏移量。每一条消息在partition都有唯一的偏移量,消息者可以指定偏移量来指定要消费的消息。
3、工作流程
- producer先从zookeeper的"/brokers/…/state"节点找到该partition的leader
- producer将消息发送给该leader
- leader将消息写入本地log
- followers从leader pull消息
- 写入本地log后向leader发送ACK
- leader收到所有SR中的replication的ACK后,增加HW (high watermark.最后commit 的offset)并向producer发送ACK
tips:Kafka 中消息是以topic 进行分类的,生产者生产消息,消费者消费消息,都是面向topic的。topic 是逻辑上的概念,而partition 是物理上的概念,每个partition 对应一个log 文件,该log 文件中存储的就是producer 生产的数据。Producer 生产的数据会被不断追加到该log 文件未端,且每条数据都有自己的offset。消费者组中的每个消费者,都会实时记录自己消费到了哪个offset,以便出错恢复时,从上次的位置继续消费。
4、Kafka的数据模型与消息存储机制
消息存储机制:
Kafka 有Topic 和 Partition 两个概念,一个 Topic 可以有多个 Partition。在实际存储的时候,Topic + Partition 对应一个文件夹,这个文件夹对应的是这个 Partition 的数据。在 Kafka 的数据文件目录下,一个 Partition 对应一个唯一的文件夹。如果有 4个 Topic,每个 Topic 有 5个Partition,那么一共会有 4*5 =20 个文件夹。而在 文件夹下,Kafka 消息是采用 Segment File 的存储方式进行存储的。
Segment File 的大概意思是: 将大文件拆分成小文件来存储,这样一个大文件就变成了一段一段 (Segment 段)。这样的好处是 10 加载速度快,不会有很长的10 加载时间。Kafka 的消息存储就采用了这种方式。
如上图所示,在一个文件夹下的数据会根据 Kafka 的配置拆分成多个小文件。拆分规则可以根据文件大小拆分,也可以根据消息条数拆分,这个是 Kafka 的一个配置,这里不细说。
在 Kafka 的数据文件夹下,分为两种类型的文件: 索引文件
(index File)和数据文件
(Data File) 。索引文件存的是消息的索引信息,帮助快速定位到某条消息。数据文件存储的是具体的消息内容。
1)索引文件
索引文件的命名
统一为数字格式,其名称表示 Kafka 消息的偏移量
索引文件存储
的是简单地索引数据,其格式为: [N,Position]。其中 N 表示索引文件里的第几条消息,而 Position则表示该条消息在数据文件(Log File) 中的物理偏移地址。例如下图中的13.497,表示:索引文件里的第 3 条消息(即 offset 368772 的消息,368772 =368769+3),其在数据文件中的物理偏移地址为 497。
2)数据文件
数据文件就是所有消息的一个列表,而每条消息都有一个固定的格式,如下图所示。
从上图可以看到 Kafka 消息的物理结构,其包含了 Kafka 消息的 ofset 信息、Kafka 消息的大小信息、版本号等等。有了这些信息之后,我们就可以正确地读取到 Kafka 消息的实际内容。
5、ACKS 机制
在 Kafka 中,消息的 ACK (Acknowledgment,确认)机制与生产者的 acks 配置有关。acks 配置表示生产者在接收到消息后等待副本同步确认的方式,具体取值有:
- acks=0:
意义: 生产者在成功将消息发送给 Kafka 服务端后不等待任何确认
。
结果: 生产者无法知道消息是否成功到达 Kafka 服务器,可能会导致消息的丢失。这种配置下,生产者不会收0到任何 ACK。 - acks=1:
意义: 生产者在成功将消息发送给 Kafka 服务端后,等待该分区的首领节点 (leader)确认
。
结果: 生产者会收到分区首领节点的 ACK。这意味着只要分区首领节点成功接收到消息,生产者就会得到确o认,而不需要等待其他副本。 - acks=all 或 acks=-1:
意义: 生产者在成功将消息发送给 Kafka 服务端后,等待所有分区副本确认
。
结果:生产者会等待分区的所有副本都成功接收到消息并确认。这是最安全的配置,因为只有当所有副本都确o认接收到消息后,才认为消息被成功提交。
6、生产者重试机制:
Kafka 生产者在发送消息后,如果设置了等待服务器的确认(通过 acks 参数配置),会等待一定时间来收到来自服务器的确认 (ack)。这个等待时间由 timeout.ms 参数控制,默认是 10000 毫秒 (10秒),如果在等待时间内没有收到服务器的确认,生产者可以选择重试发送或者处理发送失败的逻辑。这取决于生产者的配置。通常,生产者会根据配置的重试次数
和重试间隔
来进行重试,以确保消息最终被成功发送。
在 Kafka 的生产者配置中,你可以找到以下与重试相关的配置项:
- retries: 定义了生产者在发送消息时的最大重试次数.
- retry.backoff.ms: 定义了两次重试之间的等待时间间隔。
7、kafka是pull还是push
在 Kafka 中,消费者以 pull 模式工作。
- 优势:消费者通过定期向 Kafka Broker 发送请求来拉取消息。消费者可以根据自己的处理能力和需求来控制拉取的频率和每次拉取的消息量。可以批量拉取也可以单条拉取。
- 缺点:如果Kafka没有数据,会导致consumer空循环,消耗资源,可以通过参数设置,consumer拉取为空或者没有达到一定数量时阻塞(释放cpu)。
8、kafka高性能高吞吐的原因
1)磁盘顺序读写:保证了消息的堆积
- 磁盘顺序读写:
Kafka 消息以日志的形式顺序写入磁盘,利用现代操作系统的页面缓存
和顺序磁盘写入的高效性,极大地提高了写入性能。磁盘预读,预读即在读取的起始地址连续读取多个页面。 - 分区(Partitioning):
主题被划分为多个分区,每个分区在物理上是一个单独的日志文件,允许并行写入和读取。这种设计可以将负载分摊到多个服务器上,提高整体吞吐量。
Kafka 消息不是放在内存,也不依赖堆内存,而是放在页面缓存
2)零拷贝机制
Kafka 利用操作系统的零拷贝机制
来减少 CPU 资源的消耗。通过直接将数据从文件系统缓存
发送到网络缓冲区
,避免了从用户空间到内核空间的多次数据拷贝,从而提高了数据传输效率。
LINUX操作系统本身实现了零拷贝技术,Kafka利用了这个优势
传统的数据复制:为了安全等问题,用户线程不能直接操作磁盘网卡等,需要由切换成内核态,由内核线程去操作,步骤如下:
- 读取磁盘文件数据到内核缓冲区
- 将内核缓冲区的数据copy到用户缓冲区
- 将用户缓冲区的数据copy到socket的发送缓冲区
- 将socket的发送缓冲区中的数据发送到网卡、进行传输
而零拷贝技术只用将磁盘文件的数据复制到页面缓存中一次,然后将数据从页面缓存直接发送到网络中:
3)分区分段+索引
- 分段日志:
每个分区的日志文件被分成多个段(segment),并且每个段都有自己的索引文件。这种设计不仅有助于快速查找消息,还可以方便地管理日志文件的大小和过期策略。 - 批处理(Batching):
消息在写入时被批处理,通过将多条消息放在同一个请求中,减少了网络往返次数,提高了网络利用率和吞吐量。
4)批量压缩
-
高效的数据压缩:Kafka 支持多种压缩格式(如 gzip、snappy、lz4 和 zstd),生产者可以在发送消息之前对数据进行压缩。压缩不仅减少了存储空间,还减少了网络带宽的消耗,提高了整体吞吐量。
-
异步写入:
生产者可以以异步方式将消息发送到 Kafka,这样生产者无需等待消息被完全写入,立即返回并继续处理其他任务。 -
批量发送:
生产者可以批量发送消息,合并多个消息到一个请求中,减少网络交互次数,提升发送效率。
5)直接操作pagecache
直接操作pagecache,而不是JVM,避免GC耗时和创建对象耗时,且读写速度更高,进程重启,数据也不会丢失
9、kafka的rebalance是什么
Kafka 的 Rebalance(重新平衡)机制是消费者组动态调整分区分配的重要机制。它确保消费者组成员数量变化(加入或离开)或分区数量变化时,分区能被重新合理地分配到消费者上,以维持负载均衡。
1) Rebalance 的触发条件
Rebalance 机制会在以下情况下被触发:
- 消费者加入消费者组:新的消费者加入消费者组时,需要重新分配分区。
- 消费者离开消费者组:现有消费者离开(故障或主动关闭)时,必须重新分配分区给其他消费者。
- 订阅主题的分区数量变化:如果一个主题增加或减少分区,也需要触发重新平衡。
- 消费者心跳超时:消费者没有在规定时间内发送心跳(heartbeat),会被认为已离开消费者组,触发重新平衡。
2)Rebalance 过程
- 消费者协调者(Consumer Coordinator):
Kafka Broker 中有一个特定的组件称为消费者协调者,负责管理消费者组的成员和分配分区。 - 消费者加入组(Join Group):
每个消费者在启动时会向协调者发送 JoinGroup 请求,表明自己要加入某个消费者组。
协调者收到所有消费者的 JoinGroup 请求后,选举一个消费者作为组领导(Group Leader)。 - 组领导分配分区:
组领导根据分区分配策略(如 Range, RoundRobin, Sticky 等)生成新的分区分配方案,并将该方案提交给协调者。
协调者将分配方案发送给所有消费者。 - 消费者同步(Sync Group):
消费者收到新的分配方案后,会发送 SyncGroup 请求给协调者,表明自己已准备好接收新的分区。
当所有消费者都发送 SyncGroup 请求后,协调者完成重新平衡。
3)分区分配策略
Kafka 提供了几种分区分配策略:
- RangeAssignor:
默认分配策略。按分区顺序平均分配给消费者。适合主题数较少、每个主题分区数多的情况。 - RoundRobinAssignor:
按轮询方式分配分区。适合主题数较多、每个主题分区数较少的情况。 - StickyAssignor:
尽量保持之前的分配结果,仅在需要时才重新分配分区,以减少分区重新分配的次数,减少消费者重平衡的开销。
4)Rebalance 的影响
Rebalance 是一个昂贵的操作,会导致以下影响:
- 消息消费中断:在重新平衡过程中,所有消费者会停止消费,直到重新分配完成。
- 负载增加:重新平衡会导致分区的重新分配和消息的重新拉取,增加系统负载。
- 潜在数据重复消费:由于消费者可能在重新平衡前后重复拉取同一分区的消息,可能会导致数据重复消费。
5)Rebalance 的优化
为了减少 Rebalance 带来的影响,可以采取以下措施:
- 调整 session.timeout.ms 和 heartbeat.interval.ms 参数,确保消费者故障能快速被检测到,但也要避免频繁的心跳超时触发重新平衡。
- 消费者预分配策略:
使用 StickyAssignor 分配策略减少分区重新分配的频率和范围。 - 尽量减少消费者组的变动:
避免频繁启动或停止消费者,保持消费者组的稳定性。
10、kafka能保证消息的顺序消费吗
Kafka 提供了分区内顺序保证,但不保证全局顺序。
1)分区内顺序保证
分区内消息顺序:Kafka 保证同一分区内的消息是按发送顺序存储的。因此,对于同一分区内的消息,消费者会按照它们被生产者发送的顺序来消费。
2)保证消息顺序的策略
如果需要保证某些消息的顺序性,可以采用以下策略:
- 将所有消息放入一个分区:
通过使用单个分区,可以保证消息的全局顺序性。然而,这样做会限制并行处理能力和吞吐量,因为单个分区只能由一个消费者线程处理。 - 使用相同的键:
对于需要顺序处理的消息,使用相同的键将这些消息发送到同一个分区。这种方式可以在多分区的情况下部分保证顺序性。
3)应用层排序:
如果消息需要全局顺序,消费者可以在应用层进行排序。
例如,消费者在接收到消息后,可以根据消息的时间戳或其他顺序字段进行排序处理。
11、kafka消息如何保证不被重复消费
Kafka 提供了多种机制和策略来减少消息重复消费的可能性,包括手动提交偏移量
、幂等性生产者
、事务性生产者
,以及在应用层实现幂等性
。通过合理配置和使用这些机制,可以在很大程度上避免消息的重复消费,并确保消息处理的准确性和可靠性。
1)手动提交(enable.auto.commit=false)允许消费者在处理完消息后手动提交偏移量。
2)Kafka 生产者从 0.11.0.0 版本开始支持幂等性。启用幂等性后,Kafka 保证相同的消息不会被多次写入,即使由于网络分区或生产者重试。
配置幂等性生产者:
设置 enable.idempotence=true
3)Kafka 还支持事务性生产者,允许将多个消息发送到多个分区作为单个原子操作,以实现端到端的消息传递保证。
配置事务性生产者:
设置 transactional.id 和 enable.idempotence=true
4)消费者幂等性
虽然 Kafka 本身并不保证消费者的幂等性,但消费者可以通过在应用层实现幂等性来避免重复处理消息。常见的策略包括:
- 使用唯一标识符:每个消息携带唯一标识符,处理消息时检查是否已处理过该标识符。
- 数据库去重:在数据库中保存已处理消息的偏移量或唯一标识符,确保同一个消息不会被处理多次。
12、kafka如何保证消息不丢失
Kafka 通过在生产者、Broker 和消费者端的多层机制来确保消息不丢失。合理配置和使用这些机制可以在极大程度上保证消息的可靠性和系统的稳定性。以下是一些重要的配置总结:
生产者:acks=all、enable.idempotence=true、retries 和事务性生产者。
Broker:多副本、min.insync.replicas、日志持久化和保留策略。
消费者:手动提交偏移量、再平衡监听器和事务性消费者。
1)生产者端保证
- a. 设置 acks 参数
acks=all:确保消息被所有同步副本确认后才返回成功。这个配置保证了即使一个副本失败,消息也不会丢失。 - b. 重试机制
retries:设置重试次数,当发送消息失败时自动重试,避免临时的网络问题或其他临时故障导致消息丢失。 - c. 幂等性生产者
enable.idempotence:开启幂等性,确保即使重试,消息也不会被重复写入。
2)Broker端保证
- a. 副本机制
多副本:Kafka 的每个分区都有一个主副本和多个备份副本,确保数据冗余。
最小同步副本(min.insync.replicas):确保至少有 min.insync.replicas 副本是同步的,消息才能被写入。 - b. 数据持久化
日志文件持久化:Kafka 将消息持久化到磁盘,配置 log.dirs 设置日志存储目录,确保数据写入磁盘。 - c. 数据清理策略
日志保留策略:配置 retention.ms 和 retention.bytes 保证数据不会被过早清理,log.retention.ms 控制日志保留时间。
3)消费者端保证
- a. 手动提交偏移量
手动提交:消费者处理完消息后手动提交偏移量,确保在成功处理消息后才更新偏移量,防止消息处理失败导致的消息丢失。 - b. 再平衡监听器
再平衡监听器:实现 ConsumerRebalanceListener 接口,在分区再平衡前后提交偏移量,确保不会丢失消息。
4)事务保证
事务性生产者:确保多个消息和分区的原子写入,避免部分消息成功写入导致的数据不一致。
13、简述kafka副本同步机制
ISR详情参考:Kafka之ISR机制的理解
相关文章:
Kafka高频面试题整理
文章目录 1、什么是Kafka?2、kafka基本概念3、工作流程4、Kafka的数据模型与消息存储机制1)索引文件2)数据文件 5、ACKS 机制6、生产者重试机制:7、kafka是pull还是push8、kafka高性能高吞吐的原因1)磁盘顺序读写:保证了消息的堆积2)零拷贝机…...
uniapp地图自定义文字和图标
这是我的结构: <map classmap id"map" :latitude"latitude" :longitude"longitude" markertap"handleMarkerClick" :show-location"true" :markers"covers" /> 记住别忘了在data中定义变量…...
k8s_探针专题
关于探针 生产环境中一定要给pod设置探针,不然pod内的应用发生异常时,K8s将不会重启pod。 需要遵循以下几个原则(本人自己总结,仅供参考): 探针尽量简单,不要消耗过多资源。因为探针较为频繁的…...
MySQL触发器基本结构
1、修改分隔符符号 delimiter $$ 可以修改成$$ //都行 2、创建触发器函数名称 create trigger 函数名 3、什么样的操作出发,操作那个表 after:......之后触发 befor:......之前触发 insert:插入被触发 update:修改被触…...
前缀和(一维前缀和+二维前缀和)
前缀和 定义: 前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而差分可以看成前缀和的逆运算。合理的使用前缀和与差分,可以将某些复杂的问题简单化。 用途: 前缀和一般用于统计一个区间的和&…...
web前端五行属性:深入探索与实战解析
web前端五行属性:深入探索与实战解析 在Web前端开发中,五行属性这一概念或许听起来有些陌生。然而,如果我们将其与前端开发的核心理念相结合,就能发现其中蕴含的深刻内涵。本文将从四个方面、五个方面、六个方面和七个方面&#…...
白酒:茅台镇白酒的酒厂社会责任与可持续发展
云仓酒庄豪迈白酒,作为茅台镇的品牌,不仅在产品品质和口感方面有着卓着的表现,在酒厂社会责任和可持续发展方面也做出了积极的探索和实践。 首先,云仓酒庄豪迈白酒注重环境保护和资源利用。酒厂在生产过程中严格控制能源消耗和排放…...
音视频开发_SDL音频播放器的实现
今天向大家介绍一下如何通过 SDL 实现一个PCM音频播放器。这是一个最简单的播放器,它不涉及到音频的解复用,解码等工作。我们只需要将音频原始数据喂给 SDL 音频接口就可以听到悦耳的声音了。在下面的列子中我将向你演示,使用 SDL 做这样一个…...
C语言学习系列:初识C语言
前言,C语言是什么 语言,比如中文、英语、法语、德语等,是人与人交流的工具。 C语言也是语言,不过是一种特殊的语言,是人与计算机交流的工具。 为什么叫C语言呢? 这就要从C语言的历史说起了。 一&#…...
利用反向代理编写HTTP抓包工具——可视化界面
手写HTTP抓包工具——可视化界面 项目描述语言golang可视化fynev2功能代理抓包、重发、记录 目录 1. 示例1.1 主界面1.2 开启反向代理1.3 抓包1.4 历史记录1.5 重发 2. 核心代码2.1 GUI2.1 抓包 3. 结语3.1 传送门 1. 示例 1.1 主界面 1.2 开启反向代理 1.3 抓包 1.4 历史记录…...
下拉框数据被遮挡 且 后续数据无法下拉的 解决方法
目录 前言1. 问题所示2. 原理分析3. 解决方法3.1 添加空白版2.2 调整z-index2.3 父容器的溢出属性2.4 调整样式属性4. 效果图前言 小程序使用的是Uniapp,原理都差不多,索性标题就不标注Uniapp(小程序) 对于该问题调试了一个晚上,最终解决,对此记录下来 1. 问题所示 执…...
课设--学生成绩管理系统(二)
欢迎来到 Papicatch的博客 目录 🐋引言 🦈编写目的 🦈项目说明 🐋产品介绍 🦈产品概要说明 🦈产品用户定位 🦈产品中的角色 🐋 产品总体业务流程图 🐋 产品功…...
STM32CubeMX配置-外部中断配置
一、简介 MCU为STM32G070,配置为上升沿触发外部中断,在上升沿外部中断回调函数中进行相关操作。 二、外部中断配置 查看规格书中管教描述,找到I/O对应的外部中断线,然后进行如下上升沿触发外部中断配置。 三、生成代码 调用上升沿…...
基于Vue的日程排班表 - common-schedule
原文:基于Vue的日程排班表 - common-schedule-CSDN博客...
SmartEDA、Multisim、Proteus大比拼:电路设计王者之争?
在电路设计领域,SmartEDA、Multisim和Proteus无疑是三款备受瞩目的软件工具。它们各自拥有独特的功能和优势,但在这场电路设计王者的竞争中,谁才是真正的领跑者?让我们深入探究这三款软件的异同,揭示它们各自的魅力所在…...
【教资科一传统文化】文化素养传统文化之神话传说、天文历法、古代称谓、中国传统节日、成语典故
目录 编辑 传统文化之天文历法 (一)四时(四季)从农历、名称上掌握 (二)二十四节气(1、名称2、季节-节气3、特殊) (三)十二时辰(1.先后顺序2.时间段3.别称) (四)五更(五夜) (五)天干地支(1.名称2.纪年) 文化素养传统文化…...
Apache Pulsar 从入门到精通
一、快速入门 Pulsar 是一个分布式发布-订阅消息平台,具有非常灵活的消息模型和直观的客户端 API。 最初由 Yahoo 开发,在 2016 年开源,并于2018年9月毕业成为 Apache 基金会的顶级项目。Pulsar 已经在 Yahoo 的生产环境使用了三年多&#…...
[Bug]使用duckduckgo的duckduckgo_search API搜索图片出现了错误
现在在kaggle上学习一个课程,第一课主要是识别图片里面是不是鸟🐦。其中一步是使用duckduckgo 搜索图片,源码: from duckduckgo_search import ddg_images from fastcore.all import * from fastbook import search_images_ddgde…...
线程池若干问题
线程池中线程异常后,销毁还是复用? 线程池在提交任务前,可以提前创建线程吗? 线程池中线程异常后,销毁还是复用? 直接说结论,需要分两种情况: 使用execute()提交任务:…...
k8s+RabbitMQ单机部署
1 k8s 配置文件yaml: apiVersion: apps/v1 kind: Deployment metadata:name: rabbitmq-deploynamespace: rz-dt spec:replicas: 1selector:matchLabels:app: rabbitmqtemplate:metadata:labels:app: rabbitmqspec:containers:- name: rabbitmqimage: "rz-dt-image-server…...
github.com/therecipe/qt windows中安装
github.com/therecipe/qt windows中安装 a.准备好源码,解压到go/src/github.com/therecipe/qtwin下 b.设置cmd环境变量: set QT_DIRM:\work\tool\Qt5.14.2\5.14.2\mingw73_64 set QT_VERSION5.14.2 set QT_API5.13.0 set QT_QMAKE_DIRM:\work\tool\Qt5.14.2\5.14.2\mingw73_64\…...
LogicFlow 学习笔记——11. 对齐线 和 键盘快捷键
对齐线 Snapline 对齐线能够在节点移动过程中,将移动节点的位置与画布中其他节点位置进行对比,辅助位置调整。位置对比有如下两个方面。 节点中心位置节点的边框 对齐线使用 普通编辑模式下,默认开启对齐线,也可通过配置进行关…...
FastWeb - Lua开源跨平台网站开发服务
在网站开发领域,大家都熟知PHPStudy和宝塔这两款广受欢迎的工具,但今天我要介绍的是一款功能强大、支持跨平台的开源Lua网站开发服务——Fast Web,以及与之配套的网站管理器。 Fast Web简介 Fast Web是一款基于Lua编写的网站开发框架&#…...
原子阿波罗STM32F767程序的控制器改为STM32F407驱动LCD屏
由于手里没有原子大神的F429开发板,又还想学习原子大神的F429开发板程序,前几天,经过更换控制器,成功把原子大神的F429开发板程序用到了F407开发板上,驱动LCD屏显示成功,目的,就是熟悉原子大神的…...
04-jQuery工具函数及 jQuery 插件
1. jQuery工具函数 在jQuery中,工具函数是指直接依附于jQuery对象,针对jQuery对象本身定义的方法,即全局性的,我们统称为工具函数,或Utilites函数。 主要作用于:字符串、数组、对象。 调用格式: $.函数名()或jQuery.函数名() 1.1 $.get() 通过远程 HTTP GET 请…...
基于Python的花卉识别分类系统【W9】
简介: 基于Python的花卉识别分类系统利用深度学习和计算机视觉技术,能够准确识别和分类各种花卉,如玫瑰、郁金香和向日葵等。这种系统不仅有助于植物学研究和园艺管理,还在生态保护、智能农业和市场销售等领域展现广泛应用前景。随…...
Visual Studio Code 配置教程,手把手教你如何配置
文章目录 引言1. 安装 VS Code1.1 下载和安装1.2 初次启动 2. 基本配置2.1 设置用户和工作区配置2.2 常用配置项 3. 安装和配置扩展插件3.1 安装扩展3.2 推荐扩展3.3 配置扩展 4. 主题和配色方案4.1 安装主题4.2 切换主题4.3 自定义配色方案 5. 版本控制集成5.1 配置 Git5.2 Gi…...
教案:Horovod v0.2 介绍与使用
课程目标 了解Horovod的主要功能和优势。学习如何安装和配置Horovod。掌握Horovod在分布式训练中的应用。 教学内容 Horovod的简介和动机 动机 使单GPU训练脚本轻松扩展到多GPU训练。尽量减少代码修改以实现分布式训练。内部采用MPI模型,代码变动较少,…...
深入探索Spring Boot:原理与实践
Spring Boot作为一个简化Spring应用开发的框架,近年来在Java开发者中备受推崇。它通过提供默认配置、自动化配置和一系列开箱即用的功能,极大地简化了应用程序的开发和部署过程。在本篇文章中,我们将深入探讨Spring Boot的工作原理࿰…...
基于SSM框架的电影院售票网站
开头语: 你好呀,我是计算机学长猫哥!如果您对我们的电影院售票网站感兴趣或者有相关需求,欢迎通过文末的联系方式与我联系。 开发语言:Java 数据库:MySQL 技术:SSM框架 工具:ID…...
网站建设里的知识/网站seo标题是什么意思
在之前的学习中我们使用require()来引入我们需要的包,这其实就是模块化,各模块相互独立,可以通过某种方式引入别的模块。而这些引入方式都是遵循一定的规范的,这就是CommonJS规范。 一、Commonjs规范 目前JS标准定义的API是为了构…...
国内做免费视频网站/广州各区最新动态
ORACLE SQL语句分类 SQL语句可以被看作是一种简单、强大的计算机语言或指令。sql语句被分为以下6类:数据定义类、数据操作类、事务控制类、会话控制、系统控制、嵌入式SQL语句。 数据操作语言语句[Data manipulation language,DML] 从一个或多个表或视图…...
电子商务网站建设的过程/电子商务与网络营销教案
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。一、理解什么是MyBatis?MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持…...
用二级域名做的网站算新站吗/域名购买
题目: 小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。 魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x1个魔法币 魔法机器2:如果投入x…...
魔客吧是什麼程序做的网站/职业技能培训班
我正在尝试用箭头键和回车键使一系列按钮可导航。在我已经很容易地实现了箭头键,但是我似乎在网上找不到如何将焦点按钮绑定到enter键的答案。具体来说,我希望能够使用向上/向下键将焦点设置为按钮,然后按enter键激活按钮。在我可以用箭头高亮…...
屏山县龙华镇中心村建设招标网站/网络营销推广方案有哪些
文件上传 文件上传几乎我们天天都在使用,在工作中也会遇到这样的需求。那么我们如何前端和后端配合上传文件呢? 完整案例下载 我们在开始讲解之前,我已经提前为大家准备了一个前后端完整的案例 gitee地址: 上传文件ÿ…...