自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

后端元宇宙

专注后端技术栈,热爱分享,热爱工作总结,欢迎关注,和我一起交流。

  • 博客(210)
  • 收藏
  • 关注

原创 一文整理14道MySQL索引相关面试题

精心整理14道MySQL索引相关面试题(珍藏版)如果仅仅是死记硬背MySQL索引相关面试题一定是相当枯燥的,不容易记却容易忘,这里循序渐进的讲解有关索引有关知识点,让大家在理解的基础上记住一些面试常问的点。什么是索引?索引的优缺点?什么情况下需要建索引?什么情况下不需要建索引?索引有哪几种分类?索引的数据结构有哪些?Hash索引和B+树索引的区别?为什么B+树比B树更适合实现数据库索引?聚集索引相对于非聚集索引的区别?什么是回表查询?什么是覆盖索引?什么是最左匹配原则?索引失效

2022-01-05 18:55:46 7640 1

原创 看一遍就懂:MVCC原理详解

MVCC实现原理也是一道非常高频的面试题,自己在整理这篇文章的时候,感觉到网上的资料在讲这块知识点上写的五花八门,好像大家的理解并没有一致。这里将自己所理解的做一个总结,个人会觉得这是一篇含金量挺高的一篇文章(哈哈),所以请你坚持认真的看下去,一定会对你有收获。如果文章中哪里没有理解,或者认为我讲的不对的地方,都欢迎留言一起交流哈。前言一些基本概念我这里不在做阐述了。好比什么是事务? 事务的ACID? 四大隔离级别?有关事务并发存在的问题之前有写过一篇文章:一文详解脏读、不可重复读、幻读如果你.

2021-12-30 22:45:52 3986 8

原创 手把手教你分析解决MySQL死锁问题

在生产环境中如果出现MySQL死锁问题该如何排查和解决呢,本文将模拟真实死锁场景进行排查,最后总结下实际开发中如何尽量避免死锁发生。一、准备好相关数据和环境当前自己的数据版本是8.0.22mysql> select @@version;+-----------+| @@version |+-----------+| 8.0.22 |+-----------+1 row in set (0.00 sec)数据库隔离级别(默认隔离级别)mysql> select @@.

2021-12-28 22:35:35 1918 1

原创 精心整理了20道Redis经典面试题(珍藏版)

花了比较长的时间搜集整理了这20道经典面试题,Redis相关面试题看这篇文章就差不多了。

2021-12-23 08:00:00 648 1

原创 怎么实现Redis的高可用?(主从、哨兵、集群)

高可用有两个含义:一是数据尽量不丢失,二是保证服务尽可能可用。 AOF 和 RDB 数据持久化保证了数据尽量不丢失,那么多节点来保证服务尽可能提供服务。

2021-12-17 14:44:12 855

原创 一文让你明白Redis持久化(RDB、AOF)

为了保证数据不丢失,我们需要将内存中的数据存储到磁盘,以便 Redis 重启时能够从磁盘中恢复原有的数据,而整个过程就叫做 Redis 持久化。

2021-12-14 08:45:00 666

原创 谈谈Redis五种数据结构及真实应用场景

这篇文章主要针对5种基本数据类型,来演示在实际开发中的应用场景和一些常用的命令。

2021-12-10 08:45:00 561

原创 Redis缓存穿透、击穿、雪崩,数据库与缓存一致性

Redis作为高性能非关系型(NoSQL)的键值对数据库,受到了广大用户的喜爱和使用,大家在项目中都用到了Redis来做数据缓存,但有些问题我们在使用中不得不考虑,其中典型的问题就是:缓存穿透、缓存雪崩、缓存击穿和与关系型数据库的一致性。

2021-12-07 08:45:00 291

原创 Spring Boot 实现各种参数校验(附项目源码)

本文会详细介绍Spring Validation各种场景下的最佳实践及其实现原理,死磕到底!

2021-12-06 13:31:06 911 1

原创 Git五个常见问题及解决方法

