自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 以对话的形式说MySQL!

MySQL 题目及答案个人整理学习(持续更新)

2022-02-27 12:50:16 920

原创 简易秒杀系统-优化(详细注释)

简易秒杀系统的优化过程(入门级),用到了缓存,消息中间件等技术

2022-02-18 21:47:54 1231 2

原创 MySQL高级-索引优化(超详细)

性能分析MySQL Query OptimizerMysql中由专门负责优化SELECT语句的优化器,主要功能就是通过计算分析系统中收集到的统计信息,为客户端请求的Query提供他认为最优的执行计划(他认为最优的,但**不一定是DBA觉得最优的,这部分最耗时间**)。当客户端向MySQL请求一条Query的时候,命令解析器模块完成请求分类,区别出是SELECT并转发给MySQL Query Optimizer时,MQO会对整条Query进行优化,处理掉一些常量表达式的预算,将其换算成常量值并对,Que

2022-02-14 17:20:58 6558 3

原创 SpringCloud Alibaba - Nacos学习笔记

SpringCloud Alibaba 的核心组件 Nacos 的使用笔记

2022-06-13 11:28:58 733 1

原创 SpringCloud - Config配置中心

SpringCloud☁️的生态中的现役配置中心捏🤦‍♂️

2022-06-13 11:08:45 1537

原创 SpringCloud - LoadBalancer负载均衡

SpringCloud☁️的生态中的现役负载均衡捏🤦‍♂️

2022-06-13 11:06:18 1887

原创 Redis经典题目整理(2022.03.12 更新)

Redis的一些经典题目不定期更新ing...

2022-03-12 19:27:10 2590

原创 Redis问题-缓存雪崩、击穿、穿透问题

缓存雪崩我们假设一个没钱的小公司,双十一的例子来说一说,假设在双十一这天,持续24小时的购物狂欢,必然会有大量的用户也就是大量的请求打入我们的服务器,为了提高响应速度,肯定是将某些热点数据放入到缓存中了,假设在这种情况下,用户每分每秒都有超过十万次的点击,持续二十四小时,如果我的所有热点数据的缓存时间设置的是三小时的话,三小时后大量的缓存同时失效,但是同时又有超过十万次的请求打入后台,那么缓存失效,请求就会全部转发到数据库,数据库承受不了这么大的并发,即使是集群,那也得很强大的集群才有可能抗住这次缓存失效

2022-03-12 19:18:26 1236

原创 Java并发编程经典题目整理(2022.03.11 更新)

有关多线程部分的经典题目整理,持续更新ing......

2022-03-12 19:11:44 931

原创 Redis进阶-事务

1. 什么是 Redis 的事务Redis 的事务本质是一组命令的集合,类似于 MySQL 的事务描述。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。事务执行的过程中,会串行化执行队列中的命令,其他客户端请求不会插入到事务执行命令序列中。总结下来:Redis 的事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。2. Redis 事务相关的命令和使用MULTI:开启事务,Redis 会将后续的命令逐个放入队列中,然后使用 EXEC 命令来原子化执行这个命令序列。EX

2022-03-07 19:49:53 452

原创 Redis进阶-事件机制

1. 事件机制Redis 中的事件驱动库,它只会去关注网络 I/O事件,以及定时器事件。所以,Redis 的事件库处理下面两类事件:文件事件(file event):用于处理 Redis 服务器和客户端之间的网络I/O事件时间事件(time event):用于处理 Redis 服务器中的一些需要在给定时间点执行的操作(比如 serverCron函数)Redis 中的事件驱动库的代码主要在 src/ae.c 中实现的:aeEventLoop:整个事件驱动库的核心,它管理着文件事件表和时间事

2022-03-07 19:48:38 870

原创 Redis进阶-发布订阅简介

Redis的发布订阅介绍

2022-03-02 20:31:37 1008

原创 Redis进阶-持久化

Redis中的持久化是怎么实现的?有哪些方法?

2022-03-02 20:11:23 225

原创 Redis进阶-对象与编码底的对应关系

Redis中对象与编码底的对应关系粗解

2022-02-28 17:48:19 747

原创 Redis基础-对象机制

Redis的对象机制粗解

2022-02-27 12:58:47 614

原创 Redis进阶-Stream

Redis中的Stream

2022-02-27 12:56:17 744

原创 Redis基础-数据类型

Redis数据类型

2022-02-27 12:53:56 500

原创 MySQL高级-分库分表简介

