网站空间期限查询/友情链接买卖代理

网站空间期限查询,友情链接买卖代理,有哪些做红色旅游景点的网站,开发公司企业管理制度实战演练:全方位调优策略 (一)细致入微的配置优化 生产者配置: sendMsgTimeout:此参数定义了生产者发送消息时等待 Broker 返回确认的最长时间,默认值为 3000 毫秒。若在该时间段内未收到确认&#xff0c…

实战演练:全方位调优策略

(一)细致入微的配置优化

  1. 生产者配置
    • sendMsgTimeout:此参数定义了生产者发送消息时等待 Broker 返回确认的最长时间,默认值为 3000 毫秒。若在该时间段内未收到确认,生产者会抛出异常。在网络不稳定或 Broker 负载较高的情况下,适当增加该值,可避免因超时而导致不必要的消息重发,提高消息发送的成功率。例如,在一个网络延迟较高的跨机房消息传递场景中,将sendMsgTimeout设置为 5000 毫秒,能有效减少因网络波动引起的发送超时问题。
    • retryTimesWhenSendFailed:表示消息发送失败后的重试次数,默认值为 2 次。当生产者发送消息失败时,会按照此参数设置的次数进行重试。在实际应用中,若业务对消息的可靠性要求极高,可适当增加重试次数,但需注意,过多的重试可能会增加系统的负载和延迟。比如,在金融交易系统中,为确保交易消息的准确传递,可将重试次数设置为 3 - 5 次。
    • compressMsgBodyOverHowmuch:当消息体大小超过该参数设定的值(默认 4096 字节,即 4KB)时,RocketMQ 会自动对消息体进行压缩,以减少网络传输和存储开销。在发送大量文本类消息时,合理调整此参数,可有效降低带宽占用和存储成本。例如,在日志收集系统中,若日志消息经常超过 4KB,可根据实际情况将compressMsgBodyOverHowmuch调整为 8192 字节,以提高消息处理效率。
    • maxMessageSize:规定了生产者能发送的最大消息大小,默认值为 4194304 字节(4MB)。若消息大小超过此限制,生产者会抛出异常。在设计消息结构时,需根据业务需求合理控制消息大小,避免因消息过大而导致发送失败。比如,在图片上传通知场景中,若消息中携带图片相关信息较多,可能需要调整maxMessageSize的值,以适应实际需求。
  1. 消费者配置
    • consumeThreadMin和consumeThreadMax:这两个参数分别定义了消费者线程池的最小线程数和最大线程数。consumeThreadMin默认值为 10,consumeThreadMax默认值为 64。消费者通过线程池来并发处理接收到的消息,合理调整线程数能有效提高消费速度。当消费负载较低时,保持较小的线程数,可减少系统资源的占用;当消费负载较高时,适当增加线程数,能加快消息的处理速度。例如,在一个电商订单处理系统中,在促销活动期间,订单消息量剧增,此时可将consumeThreadMax调整为 100,以提高订单处理的效率;而在平时业务量较小时,可将consumeThreadMin调整为 5,节省系统资源。

