- 博客(34)
- 资源 (3)
- 收藏
- 关注
原创 forkJoin源码解读
ForkJoinPool 的源码涉及到大量的位运算,这里会把核心部分说清楚,想要理解的更深入,还需要大家自己一点点追踪查看结合上面的铺垫,你应该知道 ForkJoinPool 里有三个重要的角色:ForkJoinWorkerThread(继承 Thread):就是我们上面说的线程(Worker) WorkQueue:双向的任务队列 ForkJoinTask:Worker 执行的对象源码分析的整个流程也是围绕这几个类的方法来说明,但在了解这三个角色之前,我们需要先了解 ForkJoinPool
2021-11-22 14:22:03
1201
原创 beetlsql对怎么实现对mapper进行代理的
BeetlSqlBeanRegister入口public class BeetlSqlBeanRegister implements ImportBeanDefinitionRegistrar, ResourceLoaderAware, EnvironmentAware { private ResourceLoader resourceLoader; Environment env;// ApplicationContext applicationContext; BeetlSqlCo.
2021-04-27 14:52:37
190
原创 beetlsql不同数据库处理源码解读
查询示例代码如下 public static void main(String[] args){ SQLManager sqlManager = SampleHelper.getSqlManager(); UserSelectMapper mapper = sqlManager.getMapper(UserSelectMapper.class); S01MapperSelectSample sample = new S01MapperSelectSam
2021-04-26 18:39:43
326
原创 volatile的定义与实现原理
Java语言规范第3版中对volatile的定义如下:Java编程语言允许线程访问共享变量,为了 确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言 提供了volatile,在某些情况下比锁要更加方便。如果一个字段被声明成volatile,Java线程内存 模型确保所有线程看到这个变量的值是一致的。 1)Lock前缀指令会引起处理器缓存回写到内存。Lock前缀指令导致在执行指令期间,声 言处理器的LOCK#信号。在多处理器环境中,LOCK#信号确保.
2021-04-16 15:57:20
169
1
原创 java内存模型
在Java中,所有实例域、静态域和数组元素都存储在堆内存中,堆内存在线程之间共享 (本章用“共享变量”这个术语代指实例域,静态域和数组元素)。局部变量(Local Variables),方 法定义参数(Java语言规范称之为Formal Method Parameters)和异常处理器参数(Exception Handler Parameters)不会在线程之间共享,它们不会有内存可见性问题,也不受内存模型的影 响。 Java线程之间的通信由Java内存模型(本文简称为JMM)控制,J.
2021-04-02 18:08:24
72
原创 spring bean循环依赖问题
Spring容器能对构造函数配的的Bean进行实例化有一个前提,即Bean构造函数入参引用的对象必须已经准备就绪。由于这个机制的限制,如果两个Bean都采用构造函数注入,而且都通过构造函数入残引用对方,就会发生类似线程死锁的循环依赖问题。当S启动pring IoC容器时,因为存在循环依赖问题,Spring容器就无法成功启动。如何解决这个问题呢?用户只需修改Bean的代码,将构造函数注入方式调整为属性注入方式就可以了...
2021-04-01 18:14:21
150
原创 spring依赖注入有几种方式
Spring支持两种依赖注入方式,分别是属性注入和构造函数注入、除此之外,spring还支持工厂方法注入方式。属性注入属性注入指通过setXxx()方法注入Bean的属性值或依赖对象。由于属性注入方式具有可选择性和灵活性高的优点,因此属性注入是实际应用中最常采用的注入方式。构造函数注入构造函数注入是除属性注入外的另一种常用的注入方式,它保证一些必要的属性在Bean实例化时就得到设置,确保Bean在实例化后就可以使用。工厂方法注入工厂方法是在应用中被经常使用的设计模式,它也是控制反转和
2021-04-01 18:00:25
1178
原创 Benfactory、ApplicationContext、FactoryBean的区别与联系
BeanFactory: 以Factory结尾,表示它是一个工厂类,是用于管理Bean的一个工厂,也就是IOC容器或对象工厂FactoryBean:以Bean结尾,表示它是一个Bean在Spring中,所有的Bean都是由BeanFactory(也就是IOC容器)来进行管理的。但对FactoryBean而言,这个Bean不是简单的Bean,而是一个能生产或者修饰对象生成的工厂Bean,它的实现与设计模式中的工厂模式和修饰器模式类似ApplicationConte...
2021-03-31 18:12:23
383
原创 springbean生命周期
InstantiationAwareBeanPostProcessorBeanNameAwareBeanFactoryAwareBeanPostProcessorInitializingBeaninit-methodDisposableBeandestroy-method
2021-03-31 15:24:34
90
原创 volatile
引言在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。它在某些情况下比synchronized的开销更小,本文将深入分析在硬件层面上Inter处理器是如何实现Volatile的,通过深入分析能帮助我们正确的使用Volatile变量。术语定义术语 英文单词 描述 共享变量 .
2020-11-26 21:29:37
126
原创 几种常见排序
冒泡排序、双向冒泡排序、插入排序、选择排序、快速排序/** * 冒泡排序 通过相邻元素的比较和交换,使得每一趟循环都能找到未有序数组的最大值或最小值。 最好:O(n),只需要冒泡一次数组就有序了。 最坏:O(n²) 平均: *//** * 单向冒泡排序 * 通过相邻元素的比较和交换,使得每一趟循环都能找到未有序数组的最大值或最小值。 */public class...
2019-12-29 17:30:49
166
原创 怎样打造高效、完备的系统架构
岁月不居,时节如流,在***的新年致辞中我们又涨了一岁,转眼间做程序员已经六年时间了,这些年做了很多项目也有很多收获,自己也总结了一套理论。下面就结合自己的工作经验,学习认知及实际实践来谈下怎么才能构造一个高性能完备的技术架构。谈到高性能大家首先想到的是应用服务的qps,并发数,响应时间。其实一个系统的性能每一个指标都可能影响整体系统的性能,并成为瓶颈,所以要打造一个高性能的系统架构就需要一个...
2019-12-03 17:01:57
1127
原创 java利用位异或加密解密实现
private static final String key = "we4ewe9c31dweewjojz9sdeh3p";public static String decode(String content) { byte[] contentBytes = Base64.getDecoder().decode(content); byte[] keyByte...
2019-12-03 17:00:32
325
1
原创 lambda 表达式应用
基本语法Lambda 表达式为 Java8 带来了部分函数式编程的支持。Lambda 表达式虽然不完全等同于闭包,但也基本实现了闭包的功能。和其他一些函数式语言不一样的是,Java 中的 Lambda 表达式也是对象,必须依附于一类特别的对象类型,函数式接口。Lambda 表达式的一般语法: (type1 param1, type2 param2, ..., typeN para...
2019-11-15 17:14:09
228
原创 git常用指令
git branch 查看本地分支git branch -a 查看所有分支git checkout dev // 切换到dev分支git branch dev //创建一个分支git checkout -b dev // 创建dev分支,并切换到dev分支git checkout -b dev origin/dev // 创建远程origin的dev分支到本地devgit ...
2019-06-12 16:36:17
135
原创 addShutdownHook钩子函数实例
addShutdownHook钩子函数在服务关闭时执行,防止重启服务丢失当前正在执行的任务,但是kill -9 就不行了,通过下面实例你可以很容易上手怎么使用public class Utility { /** * Convert current time into int type * @param * @return timestamp ...
2019-05-06 11:45:52
752
原创 fgc解决思路
查看服务gc次数jstat -gc 9 5000 ,9是运行服务的pid 5000表示5秒输出一次jstat命令命令格式:jstat [Options] vmid [interval] [count]参数说明:Options,选项,我们一般使用 -gcutil 查看gc情况vmid,VM的进程号,即当前运行的java进程号interval,间隔时间,单位为秒或者毫秒cou...
2019-03-07 11:16:10
1891
原创 记一次调用时长优化之路,暨httpclient优化之路
背景由于公司部分业务是php开发,而我所在的部门是java开发,这之间就需要相互调用,于是就有了代理项目,负责java通过restful方式调用php接口服务, 随着业务量的增长rt时间越来越慢,于是开始了排查。定位问题 通过pingpoint如下图分析得知接口耗时主要花费在建立连接上。查看项目代码得知调用http使用的是http-client4.5.5,发现没用连...
2019-03-06 19:16:54
2665
2
原创 持续集成工具调研
1.什么事CI/CD大师Martin Fowler认为持续集成是一种软件开发实践,在实践中团队开发成员会频繁的进行任务的集成,通常每个成员每天都会集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建来验证,从而尽快地发现集成错误,快速进行修复。持续集成(Continuous Integration)、持续部署(Continuous Deployment)也有分为持续集成(...
2019-03-06 17:30:50
985
1
转载 ThreadPoolExecutor逻辑结构和工作方式
构造函数中需要传入的参数包括corePoolSize、maximumPoolSize、keepAliveTime、timeUnit和workQueue。要明确理解这些参数(和后续将要介绍的参数)的含义,就首先要搞清楚ThreadPoolExecutor线程池的逻辑结构。 一定要注意一个概念,即存在于线程池中容器的一定是Thread对象,而不是你要求运行的任务(所以叫线程池而不叫任务池也不
2017-07-18 16:06:07
441
原创 线程池
线程池什么是线程池 线程池的组成部分 线程池的实现原理 线程池的应用场景 使用线程池的优缺点什么是线程池线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务线程池类图线程池重要的类 Executor 接口只有一个 方法,execute,并且需要 传入一个 Runnable 类型的参数 ExecutorService 接口继承了 Executor,并且提
2017-07-17 11:22:43
4791
原创 elasticsearch安装教程,集群搭建及jdbc同步 elasticsearch安装 elastic-head安装
elasticsearch安装教程,集群搭建及jdbc同步elasticsearch安装下载安装之前,请确认已安装好最新版的JDK版本,下载linux安装包,我下载的是5.2.2版本 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.2.2.tar.gz 解压 tar -zxvf elastic
2017-03-20 15:49:33
689
转载 用grunt搭建自动化的web前端开发环境-完整教程
jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学、不用!1. 前言各位web前端开发人员,如果你现在还不知道grunt或者听说过、但是不会熟练使用grunt,那你就真的真的真的out了(三个“真的”重复,表 示重点)。至于grunt的作用,这里不详细说了,总之你如果做web前端开发,你一定要用grunt。还有一点,
2016-02-15 16:35:24
604
原创 预搜索(零宽断言)正则表达式
基本上一些教材介绍预搜索都是真么介绍的,理解起来着实费力,网上介绍的也都不全面,下面通过几个例子,看完后你自然会理解1.a(?=b)正向搜索,找出出现a并且出现a位置后面是b的符合a字符 例如 affgfgabdff会找标红的a2.a(? a(?affgfgabdff会找出标红的a。3.a(?!b)正向搜索,找出出现a并且a后面不是b的符合a字符 例如affgfgabdff会找出
2014-02-19 23:37:24
1648
原创 openoffice编译
编译openoffice是个费力的活,建议最好建个虚拟机,在虚拟机里跑,编译环境很重要,说不了装的什么软件就会影响编译,想我电脑装了UItraEdit,关联了js格式文件就导致编译openoffice出错,而且报的错误会往其他方向上误导。编译具体步骤我就不说了我贴上官方的方法http://wiki.openoffice.org/wiki/Documentation/Building_Guide
2013-05-30 16:31:06
1803
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人