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

探索 RocketMQ:企业级消息中间件的选择与应用

一、关于RocketMQ

RocketMQ 是一个高性能、高可靠、可扩展的分布式消息中间件,它是由阿里巴巴开发并贡献给 Apache 软件基金会的一个开源项目。RocketMQ 主要用于处理大规模、高吞吐量、低延迟的消息传递,它是一个轻量级的、功能强大的消息队列系统,广泛应用于金融、电商、日志系统、数据分析等领域。

c41a6a12-fb7d-47b5-b0a0-a6e1a437a07d

RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等,总之就是葛大爷的一句话。

8d2af478-f112-4738-9d28-6a20ed02c5fa

二、发展

消息队列属于最经典的中间件之一,已经有 30 多年的历史,其发展历程可以总结为几个阶段:

  • 第一阶段,2000 年之前。这个阶段的消息队列供应商是几家商业软件巨头,比如 IBM、Oracle、Microsoft 都有自己的商业化 MQ,其中最具代表性的是 IBM MQ,价格昂贵,面向高端企业,主要是大型金融、电信等企业;这类商业 MQ 一般采用高端硬件,软硬件一体机交付,MQ 本身的软件架构是单机架构。
  • 第二阶段,2000~2007 年。进入 00 年代后,初代开源消息队列崛起,诞生了 JMS、AMQP 两大标准,与之对应的两个实现分别为 ActiveMQ、RabbitMQ,他们引领了初期的开源消息队列技术。开源极大的促进了消息队列的流行、降低了使用门槛,技术普惠化,逐渐成为了企业级架构的标配。
  • 第三阶段,2007~2017 年。PC 互联网、移动互联网爆发式发展。由于传统的消息队列无法承受亿级用户的访问流量和海量数据传输,诞生了互联网消息中间件,核心能力是全面采用分布式架构、具备很强的横向扩展能力,开源典型代表有 Kafka、RocketMQ,闭源的还有淘宝 Notify。

RocketMQ 发展的主要历程:

2007年:淘宝实施了“五彩石”项目,“五彩石”用于将交易系统从单机变成分布式,也是在这个过程中产生了阿里巴巴第一代消息引擎——Notify。

2010年:阿里巴巴B2B部门基于ActiveMQ的5.1版本也开发了自己的一款消息引擎,称为Napoli,这款消息引擎在B2B里面广泛地被使用,不仅仅是在交易领域,在很多的后台异步解耦等方面也得到了广泛的应用。

2011年:业界出现了现在被很多大数据领域所推崇的Kafka消息引擎,阿里巴巴在研究了Kafka的整体机制和架构设计之后,基于Kafka的设计使用Java进行了完全重写并推出了MetaQ 1.0版本,主要是用于解决顺序消息和海量堆积的问题。

2012年:阿里巴巴开源其自研的第三代分布式消息中间件——RocketMQ

经过几年的技术打磨,阿里称基于RocketMQ技术,目前双十一当天消息容量可达到万亿级。

2016年11月:阿里将RocketMQ捐献给Apache软件基金会,正式成为孵化项目。

阿里称会将其打造成顶级项目。这是阿里迈出的一大步,因为加入到开源软件基金会需要经过评审方的考核与观察。

坦率而言,业界还对国人的代码开源参与度仍保持着刻板印象;而Apache基金会中的342个项目中,暂时还只有Kylin、CarbonData、Eagle 、Dubbo和 RocketMQ 共计五个中国技术人主导的项目。

2017 年,RocketMQ 成功通过了 Apache Incubator 的评审,正式成为 Apache 顶级项目(Top-Level Project, TLP) 。这个标志性事件不仅提升了 RocketMQ 在全球开源社区的影响力,也使其获得了更多来自外部社区的支持和贡献。

2017年2月20日:RocketMQ正式发布4.0版本,专家称新版本适用于电商领域,金融领域,大数据领域,兼有物联网领域的编程模型。

2023 年,RocketMQ 发布了 5.x 版本,继续强化其在云原生、容器化环境中的应用,并且在微服务架构中发挥了重要作用。此版本在性能、可扩展性和稳定性方面进行了进一步优化,增强了在异构环境下的跨平台兼容性,并扩展了更多高级特性,如 精准消息投递更加细粒度的消息过滤 等。

