自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mybatis源码解读

MyBatis是我们工作中常见的ORM持久层框架,对于MyBatis并不能仅仅局限于会使用的阶段,更需要了解它的工作原理,想要了解原理,源码是必须要读的,这篇文章是我个人在阅读MyBatis的源码过程中的一些简单的总结,MyBatis的流程大体上可以分为一下几步:加载配置文件 --> 创建SqlSessionFactory --> 创建SqlSession --> 执行SQL语句 --> 返回结果。这段代码是一个整体的过程展示,下面对这些步骤进行逐步拆解。

2024-06-11 15:23:51 1039 1

原创 Redisson分布式锁加锁源码分析

Redisson是分布式架构中常见的分布式锁的一种实现形式,在使用的过程中,一般有两种方式,一中是带过期时间的,另一种是不带过去时间的,以及对应的源码的处理上到底有什么差异呢?虽然源码分析中是在使用方式一的流程中讲到了看门狗机制,但是过期时间填了具体的值,而不是填 -1,例如30秒,这种情况下是不会触发看门狗机制的,参考2.3处的源码。如果你上锁时间填了具体的时间,例如过期时间填了30秒这样,是不会触发看门狗机制的,这点需要特别注意,要出发看门狗机制,又想填过期时间,可以填 -1。

2023-07-17 15:25:50 392

原创 Docker搭建单点Redis

Docker搭建单点Redis

2022-07-17 18:09:11 516 1

原创 Docker安装单点Nacos并配置MySql

docker安装单点Nacos,配置MySql 8.0.29存储

2022-07-17 10:59:24 888

原创 Java设计模式之责任链模式

Java设计模式之责任链模式

2022-07-10 23:23:48 401

原创 Java设计模式之模板方法模式

Java设计模式之模板方法模式

2022-07-10 22:53:38 205

原创 Java设计模式之代理模式

Java设计模式之代理模式

2022-07-09 17:47:00 321

原创 Java设计模式之装饰器模式

Java设计模式之装饰器模式

2022-07-09 10:10:32 143

原创 Java设计模式之单例模式

Java设计模式之单例模式

2022-07-07 00:34:57 148

原创 Java设计模式之建造者模式

Java设计模式之建造者模式

2022-07-06 21:39:01 158

原创 Java设计模式之工厂方法模式和抽象工厂模式

Java设计模式之工厂方法模式与抽象工厂模式学习分享

2022-07-05 21:56:40 428

原创 ReentrantLock的源码阅读

ReentrantLock的源码阅读

2022-07-02 17:51:28 113

原创 线程池ThreadPoolExecutor源码解析

线程池ThreadPoolExecutor源码阅读

2022-06-26 17:13:53 293

原创 线程以及线程池的学习与使用

线程以及线程池的学习与使用

2022-06-19 11:03:26 237

原创 Spring Boot整合RabbitMQ之主题模式(Topic)

Spring Boot整合RabbitMQ之主题模式(Topic)

2022-06-12 17:49:51 2591

原创 Spring Boot整合RabbitMQ之注解实现路由模式(Direct)

Spring Boot整合RabbitMQ之注解实现路由模式(Direct)

2022-06-11 13:17:22 443

原创 Spring Boot整合RabbitMQ之路由模式(Direct)

Spring Boot整合RabbitMQ之路由模式(Direct模式)

2022-06-11 00:04:09 1843

原创 Spring Boot整合RabbitMQ之发布与订阅模式(fanout)

Spring Boot整合RabbitMQ之发布与订阅模式

2022-06-09 22:52:04 3033

原创 使用Java体验RabbitMQ消息的发送与消费过程

Java体验rabbitmq的消息发送和消费的过程!

2022-06-05 17:18:05 3380

原创 Docker镜像的理解

通过学习,我们知道镜像是docker的基础,你想搭建各种复杂的容器环境,镜像是必不可少的。所以我们应该对镜像有更多的一些了解,我们之前知道了,容器是镜像通过run命令得到的,镜像通过pull拉取等等。但是镜像是什么我们并不很清楚。1. Docker镜像是什么?Docker镜像是一种轻量级、可执行(run命令执行)的独立的软件包,镜像包含了软件运行所需的所有内容,例如把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这...

2022-05-20 11:50:43 1173

原创 Docker容器命令汇总

1. 启动容器启动容器命令语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]一般除了测试docker是否启动成功会直接使用docker run 镜像名,其他情况一般都是需要启动交互式容器。启动交互式容器的理解是:启动容器后,进入容器进行其他的操作,命令语法:docker run -it[it:交互式启动] --name=myUbuntu[定义容器名称] ubuntu /bin/bash[root@VM-4-16-centos ~]# docke

2022-05-15 11:55:26 4253

原创 Docker镜像命令汇总