由于种种原因,一些本应该被忽略的文件被我们误操作提交到了远程仓库了。那么我们该怎么删除这些文件呢?

2021-12-02 08:45:00 749 1

转载 高并发下秒杀商品的9个细节

高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。秒杀一般出现在商城的促销活动中,指定了一定数量(比如:10个)的商品(比如:手机),以极低的价格(比如:0.1元),让大量用户参与活动,但只有极少数用户能够购买成功。这类活动商家绝大部分是不赚钱的,说白了是找个噱头宣传自己。虽说秒杀只是一个促销活动,但对技术要求不低。下面给大家总结一下设计秒杀系统需要注意的9个细节。一、瞬时高并发一般在秒杀时间点(比如:12点)前几

2021-11-25 16:48:52 258

原创 SpringBoot引入第三方jar的Bean的三种方式

在SpringBoot的大环境下,基本上很少使用之前的xml配置Bean,主要是因为这种方式不好维护而且也不够方便。 因此本篇博文也不再介绍Spring中通过xml来声明bean的使用方式。注解装配Bean1、使用@Component等派生注解只要在类上加类上加 @Component 注解即可,该注解只要被扫描到就会注入到spring的bean容器中。@Componentpublic class AnoDemoBean {}当然不只是@Component注解可以声明Bean,还有如:@Re.

2021-11-25 11:29:42 11701 3

原创 MySQL记录锁、间隙锁、临键锁小案例演示

生成间隙(gap)锁、临键(next-key)锁的前提条件 是在 RR 隔离级别下。有关Mysql记录锁、间隙(gap)锁、临键锁(next-key)锁的一些理论知识之前有写过,详细内容可以看这篇文章一文详解MySQL的锁机制这篇主要通过小案例来对记录锁、间隙(gap)锁、临键(next-key)锁做一个更好的理解。这里先给出结论,再来用实际例子证明1、当使用唯一索引来等值查询的语句时, 如果这行数据存在,不产生间隙锁,而是记录锁。2、当使用唯一索引来等值查询的语句时, 如果这行数据不.

2021-11-24 17:46:26 312 1

原创 一文详解MySQL的锁机制

一、表级锁、行级锁、页级锁数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则。MySQL数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎的锁定机制都是为各自所面对的特定场景而优化设计,所以各存储引擎的锁定机制也有较大区别。MySQL各存储引擎使用了三种类型(级别)的锁定机制:表级锁定,行级锁定和页级锁定。1、表级锁表级别的锁定是MySQL各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现逻辑非常简单,带来的系统负面.

2021-11-18 20:31:56 1761 1

原创 SpringBoot(18)---通过Lua脚本批量插入数据到Redis布隆过滤器

通过Lua脚本批量插入数据到布隆过滤器有关布隆过滤器的原理之前写过一篇博客: 算法(3)—布隆过滤器原理在实际开发过程中经常会做的一步操作,就是判断当前的key是否存在。那这篇博客主要分为三部分:1、几种方式判断当前key是否存在的性能进行比较。2、Redis实现布隆过滤器并批量插入数据,并判断当前key值是否存在。3、针对以上做一个总结。 一、性能对比主要对以下方法进行性能测试...

2020-03-30 20:17:19 1353 1

原创 算法(3)---布隆过滤器原理

算法(3)—布隆过滤器原理开发一个电商项目,因为数据量一直在增加(已达亿级),所以需要重构之前开发好的秒杀功能,为了更好的支持高并发,在验证用户是否重复购买的环节,就考虑用布隆过滤器。也顺便更加深入的去了解下布隆过滤器的原理,感觉还是蛮有意思的,这一连串的公式不静下心来思考,很容易被绕晕。## 一、概述####1、什么是布隆过滤器本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构...

2020-03-30 20:16:46 334

原创 分布式事务(4)---RocketMQ实现分布式事务项目

