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

分布式系统中的 ActiveMQ:异步解耦与流量削峰(一)

一、引言

{"type":"load_by_key","key":"auto_image_0_0","image_type":"search"}

在当今数字化时代,分布式系统已成为构建大规模应用的关键架构。随着业务的快速发展和用户量的急剧增长,分布式系统面临着诸多挑战,其中异步通信、系统解耦和流量削峰是亟待解决的重要问题。

以电商系统为例,在秒杀活动中,大量用户同时涌入,瞬间产生海量订单请求。传统的同步处理方式会使系统不堪重负,导致响应缓慢甚至崩溃。而且,订单系统与库存系统、物流系统等紧密耦合,任何一个系统的故障或升级都可能影响其他系统的正常运行,大大降低了系统的稳定性和可扩展性。

ActiveMQ 作为一款强大的开源消息中间件,在分布式系统中发挥着至关重要的作用。它就像一座桥梁,连接着分布式系统中的各个组件,为异步通信、系统解耦和流量削峰提供了高效可靠的解决方案 。通过引入 ActiveMQ,系统可以将耗时的任务异步处理,使各个模块之间实现松耦合,同时有效应对突发的流量高峰,保障系统的稳定运行和高性能表现。

二、ActiveMQ 简介

ActiveMQ 是 Apache 软件基金会下的一个开源项目,是一款功能强大的消息中间件,在分布式系统中扮演着关键角色,为系统组件间的高效通信提供了可靠支持 。它遵循 JMS(Java Message Service)规范,这使得基于 Java 的应用程序能够方便地使用其提供的消息服务,实现异步通信和系统解耦。同时,ActiveMQ 支持多种语言客户端,如 Java、C、C++、C#、Ruby、Perl、Python、PHP 等 ,这意味着不同语言开发的系统组件都可以通过 ActiveMQ 进行通信,极大地拓宽了其应用范围,满足了多样化的分布式系统开发需求。

在传输协议方面,ActiveMQ 同样表现出色,支持多种协议,包括 OpenWire、Stomp、AMQP、MQTT 等 。不同的传输协议适用于不同的场景,例如,OpenWire 是 ActiveMQ 默认的高效二进制协议,适用于 Java 客户端与 ActiveMQ 之间的通信;MQTT 则是一种轻量级的协议,特别适合物联网设备等资源受限环境下的消息传输。这种多协议支持能力,使得 ActiveMQ 能够灵活地适应各种复杂的网络环境和应用场景。

ActiveMQ 主要支持两种消息模型:点对点(Point-to-Point)和发布 / 订阅(Publish/Subscribe) 。在点对点模型中,消息被发送到队列(Queue),每个消息只能被一个消费者接收,就像传统的信件投递,一封信只能被一个收件人收取。这种模型适用于需要确保消息被唯一处理的场景,比如订单处理系统,每个订单消息只需被一个处理模块处理,以保证订单处理的准确性和一致性。

而发布 / 订阅模型中,消息被发送到主题(Topic),多个订阅了该主题的消费者都可以接收到消息,类似于广播模式,一条广播消息可以被多个听众接收。这种模型适用于需要将消息广泛传播的场景,如实时行情推送系统,多个客户端都需要实时获取最新的行情信息,通过发布 / 订阅模型,行情消息可以同时被多个订阅客户端接收,实现信息的快速传播和共享。

正是由于 ActiveMQ 具备上述特性,它在众多分布式系统应用场景中都得到了广泛应用。在电商系统中,订单处理、库存管理、物流配送等模块之间可以通过 ActiveMQ 进行异步通信和解耦 。当用户下单后,订单消息被发送到 ActiveMQ 队列,订单处理模块从队列中获取消息进行处理,同时库存管理模块和物流配送模块也可以订阅相关消息,分别进行库存扣减和配送安排,各模块之间互不干扰,提高了系统的整体性能和可扩展性。

在金融系统中,ActiveMQ 可以用于实现交易消息的可靠传输和处理 。例如,股票交易系统中,买卖订单消息通过 ActiveMQ 在各个交易节点之间传递,确保交易的准确执行和数据的一致性,同时其高可靠性和性能保证了在高并发交易场景下系统的稳定运行。

