- 博客(17)
- 收藏
- 关注
原创 spring事件解耦写法优化
spring事件解耦写法优化文章目录spring事件解耦写法优化1.概念2.背景2.1当前写法可能存在以下问题3.优化方案(伪代码实现)1.概念spring事件发布,是设计模式中观察者模式的实现,观察者模式建立一种对象与对象之间的关系,当一个目标对象发生改变时,由中间者通知一个或多个对象做出反应。一个观察目标可以对应多个观察者。而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展。达到代码解耦的目的。2.背景以下是当前项目中对spring事件发布的写法。// 更新借阅
2021-03-29 19:29:47
202
原创 git ignore不起作用的原因
git ignore不起作用的原因git规则.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的解决办法git rm -r --cached .git add .重新commit and push即可。.gitignore文件,具体的规则一搜就有.我在使用GIT的过程中,明明写好了规则,但问题不起作用,每次还是重复提交,无法忍受.其实这个文件里的规则对已经追踪的文件是没有效果的.所以我们需要使用rm命令清除一下相
2021-03-15 15:52:28
242
原创 HashMap线程不安全导致的死循环和数据丢失
HashMap线程不安全导致的死循环和数据丢失1.HashMap在扩容时由于线程安全问题产生死循环和数据丢失问题。1.7之前采用头插法1.8之后采用尾插法采用尾插法只能解决循环问题,但是不能解决数据丢失问题,由于多线程访问,未加锁的情况下仍会发生数据丢失https://blog.csdn.net/swpu_ocean/article/details/889179582.HashMap链表过长,导致查询效率低下1.7之前是链表结构,由于数据过多,命中在同一个数组下标后导致链表过长,ha
2021-01-12 14:18:41
820
原创 JAVA锁升级(锁膨胀)的过程
JAVA锁升级(锁膨胀)的过程文章目录JAVA锁升级(锁膨胀)的过程背景概念无锁偏向锁轻量锁(自旋锁)重量级锁锁的状态主要表现在对象头的MarkWord中背景在jdk获取锁的前期,需要jvm向内核申请,需要计算机内核参与,因此获取锁和释放锁的成本大大提高;在jdk1.6之后有所优化,但是为了提高锁的效率,锁升级还是大大的有必要。锁只能升级不能降级,升级的策略是为了提高锁的效率。jdk1.6之后锁分四种状态:无锁 → 偏向锁 → 轻量级锁 → 重量级锁概念无锁程序不会有锁的竞争,在程序设计不需要
2020-12-22 19:12:15
335
原创 kafka的设计以及如何保证可靠性
Push vs. pull最初我们考虑的问题是:究竟是由 consumer 从 broker 那里 pull 数据,还是由 broker 将数据 push 到 consumer。Kafka 在这方面采取了一种较为传统的设计方式,也是大多数的消息系统所共享的方式:即 producer 把数据 push 到 broker,然后 consumer 从 broker 中 pull 数据。 也有一些 logging-centric 的系统,比如 Scribe 和 Apache Flume,沿着一条完全不同的 pus
2020-11-11 19:08:06
98
原创 Mysql:联合索引B+树的底层结构
今天了解到联合索引的数据结构,引发了一些思考,特此记录一下。记录几张数据结构的图片:原文在:https://blog.csdn.net/ibigboy/article/details/104571930?depth_1-
2020-11-03 16:33:14
259
原创 Mysql:如何避免回表查询?什么是索引覆盖?
文章目录导读一、什么是回表查询?二、什么是索引覆盖(Covering index)?三、如何实现索引覆盖?四、哪些场景可以利用索引覆盖来优化SQL?导读select id,name where name='shenjian'select id,name,sex where name='shenjian'多查询了一个属性,为何检索过程完全不同?什么是回表查询?什么是索引覆盖?如何实现索引覆盖?哪些场景,可以利用索引覆盖来优化SQL?这些,这是今天要分享的内容。画
2020-11-03 14:08:21
262
原创 Java并发包:AQS的Condition类
Java并发包:AQS的Condition类文章目录Java并发包:AQS的Condition类Condition介绍Condition介绍常用方法代码分析ConditionObject类doSignal()方法await()方法示例代码main方法Condition介绍Condition介绍Condition(也称为条件队列 或条件变量)为线程提供了一个含义,以便在某个状态条件现在可能为 true 的另一个线程通知它之前,一直挂起该线程(即让其“等待”)。因为访问此共享状态信息发生在不同的线程中,
2020-10-26 18:31:13
100
原创 Java并发包:AQS中Node的状态
Node的状态java.util.concurrent.locks.AbstractQueuedSynchronizer.Node /** 表示线程已取消 */ static final int CANCELLED = 1; /** 表示线程等待唤醒 */ static final int SIGNAL = -1; /** 表示线程等待获取同步锁 */ static final int CONDITIO
2020-10-26 11:00:13
1540
2
原创 SpringBoot监听redis键过期事件,实现订单超时关闭
SpringBoot监听redis键过期事件,实现订单超时关闭文章目录SpringBoot监听redis键过期事件,实现订单超时关闭场景通常做法思路redis事件类型开启配置Springboot使用redis事件监听器场景订单超时关闭,客户下单时未支付,超过一段时间会自动将订单修改为已关闭,不允许再次支付。类似的场景还有很多,只要用到有过期概念的都可以设计成该做法。通常做法通过定时任务每隔一段时间检查是否有超时订单,修改订单的状态,释放库存等等。缺点:后台定时任务运行频繁,涉及订单操作业务比较
2020-10-23 15:53:47
1311
转载 PO/POJO/BO/DTO/VO的区别
PO :persistent object持久对象1 .有时也被称为Data对象,对应数据库中的entity,可以简单认为一个PO对应数据库中的一条记录。2 .在hibernate持久化框架中与insert/delet操作密切相关。3 .PO中不应该包含任何对数据库的操作。POJO :plain ordinary java object 无规则简单java对象一个中间对象,可以转化为PO、DTO、VO。1 .POJO持久化之后==〉PO(在运行期,由Hibernate中的cglib动态把POJ
2020-10-20 09:44:02
225
原创 mybatisplus多数据源事务问题
mybtaisplus多数据源事务问题分析文章目录mybtaisplus多数据源事务问题分析一.背景1.背景问题2.问题所在2.1 首先关注一下mybatis-plus数据源切换的几个类2.2 方法执行的几个步骤3.解决思路N.参考博客一.背景1.背景问题在项目中,通过使用mybatis-plus操作多数据源的时候,一旦加上事务,会报 Table 'xxx' doesn't exist 异常,原因是在切换数据源的时候,没有切换成功,下面会有所解释。以下是spring版本和mybatis-plus的版
2020-09-08 17:58:44
7681
7
原创 IDEA快捷键和实用插件【持续补充中】
IDEA快捷键和实用插件【持续补充中】文章目录IDEA快捷键和实用插件【持续补充中】一、快捷键二、plugins插件1.CamelCase 下划线驼峰横杠等方式互相转换2.jrebel 热部署插件3.MybatisX mybatisplus插件功能计划支持三、通用设置 file->setting1.maven设置2.jdk设置3.git设置4.通用设置4.1字体4.2自动格式化代码4.3忽略大小写4.4调出service界面,微服务开发4.5远程debug4.6注释模板4.6.1生成文件带注释4.6
2020-08-22 14:30:38
250
原创 springboot 如何引用外部配置文件(spring.config.location)
springboot 如何引用外部配置文件(spring.config.location)一、背景二、springboot 默认的配置文件加载顺序三、spring.config.location为什么没有生效四、通过spring.cloud的方式一、背景本文写的是单应用下的springboot,并非微服务,如果是微服务可以参考nocos或者springcloud config。一般在企业开发流水线中,都会涉及到几个环境的发布,dev开发环境,test测试环境,prod生产环境等等,那么如果需要发布一
2020-05-20 17:58:30
7640
5
原创 Java并发包:Semaphore类
Semaphore信号量Semaphore 是一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。Semaphore 是java.util.concurr...
2020-04-15 17:55:21
131
原创 Java里面子类对父类属性覆盖问题
Java里面子类对父类属性覆盖问题缘由经过百度之后,这可能是一个被我忽略的问题缘由这是因为本人在写几个设计模式的时候用到一个代码片段的时候,使用了如下代码public class Power { int power;}public class V5Power extends Power { int power = 5; public V5Power(){ ...
2020-04-15 10:29:51
2161
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人