自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 分布式锁

锁的用途分为两种:为了效率(efficiency),协调各个客户端避免做重复的工作。即使锁偶尔失效了,只是可能把某些操作多做一遍而已,不会产生其它的不良后果。比如重复发送了一封同样的email。为了正确性(correctness)。在任何情况下都不允许锁失效的情况发生,因为一旦发生,就可能意味着数据不一致(inconsistency),数据丢失,文件损坏,或者其它严重的问题。...

2019-05-06 15:18:59 123

转载 redis数据类型,数据维护

redis数据类型stringstring 是 redis 最基本的类型,一个 key 对应一个 value。string类型是二进制安全 的。意思是 redis 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。string 类型是 Redis 最基本的数据类型,string 类型的值最大能存储 512MB。listRedis 列表是简单的字符串列表,按照插入顺序排...

2019-01-28 14:23:16 248

转载 redis线程模型

redis线程模型文件处理器redis基于reactor模式开发了网络事件处理器,这个处理器叫做文件时间处理器,file event handler。这个文件事件处理器是单线程的,所以redis叫做单线程模型,采用io多路复用机制同时监听多个socket,根据socket上的事件来选择对应的事件处理器来处理这个事件。文件事件处理器结构包括多个socket,io多路复用程序,文件时间...

2019-01-28 10:25:36 642

转载 消息中间件保证消息顺序执行及消息的幂等性

消息幂等性(1)比如拿消息来写库,你先根据主键查一下,如果这数据都有了,update一下(2)比如你是写redis,反正每次都是set,天然幂等性(3)比如不是上面两个场景,做的稍微复杂一点,你需要让生产者发送每条数据的时候,里面加一个全局唯一的id,类似订单id之类的东西,然后你这里消费到了之后,先根据这个id去比如redis里查一下,如果没有消费过,你就处理,然后这个id写redis。如...

2019-01-24 18:18:53 905

转载 消息中间件保证消息可靠性(消息中间件接受到消息)

可靠性rabbitmq生产者丢失数据生产者将数据发送到rabbitmq的时候,可能数据就在半路给搞丢了。此时可以选择用rabbitmq提供的事务功能,就是生产者发送数据之前开启rabbitmq事务(channel.txSelect),然后发送消息,如果消息没有成功被rabbitmq接收到,那么生产者会收到异常报错,此时就可以回滚事务(channel.txRollback),然后重试发送...

2019-01-24 18:04:36 787

转载 保证消息队列的高可用

RabbitMQrabbitmq共有单机,集群,镜像方式。单机此时只有一个单独的机器,可用性低。集群一个RABBITMQ集 群中可以共享user,virtualhosts,queues(开启Highly Available Queues),exchanges等。但message只会在创建的节点上传输。当message进入A节点的queue中后,consumer从B节点拉取时,Rabbi...

2019-01-24 17:36:25 235

原创 kafka

windows 下创建消费者命令./kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic testwindows 下创建生产者命令./kafka-console-producer.bat --broker-list localhost:9092 --topic testwindows 下启动kafka命令...

2019-01-23 15:40:42 126

转载 使用消息中间件的场景及缺点

解耦模块A处于系统交互的中心,需求不断变更,与模块A交互的模块交替变换需求,如果不用消息中间件,模块A需要频繁变更耦合性强。如果采用消息中间件后,模块A只需把信息交付给消息中间件,其他模块需要改信息的时候只需要从消息中间件中取出消息就可,如果不需要和模块A交互时,只需要不从消息中间件中取出消息即可。异步如果某一个模块A调用其他模块,只是需要其他模块处理这个请求并且其他模块处理比较耗时,这是...

2019-01-22 10:04:34 591

原创 aop