三、异步解耦

(一)异步解耦原理剖析

在传统的分布式系统架构中,服务之间通常采用同步调用的方式进行通信 。例如,服务 A 需要调用服务 B 的某个功能,服务 A 会直接发起对服务 B 的请求,并等待服务 B 处理完成返回结果后,才继续执行后续操作。这种方式虽然简单直接,但存在诸多弊端。当服务 B 出现故障或者响应时间过长时,服务 A 会一直处于阻塞状态,无法及时处理其他任务,严重影响系统的整体性能和响应速度 。而且,服务 A 和服务 B 之间形成了紧密的耦合关系,服务 B 的任何变动,如接口升级、业务逻辑调整等,都可能需要服务 A 进行相应的修改,这大大增加了系统的维护成本和复杂性,降低了系统的可扩展性和灵活性。

ActiveMQ 的出现为解决这些问题提供了有效的方案。它基于消息队列的机制,实现了服务之间的异步通信 。在这种模式下,当服务 A 有任务需要服务 B 处理时,服务 A 并不会直接调用服务 B,而是将相关的任务信息封装成消息,发送到 ActiveMQ 的消息队列中 。然后,服务 A 可以立即返回,继续执行其他任务,无需等待服务 B 的处理结果。而服务 B 则作为消息的消费者,从消息队列中获取消息,并按照自身的节奏进行处理。

这种异步通信的方式就像是现实生活中的邮件系统。发件人(生产者)将邮件(消息)投递到邮箱(消息队列)中,然后就可以去做其他事情,无需等待收件人(消费者)接收和处理邮件。收件人在方便的时候去邮箱收取邮件并进行处理 。通过这种方式,生产者和消费者之间实现了时间和空间上的解耦 。它们不需要同时在线,也不需要直接交互,各自可以独立地进行开发、部署和升级,互不干扰,极大地提高了系统的灵活性和可维护性 。 例如,在一个电商系统中,订单服务(生产者)在用户下单后,将订单消息发送到 ActiveMQ 队列,然后可以快速响应用户的下单请求,而无需等待库存服务和物流服务(消费者)处理订单消息。库存服务和物流服务可以根据自身的负载情况,从队列中获取订单消息进行处理,实现了订单服务与库存服务、物流服务之间的异步解耦。

(二)应用场景实例

以电商下单流程为例,在传统的同步调用模式下,当用户下单时,订单系统需要依次同步调用库存系统进行库存检查和扣减、物流系统进行物流信息预分配、支付系统进行支付处理等 。这意味着订单系统与这些系统之间存在紧密的耦合关系。一旦库存系统因为高并发或者自身故障而响应缓慢,订单系统就会被阻塞,无法及时处理后续的下单请求,导致用户等待时间过长,甚至出现超时错误。而且,任何一个子系统的升级或维护,都可能需要订单系统暂停服务并进行相应的代码调整,这对整个电商系统的稳定性和可用性造成了很大的影响。

引入 ActiveMQ 后,情况得到了极大的改善。当用户下单时,订单系统将订单消息发送到 ActiveMQ 的消息队列中,然后立即返回给用户下单成功的提示 。此时,订单系统的任务已经完成,它可以继续处理其他用户的下单请求。而库存系统、物流系统和支付系统则作为消息的消费者,从消息队列中异步获取订单消息,并进行各自的业务处理 。如果某个子系统出现故障或者负载过高,消息会在队列中等待,不会影响其他系统的正常运行。例如,当物流系统因临时故障需要进行修复时,订单消息会在队列中堆积,待物流系统恢复正常后,再从队列中获取消息进行处理,整个下单流程不会因为物流系统的短暂故障而中断,用户体验得到了极大的提升。

通过这种方式,各个系统之间通过 ActiveMQ 实现了解耦,它们可以独立地进行扩展、升级和维护,而不会相互影响 。这不仅提高了系统的灵活性和可维护性,还增强了系统的整体稳定性和可靠性,使电商系统能够更好地应对高并发的业务场景。

(三)代码示例演示