(二)精心规划的集群配置与优化

  1. 集群架构设计
    • 单 Master 模式:整个集群仅包含一个 Master 节点,这种模式配置极为简单,但存在严重的风险。一旦 Master 节点出现故障,如重启或宕机,整个服务将完全不可用,适用于本地测试环境,但绝不适用于线上生产环境。
    • 多 Master 模式:集群中全部是 Master 节点,没有 Slave 节点。这种模式的优点是配置相对简单,且单个 Master 节点的宕机或重启维护对应用的影响较小。在磁盘配置为 RAID10 时,即使机器宕机不可恢复,消息也不会丢失(异步刷盘会丢失少量消息,同步刷盘则一条不丢),性能表现较高。然而,其缺点是单台机器宕机期间,该机器上未被消费的消息在恢复之前不可订阅,会影响消息的实时性。例如,在一些对消息实时性要求不高的日志收集系统中,可以采用多 Master 模式。
    • 多 Master 多 Slave 模式(异步):每个 Master 节点都配置一个 Slave 节点,采用异步复制方式。这种模式下,即使磁盘损坏,消息丢失量也极少,消息实时性不受影响。而且,当 Master 宕机后,消费者仍可从 Slave 消费,此过程对应用透明,无需人工干预,性能与多 Master 模式几乎相同。不过,在 Master 宕机且磁盘损坏的情况下,会丢失少量消息。例如,在电商的订单消息处理中,若允许少量消息丢失的情况存在,可采用这种模式。
    • 多 Master 多 Slave 模式(同步):同样每个 Master 节点配置一个 Slave 节点,但采用同步双写方式,即只有主备都写成功,才向应用返回成功。这种模式的数据与服务都无单点故障,Master 宕机时消息无延迟,服务可用性与数据可用性都非常高。但缺点是性能比异步复制模式略低(大约低 10% 左右),发送单个消息的 RT(响应时间)会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。在金融交易系统等对数据一致性和可靠性要求极高的场景中,多 Master 多 Slave 模式(同步)是较为合适的选择。
  1. 负载均衡策略
    • 负载均衡原理:在 RocketMQ 集群中,负载均衡旨在将生产者发送的消息以及消费者的请求均匀地分配到各个 Broker 节点上,以充分利用集群资源,避免单点过载,从而提升系统的整体性能和可用性。
    • 负载均衡算法:RocketMQ 主要采用轮询算法和随机算法进行负载均衡。轮询算法按照一定的顺序依次将消息分配到各个队列或 Broker 上,确保每个队列或 Broker 都能被均匀地使用;随机算法则是随机选择队列或 Broker 进行消息分配,这种方式简单且在一定程度上能实现负载均衡。
    • 策略优化:为了使负载更加均衡,可以根据 Broker 节点的性能指标,如 CPU 使用率、内存使用率、磁盘 I/O 等,动态调整负载均衡策略。例如,当某个 Broker 节点的 CPU 使用率过高时,减少分配到该节点的消息量;当某个 Broker 节点的内存充足且磁盘 I/O 性能较好时,适当增加分配到该节点的消息量。同时,结合消息的优先级和业务场景,对不同类型的消息进行差异化的负载均衡,进一步提高系统的性能和稳定性。

(三)匠心独运的存储模型选择与优化

  1. 存储模型解析
    • RocketMQ 存储模型:RocketMQ 采用混合型存储结构,Broker 单个实例下所有的队列共用一个数据文件(commitlog)来存储消息主体及元数据。同时,通过消费文件(consumequeue)和索引文件(index)来提高消息消费和查询的效率。
    • 优缺点分析:这种存储模型的优点是,由于消息顺序写入 commitlog,能充分利用磁盘的顺序写特性,大大提高写入性能;而且,通过 consumequeue 和 index 文件的辅助,能快速定位和查询消息。然而,其缺点是读操作变成了随机读,因为需要先读 consumequeue,再读 commitlog 才能获取完整的消息,增加了读操作的开销;并且,要保证 commitlog 与 consumequeue 的一致性,也增加了编程的复杂度。
    • 选择依据:根据数据特点和业务需求,如果业务场景以写入操作为主,且对消息的实时性要求较高,那么这种存储模型非常适合;如果读操作频繁且对实时性要求极高,可能需要结合其他技术手段来优化读性能,或者根据实际情况选择更适合的存储模型。例如,在物联网设备数据采集场景中,大量设备不断上传数据,写入操作频繁,RocketMQ 的这种存储模型能很好地满足需求。
  1. 优化存储参数
    • mappedFileSizeCommitLog:该参数定义了 commitlog 文件的大小,默认值为 1073741824 字节(1GB)。适当调整此参数可平衡文件切换的频率和单个文件的存储容量。若文件大小设置过小,文件切换会过于频繁,增加系统开销;若设置过大,可能会导致单个文件占用过多磁盘空间,且在文件读写时效率会降低。例如,在消息量较小的场景中,可以将mappedFileSizeCommitLog调整为 512MB,减少文件切换次数;在消息量较大的场景中,可适当增大该值,如调整为 2GB。
    • flushDiskType:此参数指定了刷盘策略,有SYNC_FLUSH(同步刷盘)和ASYNC_FLUSH(异步刷盘)两种选项。SYNC_FLUSH确保消息在写入磁盘后才返回确认,数据可靠性极高,但会降低写入性能;ASYNC_FLUSH则是消息写入内存后立即返回确认,刷盘操作由后台线程异步进行,写入性能较高,但存在数据丢失的风险。在对数据可靠性要求极高的金融业务中,应选择SYNC_FLUSH;在对实时性要求较高且能容忍少量数据丢失的场景中,如日志收集,可选择ASYNC_FLUSH。

