![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
Terisadeng
工作繁忙,私信和评论提的问题可能没时间复现解答(。・_・。)ノI’m sorry~
展开
-
使用javaassist动态修改字节码文件
package mock;import javassist.ClassPool;import javassist.CtClass;import javassist.CtMethod;import javassist.LoaderClassPath;public class ModifyClass { private static final String LINE_SEPARATOR = "\n"; private ModifyClass() { } /*原创 2022-01-14 17:04:04 · 724 阅读 · 0 评论 -
comons-io包实现文件动态读取
package demo;import org.apache.commons.io.filefilter.FileFilterUtils;import org.apache.commons.io.monitor.FileAlterationListener;import org.apache.commons.io.monitor.FileAlterationMonitor;import org.apache.commons.io.monitor.FileAlterationObserver;.原创 2021-01-29 16:50:10 · 281 阅读 · 0 评论 -
jvm相关监控
首先执行top命令查看cpu占用过高的进程id接着执行top -Hp 进程id获取进程内cpu占用最高的线程idTIME列是各个java线程耗费的cpu时间,将线程id使用printf "%X\n" 线程id转成十六进制然后使用jstack 进程id | grep 线程id十六进制,找到这个线程的堆栈,然后分析代码逻辑。使用jstat命令查看jvm监测统计jstat -gc PID 毫秒间隔 统计次数jvm的堆内存分为新生代、老年代、永久代,其中新生代又分为Eden区和Surivor区,S原创 2020-12-10 15:04:39 · 147 阅读 · 0 评论 -
获取字符串形式的xml报文的有效字段名称并转为map
public static org.dom4j.Document createDocument(String text) throws DocumentException { String encoding = getEncoding(text); InputSource source = new InputSource(new StringReader(text)); source.setEncoding(encoding); Docume.原创 2020-09-18 20:52:55 · 286 阅读 · 1 评论 -
String字面量做同步锁存在的问题
碰到一个问题就是想要使用两个对象锁控制同一个类的两个方法在多线程环境的同步问题。目标是两个方法可以同时由不同的线程获取不同的锁同时执行,互不影响。通过定义两个String对象作为对象锁存在的问题。如果用两个String变量使用相同的字面量定义由于代码中定义的字面量编译后在字符串常量池中引用的都是相同的对象,因此实际上两个String对象是同一对象锁所以使用String对象做Synchr...原创 2020-04-22 09:34:46 · 319 阅读 · 0 评论 -
Java动态代理
一、JDK动态代理jdk动态代理本质上是使用被代理对象的类加载器,通过被代理类实现的接口在运行时动态构造出代理类来增强原始类的功能的方法,需要使用Java的反射机制,通过实现InvocationHandler接口实现JDK动态代理。1、先定义一个接口package com.teriste.fanshe;public interface HelloWorld { void ...原创 2020-03-26 16:47:27 · 575 阅读 · 0 评论 -
MD5加密工具类
import java.security.MessageDigest;public class CodeUtil{ public static String encode(String password, String algorithm) { byte[] unencodedPassword = password.getBytes(); ...原创 2018-08-29 09:13:57 · 2421 阅读 · 0 评论 -
Java获取Excel中链接的文件
一、需求有这样一个需求,需要将用户上传的Excel中链接的文件上传到服务器,用户会保证Excel中内容按照模板上传,第一列是省份,第二列是省份对应的上传的文件,比如下面的例子:第二列就是链接的用户本地文件,因此服务端需要根据上传的Excel内容解析出第二列的用户本地文件的路径,然后返回给前端,前端再根据这个路径分别将用户本地的文件再上传至服务端,这里就需要解析出Excel中链接的文件的...原创 2019-01-23 14:55:03 · 2652 阅读 · 4 评论 -
Java实现常用设计模式
一、设计模式的种类设计模式比较常用的有23种,实际不止这些,我们统称为23种设计模式,其中常用的又只有其中的十几种。一般分为三类分别是创建型模式、结构型模式和行为型模式。创建型模式有五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式,其特点都是为创建对象提供抽象化得模板类,通过接口减少类之间的耦合。结构型模式有七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组...原创 2019-03-22 14:03:39 · 693 阅读 · 0 评论 -
常量与变量组合工具类
对于一些常量和变量组合形式的值,在使用工具类时,可以通过字符串占位符的形式提炼出工具类,以生成Redis键为例:1、首先定义Redis键的格式:package test;public abstract class RedisKeyConstant { private RedisKeyConstant() { } // 代理商渠道信息TEST:AGENT:C...原创 2019-04-29 11:25:50 · 642 阅读 · 0 评论 -
使用BeanUtils.copyProperties进行对象之间的属性赋值
1、使用org.springframework.beans.BeanUtils.copyProperties方法进行对象之间属性的赋值,避免通过get、set方法一个一个属性的赋值/** * 对象属性拷贝 <br> * 将源对象的属性拷贝到目标对象 * * @param source 源对象 * @param target 目标对...原创 2019-05-15 19:07:27 · 201117 阅读 · 20 评论 -
Java对象转Map
使用org.apache.commons.beanutils包下的BeanUtils.describe()方法可以将Java对象按属性转为Map。import org.apache.commons.beanutils.BeanUtils;class CommonUtils{ public static Map<String, Object> convertToMap(Obj...原创 2019-06-04 09:46:18 · 50317 阅读 · 6 评论 -
fastjson设置字段不序列化
alibaba的fasetjson可以设置字段不序列化,使用@JSONField注解的serialize属性,该属性默认是可以序列化的,设置成false就表示不可序列化:使用方式就是在定义字段前加上@JSONField(serialize = false)比如下面的实体类:import com.alibaba.fastjson.annotation.JSONField;imp...原创 2019-07-03 16:26:30 · 14808 阅读 · 1 评论 -
NIOByteBuffer使用
NIO中的ByteBuffer可以用于写入数据和读取数据。通常其包括mark、pos、lim、cap四个变量来记录位置状态,mark:用于记录当前pos的前一个位置或者是-1pos(position):下一个要操作的数据的位置lim(limit):缓冲区中不可操作的下一个元素的位置,因此lim<=缓冲区大小cap(capacity):缓冲区大小初始状态时pos为0,l...原创 2019-07-04 10:52:03 · 475 阅读 · 0 评论 -
List转换为Object后的类型安全问题
import com.teriste.java8.entity.Department;import com.teriste.java8.entity.Employee;import org.junit.Test;import java.util.ArrayList;import java.util.List;public class GenericListTest{ @T...原创 2019-07-11 16:34:00 · 2471 阅读 · 0 评论 -
使用Google Guava工具类
package com.teriste.guava;import com.alibaba.fastjson.JSON;import com.google.common.base.CharMatcher;import com.google.common.base.Joiner;import com.google.common.base.Splitter;import com.googl...原创 2019-07-18 10:32:47 · 685 阅读 · 0 评论 -
获取文件的真正类型
我们通常情况下获取文件类型都是直接根据文件名后缀确定的,但是后缀名是可以随意修改的,因此我们只能通过文件的二进制文件头来确定文件的真正类型。首先是将文件转换为字节流,然后获取字节流的前4位,并转换为16进制字符串,各种文件的文件头都是固定格式的。package com.teriste.utils;import java.io.File;import java.io.FileInpu...原创 2019-07-18 19:33:33 · 4112 阅读 · 0 评论 -
使用Collections.shuffle方法生成随机顺序的List
使用Collections.shuffle方法生成随机顺序的List,shuffle方法可以根据是否传入random实例决定list随机顺序的生成方式。package com.teriste.web;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context...原创 2019-08-18 16:39:36 · 1333 阅读 · 0 评论 -
poi导入Excel中包含长数字变为科学技术法
在poi包做Excel文件导入时,当列内容是手机号码等长度较大的数字时,导入数据放到缓存中会变成科学计数发的形式,即使将表格内容设置为文本也不行。查看api发现有设置创建的Cell数据类型的方法,可以将数字转换为字符串导入,方法如下:XSSFWorkbook wb = null; InputStream fileI原创 2017-08-17 08:58:25 · 4643 阅读 · 0 评论 -
Tomcat不同端口启动多个应用
测试本地Tomcat配置多个Service组件在不同端口接受不同请求,原来的server.xml配置如下:<?xml version='1.0' encoding='utf-8'?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agr...原创 2018-04-27 15:10:00 · 1955 阅读 · 0 评论 -
HashMap快速的原因
使用自定义的类作为HashMap的键,必须重载hashCode()和equals()方法,因为这两个方法都是继承自Object类,默认是基于对象地址计算hashCode()和equals()方法。hashCode()并不需要总是返回唯一的标识码。HashMap或者HashSet快的原因:其他查询慢的原因是对于键或者值查询上,因为键或者只没有按特定顺序保存,所以只能采用简单的线性查询,而线性查询是最...原创 2018-03-26 19:35:18 · 4428 阅读 · 0 评论 -
MyEclipse启动Web项目报OutOfMemoryError
启动项目或者登陆系统时报下面的错误Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]";java.lang.OutOfMemoryError:PermGen space原因是虚拟机分配的内存过小,导致内存溢出可以在MyEclipse中进行设置,在Tomcat使用的JDK中添加-X原创 2017-11-08 17:40:07 · 357 阅读 · 0 评论 -
CentOS编译OpenJDK
一、准备编译环境1、安装alsa声卡驱动包yum installalsa-lib-devel2、安装cups-develyum installcups-devel3、安装X相关的库yum installlibX*4、安装gcc编辑器yum install gccgcc-c++5、安装freety原创 2017-11-07 17:16:15 · 846 阅读 · 0 评论 -
Java导出2003、2007版Excel
创建用于添加表头的实体类/** * excel导出标题显示值 * @author Terisadeng * */public class KeyValue { private String key; private String value; public String getKey() { return key; } public KeyValue(){} ...原创 2017-10-18 16:26:11 · 2824 阅读 · 9 评论 -
calendar.getActualMaximum(calendar.DAY_OF_MONTH)的陷阱
在使用calendar.getActualMaximum(calendar.DAY_OF_MONTH)获取每月最后一天时,发现在2月出现了问题,获取到的时间是20170303,而其他月份获取的最后一天都是正确的。而且之前获取2月最后一天是28号,也每月问题。代码也没动过。后来才发现昨天是28号取的2月最后一天,29-31号取2月最后一天都会有问题。原因是Calendar类在set的时候,并原创 2017-09-29 10:49:03 · 22572 阅读 · 1 评论 -
ThinkInJava集合学习
import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;import java.util.List;public class TestCollection{ public static void main(String[] args) { generi原创 2017-08-10 14:08:00 · 184 阅读 · 0 评论 -
String类源码学习
/** Cache the hash code for the string */ private int hash; // Default to 0从这里可知:String的hash值是从0开始算的,然后根据字符数组计算出来//equals方法实现方式public boolean equals(Object anObject) { if (this ==原创 2017-07-24 16:21:42 · 308 阅读 · 0 评论 -
JavaSQL配置文件查询条件匹配字段是Date时注意事项
今天在调试一个功能时出现一个问题,有一个调Dao返回泛型List的简单代码,传入两个查询参数,分别为String和Date类型。在生产环境传入时间等参数查询时总是查不到数据,实际上表中是有数据的,将语句加上查询条件捞出来放到数据库是能查出来数据的。后来才发现是因为代码中传的date类型参数只精确到秒,毫秒级别不是零导致查询匹配不上,所以在用date类型进行比较时一定要记得毫秒位,或者就用时原创 2017-07-26 14:05:52 · 858 阅读 · 0 评论 -
JavaString与Date类型互转
1、转换方法//String转换为DateString strDate="2017-07-19 08:29:00";SimpleDateFormat sdf1=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");date=sdf1.parse(strDate); //Date转换为String SimpleDateFormat sdf原创 2017-07-19 09:24:37 · 1670 阅读 · 0 评论 -
JavaMD5加密工具类
import com.sun.crypto.provider.SunJCE;import java.security.Key;import java.security.MessageDigest;import javax.crypto.Cipher;import javax.crypto.SecretKeyFactory;import javax.crypto.spec.DES原创 2017-07-20 19:16:37 · 775 阅读 · 0 评论 -
Java常用技巧汇总
Java常用技巧一、Math函数1:ceil():将小数部分向整数部分进位。Math.ceil(6.3)返回6.02:floor():舍去小数,仅保留整数。Math.floor(6.2)返回6.03:round():进行四舍五入。Math.round(6.2)返回6.0,Math.round(6.7)返回7.0。二:、保留小数点后两位1://这种方法在代码里使用后,表里原创 2017-07-27 09:43:02 · 257 阅读 · 0 评论 -
深入理解java虚拟机学习笔记(三)
第五章 调优案例分析5.1概述这里作者介绍几个比较有代表性的实际案例。5.2案例分析5.2.1高性能硬件上的程序部署策略例如,一个15万PV/天左右的在线文档类型网站最近更换了硬件系统,新的硬件为4个CPU、16GB物理内存,操作系统为64位CentOS5.4,Resin作为Web服务器。整个服务器暂时没有部署别的应用,所有硬件资源都可以提供给这访问量不算太大的网站使用。管理人原创 2017-12-19 19:44:13 · 459 阅读 · 0 评论 -
Java使用FTP下载文件报ConnectException
在Windows系统上部署的项目使用FTP连接Linux服务器下载文件。连接服务器使用的FTP端口是21,在iptables中已经添加白名单:-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPTJava代码如下,使用ListAllFiles()遍历服务器上的文件。public String[] ListAllFil原创 2018-01-22 15:57:16 · 5203 阅读 · 1 评论 -
深入理解java虚拟机学习笔记(二)
第三章 垃圾收集器与内存分配策略3.1概述在Java内存运行时区域的各个部分中,程序计数器、虚拟机栈、本地方法栈3个部分是线程私有的,随线程而生,随线程而灭;栈中的栈帧随着方法进入和退出而执行着入栈和出栈的操作。每一个栈帧中分配多少内存基本上在类结构确定下来时就已知(尽管在运行期会由JIT编译器进行一些优化,但在概念模型中可以认为是编译期可知的),因此这几个区域的内存分配和回收都具备确定性原创 2017-12-18 17:44:27 · 390 阅读 · 0 评论 -
深入理解java虚拟机学习笔记(六)
第八章 虚拟机字节码执行引擎8.1概述执行引擎是Java虚拟机最核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有执行代码的能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现的,因此可以自行制定指令集与执行引擎的结构体系,并能够执行那些不被硬件直接支持的指令集格式。在Java虚拟机规范中制定了虚拟机原创 2017-12-25 18:21:40 · 592 阅读 · 1 评论 -
深入理解java虚拟机学习笔记(五)
第七章 虚拟机类加载机制7.1概述虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析、初始化,最终形成可以直接被Java虚拟机使用的Java类型,这就是虚拟机的类加载机制。与那些在编译时需要进行连接工作的语言不同,在Java语言里类型的加载、连接、初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的原创 2017-12-22 08:34:18 · 1457 阅读 · 0 评论 -
深入理解java虚拟机学习笔记(一)
第二章 java内存区域与内存溢出异常这一章将从概念上介绍java虚拟机内存的各个区域,讲解这些区域的作用、服务对象以及可能产生的问题。2.1运行时数据区域根据《java虚拟机规范(java SE 7版)》的规定java虚拟机所管理的内存包括程序计数器、java虚拟机栈、本地方法栈、java堆、方法区。这些区域有的随着虚拟机进程的启动而存在,有的依赖用户线程的启动和结束而创建和销毁。原创 2017-12-15 08:22:11 · 567 阅读 · 0 评论 -
深入理解java虚拟机学习笔记(四)
第六章 类文件结构6.1概述我们知道我们写的程序需要编译器翻译成由0和1构成的二进制格式文件才能被计算机执行。现在虚拟机以及建立在虚拟机之上的程序语言出现并蓬勃发展,将我们编写的程序编译成二进制本地机器码(Native Code)已不再是唯一的选择,越来越多的程序语言选择了与操作系统和机器指令集无关的、平台中立的格式作为程序编译后的存储格式。6.2无关性的基石如果计算机的CPU指令原创 2017-12-19 19:49:28 · 1230 阅读 · 0 评论 -
Spring批量更新
一般情况下向Mysql中更新或是插入数据都是一条一条插入的,在数据量特别大的情况下一般数万条,就会导致虚拟机内存溢出,不能仅仅靠扩大虚拟机内存来掩盖问题。解决方法有很多种,这里使用其中一种批量更新方法:在Dao层的save方法中:@Override public void saveAll(List modelList) { for (int i =原创 2017-07-20 18:33:41 · 949 阅读 · 0 评论