水平切分水平切分又叫做 Sharding,它是将同一个表中的记录横向拆分到多个结构相同的表中。当一个表的数据不断增多时,Sharding 是必然的选择,它可以将数据分不到集群的不同节点上,从而缓存单个数据库的压力。比如说一个用户信息表,太长了,我们按照某个标准给同样的一张表分为多个不同的多张表,存储在不同的从数据库中,当然数据量特别大才有必要。优点表关联关系基本能够在数据库端全部完成。不会存在那种超大型数量和高负载的表遇到瓶颈的问题。应用程序端整体架构改动相对较少。事务处理起来会相对简单

2022-02-27 12:47:55 303

原创 MySQL高级-主从复制简介

复制的基本原理slave(从主机)会从 master(主主机)读取 binlog 来进行数据同步。三步骤 + 原理图MySQL的复制是异步且串行化的。第一步:master 将改变记录到它的 binlog 中,这些记录过程叫做二进制日志时间,binary log events第二步:slave 将 master 的binary log events 通过 I/O线程 拷贝到它的中继日志(relay log)。第三步:slave 中重做中继日志中的事件,将改变应用到自己的数据库

2022-02-27 12:46:39 666

原创 MySQL高级-事务与锁的机制

锁的概述定义锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计算机资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问一致性,有效性,是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素,从这个角度说,锁对数据库而言显得尤为重要,也更加复杂。生活中的例子比如你购物,物品库存只有一件了,有别人在和你同时抢购,那么这到底是你抢到了还是他抢到了。这里肯定要用到事务,我们先从库存表中取出物品数量,然后插

2022-02-24 15:43:07 516

原创 MySQL高级-查询截取分析

慢查询日志是什么?MySQL的慢查询日志是MySQL提供的一种 日志记录,它用来记录在MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_tim值的SQL,会被记录到慢查询日志中。由该日志查看哪些SQL超出了我们的最大忍耐时间,找出来超时的,用 explain 分析为什么慢。怎么玩?默认情况下,MySQL数据库没有开启慢查询日志,需要我们手动来设置这个参数。当然如果不是调优需要的话,一般不会启动这个参数。因为开启慢查询日志或多或少会有一些性能上的影响,慢查询日志支持将日志

2022-02-24 15:41:09 358

原创 MYSQL高级-索引基础及七大JOIN

什么是MySQL索引索引是帮助MySQL高效获取数据的数据结构(有序的),可以理解为排好序的快速查找数据结构。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。我们平常说的MySQL中的索引,没有特别指明的话,都是指BTree(多路搜索树,并不一定是二叉的)结构组织的索引。其中聚集索引,次要索引,覆盖索引,复合索引,前缀索引,唯一索引默认都是使用B+Tree(BTree的一种),统称索引

2022-02-14 17:03:11 1016

原创 MYSQL高级-体系架构

MySQL架构图连接、服务、引擎、存储层次结构的介绍连接层 :是MySQL提供了对外界客户端访问的组件,服务端应用程序用自己的API与数据库进行连接。服务层:客户端的请求接到之后,它肯定是有要做的事情的,服务层就是为客户端提供服务支持的。存储引擎层:负责与MySQL中数据存储和提取的,与底层系统文件进行交互。系统文件层:主要负责数据库的数据和日志的存储在系统文件上,并完成与存储引擎的交互,是文件的物理存储层。服务层模块划分它包含了对SQL语句处理的全过程。管理服务与工具主管数据的

2022-02-14 16:47:59 1480 2

原创 JAVA多线程-Synchronized关键字锁升级(超详细)

以下内容需要知道的一些字段的位置理解下来大致位置如下:各种名词对应位置64位虚拟机中的 markword32位虚拟机中的 markword什么是 Synchronized 偏向锁?是一种锁的状态,拿情况来说明,可能会更好说明这个状态:synchronized 同步代码块其实很多情况下,都不一定是多个线程要运行,甚至基本上只有一个线程运行,虽然基本上只有一个线程运行,但由于我们为了防止可能发生抢占情况,为了程序的健壮性,还是得用 synchronized 来修饰这个代码块,但是

2022-02-14 16:42:11 557

原创 JAVA多线程-线程池源码详解

