java核心知识点
文章平均质量分 76
关于java核心知识点学习及应用
暮色里de白雪檐
相信自己,人生之美在于当下
人生四季,寒暑交替,笑看起起落落
心若简单,生活就简单
展开
-
【SpringAop】【统一日志处理】注解方式理解以及使用
Retention(RetentionPolicy.RUNTIME) // 什么时候使用该注解,我们定义为运行时;@Target({ElementType.METHOD}) //用于什么地方,我们定义为作用于方法上;@Documented //注解是否将包含在 JavaDoc 中配置AOP切面@Aspect:声明该类为一个注解类;@Pointcut:定义一个切点,后面跟随一个表达式,表达式可以定义为切某个注解,也可以切某个 package 下的方法;原创 2020-07-15 15:56:00 · 391 阅读 · 1 评论 -
Spring Upload File 报错FileNotFoundException
我们在项目中肯定经常遇到文件流相关的问题,本篇博文就是记录下使用文件路径不当引发的错误。转载 2024-05-24 18:23:56 · 60 阅读 · 0 评论 -
链路追踪原理
随着业务需求的快速变化和技术的演进,当一个用户请求需要跨越多个线程时,形成了复杂的调用链路。当出现性能问题、错误或故障时,导致故障排查、性能优化和业务逻辑理解变得困难。本文主要论述链路追踪的原理。原创 2024-05-21 18:39:14 · 201 阅读 · 0 评论 -
线程池异常如何处理?
忽的一下,想到了线程池的比较重要的一个参数:ThreadFactory接口,这个接口的作用是按需创建新线程的,使用线程工厂消除了对Thread#Thread(Runnable) new Thread的强依赖,使应用程序能够使用特殊的Thread子类、优先级等。大白话就是让线程池中的线程使用我们自定义的线程,这个自定义可不是我们通过execute()或submit()传进来的自定义线程,而是Worker类中的thread变量,也就是实际运行的线程,我们看一下Worker类的构造方法。原创 2024-05-17 17:04:28 · 1604 阅读 · 0 评论 -
API接口加密方式业务实战
在需要加密的接口上通过实现自定义注解,对方法的返回值加密。原创 2024-05-14 14:14:24 · 232 阅读 · 0 评论 -
服务调用中的异常处理方案
在微服务架构中,A服务调用B服务,当B服务中抛出异常时,我们的意愿是能够获取到所有的异常信息,并且可以触发服务的熔断降级。但由于全局异常处理机制的存在,会帮我们处理B服务中抛出的异常,并把HTTP的状态码设置为200,那么此时对A服务来说,对B服务抛出的异常是无感知的,仍会继续业务代码的执行,并且不会触发服务的熔断降级,可能会导致微服务系统的雪崩。注意:这里要区分业务状态码和HTTP的相应状态码,业务状态码是无法触发降级的。现在有个服务A 和服务B部分代码服务A 的代码Feign客户端的代码服务B的代码原创 2024-05-13 16:04:50 · 857 阅读 · 0 评论 -
如何优雅的实现接口限流?
首先限流,其实解决方案有很多,比如通过nginx配置,通过gateway网关进行限流,比如Spring Cloud GateWay整合熔断器实现限流但是以上都是全局的,如何灵活的针对某些接口进行不同级别的限流呢?原创 2024-05-09 20:32:30 · 438 阅读 · 0 评论 -
如何解决线程池引发的future性能问题?
这个自定义拒绝策略里面其实就打印个日志没有抛出异常,也就是说不管你处理什么逻辑,但是如果不抛出异常的话呢,那么这个任务其实是没有结束的@overrideSystem.out.println("线程池有任务被拒绝了,请关注");上面两个方法就是核心了,也就是说在刚开始把task任务包装成FutureTask任务的时候,也就是new FutureTask()初始化的状态值是0,所以调用get方法的时候状态值还是0,并没有把状态值改变成1,所以对于线程池而已这个任务并没有完成,就会一直阻塞,那如何处理呢?原创 2024-04-16 10:09:24 · 471 阅读 · 0 评论 -
Spring Retry重试机制
重试的使用场景比较多,比如调用远程服务时,或者feign远程调用的重试,由于网络或者服务端响应慢导致调用超时,此时可以多重试几次。用定时任务也可以实现重试的效果,但比较麻烦,用Spring Retry的话一个注解搞定所有。话不多说,先看演示。翻译 2024-03-22 13:56:35 · 113 阅读 · 0 评论 -
Spring Cloud GateWay整合熔断器实现限流
其实网关是很强大,能做的事情很多,包含很多过滤器包括限流,具体的网关可以参考我的另外一篇博文。原创 2024-03-07 14:18:25 · 439 阅读 · 0 评论 -
CompletableFuture在异常处理方面的一些常见问题和解决方案!
CompletableFuture是Java 8引入的一个类,位于java.util.concurrent包下。它提供了一种方便的方式来进行异步编程,尤其是在处理一系列并发任务时非常有用。CompletableFuture支持链式调用和组合多个异步任务。我们可以通过调用各种方法来注册回调函数,在任务完成时获取结果或处理异常CompletableFuture提供了强大的功能来处理异步编程中的结果和异常。然而,在处理异常时,我们需要注意一些常见的陷阱。转载 2024-02-26 17:55:44 · 393 阅读 · 1 评论 -
玩转Java8新特性
*** 整车大版本策略-有效/无效处理逻辑* @param status 有效:1 无效:0**//*** 如果参数为有效:1 ---> 该目标大版本下所有原版本策略都是有效的,可以继续* 反之无效:0 ----> 该目标大版本下所有原版本策略都是无效的,需要将策略都设置失效状态 2、策略关联的任务都设置为失效状态* @param status 有效:1 无效:0**/// 通过目标大版本号且是有效状态的获取所有的关联任务id// 批量修改任务的状态置为已失效。原创 2024-02-07 13:59:40 · 364 阅读 · 0 评论 -
mysql锁的实际场景分析
首先判断该where的条件列是否命中索引了,注意是命中哈,也就说即使加了索引但是实际上并未命中,都是导致全表扫描,给所有的数据加上了行锁+间隙锁,相当于表锁如果命中了索引,如果更新操作未提交事务,此时记录不存在那么就会产生间隙锁,存在就行锁,也可能两个锁同时存在,如果记录存在那一定是行锁如果命中了索引,如果插入操作未提交事务,一定是行锁,不会产生间隙锁,及时事务未提交也不会影响别的事务进行更新或者插入操作。原创 2023-12-27 17:41:01 · 696 阅读 · 0 评论 -
自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏【权限控制】
我们在使用手机银行的时候经常能看到APP上会将银行卡的卡号中间部分给隐藏掉使用 ***** 来代替,在某些网站上查看一些业务密码时(例如签到密码等)也会使用 ***** 来隐藏掉真正的密码,那么这种方式是如何实现的呢?我们这篇文章的实现思路就基于Hutool来实现,在Hutool中提供了一个名为 DesensitizedUtil 的工具类,我们使用这个工具类来加密。原创 2023-12-26 11:06:22 · 1058 阅读 · 0 评论 -
还在无脑使用synchronized?volitale或许能更优雅的帮到你
volatile 修饰符适用于以下场景:某个属性被多个线程共享,其中有一个线程修改了此属性,其他线程可以立即得到修改后的值。比如boolean flag ,或者监视数据变化,实现轻量级同步单纯的赋值,比如将flag的值改为true或者false,不适用于count++这样的非原子操作监视数据变化,比如检测到flag的值变为true,就退出循环等操作,当温度超过40度就报警等。转载 2023-12-09 18:15:23 · 130 阅读 · 0 评论 -
【CompletableFuture】批量异步任务处理
当我们在项目中遇到很多业务同时处理,如果是串行肯定是影响性能的,这时候就需要异步执行了,说道异步肯定就有很多方案了。原创 2023-11-07 17:11:06 · 593 阅读 · 0 评论 -
获取上下文(ApplicationContext)工具类
【代码】获取上下文(ApplicationContext)工具类。原创 2023-10-30 15:06:23 · 217 阅读 · 0 评论 -
获取请求头信息工具类
【代码】获取请求头信息工具类。原创 2023-10-12 18:20:07 · 162 阅读 · 0 评论 -
加解密算法+压缩工具
【代码】加解密算法+压缩工具。原创 2023-08-03 14:14:53 · 294 阅读 · 0 评论 -
【java8】如何优雅的参数格式校验工具类
【代码】【java8】如何优雅的参数格式校验工具类。原创 2023-08-03 14:08:50 · 233 阅读 · 0 评论 -
【如何优雅的实现延迟消息多次提醒】方案集合
如何利用redis去实现延迟消息,redis的性能是最好的,也是最轻量级的,本篇博客介绍了五种不同的方式原创 2023-04-21 15:31:34 · 745 阅读 · 0 评论 -
【拦截器、过滤器、springAop】那些不为人知的隐秘
前后端交互使用密文传输,实现aop动态密文加解密原创 2023-02-20 10:28:06 · 2986 阅读 · 0 评论 -
深入理解spring三级缓存解决循环依赖的设计思路
spring循环依赖解决方案的深入分析原创 2023-01-31 16:00:58 · 760 阅读 · 0 评论 -
【对接三方平台如何优雅的进行数据校验-validation/valid神器】
对接各个三方系统进行数据校验原创 2022-12-08 17:43:17 · 374 阅读 · 0 评论 -
Json转bean-【下划线和陀螺峰格式互转】
big Json转bean,将下划线和陀螺峰互转原创 2022-12-05 14:17:15 · 1797 阅读 · 0 评论 -
JavaBean处理器之MapStruct
bean对象如何优雅的复制、转换原创 2022-07-19 14:14:39 · 540 阅读 · 0 评论 -
TransmittableThreadLocal还有人不知道的吗?
前言首先本文主要介绍ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal三者之间区别、如何使用、什么场景使用以及对原理和源码的介绍。介绍原理的时候通过最直白、最易懂的语言争取让大家了解三者之间的区别,以及日常如何把他们使用起来ThreadLocalThreadLocal解决的是每个线程可以拥有自己线程的变量实例。可以从隔离的角度解决变量线程安全的问题。举个例子用户登陆后将用户的信息保存到ThreadLocal中,ThreadLoca原创 2022-05-26 16:30:12 · 404 阅读 · 1 评论 -
浅谈设计模式-建造者模式
之前几篇博文已经解释过其他的设计模式了,这里将为大家在实际项目中如何使用建造者模式主要解决: 主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。优点:1、产品必须有共同点,范围有限制。2、如内部变化复杂,会有很多的建造类。今天,我们再来学习另外一个比较常用的创建型设计模式,Builder 模式,中文翻译为建造者模式或者构建者模式,也有人叫它生成器模转载 2022-05-26 16:14:33 · 194 阅读 · 0 评论 -
Spring Cloud GateWay-过滤器
说起过滤器可能有不少实现方式,比如spring自带的就可以实现Spring Boot实战-配置过滤器的两种方式这篇文章说的是Spring Cloud GateWay-过滤器,因为由于微服务的兴起,现在各个项目都会采用网关进行单独的资源隔离、token校验等,而不是放在下游的业务服务进行处理Gateway 过滤器总结filter的作用和生命周期Zuul1.x 阻塞式IO 2.x 基于Netty,Spring Cloud GateWay天生就是异步非阻塞的,基于Reactor模型;一个请求–>网原创 2022-05-26 16:04:54 · 3838 阅读 · 0 评论 -
Spring到底何时为使用事务注解的bean创建代理 ?
今天说这个问题之前,大家需要知道一个热知识,那就是一个类中的某个方法被赋予注解@Transactional,则无法在本类中进行调用,否则事务失效,那是因为,无法创建代理类,也就是无法使用事务特性,毕竟spring的事务是通过AOP中的代理模式进行实现的,那么问题来了?spring的bean何时被创建代理类呢,又怎么知道的呢,如果@Transactional放在类上,那就可以理解bean在进行实例化的时候就知道了,但是放在方法上呢?其实也是通过反射的方式给这个对象进行生成代理类的,接下来就重点讲解下这个问题转载 2022-01-11 22:58:17 · 768 阅读 · 0 评论 -
java日志框架如何选型?
对于一个应用程序来说日志记录是必不可少的一部分。线上问题追踪,基于日志的业务逻辑统计分析等都离不日志。java领域存在多种日志框架,目前常用的日志框架包括Log4j 1,Log4j 2,Commons Logging,Slf4j,Logback,Jul日志框架类别Log4j Apache Log4j是一个基于Java的日志记录工具。它是由Ceki Gülcü首创的,现在则是Apache软件基金会的一个项目。 Log4j是几种Java日志框架之一Log4j 2 Apache Log4j 2是apach原创 2021-12-10 18:23:39 · 1159 阅读 · 0 评论 -
接口调用神器RestTemplate-将返回数据转换为指定类型
RestTemplate 概述发送 http 请求,估计很多人用过 httpclient 和 okhttp,确实挺好用的,而 Spring web 中的 RestTemplate 和这俩的功能类似,也是用来发送 http 请求的,不过用法上面比前面的 2 位要容易很多。spring 框架提供的 RestTemplate 类可用于在应用中调用 rest 服务,它简化了与 http 服务的通信方式,统一了 RESTful 的标准,封装了 http 链接, 我们只需要传入 url 及返回值类型即可。相较于之前原创 2021-11-25 17:28:23 · 5322 阅读 · 1 评论 -
Spring 自定义注解后,如何获取添加了该注解的所有类?终极解答
问题需求通常在业务开发时,我们可能会用到自定义注解(自定义注解的使用和解析,本章暂不介绍)。在使用自定义注解后,我们需要获取使用了该注解的所有类,然后做一个验证。那么、问题来了,我们如何获取被某注解标注的所有类呢?请欣赏下文具体实现定义两个注解@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documentedpublic @interface RespMegTypeSup { public String val翻译 2021-11-05 17:27:14 · 4614 阅读 · 0 评论 -
数据结构-Queue
Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口下表显示了jdk1.5中的阻塞队列的操作: add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException..原创 2021-11-05 16:40:24 · 581 阅读 · 0 评论 -
【RestTemplate】统一添加拦截器使用场景
首先说到这个RestTemplate ,大家都知道用来发送http请求的封装模板,首先使用场景有两个典型:第一:和第三方交互使用http请求时,需要进行token认证第二:springcloud架构中的Hystrix中上下游请求时token认证开始上正菜吧……SpringCloud RestTemplate通过拦截器统一添加token实现拦截器package xxxxxx;import org.springframework.http.HttpHeaders;import org.spri原创 2021-11-04 16:58:21 · 1473 阅读 · 1 评论 -
java中Executor、ExecutorService、ThreadPoolExecutor区别
在阿里巴巴手册中有一条建议:【强制】线程池不允许使用 Executors 去创建,而是通过ThreadPoolExecutor的方式,这样的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。如果经常基于Executors提供的工厂方法创建线程池,很容易忽略线程池内部的实现。特别是拒绝策略,因使用Executors创建线程池时不会传入这个参数,直接采用默认值,所以常常被忽略。下面我们就来了解一下线程池相关的实现原理、API以及实例线程池的作用在实践应用中创建线程池主要是为了:减少资原创 2021-11-03 22:56:00 · 522 阅读 · 0 评论 -
HashSet和TreeSet区别
因为都是set的子类,Set具有元素不可重复性,所以TreeSet和hashset都不可放2个相同的元素TreeSet底层是TreeMap实现的 ,很多api都是利用TreeMap来实现的HashSet底层是HashMap实现的,很多api都是利用HashMap来实现的TreeSetTreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0HashSet集合不能存储重复的元素,那么元素之间是否重复,HashSet是根据什么机原创 2021-04-08 23:23:39 · 10365 阅读 · 0 评论 -
Springboot 自定义注解+AOP实现修改参数的值
自定义注解package com.zkml.study.annotation;import java.lang.annotation.*;@Target({ElementType.PARAMETER, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface CheckNullParams { }实现AOPpackage com.zkml.study.aop;.原创 2021-03-09 14:21:36 · 4126 阅读 · 1 评论 -
Springboot 自定义注解+AOP实现参数不能为空
自定义注解类package com.wing.my.cloud.system.modular.system.util.annotation;import java.lang.annotation.*;@Target({ElementType.PARAMETER, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface CheckNullParams { String[].原创 2021-03-09 14:18:15 · 1867 阅读 · 1 评论 -
日期操作工具类,推荐使用joda优化时间操作-DateUtil
import org.apache.commons.lang3.StringUtils;import org.joda.time.*;import org.joda.原创 2021-03-01 16:35:22 · 225 阅读 · 0 评论