下面给出使用 Java 和 ActiveMQ 实现异步解耦的代码示例 ,通过这个示例可以更直观地了解如何在实际开发中利用 ActiveMQ 实现生产者和消费者之间的异步通信。

首先,需要引入 ActiveMQ 的相关依赖。如果使用 Maven 项目管理工具,可以在pom.xml文件中添加以下依赖:

 

<dependencies>

<dependency>

<groupId>org.apache.activemq</groupId>

<artifactId>activemq-all</artifactId>

<version>5.16.3</version>

</dependency>

<dependency>

<groupId>javax.jms</groupId>

<artifactId>javax.jms-api</artifactId>

<version>2.0.1</version>

</dependency>

</dependencies>

生产者发送消息的代码如下:

 

import javax.jms.*;

import org.apache.activemq.ActiveMQConnectionFactory;

public class Producer {

private static final String BROKER_URL = "tcp://localhost:61616";

private static final String QUEUE_NAME = "orderQueue";

public static void main(String[] args) {

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);

Connection connection = null;

Session session = null;

MessageProducer producer = null;

try {

// 创建连接

connection = connectionFactory.createConnection();

connection.start();

// 创建会话,第一个参数为是否支持事务,第二个参数为签收模式

session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

// 创建队列

Queue queue = session.createQueue(QUEUE_NAME);

// 创建消息生产者

producer = session.createProducer(queue);

// 创建文本消息

TextMessage message = session.createTextMessage("这是一条新的订单消息");

// 发送消息

producer.send(message);

System.out.println("已发送消息: " + message.getText());

} catch (JMSException e) {

e.printStackTrace();

} finally {

// 关闭资源

if (producer != null) {

try {

producer.close();

} catch (JMSException e) {

e.printStackTrace();

}

}

if (session != null) {

try {

session.close();

} catch (JMSException e) {

e.printStackTrace();

}

}

if (connection != null) {

try {

connection.close();

} catch (JMSException e) {

e.printStackTrace();

}

}

}

}

}

在这段代码中,首先创建了一个ActiveMQConnectionFactory连接工厂,用于创建与 ActiveMQ 服务器的连接 。然后通过连接工厂创建连接,并启动连接。接着创建一个会话,会话用于创建消息生产者、消费者以及消息对象 。在创建会话时,设置了不支持事务,采用自动签收模式 。之后创建了一个队列对象,指定了队列名称为orderQueue 。再创建消息生产者,并创建一条文本消息,最后将消息发送到队列中。

消费者接收消息的代码如下:

 

import javax.jms.*;

import org.apache.activemq.ActiveMQConnectionFactory;

public class Consumer {

private static final String BROKER_URL = "tcp://localhost:61616";

private static final String QUEUE_NAME = "orderQueue";

public static void main(String[] args) {

ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL);

Connection connection = null;

Session session = null;

MessageConsumer consumer = null;

try {

// 创建连接

connection = connectionFactory.createConnection();

connection.start();

// 创建会话,第一个参数为是否支持事务,第二个参数为签收模式

session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

// 创建队列

Queue queue = session.createQueue(QUEUE_NAME);

// 创建消息消费者

consumer = session.createConsumer(queue);

// 接收消息,设置超时时间为5000毫秒

Message message = consumer.receive(5000);

if (message != null && message instanceof TextMessage) {

TextMessage textMessage = (TextMessage) message;

System.out.println("已接收消息: " + textMessage.getText());

} else {

System.out.println("未接收到消息或消息类型错误");

}

} catch (JMSException e) {

e.printStackTrace();

} finally {

// 关闭资源

if (consumer != null) {

try {

consumer.close();

} catch (JMSException e) {

e.printStackTrace();

}

}

if (session != null) {

try {

session.close();

} catch (JMSException e) {

e.printStackTrace();

}

}

if (connection != null) {

try {

connection.close();

} catch (JMSException e) {

e.printStackTrace();

}

}

}

}

}

