自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(214)
  • 资源 (1)
  • 收藏
  • 关注

转载 @Transactional和锁导致的问题

坑:使用@Transactional注解开启事务管理,假如线程一调用addEmployee获取锁调用addEmployee()方法之后但这时还未提交事务,数据库中id =8 该条记录还未有做更新,线程一释放锁,线程二获取到锁调用完方法之后和线程一恰好一起提交事务,此时可能会造成数据库表被锁(或死锁),出现异常之后由于使用@Transactional事务会造成线程一和线程二都没有修改到数据库记录。注意:无论是使用synchronized 作锁或是使用redis作锁都会有可能这种情况发生,在事务中使用锁无效!

2023-11-01 17:45:14 313

原创 使用流水线部署了项目却没有打印日志

工作中遇到一个问题,使用流水线发布了项目后,项目程序功能正常,但是日志却没打印到指定的日志文件上。该项目是部署到虚拟机上的,大致部署流程是流水线发布后执行项目里的启动脚本。

2023-06-07 17:50:00 927

原创 SQL中case when用法详解及使用案例

Case具有两种格式。简单Case函数和Case搜索函数。

2023-03-23 16:25:01 12780

原创 BindingException:Invalid bound statement (not found)异常

本文的mybatis是与springboot整合时出现的异常,若使用的不是基于springboot,解决思路也大体一样的。但在这之前,我们先要知道整合mybatis的三个重要的工作,如此才能排查,且往下看。我们打开pom文件如下:这部分代码的作用是指定需要编译到taget目录下的资源文件。我们的程序运行,都是执行编译好的taget目录下的内容,若taget里找不到xml文件资源就会报错Invalid bound statement (not found)。每个人的项目配置都可能有些区别,但在这里我们只需要

2023-03-18 19:59:16 9146

转载 JAVA多线程基础篇-join方法的使用

join()是Thread类中的一个方法,它的作用是将当前线程挂起,等待其他线程结束后再执行当前线程,即当前线程等待另一个调用join()方法的线程执行结束后再往下执行。通常用于在main主线程内,等待其它调用join()方法的线程执行结束再继续执行main主线程。本文将探索join方法的使用方式和使用原理。

2023-02-26 15:27:27 575

转载 Java虚拟机对synchronized的优化

关于synchronized / Lock:1.JDK 1.5之前,Java通过synchronized关键字来实现锁的功能2.JDK 1.5,并发包中新增了Lock接口来实现锁功能3.Lock同步锁是基于Java实现的,而synchronized是基于底层操作系统的Mutex Lock实现的4.为了提升性能,在JDK 1.6引入偏向锁、轻量级锁、重量级锁,用来减少锁竞争带来的上下文切换5.借助JDK 1.6新增的Java对象头,实现了锁升级功能。

2023-02-26 15:20:11 156

转载 BigDecimal的介绍及使用场景

Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。

2023-02-21 16:15:19 1162

转载 什么是内部类?内部类的种类?内部类的作用?

定义: 将一个类定义在一个类或者一个方法里面,这样的类称着内部类。

2023-02-21 15:28:27 68

转载 equals和hashCode之间的关系

讲道理,单从方法的定义上来看,equals() 和 hashCode() 这两个方法之间没有任何亲戚关系,远房都够不上资格。但往深处扒拉,它们之间还真的是有千丝万缕的关系。到底是什么关系呢?如果大家伙比较感兴趣的话,就请随我来,打怪进阶喽!

2023-02-21 15:07:57 103

转载 Java创建对象的5种方式

可以随意的调用构造器。

2023-02-21 14:52:50 618

原创 Date、SimpleDateFormat和LocalDate、LocalTime、LocalDateTime、ZonedDateTime、DateTimeFormatter的使用和区别

java1.8引入的新特性中,其中就含有对日期时间的处理,下面我们一起学习和了解。

2023-02-18 18:01:49 2730

转载 静态代码块,构造代码块(普通代码块),局部代码块,构造函数的执行顺序

【代码】静态代码块,构造代码块(普通代码块),局部代码块,构造函数的执行顺序。

2023-02-16 16:45:41 66

原创 通过java代码实现对json字符串的格式美化(完整版)

之前转载过一篇文章,也是有关于通过java代码实现对json字符串的格式美化,但是那篇文章的实现还不够完善,比如其对字符串中出现特殊字符时,会出现转换失败。因此博主本人也是闲暇时在那份代码的基础上做了完善和补充。好,废话不多说,上链接上代码。本文参考于 https://blog.csdn.net/ardo_pass/article/details/78729978 ,并在其基础上做了完善,且往下看。三、执行结果四、与Notepad的json格式化工具比较Notepad工具若是安装了json格式化工