线程池详解FutureTask详解Future 表示了一个任务的生命周期,是一个可取消的异步运算。可以把它看作是一个异步操作的结果的占位符。他将在未来的某个时刻完成,并提供对其结果的访问。并发包中许多异步任务类都继承自 Future,最典型的就属 FutureTask 了。线程池的体系结构从 JDK5 开始,工作单元和执行机制被分离开来了,工作单元包括了 Runnable 和 Callable,而执行机制由 Executor 框架提供。/* |_ java.util.concur

2022-02-08 22:12:00 664

原创 JAVA多线程-线程池

线程池的主要工作线程池做的工作主要是控制运行的线程的数量。处理过程中将任务放入队列,然后在线程创建之后启动这些任务。如果线程数量超过了最大数量,超出数量的线程排队等待。等待其它线程执行完毕之后,再从队列中取出任务来执行。特点线程复用减低了资源的消耗。通过复制利用已经创建的线程降低线程创建和销毁造成的资源消耗。控制最大并发数提高响应速度。当任务到达时,任务可以不需要等到线程创建就可以立即执行。管理线程提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统

2022-02-08 21:50:16 581

原创 JAVA多线程-生产者消费者模型

生产者消费者模型一个经典的同步模型。在Java中要制作这个模型,得满足以下几个条件:高内聚低耦合前提下,线程操纵资源类。判断、干活、唤醒通知。严防多线程并发状态下的虚假唤醒。传统的:sync、wait、notifyJUC变种:lock、await、signal以上这俩种都不是我们的重点。下面还是来实现一下。传统JUC锁版示例双线程情况,大于双线程就得加多个 conditionclass Data { private int number

2022-01-27 22:02:45 614

原创 JAVA多线程-常用JUC工具类及阻塞队列

工具类CountDownLactch简述允许一个或多个线程等待,直到在其他线程中执行的一组操作完成,同步辅助。CountDownLatch 类用给定的计数初始化。await 方法阻塞,直到由于 countDown() 方法的调用而导致当前计数达到零后所有等待线程被释放,并且任何后续的 await 调用立即返回。这是一个一次性的计数操作,因为计数无法重置。如果需要重置计数的版本,请考虑使用 **CyclicBarrier **类。构造函数/* 参数 count 减的次数

2022-01-27 21:59:56 1054

原创 JAVA多线程-JAVA锁有关内容

可重入锁(递归锁)什么是可重入锁指的是同一线程的外层函数获得锁之后,内层递归函数仍能获取该锁的代码。在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁。线程可以进入一个它已经拥有的锁所同步着的代码块!也就是说,已经加锁的代码块中还有有锁方法调用,那么这个调用的方法也会获取这个锁。锁定的是对象,如果获得锁了,那么被这个锁修饰的方法/代码块都可以进行访问。// method01 是上锁了的,此时内部调用了 method02 方法,// 此时虽然 method02 也是同步方法,但

2022-01-27 21:58:05 452

原创 JAVA多线程-集合类线程不安全问题

ArrayList线程不安全案例package JUC;import java.util.ArrayList;import java.util.List;import java.util.UUID;/** * @author zhaolimin * @date 2021/11/13 * @apiNote ArrayList类不安全测试 */public class ArrayListNotSafeDemo { public static void main(String

2022-01-27 21:56:22 2830

原创 多线程-CAS

什么是CAS操作通俗来讲就是比较并交换(Compare And Swap)。是一条CPU并发原语。他是判断内存某个位置的值是否为预期值,如果是则更改为新值,否则线程不挂起,持续比较到主内存与工作内存中的值一致为止。整个执行过程都是满足原子性的。为什么不会造成数据不一致CAS操作体现在Java语言之中就是 Unsafe类 中的各个方法。调用 Unsafe类 中的CAS操作,JVM 会帮我们实现出 CAS的汇编指令。这是一种完全依赖于硬件的功能,通过它实现原子操作。实现逻辑

2022-01-27 21:54:29 708

原创 多线程-有关JMM、Volatile

JMM它并不是真实存在的,它描述的是一组规范或者说是规则。通过这组规范定义了程序中的各个变量(包括实例字段、静态字段和构成数组对象的元素)的访问方式。| JMM内存模型图示JMM关于同步的规定线程解锁前:必须把共享变量的值刷新回主存。线程加锁前:必须读取主存中最新的共享变量的值到自己的工作内存中。加锁和解锁的锁是同一把锁。主内存相当于堆内存。这个主内存不是JAVA虚拟机的而是硬件上的内存条的内存。工作内存相当于栈内存。但是他有指向堆内存的指针。

2022-01-25 10:32:38 410

原创 多线程-并发编程相关概念

JMM并发编程模型的分类● 提出这些模型的原因是为了解决线程(并发活动的执行体)之间如何通信以及线程之间如何同步。● 命令式编程之中,线程之间的通信机制有两种:共享内存、消息传递。● JAVA 的并发采用的是共享内存模型,所以JAVA线程之间的通信是隐式进行的,整个通信的过程对于程序员来说是完全透明的!共享内存● 线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式的进行通信。● 在该模型中,线程同步是显式进行的,程序员必须显式指定某个方法或某段代码需要在线程之间互斥执行。消

2022-01-25 10:25:23 252

原创 ConcurrentHashMap的JDK1.7源码解析(含详细注释)

为什么HashTable慢HashTable 虽然它是一个线程安全的类,但是它是使用 synchronized 关键字来修饰一些操作。synchronized 锁住了一整个哈希表。导致同一时期只有一个线程可以进行对哈希表的操作。所以 HashTable 虽然线程安全但是它慢,一个人操作所有人等待,并发值就是1。ConcurrentHashMap在 JDK1.5 ~JDK1.7 中,ConcurrentHashMap 这个类它使用的是分段锁的机制来实现并发控制的。数据结构分段锁可以这

2022-01-24 21:24:19 1148

原创 ConcurrentHashMap的JDK1.8源码解析(含详细注释)

概述在 JDK1.7 中我们的 ConcurrentHashMap 是靠分段锁来实现并发环境下线程安全的,采用的是 数组 + 链表 的数据结构。在 JDK1.8 中我们的 ConcurrentHashMap 是靠 数组+链表+红黑树 的数据结构,用 CAS 操作来实现并发环境下的线程安全。数据结构采用 数组 + 链表 + 红黑树 的数据结构。总体上和 HashMap 没有什么区别,就是需要实现并发环境下的线程安全,所以源码中要考虑的比 HashMap 要多,结构会更复杂一点。|

2022-01-24 21:23:22 464

原创 HashMap的JDK1.7源码解析(含详细注释)

数据结构JDK1.7 中的 HashMap 的底层结构是数组加单向链表实现的。将 key的hash值 进行取模获取哈希表下标,既即将存放的元素的数组的位置,然后到对应的链表中进行 put 和 get 操作。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PNs2ocrX-1643030061325)(C:\Users\noblegasesgoo\AppData\Roaming\Typora\typora-user-images\image-20211107125432

2022-01-24 21:15:34 364

原创 HashMap的JDK1.8源码解析(不含红黑树,含详细注释)

HashMap的源码总结(不含红黑树)1、属性总结1.1 总览属性名描述static final int MAXIMUM_CAPACITY = 1 << 30;哈希表的最大大小,绝对也是二的幂,这里 一左移三十位,就是 2^30。static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;哈希表的默认大小,绝对是二的幂,这里 一左移四位,就是 2^4 = 16。static final float D

2022-01-24 21:08:59 446

原创 LinkedList的源码解析(含详细注释)

1、今日阅读部分1.1 三个基本参数以及一个重要的节点内部类size 属性代表了 LinkedList 目前链表中元素的个数。头尾指针就是为了辨别链表哪是头哪是尾。这里用到了 transient 关键字,之前一直没用过这个关键字,查阅文档之后才知道被该关键字修饰的成员变量在保存对象时,该属性并不会被保存,也就是不能被序列化。// 被改关键字标注的属性不可被序列化 // 代表了 LinkedList 对象目前元素的个数。 transient int size = 0;

2022-01-24 21:04:11 379

原创 ArrayList的源码解析(含详细注释)

ArrayList的源码自学1、今日阅读部分1.1、五个重要参数DEFAULT_CAPACITY(集合默认容量大小)。EMPTY_ELEMENTDATA(用于空实例的共享空数组实例)。DEFAULTCAPACITY_EMPTY_ELEMENTDATA(共享的空数组实例用于默认大小的空实例)。elementData(arraylist 中存数据的地方)。size(数据元素个数)。 * Default initial capacity. * 集合的默认容量为10

2022-01-24 21:01:12 440

原创 Spring Cloud 学习笔记(持续更新)

1 微服务1.1 spring cloud 是什么他是一套分布式框架集合,基于 spring boot 开发的。他是一种规范。将不同公司生产的不同组件以 spring boot 的风格来集成。这样的话,开发者就不用关心组件之间的整合,开箱即用,需要哪个组件直接用 spring boot 整合进来。1.2 什么是 spring cloud alibaba在 spring cloud 规范下出现的具体一套解决方案。2 eureka 注册中心2.1如何在多个微服务中发送远程 http 请

2021-09-11 17:50:06 459 2

空空如也

空空如也

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

TA关注的人

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