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

Kafka 实战指南:原理剖析与高并发场景设计模式

一、介绍

Kafka是由 Apache 软件基金会开发的开源流处理平台,作为高吞吐量的分布式发布订阅消息系统,采用 Scala 和 Java 编写。

Kafka是一种消息服务(MQ),在理论上可以达到十万的并发。

代表的MQ软件——

kafka 十万并发

RocketMa 百万并发

rabbitMQ 十万并发

zeroMQ 百万并发

二、术语解释

1.Producer(生产者)

  • 负责将消息发送到 Kafka 集群的进程;
  • 根据消息的 Key 或分区策略,将消息路由到对应 Topic 的分区;
  • 支持异步批量发送,提升吞吐量。

2.Consumer(消费者)

  • 从 Kafka 集群订阅并处理消息的进程;
  • 通过消费者组(Consumer Group)实现负载均衡,同一组内的消费者竞争消费分区消息;
  • 通过手动提交偏移量(Offset)精确控制消费进度。

3.Broker(消息服务器)

  • Kafka 集群的核心节点,负责存储、管理消息;
  • 每个 Topic 被划分为多个分区(Partition),Broker 管理分区的分配、复制和故障转移;
  • 支持水平扩展,通过添加节点提升集群容量和性能。

4.Topic(主题) 

  • 消息的逻辑分组,按业务模块划分;
  • 物理上由多个分区组成,消息按追加模式写入分区日志;
  • 支持多生产者写入和多消费者组订阅。

5.Partition(分区)  

  • Topic 的物理分片,每个分区是有序的、不可变的消息日志;
  • 单个分区内的消息严格有序,不同分区间消息顺序无关;
  • 通过多分区并行读写,提升消息处理吞吐量。

三、作用

用来处理消费者在网站中的所有动作流数据,就是在分布式业务环境,实现不同组件、不同的功能模块的高效通信。

四、优点

1、解耦:允许我们独立的扩展或修改列两边的处理过程;

2、扩展性: 因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可;

3、流量削峰:高流量的时候,使用消息队列作为中间件可以将流量的高峰保存在消息队列中,从而防止了系统的高请求,减轻服务器的请求处理压力;

4、可恢复性:即使一个处理消息的进程挂掉,加入队列中的消息仍可以在系统恢复后被处理;

5、顺序保证: 在大多使用场景下,数据处理的顺序都很重要。大部分消息队列本来就是排序的,并且能保证数据会按照特定的顺序来处理。Kafka保证一个Partition内的消息的有序性;

6、缓冲:有助于解决生产消息和消费消息的处理速度不一致的情况;

7、异步通信:消息队列允许用户把消息放入队列但不立即处理它。

(解耦是降低系统组件间依赖,使其独立运行、灵活扩展的设计方法,常见于消息队列、微服务等场景,可提升系统灵活性与可靠性)

 (Partition是分区,在Kafka工作过程中,生产者将消息发送到特定Topic主题中,消费者通过订阅Topic 获取消息,而每个Topic可分为多个分区,分区是Topic的物理分片,如下图所示)

(Kafka设定Topic主题这一概念就是为了确保消息的有序性的,就是确保消息的顺序的)

五、观察者模式

(1)描述

观察者模式(Observer),又叫发布-订阅模式(Publish/Subscribe)

(2)依赖关系

定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新,一个对象目标对象的状态发生改变,所有的依赖对象观察者对象都将得到通知。

六、生产者消费者模式

(1)介绍

生产者消费者模式——

即N个线程进行生产,同时N个线程进行消费,两种角色通过内存缓冲区进行通信

 生产者——

负责向缓冲区里面添加数据单元

 消费者——

负责从缓冲区里面取出数据单元

(2)与传统模式的比较

传统模式——

生产者直接将消息传递给指定的消费者;

耦合性特别高,当生产者或者消费者发生变化,都需要重写业务逻辑。

生产者消费者模式——