(四)巧用索引加速消息查询

  1. 索引原理
    • RocketMQ 索引机制:RocketMQ 支持多种索引方式,包括基于消息 ID 的索引、基于消息 Key 的索引以及基于时间的索引。基于消息 ID 的索引是通过消息在 commitlog 中的物理偏移量来快速定位消息;基于消息 Key 的索引则是通过对消息的业务唯一标识码(设置在 keys 字段)创建哈希索引,方便根据业务需求快速查询消息;基于时间的索引可以根据消息的发送时间范围来查询消息。
    • 快速定位消息:以基于消息 Key 的索引为例,当生产者发送消息时,RocketMQ 会为消息的 Key 创建索引,并将索引信息存储在 index 文件中。当消费者需要根据 Key 查询消息时,RocketMQ 首先在 index 文件中查找对应的索引,获取消息在 commitlog 中的物理偏移量,然后根据偏移量从 commitlog 中读取消息,从而实现快速定位消息的目的。
  1. 创建与使用索引
    • 创建索引示例代码:在 Java 中,创建基于消息 Key 的索引示例代码如下:
 

import org.apache.rocketmq.client.producer.DefaultMQProducer;

import org.apache.rocketmq.client.producer.SendResult;

import org.apache.rocketmq.common.message.Message;

public class IndexProducer {

public static void main(String[] args) throws Exception {

// 实例化生产者

DefaultMQProducer producer = new DefaultMQProducer("IndexProducerGroup");

// 指定NameServer地址

producer.setNamesrvAddr("localhost:9876");

// 启动生产者

producer.start();

String topic = "IndexTopic";

String key = "OrderID-001";

Message message = new Message(topic, "Tag1", key, "Hello world with index".getBytes());

// 发送消息

SendResult sendResult = producer.send(message);

System.out.printf("Message sent: %s%n", sendResult);

// 关闭生产者

producer.shutdown();

}

}

在上述代码中,我们创建了一条消息,并为其设置了 Key 为OrderID-001。当这条消息发送到 RocketMQ 集群时,RocketMQ 会自动为该 Key 创建索引。

  • 使用索引查询消息:在查询消息时,通过指定 Topic 和 Key,RocketMQ 可以利用索引快速定位消息。示例代码如下:
 

import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;

import org.apache.rocketmq.client.consumer.MessageSelector;

import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;

import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;

import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;

import org.apache.rocketmq.common.message.MessageExt;

import java.util.List;

public class IndexConsumer {

public static void main(String[] args) throws Exception {

// 实例化消费者

DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("IndexConsumerGroup");

// 指定NameServer地址

consumer.setNamesrvAddr("localhost:9876");

// 订阅主题,并设置消息选择器,根据Key查询消息

consumer.subscribe("IndexTopic", MessageSelector.byKey("OrderID-001"));

// 注册消息监听器

consumer.registerMessageListener(new MessageListenerConcurrently() {

@Override

public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {

for (MessageExt msg : msgs) {

System.out.printf("Consumed message: %s%n", new String(msg.getBody()));

}

return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;

}

});

// 启动消费者

consumer.start();

}

}

在上述代码中,我们通过MessageSelector.byKey("OrderID-001")设置了消息选择器,使消费者只接收 Key 为OrderID-001的消息。这样,RocketMQ 会利用索引快速筛选出符合条件的消息,提高查询效率。

性能优化案例深度剖析

(一)案例背景与问题呈现

某电商平台在业务快速发展过程中,订单处理系统的消息量呈爆发式增长。该系统使用 RocketMQ 作为消息中间件,负责订单创建、支付通知、库存更新等消息的传递。随着订单量的急剧增加,RocketMQ 在运行中逐渐暴露出性能问题。主要表现为消息发送延迟明显,部分订单消息的发送延迟从原本的几十毫秒延长到了数秒,严重影响了订单处理的及时性;同时,消息消费速度也大幅下降,消费者在处理订单消息时出现明显卡顿,导致大量消息堆积在 Broker 中,进一步加剧了系统性能的恶化。这些问题直接影响了用户体验,导致部分用户投诉订单处理缓慢,对电商平台的业务运营造成了严重影响。

