自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 区块链的数据结构(二)——默克尔树(Merkle Tree)

(类似A向B买东西,使用比特币支付,A告诉B这笔交易已完成,钱已付,在某区块中,B是轻节点,B如何验证这比交易在区块链中?圆圈内黄色的tx被修改,那么必然导致上方绿色的H()被修改,从而导致了上方绿色的H()被修改,从而导致了上方绿色的H()被修改,最终导致了root hash这个值的修改。那是否有可能全节点为帮助A伪造交易,向B提供的哈希值(即上图中红色的H())是经过调整的,使B最终算出来的root hash值与本地的root hash值一致呢?因为不能保证这个全节点是友善的。方式1:遍历一遍树。

2023-10-22 19:26:54 1169

原创 区块链的数据结构(一)——区块、链

区块(block)由区块头(block header)和交易列表(transaction list,tx list)组成,block之间通过block header的hash连接成了一个链表结构。最后一个区块是最近产生的区块,每个区块都包含指向前一个区块的哈希指针,最后一个区块也有一个指向它的哈希指针H()保存在系统里。这样做的好处是:我们不光可以找到这个结构体的位置,同时还能够检测出这个结构体的内容有没有被篡改,因为我们保存了他的哈希值。哈希指针是一个可以指向数据存储位置及位置的数据的哈希值的指针。

2023-02-27 09:50:56 1636 1

原创 Spring事务(三)——传播属性之REQUIRED

事务是与连接对象紧密相关的,事务属性用来控制事务流转。Spring事务的传播属性有以下几种:PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,则加入到这个事务中。默认属性,也是最常使用。 PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在...

2023-01-06 09:24:10 3228

原创 区块链技术之P2P网络(二)

注意:Gossip 过程是异步的,发消息的节点不会关注对方是否收到,即不等待响应;异步是它的优点,而消息冗余则是它的缺点。需要解决的问题:节点收到新数据后立刻转发给所有Peer,Peer多的情况下会造成瞬间的网络拥堵。需要解决的问题:网络中两个节点同时发出消息,网络中会对这两个消息顺序暂时无法达成一致。需要解决的问题:当一个节点连上足够多的Peer后,就能知晓消息的生产者是哪个Peer。(2)改变消息的终点,例如Nym,异构网络,加入mix节点,即带加密功能的消息池。解决:分批有序进行广播。

2022-11-06 11:10:22 1546

原创 Spring事务(二)——事务的提交

前世:JDK如何控制事务判断是否在同一个事务的标准就是多个DML是否为同一个连接对象Mysql的事务的提交方式默认为自动提交,如果有多个DML操作,每一个执行结束都会自动提交,所以要想多个DML操作在一个事务,必须将自动提交关闭(前提)。开启事务执行被代理方法关闭事务今生:Spring事务首先Spring的事务也是运用了AOP的思想,我们知道,要实现AOP功能,必须有代理的入口类,那就是在类上加@EnableTransactionManagement注解,表示...

2022-10-29 09:34:27 4096

原创 区块链技术之P2P网络(一)

与传统的Client-Server网络模式相比,P2P网络所有节点平等,数据互相传输。P2P(英文全称:Peer-to-peernetworking;简称P2P),也称为对等网络,即对等计算机网络,是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种组网或网络形式。存储、带宽资源利用率高,比如最早期的BT下载工具。

2022-10-17 20:48:50 2606

原创 密码学基础(四)——数据编解码

特别注意的一点是:如果是数据刚好满足数据块长度,也要在元数据后在按PKCS7规则填充一个数据块数据,这样做的目的是为了区分有效数据和补齐数据。此外,在特定的合规要求下,实际业务系统还需要引入更多的数据预处理环节,如数据脱敏、数据认证等,使得数据在进入密码学协议前,尽早降低潜在的隐私风险。其中满足公式成立的点(x,y)都在椭圆曲线上,椭圆曲线密码通过在限定的点集上定义相关的点运算,实现加解密功能。填充规则:需要填充的部分都记录填充的总字节数,任何长度的原始数据,在最后一个数据块中,都要求进行数据填充。

2022-10-12 12:46:14 900

原创 密码学基础(三)——数字签名与证书

PKI是一些列协议的统称,例如RSA公司指定的PKCS系列规范标准,互联网规格RFC中也有很多与PKI相关的文档,X.509规范也是PKI的一种。公钥私钥配对,公钥被窃取,他人就可以冒充,如何保证这个公钥在传输过程中没有被截取替代。证明这个公钥的来源,由第三方权威认证机构认证,数字证书其实就是公钥证书,相当于一张身份证明(包含个人信息)。主要元素:用户(使用PKI的人)、认证机构(颁发证书的人,如CA机构)、仓库(保存证书的数据库)数字证书用来证明公钥拥有者的身份,验证数据来源,验证数据是否被修改。

2022-10-09 20:48:00 1587

原创 密码学基础(二)——对称与非对称加密

加密时,使用对方的公钥对通讯数据进行加密,对方收到加密信息后,用自己的私钥进行解密,从而获取明文数据信息。借助数学方法可实现类似手写签名的作用,Alice使用自己的私钥对消息进行签名,然后将结果发送给Bob,Bob收到消息以后,使用Alice的公钥验证它。1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。所以D,N代表私钥(由于N是公钥的一部分,所以也可用说D是私钥)

2022-10-07 15:49:23 949

原创 密码学基础(一)——哈希算法

由于哈希算法的单向性,可以从前一个数据块原文计算出下一个数据块所用的哈希值输入,但已知一个哈希值输入,难以反推出所有可能的数据块原文。哈希算法:哈希算法不可逆,包括:MD4、MD5、hash1、ripeMD160、SHA256、SHA3、Keccak256、国家标准SM3(国家密码管理局)哈希加“盐”(salt),所谓加“盐”,就是在明文的随机位置加上一串随机的字符串再进行hash,防止彩虹表攻击。加密/解密算法:加密解密算法可逆,但是必须要有秘钥,对称加密,非对称加密,数字签名算法DSA。

2022-10-06 20:11:20 5718 1

原创 以太坊(一)——概述

是一个有智能合约功能的公共区块链平台。允许任何人在平台上建立通过区块链技术运行的去中心化应用。就像比特币一样不受任何人控制的开放源项目,但与比特币不同的是,它解决了扩展性不足的问题,它十分灵巧简便,极具适应性。由很多节点组成,每一个节点就是运行以太坊客户端的计算机,每个节点都可以同步全部的账本可以转账和数据存储以太坊是公有链,所有人都可以随意加入和退出全世界计算器联网,每个节点运行一个以太坊客户端,就组成了以太坊网络。

2022-10-04 10:12:17 1779

原创 以太坊(二)——账户

合约账户不是通过公私钥对控制的,除了balance(余额)和nonce(交易次数)之外还有code(代码)、storage(相关状态-存储,包括每个状态的取值),一个合约可以调用另外一个合约,所以要通过nonce值记录一下调用的次数,但是合约账户不能主动发起一个交易,以太坊规定,所有的交易只能由外部账户发起,外部账户发起一个交易如果调用了一个合约账户,这个合约账户可以发送一个message调用另外一个合约,但是它不能自己发起一个交易。• 执行代码时可以操作自己的存储空间,也可以调用其它合约。

2022-10-03 12:11:23 1804

原创 Spring事务(一)——切面的创建

在Bean的初始化过程中,会经过InfrastructureAdvisorAutoProxyCreator类的初始化及后面的方法,会判断当前当前Bean对象是否和BeanFactoryTransactionAttributeSourceAdvisor匹配,匹配逻辑为判断该Bean的类上是否存在@Transactional注解,或者类中的某个方法上是否存在@Transactional注解,如果存在则表示该Bean需要进行动态代理产生一个代理对象作为Bean对象。 当该代理对象在...

2022-10-03 09:27:35 1051

原创 Spring源码之整合Mybatis底层实现

目录1. Spring整合Mybatis底层源码2.SqlSessionTemplate类的作用3. Mybatis一级缓存失效问题1. Spring整合Mybatis底层源码Mybatis框架可以单独使用,需要用到Mybatis所提供的一些类构造出对应的Mapper对象,然后就能使用Mybatis框架提供的功能,我们先看一个Demo: @Test public void testMybatis() throws IOException { //...

2022-05-28 17:57:08 637

原创 Spring源码之AOP(四)——ScopedProxy

我们看一段代码,先定义一个多例的Bean:@Component@Scope(value = DefaultListableBeanFactory.SCOPE_PROTOTYPE)public class ScopedProxyBean { public void code() { System.out.println(this.hashCode()); }}再定义一个单例Bean,通过@Autowired注解把上面的多例...

2022-04-28 15:12:33 669

原创 Spring源码之AOP(三)——代理的提前生成

代理的提前生成是在实例化的过程中,进入创建Bean的方法createBean() 所属类:org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory protected Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) throws BeanCreati...

2022-03-30 15:43:39 465

原创 Spring源码之AOP(二)——代理的生成和链式调用

上文(链接地址:)我们详细讲到了找根据Advice和Pointcu找切面(Adviosr)的过程,现在,切面找到了,进入本章的主题,生成代理。

2022-02-23 16:02:54 535

原创 Spring源码之AOP(一)——切面的生成

是在被代理对象创建完成(实例化)之后才会生成代理对象Bean的实例化之后,进入doCreateBean方法org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactoryprotected Object doCreateBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) throws BeanCreationExce