以上就是RocketMQ的整体发展历史,其实在阿里巴巴内部围绕着RocketMQ内核打造了三款产品,分别是MetaQNotifyAliware MQ

这三者分别采用了不同的模型,MetaQ主要使用了拉模型,解决了顺序消息和海量堆积问题;Notify主要使用了推模型,解决了事务消息;而云产品Aliware MQ则是提供了商业化的版本。

三、功能特点

  1. 高可靠性: RocketMQ 提供了强大的消息可靠性保证机制。它支持 消息持久化,即使在系统崩溃后,消息仍然可以恢复。此外,RocketMQ 提供了消息重试机制,确保消息不会丢失。

  2. 高吞吐量: RocketMQ 的设计目标之一就是高吞吐量。它通过高效的网络通信和存储方式,能够处理大量的并发请求,适用于大规模分布式场景。

  3. 分布式架构: RocketMQ 使用 分布式架构,其主要组件包括 NameServer(负责服务发现),Broker(消息存储与转发),Producer(消息生产者),Consumer(消息消费者)。RocketMQ 具有水平扩展性,能够支持多台机器集群化部署,保证了系统的高可用性和弹性扩展。

  4. 顺序消息支持: RocketMQ 提供了强大的 顺序消息支持。对于需要保证消息顺序的应用,RocketMQ 可以通过同一队列中存储顺序消息,确保消费顺序的一致性。

  5. 多种消息模型: RocketMQ 支持多种消息模型,如:

    • 点对点模式(P2P) :消费者独占某个队列的消息,保证一个消息只被一个消费者消费。
    • 发布/订阅模式(Pub/Sub) :多个消费者可以订阅同一个主题(Topic),消息广播到所有消费者。
  6. 高可扩展性: RocketMQ 通过分区(Topic 分区)和分布式的消息存储,可以横向扩展,支持大规模消息的存储和处理。可以灵活地根据业务需求进行扩展。

  7. 多语言客户端支持: RocketMQ 提供了多种客户端 SDK,支持 Java、C++、Python、Go 等多种语言,方便开发者进行跨语言集成。

  8. 事务消息: RocketMQ 提供了 事务消息功能,可以支持分布式事务场景中的消息可靠性保证。通过事务消息,开发者可以保证消息与本地事务的一致性。

  9. 消息回溯与重试机制: 支持消息的 回溯功能,允许消费者查看过去的消息,还支持消息的 重试机制,确保消息处理失败时不会丢失。

  10. 灵活的消息过滤: RocketMQ 支持消息的 标签过滤(Tag-based filtering),允许消费者根据消息的标签过滤需要的消息。

四、对比其它中间件