Docker中有三个基本概念,分别是镜像,容器,仓库,容器是镜像创建出来的,所以镜像的命令很重要,不会镜像命令,无法创建容器。本文是常用的镜像命令的汇总。1. docker images命令该命令用于列出本地主机上的镜像,详情如下:[root@VM-4-16-centos ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest feb5d9fea6a

2022-05-14 16:28:46 3495

原创 Docker的帮助启动类命令

该类命令主要用于docker容器的启动,停止,重启等。命令的详细如下:# 检查docker的运行情况 docker在运行[root@VM-4-16-centos ~]# ps -ef | grep dockerroot 5144 19987 0 15:19 pts/0 00:00:00 grep --color=auto dockerroot 6639 1 0 11:44 ? 00:00:01 /usr/bin/dockerd -H fd://

2022-05-14 15:34:53 810

原创 Centos 7.6安装Docker

我是在腾讯云轻量服务器上安装的,参考的是docker的官网的教程,链接:Install Docker Engine on CentOS | Docker DocumentationInstructions for installing Docker Engine on CentOShttps://docs.docker.com/engine/install/centos/其中需要注意的是不能使用官方的镜像源,命令中的sudo是以管理员运行命令。安装过程如下:1. 卸载docker的旧版本[ro

2022-05-14 11:28:21 720

原创 Linux安全加固之修改SSH登录端口

Linux的默认登录端口是22,这种默认端口往往本身就存在一定的风险,为了加固Linux的安全性,可以通过修改SSH的默认登录端口来实现,操作比较简单,只要三步就行1. 修改配置文件使用命令进入配置文件编辑页面[root@VM-4-16-centos ~]# vim /etc/ssh/sshd_config2. 修改port# $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $# This i...

2022-05-13 18:39:53 521

原创 Docker的基础概念

从本篇博客开始,进行目前很火的容器化技术docker的学习。记录下我在学习过程中的一些思考和总结。对于docker,由于我是一个小白,所以更多的是以一个小白的视角来理解和学习docker。有不足的地方,欢迎大神指导。1. docker的优势在网上看了一些docker的资料,讲了很多docker的优势,大体上有一下几个方面更高效的利用系统资源,是因为docker是基于宿主机linux内核运行的,docker本身是没有,这样的docker很轻,占据的资源很少 更快速的启动时间,这个我的理解是由于d

2022-05-13 14:30:08 351

原创 Spring三级缓存处理循环依赖源码解读

上一篇文章进行了spring三级缓存在源码中使用的简要概括,因为没有实际类的举例,阅读起来有点绕。本篇博客是我自己在阅读spring源码过程中,对三级缓存是如何处理循环依赖问题的细节理解。一方面希望对你有所帮助,另一方面也是对自己阅读源码的一个完整的总结过程。话不多说,进入正题。1. 准备工作准备工作比较简单,准备两个类,然后类中相互引入作为对方的属性,在spring配置文件中注入,然后通过ClassPathXmlApplicationContext读取spring的...

2022-05-12 16:01:57 417

原创 Spring使用三级缓存解决Bean的循环依赖流程简括

前面的几篇博客,更多的关注点是bean的创建过程的一些理解梳理,更多的属于基础部分,在实际开发中,业务类不大可能是单独存在,极大可能需要类之间相互引用,这就会导致循环依赖问题,循环依赖我相信大家都听过,spring也有考虑到这个问题,并给出了解决方案,就是通过使用三级缓存来处理,三级缓存,实际上就是DefaultSingletonBeanRegistry类中的三个Map集合,对应的Map集合源码如下://一级缓存private final Map<String, Object&...

2022-05-11 23:13:25 189

原创 Spring创建Bean过程简要总结

经过了前面两个大篇幅的对spring源码的大致梳理,大致上可以总结出spring创建bean的一些关键逻辑。本文是对之前文章的一个简要的总结,并不是spring创建bean的完整过程,我大致梳理流程如下:创建ClassPathXmlApplicationContext对象,传入spring配置文件 在ClassPathXmlApplicationContext的构造方法中调用refresh()方法 refresh()方法中有两个重要步骤, 一个是创建BeanFactory的逻辑,调...

2022-05-10 11:06:05 260

原创 Spring中BeanDefinition的探索

在之前探索创建Bean的过程中,我们看到一个出现很频繁的类,RootBeanDefinition。该类中存储了一个bean的所有信息,后续创建Bean对象就是根据一个bean的BeanDefinition,然后通过反射创建的。该类的类关系图如下:从图中可知,RootBeanDefinition是BeanDefinition的一个实现类。既然后续创建需要用到RootBeanDefinition,那么肯定在使用之前就得创建出来才行。我们本文就来探究一下RootBeanDefinition...

2022-05-08 00:44:50 201

原创 Spring获取Bean的过程探索

上一篇Spring创建Bean我们知道了,Spring创建Bean后,会将Bean存放在容器的singletonObjects中,那么获取一个bean的过程又是如何呢?我们还是使用之前用到的debug断点调试法来探究一下。1. 获取Bean源码阅读我们知道,Spring中获取一个Bean是使用getBean(beanName)来获取,那么我们来跟踪getBean(beanName)的源码,看看获取bean的逻辑,getBean(beanName)的源码如下:public Obj...

2022-05-04 09:54:35 289

原创 探索Spring创建Bean过程

Spring对于Java程序员来说,是必须要掌握的一个框架。工作中我们基本上也是使用spring来进行日常的开发。却对项目中的bean创建过程并不是很了解。我自己就属于这种情况。也在网上看过很多的视频,但是都没有将看过的知识点进行总结。导致对于源码总是一知半解的状态。本篇文章用来记录我在探索spring创建bean的源码总结。1. 准备工作阅读源码,个人觉得最好的方法是DEBUG断点调试法,一步一步的看下去,最终找到自己想要的知识,在DEBUG之前就需要准备一个spr...

2022-05-03 19:27:11 689

原创 Spring Security简单理解

最近在学习Spring Security,于是就写了这篇Spring Security的博客来记录自己的学习中的一些总结,本文主要是一些简单的原理分析,没有涉及很深的源码分析。1. Spring Security初体验未引入Spring Security前请求接口情况,接口可以随意定义一个controller测试引入Spring Security后,接口的请求情况如果使用浏览器模拟访问更加明显,会跳到一个登录页面,效果如下:然后输入默认的用户名和密码,默认的...

2022-05-02 22:33:56 1691

原创 JWT的总结与使用

1. JWT的结构jwt由三段组成,通过 . 来连接,表现为:xxx.yyy.zzzxxx:表示标头yyy:表示有效载荷zzz:签名标头Header:{ "alg":"HS256", # 加密算法 "typ":"JWT" # 类型}有效载荷Payload:用来存储一些常用数据,例如用户id等等信息。例如:{ "userId":"1", # 用户id "userName":"" # 用户名称 ......}签名:使用Hea

2022-04-27 22:39:39 743

原创 Redis集群环境搭建

Redis往往是项目中非常重要的一环,Redis的宕机对服务会产生可怕的影响。所以在一开始搭建Redis的时候,往往会选择对Redis进行集群部署。本人搭建的Redis集群环境是一主二从,一共3个Redis实例。但是为了防止主节点宕机导致Redis无法写的情况,我们使用哨兵模式来预防,以下是我搭建过程的记录。1. Redis集群环境一主二从的搭建...

2022-04-24 22:51:51 899

原创 Redis常用命令之Sorted Set类型

Sorted Set是Redis的有序集合,有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。有序集合的成员是唯一的,但分数(score)却可以重复。相同的元素,score会更新为最新的值。集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。常见命令如下:127.0.0.1:6597> zadd points 0 zhangsan # 向...

2022-04-23 18:00:04 979

原创 Redis常用命令之Set类型

Redis的Set是string类型的无序集合,集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是O(1)。常用命令如下:127.0.0.1:6597> sadd class zhangsan # 向集合中添加元素(integer) 1127.0.0.1:6597> sadd class lisi(integer) 1127.0.0.1:6597> sadd class wangwu(i...

2022-04-23 17:29:37 1324

原创 Redis缓存的三大问题以及处理方案

我们日常开发过程中,或多或少都是使用到缓存,通过缓存来实现提升接口响应速度。其中使用Redis作为缓存组件是最常见的技术选型,使用Redis优势很多,但是其存在过程中常见三大问题:缓存穿透,缓存击穿,缓存雪崩,我们也需要有所掌握,并且需要知道怎么解决。1. 缓存穿透缓存穿透是指前端请求到达后端服务器后,先从Redis缓存中查询,没有查询到结果,然后查询数据库,数据库查询不到数据则不进行数据缓存。流程图示如下这种在代码逻辑上会先查询Redis,再查数据库。...

2022-04-22 15:33:37 1791

原创 布隆过滤器的原理与实现

前几天看视频,无意中看到一个Redis缓存会存在三大问题,分别是缓存穿透,缓存击穿,缓存雪崩。在处理缓存穿透的时候,介绍了两种方案,推荐使用布隆过滤器,还有一个是Redis中缓存null。之前只是有听过布隆过滤器,但是对其原理和特点,使用场景并不熟悉。于是网上查阅了挺多资料。总结成为自己看得懂的一篇个人对于布隆过滤器的理解文章。布隆过滤器,英文 Bloom Filter。简单理解是一个叫布隆的人开发的一个过滤器,过滤器我的理解就是为了进行逻辑上的过滤校验。布隆过滤器是一个...

2022-04-21 00:31:35 1584

原创 Redis常用命令之List类型

redis操作列表List的命令。Redis列表是字符串列表,按照插入的顺序排序,可以在列表的头部(左边)或者尾部(右边)添加元素127.0.0.1:6597> lpush myfriend zhangsan # 将值插入到列表的头部(integer) 1127.0.0.1:6597> lpush myfriend lisi # 将值插入到列表的头部,此时列表变成:lisi,zhangsan(integer) 2127.0.0.1:6597> lpop myfriend #

2022-04-19 16:48:33 286

空空如也

空空如也

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

TA关注的人

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