RocketMQ实现分布式事务有关RocketMQ实现分布式事务前面写了一篇博客1、RocketMQ实现分布式事务原理下面就这个项目做个整体简单介绍,并在文字最下方附上项目Github地址。一、项目概述1、技术架构项目总体技术选型SpringCloud(Finchley.RELEASE) + SpringBoot2.0.4 + Maven3.5.4 + RocketMQ4.3 +My...

2020-03-30 20:16:03 261

原创 分布式事务(3)---RocketMQ实现分布式事务原理

分布式事务(3)—RocketMQ实现分布式事务原理 之前讲过有关分布式事务2PC、3PC、TCC的理论知识,博客地址:1、分布式事务(1)—2PC和3PC原理2、分布式事务(2)—TCC原理这篇讲有关RocketMQ实现分布式事务的理论知识,下篇也会示例 通过SpringCloud来实例RocketMQ实现分布式事务的项目。一、举个分布式事务场景列子:假设 A 给 B 转 100块...

2020-03-30 20:15:31 226

原创 分布式事务(2)---TCC原理

分布式事务(2)—TCC原理 上篇讲过有关2PC和3PC理论知识,博客:分布式事务(1)—2PC和3PC理论我的理解:2PC、3PC还有TCC都蛮相似的。3PC大致是把2PC的第一阶段拆分成了两个阶段,而TCC我感觉是把2PC的第二阶段拆分成了两个阶段。一、概念 1、概念TCC又称补偿事务。其核心思想是:“针对每个操作都要注册一个与其对应的确认和补偿(撤销操作)”。它分为三个操作:1、...

2020-03-30 20:14:31 293

原创 分布式事务(1)---2PC和3PC原理

分布式事务(1)—2PC和3PC原理 分布式事物基本理论:基本遵循CPA理论,采用柔性事物特征,软状态或者最终一致性特点保证分布式事物一致性问题。分布式事物常见解决方案:2PC两段提交协议3PC三段提交协议(弥补两端提交协议缺点)TCC或者GTS(阿里)消息中间件最终一致性使用LCN解决分布式事物,理念“LCN并不生产事务,LCN只是本地事务的搬运工”。一、...

2020-03-30 20:13:24 449

原创 RocketMQ(7)---顺序消费

RocketMQ顺序消费 如果要保证顺序消费,那么他的核心点就是:生产者有序存储、消费者有序消费。一、概念 1、什么是无序消息无序消息 无序消息也指普通的消息,Producer 只管发送消息,Consumer 只管接收消息,至于消息和消息之间的顺序并没有保证。举例 Producer 依次发送 orderId 为 1、2、3 的消息,Consumer 接到的消息顺序有可能是 1、2、...

2020-03-30 20:12:18 616

原创 RocketMQ(6)---发送普通消息(三种方式)

发送普通消息(三种方式)RocketMQ 发送普通消息有三种实现方式:可靠同步发送、可靠异步发送、单向(Oneway)发送。注意 :顺序消息只支持可靠同步发送。GitHub地址: https://github.com/yudiandemingzi/SpringBootBlog一、概念 1、可靠同步发送原理:同步发送是指消息发送方发出数据后,会在收到接收方发回响应之后才发下一个数据包的通...

2020-02-20 22:22:04 517

原创 RocketMQ(5)---RocketMQ重试机制

