自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【RocketMQ】源码详解:ACK消息、消息重试、消费进度管理

消息消费失败,发送ack消息:org.apache.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService#sendMessageBack。入口: org.apache.rocketmq.client.impl.consumer.ConsumeMessageConcurrentlyService#sendMessageBack。消息消费失败的情况下,会发送ack消息给broker, 发送的内容包括topic、偏移量、msgId等。

2023-04-02 15:34:24 928 1

原创 【RocketMQ】源码详解:消息拉取、消息消费流程、Push模式长轮询

通过这个处理器处理拉取消息的请求,调用org.apache.rocketmq.store.DefaultMessageStore#getMessage来拉取消息,先去consumequeue查询消息在commitlog中的偏移量和大小,再根据此偏移量和消息长度查询真正的消息内容。而拉取一次再次放入的前提是,pullRequestQueue中有请求,那么第一次拉取消息请求就是在重平衡时添加进去的,而重平衡服务在消费者启动时会进行一次唤醒,所以第一次放入拉取消息请求是在消费者启动时。

2023-03-27 11:05:51 864

原创 【RocketMQ】源码详解:消费者启动、消费者负载均衡Rebalance

在rocketmq中, 一个queue只能被一个消费者消费, 但是 一个消费者可以消费多个queue . 而且在程序运行过程中,可能会启动新的消费者以增加消费能力, 这就需要给新的消费者分配queue, 或者有消费者关闭, 其负责的queue就要交给其他消费者消费, 这就涉及到多个queue与消费者之间的负载均衡问题. 在rocketmq中由RebalanceService提供此服务. 其提供了多种负载均衡策略: 平均分配、环形平均策略、一致性哈希策略等。

2023-03-20 21:05:02 522 1

原创 【RocketMQ】源码详解:Broker端消息重放ReputMessageService(构建consumequeue)

【RocketMQ】源码详解:Broker端消息重放ReputMessageService(构建consumequeue)

2023-03-12 16:23:21 298

原创 【RocketMQ】源码详解:Broker端消息刷盘流程

【RocketMQ】源码详解:Broker端消息刷盘流程

2023-03-05 12:42:12 455

原创 【RocketMQ】源码详解:Broker端消息储存流程、消息格式

【RocketMQ】源码详解:Broker端消息储存流程、消息格式

2023-02-26 21:32:08 655

原创 【RocketMQ】源码详解:消息储存服务加载、文件恢复、异常恢复

【RocketMQ】源码详解:消息储存服务加载、文件恢复、异常恢复

2023-02-21 21:30:21 458

原创 【RocketMQ】源码详解:Broker启动流程

【RocketMQ】源码详解:Broker启动流程

2023-02-20 09:35:48 653

原创 【RocketMQ】源码详解:生产者启动与消息发送流程

RocketMQ生产者启动与消息发送流程源码

2023-02-16 17:28:25 490

原创 【Java多线程JUC入门详解】AQS原理详解

AbstractQuenedSynchronizer抽象的队列式同步器 , 在java.util.concurrent.locks包下

2023-01-05 10:15:07 411

原创 【Java多线程JUC入门详解】Atomic原子类、LongAdder源码详解

原子类就是利用CAS机制,实现原子操作的一些类基本类型原子类(AtomicInteger、AtomicBoolean、AtomicLong)(2). 数组类型原子类 (AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray)引用类型原子类 (AtomicReference、AtomicStampedReference、AtomicMarkableReference)

2022-11-21 09:44:44 376

原创 【Java多线程JUC入门详解】CAS、乐观锁、Unsafe类

CAS是乐观锁的一种实现。CAS的全称为Compare-And-Swap ,它是一条CPU并发原语,比较工作内存值(预期值)和主物理内存的共享值是否相同,相同则执行规定操作,否则继续比较直到主内存和工作内存的值一致为止。这个过程是原子的(AtomicInteger类主要利用CAS+volatile和native方法来保证原子操作,从而避免synchronized的高开销,执行效率大为提升)