特性RocketMQKafkaRabbitMQActiveMQNATS
开发背景阿里巴巴开发,2010 年开源,现为 Apache 顶级项目LinkedIn 开发,2011 年开源,现为 Apache 顶级项目Pivotal(现 VMware)开发,开源项目Apache 软件基金会开发,支持多协议的消息队列开源项目,初衷为轻量级实时消息传递
消息协议自定义协议,兼容 MQTT、OpenMessaging 等自定义协议(Kafka 协议)支持 AMQP、STOMP、MQTT 等多种协议支持 AMQP、OpenWire、MQTT 等多种协议NATS 协议,专注于简单的 Pub/Sub 模型
性能与吞吐量高吞吐量,低延迟,适用于高并发场景主要侧重吞吐量,适用于大数据流处理吞吐量较低,适用于中小型企业吞吐量较低,适合中小型企业应用极低的延迟和极高的吞吐量,专注于实时性
消息模型支持点对点(P2P)和发布/订阅(Pub/Sub)模式主要是发布/订阅(Pub/Sub)模型支持点对点(P2P)和发布/订阅(Pub/Sub)模型支持点对点(P2P)和发布/订阅(Pub/Sub)模型支持 Pub/Sub 模型
消息存储顺序写入,支持高效的消息持久化顺序写入,按日志存储,支持高效的消息持久化使用内存/磁盘存储,支持消息持久化使用内存/磁盘存储,支持消息持久化存储较为简单,不强调持久化
扩展性支持分布式部署,高可用,支持水平扩展高扩展性,支持分布式部署和多副本机制集群模式,但扩展性不如 RocketMQ 和 Kafka支持集群模式,扩展性相对较差高扩展性,适用于大规模水平扩展
高可用性支持主从复制,集群模式,容错性高多副本机制,较强的容错性支持镜像队列和集群模式,容错性较好支持主从复制和集群模式,容错性一般支持集群模式和多节点部署,容错性较好
事务消息原生支持事务消息和分布式事务不支持原生事务消息,需自行实现支持事务消息,但性能不如 RocketMQ支持事务消息,但一致性和性能较差不支持事务消息
顺序消息支持严格顺序消费,适合高并发场景支持分区内的顺序消费,但需要手动控制分区的数量和分布支持顺序消费,但通常不如 RocketMQ 强大支持顺序消费,但不如 RocketMQ 强大不强调顺序消息处理
延迟在高并发场景下延迟较低,适用于实时消息传递吞吐量优先,延迟相对较高在高负载时延迟较高延迟较高,尤其在负载较重时延迟极低,适用于实时性要求较高的场景
适用场景高吞吐量、大规模分布式系统、事务消息、顺序消息等场景日志聚合、流数据处理、大数据平台企业消息传递、支持 AMQP 协议的系统中小规模企业消息传递、企业级应用实时数据流、IoT、微服务架构等高性能、低延迟场景
社区与生态Apache 社区支持,活跃且发展迅速Apache 社区支持,社区活跃社区活跃,广泛应用于企业级应用Apache 社区支持,但活跃度和扩展性相对较弱开源社区活跃,适用于微服务和高并发场景

总结

  • RocketMQ 在高吞吐量、低延迟和事务消息支持方面表现出色,适用于金融、电商等高并发、高可靠的场景。
  • Kafka 强调吞吐量,适用于大数据流处理、日志聚合等大规模数据平台,且具有较好的扩展性。
  • RabbitMQ 适用于中小规模企业,特别是需要支持多协议(如 AMQP)的消息传递应用。
  • ActiveMQ 相对较为传统,适合于小到中规模的企业应用,支持多协议但性能和扩展性较差。
  • NATS 轻量级、高性能,适用于实时性要求较高的场景,如物联网、微服务架构等。

五、应用场景