(二)问题排查与分析过程

为了解决这些性能问题,技术团队首先对 RocketMQ 的运行状态进行了全面排查。通过查看 RocketMQ 的监控指标,发现部分 Broker 节点的 CPU 使用率持续居高不下,达到了 90% 以上,内存使用率也接近饱和。进一步分析发现,由于业务增长过快,原有的 RocketMQ 集群配置已无法满足当前的消息处理需求。生产者的发送线程池配置过小,在高并发情况下,线程资源不足,导致消息发送任务排队等待,从而增加了消息发送延迟。同时,消费者的消费线程池也存在同样的问题,消费线程数量无法满足大量消息的处理需求,使得消息消费速度缓慢。此外,网络带宽在高并发场景下也成为了瓶颈,消息在网络传输过程中出现拥堵,进一步加剧了消息发送和消费的延迟。

(三)调优方案实施与效果验证

针对上述问题,技术团队制定了一系列调优策略。首先,对生产者和消费者的线程池进行了优化,根据业务量和服务器资源情况,将生产者的发送线程池大小从默认的 10 个线程增加到 50 个线程,消费者的消费线程池大小从 10 个线程增加到 80 个线程,以提高消息发送和消费的并发能力。同时,对 RocketMQ 集群进行了扩容,增加了 Broker 节点的数量,从原来的 3 个节点扩展到 6 个节点,并重新调整了负载均衡策略,使消息能够更加均匀地分布到各个 Broker 节点上,避免了单个节点的过载。此外,对网络带宽进行了升级,将原来的 100Mbps 带宽提升到了 1Gbps,以确保消息在网络传输过程中的畅通。

在实施调优方案后,技术团队对 RocketMQ 的性能进行了再次测试。结果显示,消息发送延迟从原来的数秒降低到了 50 毫秒以内,消息消费速度也得到了显著提升,吞吐量从原来的每秒处理 1000 条消息提高到了每秒处理 5000 条消息,消息堆积问题得到了有效解决,系统性能得到了极大的改善。通过这次性能优化案例,我们深刻认识到 RocketMQ 性能优化的重要性和复杂性,只有深入了解其工作原理和性能瓶颈,采取针对性的调优策略,才能充分发挥其优势,保障系统的高效稳定运行。

总结与展望

在分布式系统蓬勃发展的今天,RocketMQ 作为一款卓越的分布式消息中间件,在众多业务场景中发挥着关键作用。通过深入理解并运用其性能优化与调优策略,我们能够显著提升系统的运行效率和稳定性,满足业务不断增长的需求。

从性能优化的基本原则出发,我们深入剖析了消息模型,掌握了提升吞吐量、降低延迟和优化消息存储的方法。批量消息发送、异步消息发送、合理配置存储路径和刷盘模式等策略,为我们在实际应用中优化 RocketMQ 性能提供了有力的工具。在实战演练部分,我们从配置优化、集群配置与优化、存储模型选择与优化以及巧用索引加速消息查询等多个方面,详细阐述了具体的调优策略和方法。通过合理调整生产者和消费者的配置参数、精心规划集群架构和负载均衡策略、优化存储模型和参数以及创建和使用索引,我们能够全方位地提升 RocketMQ 的性能。

未来,随着技术的不断进步和业务的持续发展,RocketMQ 的性能优化也将面临新的挑战和机遇。一方面,随着硬件技术的发展,如 CPU 性能的提升、内存容量的增加和磁盘 I/O 速度的加快,我们需要不断探索如何更好地利用这些硬件资源,进一步提升 RocketMQ 的性能。另一方面,随着分布式系统架构的不断演进,如微服务架构、容器化技术和 Serverless 架构的广泛应用,RocketMQ 需要更好地适应这些新的架构模式,提供更高效、更可靠的消息服务。同时,人工智能和大数据技术的发展也为 RocketMQ 的性能优化提供了新的思路和方法,我们可以借助这些技术实现更智能的负载均衡、故障预测和性能调优。

