自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 synchronized锁膨胀过程验证

synchronized的小故事在并发编程中,对于synchronized和Lock的使用是很频繁的。Lock是基于Java的一个框架,synchronized是基于C语言的JVM层级的锁,使用起来很方便。但是呢,在jdk1.6以前,synchronized是一个重量级锁,他的底层需要操作系统来支持,必然涉及到了用户态和内核态的切换,还需要挂起当前线程,知道竞争到锁才执行,因此是很耗性能的。再者,一个C语言程序性能不如Java的Lock框架,也是让人哭笑不得。所以啊,Oracle公司决定对synchr

2021-11-15 13:55:02 4871 2

原创 Flowable使用场景的一点思考

对flowable使用场景的一点思考。在业务系统中使用流程引擎和oa系统略有不同,进而引发一些思考。

2023-03-28 16:46:20 695

原创 并发编程预备知识梳理

提及并发、多线程,就会让大多数Java程序员为之兴奋,至少我是这样的。我觉得让我能够像C程序员一样,靠自己的双手去压榨计算机性能,在上下文切换间起起伏伏地欣赏着代码执行所带来的快感,看着硬件被我无情地压榨着他的性能,大汗淋漓的运转着,一种造物者的优越感油然而生。但是,话又说回来了,Java程序员若不能清楚的了解并发的机制,那这样的代码也极容易存在安全隐患。接下我会写一些并发编程相关的文章,深入剖析Java并发编程相关的知识,就当是近期学习的总结,如果有描述不当的地方,欢迎批评指正。刚接触并发,肯定会对

2021-12-23 13:09:51 284

原创 MySQL锁一文搞懂