形成BeanDefinition在ConfigBeanDefinitionParser的parseAspect方法成完成BeanDefinition的注册/**形成一个切面的通知列如before,around,after,after-returning,after-throwing * Parses one of '{@code before}', '{@code after}', '...

2019-01-21 14:04:40 128

原创 Spring service本类中方法调用另一个方法事务不生效

原因spring中切面只是对方法进行包装,只会拦截外部对该方法的调用。当进入到service内部后再对注解了Transactional方法调用其实和调用普通方法并没有什么区别,属于内部调用。事务注解只在通过service代理类调用时才会有作用解决方案在方法内部调用内部被切面修饰的方法时要获取该类的代理类,然后调用需要调用的方法。具体方法如下...

2019-01-17 17:42:58 1450

原创 mapper注入spring的实现过程

定位注解方式 根据MapperScan里的内容找到basePackages加载MapperScannerRegistrar里registerBeanDefinitions方法通过ClassPathMapperScanner的doScan方法进行扫描basePackages。ClassPathMapperScanner继承spring中ClassPathBeanDefinitionScann...

2019-01-16 15:39:30 2195

原创 StatementHandler

继承关系RoutingStatementHandler会根据MappedStatement中StatementType属性进行创建StatementHandlerRoutingStatementHandler中StatementHandler的类型真正与数据库交互的StatementHandlerSimpleStatementHandler 中执行数据库查询后把查询结果交给resul...

2019-01-15 15:15:03 328

原创 Executor

继承关系CachingExecutor采用装饰器模式给exector添加缓存的功能sqlsession中exector的类型在生成sqlsession的过程中会调用Configuration中newExector方法生成CachingExecutor,被装饰的Executor根据类型进行创建CachingExecutor 中执行的过程先判断缓存,再采用内部的Executor执行数据库操...

2019-01-15 14:50:44 500

原创 sqlsession

生命周期MapperMethod 中execute方法需要传递一个sqlsession ,这个sqlsession属于SqlSessionTemplate类型,在SqlSessionTemplate生成中会初始化生成一个代理对象如图1,SqlSessionInterceptor中invoke方法负责sqlSession 的创建及销毁 private class SqlSessionIn...

2019-01-15 14:10:55 731

原创 mybatis执行过程分析

装载到spring bean容器把扫描到的mapper加载到beanfactory中BeanDefinition Map中通过修改BeanDefinition 使用MapperProxyFactory 创建mapper的代理对象加载到spring bean容器中执行sql过程通过MapperProxy代理对象调用MapperMethod 执行sql查询public Object...

2019-01-14 16:36:24 506

原创 记一次aop配置错误踩的坑(在一个方法中配置了两个切面,其中一个未起作用)

第一次配置的aop类如下public class AopTest1 { private static Logger log = LoggerFactory.getLogger(AopTest1.class); public void before(){ log.info("+++++++++before...........1+++++++++"); } ...

2019-01-10 16:18:51 2261

原创 spring中循环依赖

前提条件类A文件public class CircleA { private CircleB circleB; public void setCircleB(CircleB circleB){ this.circleB = circleB; } public void a() { circleB.b(); }}类B文件pu...

2019-01-09 17:13:10 140

转载 Aware 接口

原文出自:http://cmsblogs.com/?p=3335doCreateBean() 方法主要干三件事情:实例化 bean 对象:createBeanInstance() 属性注入:populateBean() 初始化 bean 对象:initializeBean()而初始化 bean 对象时也是干了三件事情:激活 Aware 方法 后置处理器的应用 激活自定义的 i...

2019-01-07 15:35:51 133

转载 BeanFactoryPostProcessor

原文出自:http://cmsblogs.com/?p=3342BeanFactoryPostProcessor 的机制就相当于给了我们在 bean 实例化之前最后一次修改 BeanDefinition 的机会,我们可以利用这个机会对 BeanDefinition 来进行一些额外的操作,比如更改某些 bean 的一些属性,给某些 Bean 增加一些其他的信息等等操作。定义如下publ...

2019-01-07 15:33:43 155

转载 BeanPostProcessor

原文出自:http://cmsblogs.com/?p=3338BeanPostProcessor 接口定义如下:public interface BeanPostProcessor { @Nullable default Object postProcessBeforeInitialization(Object bean, String beanName) throws Beans...

2019-01-07 15:32:14 173

原创 装饰器模式

定义           动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。重点装饰者和被装饰者必须是同种类型,也就是有共同的超类 装饰者拥有新的方法或者方法的实现方式实现     基类 public abstract class Beverage { protected String description; ...

2018-12-29 15:38:49 118 1

原创 设计原则

找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起。(封装变化) 多用组合,少用继承 针对接口编程,不针对实现编程 为交互对象之间的松耦合设计而努力 类应该对外开放,对修改关闭...

2018-12-28 14:18:59 81

原创 策略模式

一 定义其思想是针对一组算法,将每一种算法都封装到具有共同接口的独立的类中,从而是它们可以相互替换。策略模式的最大特点是使得算法可以在不影响客户端的情况下发生变化,从而改变不同的功能。二 设计原则略模式体现了面向对象程序设计中非常重要的两个原则:封装变化的概念。编程中使用接口,而不是使用的是具体的实现类(面向接口编程)。三    可以各种飞行的鸭子实例抽象策略角色:关于...

2018-12-28 14:17:07 1187

原创 JSR303定义的校验类型

空检查@Null       验证对象是否为null@NotNull    验证对象是否不为null, 无法查检长度为0的字符串@NotBlank 检查约束字符串是不是Null还有被Trim的长度是否大于0,只对字符串,且会去掉前后空格.@NotEmpty 检查约束元素是否为NULL或者是EMPTY. Booelan检查@AssertTrue     验证 Boolea...

2018-12-27 17:51:54 250

转载 BeanDefinitionParser

首先需要了解Spring的自定义标签的实现。通过继承NamespaceHandlerSupport 注册parser。下面简单谈谈其中的触发流程在ApplicationContext的refresh方法中首先是通过obtainFreshBeanFactory进行beanFactory的初始化创建,里面会读取xml进行解析 refreshBeanFactory才是干正事的。。...

2018-12-26 18:56:09 273

转载 BeanDefinition及其实现类

BeanDefinition描述一个bean实例,这个bean实例包含了属性值,构造函数的参数值,以及由具体实现提供额进一步信息。这是仅仅是一个最轻量的接口:主要目的是允许像 PropertyPlaceholderConfigurer 这样的 BeanFactoryPostProcessor来内省和改变属性值以及其他bean的元数据 bean definition实现类ChildB...

2018-12-26 18:34:18 1341

原创 jvm参数

-Xmx:设置jvm最大可用内存,最大堆大小 -Xms:设置jvm启动时分配的内存,设置JVM促使内存。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。初始堆大小 -Xss:是指设定每个线程的堆栈大小...

2018-11-01 17:20:15 64

转载 Collections.unmodifiableList()

Collections.unmodifiableList(List<? extends T> list)) 将参数中的List返回一个不可修改的List.觉得以下这篇文章写得很好,说 明了它的应用场景。--------------------------------------------------------------------------------------在《重构——改...

2018-04-28 17:36:40 186

转载 spring 基础知识

一:降低java开发的复杂性,spring采取了4中关键策略     1:基于pojo的轻量级和最小侵入性编程;     2:基于依赖注入和面向接口实现松耦合;     3:基于切面和惯例进行声明式编程;     4:通过切面和模板减少样板式代码;二:javaBeen的三种种定义方式     1:xml配置      <bean id="" class = "">(id是javabee...

2018-04-25 11:12:34 98

转载 @Transactional注解

概述事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。Spring Framework对事务管理提供了一致的抽象,其特点如下:为不同的事务API提供一致的编程模型,比如JTA(Java Transaction API), JDBC, Hibernate, JPA(Java Persistence API和JDO(Java Data Objects)支持声明式事务管理...

2018-04-25 11:10:34 114

转载 java引用类型

Java对引用的概念进行了扩充,将引用分为强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)、虚引用(Phantom Reference)4种,这4种引用强度依次逐渐减弱。• 强引用就是指在程序代码之中普遍存在的,类似“Object obj = new Object()”这类的引用,只要强引用还存在,垃圾收集器永远不会回收掉被...

2018-04-25 11:09:32 175

转载 sql语句

一:基础内容可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。查询和更新指令构成了 SQL 的 DML 部分:SELECT - 从数据库表中获取数据UPDATE - 更新数据库表中的数据DELETE - 从数据库表中删除数据INSERT INTO - 向数据库...

2018-03-09 10:33:59 143

转载 ThreadLocal

一:源码 package java.lang;import java.lang.ref.*;import java.util.Objects;import java.util.concurrent.atomic.AtomicInteger;import java.util.function.Supplier;public class ThreadLocal<T> {...

2018-03-07 11:15:10 151

转载 quartz文档

深入解读Quartz的原理 Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便。 一、核心概念 Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可。 1、Job表示一个工作,要执行的具体内容。此接口中只有一个方法void execute(JobExecutionContext context) 2、JobDetailJobDetail表...

2018-03-07 09:25:51 747

转载 Interger类

1:public static int parseInt(String s,intradix)返回字符数值对应的radix进制的int值(2<=radix <= 36)2:public static Integer getInteger(String nm, Integer val)根据指定的名称得到系统属性的整数值3:public static Integer valueOf(Str...

2018-03-07 09:25:21 506

原创 java死锁

一:形成死锁的条件1:互斥条件;存在共享资源2:占有互斥的共享资源并等待另一个任务释放互斥的资源3:不可抢占,任务占有互斥的资源时不可被另一个任务抢占4:循环等待,一个任务占有互斥资源并等待另一个任务释放互斥资源,另一个任务等待其他任务释放互斥资源,形成循环。...

2018-03-07 09:24:32 95

转载 java object类

public class Object{private static native void registerNatives();static { registerNatives();}public final native Class getClass();public native int hashCode();public boolean equals(O

2018-01-15 10:23:42 136

转载 通过javamailsenderimpl发送邮件

参考文章:http://blog.csdn.net/qq_33556185/article/details/51028952import javax.mail.internet.MimeMessage;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.mail.S

2017-12-11 15:38:36 1456

原创 git常用命令

查看分支:git branch创建分支:git branch 切换分支:git checkout 创建+切换分支:git checkout -b 合并某分支到当前分支:git merge 查看分支合并图:git log --graph删除没有合并的分支:git branch -D 分支名推送分支:git push origin 分

2017-12-08 15:38:26 108

转载 ICE简单介绍及使用示例

1、ICE是什么? ICE是ZEROC的开源通信协议产品,它的全称是:The Internet Communications Engine,翻译为中文是互联网通信引擎,是一个面向对象的中间件,使我们能够以最小的代价构建分布式应用程序。ICE使我们专注于应用逻辑的开发,它来处理所有底层的网络接口编程,这样我们就不用去考虑这样的细节:打开网络连接、网络数据传输的序列化与反序列化、连接失败的尝试次数

2017-09-06 19:47:07 267

空空如也

空空如也

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

TA关注的人

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