- 博客(15)
- 收藏
- 关注

原创 RabbitMQ 延迟队列-对于入门来说可以快速上手
RabbitMQ 延迟队列-非常非常实用RabbitMQ 延迟队列-非常非常实用一、使用场景二、消息延迟推送的实现三、项目具体实现RabbitMQ 延迟队列-非常非常实用一、使用场景 目前常见的应用软件都有消息的延迟推送的影子,应用也极为广泛,例如: 淘宝七天自动确认收货,自动评价功能等。在我们签收商品后,物流系统会在七天后延时发送一个消息给支付系统,通知支付系统将款打给商家,这个过程持续七天,就是使用了消息中间件的延迟推送功能;相应的,自动评价也是类似的。 12306 购票支付确认页
2021-03-19 12:03:42
18154
15

原创 多图详解的HashMap1.7扩容死循环
HashMap扩容过程详解一、1.7HashMap扩容死循环1.产生原因二、1.8HashMap扩容流程一、1.7HashMap扩容死循环1.产生原因1.7HashMap在高并发场景下,会发生扩容链表死循环问题!二、1.8HashMap扩容流程
2020-07-24 11:46:24
3093
2
原创 单realm模式下前后端分离实现springboot+shiro+jwt+vue整合
Springboot+Shiro前后端分离项目1.shiro局限性基于前后端分离的版本,其实shiro框架应用缺少了很多实用的功能。比如remenber me,比如Session,都无法正常使用。同时,每次访问后端,都需要重新进入realm中认证,如遇到权限判断,也每次都要重新授权,虽然可以使用redis减少数据库的压力,但是,每次认证和授权确实烦不胜烦。......
2022-08-06 11:52:42
862
1
原创 Springboot2.6.x的启动流程和自动配置
Springboot2.6.x的启动流程和自动配置原理,截图较细,推荐跟着去源码走一遍。
2022-01-12 11:38:29
2854
15
原创 关于锁升级,经历过hashcode后的结果
@TOC一、锁升级问题根据第三版《深入理解java虚拟机》第三版,原文如下:看到这里可能会发现一个问题:当对象进入偏向状态的时候,Mark Word大部分的空间(23个比特)都用于存储持有锁的线程ID了,这部分空间占用了原有存储对 象哈希码的位置,那原来对象的哈希码怎么办呢?在Java语言里面一个对象如果计算过哈希码,就应该一直保持该值不变(强烈推荐但不强制,因为用户可以重载hashCode()方法按自己的意愿返回哈希码),否则很多依赖对象哈希码的API都可能存在出错风险。而作为绝大多数对象哈希
2020-10-19 14:52:46
1941
2
原创 final String的底层详解
finnal修饰后处理器优化一、发生的现状:二、final的定义:一、发生的现状: String a="abc"; String c="abc1"; final String b="abc"; System.out.println(a+1==b+1); //false System.out.println(a+1==c); //false System.out.println(b+1==c); //true上述这个代
2020-08-14 11:14:37
540
翻译 HotSpot 术语表翻译(JVM)
HotSpot Glossary of Terms作者的话前言adaptive spinning( 自适应自旋)biased locking(偏向锁)block start table(块开始表????大概是指对象起始位置存放的内容)bootstrap classloader( 引导类加载器)bytecode verification(字节码校验)C1 compiler(C1编译器->大佬专用 ,这段太难了,没研究过翻译不准!)C2 compiler(C2编译器->超级大佬专用,这段太难了,没研
2020-07-29 18:32:39
1233
1
原创 三、JUC提升——java的CAS原理解析含ABA问题解决
CAS--Compare And SwapCompare And Swap(比较交换)一、定义:三级目录Compare And Swap(比较交换)一、定义:当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其他线程都失败,失败的线程并不会被挂起,而是被告知竞争失败,并可再次尝试!它是基于硬件平台的汇编指令。三级目录...
2020-07-08 18:12:20
375
原创 二、JUC入门——线程创建(线程池详细说明)
线程创建线程的几种方式1、继承Thread类2、实现Runnable接口3、实现Callable接口4、线程池三级目录创建线程的几种方式在创建线程之前,我们要先熟悉一个类Thread;public class Thread implements Runnable { /* Make sure registerNatives is the first thing <clinit> does. */ private static native void registerNati
2020-07-06 16:10:15
2485
1
原创 一、JUC入门
一、什么是JUC?JUC简介:进程线程构造方法启动线程优先级控制方法静态方法线程组(ThreadGroup)同步对象与锁同步方法和同步块等待锁与释放锁静态变量/方法(Class对象的锁,new对象的锁)监视器WaitNotifyNotifyAllInterrupt(中断)Timed Wait(定时等待)JUC简介:JUC(Java.util.concurrent包):这个包里面的所有类,都是来自于一个大佬Doug Lea之手!在学习这个JUC之前,我们先过一遍基础的概念!Doug Lea英文原文链接:
2020-07-03 16:44:27
473
1
原创 JVM的运行时数据区详解
一、JVM的运行时数据区概览JVM运行时数据区主要包括以下几个部分:程序计数器、虚拟机栈、本地方法栈、方法区、堆;其中栈是运行时的单位,而堆是存储的单位!1.程序计数器程序计数器可以看作是当前线程所执行的字节码的 行号指示器可以通过javap -c xxx.class(也可以使用javap -v 查看附加信息)执行查看反汇编文件;字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。如果线程正
2020-07-03 14:07:37
657
1
转载 Java泛型详解
Java泛型详解Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter)。声明的类型参数在使用时用具体的类型来替换。泛型最主要的应用是在JDK 5中的新集合类框架中。对于泛型概念的引入,开发社区的观点是褒贬不一。从好的方面来说,泛型的引入可以解决之前的集合类框架在使用过程中通常会出现的运行时
2017-05-02 17:51:50
261
转载 Java泛型-类型擦除
Java泛型-类型擦除一、概述 Java泛型在使用过程有诸多的问题,如不存在List.class, List不能赋值给List(不可协变),奇怪的ClassCastException等。 正确的使用Java泛型需要深入的了解Java的一些概念,如协变,桥接方法,以及这篇笔记记录的类型擦除。Java泛型的处理几乎都在编译器中进行,编译器生成的bytecode是不包涵泛型信息的,
2017-04-19 17:53:59
279
转载 Java的栈与堆
Java的栈与堆----对这两个概念的很容易只知其然,不知其所以然,终于找到一篇好文,拿来共享先了解具体的概念:JAVA的JVM的内存可分为3个区:堆(heap)、栈(stack)和方法区(method)堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)2.jvm只有一个堆区(heap)被所有线程共享,堆
2017-04-14 10:28:30
222
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人