2022-12-03 14:38:07 6852 1

原创 DB2查看索引是否生效

sql分析语语法: db2expln -d 数据库名 -t -d -q “目标sql”示例:db2expln -d ac_db -t -d -q “select * from tbl_qua_instance_0 where user_id = ‘123456’”执行结果:看到执行结果最后一行,就是代表用上了索引。再改下sql,把查询条件去掉:db2expln -d ac_db -t -d -q “select * from tbl_qua_instance_0”得到结果如下:最后一行没

2022-11-30 10:51:40 1882

原创 根据模板快速生成代码

【代码】根据模板快速生成代码。

2022-10-18 22:48:26 724

原创 动态判断某个对象是否继承或实现了某个类或接口

平时很少用到,但本人在工作中偶然写过一个日志框架用到了。应用场景大致是:传入了一个Object对象,通过反射遍历其中的每个字段,再判断这些字段是否含有集合类型的字段,并且这些集合类型字段的泛型必须为指定类型,找到这些字段后,并对其进行特殊处理。为了寻找这些字段就用到了下面的那个方法了。因此就记录一下。import java.io.Serializable;import java.util.ArrayList;import java.util.List;import java.util.Map;

2022-05-27 09:49:00 991

原创 spring Aop切面的环绕通知时,如何防止切面异常影响主业务流程执行