通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列(通过FIFO以及阻塞机制来实现)来进行通讯。

(3)数据传递流程

 生产者将生产好的数据以数据单元的格式放入缓存区,之后消费者从缓冲区中取出数据单元,而且整个过程一般遵循FIFO先进先出原则,支持多并发

七、缓冲区

(1)解耦

假设生产者和消费者分别是两个类。如果让生产者直接调用消费者的某个方法,那么生产者对于消费者就会产生依赖,所以缓冲区通过中间容器切断生产者与消费者的直接联系,实现代码、执行流程、故障和扩展的全面解耦,以支持异步处理,增强系统灵活性和可靠性

(2)支持并发

生产者直接同步调用消费者方法时,若消费者处理缓慢会导致生产者阻塞。通过缓冲区的异步处理机制解耦生产与消费流程,允许多线程 / 进程并行读写,结合线程安全保障操作原子性,并通过流量控制实现流量削峰,显著提升系统吞吐量和资源利用率。

(3)支持忙闲不均

缓冲区还有另一个好处。如果制造数据的速度时快时慢,缓冲区的好处就体现出来了,当数据制造快的时候,消费者来不及处理,未处理的数据可以暂时存在缓冲区中,等生产者的制造速度慢下来,消费者再慢慢处理掉。

八、消息系统的核心原理

(1)点对点消息传递

在点对点消息系统中,消息持久化到一个队列中,此时将有一个或多个消费者消费队列中的数据,但是一条消息只能被消费一次,当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中删除,该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序,基于推送模型的消息系统,由消息代理记录消费状态,消息代理将消息推送(push)到消费者后,标记这条消息为已经被消费,但是这种方式无法很好地保证消费的处理语义。

 (2)发布订阅消息传递

在发布-订阅消息系统中,消息被持久化到一个topic(主题)中,消费者可以订阅一个或多个topic,消费者可以消费该topic中所有的数据,同一条数据可以被多个消费者消费,数据被消费后不会立马删除,在发布-订阅消息系统中,消息的生产者被称为发布者,消费者被称为订阅者,Kafka 采取拉取模型(Pol),由自己控制消费速度,消费者可以按照任意的偏移量进行消费。

(点对点模型就好比那邮递员按顺序送信,一封信只能被一个收件人收取,且按发送顺序到达邮箱;而发布订阅模型就类似广播,一条消息被所有人接收,只是顺序可能不一致)

九、消息确认机制

(1)介绍

Kafka 通过消费者手动提交偏移量(Offset)来实现消息确认。

当product发送消息后,leader(主)将消息同步给follower(从),然后返回ack给producter,表示消息已经收到了,此时才可以继续发送下一条消息。

Kafka提供了以下三种ack级别(就是下面的可靠性语义)——

0(异步):leader接受到了消息马上返回ack,此时可能还没有写入磁盘,可能丢失数据。

1(半同步):leader将消息写入磁盘后,马上返回ack,此时可能还没有同步follower,同样可能丢失数据。

-1(all)(同步):leader和follower都将数据写入磁盘后,返回ack。但是如果在写入磁盘后,ack尚未发送,此时leader发生了故障,会导致数据写入重复。

(这三个就是,0先不向从服务器保持同步,直接返回ack确认;1是只要有一台从服务器同步了,就直接返回ack确认;而-1是确保所有的从服务器同步完成后才返回ack确认)

(2)确认流程

消费者从分区拉取消息并处理;

处理完成后,消费者向Kafka提交已处理消息的偏移量;

Kafka记录偏移量,作为消息 “已确认” 的依据。

(3)可靠性语义