2022-11-01 10:30:36 278

原创 【Java多线程JUC入门详解03】JMM Java内存模型、先行发生原则 Happens-Before 、内存屏障、volatile详解

JMM(Java内存模型Java Memory Model,简称JMM)本身是一种**抽象的概念** 并不真实存在,它描述的是一组规则或规范通过规范定制了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。

2022-10-10 16:19:49 368

原创 【redis】redis滑动时间窗口算法实现限流

redis滑动时间窗口实现限流

2022-08-25 17:03:22 1488

原创 【MySql进阶】索引详解(三):索引的使用和创建原则、索引失效、索引优化

从MySQL 8.x开始支持 隐藏索引(invisible indexes) ,只需要将待删除的索引设置为隐藏索引,使查询优化器不再使用这个索引(即使使用force index(强制使用索引),优化器也不会使用该索引),确认将索引设置为隐藏索引后系统不受任何影响,就可以彻底删除索引。上面这个语句对于这个联合索引来说,查找顺序是,先找到code = 1的一串记录,此时因为对于code相等的值,再根据num排序,所以这串记录直接就是根据num排序好的,可以只回表一次,因此这个语句就是走索引的。

2022-08-23 14:36:44 436

原创 【MySql进阶】索引详解(二):Mysql InnoDB索引原理、B+树、聚簇索引、二级索引、联合索引

比如,表中的数据经常被增删改,则不适合添加索引,索引能够加快查询效率,却降低了增删改的效率。1、数据量庞大2、该字段很少进行DML操作3、该字段经常出现在查询的where字句中B树:B+树:innoDB构造索引储存数据的单位是页,叶子节点储存的是真实数据,为数据页,非叶子节点储存的是真实数据的索引,为目录页。innoDB的一个数据页至少可以存放两条数据默认情况下,一个数据页大小为16KB假设每个叶子节点能够储存100条关键字,非叶子节点可以储存1000条关键字,那么:4层就能够储存相当多的数据了,所以一般情

2022-08-05 14:21:21 496

原创 【MySql进阶】索引详解(一):索引数据页结构