作为开发者,我们应保持对新技术的敏锐洞察力,不断学习和探索,将最新的技术成果应用到 RocketMQ 的性能优化中。在实践中,我们要根据具体的业务场景和需求,灵活运用各种优化策略,不断尝试和创新,以找到最适合自己业务的性能优化方案。相信在我们的共同努力下,RocketMQ 将在分布式系统领域发挥更加重要的作用,为业务的发展提供更强大的支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/72577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

stable-diffusion-webui-docker 构建 comfy-ui

Ubuntu 安装 stable-diffusion-webui-docker 常见问题处理方法 这篇文章介绍了在 Ubuntu 上安装 stable-diffusion-webui-docker&#xff0c;运行 docker compose --profile auto up --build 构建出的界面是 stable-diffusion-webui&#xff0c;如果运行 docker compose --prof…

【AI学习从零至壹】Pytorch神经⽹络

Pytorch神经⽹络 神经网络简介神经元激活函数 神经网络神经⽹络的⼯作过程前向传播(forward) 反向传播(backward)训练神经⽹络 Pytorch搭建并训练神经⽹络神经⽹络构建和训练过程数据预处理构建模型优化器&提取训练数据训练样本 神经网络简介 神经元 在深度学习中&#x…

stm32 L432KC(mbed)入门第一课

目录 一. 前言 二. 专栏意义 三. MS入门第一课 一. 前言 新的一年MS课程又开始了&#xff0c;同时也到了该专栏的第三个年头。在前两年中&#xff0c;该专栏帮助了很多第一次接触单片机的同学。其中&#xff0c;有的同学订阅专栏是为了更好的完成并且通过MS这门课程&#xf…

【系统架构设计师】操作系统 - 文件管理 ② ( 位示图 | 空闲区域 管理 | 位号 | 字号 )

文章目录 一、空闲区域 管理1、空闲区域分配2、空闲区域 管理方式 简介 二、位示图 简介1、位示图 表示2、位示图 字号3、位示图 位号4、位示图 中 比特位 分组管理 三、位示图 考点1、计算磁盘 位示图 的大小2、位示图 位置计算 一、空闲区域 管理 1、空闲区域分配 在 索引文件…

搭建Django开发环境

搭建Django开发环境 文章目录 搭建Django开发环境[toc]一、安装Python语言环境二、安装Visual Studio Code三、安装setuptools工具四、安装Django框架 一、安装Python语言环境 1.测试当前系统环境是否存在Python语言解释器 python --version2.打开PowerShell终端&#xff0c;…

图论part3|101.孤岛的总面积、沉没孤岛、417. 太平洋大西洋水流问题

101. 孤岛的总面积 &#x1f517;&#xff1a;101. 孤岛的总面积思路&#xff1a;和昨天的岛的区别是&#xff1a;是否有挨着边的岛屿 所以可以先遍历四条边挨着的岛屿&#xff0c;把他们标记为非孤岛再计算其他岛屿当中的最大面积 代码&#xff1a;&#xff08;深度搜索&…

AP AR

混淆矩阵 真实值正例真实值负例预测值正例TPFP预测值负例FNTN &#xff08;根据阈值预测&#xff09; P精确度计算&#xff1a;TP/(TPFP) R召回率计算&#xff1a;TP/(TPFN) AP 综合考虑P R 根据不同的阈值计算出不同的PR组合&#xff0c; 画出PR曲线&#xff0c;计算曲线…

【css酷炫效果】纯CSS实现按钮流光边框

【css酷炫效果】纯CSS实现按钮流光边框 缘创作背景html结构css样式完整代码效果图 【css酷炫效果】纯CSS实现按钮流光边框。 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90490501 缘 创作随缘&#xff0c;不定时更…

【Android】ListView控件在进入|退出小窗下的异常

1&#xff0c;描述 页面使用了ListView控件&#xff0c;随后进入小窗模式&#xff0c;导致视图遮挡 2&#xff0c;根源 ListView虽然进入小窗relayout&#xff0c;其measureChild高度比全屏下要小&#xff0c;但是&#xff0c;其内部使用了Recycler机制&#xff0c;缓存了ite…

基于ssm的电子病历系统(全套)

一、系统架构 前端&#xff1a;jsp | bootstrap | jquery 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | tomcat | idea 二、代码及数据库 三、功能介绍 01. 登录 02. 主页 03. 管理员-个人中心-修改密码…