2022-02-08 13:47:47 540

原创 Spring源码之循环依赖

1. 单例循环依赖(支持)通常来说,如果问Spring内部如何解决循环依赖,一定是默认的单例Bean中,属性互相引用的场景。比如几个Bean之间的互相引用:

2022-01-17 13:45:57 357

原创 Spring源码之@Lookup注解解析

众所周知,Spring中的Bean默认都是单例的,如果想要每次返回的不一样,类上加@Scope注解,并指定scope属性为PROTOTYPE类型的时候,在每次注入的时候会自动创建一个新的bean实例。看一下这个例子:/** * @ClassName: LookupService * @Description: 测试原型Bean的注入 * @Author: Kaisheng Du * @Date: 2021/10/25 14:34 * @Version: 1.0 */@C...

2022-01-06 09:04:04 1928

原创 Spring源码之ConfigurationClassPostProcessor类解读

对@Component、@ComponentScan、@Import、@ImportSource注解的判断在isConfigurationCandidate()方法中:所属类:org.springframework.context.annotation.ConfigurationClassUtils public static boolean isConfigurationCandidate(AnnotationMetadata metadata) { // Do not ...

2021-12-25 12:35:01 672

原创 Spring源码之启动过程(五)—— @Resource、PostConstruct、@PreDestroy注解解析

在上一章()Bean的实例化过程中,着重看了@Autowired注解的解析,及依赖注入过程,本节,我们看一下@Resource、PostConstruct、@PreDestroy注解的解析。是由CommonAnnotationBeanPostProcessor负责,该类实现InstantiationAwareBeanPostProcessor。目录1. 收集@PostConstruct 、@PreDestroy 注解2. 收集@Resource 注解我们先回顾...

2021-12-16 14:58:23 687

原创 Spring源码之启动过程(四)—— Bean的实例化详解

前面,我们把Bean的生命周期做了一个概述和梳理,为的是更深刻的理解容器启动及Bean的生命周期,最主要的是Bean的实例化过程,没有看过的,可以进去先看一下(文章链接:),也有助于理解本文内容,下面,直入主题:目录1. finishBeanFactoryInitialization()2. preInstantiateSingletons()3. getBean()4. doGetBean()5. 第一个getSingleton()6. 第二个getSingle...

2021-12-07 09:07:34 874

原创 Spring源码之启动过程(三)—— registerBeanPostProcessors()解析

主要是针对实现BeanPostProcessor接口的类调用和实例化过程,会提前实例化,BeanPostProcessor接口类型实例是针对某种特定功能的埋点,在这个点会根据接口类型来过滤掉不关注这个点的其他类,只有真正关注的类才会在这个点进行相应的功能实现。 会把实现了BeanPostProcessor接口的类实例化并排序,并且加入到BeanFactory的beanPostProcessor属性中: protected void registerBeanPostPro...

2021-11-18 13:34:35 330

原创 Spring源码之启动过程(二)—— invokeBeanFactoryPostProcessors()方法解析

Spring在启动的时候,在实例化之前会往AbstractBeanFactory中的beanPostProcessors属性(一个List)中放置各种类型的BeanPostProcessor对象,执行的过程中会往Bean工厂中放置BeanDefinition。BeanFactoryPostProcessor是BeanFactory的后置处理器protected void invokeBeanFactoryPostProcessors(ConfigurableListableBean...

2021-11-09 08:32:21 396

原创 Spring源码之启动过程(一)—— 容器的启动

registerAnnotationConfigProcessors()方法所属类:org.springframework.context.annotation.AnnotationConfigUtils public static Set<BeanDefinitionHolder> registerAnnotationConfigProcessors( BeanDefinitionRegistry registry, @Nullable Object source) {..

2021-10-31 19:02:11 1229

原创 Spring源码之Bean的生命周期

Spring已经成为了目前最流行的第三方开源框架之一,在我们充分享受Spring IOC容器带来的便捷时,也应该考虑一下Spring这个大工厂是如何将一个个的Bean生产出来的,我们一起来讨论一下Spring中Bean的生命周期。Spring容器就好像生产车间的流水线,创建出来的对象就像是生产出来的一个个精美绝伦的产品。Spring将管理的对象称之为Bean。Spring最重要的功能就是帮助程序员创建对象(也就是IOC),而启动Spring就是为创建...

2021-10-17 15:21:32 430 1

原创 Spring源码之事件管理与发布

在AbstractApplicationContext.refresh() 方法中,初始化了一个事件管理类(或事件管理器)。// Initialize event multicaster for this context.// TODO 初始化事件管理类,在单例池中创建了一个SimpleApplicationEventMulticaster类initApplicationEventMulticaster();进入 initApplicationEventMulticaster(...

2021-10-09 14:55:36 181

原创 Bean实例化之XML标签解析

在Spring中,我们经常会通过以下几种方式来定义Bean:1.<bean/>2.@Bean3.@Component(@Service,@Controller)现在,我们使用第二种和第三种方式较多,要实例化某个类,直接加上@Component注解就可以了,但是在Spring早期的版本都是通过XML配置文件来定义Bean,这是我们的传统手艺,理解了配置文件的解析有助于后面Spring源码的学习。 ...

2021-10-08 18:58:02 601

原创 Spring源码前置知识

1. Spring 容器加载方式:1.1 通过配置文件加载: ApplicationContext applicationContext= new ClassPathXmlApplicationContext("spring.xml"); 1.2 通过配置文件的绝对路径加载: ApplicationContext applicationContext = new FileSystemXmlApplicationContext("E:\\idea\\springdemo\\spring.xm

2021-09-17 16:29:05 218

原创 @Configration和@Compnent注解区别

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言在Spring Boot中基本是@Configration注解使用较多,例如,配置类的启动加载,和@Component注解都是为了实例化,Spring为什么要这样设计?一、案例用一个例子来予以说明,在下面的代码中,Spring启动中lison() 方法会被调用两次,但是同一个实例吗?先用@Componen.

2021-09-07 15:20:40 620

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除