消费者代码与生产者代码类似,同样创建连接工厂、连接、会话和队列 。不同的是,消费者创建的是消息消费者,通过receive方法从队列中接收消息,并设置了超时时间为 5000 毫秒 。如果在规定时间内接收到消息,并且消息类型为文本消息,则打印出消息内容;否则,提示未接收到消息或消息类型错误 。通过以上代码示例,可以清晰地看到如何使用 Java 和 ActiveMQ 实现生产者与消费者之间的异步解耦,消息的发送和接收是相互独立的过程,实现了系统间的解耦和异步通信 。

相关文章:

分布式系统中的 ActiveMQ:异步解耦与流量削峰(一)

一、引言 在当今数字化时代&#xff0c;分布式系统已成为构建大规模应用的关键架构。随着业务的快速发展和用户量的急剧增长&#xff0c;分布式系统面临着诸多挑战&#xff0c;其中异步通信、系统解耦和流量削峰是亟待解决的重要问题。 以电商系统为例&#xff0c;在秒杀活动中…...

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】2.5 事务与锁机制(ACID特性/事务控制语句)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL 事务与锁机制深度解析:ACID 特性与事务控制全流程2.5 事务与锁机制2.5.1 ACID 特性与实现原理2.5.1.1 ACID 核心概念2.5.1.2 MVCC(多版本并发控制)与WAL(预写式日志)协同效应2.5.2 事务…...

STM32教程:ADC原理及程序(基于STM32F103C8T6最小系统板标准库开发)*详细教程*

前言&#xff1a; 本文章介绍了STM32微控制器的ADC外设&#xff0c;介绍了ADC的底层原理以及基本结构&#xff0c;介绍了ADC有关的标准库函数&#xff0c;以及如何编写代码实现ADC对电位器电压的读取。 可以根据基本结构图来编写代码 大体流程&#xff1a; 1、开启RCC时钟&am…...

RabbitMQ 深度解析:从核心组件到复杂应用场景

一.RabbitMQ简单介绍 消息队列作为分布式系统中不可或缺的组件&#xff0c;承担着解耦系统组件、保障数据可靠传输、提高系统吞吐量等重要职责。在众多消息队列产品中&#xff0c;RabbitMQ 凭借其可靠性和丰富的特性&#xff0c;在企业级应用中获得了广泛应用。本研究报告将全…...

linux 使用nginx部署ssl证书,将http升级为https

前言 本文基于&#xff1a;操作系统 CentOS Stream 8 使用工具&#xff1a;Xshell8、Xftp8 服务器基础环境&#xff1a; nginx - 请查看 linux 使用nginx部署vue、react项目 所需服务器基础环境&#xff0c;请根据提示进行下载、安装。 1.下载证书 以腾讯云为例&#xff…...

iview 分页改变每页条数时请求两次问题

问题 在iview page分页的时候&#xff0c;修改每页条数时&#xff0c;会发出两次请求。 iview 版本是4.0.0 原因 iview 的分页在调用on-page-size-change之前会调用on-Change。默认会先调用on-Change回到第一页&#xff0c;再调用on-page-size-change改变分页显示数量 此时就会…...

【Hive入门】Hive与Spark SQL深度集成:Metastore与Catalog兼容性全景解析

目录 引言 1 元数据管理体系架构对比 1.1 Hive Metastore架构解析 1.2 Spark Catalog系统设计 2 元数据兼容性深度剖析 2.1 元数据模型映射关系 2.2 元数据同步机制 3 生产环境配置指南 3.1 基础兼容性配置 3.1.1 Spark连接Hive Metastore 3.1.2 多引擎共享配置 3.…...

C#与西门子PLC通信:S7NetPlus和HslCommunication使用指南

西门子S7协议是用来和PLC进行通讯的一个协议&#xff0c;默认端口是102&#xff0c;数据会保存在一个个DB块中&#xff0c;比较经典的用法是一个DB块专门用来读取&#xff0c;一个用来写入。 DB&#xff08;数据块&#xff09; {块号}.DBX/DBD/DBW{字节地址}.{位偏移} 1、数据…...

湖北理元理律师事务所:法律科技融合下的债务管理实践

随着债务纠纷数量攀升&#xff0c;如何通过合法途径化解债务风险成为社会焦点。湖北理元理律师事务所作为国家司法局注册的债事服务机构&#xff0c;尝试以“法律技术”重构传统服务模式&#xff0c;为债务人提供系统性解决方案。 专业化服务架构 该律所设立客服、运营、法务…...

