【ActiveMQ】数据持久化(简介、持久化机制、KahaDB、JDBC配置)
🔰 学习视频 🔰
尚硅谷ActiveMQ教程(MQ消息中间件快速入门)
集数:48—57
🔰 学习格言 🔰
练拳不练功,到老一场空;基础不牢,地动山摇。
文章目录
- 一、简介
- 二、持久化机制
- 2.1 AMQ Message Store(了解)
- 2.2 Kaha DB
- 2.3 levelDB(了解)
- 三、JDBC(主要)
- 🔹 步骤1:分析
- 🔹 步骤2:拷贝驱动
- 🔹 步骤3:修改配置文件
- 🔹 步骤4:数据库配置
- 🔹 步骤5:建仓SQL和建表说明
- 💨 activemq_msgs
- 💨 activemq_acks
- 💨 activemq_lock
- 🔹 步骤6:代码运行验证
- 💨 队列生产者
- 💨 队列消费者
- 💨 主题消费者
- 💨 主题生产者
- 🔹 小总结
- 四、JDBC with Journal
- 🔹 修改配置文件
- 🔹 测试
- 五、总结
🔶 恢复ActiveMQ的默认配置文件,方便后续测试
步骤1:删除修改过的配置文件
进入conf目录,删除修改过的配置文件
rm activemq.xml
# 输入y表示确定
步骤2:恢复备份配置
将之前的备份文件改名为activemq.xml
mv activemq.xml.bk activemq.xml
一、简介
官网:https://activemq.apache.org/persistence
MQ的高可用:事务、持久、签收、可持久化。
事务、持久、签收是MQ本身的。可持久化需要借助外力进行物理备份。
为了避免意外宕机以后丢失信息,需要做到重启后可以恢复消息队列,消息系统一般都会采用持久化机制。ActiveMQ的消息持久化机制有JDBC,AMQ, KahaDB和LevelDB,无论使用哪种持久化方式,消息的存储逻辑都是一致的。
就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等再试图将消息发送给接收者,成功则将消息从存储中删除,失败则继续尝试发送。
消息中心启动以后首先要检查指定的存储位置,如果有未发送成功的消息,则需要把消息发送出去。
二、持久化机制
2.1 AMQ Message Store(了解)
AMQ是一种文件存储形式,它具有写入速度快和容易恢复的特点。消息存储在一个个文件中,文件的默认大小为32M,当一个存储文件中的消息已经全部被消费,那么这个文件将被标识为可删除,在下一个清除阶段,这个文件被删除。AMQ适用于ActiveMQ5.3之前的版本。
2.2 Kaha DB
官网说明:https://activemq.apache.org/kahadb
基于日志文件,从ActiveMQ5.4开始默认的持久化插件。
🔶 查看
打开配置文件activemq.xml
查看。
进入/activeMQ/apache-activemq-5.15.15/data
目录,可以查看到
KahaDB是目前默认的存储方式,可用于任何场景提高了性能和恢复能力。消息存储使用一个事务日志(正文)和仅仅用一个索引文件(目录)来存储它所有的地址。KahaDB是一个专门针对消息持久化的解决方案,它对典型的消息使用模式进行了优化。数据被追加到data logs中。当不再需要log文件中的数据的时候,log文件会被丢弃。
🔶 存储机制
kahadb在消息保存目录中只有4类文件和一个lock,跟ActiveMQ的其他几种文件存储引擎相比这就非常简洁了。
组成 = 4个文件 + 一把锁
文件1:db-<Number>.log
KahaDB存储消息到预定义大小的数据记录文件中,文件命名为db-<Number> .log
。 当数据文件已满时,一个新的文件会随之创建,number数值也会随之递增,它随着消息数量的增多,如每32M一个文件,文件名按照数字进行编号,如db-1.log
、db-2.log
、 db-3.log
。当不再有引用到数据文件中的任何消息时,文件会被删除或归档。
文件2:db.data
该文件包含了持久化的BTree索引,索引了消息数据记录中的消息,它是消息的索引文件,本质上是B-Tree (B树),使用B-Tree作为索引指向db-<Number>.log
里面存储的消息。
文件3:db.free
当前db.data
文件里哪些页面是空闲的,文件具体内容是所有空闲页的ID.
文件4:db.redo
db.redo
用来进行消息恢复,如果KahaDB消息存储在强制退出后启动,用于恢复BTree索引。
文件5:lock
文件锁,表示当前获得kahadb读写权限的broker
2.3 levelDB(了解)
这种文件系统是从ActiveMQ5.8之后引进的,它和KahaDB非常相似,也是基于文件的本地数据库储存形式,但是它提供比KahaDB更快的持久性。
但它不使用自定义B-Tree实现来索引预写日志,而是使用基于LevelDB的索引。
默认配置如下:
<persistenceAdapter><levelDB directory="activemq-data"/>
</persistenceAdapter>
三、JDBC(主要)
🔹 步骤1:分析
🔹 步骤2:拷贝驱动
拷贝MySQL驱动Jar包到activemq的lib
目录下。
授权lib目录拷贝权限。
chmod 777 /activeMQ/apache-activemq-5.15.15/lib
🔹 步骤3:修改配置文件
将activemq.xml
配置文件的81-83行进行修改。
修改前:
<persistenceAdapter><kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
修改后:
<persistenceAdapter><jdbcPersistenceAdapter dataSource="#mysql-ds"/>
</persistenceAdapter>
dataSource指定将要引用的持久化数据库的bean名称,createTablesOnStartup是否在启动的时候创建数据表,默认值是true,这样每次启动都会去创建数据表了,一般是第一次启动的时候设置为true之后改成false。
🔹 步骤4:数据库配置
添加数据库配置到配置文件,通常情况,MQ服务器和数据库服务器是分开的 ,所以这里将MySQL数据库创建在Windows系统上。
官网复制的配置如下:
在<broker>
的标签外面,在<import resource="jetty.xml"/>
之前。
<broker>...
</broker><!-- MySql DataSource Sample Setup -->
<bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/> <property name="username" value="activemq"/> <property name="password" value="activemq"/> <property name="poolPreparedStatements" value="true"/>
</bean><import resource="jetty.xml"/>
根据自己的数据库进行配置。
<!-- MySql DataSource Sample Setup -->
<bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://192.168.56.1:3306/activemq?relaxAutoCommit=true&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false"/> <property name="username" value="root"/> <property name="password" value="123456"/> <property name="poolPreparedStatements" value="true"/>
</bean>
为了防止报错,url后面增加了这么多配置。
jdbc:mysql://192.168.56.1:3306/activemq?relaxAutoCommit=true&serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
特别注意:需要开启Windows本地数据库的远程访问:https://blog.csdn.net/ethan__xu/article/details/89320614,否则在步骤5时将启动失败。
注意:如果要使用druid数据库连接池,需要在步骤2引入druid的jar包。
🔹 步骤5:建仓SQL和建表说明
建立一个名为activemq
的数据库
CREATE DATABASE activemq;
重新启动activemq,可以查看到数据库中出现三张表格。
我在运行时出现错误没法启动,看到这个评论后进行了修改,终于启动成功了~
💨 activemq_msgs
ACTIVEMQ_ ACKS表存储持久订阅的信息和最后一个持久订阅接收的消息ID。
- ID:自增的数据库主键
- CONTAINER:消息的Destination
- MSGID_PROD:消息发送者的主键
- MSG_SEQ:是发送消息的顺序,MSGID_PROD+MSG_ SEQ可以组成JMS的MessagelD
- EXPIRATION:消息的过期时间,存储的是从1970-01-01到现在的毫秒数
- MSG:消息本体的Java序列化对象的二进制数据
- PRIORITY:优先级,从0-9, 数值越大优先级越高
💨 activemq_acks
ACTIVEMQ_ ACKS表用于存储订阅关系,存储持久订阅的信息和最后一个持久订阅接收的消息ID。如果是持久化Topic,订阅者和服务器的订阅关系在这个表保存。数据库字段如下:
- CONTAINER:消息的Destination
- SUB_DEST:如果是使用Static集群,这个字段会有集群其他系统的信息
- CLIENT_ID:每个订阅者都必须有一个唯.-的客户端ID用以区分
- SUB_NAME:订阅者名称
- SELECTOR:选择器,可以选择只消费满足条件的消息。条件可以用自定义属性实现,可支持多属性AND和OR操作。
- LAST_ACKED_ID:记录消费过的消息的ID。
💨 activemq_lock
ACTIVEMQ_LOCK表在集群环境中才有用,只有一个Broker可以获得消息,称为Master Broker,其他的只能作为备份等待Master Broker不可用,才可能成为下一个Master Broker。这个表用于记录哪个Broker是当前的Master Broker。
🔹 步骤6:代码运行验证
注意,要开启持久化
messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);
💨 队列生产者
import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;public class JmsProduce {public static final String ACTIVEMQ_URL = "tcp://192.168.150.101:61616";public static final String QUEUE_NAME = "jdbc01";public static void main(String[] args) throws JMSException {// 1 创建连接工厂,按照给定的url地址,采用默认的用户名和密码ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);// 2 通过连接工厂,获得连接connection并启动访问Connection connection = activeMQConnectionFactory.createConnection();connection.start();// 3 创建会话session// 参数1:事务// 参数2:签收Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 4 创建目的地(队列还是主题,这里选择队列)Queue queue = session.createQueue(QUEUE_NAME);// 5 创建消息的生产者MessageProducer messageProducer = session.createProducer(queue);messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);// 6 通过使用messageProducer生产3条消息发送到MQ队列中for (int i = 0; i < 3; i++) {// 7 创建消息 按照要求写好的消息TextMessage textMessage = session.createTextMessage("jdbc msg----" + i);//一个字符串// 8 通过messageProducer发给mqmessageProducer.send(textMessage);}// 9 关闭资源messageProducer.close();session.close();connection.close();System.out.println("---------消息发布到MQ完成--------");}
}
MQ服务器控制台:
mysql数据库ACTIVEMQ_MSGS表:
💨 队列消费者
import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;
import java.io.IOException;public class JmsConsumer {public static final String ACTIVEMQ_URL = "tcp://192.168.150.101:61616";public static final String QUEUE_NAME = "jdbc01";public static void main(String[] args) throws JMSException, IOException {// 1 创建连接工厂,按照给定的url地址,采用默认的用户名和密码ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);// 2 通过连接工厂,获得连接connection并启动访问Connection connection = activeMQConnectionFactory.createConnection();connection.start();// 3 创建会话session// 参数1:事务// 参数2:签收Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);// 4 创建目的地(队列还是主题,这里选择队列)Queue queue = session.createQueue(QUEUE_NAME);// 5 创建消息的消费者MessageConsumer messageConsumer = session.createConsumer(queue);// 6 处理消息/*方式1:同步阻塞方式(receive())订阅者或接收者调用MessageConsumer的receive()方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直堵塞。receive(xxxx),如果添加参数表示等待一定时间,超过时间将关闭。*/// while (true) {
// TextMessage textMessage = (TextMessage) messageConsumer.receive();
// if (textMessage!=null) {
// System.out.println("-------消费者接收到消息: " + textMessage.getText());
// } else {
// break;
// }
// }/*方式2: 异步非阻塞方式(监听器onMessage())订阅者或接收者通过MessageConsumer的setMessageListener(MessageListener listener)注册一个消息监听器,当消息到达后,系统自动调用监听器MessageListener的onMessage(Message message)方法。*/messageConsumer.setMessageListener(new MessageListener() {@Overridepublic void onMessage(Message message) {if (message != null && message instanceof TextMessage) {TextMessage textMessage = (TextMessage) message;try {System.out.println("-------消费者接收到消息: " + textMessage.getText());} catch (JMSException e) {e.printStackTrace();}}}});System.in.read(); // 保证控制台不灭,消费者启动之后将一直等待。如果关闭的话,消费者启动后还没监听到就立刻关闭了。// 7 资源关闭messageConsumer.close();session.close();connection.close();}
}
MQ服务器控制台:
mysql数据库ACTIVEMQ_MSGS表,消息被消费后,数据清空:
在点对点类型中:
当DeliveryMode
设置为NON_PERSISTENCE
时,消息被保存在内存中,不会保存在数据库中;
当DeliveryMode
设置为PERSISTENCE
时,消息保存在broker的相应的文件或者数据库中。
而且点对点类型中消息一旦被Consumer消费就从broker中删除。
💨 主题消费者
先启动消费者
import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;
import java.io.IOException;public class JmsConsumerTopicPersist {public static final String ACTIVEMQ_URL = "tcp://192.168.150.101:61616";public static final String TOPIC_NAME = "Topic-jdbc";public static void main(String[] args) throws JMSException, IOException {System.out.println("customer z3");ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);Connection connection = activeMQConnectionFactory.createConnection();connection.setClientID("z3");connection.start();Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);Topic topic = session.createTopic(TOPIC_NAME);TopicSubscriber topicSubscriber = session.createDurableSubscriber(topic, "mq-jdbc");connection.start();Message message = topicSubscriber.receive();while (message != null) {TextMessage textMessage = (TextMessage) message;System.out.println("------收到的持久Topic:" + textMessage.getText());message = topicSubscriber.receive(1000L);}session.close();connection.close();}
}
MQ服务器控制台:
查看数据库activemq_acks:
💨 主题生产者
import org.apache.activemq.ActiveMQConnectionFactory;import javax.jms.*;public class JmsProduceTopicPersist {public static final String ACTIVEMQ_URL = "tcp://192.168.150.101:61616";public static final String TOPIC_NAME = "Topic-jdbc";public static void main(String[] args) throws JMSException {ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);Connection connection = activeMQConnectionFactory.createConnection();Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);Topic topic = session.createTopic(TOPIC_NAME);MessageProducer messageProducer = session.createProducer(topic);messageProducer.setDeliveryMode(DeliveryMode.PERSISTENT);connection.start();for (int i = 0; i < 3; i++) {TextMessage textMessage = session.createTextMessage("TOPIC_NAME----" + i); //一个字符串messageProducer.send(textMessage);}// 9 关闭资源messageProducer.close();session.close();connection.close();System.out.println("---------消息发布到MQ完成--------");}
}
MQ服务器控制台,有3条消息,并且都已经被处理了。
处理完消息后,消费者程序结束,离线了。
查看数据库activemq_acks:
🔹 小总结
queue:在没有消费者消费的情况下会将消息保存到activemq_msgs表中,只要有任意一一个消费者已经消费过了,消费之后这些消息将会立即被删除。
topic:一般是先启动消费订阅然后再生产的情况下会将订阅者保存到activemq_acks。
四、JDBC with Journal
这种方式克服了JQBC Store的不足,JDBC每次消息过来,都需要去写库和读库。
ActiveMQ Journal, 使用高速缓存写入技术,大大提高了性能。
当消费者的消费速度能够及时跟上生产者消息的生产速度时,journal文件能够大大减少需要写入到DB中的消息。
举个例子,生产者生产了1000条消息,这1000条消息会保存到journal文件, 如果消费者的消费速度很快的情况下,在journal文件还没有同步到DB之前,消费者已经消费了90%的以上的消息,那么这个时候只需要同步剩余的10%的消息到DB。如果消费者的消费速度很慢,这个时候journal文件可以使消息以批量方式写到DB。
🔹 修改配置文件
注释掉原来的:
<persistenceAdapter><jdbcPersistenceAdapter dataSource="#mysql-ds"/>
</persistenceAdapter>
换成:
<persistenceFactory><journalPersistenceAdapterFactory journalLogFiles="4"journalLogFileSize="32768"useJournal="true"useQuickJournal="true"dataSource="#mysql-ds"dataDirectory="activemq-data"/>
</persistenceFactory>
重启activemq
🔹 测试
首先启动上一章节的队列生产者
,可以在MQ控制台查看到新增3条消息,但是在mysql数据库的activemq_msgs表格内没有任何数据。此时,启动队列消费者
,刚刚新增的3条消息竟被处理,数据库同样没有任何变化。
五、总结
🔹 持久化消息主要指
MQ所在的服务器down了,消息不会丢失的机制。
🔹 持久化机制演化过程
从最初的AMQ Message Store 方案到ActiveMQ V4版本中推出的High performance journal (高性能事务支持)附件,并且同步推出了关于关系型数据库的存储方案。ActiveMQ 5.3版本中又推出了对KahaDB的支持(V5 4版本后称为ActiveMQ默认的持久化方案),后来ActiveMQ V5.8版本开始支持LevelDB,到现在,V5.9+版本提供了标准的Zookeeper+LevelDB集群化方案。我们重点介绍了KahaDB、LevelDB 和mysq|数据库这三种持久化存储方案。
🔹 ActiveMQ的消息持久化机制
- AMQ:基于日志文件
- KahaDB:基于日志文件,从ActiveMQ 5.4开始默认的持久化插件
- JDBC:基于第3方数据库
- LevelDB:基于文件的本地数据库储存,从ActiveMQ 5.8版本之后又推出了LeveIDB的持久化引擎性能高于KahaDB
- Replicated LevelDB Store:从ActiveMQ 5.9提供了基于LevelDB和Zookeeper的数据复制方式,用于Master-slave方式的首选数据复制方案。
🔹 消息的存储逻辑一致
就是在发送者将消息发送出去后,消息中心首先将消息存储到本地数据文件、内存数据库或者远程数据库等,然后试图将消息发送给接收者,发送成功则将消息从存储中删除失败则继续尝试。消息中心启动以后首先要检查指定的存储位置,如果有未发送成功的消息,则需要把消息发送出去。
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 在u-boot里面加入Android lk bootloader的一键烧写功能(1)
主要任务:在u-boot里面加入Android lk bootloader的一键烧写功能。 硬件平台:SEP6200测试板 unicore架构 /256M RAM/4G NandFlash我们知道要在特定的平台上安装Android系统需要烧写的几个镜像文件,首先是bootloader,然后linux内核的kernel文件,ramdisk文件,文件系统syste…...
2024/4/15 6:11:47 - 水仙花数(因为找不到答案所以我自己写了一个)
原因:CSDN上水仙花数和学校OJ题目一样,但是复制粘贴总是wrong,原因是它要求输出数据结尾没有空格,输出后还要换行,简直八股文…… 题目如下: Description 春天是鲜花的季节,水仙花就是其中最迷…...
2024/4/15 6:12:47 - 7-10 最长公共子序列 (10 分)
7-10 最长公共子序列 (10 分) 一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列X<x1,x2,…,xm>,则另一序列Z=<z1,z2,…,zk>是X的子序列是指存在一个严格递增的…...
2024/4/23 5:29:56 - SpringCloud学习第一天 尚硅谷版本
SpringCloud 学习 杂项知识父工程开发步骤模块编写步骤业务类编写dependencyManagement知识跳过测试(提高开发效率)热部署1.创建父项目1.1 修改packaging 直接在version标签下添加1.2 导入基本的父类文件 最后效果如下:2.创建子项目cloud8001…...
2024/4/7 0:25:49 - procdump实现技术分析
文章目录procdump分析1. Event2. Handle3. 进程名4. 进程枚举5. 进程状态获取6. 监控线程procdump分析 ProcDump是一款进程内存dump工具,可以针对内存,CPU,文件描述符等进行监控,使用命令如下: # ./procdump -hProcD…...
2024/4/19 14:21:53 - IOS内存泄漏动静态排查
文章目录简单观察内存静态分析概念可排查到的问题具体的操作部分问题及解决动态分析概念具体的操作数据分析statisticsallocations listgenerationscall trees问题排查定位总结hi,大家在实际开发中,有没有遇到app异常崩溃,界面delloc方法不调…...
2024/4/22 11:55:23 - Android中Activity启动Service回传的时间
任务:Activity启动一个Service,Service里定时器获得当前时间,然后回传给Activity,Activity在TextView上展示回传的时间 创建一个Service类 package com.example.exam3;import android.app.Service; import android.content.Inte…...
2024/4/20 1:16:58 - 内存的基础知识
...
2024/4/23 10:21:06 - 反射——根据结构体创建insert语句
func CreateInsert(q interface{}) string {if reflect.ValueOf(q).Kind() ! reflect.Struct { //若传入变量的类型非结构体类型return ""}// 获取结构体名称tableName : reflect.TypeOf(q).Name()values : "values("v : reflect.ValueOf(q) //获取q的值f…...
2024/4/18 0:48:53 - mybatis 利用查询的列填充插入的部分列
insert into table1 (column1,column2,column3,column4,column5) select #{para1},column2,column3,column4,#{para5} from table1 where id#{oldId,jdbcTypeVARCHAR}...
2024/4/19 14:51:19 - 沈师PTA--JAVA程序设计-第3章习题集(2)--函数题答案版 2021-11-03
R6-1 数组工具类的设计 (10 分) 本题要求设计一个名为MyArrays的类,根据调用的方式实现相应的方法。 函数接口定义: 请同学根据该类的调用方式和结果,自行设计MyArrays类中的方法,满足应用的需要。 裁判测试程序样例࿱…...
2024/4/19 22:15:50 - 接雨水(JAVA)
给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。 示例 1: 输入: heightMap [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]] 输出: 4 解释: 下雨后,雨水将会被上…...
2024/4/17 20:43:48 - 6-3 另类堆栈 (15 分)
在栈的顺序存储实现中,另有一种方法是将Top定义为栈顶的上一个位置。请编写程序实现这种定义下堆栈的入栈、出栈操作。如何判断堆栈为空或者满? 函数接口定义: bool Push( Stack S, ElementType X ); ElementType Pop( Stack S ); 其中Stack…...
2024/4/19 9:56:17 - 教你快速将多个TXT文档合并成一个
方法一:有文档1.txt、2.txt、3.txt,在demo目录下(目录必须是英文)进入该目录,按住shift,点击鼠标右键,选择“在此处打开命令行窗口”输入代码:type *.txt>res然后把res文件的后缀添加上.txt。完成方法二:一行代码合并文档有文档1.txt、2.txt、3.txt新建一个文档:合…...
2024/4/18 14:03:32 - 8.Socket实现客户端和服务器相互通信
服务器端代码: package InternetCode.Socket.Exa507; import java.io.*; import java.net.*; import java.util.Scanner;public class ServerSocketFrame{private PrintWriter writer; // 声明PrintWriter类对象private BufferedReader reader; // 声明BufferedRea…...
2024/4/19 22:04:31 - 禁止显示状态错误 C4700 使用了未初始化的局部变量“c”
以上错误是说我没有对c这个变量赋值; #include<iostream> #include<cmath>using namespace std;double max(double x, double y);int main(){double a, b, c;cout << "input two numbers:\n";cin >> a >> b;c max(a, b);…...
2024/4/20 18:41:16 - LeetCode138 复制带随机指针的链表 剑指Offer 35 复杂链表的复制
LeetCode138 复制带随机指针的链表 & 剑指Offer 35 复杂链表的复制题目解题解题一:回溯 哈希表解题二:迭代 节点拆分题目 解题 解题一:回溯 哈希表 注意计入哈希表的操作一定要在寻找 next 和 random 指向的节点之前,否则…...
2024/4/18 18:18:24 - 说说修饰成员变量的修饰符有哪些?
1、权限修饰符:private、默认(什么都不写)、protected、public。 2、static:被static修饰的成员变量被该类所有对象共享。 3、final:final修饰的基本数据类型的变量可以看作是常量,赋值后不可改变;final修饰的引用数据类型变量的引用内存地址不能改变。…...
2024/4/15 6:12:52 - RTOS之事件标志与线程标志
事件标志发布到全局,多个线程可以接收,线程标志发布到指定线程,指定线程接收。...
2024/4/18 6:24:46 - Eclipse中安装svn插件
Eclipse中安装svn插件: 马克- to-win:马克 java社区:防盗版实名手机尾号: 73203 马克-to-win: 由于我的eclipse是写书时最新版本,eclipse4.7版本,所以我可以用Eclipse Marketplace来安装。具体操…...
2024/4/7 0:25:37
最新文章
- Linux学习(函数)
函数 A开头 atoi()函数 atoi 函数是 C 标准库 <stdlib.h> 中的一个函数,用于将字符串转换为整数(int)类型。它的原型如下: int atoi(const char *str); 其中: str 是要转换的字符串,必须以数字…...
2024/4/23 14:37:04 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - Docker实战教程 第1章 Linux快速入门
2-1 Linux介绍 为什么要学Linux 三个不得不学习 课程需要:Docker开发最好在Linux环境下。 开发需要:作为一个后端程序员,是必须要掌握Linux的,这是找工作的基础门槛。 运维需要:在服务器端,主流的大型服…...
2024/4/23 6:25:54 - 54.螺旋矩阵
题目描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5] 示例 2:输入:matrix …...
2024/4/23 6:25:34 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/22 17:02:52 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/23 13:30:22 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/23 13:28:06 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/20 23:26:47 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/23 13:27:44 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/19 11:57:53 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/23 13:29:53 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/23 13:27:22 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/23 13:28:42 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/21 20:01:37 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/23 13:29:23 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/23 13:27:46 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/23 13:47:22 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/19 11:59:23 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/19 11:59:44 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/23 13:28:08 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/23 13:29:47 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/23 13:28:14 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/23 13:27:51 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/23 13:27:19 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57