
JAVA
文章平均质量分 88
JAVA相关的文章
大·风
想起来什么就写点什么。
展开
-
JAVA项目中的异步任务
如果需要自定义线程池需要在。原创 2023-04-09 11:17:23 · 8869 阅读 · 1 评论 -
JVM性能——垃圾回收器的优化策略
简单介绍下回收器优化策略原创 2022-11-02 01:13:11 · 1072 阅读 · 0 评论 -
JVM性能——JVM调优参数列表
介绍在进行JVM GC优化的时候可能用到的参数原创 2022-11-02 00:50:00 · 587 阅读 · 0 评论 -
JVM性能——垃圾回收器的介绍
简单介绍下JDK8的回收器,聊聊用哪种回收器会好些原创 2022-11-01 23:48:48 · 946 阅读 · 0 评论 -
JVM性能——开启回收日志和实时查看GC信息
如何开启GC日志和分析日志原创 2022-11-01 23:41:38 · 6211 阅读 · 0 评论 -
工作积累——几种常用的限流方式
目前主要使用的限流方式主要是:计数器、滑动窗口、漏桶和令牌桶限流。原创 2022-10-17 00:13:10 · 752 阅读 · 0 评论 -
工作积累——Web请求中使用ThreadLocal遇见的问题
Web请求中使用ThreadLocal遇见的问题原创 2022-06-23 22:00:30 · 664 阅读 · 0 评论 -
Spring Boot 整合——Spring Mobile用来识别请求设备类型的小工具
文章前面关于版本依赖版本springboot2.0.8.RELEASEspring-mobile-starter2.0.0.M2关于项目本内容也是我尝试整理工作中接触过各种工具在springboot中使用的方法。下面介绍的所有方法都已经提供了测试用例。因为每个例子涉及代码较多,所以文章中只贴出了部分代码。全部的代码在这里:https://gitee.com/daifyutils/springboot-samples。Spring Mobilespring mob原创 2021-03-21 14:45:21 · 3656 阅读 · 1 评论 -
Spring Boot 整合——Spring retry有状态重试以及其注释和组件介绍
关于版本依赖版本springboot2.4.0spring retry2.4.0代码地址因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码。全部的代码在这里:https://gitee.com/daifyutils/springboot-samples。通过配置状态重试来使用CircuitBreaker带熔断功能的重试无状态的重试无状态重试,是在一个循环中执行完重试策略,即重试上下文保持在一个线程上下文中。有状态的重试有原创 2021-01-17 22:06:49 · 1381 阅读 · 0 评论 -
Spring Boot 整合——Spring retry的基本使用
关于版本依赖版本springboot2.4.0spring retry2.4.0代码地址因为每个例子涉及代码较多,且包含测试用例,如果都贴到文章中内容过多,所以只贴出了部分代码。全部的代码在这里:https://gitee.com/daifyutils/springboot-samples。Spring retry之前在介绍Spring batch的提到过其重试功能之后被独立出了一个新的项目spring retry。通常来说我们可以使用retry来解决一些因为网络原创 2021-01-17 22:06:12 · 4103 阅读 · 0 评论 -
ThreadPoolExecutor学习——线程池逻辑简单分析
ThreadPoolExecutor 一些操作的分析严格来说此内容并不是一个源码解读,只是在最近使用线程池的时候发现了一些之前认识误区的地方。和源码相比更关注一些方法使用的反馈,所以会显得比较简陋这里主要是介绍下面内容线程池使用哪个参数记录线程数和线程状态线程池状态以及互相装换线程创建的时机线程关闭的时机shutdown和shutdownNow的区别线程池使用哪个参数记录线程数和线程状态线程数的参数ThreadPoolExecutor要确定线程池中线程数需要三个参数privat原创 2020-11-22 00:45:01 · 514 阅读 · 0 评论 -
Spring Boot 整合——Spring Cache使用Redis缓存、自定义注解参数值
本篇文章涉及的所有代码下载地址:https://gitee.com/daifyutils/springboot-samplesSpring Boot Cache的整合和注解介绍上一篇中主要介绍了Cache的基础使用和注解的内容,但是在实际生产中多数不太会使用内存作为缓存的方式,Redis是常用的缓存数据库。Cache使用Redis缓存数据添加依赖既然添加了Redis的整合,自然要添加Redis的依赖 <dependencies> <dependenc.原创 2020-10-18 01:18:17 · 469 阅读 · 1 评论 -
Spring Boot 整合——Spring Cache的整合和注解介绍
本篇文章涉及的所有代码下载地址:https://gitee.com/daifyutils/springboot-samplesSpring Boot Cache的整合和注解介绍上一篇中主要介绍了Cache的基础使用和注解的内容,但是在实际生产中多数不太会使用内存作为缓存的方式,Redis是常用的缓存数据库。Cache使用Redis缓存数据添加依赖既然添加了Redis的整合,自然要添加Redis的依赖 <dependencies> <dependenc.原创 2020-10-18 01:14:54 · 703 阅读 · 0 评论 -
JAVA中如何处理金额类数据
由闲鱼的转账BUG引起的思考想写这一篇文章主要是前两天看到了一个闲鱼的BUG,而且自己也复现了这个问题。在使用闲鱼的时候当我向好友转账2.1的时候,最终支付宝显示的却只有2.09(前天出现的问题,目前闲鱼已经修复了这个问题)。作为一个消费者这只是一个BUG,但是作为一个JAVA开发,就让我思考到假如这个金额的数据是需要服务端进行处理?JAVA要如何处理这些数据。我的一分钱呢??????这从未设想的问题啊,所以这里就整理下对于服务端 的开发,对于金额的处理、储存和传输应该如何操作JAVA原创 2020-07-04 21:22:48 · 6916 阅读 · 0 评论 -
代码简洁之路——还在使用fori循环么?尝试用Java 的Stream来处理集合吧
新的循环上一篇介绍过函数式接口(@FunctionalInterface)和Lambda表达式。而伴随他们出现Java 8提供了一个强大的工具来实现对集合的操作——流(Stream)。配合流我们以前需要很多行代码才能完成的集合操作现在只需要三五行甚至一行就能完成。流 stream关于流JAVA提供了两种创建方式使用stream()创建串行流和使用parallelStream()创建并行流。这里都是基于串行流的内容了。关于并行流对于有些功能需要额外操作这里就没时间介绍了。就像之前介绍方法引用,既然原创 2020-06-21 19:28:57 · 1022 阅读 · 0 评论 -
代码简洁之路——一些让你代码更加简洁和清晰的JAVA特性
以上内容都是基于JAVA 8 的版本。对于之后的JAVA新特性并没有整理进来。平时我们开发功能时,总希望能用更简洁的代码实现业务需求,代码简洁一向都是各个开发人员追求的目标。就像是为了减少get、set我们可以使用lombok插件,为了方便进行SQL查询而使用MyBatis-Plus增强。而随着java版本不断的更新,Java也在语言层面上提供更多便利给开发人员。如何使自己的代码内容更加少,而可以实现的功能更多。最常提起的就是Java各个版本提供的语法糖。而关于语法糖的内容已经有足够多人去介.原创 2020-06-19 22:33:19 · 1810 阅读 · 0 评论 -
Spring Boot 整合——Spring Boot整合kafka整合
Spring Boot 整合之前的内容项目名称描述地址base-data-mybatis整合mybatis-plus(实际上官方教程已经很多,只做了自定义插件)未完成base-jpaJPA基础使用JPA 数据模型定义base-jpa-queryJPA多表关联使用JPA 数据模型关联操作base-log日志配置SpringBoot日志配置...原创 2020-05-05 19:46:58 · 7689 阅读 · 0 评论 -
Spring Boot 整合——kafka消息转换、使用异步获取消息以及使用事务消息
Spring Boot 整合之前的内容项目名称描述地址base-data-mybatis整合mybatis-plus(实际上官方教程已经很多,只做了自定义插件)未完成base-jpaJPA基础使用JPA 数据模型定义base-jpa-queryJPA多表关联使用JPA 数据模型关联操作base-log日志配置SpringBoot日志配置...原创 2020-05-05 19:54:04 · 4516 阅读 · 0 评论 -
Spring Boot 整合——RabbitMQ配置消息确认回调、消息转换以及消息异常处理
消息回调消息队列在实际运用中,作为消息的生产者,很多时候我们需要确认消息是否成功发送到了mq中。同时我们还需要知道,假如消息出现异常时的异常情况。为了满足这个业务场景,我们就需要配置消息回调。开启消息回调为了保证消息生产者能够收到消息的回调信息,我么需要修改以下配置,只有添加了下面的配置,才能保证添加相关代码后可以收到系统的回复。spring: rabbitmq: # 开启发送...原创 2019-08-14 21:20:34 · 10233 阅读 · 9 评论 -
Spring Boot 整合——RabbitMQ配置延时队列和消息重试
延时队列通常我们会有一些额外的需求,一些队列中的消息并不是需要立即需要被消费掉的。这个时候我们需要将消息延迟处理。为了处理这些延时的消息。这个时候就是死信路由发挥作用的时候了。要实现延迟队列,首先我们需要了解RabbitMQ中对于和消息相关的概念:消息的TTL和死信ExchangeTTL消息的TTL指的是消息的存活时间(Time To Live)。RabbitMQ中可以对队列或者每一个消息...原创 2019-08-15 23:00:06 · 3459 阅读 · 3 评论 -
Spring Boot 整合——JPA 数据模型定义(数据实体基础注解使用)
JPAJPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。JPA介绍JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity进行注释,JP...原创 2019-08-21 21:47:48 · 3384 阅读 · 0 评论 -
Spring Boot 整合——RabbitMQ基础使用
消息队列的基本介绍关于消息队列消息队列是一种传输服务。他的角色就是维护一条从Producer到Consumer的路线,保证数据能够按照指定的方式进行传输。消息队列中的角色消息队列中包含下面的角色,各个角色之间相互配合实现了整个消息传递的功能。Producer(消息生产者)Consumer(消息消费者)Exchange(交换器)Queue(队列)RoutingKey(路由k...原创 2019-08-13 21:38:38 · 587 阅读 · 0 评论 -
Spring Boot 整合——Redis延时队列的简单实现(基于有赞的设计)
设计之前学习Redis的时候发现有赞团队之前分享过一篇关于延时队列的设计:https://tech.youzan.com/queuing_delay/, 现在就尝试实现一下业务流程首先我们分析下这个流程用户提交任务。首先将任务推送至延迟队列中。延迟队列接收到任务后,首先将任务推送至job pool中,然后计算其执行时间。然后生成延迟任务(仅仅包含任务id)放入某个桶中时间组件时刻轮...原创 2019-08-12 21:34:44 · 10836 阅读 · 19 评论 -
Spring Boot 整合——Redis分布式锁的简单实现
共享的数据当我们的系统在一起的时候,假如去操作共享的数据的时候,我们可以加锁来保证数据的安全。但是当我们系统被拆分成多个服务,或者不同的系统去共享一部分数据,而此数据可以被多个系统修改的时候,比如多个系统去修改一个订单的信息。为了保证数据的可靠,我们需要在分布式或者多系统之间找出一种锁的实现方式。而在分布式系统中实现锁的途径有多种。这里我们先讲Reids的方式。首先要声明的本例子使用的版本信...原创 2019-08-11 21:45:45 · 894 阅读 · 0 评论 -
Spring Boot 整合——Redis实现简单的发布订阅以及配置序列化方式
设置序列化方式为key和value配置特殊的序列化工具下面的内容,使得key使用了StringRedisSerializer序列化工具。使用value 使用了jackson2JsonRedisSerializer的序列化工具@Configurationpublic class RedisConfig extends CachingConfigurerSupport { @Bea...原创 2019-08-09 00:14:59 · 1407 阅读 · 1 评论 -
JAVA队列介绍(Queue)——DelayQueue(java延迟队列)
DelayQueueDelayQueue是一个支持延时获取元素的无界阻塞队列java实现原理public class DelayQueue<E extends Delayed> extends AbstractQueue<E> implements BlockingQueue<E> { private final transient Re...原创 2019-10-04 23:17:45 · 1243 阅读 · 0 评论 -
Spring Boot 整合——RedisTemplate使用基础
spring-boot-starter-data-redisspring-boot-starter-data-redis是Spring对redis一系列操作进行的封装。它简化了很多redis的操作,让开发的精力更多的投入在业务上面。依赖的引入 <dependencies> <dependency> <groupId...原创 2019-08-07 21:39:41 · 3254 阅读 · 0 评论 -
Spring Boot 整合——JPA 数据模型关联操作(一对一、一对多、多对多)
表关联上一篇介绍了JPA的简单使用,这一篇介绍JPA在表关联上的使用一对一配置参数JPA对于数据实体一对一映射使用的是@OneToOne注解。代码User用户表/** * 用户信息 * @author daify **/@Data@Entity@Table(name = "cascade_user")public class User { @Id ...原创 2019-08-22 23:14:14 · 4755 阅读 · 0 评论 -
给Spring Boot项目添加actuator监控
首先;需要在pom中添加依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency>同时注意修改##取消安全状态的身份验...原创 2018-03-02 10:10:17 · 1763 阅读 · 0 评论 -
Spring的事件发布(ApplicationEventPublisher)和事件订阅(ApplicationListener)
Spring 的事件发布工具平时开发中会发现Spring提供了一系列的工具满足我们的业务场景,其中有一项是提供了事件的发布和订阅。事件的发布主要是依靠ApplicationEventPublisher来进行的。要想实现事件发布主要需要下面几个对象:任务、事件、事件监听。任务任务就是一个普通的类,用来保存你要发布事件的内容。这个没有特殊限制,可以根据自己业务随意设置。import lom...原创 2019-08-19 21:05:57 · 27724 阅读 · 4 评论 -
Spring Cloud 入门——5.1 Feign 声明式调用
代码信息本篇文章涉及代码版本组件版本Spring Boot2.0.8.RELEASESpring CloudFinchley.SR1本篇文章涉及应用应用说明base-eureka服务发现base-feign声明式调用base-producer提供服务的最基础的应用之前几个例子中的服务调用,我们使用直接...原创 2019-07-22 23:36:00 · 184 阅读 · 0 评论 -
JAVA队列介绍(Queue)——LinkedTransferQueue
LinkedTransferQueueLinkedTransferQueue 链表实现的无界阻塞队列。相对于其他阻塞队列,LinkedTransferQueue多了tryTransfer和transfer方法。其使用一种预占的模式,当消费者获取元素的时候如果队列不为空则直接获取元素,如果队列为空,则生产一个null的元素,然后在这个节点上等待。当有新的线程添加元素的时候,如果发现有null的元...原创 2019-10-08 00:35:53 · 590 阅读 · 0 评论 -
JAVA队列介绍(Queue)——PriorityBlockingQueue
PriorityBlockingQueuePriorityBlockingQueue 支持优先级排序的无界阻塞队列, 默认情况下元素采取自然顺序升序排列。也可以自定义类实现 compareTo()方法来指定元素排序规则,或者初始化 PriorityBlockingQueue 时,指定构造参数 Comparator 来对元素进行排序。java实现原理public class PriorityB...原创 2019-10-02 22:11:12 · 836 阅读 · 0 评论 -
JAVA队列介绍(Queue)——ArrayBlockingQueue和LinkedBlockingQueue
ArrayBlockingQueueArrayBlockingQueue是采用数组实现的有界阻塞线程安全队列。如果向已满的队列继续塞入元素,将导致当前的线程阻塞。如果向空队列获取元素,那么将导致当前线程阻塞。java实现原理public class ArrayBlockingQueue<E> extends AbstractQueue<E> imple...原创 2019-10-01 21:31:56 · 761 阅读 · 0 评论 -
JAVA常用数据结构——Set(HashSet、LinkedHashSet、TreeSet)
HashSet要了解HashSet之前最好先了解HashMap,因为看下源代码就可以发现所谓的Set借口下的实现,底层都是基于Map来保存数据的。JAVA常用数据结构——Map(HashMap、LinkedHashMap、TreeMap)java实现原理public class HashSet<E> extends AbstractSet<E> im...原创 2019-09-30 18:40:46 · 932 阅读 · 0 评论 -
JAVA常用数据结构——Map(HashMap、LinkedHashMap、TreeMap)
HashMap最常用的哈希表, 内部通过数组 + 单链表的方式实现。关于哈希表可以查看数据结构基础——数组、散列表java实现原理public class HashMap<K, V> extends AbstractMap<K, V> implements Map<K, V>, Cloneable, Serializable { private ...原创 2019-09-29 22:04:53 · 659 阅读 · 0 评论 -
JAVA常用数据容器——List(LinkedList、ArrayList)
因为一些失误,在这篇文章使用的是JDK11的代码进行分析的。JDK11和JDK8相比原理并没有太多改变,但是代码倒是简洁不少。LinkedList经典的双链表结构, 适用于乱序插入, 删除. 指定序列操作则性能不如ArrayList, 这也是其数据结构决定的关于链表可以查看链表、栈、队列java实现原理public class LinkedList<E> extends ...原创 2019-09-29 00:28:58 · 532 阅读 · 0 评论 -
JAVA常用数据容器——总览
JAVA中的数据容器java提供了多种数据集合工具,我们通过这些工具,根据我们的业务需求实现了不同的数据操作。从接口上来看,JAVA提供的数据集合主要涉及两部分一部分是java.util.Collection的实现类。一部分是java.util.Map的实现类个人习惯对于我们常说的数据结构(线性表、对、树、栈、图、散列)更像是JAVA中的接口,只是定义了相关规则,并不存在相关实现。而J...原创 2019-09-29 00:28:35 · 1092 阅读 · 0 评论 -
Spring Boot 整合——swagger2使用
引入swagger配置如今的开发,前后端分离越来越普遍。日常我们工作的时候前后端配合的时候,后端通常需要提供一份方便前端使用的API文档。而一篇文档的准确、可理解性的好坏是保证合作能否稳步进行的关键。而Swagger就是一种可以根据我们在代码中的注释来自动生成在线API文档的工具。有了Swagger不仅节省了大量编写API文档的时间,而且提供了调试的渠道。依赖引入使用swagger我们需要引...原创 2019-08-06 21:56:40 · 1452 阅读 · 0 评论 -
Spring Boot 整合——SpringBoot日志配置
日志的作用在本地调试的时候,我们可以通过断点等方式进行调试、但是当系统在测试环境或者被部署到生产环境中,我们无法通过断点进行调试。而且很多时候我们都是等问题发生之后才能获知问题的出现。这个时候我们需要一个可靠的方式记录问题发生的情况。日志系统虽然不能实现什么业务、也无法提高系统的性能。但是日志是保证服务可靠的重要功能。日志的基础知识日志级别假如根据java.util.logging.Le...原创 2019-08-05 21:39:45 · 3130 阅读 · 0 评论