Spring Cloud Gateway MVC 基于 Spring Boot 3.4 以 WAR 包形式部署于外部 Tomcat 实战

一、引言 随着微服务架构的广泛应用&#xff0c;Spring Cloud Gateway 作为网关层的核心组件&#xff0c;为服务间的通信与流量管理提供了强大支持。spring-cloud-starter-gateway-mvc 则进一步助力开发者以熟悉的 MVC 模式进行网关开发。同时&#xff0c;将项目以 WAR 包形式…...

LLM论文笔记 27: Looped Transformers for Length Generalization

Arxiv日期&#xff1a;2024.9.25 关键词 长度泛化 transformer结构优化 核心结论 1. RASP-L限制transformer无法处理包含循环的任务的长度泛化 2. Loop Transformer显著提升了长度泛化能力 Input Injection 显著提升了模型的长度泛化性能&#xff0c;尤其在二进制加法等复杂…...

PCIe TLP | 报头 / 包格式 / 地址转换 / 寄存器 / 配置空间类型

注&#xff1a;本文为 “PCIe TLP” 相关文章合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;未整理去重。 图片清晰度受引文原图所限。 略作重排&#xff0c;如有内容异常&#xff0c;请看原文。 PCIe - TLP Header, Packet Formats, Address Translation, Conf…...

《AI大模型应知应会100篇》第46篇:大模型推理优化技术:量化、剪枝与蒸馏

第46篇&#xff1a;大模型推理优化技术&#xff1a;量化、剪枝与蒸馏 &#x1f4cc; 目标读者&#xff1a;人工智能初中级入门者 &#x1f9e0; 核心内容&#xff1a;量化、剪枝、蒸馏三大核心技术详解 实战代码演示 案例部署全流程 &#x1f4bb; 实战平台&#xff1a;PyTor…...

C++/SDL 进阶游戏开发 —— 双人塔防(代号:村庄保卫战 20)

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录 三…...

【Python生成器与迭代器】核心原理与实战应用

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比二、实战演示环境配置要求核心代码实现案例1:自定义迭代器类案例2:生成器函数案例3:生成器表达式运行结果验证三、性能对比测试方法论量…...

2025年最新嵌入式开发STM32单片机详细教程(更新中)

ARM 处理器架构 ARM 处理器从 1984 ARM-1 发展到 2004 ARM-11 之后&#xff0c;放弃数字命名&#xff0c;用 cortex 来命令处理器产品。 Cortex-A系列 主打高性能 手机&#xff0c;平板&#xff0c;智能电视等 Cortex-R系列 主打实时 汽车&#xff0c;工业控…...

neatchat轻量级丝滑的ai模型web客户端

NeatChat 人工智能模型对话web客户端 前言 此项目是nextchat分支&#xff0c;相比原者更加简洁流畅。 部署 docker部署 name: next-chat services:chatgpt-next-web:ports:- 8080:3000environment:- OPENAI_API_KEYsk-xx543Ef3d- BASE_URLhttps://api.ai.com- GOOGLE_API_K…...

学习黑客分析案例

▶️ Day 2 任务 – 「怪物图鉴」实战 选一条最新安全事件&#xff08;国内外均可&#xff0c;建议 1 年内&#xff09; 例&#xff1a;CVE-2024-21887 Ivanti VPN RCE 用下列表格框架&#xff0c;3 句话归纳它的“派系”“CIA 受击点”“一句话原理”&#xff1a; 攻击流派…...

sonar-scanner在扫描JAVA项目时为什么需要感知.class文件

1 概述 SonarQube是一个静态代码分析工具&#xff0c;主要用于检查源代码的质量&#xff0c;包括代码重复、潜在漏洞、代码风格问题等。而SonarScanner是SonarQube的客户端工具&#xff0c;负责将代码进行形态分析&#xff0c;并将结果发送到SonarQube服务器。所以&#xff0c…...

AtCoder Beginner Contest 404(ABCDE)