至少一次(At-Least-Once):先处理消息再提交,确保消息不丢失(可能重复

最多一次(At-Most-Once):先提交再处理,避免重复(可能丢失

 (4)优缺点

优点——

精确控制:消费者手动提交偏移量,确保消息处理完成后确认,保障数据一致性;

灵活语义:支持防丢失、防重复的不同功能,适配不同可靠性需求;

异步批量优化:批量提交减少交互次数,提升吞吐量;

高可用性:消费者组内实例独立管理偏移量,故障不影响其他实例。

缺点——

开发难度大:需手动管理偏移量提交逻辑,处理异常场景,易引入bug;

数据风险高:至少一次语义可能导致消息重复,最多一次语义有消息丢失风险;

运维成本高:偏移量存储在内部主题,需额外维护分区和副本;

可见性受影响:延迟确认会使消息未及时标记为已消费,影响可见性。  

十、副本机制

就是Kafka接收到消息(数据)会为之创建对应的副本,确保整个服务的高可用性和数据冗余。


Kafka安装部署-CSDN博客

相关文章:

Kafka 实战指南:原理剖析与高并发场景设计模式

一、介绍 Kafka是由 Apache 软件基金会开发的开源流处理平台,作为高吞吐量的分布式发布订阅消息系统,采用 Scala 和 Java 编写。 Kafka是一种消息服务(MQ),在理论上可以达到十万的并发。 代表的MQ软件—— kafka 十万…...

黑盒测试的判定表法(能对多条件依赖关系进行设计测试点)

定义: 判定表是分析和表达多逻辑条件下执行不同操作的工具。就是指把所有的输入条件、所有可能采取的动作按表格列出来,每一种条件和动作的组合构成一条规则,也即一条用例。 1.判定表法的引用 等价类边界值分析法主要关注单个输入类条件的测试并未考虑…...

SQLMesh系列教程:基于指标构建一致的分析语义层应用实践

本文深入探讨SQLMesh指标框架的核心概念、定义方法及应用场景。通过统一的语义层管理,SQLMesh解决了数据分析中指标定义不一致的痛点,实现了跨团队协作的数据一致性。文章包含指标定义语法详解、自动表连接机制解析、派生指标构建方法,并通过…...

解决Docker端口映射后外网无法访问的问题

一、前言 今天因为服务器宕机,重新启动后发现docker部署的mysql和redis都无法通过外网访问。经过排查原因是ip转发没有开启。下面教大家如何解决 二、问题排查 (1) 查看防火墙运行情况 使用firewall-cmd --state 如果防火墙处于not running,则可以排…...

如何指定运行amd64架构的ubuntu?

如何指定运行amd64架构的ubuntu 下面这个命令如何制定运行amd64架构的ubuntu? docker run -it -v $(pwd):/workspace ubuntu:20.04 bash这个命令已经非常接近正确运行一个基于 amd64 架构的 Ubuntu 容器了,但如果你想明确指定运行 amd64 架构的镜像&am…...

[MySQL]数据类型

数据类型 1.数据类型分类2.数值类型2.1 tinyint类型无符号类型举例 3.bit类型3.1 基本语法 4. 小数类型4.1 float语法4.2 decimal语法 5.字符串类型5.1 char类型5.2 varchar 6.日期类型7.enum和set查询语句 1.数据类型分类 接下来就对上面的四种类型进行介绍 2.数值类型 数值类…...

基于Python的Django框架的手机购物商城管理系统

标题:基于Python的Django框架的手机购物商城管理系统 内容:1.摘要 随着互联网的快速发展,手机购物逐渐成为人们日常生活中不可或缺的一部分。本研究的目的是开发一个基于Python的Django框架的手机购物商城管理系统,以提高购物商城的管理效率和用户体验。…...

大模型在2型糖尿病预测及围手术期管理中的应用研究

目录 一、引言 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与创新点 二、大模型预测 2 型糖尿病的原理与方法 2.1 大模型概述 2.2 用于 2 型糖尿病预测的大模型类型 2.3 模型训练与数据来源 2.4 预测指标与算法 三、术前风险预测与评估 3.1 血糖控制情况预…...

JavaEE--多线程

一、认识线程 1. 什么是线程 线程(Thread)是计算机科学中的基本概念,指的是程序内部的一条执行路径。一个进程可以包含多个线程,每个线程共享进程的资源,包括内存空间、文件描述符等。线程可以同时执行多个任务&…...

自动化测试之等待方式

在自动化测试中,等待是一个重要的技术,用于处理页面加载、元素定位、元素状态改变等延迟问题。 等待能够确保在条件满足后再进行后续操作,提高自动化测试的稳定性以及可靠性。 等待方式:显示等待、隐式等待、线程睡眠 1. 显式等…...

git中用于生成commitId与其父commitId间的文件差异文件树

生成commitId与其父commitId间的文件差异文件树 #!/bin/bash # # 用于生成目标commitId与其父commitId间文件差异 # commit_id$1 # 输入目标commit的哈希值 old_dir"old_version" new_dir"new_version"# 创建目录 mkdir -p "$old_dir" "$…...

Ubuntu / Debian 创建快捷方式启动提权

简述 在 Linux 系统中,.desktop 文件是 桌面入口文件,用于在桌面环境(如 GNOME、KDE)中定义应用程序的启动方式、图标、名称等信息。当你执行 touch idea.desktop 时,实际上创建了一个空的 .desktop 文件(…...

VLA 论文精读(三)Diffusion Policy: Visuomotor Policy Learning via Action Diffusion

这篇笔记用来描述 2023年 发表在arxiv上的一篇有关VLA领域的论文,这篇笔记记录的是该论文 2024年03月的改版后。 写在最前面 为了方便你的阅读,以下几点的注意事项请务必了解: 该系列文章每个字都是我理解后自行翻译并写上去的,…...

ASP.NET Core 中实现 SSE 流式响应的简单例子

[HttpGet] public async Task<IActionResult> SseExample() {// 请求头Response.Headers.Add("Content-Type", "text/event-stream");Response.Headers.Add("Cache-Control", "no-cache");Response.Headers.Add("Connectio…...

「Unity3D」TMP_InputField关闭虚拟键盘后,再次打开虚拟键盘,此时无法回调onSelect的问题

TMP_InputField可以注册一个onSelect回调函数&#xff0c;在InputField选中的时候回调&#xff0c;但在虚拟键盘手动关闭或被返回取消的时候&#xff0c;此时再打开虚拟键盘时&#xff0c;就不会调用onSelect。 原因在于&#xff0c;虚拟键盘有三种关闭的操作方式&#xff1a;…...

手工排查后门木马的常用姿势

声明&#xff01;本文章所有的工具分享仅仅只是供大家学习交流为主&#xff0c;切勿用于非法用途&#xff0c;如有任何触犯法律的行为&#xff0c;均与本人及团队无关&#xff01;&#xff01;&#xff01; 1. 检查异常文件 &#xff08;1&#xff09;查找最近修改的文件 # 查…...

VRRP协议

基础概念 Master 路由器:“Master 路由器”在一个 VRRP 组中承担报文转发任务。在每一个 VRRP 组中&#xff0c;只有 Master 路由器才会响应针对虚拟 IP 地址的 ARP Request。Master 路由器会以一定的时间间隔周期性地发送 VRRP 报文&#xff0c;以便通知同一个 VRRP 组中的 B…...

【JavaEE】MyBatis 综合练习(图书管理系统)

目录 一、数据库表二、引入依赖&#xff1a;三、Model创建四、用户登录五、添加图书六、图书列表七、修改图书八、删除图书九、批量删除十、强制登录 图书管理系统 一、数据库表 我们使用两张表&#xff0c;一张用户表uset_test来记录登录的用户信息&#xff0c;一张图书表boo…...

ArkUI —— 组件导航

创建导航页 // src\main\ets\pages\Index.ets Entry Component struct Index {// 路由栈Provide(pathInfos) pathInfos: NavPathStack new NavPathStack()build() {Navigation(this.pathInfos) {}} }创建导航子页 this.navPath.pushPathByName(AccountTag, 账本分类管理)// …...

数据处理与机器学习入门

一、数据处理概述 数据处理是通过统计学、机器学习和数据挖掘方法从原始数据中提取有价值信息的过程。数据处理的目标是将杂乱无章的原始数据转化为可用于分析和建模的结构化数据。对于小规模数据处理&#xff0c;常用工具分为两类&#xff1a; • 可视化分析工具&#xff1a…...

Markdown在线转word格式

1、打开网址 https://dillinger.io/ 2、输入markdown格式文章 3、直接转换为右边的word格式 4、复制粘贴即可。...

Redis延时队列在订单超时未报到场景的应用分享

一、引言 在电商、医疗预约等众多业务场景中&#xff0c;经常会遇到需要处理超时任务的情况。比如医疗预约订单&#xff0c;如果患者在支付成功后&#xff0c;到了预约结束时间还未报到&#xff0c;系统需要自动取消订单。为了实现这样的功能&#xff0c;我们可以利用 Redis 延…...

vue前端代码作业——待办事项

美化样式示意图&#xff1a; 后端IDEA代码示意图&#xff1a; 代码解释&#xff1a; 1. isAllChecked 计算属性的作用 isAllChecked 用于实现 “全选 / 全不选” 功能&#xff0c;它是一个 双向绑定 的计算属性&#xff08;因为 v-model 需要同时支持读取和设置值&#xff09…...

docker镜像拉取失败

hub.docker.com中提供的docker pull命令在服务器拉取镜像时报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 这个错误通常表明Docker客户…...

Ruby 简介

Ruby 简介 引言 Ruby 是一种广泛使用的动态、开源的编程语言,自 1995 年由日本程序员 Yukihiro Matsumoto(通称 Matz)设计以来,它以其优雅的语法、强大的库支持和跨平台特性赢得了全球开发者的青睐。本文将详细介绍 Ruby 的起源、特点、应用领域以及它在现代软件开发中的…...

解决 FFmpeg 使用 C/C++ 接口时,解码没有 shell 快的问题(使用多线程)

一、问题 硬件设备为香橙派 5Plus&#xff0c;最近需要使用硬件视频解码来加速 YOLO 的检测&#xff0c;shell 窗口的FFmpeg已经调通&#xff0c;详见文章&#xff1a; 编译支持 RKmpp 和 RGA 的 ffmpeg 源码_rk3588 ffmpeg mpp-CSDN博客https://blog.csdn.net/plmm__/article…...

sqlalchemy:将mysql切换到OpenGauss

说明 之前python的项目使用的mysql&#xff0c;近期要切换到国产数据库OpenGauss。 之前的方案是fastapisqlalchemy&#xff0c;测试下来发现不用改代码&#xff0c;只要改下配置即可。 切换方案 安装openGauss-connector-python-psycopg2 其代码工程在&#xff1a;https:…...

缓存使用纪要

一、本地缓存&#xff1a;Caffeine 1、简介 Caffeine是一种高性能、高命中率、内存占用低的本地缓存库&#xff0c;简单来说它是 Guava Cache 的优化加强版&#xff0c;是当下最流行、最佳&#xff08;最优&#xff09;缓存框架。 Spring5 即将放弃掉 Guava Cache 作为缓存机…...

Qt之Service开发

一、概述 基于Qt的用于开发系统服务(守护进程)和后台服务,有以下几个优秀的开源 QtService 框架和库。 1. QtService (官方解决方案) GitHub: https://github.com/qtproject/qt-solutions/tree/master/qtservice 特点: 官方提供的服务框架 支持 Windows 服务和 Linux 守护…...

ssm框架之Spring

Spring框架介绍 Spring框架是一个轻量级的企业级应用框架 通过它可以贯穿表现层、业务层、持久层。集成方便&#xff0c;简单易用&#xff0c;具有如下特点&#xff1a; Spring框架特色 Spring设计理念 是面向Bean的编程 Spring两大核心技术 控制反转(IoC&#xff1a;Inver…...

Flutter 开发环境配置--宇宙级教学!

目录 一、安装环境&#xff08;Windows&#xff09;二、Android 创建Flutter项目三、VSCode 搭建环境四、补充 一、安装环境&#xff08;Windows&#xff09; Flutter SDK 下载 推荐使用中国镜像站点下载 Flutter SDK&#xff0c;速度更快&#xff1a;中国环境 或者从官网下载…...

音视频 YUV格式详解

前言 本文介绍YUV色彩模型,YUV的分类和常见格式。 RGB色彩模型 在RGB颜色空间中,任意色光F都可以使用R、G、B三色不同的分量混合相加而成即: F = R + G + B.。即我们熟悉的三原色模型。 RGB色彩空间根据每个分量在计算机中占用的存储字节数可以分为以下几种类型,字节数…...

力扣 第 153 场双周赛 讲题

文章目录 Q1.字符串的反转度Q2.操作后最大活跃区段数I3500.将数组分割为子数组的最小代价 Q1.字符串的反转度 签到题,直接建立一个映射表即可 class Solution:def reverseDegree(self, s: str) -> int:# 先建立映射表ss "abcdefghijklmnopqrstuvwxyz"store {}i…...

grafana 配置页面告警

添加告警规则 1.登录grafana 点击 Alerting > Alert rules 点击 New alert rule 2.填写告警规则名字 3.配置告警规则 选择数据源为 Loki 单机 Builder 单机Label brower 单机 node_name 标签&#xff0c;选择一个主机&#xff0c;选好后单机 Show logs 这时候查询语…...

Cent OS7+Docker+Dify

由于我之前安装了Dify v1.0.0&#xff0c;出现了一些问题&#xff1a;无法删除&#xff0c;包括&#xff1a;知识库中的文件、应用、智能体、工作流&#xff0c;都无法删除。现在把服务器初始化&#xff0c;一步步重新安装&#xff0c;从0到有。 目录 1、服务器重装系统和配置…...

【自学笔记】PHP语言基础知识点总览-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. PHP 简介2. PHP 环境搭建3. 基本语法变量与常量数据类型运算符 4. 控制结构条件语句循环语句 5. 函数函数定义与调用作用域 6. 数组7. 字符串8. 表单处理9. 会话…...

Android Gradle 下载插件或依赖太慢

问题与处理策略 问题描述 Android 项目中&#xff0c;settings.gradle 文件中&#xff0c;有如下配置&#xff0c;Gradle 插件或依赖下载速度慢 pluginManagement {repositories {gradlePluginPortal()google()mavenCentral()} }dependencyResolutionManagement {repositori…...

python-59-基于python内置库解析html获取标签关键信息

文章目录 1 html.parser1.1 初始化和基础使用1.1.1 handle_starttag(self, tag, attrs)1.1.2 handle_endtag(self, tag)1.1.3 handle_startendtag(self, tag, attrs)1.1.4 handle_data(self, data)1.1.5 handle_comment(self, data)1.2 解析HTML文档的流程2 百度搜索关键词链接…...

elementplus的el-tabs路由式

在使用 Element Plus 的 el-tabs 组件&#xff0c;实现路由式的切换&#xff08;即点击标签页来切换不同的路由页面&#xff09;。下面是一个基于 Vue 3 和 Element Plus 实现路由式 el-tabs 的基本步骤和示例。 步骤 1: 安装必要的库 在vue3项目安装 Vue Router 和 Element …...

ArcGIS地理信息系统空间分析实验教程学习

ArcGIS 作为地理信息系统领域的经典软件&#xff0c;以其强大的功能和广泛的应用场景&#xff0c;成为了众多学者、研究人员和专业人士的首选工具。它不仅可以高效地处理和可视化地理空间数据&#xff0c;还能通过复杂的空间分析模型&#xff0c;揭示地理现象背后的规律和趋势。…...

mac部署CAT监控服务

在 Mac 上部署美团点评开源的 CAT 监控服务端&#xff0c;可以按照以下步骤操作&#xff1a; 1. 环境准备 1.1 安装依赖 确保已安装以下工具&#xff1a; JDK 8&#xff08;建议 OpenJDK 11&#xff09; MySQL 5.7&#xff08;存储监控数据&#xff09;&#xff08;8.0不支持…...

鸿蒙OS 5 架构设计探秘:从分层设计到多端部署

文章目录 鸿蒙OS架构设计探秘&#xff1a;从分层设计到多端部署一、鸿蒙的分层架构设计二、模块化设计的精髓三、智慧分发设计&#xff1a;资源的动态调度四、一次开发&#xff0c;多端部署的实践总结与思考 鸿蒙OS架构设计探秘&#xff1a;从分层设计到多端部署 最近两年来&a…...

深入解析:ElasticSearch Query 查询方式

全文目录&#xff1a; 开篇语前言摘要概述ElasticSearch Query 查询方式详解1. Match 查询&#xff08;全文搜索&#xff09;1.1 Match 查询示例1.2 Match 查询参数扩展 2. Term 查询&#xff08;精准查询&#xff09;2.1 Term 查询示例2.2 Terms 查询 3. Bool 查询&#xff08…...

HTML5贪吃蛇游戏开发经验分享

HTML5贪吃蛇游戏开发经验分享 这里写目录标题 HTML5贪吃蛇游戏开发经验分享项目介绍技术栈核心功能实现1. 游戏初始化2. 蛇的移动控制3. 碰撞检测4. 食物生成 开发心得项目收获后续优化方向结语 项目介绍 在这个项目中&#xff0c;我使用HTML5 Canvas和原生JavaScript实现了一…...

桥接模式_结构型_GOF23

桥接模式 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;核心思想是将抽象与实现分离&#xff0c;使两者能独立变化。它像一座连接两岸的桥梁&#xff0c;让“抽象层”和“实现层”自由组合&#xff0c;避免因多维度变化导致的“类爆炸”问…...

卡尔曼滤波入门(二)

核心思想 卡尔曼滤波的核心就是在不确定中寻找最优&#xff0c;那么怎么定义最优呢&#xff1f;答案是均方误差最小的&#xff0c;便是最优。 卡尔曼滤波本质上是一种动态系统状态估计器&#xff0c;它回答了这样一个问题&#xff1a; 如何从充满噪声的观测数据中&#xff0c…...

有关pip与conda的介绍

Conda vs. Pip vs. Virtualenv 命令对比 任务Conda 命令Pip 命令Virtualenv 命令安装包conda install $PACKAGE_NAMEpip install $PACKAGE_NAMEX更新包conda update --name $ENVIRONMENT_NAME $PACKAGE_NAMEpip install --upgrade $PACKAGE_NAMEX更新包管理器conda update con…...

【Portainer】Docker可视化组件安装

Portainer Portainer 是用于管理容器化环境的一体化平台工程解决方案&#xff0c;提供广泛的定制功能&#xff0c;以满足个人开发人员和企业团队的需求。 官方地址: https://www.portainer.io/ 安装 在 WSL / Docker Desktop 上使用 Docker 安装 Portainer CE 通过命令或UI页…...

基于深度神经网络的图像防篡改检测方法研究

标题:基于深度神经网络的图像防篡改检测方法研究 内容:1.摘要 随着数字化时代的发展&#xff0c;图像篡改现象日益普遍&#xff0c;严重影响了图像信息的真实性和可靠性。本文旨在研究基于深度神经网络的图像防篡改检测方法&#xff0c;以有效识别被篡改的图像。通过收集大量真…...

MATLAB导入Excel数据

假如Excel中存在三列数据需要导入Matlab中。 保证该Excel文件与Matlab程序在同一目录下。 function [time, voltage, current] test(filename)% 读取Excel文件并提取时间、电压、电流数据% 输入参数:% filename: Excel文件名&#xff08;需包含路径&#xff0c;如C:\data\…...