Java17 --- Mabbitmq之安装测试

news2024/11/16 5:34:45

目录

一、拉取运行镜像

1.1、拉取镜像环境

1.2、运行镜像

 二、工作模式

2.1、消息的发送者 

2.2、消息的接收者 

2.3、生产队列模式 

2.3.1、消息的发送者 

 2.3.2、消息的接收者

2.4、发布订阅模式

2.4.1、消息的发送者 

2.4.2、消息的接收者 

2.5、路由模式 

2.5.1、消息的发布者 

2.5.2、消息的接收者 

2.6、主题模式 

2.6.1、消息的发布者 

2.6.2、消息的接收者 


一、拉取运行镜像

1.1、拉取镜像环境

docker pull rabbitmq:3.13-management 

1.2、运行镜像

docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -v rabbitmq-plugin:/plugins -e RABBITMQ_DEFAULT_USER=guest -e RABBITMQ_DEFAULT_PASS=123456 rabbitmq:3.13-management 

 

测试访问: 

 

 二、工作模式

 引入pom依赖

<dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>5.20.0</version>
        </dependency>

2.1、消息的发送者 

public class Producer {
    public static void main(String[] args) {
        //创建链接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置主机地址
        connectionFactory.setHost("192.168.200.110");
        //连接端口号
        connectionFactory.setPort(5672);
        //虚拟机主机名称默认 /
        connectionFactory.setVirtualHost("/");
        //连接用户名
        connectionFactory.setUsername("guest");
        //连接用户密码
        connectionFactory.setPassword("123456");
        Connection connection = null;
        Channel channel = null;
        try {
            //创建连接
             connection = connectionFactory.newConnection();
            //创建连接频道
            channel = connection.createChannel();
            //申明队列
            //String var1, 队列名称
            // boolean var2, 是否持久化队列
            // boolean var3, 是否独占本次连接,独占只能有一个消费者
            // boolean var4, 是否不使用时删除队列
            // Map<String, Object> var5 队列其他参数
            channel.queueDeclare("simple_quest",true,false,false,null);
            //发送的队列消息
            String message = "你好,沸羊羊";
            //String var1, 交换机名称,没有使用默认
            // String var2, 路由key,简单模式可以传递队列
            // AMQP.BasicProperties var3, 配置信息
            // byte[] var4 消息内存
            channel.basicPublish("","simple_quest",null,message.getBytes());
            System.out.println("发送已完成:" + message);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (TimeoutException e) {
            throw new RuntimeException(e);
        }finally {
            //关闭资源
            try {
                channel.close();
                connection.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            } catch (TimeoutException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

 

2.2、消息的接收者 

public class Consumer {
    public static void main(String[] args) {
        //创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置主机地址
        connectionFactory.setHost("192.168.200.110");
        //连接端口号
        connectionFactory.setPort(5672);
        //虚拟机主机名称默认 /
        connectionFactory.setVirtualHost("/");
        //连接用户名
        connectionFactory.setUsername("guest");
        //连接用户密码
        connectionFactory.setPassword("123456");
        Connection connection = null;
        Channel channel = null;
        try {
            //创建连接
            connection = connectionFactory.newConnection();
            //创建连接频道
            channel = connection.createChannel();
            //申明队列
            //String var1, 队列名称
            // boolean var2, 是否持久化队列
            // boolean var3, 是否独占本次连接,独占只能有一个消费者
            // boolean var4, 是否不使用时删除队列
            // Map<String, Object> var5 队列其他参数
            //channel.queueDeclare("simple_quest",true,false,false,null);
           //接收消息
            DefaultConsumer defaultConsumer = new DefaultConsumer(channel){
                @Override
                //String consumerTag,标识
                // Envelope envelope, 获取某些信息
                // AMQP.BasicProperties properties, 配置信息
                // byte[] body 数据
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println("consumerTag:" + consumerTag);
                    System.out.println("Exchange:" + envelope.getExchange());
                    System.out.println("RoutingKey:" + envelope.getRoutingKey());
                    System.out.println("properties:" + properties);
                    System.out.println("body:" + new String(body));
                }
            };
            //String var1, 队列名称
            // boolean var2, 是否自动确认
            // Consumer var3 回调对象
            //消费者类似监听程序,主要用来监听对象
            channel.basicConsume("simple_quest",true,defaultConsumer);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (TimeoutException e) {
            throw new RuntimeException(e);
        }finally {
            //关闭资源
            try {
                channel.close();
                connection.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            } catch (TimeoutException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

 

2.3、生产队列模式 

2.3.1、消息的发送者 

public class Producer {
    public static void main(String[] args) {
        //创建链接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置主机地址
        connectionFactory.setHost("192.168.200.110");
        //连接端口号
        connectionFactory.setPort(5672);
        //虚拟机主机名称默认 /
        connectionFactory.setVirtualHost("/");
        //连接用户名
        connectionFactory.setUsername("guest");
        //连接用户密码
        connectionFactory.setPassword("123456");
        Connection connection = null;
        Channel channel = null;
        try {
            connection = connectionFactory.newConnection();
            channel = connection.createChannel();
            channel.queueDeclare("work_quest",true,false,false,null);
            for (int i = 1; i <= 10 ; i++) {
                String message = "你好,美羊羊" + i;
                channel.basicPublish("","work_quest",null,message.getBytes());
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (TimeoutException e) {
            throw new RuntimeException(e);
        }finally {
            //关闭资源
            try {
                channel.close();
                connection.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            } catch (TimeoutException e) {
                throw new RuntimeException(e);
            }
        }

    }
}

 

 2.3.2、消息的接收者

public class Consumer1 {
    public static void main(String[] args) {
        //创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置主机地址
        connectionFactory.setHost("192.168.200.110");
        //连接端口号
        connectionFactory.setPort(5672);
        //虚拟机主机名称默认 /
        connectionFactory.setVirtualHost("/");
        //连接用户名
        connectionFactory.setUsername("guest");
        //连接用户密码
        connectionFactory.setPassword("123456");
        Connection connection = null;
        Channel channel = null;
        try {
            //创建连接
            connection = connectionFactory.newConnection();
            //创建连接频道
            channel = connection.createChannel();
            //申明队列
            //String var1, 队列名称
            // boolean var2, 是否持久化队列
            // boolean var3, 是否独占本次连接,独占只能有一个消费者
            // boolean var4, 是否不使用时删除队列
            // Map<String, Object> var5 队列其他参数
            //channel.queueDeclare("simple_quest",true,false,false,null);
            //接收消息
            DefaultConsumer defaultConsumer = new DefaultConsumer(channel){
                @Override
                //String consumerTag,标识
                // Envelope envelope, 获取某些信息
                // AMQP.BasicProperties properties, 配置信息
                // byte[] body 数据
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println("consumerTag:" + consumerTag);
                    System.out.println("Exchange:" + envelope.getExchange());
                    System.out.println("RoutingKey:" + envelope.getRoutingKey());
                    System.out.println("properties:" + properties);
                    System.out.println("body:" + new String(body));
                }
            };
            //String var1, 队列名称
            // boolean var2, 是否自动确认
            // Consumer var3 回调对象
            //消费者类似监听程序,主要用来监听对象
            channel.basicConsume("work_quest",true,defaultConsumer);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (TimeoutException e) {
            throw new RuntimeException(e);
        }
    }
}

在复制拷贝一个消费者2

 

两个消费者会轮流拿到消息

2.4、发布订阅模式

2.4.1、消息的发送者 

public class Producer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建链接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置主机地址
        connectionFactory.setHost("192.168.200.110");
        //连接端口号
        connectionFactory.setPort(5672);
        //虚拟机主机名称默认 /
        connectionFactory.setVirtualHost("/");
        //连接用户名
        connectionFactory.setUsername("guest");
        //连接用户密码
        connectionFactory.setPassword("123456");

        Connection connection = connectionFactory.newConnection();
        Channel channel= connection.createChannel();
            //String var1,交换机名称
            // BuiltinExchangeType var2, 交换机类型
            // boolean var3, 是否持久化
            // boolean var4, 自动删除
            // boolean var5, 内部使用
            // Map<String, Object> var6 其他参数
            channel.exchangeDeclare("fanout_guest", BuiltinExchangeType.FANOUT,true,false,false,null);
            //创建队列
            channel.queueDeclare("queue_guest1",true,false,false,null);
            channel.queueDeclare("queue_guest2",true,false,false,null);
            //绑定队列和交换机
            //String var1, 队列名称
            // String var2, 交换机名称
            // String var3 路由键,绑定规则
            channel.queueBind("queue_guest1","fanout_guest","");
            channel.queueBind("queue_guest2","fanout_guest","");
            String message = "已成功发送消息";
            //发送消息
            channel.basicPublish("fanout_guest","",null,message.getBytes());
            //关闭资源
            channel.close();
           connection.close();

        }
}

2.4.2、消息的接收者 

public class Consumer1 {
    public static void main(String[] args) {
        //创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置主机地址
        connectionFactory.setHost("192.168.200.110");
        //连接端口号
        connectionFactory.setPort(5672);
        //虚拟机主机名称默认 /
        connectionFactory.setVirtualHost("/");
        //连接用户名
        connectionFactory.setUsername("guest");
        //连接用户密码
        connectionFactory.setPassword("123456");
        Connection connection = null;
        Channel channel = null;
        try {
            //创建连接
            connection = connectionFactory.newConnection();
            //创建连接频道
            channel = connection.createChannel();
            //申明队列
            //String var1, 队列名称
            // boolean var2, 是否持久化队列
            // boolean var3, 是否独占本次连接,独占只能有一个消费者
            // boolean var4, 是否不使用时删除队列
            // Map<String, Object> var5 队列其他参数
            //channel.queueDeclare("simple_quest",true,false,false,null);
            //接收消息
            DefaultConsumer defaultConsumer = new DefaultConsumer(channel){
                @Override
                //String consumerTag,标识
                // Envelope envelope, 获取某些信息
                // AMQP.BasicProperties properties, 配置信息
                // byte[] body 数据
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println("body:" + new String(body));
                }
            };
            //String var1, 队列名称
            // boolean var2, 是否自动确认
            // Consumer var3 回调对象
            //消费者类似监听程序,主要用来监听对象
            channel.basicConsume("queue_guest1",true,defaultConsumer);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (TimeoutException e) {
            throw new RuntimeException(e);
        }
    }
}

2.5、路由模式 

2.5.1、消息的发布者 

public class Producer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建链接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置主机地址
        connectionFactory.setHost("192.168.200.110");
        //连接端口号
        connectionFactory.setPort(5672);
        //虚拟机主机名称默认 /
        connectionFactory.setVirtualHost("/");
        //连接用户名
        connectionFactory.setUsername("guest");
        //连接用户密码
        connectionFactory.setPassword("123456");

        Connection connection = connectionFactory.newConnection();
        Channel channel= connection.createChannel();
            //String var1,交换机名称
            // BuiltinExchangeType var2, 交换机类型
            // boolean var3, 是否持久化
            // boolean var4, 自动删除
            // boolean var5, 内部使用
            // Map<String, Object> var6 其他参数
            channel.exchangeDeclare("test_routing", BuiltinExchangeType.DIRECT,true,false,false,null);
            //创建队列
            channel.queueDeclare("queue_routing1",true,false,false,null);
            channel.queueDeclare("queue_routing2",true,false,false,null);
            //绑定队列和交换机
            //String var1, 队列名称
            // String var2, 交换机名称
            // String var3 路由键,绑定规则
            channel.queueBind("queue_routing1","test_routing","error");
            channel.queueBind("queue_routing2","test_routing","info");
            String message = "已成功发送消息";
            //发送消息
            channel.basicPublish("test_routing","error",null,message.getBytes());
            //关闭资源
            channel.close();
           connection.close();

        }
}

2.5.2、消息的接收者 

public class Consumer1 {
    public static void main(String[] args) {
        //创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置主机地址
        connectionFactory.setHost("192.168.200.110");
        //连接端口号
        connectionFactory.setPort(5672);
        //虚拟机主机名称默认 /
        connectionFactory.setVirtualHost("/");
        //连接用户名
        connectionFactory.setUsername("guest");
        //连接用户密码
        connectionFactory.setPassword("123456");
        Connection connection = null;
        Channel channel = null;
        try {
            //创建连接
            connection = connectionFactory.newConnection();
            //创建连接频道
            channel = connection.createChannel();
            //申明队列
            //String var1, 队列名称
            // boolean var2, 是否持久化队列
            // boolean var3, 是否独占本次连接,独占只能有一个消费者
            // boolean var4, 是否不使用时删除队列
            // Map<String, Object> var5 队列其他参数
            channel.queueDeclare("queue_routing1",true,false,false,null);
            //接收消息
            DefaultConsumer defaultConsumer = new DefaultConsumer(channel){
                @Override
                //String consumerTag,标识
                // Envelope envelope, 获取某些信息
                // AMQP.BasicProperties properties, 配置信息
                // byte[] body 数据
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println("body:" + new String(body));
                }
            };
            //String var1, 队列名称
            // boolean var2, 是否自动确认
            // Consumer var3 回调对象
            //消费者类似监听程序,主要用来监听对象
            channel.basicConsume("queue_routing1",true,defaultConsumer);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (TimeoutException e) {
            throw new RuntimeException(e);
        }
    }
}

2.6、主题模式 

2.6.1、消息的发布者 

public class Producer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建链接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置主机地址
        connectionFactory.setHost("192.168.200.110");
        //连接端口号
        connectionFactory.setPort(5672);
        //虚拟机主机名称默认 /
        connectionFactory.setVirtualHost("/");
        //连接用户名
        connectionFactory.setUsername("guest");
        //连接用户密码
        connectionFactory.setPassword("123456");

        Connection connection = connectionFactory.newConnection();
        Channel channel= connection.createChannel();
            //String var1,交换机名称
            // BuiltinExchangeType var2, 交换机类型
            // boolean var3, 是否持久化
            // boolean var4, 自动删除
            // boolean var5, 内部使用
            // Map<String, Object> var6 其他参数
            channel.exchangeDeclare("test_topic", BuiltinExchangeType.TOPIC,true,false,false,null);
            //创建队列
            channel.queueDeclare("queue_topic1",true,false,false,null);
            channel.queueDeclare("queue_topic2",true,false,false,null);
            //绑定队列和交换机
            //String var1, 队列名称
            // String var2, 交换机名称
            // String var3 路由键,绑定规则
            channel.queueBind("queue_topic1","test_topic","%.error");
            channel.queueBind("queue_topic1","test_topic","*.*");
            String message = "已成功发送消息";
            //发送消息
            channel.basicPublish("test_topic","info.error",null,message.getBytes());
            //关闭资源
            channel.close();
           connection.close();

        }
}

2.6.2、消息的接收者 

public class Consumer1 {
    public static void main(String[] args) {
        //创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();
        //设置主机地址
        connectionFactory.setHost("192.168.200.110");
        //连接端口号
        connectionFactory.setPort(5672);
        //虚拟机主机名称默认 /
        connectionFactory.setVirtualHost("/");
        //连接用户名
        connectionFactory.setUsername("guest");
        //连接用户密码
        connectionFactory.setPassword("123456");
        Connection connection = null;
        Channel channel = null;
        try {
            //创建连接
            connection = connectionFactory.newConnection();
            //创建连接频道
            channel = connection.createChannel();
            //申明队列
            //String var1, 队列名称
            // boolean var2, 是否持久化队列
            // boolean var3, 是否独占本次连接,独占只能有一个消费者
            // boolean var4, 是否不使用时删除队列
            // Map<String, Object> var5 队列其他参数
            channel.queueDeclare("queue_topic1",true,false,false,null);
            //接收消息
            DefaultConsumer defaultConsumer = new DefaultConsumer(channel){
                @Override
                //String consumerTag,标识
                // Envelope envelope, 获取某些信息
                // AMQP.BasicProperties properties, 配置信息
                // byte[] body 数据
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println("body:" + new String(body));
                }
            };
            //String var1, 队列名称
            // boolean var2, 是否自动确认
            // Consumer var3 回调对象
            //消费者类似监听程序,主要用来监听对象
            channel.basicConsume("queue_topic1",true,defaultConsumer);
        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (TimeoutException e) {
            throw new RuntimeException(e);
        }
    }
}

 

 

 

 

 

 

 

 

 

 

 

 

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

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

相关文章

记一次 .NET某工控视觉自动化系统 卡死分析

一&#xff1a;背景 1. 讲故事 今天分享的dump是训练营里一位学员的&#xff0c;从一个啥也不会到现在分析的有模有样&#xff0c;真的是看他成长起来的&#xff0c;调试技术学会了就是真真实实自己的&#xff0c;话不多说&#xff0c;上windbg说话。 二&#xff1a;WinDbg …

如何从官网下载 mysql 二进制安装包

一.下载二进行包 1. 官网网址: https://www.mysql.com/ 如图所示进入官网 2. 点击 DOWNLOADS ,进入如下图 在该页面找到 MySQL Community (GPL) Downloads 点进去 如上图页面&#xff0c;找到 MySQL Community Server 在点进去 下载 linux 通用版 点击最下面 Compressed …

你真的了解SQL语句的执行过程?

SQL查询语句的执行过程 连接器 连接器会对用户身份和访问权限进行校验。会先连接到数据库上&#xff0c;通过连接器跟客户端建立连接、获取权限、维持和管理连接。在建立连接之后&#xff0c;不会立即执行语句&#xff0c;而是将SQL语句同时传给分析器和缓存。 缓存 如果能在…

系统架构设计师【第14章】: 云原生架构设计理论与实践 (核心总结)

文章目录 14.1 云原生架构产生背景14.2 云原生架构内涵14.2.1 云原生架构定义14.2.2 云原生架构原则14.2.3 主要架构模式14.2.4 典型的云原生架构反模式 14.3 云原生架构相关技术14.3.1 容器技术14.3.2 云原生微服务14.3.3 无服务器技术14.3.4 服务网格 14.4 云原生…

linux动态调试 dev_dbg

动态调试使用方法 打开内核动态调试开关&#xff0c;make menuconfig选中CONFIG_DYNAMIC_DEBUG以及CONFIG_DEBUG_FS Linux启动后&#xff0c;使用命令行挂载上dbgfs 1. mkdir /mnt/dbg 2. mount -t debugfs none /mnt/dbg 1.控制某个文件所有dev_dbg()&#xff0c; echo -n &q…

Django里choices字段使用中文使用

如果想要将下面的表格里的内容数字换成对应的内容&#xff1a; 需要更改成这样&#xff1a; 下面是步骤&#xff1a; 在 python 里的 models.py 文件里&#xff0c;创建数据表的时候&#xff0c;用到了 choices class Example(models.Model):name models.CharField(verbose…

Ceph集群存储案例

Ceph是一种可靠的、可扩展的、统一的、分布式的存储系统。Ceph高度可靠、易于管理且免费。Ceph提供了非凡的可扩展性——数以千计的客户端访问PB到EB的数据。Ceph存储集群相互通信以动态复制和重新分配数据。目前众多云厂商都在使用Ceph&#xff0c;应用广泛。如&#xff1a;华…

SemanticKernel:添加插件

SemanticKernel介绍 Semantic Kernel是一个SDK&#xff0c;它将OpenAI、Azure OpenAI和Hugging Face等大型语言模型&#xff08;LLMs&#xff09;与C#、Python和Java等传统编程语言集成在一起。Semantic Kernel通过允许您定义插件来实现这一点&#xff0c;这些插件可以通过几行…

六、【源码】SQL执行器的定义和实现

源码地址&#xff1a;https://github.com/mybatis/mybatis-3/ 仓库地址&#xff1a;https://gitcode.net/qq_42665745/mybatis/-/tree/06-sql-executor SQL执行器的定义和实现 之前的Sql执行都是耦合在SqlSession里的&#xff0c;现在要对这部分进行解耦和重构&#xff0c;引…

CentOS 环境下 PostgreSQL 在线安装和源码安装详解

1、内容概述 昨天给大家简单的介绍了一下 PostgreSQL,并且在Windows系统上通过图形化界面的方式搭建好了环境&#xff0c;今天我们就来学习一下如何在Linux 系统上搭建 PostgreSQL环境&#xff0c;我会给大家介绍在线安装、离线源码安装以及Docker 安装三种方式。 2、在线安装…

Windows文件管理器导航窗口怎么删除第三方生成的无效导航【笔记】

Windows文件管理器导航窗口怎么删除第三方生成的无效导航【笔记】 导航窗口对应项目没有右击删除选项。 提示&#xff1a; 位置不可用 C:\Users\superman…不可用&#xff0c;如果该位置位于这台电脑上&#xff0c;请确保设备或驱动器连接&#xff0c;或者光盘已插入&#xf…

Elastic 8.14:用于简化分析的 Elasticsearch 查询语言 (ES|QL) 正式发布

作者&#xff1a;来自 Elastic Brian Bergholm 今天&#xff0c;我们很高兴地宣布 Elastic 8.14 正式发布。 什么是新的&#xff1f; 8.14 版本最重要的标题是 ES|QL 的正式发布(GA)&#xff0c;它是从头开始设计和专门构建的&#xff0c;可大大简化数据调查。在新的查询引擎的…

基于SSM+Jsp的高校二手交易平台

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

css 理解了原理,绘制三角形就简单了

1.border-位置 注意&#xff1a;border-bottom/up/right/left 主要是以三角形的结构搭建而成&#xff0c;而border也是如此。而且从边框的外围开始计算像素尺寸。在理解了这一点之后&#xff0c;绘制三角形就简单多了。 1.transparent 注意&#xff1a;该属性主要是颜色透明…

LeetCode-2938. 区分黑球与白球【贪心 双指针 字符串】

LeetCode-2938. 区分黑球与白球【贪心 双指针 字符串】 题目描述&#xff1a;解题思路一&#xff1a;贪心解题思路二&#xff1a;一次遍历统计1的个数&#xff0c;找0后累加左边的1的个数解题思路三&#xff1a; 题目描述&#xff1a; 桌子上有 n 个球&#xff0c;每个球的颜色…

深圳比创达EMC|EMC电磁兼容性行业:技术前沿与市场挑战

在当今高度信息化的社会&#xff0c;电磁兼容性&#xff08;EMC&#xff09;技术已成为各行各业不可或缺的一部分。随着电子设备的日益增多和复杂化&#xff0c;电磁环境日益复杂&#xff0c;电磁兼容性行业面临着前所未有的挑战和机遇。 一、EMC电磁兼容性行业的技术基础 电…

0基础学习区块链技术——分叉

区块链是一种分布式存储技术。一谈到分布式服务&#xff0c;就会提及CAP原则。 CAP原则是以下三个单词的首字母&#xff1a; Consistency&#xff08;一致性&#xff09;&#xff1a;系统在执行某项操作后&#xff0c;仍然处于一致的状态。在分布式系统中&#xff0c;更新操作…

10分钟就会用的3D编辑器,帮你轻松实现Web3D交互自由!

近两年&#xff0c;AIGC技术可谓是在各行各业大放异彩&#xff0c;从AI绘画到AI写作&#xff0c;如今AI建模技术也悄然而至&#xff0c;只要输入文本就能直接AI生成3D模型。 △例&#xff1a;当输入“一个坐在睡莲上的蓝色箭毒蛙”这样的提示词时&#xff0c;对应的3D模型就会生…

多客陪玩系统-开源陪玩系统平台源码-支持游戏线上陪玩家政线下预约等多场景应用支持H5+小程序+APP

多客陪玩系统-开源陪玩系统平台源码-支持游戏线上陪玩家政按摩线下预约等多场景应用支持H5小程序APP 软件架构 前端&#xff1a;Uniapp-vue2.0 后端&#xff1a;Thinkphp6 前后端分离 前端支持&#xff1a; H5小程序双端APP&#xff08;安卓苹果&#xff09; 安装教程 【商业…

线性模型-分类

一、线性判别分析LDA 线性判别分析是一种经典的线性学习方法&#xff0c;在二分类问题上最早是Fisher提出的&#xff0c;亦称为Fisher判别分析。 Fisher判别分析是一种用于降维和分类的统计方法&#xff0c;旨在找到可以最好区分不同类别的特征。它基于类内方差和类间方差的比…