自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JAVA线程池必知必会

J.U.C提供的线程池:ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。

2022-02-22 21:37:12 287

原创 InnoDB存储引擎架构及特性总结篇

InnoDB是是一个事务安全的MySQL存储引擎,这是它与MyIsAM的最大区别,也已经成为了MySQL的默认存储引擎。InnoDB存储由许多的后台线程,内存池以及文件构成

2021-12-08 09:45:00 270

原创 MySql单表过大水平分表实践从技术选型到方案代码落地

水平拆分表就是按照表中的记录进行分片,那么具体应该怎么进行拆分,涉及到数据归并要怎么进行处理,原来的join语句还能用吗?

2021-12-05 15:26:33 3055

原创 数据库分库分表主键生成策略SNOWFLAKE

分表的时候,如何去设计全局唯一的主键ID。全局唯一 ID 几乎是所有设计系统时都会遇到的,它在存储和检索中有至关重要的作用

2021-11-30 20:12:36 861

原创 Java动态代理(JDK动态代理和cglib)

JDK动态代理JDK的动态代理只允许代理接口重要的类和接口Proxy和InvocationHandlerProxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler h)方法创建目标对象的代理对象获取到目标对象的代理对象之后,执行目标对象的方法实际上是通过调用代理对象的invoke方法实现的我们可以在invoke方法中增加额外的通用的逻辑来对目标对象进行增强/** * @Desc

2021-11-24 23:26:01 319

原创 一文搞懂RPC流程架构,与Restful区别

1、什么是RPC?RPC(Remote Procedure Call),远程过程调用,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。通俗地讲,就是开发者能够像调用本地方法一样调用远程的服务。RPC的作用主要体现在两个方面:屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法;隐藏底层网络通信的复杂性,让我们更专注于业务逻辑。两个或多个应用程序都分布在不同的服务器上,它们之间的调用都像是本地方法调用一样。比较知名开源的RPC框架有阿里的Dubbo、google的

2021-11-24 23:21:00 699

原创 SpringBoot启动过程分析——启动过程源码分析

项目启动入口实际执行的内容是通过SpringApplication类的静态方法创建一个ConfigurableApplicationContext,顾名思义,即可配置的对象容器,也就是Springboot中的上下文/** * Static helper that can be used to run a {@link SpringApplication} from the * specified source using default settings. * @param primarySou

2021-11-07 23:42:59 869

原创 SpringBoot启动过程分析——@SpringBootApplication注解分析

## 启动类调用SpringApplication.run方法启动,启动类使用@SpringBootApplication注解@SpringBootApplicationpublic class StringBootDemoApplication { public static void main(String[] args) { SpringApplication.run(StringBootDemoApplication.class, args); }}@S

2021-11-05 00:02:06 1153

原创 监控工具Actuator使用

添加依赖Spring Boot已经内置了一个监控功能,它叫Actuator。使用Actuator非常简单,只需添加如下依赖:<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><!-- actuator --><

2021-09-18 09:41:39 2948

原创 Redis的发布订阅Topic模式

核心代码:Springboot下的redis发布订阅topic模式,与Springboot的Event事件有异曲同工之妙,但是redis的发布订阅可以用于分布式系统,但是Event只能在同一个JVM实例起作用,同时要注意的是,因为redis是面向分布式系统设计的,因此有多个JVM实例都订阅了同一个Topic的话,会产生重复消费,因此如果不需要重复消费的场景,在消费的时候一定要在消费的时候进行幂等校验。Event使用的博客在SpringBoot Event 事件监听,这两种消息队列可靠性都不是很高,因为没有

2021-09-15 21:17:17 5332

原创 JAVA垃圾收集器之G1

Garbage First(G1)收集器Garbage First(简称G1)收集器是垃圾收集器技术发展历史上的里程碑式的成果,它开创了收集 器面向局部收集的设计思路和基于Region的内存布局形式。G1提供并发的类卸载的支持,补全了其计划功能的最后一块拼图。这个版本以后的G1收集器才被Oracle官方称为“全功能的垃圾收集器”(Fully-Featured Garbage Collector)。G1是一款主要面向服务端应用的垃圾收集器。HotSpot开发团队最初赋予它的期望是(在比较长 期的)未来可以

2021-09-11 22:40:48 1855

原创 CAS原理详解

CAS简介CAS 的意思是 compare and swap,比较并交换。CAS 的引入是为了解决java锁机制带来的性能问题。锁机制存在以下问题:(1)在多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题。(2)一个线程持有锁会导致其它所有需要此锁的线程挂起。(3)如果一个优先级高的线程等待一个优先级低的线程释放锁会导致优先级倒置,引起性能风险。解决线程安全问题volatile是不错的机制,但是volatile不能保证原子性。因此对于同步最终还是要回到锁机制上来。独占锁

2021-09-11 22:11:21 2178

原创 JVM垃圾收集器

Serial收集器Serial收集器是最基础、历史最悠久的收集器,曾经(在JDK 1.3.1之前)是HotSpot虚拟机新生代 收集器的唯一选择。大家只看名字就能够猜到,这个收集器是一个单线程工作的收集器,但它的“单线 程”的意义并不仅仅是说明它只会使用一个处理器或一条收集线程去完成垃圾收集工作,更重要的是强 调在它进行垃圾收集时,必须暂停其他所有工作线程,直到它收集结束。“Stop The World”这个词语也 许听起来很酷,但这项工作是由虚拟机在后台自动发起和自动完成的,在用户不可知、不可控的情况

2021-09-08 22:41:38 1619

原创 JAVA垃圾回收算法

概述Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来。C++内存的申请和释放都可以由程序员手动进行,而Java则采用了自动垃圾回收机制使程序员更关注于业务而无需在内存分配和回收上花费太多的时间。但是我们仍然需要去学习Java的垃圾回收机制,要理清楚Java的垃圾回收机制,要搞清楚三点:哪些内存需要回收什么时候回收怎么回收如何判断对象已经成为垃圾在堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要.

2021-09-05 18:21:33 3788

原创 HTTPS加密算法原理

1、对称加密信收发方会通过实现商定好的秘钥对数据进行加密和解密缺陷:用户增多秘钥的传输过需要保存许多额外的秘钥秘钥的保存会带来额外的负担更加致命的是,秘钥必须通过见面协商,而没有办法通过网络来进行交换因为秘钥的传输过程需要加密,而没有秘钥则不能进行加密,这样就陷入死循环了,因此就引出了非对称加密算法。2、非对称加密算法其中,对数据进行加密的秘钥是对所有人公开的,而对数据解密的秘钥却仅为数据的接收者持有因为公钥是对所有人可见的,因此,数据不能被轻易地解密出来,因此要求加密算法单

2021-08-15 17:31:25 3086

原创 JAVA线程池ThreadPoolExecutor详解

1、开发规约阿里巴巴开发手册中关于线程和线程池的使用有如下三条强制规约【强制】创建线程或线程池时请指定有意义的线程名称,方便出错时回溯。正例:自定义线程工厂,并且根据外部特征进行分组,比如,来自同一机房的调用,把机房编号赋值给whatFeatureOfGrouppublic class UserThreadFactory implements ThreadFactory { private final String namePrefix; private final AtomicIn

2021-08-15 16:59:00 3726

原创 HashMap源码数据结构与动态扩容分析

涉及知识点位运算 继承 数据结构 数组 链表 红黑树HashMap基本知识JDK1.8之前数据结构是数组+链表JDK1.8以后采用数组+链表+红黑树其中,当数组元素超过64个且数组单个位置存储的链表元素个数超过8个时,会进化成红黑树,红黑树的引进时为了加快查找效率同样,当数组单个位置存储的链表元素个数少于6个时,又会退化成链表HashMap重要的类属性其实JDK的源码都有非常详细的注释,但还是翻译一下吧,如下:初始容量大小为16/** * The default initial

2021-08-01 22:41:46 4074

原创 Redis必会知识点

Redis是一款使用C语言编写、可基于内存也可以持久化的日志型、Key-Value型开源数据库。它可以用作:数据库、缓存和消息中间件。数据结构redis支持的5种基本数据类型:数据类型定义使用场景字符串(String)Redis的基本数据类型,一个Key对应一个Value缓存、计数器、分布式锁等哈希(Hash)Hash是一个string类型的key和value的映射表,特别适合用于存储对象用户信息、Hash 表等列表(List)List是简单的字符串列表,按

2021-07-28 21:26:11 4045

原创 RabbitMQ实战指南之消息可靠性

要保证消息的可靠性,就需要保证消息在流转的每一个阶段都能够保证可靠性从图上我们大概可以看出来一个消息会经历四个节点,只有保证这四个节点的可靠性才能保证整个系统的可靠性。生产者发出后保证到达了MQ。MQ收到消息保证分发到了消息对应的Exchange。Exchange分发消息入队之后保证消息的持久性。消费者收到消息之后保证消息的正确消费。生产者发送消息到MQ Broker可靠性保障这是消息流转的第一个过程,我们的生产者发送消息之后可能由于网络闪断等各种原因导致我们的消息并没有发送到MQ之中,

2021-07-26 14:19:29 5260

原创 RabbitMQ实战指南之RabbitMQ架构及运转流程

相关概念RabbitMQ 整体上是一个生产者与消费者模型,主要负责接收、存储和转发消息。可以把消息传递的过程想象成∶ 当你将一个包裹送到邮局,邮局会暂存并最终将邮件通过邮递员送到收件人的手上,RabbitMQ 就好比由邮局、邮箱和邮递员组成的一个系统。从计算机术语层面来说, RabbitMQ 模型更像是一种交换机模型。RabbitMQ 的整体模型架构如所示。生产者和消费者Producer∶ 生产者,就是投递消息的一方。生产者创建消息,然后发布到 RabbitMQ 中。消息一般可以包含 2 个部分∶

2021-07-25 23:17:37 5965

原创 JAVA Class类与反射

关于Class类与Class对象与反射Class类与Class对象Class对象是Class类的实例,类至少包含以下信息,因此class类又可以被 解构为如下部分:权限修饰符类名参数化类型(泛型信息)接口Interface注解Annotation字段Field(重点)构造器Constructor(重点)方法Methd(重点)以下图为例:整个.class文件最终都成为字节数组byte[] b,里面的构造器、方法等各个“组件”,其实也是字节。打开Class类的源代码,发现果然如此:

2021-07-24 12:07:25 6447

原创 SpringBoot Event 事件监听

概述ApplicationEvent以及Listener是Spring为我们提供的一个事件监听、订阅的实现,内部实现原理是观察者设计模式,设计初衷也是为了系统业务逻辑之间的解耦,提高可扩展性以及可维护性。事件发布者并不需要考虑谁去监听,监听具体的实现内容是什么,发布者的工作只是为了发布事件而已。事件监听的作用与消息队列有一点类似。事件监听的结构主要有三个部分组成:发布者事件监听者思维导图????相关类及继承关系类图UML类图????事件我们自定义事件MyTestEvent继承

2021-07-22 22:02:46 6303

原创 JVM类加载机制

类加载的时机关于在什么情况下需要开始类加载过程的第一个阶段“加载”,《Java虚拟机规范》中并没有进行强制约束,这点可以交给虚拟机的具体实现来自由把握。但是对于初始化阶段,《Java虚拟机规范》则是严格规定了有且只有六种情况必须立即对类进行“初始化”(而加载、验证、准备自然需要在此之前开始):遇到new、getstatic、putstatic或invokestatic这四条字节码指令时,如果类型没有进行过初始化,则需要先触发其初始化阶段。能够生成这四条指令的典型Java代码场景有:使用n..

2021-07-14 22:26:59 5834

原创 JVM内存结构

概述其实 Java 虚拟机的内存结构并不是官方的说法,在《Java 虚拟机规范》中用的是「运行时数据区」这个术语。但很多时候这个名词并不是很形象,再加上日积月累的习惯,我们都习惯用虚拟机内存结构这个说法了根据《Java 虚拟机规范》中的说法,Java 虚拟机的内存结构可以分为公有和私有两部分。公有指的是所有线程都共享的部分,指的是 Java 堆、方法区、常量池。私有指的是每个线程的私有数据,包括:PC寄存器、Java 虚拟机栈、本地方法栈。公有部分在 Java 虚拟机中,线程共享部分包括Jav

2021-07-14 21:47:18 5837

原创 JAVA集合——可维护插入、大小、访问顺序的Map集合

概述先上一张JAVA集合继承关系图:使用Map时,用得最多的是HashMapMap<String, String> hashMap = new HashMap<String, String>();但是HashMap是无序的,既不保证元素按插入顺序性,也不保证元素按给定的排序方法按大小进行排序。HashMap无序HashMap的底层实现是哈希映射,所以表现为Hash的特点,不具有有序性代码实例public class Test { public static

2021-07-10 19:30:52 6746

原创 Java限流策略与算法

概要在大数据量高并发访问时,经常会出现服务或接口面对暴涨的请求而不可用的情况,甚至引发连锁反映导致整个系统崩溃。此时你需要使用的技术手段之一就是限流,当请求达到一定的并发数或速率,就进行等待、排队、降级、拒绝服务等。对一般的限流场景来说它具有两个维度的信息:时间:限流基于某段时间范围或者某个时间点,也就是我们常说的“时间窗口”,比如对每分钟、每秒钟的时间窗口做限定资源:基于可用资源的限制,比如设定最大访问次数,或最高可用连接数上面两个维度结合起来看,限流就是在某个时间窗口对资源访问做限制,比如设.

2021-07-08 22:42:21 6188

原创 MySQL锁与事务知识结构脑图

脑图直接查看链接,过期的话在评论区留言我更新原文件链接????

2021-06-17 22:33:40 5790

原创 MySQL索引:BST、AVL、红黑树,B-树、B+树

二叉查找树(BST)二叉查找树(Binary Search Tree),也称二叉搜索树、有序二叉树(ordered binary tree),排序二叉树(orted binary tree),是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值;若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值;任意节点的左、右子树也分别为二叉查找树;没有键值相等的节点二叉查找树在极端的情况下会退化成现线性的结构,降低查找效率树的深度直接决

2021-06-13 22:50:17 6098 1

原创 MySql事务的基本知识

一、事务的基本特性(ACID)1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏。包括一致性读和一致性写。比如A向B转账,不可能A扣了钱,B却没收到。3、隔离性(Isolation):同一时间,只允许一个事务请求同

2021-06-13 22:19:40 5797

MySQL锁与事务脑图.pdf

MySQL锁与事务知识脑图

2021-07-26

空空如也

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

TA关注的人

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