自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

寒武没有纪

Stay hungry Stay foolish

  • 博客(50)
  • 收藏
  • 关注

原创 Sharding-JDBC 事务提交异常(Druid空闲检测未剔除已失效连接)

异常问题最近线上环境有一个服务频繁出现更新异常,提示不能提交JDBC事务,但是事务并没有回滚。org.springframework.transaction.TransactionSystemException:Could not commit JDBC transaction; nested exception is java.sql.SQLException完整报错信息:com.XXX.XXXX.XX.XXXXXX.facade.RuleUpdateFacadeService.updateP

2020-11-15 21:56:05 2469 2

转载 MyISAM与InnoDB两者的区别、详细总结、性能对比

转自:https://blog.csdn.net/wjtlht928/article/details/46641865MyISAM:默认表类型,它是基于传统的ISAM类型,ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法。不是事务安全的,而且不支持外键,如果执行大量的select,insert MyISAM...

2019-01-01 20:42:44 566

转载 javap 指令集

转自:http://bbs.gupaoedu.com/forum.php?mod=viewthread&tid=295#lastpost栈和局部变量操作将常量压入栈的指令aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈iconst_2 将int类型...

2018-12-31 20:36:28 207

原创 IDEA中Maven显示存在依赖但项目中并未导入依赖JAR

项目中 maven 窗口显示该模块存在相关依赖,但在项目中并未引入依赖 jar ,点击重新导入也无效。无意中发现该模块颜色和其它模块不一致,右键发现存在 Unignore Projects (忽略该项目)操作选项,而正常模块显示为 Ignore Projects 。不知道什么时候该模块被忽略,点击 Unignore Projects 不忽略项目操作,依赖 jar 可以正常导入。...

2018-11-19 11:05:35 12010 2

原创 Redis集群部署

准备CentOS:7Redis:4.0.11测试在3台虚拟机上进行,ip分别为:172.16.105.128172.16.105.129172.16.105.130主从复制1.分别在三台虚拟机上安装 redis,单机安装部署参考(CentOS 7安装Redis)2.在从服务器( 172.16.105.129 、 172.16.105.130 )配置文件 redis.conf ...

2018-11-09 17:38:02 186

原创 CentOS 7安装Redis

准备CentOS:7Redis:4.0.11安装下载redis安装包并上传解压[root@localhost redis]# tar -zxvf redis-4.0.11.tar.gz执行编译[root@localhost redis]# make可能存在异常问题/bin/sh: cc: 未找到命令[root@localhost redis-4.0.1...

2018-11-09 10:47:26 158

原创 CentOS安装配置yum

准备版本:CentOS 7安装配置过程卸载系统自带yum查看是否存在yum[root@localhost apps]# rpm -qa | grep yumyum-plugin-fastestmirror-1.1.31-45.el7.noarchyum-metadata-parser-1.1.4-10.el7.x86_64yum-3.4.3-158.el7.centos.noarc...

2018-11-08 18:23:00 247

原创 Dubbo源码解析之服务端接收消息