使用STM32CubeMX+DMA+空闲中断实现串口接收和发送数据(STM32G070CBT6)

1.STM32CubeMX配置 &#xff08;1&#xff09;配置SYS &#xff08;2&#xff09;配置RCC &#xff08;3&#xff09;配置串口&#xff0c;此处我用的是串口4&#xff0c;其他串口也是一样的 &#xff08;4&#xff09;配置DMA&#xff0c;将串口4的TX和RX添加到DMA中 &#…

LabVIEW VI Scripting随机数波形图自动生成

通过LabVIEW VI Scripting 技术&#xff0c;实现从零开始编程化创建并运行一个随机数波形监测VI。核心功能包括自动化生成VI框架、添加控件与函数、配置数据流逻辑及界面布局优化&#xff0c;适用于批量生成测试工具、教学模板开发或复杂系统的模块化构建。通过脚本化操作&…

JavaScript 中的包装类型:概念、作用与使用场景

文章目录 引言1. 什么是包装类型&#xff1f;1.1 包装类型的定义1.2 包装类型的作用 2. 包装类型的使用2.1 自动装箱&#xff08;Autoboxing&#xff09;示例 2.2 手动创建包装对象示例 3. 包装类型的特性3.1 包装对象的生命周期示例 3.2 基本类型与包装对象的区别示例 4. 包装…

react18 核心知识点杂记1

类组件 如何渲染为真实dom 入口&#xff1a; const root ReactDOM.createRoot(document.getElementById(root))root.render(类组件)⬇️ 类组件内部render() {return (<div>12</div>)}⬇️ (经过babel-preset-react-app 把jsx语法&#xff0c;编译为h函数形式) R…

Matlab 汽车传动系统的振动特性分析

1、内容简介 Matlab 186-汽车传动系统的振动特性分析 可以交流、咨询、答疑 2、内容说明 略 摘要&#xff1a;汽车动力传动系统是一个具有多自由度的、连续的、有阻尼系统。传动系统的振动主要有横向振动、扭转振动、纵向振动。并且汽车传动系统的扭转振动是一个非常重要的振…

JDBC技术基础

文章目录 1. JDBC概述1.1 数据的持久化1.2 Java中的数据存储技术1.3 JDBC介绍1.4 JDBC体系结构1.5 JDBC程序编写步骤 2. 获取数据库连接2.1 引入JAR包2.2 要素一&#xff1a;Driver接口实现类2.2.1 Driver接口介绍2.2.2 加载与注册JDBC驱动 2.3 要素二&#xff1a;URL2.4 要素三…

QT入门笔记2

目录 一、前言 二、串口助手实现 2.1、串口 2.1.1、可用串口信息-QSerialPortInfo 2.1.2、打开串口-QSerialPort 2.1.3、串口发送接收信息 2.2、定时器-QTimer 2.3、常用属性类型转换&#xff08;会更新&#xff09; 2.4、子控件组规则命名优化 一、前言 这个是学习Q…

Word 小黑第40套

对应大猫43 主题 -浏览主题 -选择W样式标准文件就行 1级段落和2级段落&#xff08;用项目符号不影响原本段落文字符号 颜色修改为自动&#xff09; 整段变红的 不是把光标定位到红色字体那里 要选择几个红色字体 再创建样式 插入的空白页一定要是下一页&#xff0c;不能插空白…

基于yolo11+flask打造一个精美登录界面和检测系统

这个是使用flask实现好看登录界面和友好的检测界面实现yolov11推理和展示&#xff0c;代码仅仅有2个html文件和一个python文件&#xff0c;真正做到了用最简洁的代码实现复杂功能。 测试通过环境&#xff1a; windows x64 anaconda3python3.8 ultralytics8.3.81 flask1.1.…

SQLMesh系列教程:利用date_spine宏构建日期序列实践指南

引言&#xff1a;为什么需要日期维度表&#xff1f; 在数据分析和报表开发中&#xff0c;日期维度表是不可或缺的基础结构&#xff0c;其中包括一定日期范围的日期序列&#xff0c;每个序列包括对应日期属性&#xff0c;如年季月日、是否周末等。无论是计算日粒度销售额、分析…