Spring框架学习第三天
转账案例基础
转账基础功能
public interface AccountDao {//转出void outUser(String outUser, Double money);//转入void inUser(String inUser, Double money);
}
@Repository
public class AccountDaoImpl implements AccountDao {//依赖queryRunner@Autowiredprivate QueryRunner queryRunner;@Overridepublic void outUser(String outUser, Double money) {String sql = "update account set money=money - ? where name = ?";//执行sqltry {queryRunner.update(sql, money, outUser);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic void inUser(String inUser, Double money) {try {// 1.编写sqlString sql = "update account set money = money + ? where name = ?";// 2.执行sqlqueryRunner.update(sql, money, inUser);} catch (SQLException e) {e.printStackTrace();}}
}
public interface AccountService {//转账void transfer(String outUser, String inUser, Double money);}
@Service
public class AccountServiceImpl implements AccountService {//依赖注入accountDao@Autowiredprivate AccountDao accountDao;@Overridepublic void transfer(String outUser, String inUser, Double money) {//业务代码//转出accountDao.outUser(outUser, money);//转入accountDao.inUser(inUser, money);
@RunWith(SpringRunner.class)
@ContextConfiguration({"classpath:applicationContext.xml"})
public class AccountTest {@Autowiredprivate AccountService accountService;//测试转账案例@Testpublic void test01() throws Exception {accountService.transfer("tom", "jerry", 100d);}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!--开启组件扫描--><context:component-scan base-package="cn.itcast"></context:component-scan><!--加载第三方配置文件--><context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder><!--druid连接交给ioc容器--><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property></bean><!--queryRunner交给ioc容器--><bean id="queryRunner" class="org.apache.commons.dbutils.QueryRunner"><constructor-arg name="ds" ref="dataSource"></constructor-arg></bean></beans>
事务控制
上述方法存在问题的解决方案:
将service方法的多个dao层代码,看做一个事务,要么都成功,要么都失败!!!!
修改AccountService
@Service
public class AccountServiceImpl implements AccountService {//依赖注入accountDao@Autowiredprivate AccountDao accountDao;//依赖dataSource@Autowiredprivate DataSource dataSource;@Overridepublic void transfer(String outUser, String inUser, Double money) {Connection connection = null;//获取conn手动控制事务try {connection = dataSource.getConnection();connection.setAutoCommit(false);//业务代码//转出accountDao.outUser(connection,outUser, money);//机器故障int i = 1 / 0;//转入accountDao.inUser(connection,inUser, money);//提交事务connection.commit();} catch (Exception e) {e.printStackTrace();try {//进行事务回滚connection.rollback();} catch (SQLException e1) {e1.printStackTrace();}} finally {// 释放资源try {// 再改为自动提交connection.setAutoCommit(true);connection.close();} catch (SQLException e) {e.printStackTrace();}}}
}
修改AccountDao
@Repository
public class AccountDaoImpl implements AccountDao {//依赖queryRunner@Autowiredprivate QueryRunner queryRunner;@Overridepublic void outUser(Connection connection, String outUser, Double money) {try {String sql = "update account set money=money - ? where name = ?";//执行sql(使用service连接对象)queryRunner.update(connection, sql, money, outUser);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic void inUser(Connection connection,String inUser, Double money) {try {// 1.编写sqlString sql = "update account set money = money + ? where name = ?";// 2.执行sql(使用service连接对象)queryRunner.update(connection,sql, money, inUser);} catch (SQLException e) {e.printStackTrace();}}}
问题:我们不应该将service的conn对象传递到dao层,这种方式,就产生了dao层与service的耦合性问题
ThreadLocal
ThreadLocal是一个线程的局部变量
@Component//交给ioc容器
public class ConnectionUtils {@Autowiredprivate DataSource dataSource;//储物柜,线程隔离private static final ThreadLocal<Connection> tl = new ThreadLocal<Connection>();//从当前线程内绑定并获取conn对象public Connection getThreadConnection() {Connection connection = tl.get();if (connection == null) {try {connection = dataSource.getConnection();tl.set(connection);} catch (SQLException e) {e.printStackTrace();}}return connection;}//移出当前线程的conn对象public void removeThreadConnection() {tl.remove();}}
@Service
public class AccountServiceImpl implements AccountService {//依赖注入accountDao@Autowiredprivate AccountDao accountDao;////依赖dataSource//@Autowired//private DataSource dataSource;@Autowiredprivate ConnectionUtils connectionUtils;@Overridepublic void transfer(String outUser, String inUser, Double money) {Connection connection = null;//获取conn手动控制事务try {//connection = dataSource.getConnection();connection = connectionUtils.getThreadConnection();connection.setAutoCommit(false);//业务代码//转出accountDao.outUser(outUser, money);//机器故障int i = 1 / 0;//转入accountDao.inUser(inUser, money);//提交事务connection.commit();} catch (Exception e) {e.printStackTrace();try {//进行事务回滚connection.rollback();} catch (SQLException e1) {e1.printStackTrace();}} finally {// 释放资源try {// 再改为自动提交connection.setAutoCommit(true);connection.close();} catch (SQLException e) {e.printStackTrace();}}}
}
@Repository
public class AccountDaoImpl implements AccountDao {//依赖queryRunner@Autowiredprivate QueryRunner queryRunner;@Autowiredprivate ConnectionUtils connectionUtils;@Overridepublic void outUser(String outUser, Double money) {try {String sql = "update account set money=money - ? where name = ?";//获取当前线程内的connfinal Connection threadConnection = connectionUtils.getThreadConnection();//执行sql(使用service连接对象)queryRunner.update(threadConnection, sql, money, outUser);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic void inUser( String inUser, Double money) {try {// 1.编写sqlString sql = "update account set money = money + ? where name = ?";// 获取当前线程内的 connConnection threadConnection = connectionUtils.getThreadConnection();// 2.执行sql(使用service连接对象)queryRunner.update(threadConnection, sql, money, inUser);} catch (SQLException e) {e.printStackTrace();}}
}
问题:在企业开发时,我们基础每一个业务层方法都需要进行事务的控制,这部分代码属于公共业务且重复的,出现了大量的代码冗余
事务管理器(TransactionManager)
这时候我们可以把这部分代码抽取到工具类(事务管理器)
@Component
public class TransactionManager {@Autowiredprivate ConnectionUtils connectionUtils;//开启事务// 1.开启事务public void beginTransaction() {try {connectionUtils.getThreadConnection().setAutoCommit(false);} catch (SQLException e) {e.printStackTrace();}}//提交事务public void commit() {try {connectionUtils.getThreadConnection().commit();} catch (SQLException e) {e.printStackTrace();}}//回滚事务public void rollback() {try {connectionUtils.getThreadConnection().rollback();} catch (SQLException e) {e.printStackTrace();}}//释放资源public void release() {try {//回复自动提交事务connectionUtils.getThreadConnection().setAutoCommit(true);//归还到连接池connectionUtils.getThreadConnection().close();//将connection对象从当前线程移出connectionUtils.removeThreadConnection();} catch (SQLException e) {e.printStackTrace();}}
}
@Service
public class AccountServiceImpl implements AccountService {//依赖注入accountDao@Autowiredprivate AccountDao accountDao;////依赖dataSource//@Autowired//private DataSource dataSource;//@Autowired//private ConnectionUtils connectionUtils;@Autowiredprivate TransactionManager transactionManager;@Overridepublic void transfer(String outUser, String inUser, Double money) {// Connection connection = null;//获取conn手动控制事务try {//connection = dataSource.getConnection();//connection = connectionUtils.getThreadConnection();//connection.setAutoCommit(false);//开启事务transactionManager.beginTransaction();//业务代码//转出accountDao.outUser(outUser, money);//机器故障int i = 1 / 0;//转入accountDao.inUser(inUser, money);//提交事务//connection.commit();transactionManager.commit();} catch (Exception e) {e.printStackTrace();try {//进行事务回滚//connection.rollback();transactionManager.rollback();} finally {transactionManager.release();}// 释放资源//try {// // 再改为自动提交// connection.setAutoCommit(true);//// connection.close();//} catch (SQLException e) {// e.printStackTrace();//}}}
}
@Repository
public class AccountDaoImpl implements AccountDao {//依赖queryRunner@Autowiredprivate QueryRunner queryRunner;@Autowiredprivate ConnectionUtils connectionUtils;@Overridepublic void outUser(String outUser, Double money) {try {String sql = "update account set money=money - ? where name = ?";//获取当前线程内的connfinal Connection threadConnection = connectionUtils.getThreadConnection();//执行sql(使用service连接对象)queryRunner.update(threadConnection, sql, money, outUser);} catch (SQLException e) {e.printStackTrace();}}@Overridepublic void inUser( String inUser, Double money) {try {// 1.编写sqlString sql = "update account set money = money + ? where name = ?";// 获取当前线程内的 connConnection threadConnection = connectionUtils.getThreadConnection();// 2.执行sql(使用service连接对象)queryRunner.update(threadConnection, sql, money, inUser);} catch (SQLException e) {e.printStackTrace();}}
}
问题:几乎所有的方法都需要使用事务管理器,进行事务控制,且事务管理器属于通用业务,与我们核心业务代码产生耦合
转账案例进阶
我们可以将业务代码和事务代码进行拆分,通过动态代理的方式,对业务方法进行事务的增强。这样就不会对业务层产生影响,解决了耦合性的问题啦!
常用的动态代理技术
JDK 代理 : 基于接口的动态代理技术
CGLIB代理:基于父类的动态代理技术
在企业进行开发时,只有核心业务成代码,不会出现事务相关代码,开发者只需要编写核心业务即可
public void transfer(String outUser, String inUser, Double money) {// 业务代码-------- start// 转出accountDao.outUser(outUser, money);// 模拟故障int i = 1/0;// 转入accountDao.inUser(inUser, money);// 业务代码-------- end
}
JDK动态代理
目标对象:AccountService
编写JdkProxyFactory
//基于JDK,实现对目标对象的事务增强
@Component
public class JdkProxyFactory {@Autowiredprivate TransactionManager transactionManager;public Object createJdkProxyTx(final Object target) {Object proxy = null;//使用SUN公司提供的jdk代理工具类//目标对象类加载器final ClassLoader classLoader = target.getClass().getClassLoader();//目标对象接口数组final Class<?>[] interfaces = target.getClass().getInterfaces();//实现增强的业务逻辑(匿名内部类、Lambda)proxy = Proxy.newProxyInstance(classLoader, interfaces, new InvocationHandler() {//invoke方法是代理对象的入口//proxy:jdk工具类生成的代理对象//method:当前用户执行的某个具体方法//args:当前用户执行的某个具体方法传递的实际参数列表@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object result = null;try {//开启事务transactionManager.beginTransaction();//执行目标对象原有的功能result = method.invoke(target, args);//提交事务transactionManager.commit();} catch (Exception e) {e.printStackTrace();//回滚事务transactionManager.rollback();} finally { //释放资源transactionManager.release();}return result;}});//返回代理对象(增强后的)return proxy;}
}
@RunWith(SpringRunner.class)
@ContextConfiguration({"classpath:applicationContext.xml"})
public class AccountTest {@Autowiredprivate AccountService accountService;//目标对象@Autowiredprivate JdkProxyFactory jdkProxyFactory;// jdk生产代理对象工厂//测试转账案例@Testpublic void test01() throws Exception {accountService.transfer("tom", "jerry", 100d);}@Testpublic void test02() throws Exception {//accountService.transfer("tom", "jerry", 100d);//使用jdk对目标对象进行事务增强final AccountService jdkProxyTx = (AccountService) jdkProxyFactory.createJdkProxyTx(accountService);jdkProxyTx.transfer("tom", "jerry", 100d);}
}
CGLIB动态代理
存在问题:进入公司,可能有些代码没有接口,但又需要动态代理进行增强,这时候sun公司提供jdk工具就无法实现了…
基于CGLIB技术,就可以对普通的java类型实现代理增强,需要导入jar包(Spring框架内置包含了此架包)
目标对象:AccountService
编写CglibProxyFactory
//基于JDK,实现对目标对象的事务增强
@Component
public class JdkProxyFactory {@Autowiredprivate TransactionManager transactionManager;public Object createJdkProxyTx(final Object target) {Object proxy = null;//使用SUN公司提供的jdk代理工具类//目标对象类加载器final ClassLoader classLoader = target.getClass().getClassLoader();//目标对象接口数组final Class<?>[] interfaces = target.getClass().getInterfaces();//实现增强的业务逻辑(匿名内部类、Lambda)proxy = Proxy.newProxyInstance(classLoader, interfaces, new InvocationHandler() {//invoke方法是代理对象的入口//proxy:jdk工具类生成的代理对象//method:当前用户执行的某个具体方法//args:当前用户执行的某个具体方法传递的实际参数列表@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Object result = null;try {//开启事务transactionManager.beginTransaction();//执行目标对象原有的功能result = method.invoke(target, args);//提交事务transactionManager.commit();} catch (Exception e) {e.printStackTrace();//回滚事务transactionManager.rollback();} finally { //释放资源transactionManager.release();}return result;}});//返回代理对象(增强后的)return proxy;}
}
@Testpublic void test02() throws Exception {//accountService.transfer("tom", "jerry", 100d);//使用jdk对目标对象进行事务增强//final AccountService jdkProxyTx = (AccountService) jdkProxyFactory.createJdkProxyTx(accountService);//jdkProxyTx.transfer("tom", "jerry", 100d);// 使用cglib对目标对象事务增强AccountService cglibProxy = (AccountService) cglibProxyFactory.createCglibProxyTx(accountService);cglibProxy.transfer("tom", "jerry", 100d);}
}
SpringAOP简介
概述
AOP( 面向切面编程 )是一种思想, 它的目的就是在不修改源代码的基础上,对原有功能进行增强。
Spring AOP是对AOP思想的一种实现, Spring底层同时支持jdk和cglib动态代理。
这样做的好处是:
- 在程序运行期间,在不修改源码的情况下对方法进行功能增强
- 逻辑清晰,开发核心业务的时候,不必关注增强业务的代码
- 减少重复代码,提高开发效率,便于后期维护
Spring会根据被代理的类是否有接口自动选择代理方式:
- 如果有接口,就采用jdk动态代理( 当然,也可以强制使用cglib )
- 没有接口就采用cglib的方式
相关术语
-
Target:目标对象
service层的核心业务(AccountServiceImpl) -
JoinPoint:连接点
目标对象中的所有方法
transfer()
findAll() -
Pointcut:切点
目标对象需要增强的方法
transfer() -
Advice:通知(增强)
实现增强的功能的(TransactionManager)
beginTransaction()
commit()
rollback()
release() -
Weaving:织入
将通知和切点进行织入(动作) -
Aspect:切面(spring术语)
通知 + 切点 = 切面 -
Proxy:代理对象(底层实现)
通知 + 切点 = 代理对象
基于XML的AOP开发
快速入门
创建maven的java模块,导入坐标
编写目标类
public interface AccountService {void transfer();void save();
}
编写通知类(增强)
//通知类(增强)
public class MyAdvice {//在对目标对象方法执行之前进行增强public void before(){System.out.println("前置通知");}
}
配置Spring的AOP(切点+通知)
测试
@RunWith(SpringRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class AccountTest {@Autowiredprivate AccountService accountService; // 配置了aop之后,就成为了代理对象@Testpublic void test01() throws Exception {accountService.save();//保存了accountService.transfer();//前置通知,转账了}
}
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- Java基础--反射机制
作用 反射机制可以读和修改字节码文件 如何获取类的字节码 public class Test06 {public static void main(String[] args) {//第一种方式Class c=null;try {c=Class.forName("Bird");} catch (ClassNotFoundException e) {e.printStackTrace();}try {Object o=c.new…...
2024/3/14 8:01:08 - 牛客 - 减成一(差分数组)
题目链接:点击查看题目大意:存在n个数,每次操作可以任选一个区间使得区间内的所有数字减一。问最少多少次操作,可以让所有数都变成1。题目分析:之前做过一道类似的原题:https://blog.csdn.net/qq_45458915/article/details/103228424然后这个题目是需要将所有数字减少为 …...
2024/4/16 10:31:20 - 我们有个带 3 个数据集的报表跑了 2 分多钟,太慢了,有啥办法优化吗?
影响报表性能的因素有很多,数据量太大传输慢、SQL 复杂计算慢、数据集太多关联慢等等。按照你的描述应该问题应该出在 3 个数据集在报表里关联导致的报表太慢。可以检查一下在报表单元格里是否有类似:ds2.select(name,id==ds1.cusid) 这样的表达式,表示数据集 2 和数据集 1 …...
2024/4/16 10:31:05 - 线性CCD基础学习
写这篇博文时引用了相当多的资料,在此致以感谢,引用文献于文末给出。 ——由光的作用产生的电叫光电。简单来讲,线性CCD就是只看到一条线的摄像头。CCDCCD的特点是以电荷作为信号,而非电流或电压。CCD(Charge-coupled Device,电荷耦合原件),是一种半导体器件,用电荷量表…...
2024/4/16 10:31:00 - Sentinel修改源码配置将流控和降级规则持久化到Nacos
文章目录问题问题1原因解决问题2仍然存在的问题 Sentinel官网 问题 使用docker部署的springboot和sentinel并且是在不同的云服务器上,sentinel是直接用docker拉取的bladex/sentinel-dashboardSentinel控制台可以看到启动的项目,但是监控界面是空白的,看了下Sentinel日志,一…...
2024/4/16 10:31:10 - C#使用EmguCV库介绍(一)
OpenCV(Open Source Computer Vision Library)是一个(开源免费)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android、ios等操作系统上,它轻量级而且高效---由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉…...
2024/4/16 10:31:10 - CCNA lab 随身日记之OSPF
动态路由之OSPF本篇介绍另一种动态路由协议——OSPF。它是最最最方便的协议,只通过传递链路状态信息以及建立邻居关系就可以连接多台路由,尤其是OSPF可以划分区域,而RIP只能在一个区域进行,它的适用范围也比RIP更广,当然配置操作也比RIP更简洁些。 (网络就是一个喜新厌旧…...
2024/4/16 10:31:05 - kali2020.2安装输入法
kali2020-2搜狗输入法安装卸载ibusapt-get remove ibus* 2.安装搜狗包(网上下的不行,需要去麒麟系统上封装一个) dpkg -i sogoupinyin_2.3.0.0110_amd64.deb 3 .安装依赖 apt-get install -f 4.重启 init 6 5 ctrl+空格切换...
2024/3/14 1:37:07 - 半导体物理 第七章 金属与半导体的接触 二
半导体物理 第七章 金属和半导体的接触二、金属半导体接触整流理论A、前言概述(定性分析)B、扩散理论(定量分析)C、热电子发射理论(定量分析)D、镜像力和隧道效应的影响 二、金属半导体接触整流理论 A、前言概述(定性分析) 不知道大家还记不记上一个博客中的一个式子:…...
2024/4/16 10:31:10 - 网络基础——IP地址
IP地址分类与子网掩码有关计算 一、IP地址 1、IP地址基本概念 IP地址在网络层将不同的物理网络地址统一到了全球唯一的IP地址上(屏蔽物理网络差异),是唯一标识互联网上计算机的逻辑地址(相当于手机号码,可以通过唯一的手机号码找到手机),所以IP地址也被称为互联网地址(…...
2024/3/13 22:56:40 - 【学习资料】中国开放大学-电大-《教育学》形考作业答案(2018).docx
教育学第一次作业一、辨析题。 ( 每小题 2 分,共 12 分 )1 .教育是人类和动物界都具有的一种现象 (错)2 .赫尔巴特的《普通教育学》的问世被认为是教育学学科独立的标志。 (对)3 .社会可以制约教育的发展,而教育无法制约社会的发展。 (错)4 .教育能推…...
2024/4/13 10:02:16 - 01-SIEM是什么?
目录1、SIEM可以提供什么帮助?2、SIEM如何工作现在与未来3、SIEM用于什么01安全监控...
2024/3/13 22:56:30 - 实体关系抽取任务方法及论文总结
文章目录1 实体关系抽取方法思路2 参数共享方法与联合解码方法2.1 使用参数共享的经典模型:2.2 使用联合解码的经典模型:2.3 参数共享方法和联合解码方法的优缺点对比:3 实体关系抽取解码方式总结3.1 序列标注3.2 指针网络3.3 片段分类3.4 不同解码方式的优缺点对比:4 实体…...
2024/4/16 10:31:30 - maven白小白(三)远程拉取文件的过程
Maven是咋对包进行管理的呢?我们要使用一个maven模板的项目,怎么样都需要先配置好你的maven程序,配置好你的本地maven仓库路径。这些操作,动动手指就能会啦 idea的Maven配置 百度一下你就知道。但其实在去中央仓库之前,还可以去我们自己的私服去看看。中央仓库和私服他们都…...
2024/4/16 10:31:00 - socket套接字及缓冲区详解
转载:https://blog.csdn.net/daaikuaichuan/article/details/83061726...
2024/4/17 8:55:06 - 使用Redis或Zookeeper实现分布式锁的两种方案比较
先贴上石杉大神的原文连接: 分布式锁用Redis还是Zookeeper? 方案实现 基于Redis实现分布式锁可以使用Redisson综合中间件框架, 基于Zookeeper实现分布式锁可以使用Curator框架两种方案的优缺点比较 对于 Redis 的分布式锁而言,它有以下缺点:它获取锁的方式简单粗暴,获取不到…...
2024/4/16 10:31:25 - Redis入门(5) - 消息通知
使用列表实现任务队列 优先级队列 按照规则订阅Redis也可以作为任务队列。任务队列顾名思义,就是“传递任务的队列”。任务队列与消息队列什么区别呢?任务队列是逻辑模型,而消息队列是通信模型,两者是不同层次的抽象,用消息队列可以实现任务队列。 与任务队列进行交互的实…...
2024/4/16 10:32:11 - Lucene总结二:Lucene的总体架构
如下技术文章也是从我之前很久开的csdn账号上面迁移过来的Lucene总的来说是:一个高效的,可扩展的,全文检索库。全部用Java实现,无须配置。仅支持纯文本文件的索引(Indexing)和搜索(Search)。不负责由其他格式的文件抽取纯文本文件,或从网络中抓取文件的过程。 在Lucene in…...
2024/4/16 10:32:21 - 汇编语言第二集
X86指令集的基本特色: 1.向下兼容 2.变长指令 1-15字节,多数为2-3字节的长度,多种寻址方式; X86 寻址方式; X86 -32下只有8个寄存器 64是16个; 一次只能访存一个寄存器;本节课就是对X86和MIPS指令集的一个简单的介绍。...
2024/4/16 10:32:06 - Vue路由元信息、页面跳转、验证登录时,path与meta有何不同?
在做网站登录验证的时候,使用到beforeEach 钩子函数进行验证操作,如下面代码 ,如果页面路径 path为/goodsList,那么就让它跳转到登录页面,实现了验证登录。如果需要登录验证的网页很多,怎么办? 1.这里是对比path。 如果需要验证的网页很多,那么必须在 if 条件里得写下所…...
2024/4/16 10:33:13
最新文章
- 使用 ECharts 绘制咖啡店各年订单的可视化分析
使用 ECharts 绘制咖啡店各年订单的可视化分析 在这篇博客中,我将分享一段使用 ECharts 库创建可视化图表的代码。通过这段代码,我们可以直观地分析咖啡店各年订单的情况。 饼图 这段代码包含了两个 ECharts 图表,一个是饼图,用…...
2024/4/18 3:28:09 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - Kafka入门到实战-第五弹
Kafka入门到实战 Kafka常见操作官网地址Kafka概述Kafka的基础操作更新计划 Kafka常见操作 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容不一定100%复现, 还要以官方信息为准 https://kafka.apache.org/Kafka概述 Apache Kafka 是一个开源的分布式事件流平台&…...
2024/4/14 21:38:34 - 2024 年高效开发的 React 生态系统
要使用 React 制作应用程序,需要熟悉正确的库来添加您需要的功能。例如,要添加某个功能(例如身份验证或样式),您需要找到一个好的第三方库来处理它。 在这份综合指南中,我将向您展示我建议您在 2024 年使用…...
2024/4/16 21:54:03 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/18 0:33:31 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/17 20:29:59 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/15 9:18:15 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/17 2:33:17 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/17 7:50:46 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/15 9:17:44 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/15 13:52:20 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/16 1:58:32 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/16 20:03:42 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/17 1:38:19 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/17 21:50:30 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/15 13:53:08 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/15 9:16:52 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/15 13:53:31 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/16 20:03:44 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/15 9:16:31 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/15 13:54:27 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/15 23:28:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/17 0:53:22 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/15 13:54:53 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下: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