- 博客(36)
- 收藏
- 关注
原创 Spring Cloud Eureka 源码分析(一)
EurekaServerEurekaServer自我保护期望的发送续约的客户端实例数每分钟续约阈值实际每分钟续约值EurekaServer实例剔除任务剔除逻辑小结EurekaServer自我保护自我保护是发生在Server端的PeerAwareInstanceRegistryImplprivate void scheduleRenewalThresholdUpdateTask() { timer.schedule(new TimerTask() { @Override
2021-02-23 20:27:10
355
原创 tomcat参数以及tcp连接-性能调优实验
TCP 三次握手进入的半连接队列和全连接队列TOMCAT的acceptCount和操作系统的TCP全连接队列关系TOMAT最大连接数和线程数以及TCP全连接的关系jmeter的连接超时时间和TCP状态监测,jmeter压测tomcattomcat调优实验jconsole远程监控tomcat的MBean
2019-11-06 11:14:13
5510
6
原创 Hystrix降级和熔断实验
代码实验Hystrix降级和熔断1.Hystrix 滑动窗口配置2.熔断状态切换(CLOSE,OPNE,HALF_OPEN)3.线程池打满服务降级和熔断4.某个时间窗口内的buket时间内服务请求书和错误率导致降级和熔断5.hystrix.stream 或者Hystrix Dashboard 使用
2019-11-01 14:55:48
1325
原创 SpringBoot自动装配
Springboot自动装配-自定义starter实践与踩坑什么是spring-boot的starter自定义starter步骤示例自动装配原理自定义Starter注意事项新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必...
2019-09-17 18:20:41
1159
原创 ThreadLocal源码分析
ThreadLocal源码一些思考ThreadLocal经常出现在各大框架:Hibernate/struts2/spring,主要完成的功能就是同一线程内,变量在不同方法中(非入参形式)传递,不同线程之间传递的变量互不影响。这里所说的变量比如session,connection等等,下图就是对这句话的完美阐述:...
2019-09-17 11:22:55
372
原创 Spring环境Environment
Spring环境Environment标准环境AbstractEnvironmentprivate final MutablePropertySources propertySources = new MutablePropertySources(this.logger);public AbstractEnvironment() { customizePropertySourc...
2019-01-25 16:17:43
1892
原创 Spring注解事件源码分析
Spring注解事件源码分析@EventListener 解析处理器 EventListenerMethodProcessor@EventListener事件监听器ApplicationListenerMethodAdapter事件发布器ApplicationEventMulticaster事件对象事件源@EventListener 通知业务逻辑方法限制注解事件处理阶段@Eve...
2019-01-25 15:23:05
1497
原创 Spring事务源码分析
事务是什么在Spring初始化bean的接入的什么时候打开一个Session什么时候关闭一个SessionSession和ThreadLocal区别和联系@EnableTransactionManagement@Import(TransactionManagementConfigurationSelector.class)public @interface EnableTransact...
2018-12-29 18:28:35
330
原创 Spring AOP源码分析
Spring AOP源码分析配置类AopAutoConfiguration@Configuration@ConditionalOnClass({ EnableAspectJAutoProxy.class, Aspect.class, Advice.class, AnnotatedElement.class })@ConditionalOnProperty(prefix = "s...
2018-12-18 20:05:53
463
原创 分布式架构(二)TCP/IP协议
分布式架构(二)通信协议说到通信协议不得不提OSI七层协议和TCP/IP四层协议OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型 ,是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了7层。每一层都有相关、相对应的物理设备,比如路由器,交换机。OSI七层模型是一种框架性的设计方法,建立七层模型的主要目的是: 解决...
2018-07-27 19:12:22
1140
原创 Java的SPI-ServiceLoader详解
Java的SPI-ServiceLoader详解Java SPI机制SPI的全名为Service Provider Interface.大多数开发人员可能不熟悉,因为这个是针对厂商或者插件的。 我们系统里抽象的各个模块,往往有很多不同的实现方案,比如日志模块的方案,xml解析模块、jdbc模块的方案等。 面向的对象的设计里,我们一般推荐模块之间基于接口编程,模块之间不对实现类进行硬编码...
2018-07-24 11:11:09
2561
1
转载 hash冲突解决方案
hash冲突解决方案一)哈希表简介 非哈希表的特点:关键字在表中的位置和它之间不存在一个确定的关系,查找的过程为给定值一次和各个关键字进行比较,查找的效率取决于和给定值进行比较的次数。哈希表的特点:关键字在表中位置和它之间存在一种确定的关系。哈希函数:一般情况下,需要在关键字与它在表中的存储位置之间建立一个函数关系,以f(key)作为关键字为key的记录在表中的位置,通常称这个函数...
2018-07-18 19:07:37
374
原创 CopyOnWriteArrayList源码分析
CopyOnWriteArrayList源码分析容器一般分为三类:普通容器,同步容器,并发容器。 对于容器我们每天都再用,无非就是对容器的增删改查和迭代,单个操作都没有问题,加上多线程有修改、有迭代、有查询。如果你遇到如下问题但对原理说不清楚,还是建议先看下我之前的博文Java容器迭代时修改问题及方案 问题诸如: 迭代时没有则添加抛出异常ConcurrentModification...
2018-07-18 16:39:38
1557
原创 CompletionService源码分析
CompletionService源码分析本文假设你已经会使用线程池以及了解FutureTask了,不熟悉的源码强烈建议看下之前的博文Java线程池源码分析,读完在读本片博文轻松加愉快。还是总结下任务的提交流程: 1)submit(taks) task为Callable或者Runnable。 2)任务包装成FutureTask,执行executor(futureTask)。 ...
2018-07-18 11:52:21
930
原创 CyclicBarrier源码-JUC线程同步工具3
CyclicBarrier源码-JUC线程同步工具3这是线程同步的第三个工具类,跟前文CountDownLatch 如果理解不深入,会觉得他们很相似,觉得都是一个主线程在等待其它子线程完成自己的任务,主线程运行。本文会介绍它们两个的区别,以及内部实现。何为CyclicBarrier CyclicBarrier 是一个让一系列线程集合互相等待直到一个公共屏障点(barrier point)...
2018-07-16 16:45:43
688
原创 CountDownLatch源码-JUC线程同步工具2
CountDownLatch源码-JUC线程同步工具2上篇博文将的线程同步工具信号量Semaphore源码 以停车车辆坑位表示并发量来展开阐述的。何为CountDownLatchCountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,...
2018-07-13 19:09:56
906
原创 Semaphore源码-JUC线程同步工具1
Semaphore源码-JUC线程同步工具1之前JAVA锁Lock说过一句话线程获取到了锁就是AQS得成员state+1了,今天讲的信号量Semaphore还是跟它有关系。何为信号量Semaphore是计数信号量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acq...
2018-07-13 17:41:20
1008
原创 PriorityBlockingQueue源码-JUC阻塞队列3
PriorityBlockingQueue源码-JUC阻塞队列3它是我们要说的第三个BlockingQueue
2018-07-13 16:23:57
265
原创 LinkedBlockingQueue源码-JUC阻塞队列2
LinkedBlockingQueue源码-JUC阻塞队列2上篇讲过ArrayBlockingQueue源码
2018-07-12 19:06:58
885
原创 ArrayBlockingQueue源码-JUC阻塞队列1
JUC-阻塞队列前面写了好久片跟锁有关的博客,就是为了接下来的JUC系列文章,对锁熟悉的看JUC事半功倍了,我是强烈建议大家看下我之前的两篇关于Java锁的文章ReentrantLock可冲入锁 以及条件锁,没办法lock是整个JUC的基础。我们今天主要看下阻塞队列的几个实现类:先看最简答的ArrayBlockQueue...
2018-07-04 19:18:41
1813
原创 Java线程池源码分析(一)
Java线程池源码分析使用线程池场景,好处,不在本文范围内,我们分析的是源码。 带着几个问题我们来分析源码: 线程池构造方法的参数的含义,线程池的数量设置,阻塞队列是如何选择的 线程池是异步的那么结果放到哪里了又是如何拿到结果的 线程池提交runnable和callable是有什么区别和联系还是老套路上一段代码,从怎么使用开始入手:public void g...
2018-06-29 18:01:51
9319
6
原创 事务隔离级别和传播行为
数据库隔离级别和传播行为终极篇曾经我以为我对数据库事务和隔离级别很熟悉了,至少以前整理过,看过网上很多文章,有些带有命令行操作的印象挺深,但是事务传播(包块调用外部系统服务)、分布式锁、mybatis一级缓存等一起存在,导致了很多看起来听不可思议的问题,这都是线上案例。项目中架构师是否跟你说类似的话,事务最好不要嵌套?...
2018-06-26 12:02:49
1059
原创 Java分布式锁(一行代码搞定)
Java分布式锁(一行代码搞定)前面几篇文章都是介绍的java单机锁,但是目前很多应用都是分布式的(不同jvm进程),单机锁已经不能满足应用的需求了...
2018-06-20 17:49:50
6692
1
原创 Java锁lock源码分析(三)读写锁
Java锁lock源码分析(三)读写锁前文Java锁Lock源码分析(一)提过在java的Lock中获取锁就表示AQS的volatile int state =1表示获取到了独占锁,state>1表示当前线程重入锁(获取锁了再次获取到了锁)即大于0就表示获取到了独占锁。独占就意味着排队,失败,系统吞吐量下降,用户体验下降等等。有些情况不要独占,比如说读与读不互斥,读与写互斥,写与写互...
2018-06-19 16:32:10
1509
2
原创 Java锁Lock源码分析(二)条件锁
本篇博文主要分析条件锁的源码实现、以及状态两个队列的变化: 1)Condition的使用场景 2)lock方法的队列(FIFO双向无环链表)官方点说是同步队列 sync queue 3)condition队列(FIFO单向队列) 官方点说是条件队列 condition queue 4) await和signal方法被调用两个队列的变化图本文是依赖于上篇博文Java锁...
2018-03-01 12:06:43
2826
2
原创 Java锁Lock源码分析(一)
Java中的锁Lock源码分析(一)Java中的锁有很多,同时也是了整个并发包的基础,可以说明白了锁整个并发包你也就能明白一半了,如果之前你有所了解的话java中的锁你或许对这些名词有些概念:独占锁、共享锁公平锁、非公平锁、重入锁条件锁读写锁本节要点: 0)锁是如何表示的(怎么样就代表获取到了锁) 1)volatile在作用 2)lock的源码分析 ...
2018-02-27 15:59:26
6291
2
原创 Java集合迭代时修改
Java集合迭代时修改本文主要分如下几个要点: 0)Java集合分类 1)对于熟悉JDK集合源码的帮你加深对ConcurrentModificationException的下印象 2)对于迭代时修改提供一个正确的姿势。 3)单线程和多线程环境下迭代时修改的方案PS:本文不会详细讲解每个集合的源码,也不会画出集合的继承关系(网上有太多详细的讲解和关系图...
2018-02-11 12:09:58
5039
原创 MyBatis源码(六)之动态Sql解析运行阶段BoundSql
上篇博文讲述的是dao方法参数是如何传递到Executor的MyBatis源码(五)之动态Sql解析运行阶段参数处理 一定要有这个基础,在进行本博文你将看到一条Sql是如何拼装出来的。我把运行时信息打印出来,主要是在顺便回顾下之前的讲解读取mapper过程,解析select insert 等标签的时候有一行代码是获取SqlSouce的,解析的时候有一个动态标签 if foreach where 等
2017-11-24 13:28:43
1372
原创 MyBatis源码(五)之动态Sql解析运行阶段参数处理
上篇博文分析到Mapper文件的读取,以及启动过程动态Sql的解析部分 MyBatis源码(四)之mapper文件解析和动态Sql解析启动阶段本博文继续动态Sql的解析,在运行时的解析。前文也提过,在动态Sql中,sql的最终生成是依靠传入的参数来决定的。所以在继续分析之前先来分析下是mybatis是怎么接收参数的。dao参数上可能有@Param注解,参数中可能有集合Collection,如何跟之前
2017-11-22 18:49:49
702
原创 MyBatis源码(四)之mapper文件解析和动态Sql解析启动阶段
上篇博文介绍了Mybatis 执行流程全貌 非常重要。本博文mybatis启动过程是如何解析配置文件的。 这还得从Spring的配置文件中SqlSessionFactoryBean 创建SqlsessionFactory说起。该Bean实现了InitializingBean【又是一个Spring的拓展点】在Spring实例化设置和属性之后会触发afterPropertySet的调用。 每个mapp
2017-11-17 18:35:18
812
原创 Mybatis源码(三)之SqlSession执行流程全貌
上一篇博文解释了SqlSession是如何创建的Spring整合mybatis创建SqlSession本篇博文注重你对流程的理解,可以增长你的内功修为。 后续的博文也会写一些实现细节跟你平时调试很相关,比如像动态Sql,读取配置文件等。 后者注重于你调试(就是码农干的事情),前者让你从全局更了解Mybatis工作流程。 了解全貌之后,遇到什么问题,或者着重看那块,能帮你快速定位源码,省下的就是
2017-11-10 18:55:40
751
原创 Mybatis源码(二)之Spring整合mybatis创建SqlSession
Spring未整合Mybatis和整合之后Mybatis获取的方式:Spring没有整合Mybatis之前,获取SqlSession很简单就是DefaultSqlSessionFactory.openSession();Spring整合Mybatis的时候,稍复杂些: 扫描dao,注册BeanDefinition并setBeanClass=MapperFactoryBeanSqlSessionT
2017-11-08 19:00:14
3359
原创 Mybatis源码(一)之Spring整合Mybatis扫描dao
带着几个问题我们来分析下Spring是如何整合Mybatis的1.Spring是如何扫描Dao,将其转换成BeanDefinition注册到BeanFactory的? 2.为什么我们可以直接使用dao接口调用方法就能操作数据库了? 3. 原生Mybatis的使用和jdbc的使用与跟Spring整合之后,我们到底哪里方便使用了你可能猜到: 问题一使用Spring的拓展接口。 问题二使...
2017-11-08 18:58:47
4257
原创 Mybatis源码之温故jdbc
我们回顾下之前没有使用Mybatis,使用原生态jdbc的场景public Integer insert(User user) { Connection conn = null; PreparedStatement preparedStatement = null; String insertSql = "INSERT INTO USER (name,
2017-11-08 10:28:52
485
原创 Java单例
Java单例模式任何一个系统的大部分配置文件读取、线程安全类工具类、常量类等都会使用单例模式---不要说你没见过,有可能见过但是知道是单例模式,还有你确定你懂单例模式吗?你有梦想吗?哈哈,我想当架构师,我想当CTO,我想当一名技术极客----狗屁!!!先醒一醒,你凭什么能成功,靠嘴皮子,还是靠意淫?单例其实是分成了如下的四种方式单例—懒汉模式单例—饿汗模式*单例—双重检查单例–基于类初始化
2017-09-05 22:32:16
399
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人