日常工作中,经常和MySQL打交道,但是关于锁的知识没有深入研究过,最近花了些时间做个总结。平常对MySQL锁相关知识模棱两可的伙伴们可以看看本文,希望对你有收获。如有描述不清的地方,欢迎批评指正,谢谢!平常我们会听到这些名词:行锁、表锁、死锁、排它锁、间隙锁、悲观锁、乐观锁…这么多锁到底是啥意思呢,很多文章都是对这些锁做了一些概念性陈述,而这些锁是什么时候加的,他和事务又有什么关系,诸如此类问题好像解释得不太多,我想在本文阐述清楚。测试表:CREATE TABLE `account` ( `id

2021-12-21 14:02:12 921 2

原创 Spring框架开天辟地:如果让我设计Spring?

前前后后写了几篇Spring的源码分析,看着寥寥无几的阅读量,我意识到了自己写的不够好,虽然我的流程图、源码注释花了不少时间,可阅读量摆在那,就是不够好。思来想去,我决定再加一篇更加通俗、直观的文章:假如让我们来设计Spring框架,我们该怎么设计,我们会想到什么问题,又该如何解决这些问题。好的开始吧。让我们回到2008年7月11日的早晨。最近我们在项目开发中,遇到了如下的问题,感觉很繁琐,我想搞一个框架出来,方便日后的项目开发:项目中有很多服务类对象,对象间引用极其麻烦,都用单例模式的话,那

2021-12-17 16:41:20 548

原创 log4j2漏洞测试用例

12月10日凌晨,Apache 开源项目Log4j的远程代码执行漏洞细节被公开,由于Log4j的广泛使用,该漏洞一旦被攻击者利用会造成严重危害。据悉,Apache Log4j 2.x <= 2.14.1 版本均回会受到影响。使用2.15.0版本即可避免漏洞攻击。

2021-12-11 22:50:36 669

原创 Spring Boot下@Valid和@Validated的区别【源码级】

Spring Boot项目里对于接口参数校验,可以使用javax.validation.constraints包下的注解来优雅的校验。比如参数长度、是否为null甚至可以使用正则表达式来校验参数格式,以及校验不通过返回的提示信息都可以通过注解进行配置,实在是方便的很。但是本人在开发中遇到了这么几个问题:某一次SpringBoot版本升级后,启动项目提示我没有·javax.validation·的依赖,一开始导入了javax.validation-validation-api仍旧不能启动,后来导入了hi

2021-11-17 17:08:38 814

原创 可以优雅地丢弃@DateTimeFormat和@JsonFormat吗?

YES当然可以想想看我们在项目中什么时候会用到这两个注解呢?Get请求传入java.util.Date、java.time.xxx类型参数,需要配上@DateTimeFormat来解析解析Post请求传入json时候,同样需要将上述两种时间属性上加@JsonFormat来反序列化返回对象里有java.util.Date需加@JsonFormat,配置好时区,不然时间会少8小时先看看平常我们是怎么使用这两个注解的@DateTimeFormat@GetMapping("test")

2021-10-19 14:11:03 514

原创 Spring源码(七)Spring 声明式事务

了解专栏完整的内容,请点击跳转:Spring Framework专栏导航页gitee注释版源码本文对应的流程图声明式事务完整流程事务Advisor解析事务注解匹配web开发离不开和关系型数据库打交道,最常见的就是MySQL。MySQL目前默认的存储引擎是innodb,他是支持事务的(解决多个数据库操作ACID),那Spring又是如何优雅的实现MySQL的事务呢?要想实现事务,无非就是在我们的方法内获取数据库连接,关闭事务自动提交,待方法执行完进行手动提交或异常时进行回滚。这一系列和业务无

2021-10-15 09:31:33 174

原创 Spring源码(六)Spring AOP

了解专栏完整的内容,请点击跳转:Spring Framework专栏导航页gitee注释版源码Aop就是面向切面编程,通过生成代理对象,将与业务代码无关的逻辑织入到代理对象中,减少了代码冗余,降低耦合度,极大地提高了开发的便利性。比如全局异常处理、日志记录等都可以通过Aop进行优雅的实现。Spring Aop的实现过程中,有三个重要的环节切面解析创建动态代理动态代理调用注解方式开启Aop@Target(ElementType.TYPE)@Retention(RetentionPo

2021-10-12 15:00:47 115

原创 Spring源码(五)Spring 事件监听器的两种注册方式

了解专栏完整的内容,请点击跳转:Spring Framework专栏导航页作为一款优先的框架,怎么能少得了监听器呢?虽然说现基于web开发的项目很少用到监听器(大多使用消息队列),但是有些时候又需要用到。以及我们想监听Spring容器的初始化相关事件时候,就可以用到Spring自带的的监听器实现方式。重要组件:事件多播器监听器思维导图两种监听器实现方式接口方式@Lazy@Componentpublic class ContextRefreshedInterfaceListener i

2021-09-30 12:16:00 769

原创 Spring源码(四)Spring Bean的循环依赖

了解专栏完整的内容,请点击跳转:Spring Framework专栏导航页上一篇文章我们了解了Spring Bean的生命周期,当时提到了Bean的循环依赖问题,本文就再次展开描述该问题,看Spring是如何解决循环依赖的。解决循环依赖流程图什么是循环依赖@Componentpublic class A { @Autowired private B b;}@Componentpublic class B { @Autowired private A a;}怎么解决

2021-09-29 13:45:32 103

原创 Spring源码(三)Spring Bean的生命周期

了解专栏完整的内容,请点击跳转:Spring Framework专栏导航页上一篇文章,我门已经了解了Spring容器初始化的过程。初始化过程中会将单例、非抽象的、非懒加载的Bean创建好并放进缓存中以供使用。Bean的生命周期也就是指创建、使用、销毁的全过程,下面就此展开。流程图点击查看Bean的生命周期大白话概述一下:我们知道对象(即Bean)的创建一般使用new或者反射的方式创建,Spring就是采用反射的方式来创建Bean。Spring Bean的创建包括了实例化、属性赋值、初始化

2021-09-29 11:53:10 123

原创 Spring源码(二)Spring容器初始化

了解完整的专栏内容,请点击跳转:Spring Framework专栏导航页为了阐述得简要些,以下几篇内容都侧重于介绍注解方式的Spring容器,XML方式的略过。什么是Spring容器微观来说这个容器就是存储bean的Map,宏观来说(一般来说)是指ApplicationContext或者Spring框架的概念。我们知道Spring是基于Ioc原理来管理我们的bean,让程序员解放双手,使对象的创建和使用不再犯难。所以,Spring在启动的时候,会把我们用注解标识的bean都创建好并存起来,这个

2021-09-28 15:09:23 527

原创 Spring Framework 5.3.x源码解读

从事Java工作的开发人员,肯定对Spring框架再熟悉不过了,但是要深究其原理,剖析源码的时候,却又令很多程序员望而却步,我就是这样被吓到的。但是嚒,为了研究高质量代码以提升自己技术水平,也为了大厂面试时候更游刃有余,就必须要阅读Spring的源码,接下来几篇博文从个人心得出发就如何阅读spring源码,深入分析Ioc、Aop、事务等核心模块来展开介绍Spring,希望对大家有所帮助,自己也正好对近期学习做个总结。传送站:Spring源码(一)怎么优雅地阅读Spring源码Spring源码(二)S

2021-09-27 16:58:14 495

原创 cglib动态代理浅析

谈到Java当中的动态代理,主流的就两种:JDK内置的动态代理和cglib动态代理。JDK方式的动态代理要求被代理类必须要实现于接口(因为生成的代理对象是继承于java.lang.reflect.Proxy),而且执行代理对象方法时候是使用反射的方式调用,故而在频繁调用代理方法时候,会有一定的性能问题。JDK方式动态代理不是今天讨论的重点,有兴趣可以留言,我再写一篇。今天要讨论的主角是cglib方式的动态代理。首先,我们可以假设市面上没有cglib动态代理的这种解决方案,然后在实际开发过程中发现,一旦

2021-09-23 10:50:56 223

原创 JDK1.8 HotSpot虚拟机逃逸分析

逃逸分析是JIT编译器的用来优化代码的一种手段,下面粘贴一下官方的Hot Spot说明。链接打不开的话可能要扶个梯子往上爬。https://docs.oracle.com/javase/8/docs/technotes/guides/vm/performance-enhancements-7.htmlEscape analysis is a technique by which the Java Hotspot Server Compiler can analyze the scope of a ne

2021-08-17 15:11:03 579 2

原创 Nacos 2.0+版本 docker部署要多暴露两个端口

之前用过nacos是用1.0+的版本,最近试试2.0.3,使用了官方的docker-compose方式部署,部署完发现,我的服务总是连不上,报以下错误`2021-08-16 13:52:26.568 INFO 13752 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port 99992021-08-16 13:52:27.057 ERROR 13752 --- [ main] c.a.c.n.registr

2021-08-16 16:56:23 1835

原创 Spring Boot国际化参数校验踩坑

需求:Controller层接口参数入参时候,对参数进行规则校验,校验不通过的参数的提示语要能够支持国际化(不同语言显示不同结果)分析:可以使用Spring框架中的MessageSource和Validator进行优雅的整合并校验。...

2021-08-13 16:44:05 578

原创 spring项目接口请求次数限制

对于分布式的Java Web项目来说,分布式锁肯定是必不可少的工具。有了分布式锁,就能实现并发环境下接口逻辑的事务完整性(ACID)。分布式锁的原理及实现方式有很多,这里就不做过多赘述,简单描述之就是:单机环境可以使用synchronize或aqs的衍生类(ReentrantLock…)来对方法加锁,避免线程安全问题,但对于分布式环境下,每台服务器上的项目都跑在各自的JVM中,上述的锁就没有用了,必须要有一个全局的分布式锁来代替其功能。一般情况下可以使用redis、zookeeper来实现分布式锁,既

2021-08-03 13:42:11 1717 2

原创 jdk1.6、1.7、1.8字符串常量池&String.intern()的区别

jdk1.6、1.7、1.8对内存模型中的方法区实现方式分别进行了改进,所以字符串常量池也发生了一定的变动,因而String相关的问题就成了面试的常考问题,这里进行整理总结,以免又忘了。看一道经典的面试题public class Demo { public static void main(String[] args) { String s = new String("java"); s.intern(); String s2 = "jav.

2021-07-12 15:25:31 1305

原创 Springboot整合Aspectj、Aspectj基本语法

我们知道AOP(面向切面编程)给开发人员带来了极大的便利性,特别是有强迫症的猿们,项目中出现一堆冗余且与实际业务无关的代码,看一次想撕一次。网上找不到比较全的相关文章,特此花时间整理下,方便你我他。下述实例源码传送门https://gitee.com/peterven/aoptest开箱即用核心依赖 <dependency> <groupId>org.springframework.boot</groupId> .

2021-06-08 11:00:31 1046

原创 使用docker启动 MySQL8.0

使用docker启动 MySQL8.0因为mysql8对登录密码的加密方式做了调整,所以每次安装完mysql都要去翻翻教程,特此记录下,方便以后查看docker 启动脚本#! /bin/bash docker rm -f mysql8 docker run --name mysql8 \-e MYSQL_ROOT_PASSWORD=123456\ -v /usr/local/mysql/logs:/logs \ -v /usr/local/mysql/data:/var/lib/mys

2021-06-01 15:22:25 4059 1

原创 docker基础

Docker学习笔记Docker主要功能项目打包时带上环境,一次打包,到处运行Docker核心思想容器间相互隔离将服务器资源利用到极致Docker优点开源在docker之前,vm技术占主流,但是很笨重,麻烦。虚拟机是虚拟化技术的一种实现方式,docker也是一种虚拟化技术的实现方式。docker很轻巧docker秒级启动Docker基本介绍基于Go开发官网:https://www.docker.com/文档地址:https://docs.dock

2021-05-13 20:19:51 108

原创 Activiti5

Activiti5Open Source Business AutomationHelping businesses solve automation challenges in distributed, highly-scalable and cost effective infrastructures.官网链接尚学堂B站视频,感谢up主的分享工作流概述工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则

2021-05-11 16:51:47 1855

原创 shiro(二)

Springboot整合shiro了解了shiro的基本概念后,现在就基于springboot整合shiropom<dependencies> <!-- spring --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starte

2021-05-11 16:33:23 50

原创 Shiro(一)

Shiro(一)最近项目里用到了shiro这个安全框架,之前没接触过安全框架,所以对一些基本概念的理解很是费劲,网上也搜了不少教程,最后实现起来也是磕磕绊绊,所以借此机会好好总结一下:什么是shiro、springboot整合shiro如何实现,另外有时间的话,再针对核心源码进行解读。shiro是什么官方回答如下:Apache Shiro™ is a powerful and easy-to-use Java security framework that performs authenti

2021-05-11 16:29:51 58

空空如也

空空如也

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

TA关注的人

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