![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 76
新时代的程序猿
这个作者很懒,什么都没留下…
展开
-
基于EasyExcel二开支持导入合并的单元格解析二
在经历了EasyPoi的坑后决定后面放弃使用这个工具(垃圾玩意对不起GVP徽章)。偶然间看到了阿里开源的EasyExcel工具,在看了其api和实现思路后发现是一个很好的工具,随后调研了特性发现并不支持自动合并含有合并单元格的数据,需要自行在ReadListener中处理。如果每一个需求都要自行处理一遍那么效率实在是有点低下,随后便开始研究EasyExcel的处理原理。...原创 2022-06-01 00:31:40 · 689 阅读 · 0 评论 -
基于EasyExcel二开支持导入合并的单元格解析一
由于产品需求需要导入含有合并单元格的excel文件,在经历的EasyPoi的坑后,萌生了对EasyExcel二开的想法原创 2022-06-01 00:05:27 · 771 阅读 · 0 评论 -
基于GSON实现单例和自定义日期输入与输出
上篇写道由于Fastjson漏洞问题导致系统频繁升级之后基于Jackson封装了一个支持多样化日期输出与输入的JSON转换工具,但实际在后面的使用中由于系统架构较老与Spring自带Jackson冲突较为严重,无奈之下只能放弃使用GSON来进行JSON转换。GSON在使用中的问题GSON本身使用是以new形式出现的,在实际使用中并不友好,在应对实际场景中有以下几个问题:1、对于大并发来说频繁new对象也会造成一些内存占用。2、对于date转换是采用DateFormat进行转换同时为了防止并发时产生问原创 2020-08-29 11:40:32 · 565 阅读 · 0 评论 -
基本Jackson实现兼容国内常见日期时间格式反序列化及序列化工具
目前市面上常见的json序列化工具主要有几种json-lib、jackson、gson、fastjson。各自的特点这里就不说了,google一下很多介绍可以看。每家的JSON都有各自的特色,我在这之前的项目中曾大量使用到Fastjson,但是由于近年漏洞频出严重影响线上稳定,随后针对Gson和Jackson进行调研。1、GsonGson有着丰富的文档和api接口,一般可以满足日常业务使用,但Gson有一个问题在于每次使用时都需要new一个Gson对象或者使用GsonBuilder.create()来原创 2020-06-10 11:04:31 · 2883 阅读 · 0 评论 -
对于时间轮算法的一些思考
最近一直在使用当当的分布式任务调用框架,但是由于zk集群是依赖别人的一直想换一套耦合性较低的,偶然的机会在看完许大神开源的xxl-job后萌生了自研的想法。在查询了一些资料后发现大部分的延迟算都是基于时间轮,例如kafka的延迟队列。一、为什么使用时间轮算法时间轮是一种高效来利用线程资源来进行批量化调度的一种调度模型。把大批量的调度任务全部都绑定到同一个的调度器上面,使用这一个调度器来进行所...原创 2019-08-14 11:28:04 · 1892 阅读 · 0 评论 -
mybatis generator生成工具
在pom中增加对mybatis generator插件的支持,我这里将xml配置文件放到了test目录里面,实际打包时可以不打这个目录<build> <plugins> <plugin> <groupId>org.mybatis.generator</groupId>...原创 2019-04-03 14:40:05 · 143 阅读 · 0 评论 -
JDK SPI机制随笔
SPI(Service Provider Interface)是JDK自带的一种服务发现机制,类似于Spring的IOC思想,例如Mysql Driver等都使用了JDK的SPI。SPI设计目标:1、面向接口编程,各模块间不耦合具体实现;2、各接口实现间实现可插拔机制,不需要修改具体代码;3、需要服务发现机制;SPI的约定:1、当一个provider有多种实现时,一般在jar包的...原创 2019-02-20 12:45:41 · 177 阅读 · 0 评论 -
单例模式-双重锁校验
单例模式–双重检验锁真的线程安全吗单例模式是我们最熟悉不过的一种设计模式,用来保证内存中只有一个对象的实例。虽然容易,但里面的坑也有很多,比如双重检验锁模式(double checked locking pattern)真的是线程安全的吗?起因在对项目进行PMD静态代码检测时,遇到了这样一个问题Partially created objects can be returned by the...原创 2019-02-19 14:58:20 · 4225 阅读 · 1 评论 -
ConcurrentHashMap1.8版本部分代码分析
final V putVal(K key, V value, boolean onlyIfAbsent) { if (key == null || value == null) throw new NullPointerException(); int hash = spread(key.hashCode()); int binCount = 0;...原创 2019-02-21 14:22:58 · 102 阅读 · 0 评论 -
HashMap hash冲突
HashMap是以key的hash值来确定value的位置,当hash值冲突时1.7和1.8的处理方式不同 1.7 根据Hash值获取到对应的entry,然后将冲突值插入到entry的头部。 1.8 基于entry的node,在hash冲突小于8时将冲突值追加到node尾部。当冲突大于8时会将node转换为红黑树...原创 2018-07-22 21:50:02 · 370 阅读 · 0 评论 -
DelayedQueue剖析
DelayedQueue是一个基于ReentrantLog、PriorityQueue实现的延迟队列,PriorityQueue内部维护了一个数组。public class PriorityQueue&amp;amp;lt;E&amp;amp;gt; extends AbstractQueue&amp;amp;lt;E&amp;amp;gt; implements java.io.Serializable { priv原创 2018-07-22 21:27:13 · 1290 阅读 · 0 评论 -
基于ReentrantLock写一个简单的消息队列
基于ReentrantLock和Condition来实现的一个消息队列 provider生产者:public class ProviderThread implements Runnable { private ReentrantLockQueue<String> queue; public ProviderThread(ReentrantLockQueue&...原创 2018-07-22 15:50:24 · 217 阅读 · 0 评论 -
一致性哈希
一致性哈希算在一定程度上弥补了简单哈希算法的缺点。 一致性哈希算法包含以下几个概念: 1、哈希槽:用来存储哈希数据。 2、哈希环:每个哗然槽之间相互首尾相连最终针开发一个哈希环。 一致性哈希在存储数据时有以下几步: 1、根据key值计算出对应的哈希槽。 2、找到对应的哈希槽,将key值存储在相应位置。 普通哈希算和一致性哈希算法相比: 1、易扩展,普通哈希算法一般是根据哈希值和服务...原创 2018-07-22 15:43:47 · 137 阅读 · 0 评论 -
java数据结构总结
ArrayListArrayList是基于数组实现的一个集合随机访问速度快,循环到某一个下标时停止。插入速度较慢,循环到某一个下标时插入一个新数据,然后将后面数据的下标+1更新速度快,循环到某一下标时更新当前数据删除速度较慢,同插入原理,需要更新删除点后的其它数据下标。初始化默认长度为10,可以指定size大小。长度递增为:旧容量*3/2+1构造方法可以接收一个int型参数来做为...原创 2018-04-06 23:00:34 · 128 阅读 · 0 评论 -
快速排序
@Test public void testSort(){ int[] data = {5,1,9,7,2,3,0,4,8,6}; this.quickSort(data,0,data.length-1); for(int n:data){ System.out.print(n+","); }...原创 2018-04-06 22:55:38 · 106 阅读 · 0 评论 -
冒泡排序的四种变形
/** * 冒泡排序法 */ public void bubbleUp1(Integer[] numberArray){ int loopNumber = 0; for(int i=0;i<numberArray.length-1;i++){ for(int j=0;j<numberArray.leng...原创 2018-04-06 22:53:56 · 791 阅读 · 0 评论 -
java编程思想-继承心得
java面向对象编程的特性-继承原创 2016-04-27 15:13:44 · 883 阅读 · 0 评论