InnoDB 为了不同的目的而设计了许多种不同类型的 页 ,比如存放表空间头部信息的页,存放 Insert Buffer信息的页,存放 INODE 信息的页,存放 undo 日志信息的页等。而用来存放用户保存数据的页就是 innoDB的基本储存结构:索引页。(即数据页)。它是 InnoDB 管理存储空间的基本单位,刷盘(从内存到硬盘)、读取操作,都是每次一页。页面最大为16KBinnoDB的索引数据结构为B+树,而树的每个节点则为“页”,B+树同一层级的页为双向链表连接。一张数据页会包含以上的部分,其中,(

2022-07-05 16:31:01 611

原创 【MySql进阶】行格式详解:COMPACT、Dynamic

概述我们平时是以记录为单位来向表中插入数据的,这些记录在磁盘上的存放方式也被称为 行格式 或者 记录格式 。 InnoDB 到现在为止设计了4种不同类型的 行格式 ,分别是 Compact 、 Redundant 、Dynamic 和 Compressed 行格式。mysql5.0之后的默认行格式为Compact , 5.7之后的默认行格式为dynamicCOMPACT行格式变长字段长度列表我们知道 MySQL 支持一些变长的数据类型,比如 VARCHAR(M) 、 VARBINARY(M) 、

2022-06-10 09:27:25 8387 3

原创 【MySql进阶】锁详解:共享锁、排他锁、行级锁、表级锁、间隙锁

锁概述共享锁、排他锁、行级锁、表级锁、间隙锁,这些名字并不一定单独指某一个锁,而是某个锁可能拥有的特性。Mysql并发事务访问读-读读取允许并发操作写-写即两个事务同时操作一条数据在这种情况下会发生 脏写 的问题,任何一种隔离级别都不允许这种问题的发生。所以在多个未提交事务相继对一条记录做改动时,需要让它们 排队执行 ,这个排队的过程其实是通过 锁 来实现的。这个所谓的锁其实是一个 内存中的结构 ,在事务执行前本来是没有锁的,也就是说一开始是没有 锁结构 和记录进行关联的。当一个事务想对这

2022-05-24 17:10:45 2048

原创 【MySql进阶】MVCC详解:MVCC原理、快照读、版本链、ReadView

MVCC文章目录MVCC概述版本链当前读和快照读ReadView读已提交和可重复读的区别概述MVCC(Multi-Version Concurrency Control): 多版本并发控制mysql通过其实现了读已提交、可重复读两种隔离级别,其也只在 可重复读 读已提交 两个级别下工作。MVCC可以理解为行级锁的一个变种,很多情况下避免了加锁,性能更优( 是乐观锁的一种实现 )。版本链我们知道,mysql事务的隔离级别有四种,其中:读未提交和串行化分别是最低和最高的隔离级别,读未提交是指可

2022-05-07 16:42:32 624

原创 【MySql进阶】undo日志详解:undo日志结构、undo日志链表、回滚段、undo log原理

undo日志本文为阅读《MySql是怎样运行的》的笔记,供大家参考。文章目录undo日志概述undo日志数据结构insert 对应的undo logdelete 对应的undo logupdate 对应的undo log不更新主键的操作更新主键的操作undo log 页面通用结构undo log 页面链表first undo pageUndo Log Segment HeaderUndo Log Headerundo页面重用回滚段概述从回滚段中申请Undo页面链表多个回滚段undo log的写入过程概

2022-04-18 17:11:08 3402 1

原创 【MySql进阶】redo日志详解:redo日志结构、lsn、checkpoint、mysql事务日志、mysql崩溃恢复

redo日志本文为阅读《MySql是怎样运行的》的笔记,供大家参考。文章目录redo日志概述redo数据结构通用结构redo日志类型redo日志组Mini-Transactionredo日志写入内存redo log bufferredo log blockredo log 写入redo日志写入磁盘redo日志刷盘时机redo日志文件组redo日志文件格式Log Sequeue Number全局LSNflushed_to_disk_lsnflush链表中的LSNcheckpointinnodb_flush

2022-04-06 14:24:44 1818

原创 【ElasticSearch 01】elasticsearch入门详解

概述es是一个基于Lucene的搜索引擎。对于初学者来说,可以将其看作一款NoSQL。es一般可以用作项目中的搜索、检索模块,提供关键词检索、条件过滤、聚合等功能。es在单独使用时,可以实现的功能有比如:淘宝、京东等的商品搜索,根据品牌、分类的商品过滤,根据价格等的排序。数据聚合则是可以统计如:某一价格段的商品的销量,等类似的数据。es中的数据是以文档(docment)为单位保存的,可以看作是数据库中的一行数据。文档保存在类型(type)中,可以看作是数据库中的表。而存储以上这些的称为索引(index

2021-06-07 17:31:02 366

原创 Springboot循环依赖问题: Bean with name ‘xxxxService‘ has been injected into other beans

Error creating bean with name 'xxxxService': Bean with name 'xxxxService' has been injected into other beans [.....] in its raw version as part of a circular reference, but has eventually been wrapped. This means that said other beans do not use the final

2021-03-05 09:08:36 10070 6

原创 MYSQL 服务无法启动 服务没有报告任何错误 请键入 NET HELPMSG 3534 以获得更多的帮助。

通过查询使用如下方法:bin目录下执行 mysqld -remove mysqld -install:未解决输入mysqld --initialize重新初始化data。 发现遇到:mysqld: [ERROR] Found option without preceding group in config file D:\mysql-8.0.22-winx64\my.ini at line 1.mysqld: [ERROR] Fatal error in defaults handl

2020-12-28 14:25:18 381

原创 MySQL 1040 错误 Too many connections 引发的一系列错误

MySQL 1040 错误解决办法:更改my.ini文件中的最大连接数。my.ini在mysql的安装目录下。[client]# 设置mysql客户端默认字符集default-character-set=utf8 [mysqld]# 设置3306端口port = 3306# 设置mysql的安装目录basedir=D:\\mysql-8.0.22-winx64# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错# datadi

2020-12-28 14:17:07 119

原创 Java8新特性 之 函数式接口、Lambda表达式

函数式接口函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。在Java8之前,Java中就已经有了一些函数式接口:java.lang.Runnablejava.util.concurrent.Callablejava.security.PrivilegedActionjava.util.Comparatorjava.io.FileFilterjava.nio.file.PathMatcherjava.lang.reflec

2020-12-21 15:51:34 86 1

原创 Redis五大数据类型,及其底层数据结构实现原理

五大基本数据结构redis存储的都是 key:value格式的数据,key为字符串格式,value有5种String:字符串:sds动态字符串hash:map格式:数组+链表list:linklist(允许重复):3.2之前是ziplist linkdelist,之后是quicklistset:集合类型(不允许重复:intset或hashtablesortedset:有序集合:zset或ziplist。zset使用字典+跳表实现String底层是通过SDS简单动态字符串实现的struc

2020-11-25 15:03:23 321

原创 Redis数据结构SortedSet底层原理详解

概述一些常用命令:存储:zadd key score value获取:zrange key start end获取:同时获取分数:zrange key start end with score删除:zrem key value存储的时候我们可以发现,是有一个score(分数)的,这个就是用来排序的字段。实现先说结论,SortedSet底层,根据配置会在不同的时候选用两种不同的数据结构zset,或ziplist进行存储:首先,我们来看几个参数:zset-max-ziplist-entrie

2020-10-31 00:56:33 3539

原创 Java集合原理详解

注:本篇博客不讨论集合的使用,仅是基于我最近复习时对其部分原理的理解的分享(比如扩容的原理、底层的数据结构等,但我的理解也比较浅显,适用于初学者或仅知道如何使用集合想快速了解其原理的朋友)如有错误,望指出!文章目录集合的结构Collection接口ListArrayListLinkedListVectorSetHashSetTreeSetMap接口HashMapTreeMap集合的结构我们通常常用的集合有三种,List、Set、Map,不过实际上,他们三个并不是平级的接口List和Set继承自Co

2020-10-23 21:11:07 238

原创 No beans of ‘RedisConnectionFactory‘ type found.

在编写redis配置类的时候,在cacheManager传入RedisConnectionFactory的时候报错,大概就是spring没有给你自动注入这个对象。最终解决方法是@ResourceRedisConnectionFactory redisConnectionFactory;增加一个变量,使用resource注解注入,不使用方法参数的redisConnectionFactory,最终运行成功。PS:今天想要复现此错误的时候,把Resource注入的对象注解掉后发现,又可以了,不知道啥

2020-10-09 09:29:00 13960 14

原创 错误:java.lang.IllegalArgumentExcept:Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required

先说结论:博主是因为手动向maven仓库中添加jar包的时候,有错误,把错误的依赖的文件夹删除即解决。今天向阿里云vod中上传视频的时候,有一个jar包阿里没有开源,需要手动引入,我在向maven中添加jar包的时候,jar包的名字打错了,导致文件夹的名字和jar包的名字不匹配,然后晚上的时候,一开始有一个模块都启动起来的,再启动其他模块,就报这个错误,然后把启动起来的模块停止再重启,也不行了,所以我认为肯定不是代码的问题,经过查找,看到有人说可能是jdk的jar包问题,我也动过jdk就想到了我动过mav

2020-10-04 20:33:58 1324

原创 springboot整合shiro,实现登录、退出、权限授权等

文章目录Shiro 概述Demo依赖springboot配置Dao层service层ShiroConfigRealmcontroller层前端页面index页面登录页面Shiro 概述Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。更多理论知识,可以去他人博客查阅,这里博主直接贴代码,里面有一些注释,希望会对你有帮助。Demo依赖&

2020-09-16 10:23:29 1230

原创 【Java多线程JUC入门详解02】:读写锁、阻塞队列、线程池、CountDownLatch、CyclicBarrier、Semaphore

CountDownLatch减法计数器package org.example.count;import java.util.concurrent.CountDownLatch;/** * @Author: sshdg * @Date: 2020/9/6 8:24 */public class CountDownLatchTest { public static void main(String[] args) throws InterruptedException {

2020-09-10 22:31:28 299

原创 【Java多线程JUC入门详解01】:Lock锁、集合的线程安全问题、生产者消费者问题

JUC: java.util .concurrent工具包的简称:本篇即为此工具类的入门使用博客公平锁:先来后到非公平锁:会根据运行时间、级别进行分配synchronized锁package org.example;/** * @author sshdg */public class SynchronizedDemo { public static void main(String[] args) { SaleTicket saleTicket = new Sale

2020-09-10 22:29:08 145

原创 SpringBoot+Mybatis实现的个人博客系统

博主刚刚学习完springboot等框架,因此此博客系统可能会有一些问题或者不完善,供大家学习交流使用gitee码云地址:https://gitee.com/sshdg/blog其中,前端使用的是李仁密教程中的样式:地址技术栈SpringBoot, Mybatis, PageHelper, Mysql, commonmarkThymeleaf, jQuery, editmd实现功能前台展示:分页查询、博客查询、根据分类查看博客、评论、归档后台管理:管理员登录、保存至草稿、发布博客、增删查改分

2020-09-03 11:57:03 1490 4

原创 Vue Element Ui + Springboot前后端分离 CRUD(增删查改)、分页查询 Demo

目录技术栈后端:前端:后端开发过程后端代码pom.xmlapplication.propertiesStudentController.javaStudentServiceImpl.javaStudentMapper.javaStudentMapper.xmlStudent.java前端开发过程前端代码src\components\HelloWorld.vuesrc\views\Home.vuesrc\App.vuesrc\main.jsvue.config.js最近两天刚刚学习完Springboot,决

2020-08-19 16:11:48 1504 1

原创 【Springboot 03】拦截器、logback、Thymeleaf

目录拦截器拦截器类配置文件类控制器类打jar包发布日志logbackThymeleaf关闭缓存简单使用标准表达式路径表达式循环条件判断内联文本文本内联JavaScript内联运算符Thymeleaf模板表达式基本对象拦截器拦截器类1、创建拦截器类,实现HandlerInterceptor接口package com.wm.interceptor;import com.wm.model.User;import org.springframework.web.servlet.HandlerInter

2020-08-19 14:35:16 268

原创 【Springboot 02】RESTFul风格接口、集成redis、集成dubbo

目录SpringMVC注解`@RestController``@GetMapping`RESTFul风格接口概述实现集成Redis依赖配置使用集成dubbo安装zookeeper创建接口工程接口类提供者依赖:配置文件:实现接口类:springboot启动类:消费者依赖:配置文件:调用服务层springboot启动类运行集成ssm-redis-dubbo搭建接口工程提供者依赖springboot配置文件插件dao接口mapper文件sercice实现类springboot启动类消费者依赖插件配置文件contr

2020-08-19 14:31:35 526

原创 【Springboot 01】配置文件properties yaml、集成Mybatis、Mybatis逆向工程

入门概述springboot项目打包的是jar包,因此它集成了tomcat,springboot项目有一个入口类,启动其中的main方法即可启动项目。所有代码必须写在入口类Application.java的同级或下级目录。springboot的maven pom文件的依赖中没有版本号,是因为其父工程代为管理依赖版本号。启动SpringBoot项目1、创建项目:选择依赖Web2、在Application.java所在目录下创建controller包,编写controller类package

2020-08-19 14:26:13 632

spring-jdbc-5.2.7.RELEASE.jar;JdbcTemplate

spring-jdbc-5.2.7.RELEASE.jar,JdbcTemplate所需要的jar包。

2020-07-02

空空如也

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

TA关注的人

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