A - Not Found 翻译&#xff1a; 给您一个字符串S&#xff0c;长度在1 到25 之间&#xff0c;由小写英文字母组成。 输出S 中没有出现的一个小写英文字母。 如果有多个这样的字母&#xff0c;可以输出其中任何一个。 思路&#xff1a; 数组记录存在于 s 中的字母。&#xff08…...

【言语理解】中心理解题目之结构分析

front:中心理解题目之抓住关键信息 3.1 五种常见对策表达方式 3.1.1 祈使或建议给对策 应该&#xff08;应&#xff09; 需要&#xff08;要&#xff09; eg&#xff1a;……。对此&#xff0c;媒体要做好自我规约。……。 eg&#xff1a;……。然而&#xff0c;两地仅简单承接…...

DeepSeek-Prover-V2-671B:AI在数学定理证明领域的重大突破

文章目录 什么是DeepSeek-Prover-V2-671B&#xff1f;核心技术亮点1. **超大规模参数与高效推理**2. **超长上下文窗口**3. **强化学习与合成数据** 主要应用场景1. **教育领域**2. **科学研究**3. **工程设计**4. **金融分析** 开源与商业化性能表现总结 2025年4月30日&#x…...

React18组件通信与插槽

1、为DOM组件设置Props 在react中jsx中的标签属性被称为Props DOM组件的类属性&#xff0c;为了防止与js中的class属性冲突改成了className DOM组件的style属性 import image from "./logo.svg"; function App() {const imgStyleObj {width: 200,height: 200,};re…...

第15章 对API的身份验证和授权

第15章 对API的身份验证和授权 在构建RESTful API时,确保只有经过身份验证和授权的用户才能访问特定资源是至关重要的。身份验证是确认用户身份的过程,而授权则是决定用户是否有权访问特定资源的过程。在本章中,我们将详细探讨如何在ASP.NET Core Web API中实现身份验证和授…...

【项目归档】数据抓取+GenAI+数据分析

年后这两个月频繁组织架构变动&#xff0c;所以博客很久没更新。现在暂时算是尘埃落定&#xff0c;趁这段时间整理一下。 入职九个月&#xff0c;自己参与的项目有4个&#xff0c;负责前后端开发&#xff0c;测试&#xff0c;devops&#xff08;全栈/doge&#xff09;&#xff…...

如何优化MySQL主从复制的性能?

优化MySQL主从复制的性能需要从硬件、配置、架构设计和运维策略等多方面入手。以下是详细的优化方案&#xff1a; 一、减少主库写入压力 1. ‌主库优化‌ 二进制日志&#xff08;binlog&#xff09;优化‌&#xff1a; 使用 binlog_formatROW 以获得更高效的复制和更少的数…...

asp.net客户管理系统批量客户信息上传系统客户跟单系统crm

# crm-150708 客户管理系统批量客户信息上传系统客户跟单系统 # 开发背景 本软件是给郑州某企业管理咨询公司开发的客户管理系统软件 # 功能 1、导入客户数据到系统 2、批量将不同的客户分配给不同的业务员跟进 3、可以对客户数据根据紧急程度标记不同的颜色&#xff0c…...

PCIe | TLP | 报头 / 包格式 / 地址转换 / 配置空间 / 寄存器 / 配置类型

注&#xff1a;本文为 “PCIe - TLP” 相关文章合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;未整理去重。 图片清晰度受引文原图所限。 略作重排&#xff0c;如有内容异常&#xff0c;请看原文。 PCIe - TLP Header, Packet Formats, Address Translation, Co…...

ip和域名

好的&#xff0c;我来依次回答你的问题&#xff1a; 域名和 IP 地址是什么关系&#xff1f; IP 地址 (Internet Protocol Address)&#xff1a;可以想象成互联网上每台设备&#xff08;比如服务器、电脑、手机&#xff09;的门牌号码。它是一串数字&#xff08;例如 IPv4 地址 …...

《解锁GCC版本升级:开启编程新世界大门》

《解锁GCC版本升级:开启编程新世界大门》 一、引言:GCC 版本升级的魔法钥匙 在编程的广阔天地里,GCC(GNU Compiler Collection)宛如一座灯塔,为无数开发者照亮前行的道路。它是一款开源且功能强大的编译器集合,支持 C、C++、Objective - C、Fortran、Ada 等多种编程语言…...