准备dubbo 版本:2.5.4服务端接收消息流程Handler链路DubboProtocolprivate ExchangeServer createServer(URL url) { url = url.addParameterIfAbsent("channel.readonly.sent", Boolean.TRUE.toString()); url = url.a...

2018-11-04 16:35:03 1444

原创 Dubbo源码解析之客户端初始化及服务调用

准备dubbo版本:2.5.4客户端初始化过程初始化过程ReferenceBean是客户端初始化入口,其实现InitializingBean接口,在bean初始化过程中会调用其afterPropertiesSet方法,进而调用getObject() -> get() ->init(),之后再调用ReferenceConfig的createProxy()方法。Reference...

2018-11-04 16:21:35 713

原创 Dubbo源码解析之服务发布与注册

准备dubbo版本:2.5.4服务发布流程Spring自定义扩展dubbo 是基于 spring 配置来实现服务发布,并基于 spring 的扩展机制定义了一套自定义标签,要实现自定义扩展, spring 中提供了 NamespaceHandler 、BeanDefinitionParser 两个类用于实现扩展NamespaceHandler :注册一系列 BeanDefinitio...

2018-11-02 15:05:50 240

原创 跨域CORS图片上传问题

异常问题项目中存在跨域图片上传请求,提示下列错误Access to XMLHttpRequest at ‘http://localhost:8080/common/uploadPic’ from origin 'http://localhost:8000’has been blocked by CORS policy: Response to preflight request doesn’...

2018-11-01 16:58:55 6726

原创 Dubbo源码解析之SPI

准备dubbo版本:2.5.4Dubbo SPI源码解析过程Dubbo 在服务发布过程中默认会加载自适应的协议扩展,在类 ServiceConfig 中存在以下初始化代码,下面以此进行SPI过程分析。private static final Protocol protocol = ExtensionLoader.getExtensionLoader(Protocol.class).getA...

2018-10-31 15:16:00 277

原创 Exchanger源码解析

Exchanger(交换者)是一个用于线程间协作的工具类。Exchanger 用于进行线程间的数据交换。它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据。这两个线程通过exchange 方法交换数据,如果第一个线程先执行 exchange() 方法,它会一直等待第二个线程也执行 exchange 方法,当两个线程都到达同步点时,这两个线程就可以交换数据,将本线程生产出来的数据传递给对方。...

2018-10-10 17:45:18 389

原创 Semaphore源码解析

Semaphore 用来控制同时访问特定资源的线程数量,使用 AQS 状态值 state 代表许可数 permits。构造方法参数:permits:许可数fair:是否公平信号量public Semaphore(int permits) { sync = new NonfairSync(permits);}public Semaphore(int permits, boo...

2018-10-10 17:39:16 163

原创 CyclicBarrier源码解析

CyclicBarrier 基于可重入锁 ReentrantLock 和 Condition 共同实现。parties:设置多少个线程或者任务等待至 barrier 状态barrierAction:设置指定线程全部到达 barrier 状态时会执行的任务public CyclicBarrier(int parties) {}public CyclicBarrier(int part...

2018-10-10 17:30:11 117

原创 CountDownLatch源码解析

CountDownLatch 通过递减 AQS 同步状态 state 来实现闭锁的控制。// CountDownLatchpublic CountDownLatch(int count) { if (count < 0) throw new IllegalArgumentException("count < 0"); this.sync = new Sync(cou...

2018-10-10 17:20:54 126

原创 ReentrantReadWriteLock源码解析

ReentrantReadWriteLock 使用一个 32 位的 int 类型来表示锁被占用的线程数,高 16 位用来表示读锁占有的线程数量,低 16 位表示写锁被同一个线程申请次数。// 读锁占用位数高16位static final int SHARED_SHIFT = 16;// 增加读锁数量static final int SHARED_UNIT = (1 <&lt...

2018-10-10 17:10:09 124

原创 ReentrantLock源码解析

ReentrantLock支持公平锁和非公平锁,默认构造使用非公平锁实现。public ReentrantLock() { sync = new NonfairSync();}public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync();}首先查看获取锁 lo...

2018-10-10 16:57:18 122

原创 AbstractQueuedSynchronizer ConditionObject解析

分析过程// condition队列第一个节点private transient Node firstWaiter;// condition队列最后一个节点private transient Node lastWaiter;// 重新中断退出等待private static final int REINTERRUPT = 1;// 抛出中断异常退出等待private stati...

2018-09-29 16:20:37 1554

原创 AbstractQueuedSynchronizer源码解析

AQSAbstractQueuedSynchronizer 队列同步器,是 JDK1.5 提供的一个基础框架,用于构建依赖于先进先出(FIFO)等待队列的阻塞锁以及相关同步器(包括 ReentrantLock、CountDownLatch、Semaphore 等),它使用一个 int 类型的成员变量 state 表示同步状态,同步器提供了一系列模板方法来访问修改同步状态:getState():...

2018-09-27 15:14:33 235

原创 SpringMVC源码解析

首先上时序图,帮助理解整个解析过程和执行过程准备Spring版本:5.0.8解析过程配置过程解析HttpServletBean 继承 HttpServlet,在 servlet 启动时会执行其 init 方法// HttpServletBeanpublic final void init() throws ServletException { if (logger.isD...

2018-09-18 20:17:14 1905

原创 Spring 事务源码解析

准备Spring版本:5.0.8解析过程标签解析分析事务注解驱动标签 <tx:annotation-driven/> 解析,首先定位到 TxNamespaceHandler// TxNamespaceHandlerpublic void init() { registerBeanDefinitionParser("advice", new TxAdv...

2018-09-14 18:45:29 1192

原创 Spring AOP代理执行解析

准备Spring版本:5.0.8执行过程解析根据时序图进行分析,这里以前置方法 before 为例 JdkDynamicAopProxy 实现了 InvocationHandler,在调用时会执行 invoke() 方法// JdkDynamicAopProxypublic Object invoke(Object proxy, Method method, O...

2018-09-05 17:56:09 332

原创 Spring AOP代理创建解析

准备Spring版本:5.0.8代理创建过程解析根据上文解析,来到 AbstractAutoProxyCreator->wrapIfNecessary->createProxy 方法// AbstractAutoProxyCreatorprotected Object createProxy(Class<?> beanClass, @Nullabl...

2018-09-05 14:11:07 264

原创 Spring AOP配置标签解析

准备Spring版本:5.0.8解析过程开启 Spring AOP 注解自动代理需要配置标签 <aop:aspectj-autoproxy/>,查看 spring-aop:5.0.8.RELEASE\META-INF\spring.handlers 文件,配置以下内容:http\://www.springframework.org/schema/aop=org.sp...

2018-09-04 20:58:58 1233

原创 Spring Bean创建过程解析

时序图先上时序图帮助理解 Bean 实例创建过程 解析过程ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");Person person = (Person) applicationContext.getBean("person");...

2018-09-02 19:09:28 14987 1

原创 Dom4j解析第三方接口返回XML格式数据

引入Dom4j依赖 <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId&am

2018-08-20 17:31:07 1992

原创 Mybatis源码解析-Mapper执行SQL过程

测试准备添加mybatis-config.xml全局配置文件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC &quo

2018-07-28 13:45:50 573

原创 Mybatis源码解析-Mybatis初始化过程

测试方法public class UserMapperTest { private UserMapper userMapper; SqlSession sqlSession = null; SqlSessionFactory sqlSessionFactory = null; @Before public void setUp() throws...

2018-07-24 20:36:04 356

原创 SpringMVC接收xml格式参数

问题在对接银行过程中,银行回调时请求参数格式为xml,要求返回格式也为xml(CDATA包裹),利用SpringMVC该怎么处理。测试xml格式参数为:<xml> <order_id><![CDATA[201807031109358406949]]></order_id&a

2018-07-04 13:38:39 3100

原创 Spring Boot Actuator应用监控

介绍Spring boot Actuator 提供了一系列的端点来监控和度量应用,包括应用上下文全部Bean信息,自动化配置报告(显示自动配置条件是否通过),配置属性信息,显示应用健康状态等。环境Spring Boot 2.0.3测试1.初始化一个Spring boot工程,添加actuator依赖:<dependency> <grou...

2018-06-17 15:26:36 6706

原创 Oracle MD5加密问题

DBMS_OBFUSCATION_TOOLKIT.MD5:MD5编码的数据包函数,但直接使用有错误提示,说明该函数只能在程序包中调用,不能直接在select语句中使用。select DBMS_OBFUSCATION_TOOLKIT.MD5(input_string =>'123') a from Dual;Utl_Raw.Cast_To_Raw:DBMS_OBFUSCATION...

2018-06-11 18:09:39 1272

原创 Spring IOC源码解析

Spring的核心是IoC容器和AOP,它们是Spring架构体系中的核心基础。平常使用通过简单配置即可,没有深究其底层实现,因而常常不知所以然,殊不知Spring已经帮助我们完成了太多事情。因此有必要对其实现进行学习,加深对其的理解和应用。IoC(Inverse of Control):控制反转,将对象的创建权利交由Spring来管理。继承体系IoC容器的实现又依赖于BeanFa...

2018-06-10 16:19:35 416

转载 Quartz定时调度Cron表达式详解

转自:https://www.cnblogs.com/javahr/p/8318728.htmlCron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:Seconds Minutes Hours DayofMonth Month DayofWeekSeconds Minutes Hours DayofMonth Month...

2018-06-06 17:06:41 252

原创 Spring Boot集成JDBC

准备Spring boot整合jdbc访问mysql数据库。IDEAmysql集成过程1.初始化mysql测试表DROP TABLE IF EXISTS `tb_spring`;CREATE TABLE `tb_spring` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `name` varchar(...

2018-06-06 11:01:45 373

原创 使用JConsole和jstack检测分析死锁

JConsole首先启动死锁测试demo程序在cmd中运行jconsole打开图形化界面工具选择我们需要分析的进程进行连接 选择线程选项,点击底部检测死锁功能 查看死锁线程详情 线程1想获取的锁被线程0所持有,线程0想获取的锁被线程1持有,两个线程都在互相等待获取被对方所持有的锁资源,因此造成了死锁。Jstack首先通过jps查看当前运行的Java进程...

2018-05-19 16:35:19 2284

转载 多线程-synchronized实现原理分析

作者:EnjoyMoving,转自:https://zhuanlan.zhihu.com/p/29866981锁的内存语义synchronized的底层是使用操作系统的mutex lock实现的。内存可见性:同步快的可见性是由“如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前需要重新执行load或assign操作初始化变量的值”、“对一个变量执行...

2018-05-15 21:14:58 480

原创 锁机制-自旋锁、偏向锁、轻量级锁、重量级锁

自旋锁如果持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,只需让线程执行一个忙循环(自旋),等持有锁的线程释放锁后即可立即获取锁,这样就避免用户线程和内核的切换的消耗。 自旋等待不能代替阻塞,自旋等待本身虽然避免了线程切换的开销,但是要占用处理器时间,因此如果锁被占用时间很短,自旋等待效果就会非常好,但如果锁被占用的时间很长,...

2018-05-14 22:01:01 1276

转载 多线程-单例模式安全问题

作者:孤独烟,转自:http://rjzheng.cnblogs.com/饿汉式这种其实大家都懂,不多说,上代码。package singleton;public class Singleton1 { private static Singleton1 instance = new Singleton1(); private Singleton1 (){} ...

2018-05-05 17:53:18 231 1

原创 多线程-单生产单消费模型

创建资源对象,提供保存和取出方法(使用synchronized代码块实现)/** * Created by shaoqinghua on 2018/5/3. * 定义一个负责保存和取出的资源类 */public class Resource { /** * 定义成员变量,充当保存和取出的容器 */ private Object[] objs = n...

2018-05-03 22:48:39 233

空空如也

空空如也

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

TA关注的人

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