以下是一些典型的 RocketMQ 应用场景

  1. 金融行业
  • 交易消息系统:金融交易系统对消息的可靠性、事务性和高吞吐量有严格要求。RocketMQ 支持事务消息(Transaction Message),能够确保分布式事务的准确性,适合在银行、电商金融、支付系统中进行实时交易消息处理。
  • 风控系统:在金融风控系统中,常常需要高并发、高吞吐量的消息系统来处理海量数据。RocketMQ 的高吞吐量和低延迟特性使其适用于此类实时风控决策系统。
  • 资金调度:资金调度的核心需求是可靠性与高吞吐量,RocketMQ 能够在大规模并发请求下保证数据一致性,适合资金结算、账户调度等高并发场景。
  1. 电商平台
  • 订单处理系统:电商平台中的订单生成、支付、库存管理、物流等环节常常需要保证高并发、高吞吐量的消息传递。RocketMQ 能够保证系统的高效性,特别是在“双十一”等促销活动期间,能够平稳处理海量订单消息。
  • 异步消息处理:电商系统中,很多操作是异步的,例如支付回调、库存扣减、物流派送等。使用 RocketMQ 可以通过消息队列解耦这些操作,提高系统响应速度。
  • 促销活动推送:对于电商平台的秒杀、优惠券发放等高频业务,RocketMQ 能够提供高并发支持,保证消息的顺序和稳定性。
  1. 大数据与流处理
  • 日志收集与分析:RocketMQ 可以高效地处理海量的日志数据,支持从各类应用程序、服务器、设备等收集日志并进行实时处理。与 FlumeLogstash 等流式处理框架配合使用,能够快速地收集、传输和分析日志数据。
  • 数据流处理:在实时数据流的场景中,如实时大数据处理、数据分析、机器学习等,RocketMQ 能够以极低的延迟和高吞吐量确保数据的稳定传输,适用于大数据平台和流计算架构。
  1. 微服务架构
  • 微服务通信:在微服务架构中,服务之间通常通过异步消息传递进行解耦。RocketMQ 提供可靠的消息投递机制,可以保证服务间的数据一致性,避免系统耦合过紧。通过 RocketMQ,服务间的通信能够更加灵活、可靠。
  • 异步处理与事件驱动:RocketMQ 作为事件驱动架构(EDA)中的核心组件,能够很好地支持微服务中的异步处理和事件发布与订阅模式。事件驱动模型适用于需要处理高并发、低延迟业务的微服务系统。
  1. 物联网(IoT)
  • 设备数据收集与处理:在物联网应用中,设备的数量庞大,产生的数据量巨大,且对实时性要求较高。RocketMQ 的高吞吐量、低延迟和高可靠性非常适合用于 IoT 系统中,能够实时收集来自各类设备的数据并进行分发处理。
  • 状态监控和告警系统:RocketMQ 能够支持设备的状态数据流转,以及实时告警通知。通过将设备数据发送到消息队列中,再进行实时分析和处理,能够在出现异常时及时触发告警。
  1. 实时消息推送
  • 社交平台消息推送:在社交平台中,实时消息推送是一项核心功能,如聊天消息、通知、点赞、评论等,RocketMQ 具备高吞吐量和低延迟的特点,能够保证大规模用户的实时消息推送。
  • 内容分发网络(CDN) :RocketMQ 可以帮助构建高效的内容分发和通知系统,推送实时更新、推荐内容等,确保数据在多个节点之间快速传递,特别适用于需要快速内容更新的场景。
  1. 日志与事件追踪
  • 异步日志记录:许多应用系统会在后台记录用户操作、系统运行状态等信息。RocketMQ 可以异步记录日志,避免同步阻塞,同时保证高效的日志传输和存储,尤其适合大规模分布式系统的日志收集。
  • 事件追踪与分析:在微服务架构中,事件追踪(如调用链追踪)对于监控和故障排查至关重要。RocketMQ 可以确保事件流的高效传递和顺序处理,帮助构建全面的事件追踪系统。
  1. 消息驱动的异步任务
  • 后台任务处理:很多系统的任务是异步的,如生成报表、邮件发送、数据处理等。使用 RocketMQ 进行任务调度和消息驱动处理,可以有效解耦主业务流程和耗时的任务处理,提高系统的响应能力。
  • 定时任务与延时消息:RocketMQ 支持延时消息功能,可以用来处理定时任务、超时重试等操作。比如在电商场景中,发货时间的计算、延时支付的重试等都可以通过 RocketMQ 延时消息机制来实现。
  1. 日志与审计系统
  • 审计日志收集:在许多业务中,审计日志的收集与处理具有重要意义,特别是在合规性要求较高的行业(如金融、医疗等)。RocketMQ 可以作为日志收集的中间件,确保日志的可靠传输与持久化。
  1. 分布式系统与高可用架构
  • 系统解耦与弹性扩展:在复杂的分布式系统中,RocketMQ 可以通过消息队列解耦各个服务模块,保证系统的可靠性和高可用性。尤其是在微服务架构中,消息中间件可以减少服务间的直接依赖,提高系统的扩展性和容错能力。

场景示例1—异步解耦

随着微服务架构的流行,服务之间的关系梳理非常重要。异步解耦可以降低服务之间的耦合程度,同时也能提高服务的吞吐量。

使用异步解耦的业务场景非常多,因为每个行业的业务都会不太一样,以一些比较通用的业务来说明相信大家都能理解。

比如电商行业的下单业务场景,以最简单的下单流程来说,下单流程如下:

  1. 锁库存
  2. 创建订单
  3. 用户支付
  4. 扣减库存
  5. 给用户发送购买短信通知
  6. 给用户增加积分
  7. 通知商家发货

我们以下单成功后,用户进行支付,支付完成会有个逻辑叫支付回调,在回调里面需要去做一些业务逻辑。首先来看下同步处理需要花费的时间,如下图:

膜拜!看完这篇你还不懂RocketMQ算我输

同步流程

上面的下单流程从 3 到 5 都是可以采用异步流程进行处理,对于用户来说,支付完成后他就不需要关注后面的流程了。后台慢慢处理就行了,这样就能简化三个步骤,提高回调的处理时间。

膜拜!看完这篇你还不懂RocketMQ算我输

异步流程

场景示例2—削峰填谷

削峰填谷指的是在大流量的冲击下,利用 RocketMQ 可以抗住瞬时的大流量,保护系统的稳定性,提升用户体验。

在电商行业,最常见的流量冲击就是秒杀活动了,利用 RocketMQ 来实现一个完整的秒杀业务还是与很多需要做的工作,不在本文的范围内,后面有机会可以单独跟大家聊聊。想告诉大家的是像诸如此类的场景可以利用 RocketMQ 来扛住高并发,前提是业务场景支持异步处理

膜拜!看完这篇你还不懂RocketMQ算我输

削峰填谷

场景示例3—分布式事务最终一致性

众所周知,分布式事务有 2PC,TCC,最终一致性等方案。其中使用消息队列来做最终一致性方案是比较常用的。

在电商的业务场景中,交易相关的核心业务一定要确保数据的一致性。通过引入消息队列 RocketMQ 版的分布式事务,既可以实现系统之间的解耦,又可以保证最终的数据一致性。

场景示例4—数据分发

数据分发指的是可以将原始数据分发到多个需要使用这份数据的系统中,实现数据异构的需求。最常见的有将数据分发到 ES, Redis 中为业务提供搜索,缓存等服务。

除了手动通过消息机制进行数据分发,还可以订阅 Mysql 的 binlog 来分发,在分发这个场景,需要使用 RocketMQ 的顺序消息来保证数据的一致性。

膜拜!看完这篇你还不懂RocketMQ算我输

数据分发

六、RocketMQ 组件

RocketMQ 的架构主要包括以下几个核心组件:

  1. NameServer
    NameServer 是一个轻量级的服务发现模块,负责管理 Broker 节点的元数据,帮助 Producer 和 Consumer 查找 Broker,类似于一个服务注册与发现中心。
  2. Broker
    Broker 是消息的存储和转发节点,消息生产者将消息发送到 Broker,消费者从 Broker 中拉取消息。Broker 负责消息的持久化存储、顺序消费和消息的投递。
  3. Producer
    Producer 是消息生产者,负责将消息发送到指定的 Topic。每个 Producer 可以连接多个 Broker,发送消息到不同的队列。
  4. Consumer
    Consumer 是消息消费者,负责从 Broker 拉取消息进行消费。Consumer 可以是 推模式(Push)或 拉模式(Pull),支持异步或同步消费。
  5. Admin Console
    RocketMQ 提供了管理控制台,用于监控和管理集群的状态、Topic、Consumer 以及消息的流量等信息。

七、消息传递流程

  1. Producer 发送消息
    Producer 将消息发送到 RocketMQ 的 Broker,并通过 NameServer 找到目标 Broker。消息被分配到一个队列(Queue),可以是顺序队列或并发队列。
  2. 消息存储
    Broker 接收到消息后会将其持久化到磁盘中,并且根据需要将消息复制到其他副本节点,保证高可用性。
  3. Consumer 拉取消息
    消费者(Consumer)从 Broker 拉取消息进行消费。RocketMQ 支持按 消息队列(Queue)消息主题(Topic) 进行消费,可以配置多种消费策略和消费并发度。
  4. 消息确认和重试
    消费者确认消息消费成功后,RocketMQ 会将消息从队列中删除;如果消费失败,消息会进入重试队列,按配置重试消费。

ba37ca06-a3f1-4b7f-a03f-d240a586502e

通过本文的介绍,我们可以看到 RocketMQ 作为一款高效的分布式消息中间件,无论你是正在考虑在项目中引入 RocketMQ,还是已经在使用它的开发者,掌握 RocketMQ 的核心特性和最佳实践对于提升系统的可靠性和性能至关重要。后续将分享RocketMQ的部署,及开发使用流程。

相关文章:

探索 RocketMQ:企业级消息中间件的选择与应用