前端跨域问题怎么在后端解决

目录 简单的解决方法&#xff1a; 添加配置类&#xff1a; 为什么会跨域 1. 什么是源 2. URL结构 3. 同源不同源举&#x1f330; 同源例子 不同源例子 4. 浏览器为什么需要同源策略 5. 常规前端请求跨域 简单的解决方法&#xff1a; 添加配置类&#xff1a; packag…...

生成式 AI 的工作原理

在科技浪潮汹涌澎湃的当下,生成式 AI 宛如一颗璀璨的新星,照亮了我们探索未知的征程。它不再仅仅是科幻电影中的幻想,而是已经悄然融入我们生活的方方面面,从智能客服的贴心应答,到艺术创作的天马行空,生成式 AI 正以一种前所未有的姿态重塑着世界。然而,你是否曾好奇,…...

DeepSeek辅助学术写作之修订与校稿以及发表与推广相关提示词分享祝你顺利毕业~

目录 1.修订与校对 2.发表与推广 大家好这里是AIWritePaper官方账号&#xff0c;官网&#x1f449;AIWritePaper~ 宝子们可以使用小编精选的“ChatGPT研究论文提示词”集合来创建研究论文。利用ChatGPT的智能回应生成详尽有效的内容&#xff0c;这样可以加快研究论文的策划、…...

叠层阻抗线框

1.阻抗介绍 特性阻抗&#xff1a;又称“特征阻抗”&#xff0c;它不是直流电阻&#xff0c;属于长线传输中的概念。在高频范围内&#xff0c;信号传输过程中&#xff0c;信号沿到达的地方&#xff0c;信号线和参考平面&#xff08;电源或地平面&#xff09;间由于电场的建立&am…...

大数据:驱动技术创新与产业转型的引擎

📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 在全球数字化转型的浪潮中,大数据已经成为推动各行各业革新的核心力量。随着信息技术的迅猛发展,数据的收集、存储、处理和分析能力不断提升,大数据不仅改变了企业的运营模式,更引领了技术创新和产业结构…...

C++继承基础总结

引言 在编写多个类时&#xff0c;类之间可能会存在多个相同的成员变量&#xff0c;导致代码冗余度过高&#xff0c;C继承的出现&#xff0c;使得我们可以在已有类的基础上构建新类&#xff0c;从而实现代码复用与结构扩展。 一、继承的基本概念 继承是指子类&#xff08;派生…...

2025年斯诺克世锦赛——“75三杰”在1/4决赛作为对手的概率

“在最近的斯诺克世锦赛中&#xff0c;中国两名球员成功挺进前8强。此外&#xff0c;前8强也出现令人感慨的一幕&#xff1a;75三杰全部进入到了八强&#xff0c;这也是历史第5次&#xff0c;50岁正是打拼的年纪&#xff01;传奇之旅继续&#xff01;”——摘自50岁正是打拼的年…...

Python绘制地球的重力地图

文章目录 Boule重力地图从ensaio下载重力数据Boule boule中定义了多种参考椭球,可用于表示地球、火星等星体的重力分布。可通过pip安装 pip install bouleboule中已经定义的椭球如下 椭球GRS80WGS84MARSMERCURYMOONVENUSVESTA星体地球地球火星水星月球金星灶神星这些椭球可直…...

多端定制系统开发:打造高效全平台覆盖的APP解决方案

在移动互联网时代&#xff0c;用户需求日益多样化&#xff0c;企业若想触达更广泛的受众&#xff0c;仅靠单一平台的应用已远远不够。无论是iOS、Android、Web端&#xff0c;还是智能手表、车载设备等新兴终端&#xff0c;多端适配已成为企业数字化转型的刚需。多端定制系统开发…...

WGDI-分析WGD及祖先核型演化的集成工具-文献精读126

WGDI: A user-friendly toolkit for evolutionary analyses of whole-genome duplications and ancestral karyotypes WGDI&#xff1a;一款面向全基因组重复事件与祖先核型演化分析的易用工具集 摘要 在地球上大多数主要生物类群中&#xff0c;人们已检测到全基因组复制&…...

