![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 70
米兰的大笨钟
这个作者很懒,什么都没留下…
展开
-
高性能实体映射框架-Mapstruct
Mapstruct是一种实体类映射框架,能够通过Java注解将一个实体类的属性安全地赋值给另一个实体类原创 2022-06-21 15:32:02 · 1680 阅读 · 0 评论 -
Mybatis-Plus固定字段填充
当我们系统数据库表的设计中包含一些固定字段,每张表都有时,可以继承Mybatis-Plus的MetaObjectHandler方法,通过实现insertFill和updateFill方法解决。原创 2022-06-13 17:51:17 · 742 阅读 · 0 评论 -
数据结构笔记-树
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 · 237 阅读 · 0 评论 -
定时任务的核心-时间轮算法
一直以来我都有这样一个疑问,定时任务里面的触发器底层到底是怎样实现的?直到我百度到了时间轮算法这个东西,恍然大悟。时间轮算法的思路时间轮算法的灵感应该来源于手表,在理解时间轮算法的过程中我们也可以用手表的逻辑去思考。时间轮包含三个部分,时间格、任务列表和模拟指针,时间轮的结构如下图所示。bucket时间格,以数组的形式存储,时间格的数量可以自定义;indicator是模拟指针,模拟指针负责按照一定的时间频率在时间格上面移动,每次向下移动一格;时间格本质上是一个链表,链表上维护了需要在这个时间格对原创 2022-05-11 17:32:30 · 299 阅读 · 0 评论 -
多线程与事务
数据量大,处理慢,达不到性能要求。。。这个时候,我们很容易就会想到用多线程去提升处理速度。但要求还不仅是快这么简单,还需要保证一个线程出错,所有的数据都会滚。。。这时候很多同学就会琢磨出一个奇怪的概念,多线程事务?多线程事务既可以多线程提高效率,又可以所有线程保证事务回滚,是真的吗???别问,问就是假的,多线程事务是一个伪命题说到事务,那我们首先的撸一下ACID,事务的四个特性A:原子性,一个事务要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作C:一致性,事务的执行不能破坏数原创 2021-10-26 17:09:16 · 4215 阅读 · 0 评论 -
基于freemaker的自动化word文档导出
在项目中使用freemaker生成word、excel、pdf文档是比较方便的实现方式,但是也存在一个问题,我们的产品最终是要给客户使用的,而freemaker使用的是ftl模板,而不是word、excel这样的原始文件模板,但对于客户来讲,手动去调整生成ftl模板并不现实,所以我实现了一个word文档自动导出的功能,提供一种解决问题的思路。一、导包<dependency> <groupId>org.freemarker</groupId> <a原创 2021-03-29 15:33:48 · 235 阅读 · 0 评论 -
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 · 125 阅读 · 0 评论 -
Java设计模式-单例模式详解
今天我们来详细的学习一下你见过的或没见过的Java单例模式,对不同的单例模式写法,尽可能的说明其原理。单例模式的核心是一个类只能被创建一个实例化对象单例模式的实现构造函数私有化,避免外部通过new创建确保单例的线程安全确保单例的唯一性,不能被重复创建1、饿汉式public class Signleton{ /** * 对于一个final变量。 * 如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改; * 如果是引用类型的变量,则在对其初始化原创 2020-12-16 17:32:32 · 119 阅读 · 0 评论 -
Java设计模式-观察者模式及异步处理方式实现
观察者模式结构观察者模式的结构中包含四种角色:(1)主题(Observable):主题是一个接口,该接口规定了具体主题需要实现的方法,比如,添加、删除观察者以及通知观察者更新数据的方法。(2)观察者(Observer):观察者是一个接口,该接口规定了具体观察者用来更新数据的方法。(3)具体主题(MyObservable):具体主题是实现主题接口类的一个实例,该实例包含有可以经常发生变化的数据。具体主题需使用一个集合,比如ArrayList,存放观察者的引用,以便数据变化时通知具体观察者。(4)具原创 2020-12-22 14:09:30 · 516 阅读 · 0 评论 -
使用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 · 899 阅读 · 6 评论 -
开放平台接口签名认证的实践
当系统接口最为开放接口提供给第三方调用时,接口的安全问题必须考虑,请求身份是否合法?请求是否被篡改?请求是否唯一?请求身份为开发者分配AccessKey(开发者标识,确保唯一)和SecretKey(秘钥,用于接口加密),在项目中AccessKey和SecretKey可以做类似用户管理的完备管理机制,成为系统功能的一部分。防止篡改为防止请求在发送过程中可能会被拦截,修改参数之后再将请求发往服务器,或者在请求发送的过程中参数出现缺失,可以对参数进行签名,生成Sign(Sign生成的方式有多重多样,根据自原创 2020-12-11 17:23:14 · 405 阅读 · 0 评论 -
timeZone处理夏令时
public static void main(String[] args) throws Exception { addZoneOffset("20191226101400"); } //获取指定时间的 指定时区时间 参照点:默认时区 public LocalDateTime getZoneTime2(LocalDateTime time, Zon...原创 2020-01-07 16:10:56 · 919 阅读 · 0 评论 -
java事务回滚失败的场景和原因
1.数据库引擎是否支持事务(Mysql的MyIsam引擎就不支持事务)2.注解所在的类是否注入spring容器中3.注解所在方法是否为public修饰或者final(方法实现了接口是否为public,方法没有实现接口是否为final)分析:这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,...转载 2019-12-26 16:59:57 · 1700 阅读 · 0 评论 -
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 · 4212 阅读 · 0 评论 -
java 8新特性λ表达式
java 8新特性λ表达式和Stream APIλ表达式是java 8新增的一个特性,其实他就是一种新的语法,用新的代码形式实现了传统方式也可以实现的功能,将编码的方式渐渐的向函数式编程的方向发展,其主要特点是代码简洁、灵活、提升了java的语言表达能力。而stream则是使用流的方式对集合的操作做了增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作 。Stream A...转载 2019-11-30 16:36:24 · 199 阅读 · 0 评论 -
Java8新特性整理之CompletableFuture
Java8新特性整理之CompletableFutureFuture 接口的局限性Future接口可以构建异步应用,但依然有其局限性。它很难直接表述多个Future 结果之间的依赖性。实际开发中,我们经常需要达成以下目的:将两个异步计算合并为一个——这两个异步计算之间相互独立,同时第二个又依赖于第一个的结果。等待 Future 集合中的所有任务都完成。仅等待 Future集合中最快结束...转载 2019-11-26 17:19:38 · 320 阅读 · 0 评论