工具
softwareDragon
软件工程师一枚
展开
-
BeanUtils复制List对象
【代码】BeanUtils复制List对象。原创 2023-08-12 15:10:10 · 1564 阅读 · 0 评论 -
java 富文本html 转 word(带图片处理
java 富文本html 转 word(带图片处理原创 2023-02-15 14:24:38 · 3540 阅读 · 0 评论 -
freemark 使用ftl文件 生成word
<dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.23</version> </dependency>import freemarker.template.TemplateException;import java...原创 2022-05-27 15:21:34 · 423 阅读 · 0 评论 -
java List<Object> 深拷贝
//list深度拷贝List<Object> newList = new ArrayList<>();org.apache.commons.collections4.CollectionUtils.addAll(newList, new Object[list.size()]);Collections.copy(newList, list);备注:list为源数据原创 2021-05-27 10:33:18 · 800 阅读 · 0 评论 -
java 根据对应的年份取出在所有年份中的位置及取对应的数值
public class TestF { public static void main(String[] args) { String [] quanYearArray={"2016","2017","2018","2019","2020"}; String [] haveYearArray={"2018","2020"}; String [] haveValueYearArray={"2018的值","2020的值"}; Map .原创 2021-04-28 13:00:09 · 221 阅读 · 0 评论 -
java 线上应用故障排查之二:高内存占用
前一篇介绍了java线上应用故障排查之一:高CPU占用,这篇主要分析高内存占用故障的排查。搞Java开发的,经常会碰到下面两种异常:1、java.lang.OutOfMemoryError: PermGen space(jdk1.7及之前版本)2、java.lang.OutOfMemoryError: Java heap space要详细解释这两种异常,需要简单重提下Java内存模型。(友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogja...转载 2021-04-13 11:15:42 · 608 阅读 · 0 评论 -
java 线上应用故障排查之一:高CPU占用
一个应用占用CPU很高,除了确实是计算密集型应用之外,通常原因都是出现了死循环。(友情提示:本博文章欢迎转载,但请注明出处:hankchen,http://www.blogjava.net/hankchen)以我们最近出现的一个实际故障为例,介绍怎么定位和解决这类问题。根据top命令,发现PID为28555的Java进程占用CPU高达200%,出现故障。通过ps aux | grep PID命令,可以进一步确定是tomcat进程出现了问题。但是,怎么定位到具体线程或者代码呢?首先显示转载 2021-04-13 10:58:00 · 172 阅读 · 0 评论 -
java 通过反射创建对象并给属性赋值
import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class ReflectPO { private String h1; private String h2; public String getH1() { return h1; } public void setH1(String h1) { .原创 2021-04-12 17:17:22 · 1325 阅读 · 0 评论 -
java 通过网络流 把文件写到某个地方
@Testpublic void testCopyFile() throws Exception{ URL url = null;//把远程文件地址转换成URL格式 InputStream fin=null; FileOutputStream fileOut=null; try { url = new URL("http://ip地址/6456b1051fa6531cf9b36cacb9a0e92a.xlsx"); fin = url.o.原创 2021-04-08 17:29:44 · 366 阅读 · 0 评论 -
java 流与byte 互相转换,并与base64编码转换
在java 文件操作过程中,经常会用到stream to byte 还有 byteto stream ,有时还需将流转换成base64 编码,然后才好传输, 一旦受到这个base64的字符串,接收端,需要将这个还原成流,保存为文件。下面就是几个主要方法:1. streamtobyte:public static byte[] steamToByte(InputStream input) throws IOException{ ByteArrayOutputStream...原创 2021-04-08 10:11:59 · 1732 阅读 · 0 评论 -
java 时间日期 字符串转Date转LocalDate 后 计算相差天数
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHH");Date parse = sdf.parse(String.valueOf(temp));LocalDate taskLocalDate=parse.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();//相差天数...原创 2020-01-17 13:33:05 · 1123 阅读 · 0 评论 -
列表 转成 树形结构
List<Abc> chainList = mapper.selectList(bb);for (int i = chainList.size() - 1; i >= 0; i--) { // 当前要移动的记录 Abc child = chainList.get(i); // 如果当前节点没有父节点,则不用往下了 if (StringUtils.isEmpty(child.getParent())) { continue; }...原创 2020-12-10 18:05:59 · 676 阅读 · 0 评论 -
转java通过身份证号码获取出生日期、性别、年龄
转自:https://blog.csdn.net/u011199063/article/details/79564587身份证号码: 15位:6位地址码+6位出生年月日(900101代表1990年1月1日出生)+3位顺序码 18位:6位地址码+8位出生年月日(19900101代表1990年1月1日出生)+3位顺序码+1位校验码 1 2 3地区码: 1、 第一、二位表示省(自治区、直辖市、特别行政区)。 2、 第三、四位表示市(地级市、自治州、..转载 2020-11-12 11:08:55 · 1524 阅读 · 0 评论 -
转 java8一行代码获取昨天时间字符串
import java.time.Instant;import java.time.ZoneId;import java.time.format.DateTimeFormatter;import java.time.temporal.ChronoUnit;String date = DateTimeFormatter.ofPattern("yyyy-MM-dd") .withZone(ZoneId.systemDefault()).format(Instant.now().minus(1,转载 2020-10-28 17:35:37 · 549 阅读 · 0 评论 -
Cotroller 当遇到返回值和方法返回值不一样时的处理
大致代码如下:HttpServletResponse response;response.reset();//note 这里要添加reset,否则报异常 getWriter() has already been called for this response.response.setCharacterEncoding("UTF-8");//note 这里要设置编码,否则会乱码response.setContentType("application/json;charset=UTF-8");//.原创 2020-10-22 14:15:23 · 165 阅读 · 0 评论 -
(转载)java 导出数据为word文档(保持模板格式)
导出数据到具体的word文档里面,word有一定的格式,需要保持不变这里使用freemarker来实现:①:设计好word文档格式,需要用数据填充的地方用便于识别的长字符串替换 如 aaaaaaaaaaaaaaaa②:将word文档另存为 2003 xml格式③:找到需要替换的地方, 如 将 aaaaaaaaaaaa 修改为 ${userName} 如果是list展示,注意按照如下方式修改: <#list list1 as list1Ite...原创 2020-09-29 16:28:48 · 1067 阅读 · 1 评论 -
Redis中的数据类型类比java数据类型
String:等同于java中的,Map<String,String> list:等同于java中的Map<String,List<String>> set:等同于java中的Map<String,Set<String>> sort_set:可排序的set hash:等同于java中的:`Map<String,Map<String,String>> ...原创 2020-09-15 09:52:26 · 217 阅读 · 0 评论 -
java 按照List中对象某个属性值进行排序
按照A对象中的orderIndex的值进行排序private List<A> sortlist(List<A> list) { Collections.sort(list, new Comparator<A>() { @Override public int compare(A o1, A o2) { //按照值的大小进行升序排序 return o1.getOrderIndex()...原创 2020-07-15 09:14:57 · 1654 阅读 · 0 评论 -
java 单例 使用枚举和双重检查锁实现
package com.stuty.singleton;public class NbSingleton { private NbSingleton() { } public static NbSingleton getInstance(){ return ContainerHolder.HOLDER.instance; } private enum ContainerHolder{ HOLDER; private.原创 2020-07-13 16:20:32 · 225 阅读 · 0 评论 -
jdk8 HashMap put方法里执行的动作
1.如果HashMap未被初始化,则初始化2.对key求Hash值(使用位未运算,效率高),然后再计算下标3.如果没有碰撞,直接放入桶中(数组中)4.如果碰撞了,以链表的方式链接到后面5.如果链表长度超过了阀值8,就把链表转成红黑树6.如果链表长度低于6,就把红黑树转回链表7.如果节点已经存在就替换旧值(因key是用set进行存储的)8.如果桶满了(容量16*加载因子0.75),就需要resize(扩容2倍后重排)...原创 2020-07-04 11:35:31 · 105 阅读 · 0 评论 -
javaf 移动文件到指定的位置Files.move 覆盖之前同名文件
import java.io.File;import java.io.IOException;import java.nio.file.*;public class TestMoveFile { public static void main(String[] args)throws Exception { String temp="G:\\test\\1111.txt"; String targetTemp=temp.substring(0,temp.la.原创 2020-06-21 17:36:02 · 5116 阅读 · 0 评论 -
java 解压tar压缩包工具类
<!--操作压缩文件--><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.18</version></dependency>import org.apache.commons.compress.archivers.tar..原创 2020-06-21 17:32:35 · 961 阅读 · 0 评论 -
java 设计模式 模板方法模式构成
一、围绕抽象类,实现通用逻辑,定义模板结构,部分逻辑由子类实现优点1.复用代码2.反向控制(符合开闭原则)二、模式涉及的方法种类1.模板方法 2.具体方法(抽象类已经实现好的)3.钩子方法(子类可以重写)4.抽象方法(子类必须实现)...原创 2020-06-14 00:13:45 · 104 阅读 · 0 评论 -
spring BeanFactory和FactoryBean
一 BeanFactory1.BeanFactory是spring容器的根接口,定义了bean工厂的最基本的特性,例如根据bean的name从容器中获取bean实例,BeanFactory用作管理bean的容器二 FactoryBean1原创 2020-06-13 23:33:03 · 101 阅读 · 0 评论 -
java ReentrantLock死锁示例
public class DeadLockForReentrantLock { private static final ReentrantLock lock1=new ReentrantLock(); private static final ReentrantLock lock2=new ReentrantLock(); public static void main(String[] args) { new Thread(()->{ .原创 2020-06-11 14:15:23 · 521 阅读 · 0 评论 -
java synchronized 死锁示例
public class DeadLockDemo { private static final Object obj1=new Object(); private static final Object obj2=new Object(); public static void main(String[] args) { new Thread(()->{ synchronized (obj1){ try.原创 2020-06-11 14:05:10 · 327 阅读 · 0 评论 -
java 并发工具类 各维度解读
一:为了并发安全:互斥同步、非互斥同步、无同步方案1.1互斥同步(锁)1.1.1 锁的分类 从不同的角度分1.1.1.1 线程要不要锁住同步资源 锁住(悲观锁) 不锁住(乐观锁)1.1.1.2 多线程是否共享一把锁 可以(共享锁) 不可以(独占锁)例如ReentrantReadWriteLock 读写锁1.1.1.3 多线程竞争时,是否排队 排队(公平锁) 先尝试插队,插队失败再排队(非公平锁 为了提高效率)1.1.1.4 同一个线程是否可以重复获取同一把锁 可以(可重入,例如R..原创 2020-06-10 20:06:25 · 99 阅读 · 0 评论 -
java Runnable Callable Future 区别与联系
一:Runnable缺点1.不能返回一个返回值2.不能抛出检查异常二:Callable弥补了上述Runnable的两个缺点三:Callable和Future的关系1.我们可以用Future.get来获取Callable接口返回的执行结果,还可以通过Future.isDone来判断任务是否已经执行完成了,以及取消这个任务,限时获取任务的结果等2.在call()未执行完毕之前,调用get()的线程(假定此时是主线程)会阻塞,知道call方法返回了结果后,此时futrue.get()才会得原创 2020-06-07 23:19:57 · 166 阅读 · 0 评论 -
JAVA AQS的作用 内部原理解析
AQS是一个用于构建锁、同步器、协作工具类的工具类(框架)。有了AQS,更多的协作工具类都可以很方便得写出来。有了AQS,构建线程协作类就容易多了。AQS最核心的就是三个部分:一:.state:1.这里的state的具体含义,会根据具体实现类的不同而不同,比如在Semaphore里,它表示“剩余的许可证数量”,而在CountDownLatch中,它表示“还需要倒数的数量”,在ReentrantLock中,state表示锁的占有情况,包括可重入计数,当state为0的时候,表示Lock不被任何线程原创 2020-06-07 17:54:50 · 331 阅读 · 0 评论 -
java 并发控制流程类 方法 使用场景
一:CountDownLach 类 使用场景:一个线程等待其他一个或多个线程执行完后再继续它的操作例如:举个例子,有三个工人在为老板干活,这个老板有一个习惯,就是当三个工人把一天的活都干完了的时候,他就来检查所有工人所干的活。记住这个条件:三个工人先全部干完活,老板才检查常用方法:1.countDown 工人干完了调用这个方法2.await 老板分完活后,在等待检查,当CountDownLatch的值为0时,则老板开始检查二:Semaphore 使用场景:用于做限流处理,比如说同时只允许原创 2020-06-07 11:27:56 · 170 阅读 · 0 评论 -
java CopyOnWriteArrayList 适用场景 读写规则
一:适用场景1.读操作尽可能地快,而写即使慢一点也没有太大的关系2.读多写少:黑名单,每日更新;监听器:迭代操作远多余修改操作3.CopyOnWriteArrayList可以在迭代的过程中修改内容,但是ArrayList不行。4.CopyOnWrite的含义:创建新副本,读写分离。二:CopyOnWriteArrayList缺点1.数据一致性问题:CopyOnWrite容器只能保证数据的最终一致性,不能保证数据的实时一致性。所以如果你希望写入的数据马上能读到,请不要使用CopyOnW原创 2020-06-06 12:46:42 · 1411 阅读 · 1 评论 -
Java中Thread、ThreadLocalMap、ThreadLocal的联系与区别
一个Thread对应一个ThreadLocalMap,一个ThreadLocalMap可以对应多个ThreadLocal原创 2020-06-03 13:08:38 · 661 阅读 · 0 评论 -
java 已经有了synchronized ,为什么需要Lock及Lock的一些方法
1.效率低:锁的释放情况少,试图获得锁时不能设定超时、不能中断一个正在试图获得释放锁的进程2.不够灵活(读写锁更灵活):加锁和释放的时机单一,每个锁仅有单一的条件(某个对象),可能是不够的3.无法知道是否成功获取到锁...原创 2020-06-03 13:05:54 · 347 阅读 · 0 评论 -
pom mybatis-generator-maven-plugin
原创 2020-05-22 13:21:34 · 134 阅读 · 0 评论 -
java excel 导入导出 list套list 外层list是行数 里边是列数
/** * 导出Excel表 * @param expFilePath 导出的路径 * @param sheetName Sheet名称 * @param list 数据 * @throws IOException */public static String expExcel(String expFilePath,String sheetName,List<List<...原创 2020-04-22 15:56:15 · 1457 阅读 · 0 评论 -
Java 获取指定日期范围内的每个月,每季度,每一年
/** *根据时间范围获得月份集 * @return */ public static List<String> getRangeSet(String beginDate,String endDate){ /* Date1.after(Date2),当Date1大于Date2时,返回TRUE,当小于等于时,返...转载 2020-04-21 18:08:32 · 1960 阅读 · 0 评论 -
expiringmap 设置key 过期时间
<dependency> <groupId>net.jodah</groupId> <artifactId>expiringmap</artifactId> <version>0.5.8</version> </dependency> ExpiringMap<...原创 2020-03-01 17:44:09 · 1562 阅读 · 5 评论 -
Java 访问 文件属性
Java的File类提供了访问文件的属性,但File提供的功能有限。Java7的NIO.2在java.nio.file.attribbute包下提供了大量的工具类,通过这些工具类,开发者可以非常简单地读取,修改文件属性,这些工具类主要分为以下两类。XxxAttributeView:代表某种文件属性的视图。XxxAttributes:代表某种文件属性的集合,程序一般通过XxxAttrib...转载 2020-02-27 17:34:14 · 217 阅读 · 0 评论 -
linux 已知ip 用户名 密码 自动实现多台机器相连(公钥,私钥)
[ ! -f /root/.ssh/id_rsa.pub ] && ssh-keygen -t rsa -p '' &>/dev/null # 密钥对不存在则创建密钥while read line;do ip=`echo $line | cut -d " " -f1` # 提取文件中的ip user_name...原创 2020-02-27 11:05:58 · 223 阅读 · 0 评论 -
linux crontab 定时任务 解压文件 流程 详解
第一步:查看crontab是否开启service crond status确保处于启动状态第二步:创建tar包备份文件夹mkdir /root/aa/backuptar第三步:编写shell脚本vim /root/aa/dealtar.sh内容为:#!/bin/shcd /root/aafind /root/aa -maxdepth 1 -type f...原创 2020-02-26 16:41:28 · 798 阅读 · 1 评论