旋转矩阵公式理解

这里给出其中一种理解方法&#xff1a; 设原始直角坐标系下的坐标为(x,y)&#xff0c;我们可以将它分解为两个向量(x,0)和(0,y)。接下来将两个向量分别顺时针旋转θ度&#xff0c;二者就会分别变成&#xff1a;(xcosθ,xsinθ)和(-ysinθ,ycosθ)。 也就是说&#xff0c;二者…...

网络Tips20-002

1..某主机接口的IP地址为192.16.7.131/26.则该IP地址所在网络的广播地址是&#xff1a;192 16.7.191 广播地址是指在特定网络上发送广播消息的地址。它用于向网络上的所有设备发送信息。 方法1&#xff1a;广播地址掩码取反和网络地址的或运算 方法2&#xff1a;广播地址将网…...

firewall docker 冲突问题解决(亲测有效)

# 关闭iptables&#xff0c;使用firewall systemctl disable iptables # 禁用服务 systemctl stop iptables # 关闭服务 systemctl status iptables # 查看服务状态 systemctl enable firewalld # 设置防火墙开机自启动 systemctl start firewalld # 开启服务 systemctl s…...

SwiftUI-MLX本地大模型开发(二)

介绍 在 SwiftUI-MLX本地大模型开发一文中&#xff0c;我们已经详细讲了如何利用 MLX 进行本地大模型的开发。但是通过案例可以发现 2 个问题&#xff1a; MLX 内置的大模型数量有限。每次大模型都需要从 HuggingFace 下载。 如何解决这 2 个问题&#xff0c;方案是&#xff1a…...

基于「骑手外卖系统」串联7大设计原则

你说得对&#xff01;这些设计原则听起来都很抽象、很“玄”&#xff0c;如果不是实际开发过系统&#xff0c;很难理解“到底为什么要这样设计”。 那我现在就用一个你能想象得很清楚的真实例子&#xff0c;帮你把这7个设计原则一一落地到具体情境里&#xff0c;你会一眼明白。…...

泰迪杯特等奖案例学习资料:基于时空图卷积网络的城市排水系统水位精准重建与异常检测

(第十四届泰迪杯数据挖掘挑战赛A题特等奖案例解析) 一、案例背景与核心挑战 1.1 应用场景与行业痛点 城市排水系统(Urban Drainage Network, UDN)是城市基础设施的重要组成部分,其运行效率直接影响防洪排涝能力和水环境质量。然而,实际运维中面临以下难题: 监测数据稀…...

嵌入式Linux应用项目----智能网关

一、网关概述&#xff1a; Linux网关的作用在于&#xff0c;通过蓝牙、LoRa、串口、CAN等接口&#xff0c;与哪些无法连接网络的设备建立联系&#xff0c;将它们的数据转发至服务器。这过程中&#xff0c;网关充当了数据的桥梁&#xff0c;将下级设备所产生的数据发送至服务器。…...

C++ 中的继承

目录 前言 一、继承的概念及定义 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、复杂的菱形继承及菱形虚拟继承 &#xff08;一&#xff09;单继承与多继承 &#xff08;二&#xff09;菱形继承 …...

【中间件】brpc_基础_用户态线程上下文

文章目录 context介绍1 简单介绍2 主要功能2.1 上下文结构定义2.2 上下文切换实现2.3 协程栈管理2.4 平台兼容性处理2.5 性能优化 3 关键代码逻辑示例3.1 上下文初始化 (bthread_make_fcontext)3.2 上下文切换 (bthread_jump_fcontext) 4 与 BRPC 其他模块的协作5 性能与稳定性…...

蟋蟀的叫声,大自然的温度计

夏夜草丛中&#xff0c;蟋蟀的鸣叫声此起彼伏。有趣的是&#xff0c;它们的叫声频率竟然与气温有关&#xff01;根据图片中的公式&#xff1a; 气温 ( X 8 ) 5 9 \text{气温} \frac{(X 8) \times 5}{9} 气温9(X8)5​ 只需记录蟋蟀在 15 秒内的鸣叫次数&#xff08; X X X…...