自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 高性能实体映射框架-Mapstruct

Mapstruct是一种实体类映射框架,能够通过Java注解将一个实体类的属性安全地赋值给另一个实体类

2022-06-21 15:32:02 1431

原创 Mybatis-Plus固定字段填充

当我们系统数据库表的设计中包含一些固定字段,每张表都有时,可以继承Mybatis-Plus的MetaObjectHandler方法,通过实现insertFill和updateFill方法解决。

2022-06-13 17:51:17 655

原创 数据结构笔记-树

N叉树的java实现import org.springframework.util.CollectionUtils;import java.util.*;import java.util.function.Predicate;public class NaryTree<T> implements Iterable<NaryTree<T>> { /** * 树节点 */ private final T node; /*

2022-05-13 17:13:58 211

原创 定时任务的核心-时间轮算法

一直以来我都有这样一个疑问,定时任务里面的触发器底层到底是怎样实现的?直到我百度到了时间轮算法这个东西,恍然大悟。时间轮算法的思路时间轮算法的灵感应该来源于手表,在理解时间轮算法的过程中我们也可以用手表的逻辑去思考。时间轮包含三个部分,时间格、任务列表和模拟指针,时间轮的结构如下图所示。bucket时间格,以数组的形式存储,时间格的数量可以自定义;indicator是模拟指针,模拟指针负责按照一定的时间频率在时间格上面移动,每次向下移动一格;时间格本质上是一个链表,链表上维护了需要在这个时间格对

2022-05-11 17:32:30 256

原创 数据结构笔记-DAG有向无环图

一 图的基本概念图(Graph):是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。![image.png](https://img-blog.csdnimg.cn/img_convert/738c997a46aeb5b406a86400d0cb470a.png#clientId=ubea6962d-5a78-4&crop=0&crop=0&crop=1&crop=1&from=p

2022-05-10 17:12:50 3705

原创 多线程与事务

数据量大,处理慢,达不到性能要求。。。这个时候,我们很容易就会想到用多线程去提升处理速度。但要求还不仅是快这么简单,还需要保证一个线程出错,所有的数据都会滚。。。这时候很多同学就会琢磨出一个奇怪的概念,多线程事务?多线程事务既可以多线程提高效率,又可以所有线程保证事务回滚,是真的吗???别问,问就是假的,多线程事务是一个伪命题说到事务,那我们首先的撸一下ACID,事务的四个特性A:原子性,一个事务要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作C:一致性,事务的执行不能破坏数

2021-10-26 17:09:16 4123

原创 Oracle数据库获取表字段、注释、字段类型等

项目开发中我们经常遇到整理数据设计文档的场景,用这个脚本可以直接查询出来整理文档中我们需要的内容with tmp as ( select col.column_name, con.constraint_type from user_constraints con left join user_cons_columns col on con.constraint_name = col.constraint_name where con.table_name =

2021-05-28 10:23:28 446

原创 基于freemaker的自动化word文档导出

在项目中使用freemaker生成word、excel、pdf文档是比较方便的实现方式,但是也存在一个问题,我们的产品最终是要给客户使用的,而freemaker使用的是ftl模板,而不是word、excel这样的原始文件模板,但对于客户来讲,手动去调整生成ftl模板并不现实,所以我实现了一个word文档自动导出的功能,提供一种解决问题的思路。一、导包<dependency> <groupId>org.freemarker</groupId> <a

2021-03-29 15:33:48 225

转载 Spring Boot启动源码分析

1、SpringApplication的构造方法public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { this.resourceLoader = resourceLoader; Assert.notNull(primarySources, "PrimarySources must not be null"); this.primarySources = new Li

2021-02-23 17:32:45 114

原创 Java设计模式-观察者模式及异步处理方式实现

观察者模式结构观察者模式的结构中包含四种角色:(1)主题(Observable):主题是一个接口,该接口规定了具体主题需要实现的方法,比如,添加、删除观察者以及通知观察者更新数据的方法。(2)观察者(Observer):观察者是一个接口,该接口规定了具体观察者用来更新数据的方法。(3)具体主题(MyObservable):具体主题是实现主题接口类的一个实例,该实例包含有可以经常发生变化的数据。具体主题需使用一个集合,比如ArrayList,存放观察者的引用,以便数据变化时通知具体观察者。(4)具

2020-12-22 14:09:30 487

原创 使用ReflectASM替代BeanUtils实现对象拷贝

我们将一个类的值要复制到另一个类时,除了繁琐的get/set方法之外,经常会使用到BeanUtils的copyProperties方法,这样会变得非常方便。注意:避免用 Apache Beanutils 进行属性的 copy,Apache BeanUtils 性能较差但我在使用的过程中也遇到了一些特殊的需要,比如A类的id属性没有值,而B类的id属性有值,结果使用BeanUtils的copyProperties方法将A拷贝到B之后,B的id值就被覆盖掉了,所以想到了在copyProperties方法基础

2020-12-18 17:18:48 791 6

原创 Java设计模式-单例模式详解

今天我们来详细的学习一下你见过的或没见过的Java单例模式,对不同的单例模式写法,尽可能的说明其原理。单例模式的核心是一个类只能被创建一个实例化对象单例模式的实现构造函数私有化,避免外部通过new创建确保单例的线程安全确保单例的唯一性,不能被重复创建1、饿汉式public class Signleton{ /** * 对于一个final变量。 * 如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改; * 如果是引用类型的变量,则在对其初始化

2020-12-16 17:32:32 105

原创 开放平台接口签名认证的实践

当系统接口最为开放接口提供给第三方调用时,接口的安全问题必须考虑,请求身份是否合法?请求是否被篡改?请求是否唯一?请求身份为开发者分配AccessKey(开发者标识,确保唯一)和SecretKey(秘钥,用于接口加密),在项目中AccessKey和SecretKey可以做类似用户管理的完备管理机制,成为系统功能的一部分。防止篡改为防止请求在发送过程中可能会被拦截,修改参数之后再将请求发往服务器,或者在请求发送的过程中参数出现缺失,可以对参数进行签名,生成Sign(Sign生成的方式有多重多样,根据自

2020-12-11 17:23:14 345

原创 Oracle递归查询的使用

开发中我们难免会遇到一类问题是维护的数据存在父子级的关系,比如树状结构的数据,省市区镇的行政区划数据,而做查询操作时往往会遇到递归查询的场景,下面便讲解在Oracle数据库中如何进行递归查询。Oracle递归查询语法select <column> from <table> start with 条件1 connect by prior 条件2 where 条件3;条件1是根结点的限定语句,在自顶向下查询树结构时,不但可以从根节点开始,还可以定义任何节点为起始节点,以此开始向

2020-12-10 17:13:36 805

原创 timeZone处理夏令时

public static void main(String[] args) throws Exception { addZoneOffset("20191226101400"); } //获取指定时间的 指定时区时间 参照点:默认时区 public LocalDateTime getZoneTime2(LocalDateTime time, Zon...

2020-01-07 16:10:56 889

原创 JVM调试工具

在软件开发过程中,很重要的一点是内存的占用,良好的内存控制可以提升服务器运行的流畅性,最根本的是开发过程中注意编码实现方式,运用JVM相关知识尽可能优化我们的程序。甚至有时线上运行的项目运行状况不良好,如出现内存溢出和内存泄漏,那么此时我们将使用一些工具来发现和定位问题,然后进行优化。JVM自带了一些基础的故障处理工具,包括jps、jinfo、jstat、jmap、jhat和jstack。jps...

2019-12-31 11:57:43 430

转载 java事务回滚失败的场景和原因

1.数据库引擎是否支持事务(Mysql的MyIsam引擎就不支持事务)2.注解所在的类是否注入spring容器中3.注解所在方法是否为public修饰或者final(方法实现了接口是否为public,方法没有实现接口是否为final)分析:这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,...

2019-12-26 16:59:57 1604

原创 JVM垃圾回收机制

JVM垃圾回收机制程序计数器、虚拟机栈、本地方法栈 3 个区域随线程生灭(因为是线程私有),栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。而 Java 堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期才知道那些对象会创建,这部分内存的分配和回收都是动态的,垃圾回收期所关注的就是这部分内存。对象...

2019-12-13 17:58:58 187

转载 JVM内存模型

JVM架构介绍JVM内存模型栈区Java虚拟机栈(Java Virtual Machine Stacks)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程...

2019-12-12 19:03:02 200

原创 NIO实现从网络URL下载图片,并将File转换为MultipartFile

/*** description 网络TRL中下载图片* @param uri* @param folder 存放文件的文件夹* @return java.lang.String*/private String downloadByUrl(String uri, String folder){ ReadableByteChannel readableByteChannel = n...

2019-11-30 17:13:45 4161

转载 java 8新特性λ表达式

java 8新特性λ表达式和Stream APIλ表达式是java 8新增的一个特性,其实他就是一种新的语法,用新的代码形式实现了传统方式也可以实现的功能,将编码的方式渐渐的向函数式编程的方向发展,其主要特点是代码简洁、灵活、提升了java的语言表达能力。而stream则是使用流的方式对集合的操作做了增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作 。Stream A...

2019-11-30 16:36:24 170

转载 Java8新特性整理之CompletableFuture

Java8新特性整理之CompletableFutureFuture 接口的局限性Future接口可以构建异步应用,但依然有其局限性。它很难直接表述多个Future 结果之间的依赖性。实际开发中,我们经常需要达成以下目的:将两个异步计算合并为一个——这两个异步计算之间相互独立,同时第二个又依赖于第一个的结果。等待 Future 集合中的所有任务都完成。仅等待 Future集合中最快结束...

2019-11-26 17:19:38 306

空空如也

空空如也

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

TA关注的人

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