RocketMQ重试机制消息重试分为两种:**Producer发送消息的重试 **和 Consumer消息消费的重试。一、Producer端重试Producer端重试是指: Producer往MQ上发消息没有发送成功,比如网络原因导致生产者发送消息到MQ失败。看一下代码:@Slf4jpublic class RocketMQTest { /** * 生产者组 ...

2020-02-20 22:21:21 3227 2

原创 RocketMQ(4)---RocketMQ核心配置讲解

RocketMQ核心配置讲解RocketMQ的核心配置在broker.conf配置文件里,下面我们来分析下它。 一、broker.conf配置 下面只列举一些常用的核心配置讲解。1、broker.conf核心配置讲解# nameServer地址,如果nameserver是多台集群的话,就用分号分割namesrvAddr=172.1.21.29:9876;143.13.262.43:98...

2020-02-20 22:20:51 562

原创 SpringBoot(17)---SpringBoot整合RocketMQ

# SpringBoot整合RocketMQ 上篇博客讲解了服务器集群部署RocketMQ 博客地址:RocketMQ(2)—Docker部署RocketMQ集群这篇在上篇搭建好的基础上,将SpringBoot整合RocketMQ实现生产消费。GitHub地址: https://github.com/yudiandemingzi/spring-boot-study 一、搭建步骤 先...

2020-02-20 22:20:16 271

原创 RocketMQ(2)---Docker部署RocketMQ集群

RocketMQ(2)—Docker集群部署RocketMQ =前言=1、因为自己只买了一台阿里云服务器,所以RocketMQ集群都部署在单台服务器上只是端口不同,如果实际开发,可以分别部署在多台服务器上。2、这里有关 Broker 和 NameServer 分别都做了了集群部署(各部署两个),且BroKer是按两主进行部署。之所以选用Docker部署主要还是考虑 :通过Docker部署...

2020-02-20 22:19:43 2713 2

原创 RocketMQ(1)-架构原理

RocketMQ(1)-架构原理RocketMQ是阿里开源的分布式消息中间件,跟其它中间件相比,RocketMQ的特点是纯JAVA实现;集群和HA实现相对简单;在发生宕机和其它故障时消息丢失率更低。一、RocketMQ专业术语 先讲专业术语的含义,后面会画流程图来更好的去理解它们。Producer消息生产者,位于用户的进程内,Producer通过NameServer获取所有Broker...

2020-02-20 22:19:09 207

原创 Redisson实现分布式锁(3)—项目落地实现

Redisson实现分布式锁(3)—项目落地实现有关Redisson实现分布式锁前面写了两篇博客作为该项目落地的铺垫。1、Redisson实现分布式锁(1)—原理2、Redisson实现分布式锁(2)—RedissonLock这篇讲下通过Redisson实现分布式锁的项目实现,我会把项目放到GitHub,该项目可以直接运用于实际开发中,作为分布式锁使用。一、项目概述 1、技术架构项...

2020-02-20 22:18:28 348

原创 Redisson实现分布式锁(2)—RedissonLock

#Redisson实现分布式锁(2)—RedissonLock有关Redisson实现分布式锁上一篇博客讲了分布式的锁原理:Redisson实现分布式锁—原理这篇主要讲RedissonLock和RLock。Redisson分布式锁的实现是基于RLock接口,RedissonLock实现RLock接口。一、RLock接口 1、概念public interface RLock extends...

2020-02-20 22:17:54 165

原创 Redisson实现分布式锁(1)---原理

Redisson实现分布式锁(1)—原理有关Redisson作为实现分布式锁,总的分3大模块来讲。1、Redisson实现分布式锁原理2、Redisson实现分布式锁的源码解析3、Redisson实现分布式锁的项目代码(可以用于实际项目中)本文只介绍Redisson如何实现分布式锁的原理。其它的会在接下来的博客讲,最后有关Redisson实现分布式锁的项目代码的博客中会放上项目源码到G...

2020-02-20 22:17:12 468

原创 SpringBoot(16)—@ConditionalOnBean与@ConditionalOnClass

#@ConditionalOnBean与@ConditionalOnClass上一篇讲的@Conditional可以通过条件控制是否注入Bean,这篇讲下有关Bean其它几个常用的注解使用方式@ConditionalOnBean // 当给定的在bean存在时,则实例化当前Bean@ConditionalOnMissingBean // 当给定的在bean不存在时,则实例化...

2019-08-21 20:23:01 636

原创 SpringBoot(15)—@Conditional注解

#SpringBoot(15)—@Conditional注解作用 @Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件的才给容器注册Bean。 一、概述 1、@Conditional注解定义@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNT...

2019-08-21 20:22:32 174

原创 SpringBoot(14)—注解装配Bean

SpringBoot(14)—注解装配BeanSpringBoot装配Bean方式主要有两种通过Java配置文件@Bean的方式定义Bean。通过注解扫描的方式@Component/@ComponentScan。 一、当前项目装配Bean 创建项目名称为create-bean。1、@Component方式@Component("componentBean")public cla...

2019-08-21 20:21:55 238

原创 【分布式架构】(10)---基于Redis组件的特性,实现一个分布式限流

分布式—基于Redis进行接口IP限流场景 为了防止我们的接口被人恶意访问,比如有人通过JMeter工具频繁访问我们的接口,导致接口响应变慢甚至崩溃,所以我们需要对一些特定的接口进行IP限流,即一定时间内同一IP访问的次数是有限的。实现原理 用Redis作为限流组件的核心的原理,将用户的IP地址当Key,一段时间内访问次数为value,同时设置该Key过期时间。比如某接口设置相同IP1...

2019-08-21 20:21:22 177

原创 【java提高】(16)---java注解(Annotation)

# java提高(16)—java注解注解含义注解是JDK1.5之后才有的新特性,它相当于一种标记,在程序中加入注解就等于为程序打上某种标记,之后又通过类的反射机制来解析注解。## 一、JDK自带注解JDK1.5之后内部提供的三个注解 @Deprecated #废弃,过时。 @Override #重写、覆盖。 @SuppressWarnings #压缩警告。...

2019-08-21 20:20:50 148

原创 【IDEA】(4)---很好用的DEBUG功能

#IDEA—DEBUG功能一、常用快捷键 快捷键并不是完全一样的,我这边是MAC安装的IDEA, 这边最主要还是知道DEBUG时常用的功能。1、快捷键F7 #进入下一步,如果当前行是一个方法,则进入当前方法体内F8 #进入下一步,如果当前行是一个方法,则不进入当前方法体内F9 #跳到下一个断点,如果没有则直接运行结束Alt + F8 #表达式求值Alt + F...

2019-08-21 20:20:17 446

原创 【IDEA】(3)---非常实用提高开发效率和水平的插件

IDEA(3)—Mac中IDEA插件IDEA提供了许多很实用的插件,能够大大提高开发效率和开发水平,这里列举几个很实用的插件。说明:这边的IDEA是MAC系统。一、插件管理界面简介1、界面位置安装插件三个按钮的作用Install JetBrains Plugin 此按钮的功能是安装JetBrains的官方插件Browes repositories 此按钮的功能是浏览官方仓库...

2019-08-21 20:19:31 243

原创 【IDEA】(2)---MAC代码模版

IDEA(2)—MAC代码模版IDEA提供了许多的自带代码模版,这些模版主要是对于我们经常开发用到的代码制作成一个模版,比如for循环,这个是经常会用到的代码,如果没有代码模版,我们需要一个一个手动输入,有了代码模版也只需输入该模版的快捷键,就会自动生成for循环相关代码,提高开发效率。一、自带代码模版位置 Preferences —> Editor —> Live T...

2019-08-21 20:18:57 150

原创 【IDEA】(1)---MAC下常用快捷键

IDEA常用快捷键IDEA是一个很好的开发工具,用好它能大大提高我们的开发效率,所以这里学习总结下有关IDEA实用的一些教程,比如常用快捷键,如何自定义代码模版,如何debug异常断点,或者说多线程下的debug如何实现。接下来都会总结,这篇主要总结常用快捷键。一、快捷键1、键盘键说明⌥ = Option = Alt⌃ = Control = Ctrl↩︎ = Return/Ente...

2019-08-21 20:18:26 176

原创 Shell(2)—数组

Shell(2)—数组常用的 Bash Shell 只支持一维数组,不支持多维数组。 一、概念Shell 并且没有限制数组的大小,理论上可以存放无限量的数据。Shell 数组元素的下标也是从 0 开始计数。1、Shell 数组的定义在 Shell 中,用括号( )来表示数组,数组元素之间用空格来分隔。由此,定义数组的一般形式为:array_name=(ele1 ele2 ele3...

2019-08-21 20:17:31 362

空空如也

空空如也

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

TA关注的人

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