一、关于RocketMQ RocketMQ 是一个高性能、高可靠、可扩展的分布式消息中间件,它是由阿里巴巴开发并贡献给 Apache 软件基金会的一个开源项目。RocketMQ 主要用于处理大规模、高吞吐量、低延迟的消息传递,它是一个轻量级的、功能强大的消息队列系统&…...

vue中v-if和v-for优先级

在Vue中&#xff0c;v-for的优先级高于v-if。这意味着在同一个元素上使用v-if和v-for时&#xff0c;v-for将首先被解析&#xff0c;然后是v-if。 下面是一个代码示例&#xff1a; <template><div><div v-for"item in items" v-if"item.isDispl…...

使用Kotlin写一个将字符串加密成short数组,然后可以解密还原成原始的字符串的功能

文章目录 一、运行效果1.1 单个字符串加解密1.2 多个字符串数组加解密二、源代码2.1 控制流图2.2 实现的源代码一、运行效果 1.1 单个字符串加解密 待加密的单个字符串: 测试字符串转化成short数组-----字节卷动 单个字符串加密后的数据: [19914, -21676, 31702, 23463, 2833…...

windows C#-取消任务列表(上)

如果不想等待异步控制台应用程序完成&#xff0c;可以取消该应用程序。 通过遵循本文的示例&#xff0c;可将取消添加到下载网站内容的应用程序。 可通过将 CancellationTokenSource 实例与每个任务进行关联来取消多个任务。 如果选择 Enter 键&#xff0c;则将取消所有尚未完成…...

Linux---ps命令

​​​​​​Linux ps 命令 | 菜鸟教程 (runoob.com) process status 用于显示进程的状态 USER: 用户名&#xff0c;运行此进程的用户名。PID: 进程ID&#xff08;Process ID&#xff09;&#xff0c;每个进程的唯一标识号%CPU: 进程当前使用的CPU百分比%MEM: 进程当前使用的…...

解决k8s拉取私有镜像401 Unauthorized 问题

拉取镜像时未指定账户和密码通常是因为需要访问的镜像仓库启用了认证&#xff0c;但 Kubernetes 默认配置中未提供访问凭据。要解决此问题&#xff0c;可以按照以下步骤配置镜像仓库的认证信息&#xff1a; 1. 创建 Kubernetes Secret 为镜像仓库配置访问凭据&#xff0c;使用…...

Ruby 模块(Module)

Ruby 模块&#xff08;Module&#xff09; 概述 Ruby 是一种动态、开放源代码的编程语言&#xff0c;以其简洁明了的语法和强大的功能而闻名。在 Ruby 中&#xff0c;模块&#xff08;Module&#xff09;是一个重要的概念&#xff0c;它用于封装一组相关的方法和常量。模块提…...

HAL库的简单介绍以及环境搭建

目录 引言 一、HAL库的基本介绍 二、HAL库开发环境搭建 1、安装JAVA运行环境 2、安装STM32CubeMX 3、在线下载芯片支持包 引言 前面&#xff0c;我们学习了STM32基于寄存器的开发方式&#xff0c;能够更接近底层&#xff0c;但是随着我们学习的越来越深、代码越来与复杂…...

如何在 PyCharm 中配置 HTTP 代理以确保网络连接的顺畅性

如何在 PyCharm 中配置 HTTP 代理以确保网络连接的顺畅性 在配置 PyCharm 的 HTTP 代理以确保网络连接的顺畅性时&#xff0c;需按照一定的步骤进行设置&#xff0c;这不仅有助于确保 PyCharm 能够顺利访问互联网资源&#xff0c;还能保证插件和工具的正常更新与同步。以下是详…...

PHP 8.4 重磅发布了

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…...

LVM缩容

当前环境 rootjmk:~/shell# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS nvme0n1 259:0 0 953.9G 0 disk |-nvme0n1p1 259:1 0 512M 0 part /boot/efi |-nvme0n1p2 259:2 0 488M 0 part /boot -nvme0n1p3 …...

Next.js 独立开发教程(三):CSS 样式的完整指南

系列文章目录 Next.js 开发教程(一)&#xff1a;入门指南-CSDN博客 Next.js 开发教程&#xff08;二&#xff09;&#xff1a;从零构建仪表盘应用-CSDN博客 有兴趣的可以蹲个后续&#xff0c;我会陆续发布一系列的文章。 目录 系列文章目录 1. 样式在 Next.js 中的基本支持…...

React (三)

文章目录 项目地址十二、性能优化12.1 使用useMemo避免不必要的计算12.2 使用memo缓存组件,防止过度渲染12.3 useCallBack缓存函数12.4 useCallBack里访问之前的状态(没懂)十三、Styled-Components13.1 安装13.2给普通html元素添加样式13.3 继承和覆盖样式13.4 给react组件添…...

Python数据结构之链表

一、链表 1、目的 解决顺序表存储数据有上限&#xff0c;并且插入和删除操作效率低的问题。 2、概念 链表&#xff1a;链式存储的线性表&#xff0c;使用随机的物理内存存储逻辑上连续的数据。 链表的组成&#xff1a;由一个个结点组成 结点&#xff1a;由数据域和链接域组…...

“LLM是否是泡沫”

目录 “LLM是否是泡沫” 培养自己鉴别论文价值的能力、复现开源项目的能力、debug 代码的能力 llm 是生产力工具 多去找实习&#xff0c;读再多的论文&#xff0c;刷再多的技术文章&#xff0c;也不如一次 debug 多机通讯报错带来的认知深刻 一、LLM领域的发展与挑战 二、…...

基于机器学习的人脸识别算法matlab仿真,对比GRNN,PNN,DNN以及BP四种网络

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 &#xff08;完整版代码包含详细中文注释和操作步骤视频&#xff09…...

算法(Algorithm)

算法&#xff08;Algorithm&#xff09; 是指解决问题或完成特定任务的一系列明确指令的集合。它是按照一定规则定义的一种计算过程&#xff0c;用于将输入转化为输出&#xff0c;能够被计算机或人类有效执行。 算法的核心特点 有穷性 算法必须在有限步骤内完成&#xff0c;不能…...

C语言中const char *字符进行切割实现

将127.0.0.1以“”“.”来进行切割&#xff0c;实现如下&#xff1a; const char * ip "127.0.0.1";char *test new char[100];strcpy(test, ip);const char *split ".";char *final;final strtok(test, split);while (final){printf("%s\n"…...

【UE5】在材质中计算模型在屏幕上的比例

ViewProperty节点有很多有意思的变量 例如用 ViewProperty 的 tan ⁡ ( FOV / 2 ) \tan(\text{FOV} / 2) tan(FOV/2) 输出&#xff0c;用它计算模型占屏幕的比例。 &#xff08;常用于for运算的次数优化&#xff0c;也可以用于各种美术效果&#xff09; ScaleOnScreen Obje…...

前端速通(HTML)

1. HTML HTML基础&#xff1a; 什么是HTML&#xff1f; 超文本&#xff1a; "超文本"是指通过链接连接不同网页或资源的能力。HTML支持通过<a>标签创建超链接&#xff0c;方便用户从一个页面跳转到另一个页面。 标记语言&#xff1a; HTML使用一组预定义的标签…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

sqlserver 根据指定字符 解析拼接字符串

DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

Go语言多线程问题

打印零与奇偶数&#xff08;leetcode 1116&#xff09; 方法1&#xff1a;使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下&#xff0c;音视频内容犹如璀璨繁星&#xff0c;点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频&#xff0c;到在线课堂中知识渊博的专家授课&#xff0c;再到影视平台上扣人心弦的高清大片&#xff0c;音…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源&#xff0c;提供了很全面的思路&#xff0c;减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接&#xff1a;https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架&#xff1a; 代码框架结构&#xff1a;readme有…...

2025-06-01-Hive 技术及应用介绍

Hive 技术及应用介绍 参考资料 Hive 技术原理Hive 架构及应用介绍Hive - 小海哥哥 de - 博客园https://cwiki.apache.org/confluence/display/Hive/Home(官方文档) Apache Hive 是基于 Hadoop 构建的数据仓库工具&#xff0c;它为海量结构化数据提供类 SQL 的查询能力&#xf…...