一、前言我们在做切面编程时,可能会使用到的环绕通知@Around。示例代码如下:@Aspect@Componentpublic class MyAspect { @Around("execution(public int com.heygo.spring.aop.CalcServiceImpl.*(..))") public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {

2022-05-26 14:58:38 6230

转载 SpringBoot常用拦截器(HandlerInterceptor,ClientHttpRequestInterceptor,RequestInterceptor)

一、SpringBoot常用拦截器下面3种拦截器,都是http拦截器,在处理业务逻辑之前对http请求信息进行处理,比如获取请求头,请求参数,设置请求头,请求参数等等思路清晰,先说jar包:HandlerInterceptor—>spring-webmvc项目,org.springframework.web.servlet.HandlerInterceptorClientHttpRequestInterceptor—>spring-web项目,org.springframework.h

2022-05-15 11:17:47 6667 3

原创 SpringBoot自动装配的应用

一、什么是自动装配在使用SpringBoot的时候,会自动将Bean装配到IoC容器中。例如我们在使用Redis数据库的时候,会引入依赖spring-boot-starter-data-redis。在引入这个依赖后,服务初始化的时候,会将操作Redis需要的组件注入到IoC容器中进行后续使用自动装配大致过程如下:1)通过注解@SpringBootApplication=>@EnableAutoConfiguration=>@Import({AutoConfigurationImportS

2022-05-12 09:23:48 1002

转载 拦截器与过滤器的区别

文章目录 一、二者理解过滤器(Filter)拦截器(Interceptor) 二、拦截器与过滤器的区别区别: 三、拦截器与过滤器的触发时机拦截器与过滤器触发时机不一样 四、使用场景五、图解 一、二者理解 过滤器(Filter) 过滤器,是在ja...

2022-04-14 20:37:42 3806 1

转载 Redis 缓存淘汰策略(十三)

一、redis内存配置介绍1.1 查看 redis 最大占用内存在 redis.conf 配置文件中有一个,输入 :set nu 显示行号,大约在 800 多行有一个 maxmemory 字段,用预设值 redis 的最大占用内存如果不设置最大内存大小或者设置最大内存大小为 0,在 64 位操作系统下不限制内存大小,在32位操作系统下最多使用 3GB 内存。一般推荐Redis设置内存为最大物理内存的四分之三,也就是 0.751.2 修改 redis 内存设置通过修改文件配置(永久生效):修改

2022-03-21 19:57:26 416

转载 Redis 分布式锁(十二)

一、搭建测试工程项目为了演示redis分布式锁的应用,我们需要搭建一个分布式微服务项目。架构如下:1.1 Linux和redis的下载和安装这里省略,可以参考这篇文章:https://blog.csdn.net/oneby1314/article/details/1137894121.2 搭建 SpringBoot 工程两个 Module:redis1 和 redis2搭建 SpringBoot 工程的步骤新建 Module 或者 Maven 子工程编写 pom.xml 管

2022-03-20 12:46:12 236

转载 Spring Aop的使用和通知注解的执行顺序

一、Aop 常用注解@Before 前置通知: 目标方法之前执行@After 后置通知: 目标方法之后执行(始终执行)@AfterReturning 返回后通知: 执行方法结束前执行(异常不执行)@AfterThrowing 异常通知: 出现异常时候执行@Around 环绕通知: 环绕目标方法执行spring4和spring5的全部通知执行顺序是不同的,下面用案例说明。二、案例演示2.1 业务类创建业务接口类:CalcService/** * @InterfaceName CalS

2022-03-18 14:12:26 2066

转载 JUC-AQS详解(十八)

一、AQS 前置知识公平锁和非公平锁可重入锁LockSupport自旋锁数据结构之链表设计模式之模板设计模式二、AQS 是什么?1、字面意思AQS(AbstractQueuedSynchronizer):抽象的队列同步器一般我们说的 AQS 指的是 java.util.concurrent.locks 包下的 AbstractQueuedSynchronizer,但其实还有另外三种抽象队列同步器:AbstractOwnableSynchronizer、AbstractQueued

2022-03-15 16:58:44 383

转载 JUC-线程锁之ReentrantLock详解(三)

一、ReentrantLock简介jdk中独占锁的实现除了使用关键字synchronized外,还可以使用ReentrantLock。虽然在性能上ReentrantLock和synchronized没有什么区别,但ReentrantLock相比synchronized而言功能更加丰富,它更灵活、更强大,增加了轮询、超时、中断等高级功能,更适合复杂的并发场景。二、 ReentrantLock是独占锁且可重入的例子:public class ReentrantLockTest { public

2022-03-15 00:19:52 586 3

转载 JUC-LockSupport(十七)

一、LockSupport 是什么?LockSupport是用来创建锁和其他同步类的基本线程阻塞原语。LockSupport中的park()和unpark()的作用分别是阻塞线程和解除阻塞线程,可以将其看作是线程等待唤醒机制(wait/notify)的加强版二、传统两种线程等待唤醒的方法方式1: 使用Object中的wait()方法让线程等待, 使用Object中的notify()方法唤醒线程,与synchronized配合使用。方式2: 使用JUC包中Condition的await()方法让线

2022-03-14 16:04:31 151

转载 JVM-常见SOFE和OOM错误(十)

一、JVM中常见的两种错误StackoverFlowErrorjava.lang.StackOverflowErrorOutofMemoryErrorjava.lang.OutOfMemoryError:java heap spacejava.lang.OutOfMemoryError:GC overhead limit exceeededjava.lang.OutOfMemoryError:Direct buffer memoryjava.lang.OutOfMemoryError:u

2022-03-13 11:34:18 531

转载 JVM-调优工具命令大全(九)

一、调优工具介绍Sun JDK监控和故障处理命令有jps jstat jmap jhat jstack jinfo下面做一一介绍二、jps2.1 介绍JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。可以通过jps -help查看命令使用详情2.2 命令格式jps [options] [hostid]2.3 option参数-l : 输出主类全名或jar路径-q : 只输出LVMID-m : 输出JVM启动时传递给main()的参数

2022-03-12 17:58:48 220

转载 JVM-参数配置(八)

一、JVM参数类型1.1 标配参数java -version java -help java -showversion在jdk各个版本之间稳定,很少有大的变化1.2 X参数-Xint:解释执行 -Xcomp:第一次使用就编译成本地代码 -Xmixed:混合模式1.3 XX参数(1)jdk的调试工具:如何查看一个正在运行中的java程序,它的某个jvm参数是否开启?具体值是多少?jps -l #查看进程号 jinfo -flag PrintGCDetails 进

2022-03-12 12:10:49 308

原创 八大排序算法(六)

一、冒泡排序1.1 基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。优化: 因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在 排序过程中设置一个标志 flag 判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排 序写好后,在进行)1.2 思路分析小结冒泡

2022-03-10 16:10:21 216

转载 JVM-垃圾回收器(七)

[解密JVM-16] 垃圾回收:垃圾回收器 学哥斌 于 2020-07-27 11:55:28 发布 ...

2022-03-08 17:25:36 117

转载 JVM-垃圾回收算法(六)

一、如何判断对象可以回收1.1 引用计数法当一个对象被引用时,就当引用对象的值加一,当值为 0 时,就表示该对象不被引用,可以被垃圾收集器回收。这个引用计数法听起来不错,但是有一个弊端,如下图所示,循环引用时,两个对象的计数都为1,导致两个对象都无法被释放。1.2 可达性分析算法1、JVM 中的垃圾回收器通过可达性分析来探索所有存活的对象2、扫描堆中的对象,看能否沿着 GC Root 对象为起点的引用链找到该对象,如果找不到,则表示可以回收3、可以作为 GC Root 的对象虚拟机栈(栈

2022-03-05 17:48:28 182

转载 JVM-直接内存(四)

一、定义属于操作系统,常见于NIO操作时,用于数据缓冲区分配回收成本较高,但读写性能高不受JVM内存回收管理二、读写流程正常的文件IO流读写过程:使用了DirectBuffer读写过程(直接内存):直接内存是操作系统和Java代码都可以访问的一块区域,无需将代码从系统内存复制到Java堆内存,从而提高了效率。直接内存也会导致内存溢出:public class Main { static int _100MB = 1024 * 1024 * 100; public

2022-03-04 11:28:17 599

原创 排序算法介绍和算法时间复杂度(五)

一、排序算法的介绍排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。二、排序的分类内部排序: 指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。外部排序法: 数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。常见的排序算法分类(图):三、算法的时间复杂度3.1 度量一个程序(算法)执行时间的两种方法事后统计的方法这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二

2022-03-04 09:24:55 276

转载 JVM-StringTable(三)

一、常量池与串池StringTable的关系public class StringTableStudy { public static void main(String[] args) { String a = "a"; String b = "b"; String ab = "ab"; }}将上述代码先编译成字节码,再反编译,得到如下虚拟机指令(部分截图):常量池:方法内的指令StringTable也属于方法区上的一块内存,在数据结构上,是一个哈希表,下面介绍一下指令执

2022-03-03 14:56:28 319 2

转载 JVM-强引用、弱引用、软引用和虚引用(五)

前言Java执行GC判断对象是否存活有两种方式其中一种是引用计数。引用计数:Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于(reachable)可达状态,程序才能使用它。从JDK 1.2版本开始,对象的引用被划分为4种级别,从而使程序能更加灵活地控制对象的生命周期。这4种级别由高到低依次为:强引用、软引用、弱引用和虚引用。一、强引用(Str

2022-03-02 15:53:35 221

转载 ThreadLocal全面解析

学习目标了解ThreadLocal的介绍掌握ThreadLocal的运用场景了解ThreadLocal的内部结构了解ThreadLocal的核心方法源码了解ThreadLocalMap的源码一、ThreadLocal介绍1.1 官方介绍​ 从Java官方文档中的描述:ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型

2022-03-02 11:24:28 747

转载 JVM-内存结构-方法区(二)

一、方法区1.1 定义方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息(比如class文件)、常量、静态变量、即时编译器编译后的代码等数据。1.2 结构方法区是JVM 所有线程共享。主要用于存储类的信息、常量池、方法数据、方法代码等。方法区逻辑上属于堆的一部分,但是为了与 堆 进行区分,通常又叫 非堆。 关于 方法区内存溢出 的问题会在下文中详细探讨。1.3 永久代和元空间1.3.1 PermGen(永久代)PermGen , 就是 PermGen space ,全称是

2022-02-27 22:19:04 900

转载 JVM-内存结构-程序计数器、虚拟机栈、本地方法栈、堆(一)

一、前言1.1 什么是 JVM ?1)定义Java Virtual Machine ,Java 程序的运行环境(Java 二进制字节码的运行环境)。2)好处一次编译,处处执行自动的内存管理,垃圾回收机制数组下标越界检查3)比较JVM、JRE、JDK 的关系如下图所示1.2 JVM种类和结构种类:jvm结构图:ClassLoader:Java 代码编译成二进制后,会经过类加载器,这样才能加载到 JVM 中运行。Method Area:类是放在方法区中。Heap:类的实例

2022-02-27 15:14:30 350

转载 JVM-jps命令使用

一、介绍jps(Java Virtual Machine Process Status Tool)是JDK1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。很多人都是用过unix系统里的ps命令,这个命令主要是用来显示当前系统的进程情况,有哪些进程以及进程id。 jps 也是一样,它的作用是显示当前系统的java进程情况及进程id。我们可以通过它来查看我们到底启动了几个java进程(因为每一个java程序都会独占一个

2022-02-26 22:04:15 594

分布式事务专题-v1.1.pdf

分布式事务专题-v1.1.pdf

2021-10-15

空空如也

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

TA关注的人

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