自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(109)
  • 收藏
  • 关注

原创 利用POI实现excel导入导出(反射版)

1、需要导入的依赖:<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.15-beta1</version> ...

2019-04-15 23:29:02 531

原创 Mysql同一张表互换两个字段的值

Mysql同一张表互换两个字段的值

2022-09-23 15:26:04 1571 1

原创 文件的解压并切割成小文件

以上用到的文件相关操作均为hutool工具类

2022-06-10 10:48:12 664

原创 反射获取各属性值信息

反射获取各属性值信息

2022-06-07 17:35:57 233

原创 redis非集群版分布式锁

redis单机实现分布式锁

2022-04-07 10:12:10 210

原创 Mysql一对多表关系

在Mysql中,一对多的表关系中,如何查询从表中只包含某类的主表信息。例如: 部门表为1(主表) 员工表为n(从表) ------默认一个员工只属于一个部门需求:查询哪些部门下的所有员工爱都是篮球 -----员工表中有个字段是爱好且唯一伪sql如下:select t.* from(select d.id,d.count(1) count,sum(case e.hobby when '篮球' then 1 else 0 end) mcfrom dept d inner join emp..

2021-07-27 11:22:51 351

原创 项目实践中用到的工厂模式

项目中发短信可能是多渠道的,比如漫道短信、阿里云短信、华为云短信等,不同的客户可能走的不同的渠道,此处可以应用工厂模式。1.定义发短信的统一接口

2021-06-19 12:09:03 286

原创 java发送短信工具类

private static Boolean sendMessage(EmailAccount account, String toEmail, String mailContext, String subject, String cid, String ccEmail){ long begin = System.currentTimeMillis(); try { //邮件属性 Properties props = setProperties(account); // 获得邮件.

2021-06-19 11:52:37 385

原创 java自带的发布订阅模式

1.定义基础事件public class BaseEvent extends ApplicationEvent implements Serializable { private static final long serialVersionUID = -5540784946421260361L; public BaseEvent(Object source,String hotelId) { super(source); this.hotelId = hotelId ; }

2021-06-08 14:05:31 796 1

原创 结合实际再谈设计模式之策略模式

1.什么是策略模式?(生活例子)假设旅游出行,可以骑摩托、坐飞机、坐火车、坐汽车等等,不同的出行方式就是一种种不同的策略。2.可以jie'j

2021-06-08 13:30:40 79

原创 jackson序列化工具类

public class JsonMapper { private static final Logger LOGGER=LogManager.getLogger(JsonMapper.class); private ObjectMapper mapper; public JsonMapper() { this(null); } public JsonMapper(Include include) { mapper = new ObjectMapper(); // 设置输出时.

2021-06-07 11:02:38 419

原创 自定义注解动态解耦调用实现类

当一个接口有多个实现的业务场景,我们为了代码更清晰,为了满足开闭原则,巧妙的结合注解和反射实现动态调用实现类。

2021-06-07 10:13:17 403

原创 java实现AES加密解密

public class PartnerSign { private PartnerSign() {} /** * AES加密方法 * * @param content 明文内容 * @param password 密码 * @return 解密后字节数组转十六进制字符串 */ public static String encrypt(String content, String password) throws Exception { SecretKeySpec ke.

2021-05-25 17:26:03 314

原创 简单缓存,无超时实现,使用WeakHashMap实现缓存自动清理

public class SimpleCache<K, V> implements Serializable{ private static final long serialVersionUID = 1L; /** 池 */ private final Map<K, V> cache = new WeakHashMap<>(); private final ReentrantReadWriteLock cacheLock = new Reentrant.

2021-05-21 14:59:43 404

原创 聊聊为啥不推荐使用jdk自带的创建线程池方法

今天聊一聊为什么不推荐使用jdk自带的Executors静态方法下创建线程池的方法,最常见的就是以下这四种:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。核心线程数是,最大线程数为整型的最大值,队列大小为1,空闲保持时间60L1. ExecutorService cachedThreadPool = Executors.newCachedThreadPool();创建一个指定工作线程数量的线程池。创建出来的核心线程和最大线程数为传入的指定的数量

2021-01-18 21:51:10 1910

原创 HashMap扩容原理

1.为什么需要扩容???为了解决哈希冲突导致链化影响查询效率问题,扩容会缓解该问题。加载因子是0.75, 扩容的时候创建一个更大的数组,循环遍历处理原来数组里的数据。第一种情况:当前桶位只有一个元素,从未发生过碰撞,这种情况直接计算出当前元素存放在新数组中的位置,然后扔进去就可以了。第二种情况:当前节点已经树化(暂不介绍)第三种:桶位已经形成链表,低位链表存放在扩容之后的下标位置,与当前数组的下标位置一致。高位链存放在当前数组下标位置+扩容之前的数组长度。以初始容量16的为例,扩容一倍.

2020-07-08 22:40:05 729

原创 HashMap存储底层原理

hashMap底层是用散列表存储的,就是一个数据组,每个数组位置数据多的时候以链表的形式存储,jdk8当链表长度达到8的时候,并且总元素个数到达64,链表会变为红黑树存储。1.6以前是头插入,1.8是尾插入法。put 值的时候HashMap才会进行初始化,属于延迟加载,获取key值的hash值,经过扰动函数(这里的扰动函数是hash值&hash值无符号右移16位,让高位充分参与运算)使得hash值更散列,然后构造出node对象 node包括 hash值 、key、value、 next ..

2020-07-08 21:44:07 253

原创 redis实现分布式锁的思路分析

在springBoot项目中使用分布式锁,用redis实现1.先定义一个lockKeyString lockKey="yys";2.再定义一个随机数为了判断上锁和释放锁是否为同一个线程,解决因为线程阻塞,导致代码逻辑执行时间大于锁失效时间的情况,会存在释放锁是释放的其他线程的锁。String uuid =UUID.randomUUID().toString();3.使用StringRedisTemplate创建一把锁,返回true代表加锁成功,false代表失败Boolean b .

2020-05-14 22:21:34 455

原创 CookieUtil工具类

public class CookieUtil { private final static String COOKIE_DOMAIN = ".test.com"; private final static String COOKIE_NAME = "login_token"; public static String readLoginToken(HttpSe...

2020-04-04 10:22:45 132

原创 使用单链表实现数据的排序

链表插入的主要思路:1.把temp.next域给新节点.next 即 newNode.next=temp.next2.temp.next指向新节点 即 temp.next=newNodepublic class LinkList { public static void main(String[] args) { //进行测试 //先创建节点...

2020-01-20 10:52:40 1057

原创 使用环形数组简单实现队列

主要区别是front和rear从0开始,以前front指向第一个元素的前一个位置,rear指向最后一个元素,现在改成front直接指向头元素rear指向最后一个元素的下一个位置,队列最后预留出一个约定位置,队列实际使用大小是maxSize-1.public class CircleArrayQueue { public static void main(String[] args...

2020-01-20 10:47:22 217

原创 用数组简单实现队列

public class SpartArray { public static void main(String[] args) { //测试一把 ArrayQueue arrayQueue = new ArrayQueue(3); char key = ' '; Scanner scanner = new Scanner...

2020-01-20 10:40:01 176

原创 普通数组和稀疏数组的转化

public class SpartArray { public static void main(String[] args) { //创建一个原始的二维数组 11*11 //0表示没有棋子 1表示黑子 2表示蓝子 int[][] chessArray=new int[11][11]; chessArray[1][2]...

2020-01-20 10:36:11 172

原创 简单认识数据结构

数据结构数据结构和算法的关系?程序=数据结构+算法而数据结构是算法的基础字符串替换 ----单链表五子棋 ----二维数组、稀松数组约瑟夫 ----单向环形链表修路问题 ---最小生成树(加权) +普利姆算法最多短路径问题 ---图+弗洛伊德算法汉诺塔 ---分治算法八皇后问题 ---回溯算法数据结构主要包括线性结构和非线性结构线性结构 包括顺序存储结构和链式存储...

2020-01-20 10:27:02 108

原创 SpringBoot集成mybatis(配置通用mapper)并且使用druid作为数据库连接池

主要包括:springBoot集成mybatis框架 使用配置mybatis框架的通用mapper功能 使用阿里的druid作为数据库连接池 利用swagger进行接口测试一.先创建一个springBoot的maven工程,这个小伙伴肯定都会二.引入相关依赖<dependencies> <dependency> ...

2020-01-11 15:54:55 611

原创 Linux中java项目后台启动脚本

nohup /usr/java/jdk_1.8.0_162/bin/java -jar -Xms1024m -Xmx1024m -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512/abc/test/com-yan-web-1.0-SNAPSHOT.jar>/dev/null 2>&1 &tail -f ./logs/y...

2020-01-09 14:39:36 302

原创 JVM(七)

gc垃圾回收机制1.引用计数法(了解)容易相互引用不释放资源2.复制算法(用在新生代)复制算法的基本思想是将内存存在两块,每次只用其中一块,当这一块内存用完,就将活着的对象复制到另一块上面。复制算法不会产生内存碎片。优点:没碎片 缺点:消耗空间伊甸园区 from区 to区第一次:伊甸园区里的对象被扫描后,存活的复制到from区,然后清空伊甸园区下一次:扫描伊甸园区和from区,...

2020-01-09 13:59:38 81

原创 JVM(六)

堆内存分为新生代和老年代,在1.7以前有永久代,1.8叫元空间,并且从堆内存中去掉,放到了物理内存中。所以物理上只有新生代和老年代。新生代分为伊甸园区,和幸存区1(from区)和幸存区2(to区) 大小比列 8:1:1新生代占堆内存的1/3,老年代占2/3。堆内存调优在idea开发工具里配置JVM启动参数-Xms2048m -Xmx2048m -XX:+PrintGCDet...

2020-01-09 12:35:05 89

原创 JVM(五)

大学的时候 程序=算法+数据结构实际开发中 程序=框架+业务逻辑数据结构中队列和栈必须要懂队列(FIFO) 先进先出 例子:排队打饭栈(FILO)(后进先出)例子:子弹弹夹栈也叫栈内存,主管java程序的运行,是在线程创建时创建,它的生命周期是跟随线程的生命周期,线程结束内存也就释放了,对于栈来说不存在垃圾回收问题,只要线程一结束栈就Over,生命周期和线程一致,是线程私有的。...

2020-01-08 17:11:43 69

原创 JVM(四)

方法区首先千万不要由这种错觉,方法区不是放方法的地方。供各线程共享的运行时内存区域,它存储了每一个类的结构信息,例如运行时常量池、字段、和方法数据、构造函数和普通方法的字节码内容。上面的是规范,在不同虚拟机里实现是不同的,最典型的是永生代和元空间。jdk1.8及以后叫元空间实例变量存在堆内存中,和方法区无关。说白了就是类的结构化信息(类似于模板 大Class)...

2020-01-08 16:15:39 77

原创 JVM(三)

程序计数器(Program Counter Register)类似与火车之间的钩子收集程序里的排班值日表每个线程都有一个程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向下一条指定的地址,也即将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记。这块内存区域很小,它是当前线程所执行的字节码的行号指示器,字节码解释器通过...

2020-01-08 15:29:39 63

原创 JVM(二)

Native method Stack(本地方法栈)java的多线程Thread t1 =new Thread(); t1.start(); t1.start();报错:Exception in thread "main" java.lang.IllegalThreadStateException at java.lang.Thread.start...

2020-01-08 14:48:56 85

原创 JVM(一)

五块堆 栈 方法区 本地方法栈 程序计数器ClassLoader 类加载器(快递员) 是要把java编译的.class文件加载到JVM它会加载文件开头有特定标识的(cafe babe)1.启动类加载器 bootStrapClassLoader (C++开发的) 它会加载 java下jre下lib下的rt.jar 随着应用启动加载到jvm中,简单说就是加载咱们日让开放用到的那些类,例如O...

2020-01-08 14:14:30 87

原创 多线程(一)

1.什么叫进程,什么叫线程?举个例子,打开360安全管家,在任务管理器中可以看到一个.exe的,这就是一个进程。而你边清理系统垃圾,边全盘杀毒,这就是进程中的两个线程。2.什么是并发,什么是并行?并发就像在火车上上厕所,多个人去争夺这个厕所资源,这就是并发(线程操作资源)并行就是假如你吃泡面,肯定要烧水、把泡面的调料撕开放进泡面桶,边烧水,边先处理好泡面,你在烧水过程中再泡个脚,这三件...

2020-01-08 14:12:45 79

原创 POI实现报表的导出

/***文件导出方法*@param resource List<String[ ]> 集合类型,要导出的具体数据结合。*@param outputStream 输出流,输出的excel文件保存的具体位置。public void exportExcel(List<String[ ]> resource,OutputStream outputStream){...

2019-12-17 19:40:52 115

转载 SpringBoot集成JMS

springboot对JMS提供了很好的支持,对其做了起步依赖。构架工程创建一个springboot工程,在其pom文件加入: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifa...

2019-12-16 15:45:06 169

原创 POI实现报表的导入

/***解析文件的方法*@param inputStream 文件输入流,要解析的Excel文件输入流*@param suffix 文件的后缀名,xls或xlsx,代码决定使用什么方式解析Excel.*@param startRow 从第几行开始读取数据*@return List<String[ ]> 集合中的一个元素对应一行解析的数据* 元素为字符串数组类型,...

2019-12-14 22:36:25 117

原创 docker部署springBoot项目

1.写一个helloWorld的springBoot项目打成jar包2.在服务上创建一个docker文件夹,把jar上传上去,同目录下编写一个Dockerfile文件,内容如下:FROM java:8# 作者MAINTAINER yys <437521063@qq.com># VOLUME 指定了临时文件目录为/tmp。# 其效果是在主机 /var/lib/docker...

2019-12-14 12:12:06 120

原创 docker拉取其他服务器的私有仓库的镜像

1.打开配置文件vi /usr/lib/systemd/system/docker.service2.在打开的上述文件中按照下面的图,添加如下的内容:注意修改下面的内容中的ip地址--add registry=192.168.12.135:5000 --insecure-registry=192.168.12.135:50003.修改完之后需要重新加载docker配置文件并重启d...

2019-12-14 11:39:36 1193

原创 docker将镜像上传到至私有仓库

1.标记镜像为私有仓库的镜像docker tag tomcat 宿主机IP:5000/tomcat2.再次启动私有仓库容器docker restart registry3.上传标记的镜像docker push 宿主机IP:5000/tomcat4.输入网址查看仓库效果http://192.168.109.66:5000/v2/_catalog ...

2019-12-14 11:30:14 257

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除