- 博客(49)
- 收藏
- 关注
原创 Mybatis源码解读
MyBatis是我们工作中常见的ORM持久层框架,对于MyBatis并不能仅仅局限于会使用的阶段,更需要了解它的工作原理,想要了解原理,源码是必须要读的,这篇文章是我个人在阅读MyBatis的源码过程中的一些简单的总结,MyBatis的流程大体上可以分为一下几步:加载配置文件 --> 创建SqlSessionFactory --> 创建SqlSession --> 执行SQL语句 --> 返回结果。这段代码是一个整体的过程展示,下面对这些步骤进行逐步拆解。
2024-06-11 15:23:51
1212
1
原创 Redisson分布式锁加锁源码分析
Redisson是分布式架构中常见的分布式锁的一种实现形式,在使用的过程中,一般有两种方式,一中是带过期时间的,另一种是不带过去时间的,以及对应的源码的处理上到底有什么差异呢?虽然源码分析中是在使用方式一的流程中讲到了看门狗机制,但是过期时间填了具体的值,而不是填 -1,例如30秒,这种情况下是不会触发看门狗机制的,参考2.3处的源码。如果你上锁时间填了具体的时间,例如过期时间填了30秒这样,是不会触发看门狗机制的,这点需要特别注意,要出发看门狗机制,又想填过期时间,可以填 -1。
2023-07-17 15:25:50
501
原创 Spring Boot整合RabbitMQ之注解实现路由模式(Direct)
Spring Boot整合RabbitMQ之注解实现路由模式(Direct)
2022-06-11 13:17:22
740
原创 Docker镜像的理解
通过学习,我们知道镜像是docker的基础,你想搭建各种复杂的容器环境,镜像是必不可少的。所以我们应该对镜像有更多的一些了解,我们之前知道了,容器是镜像通过run命令得到的,镜像通过pull拉取等等。但是镜像是什么我们并不很清楚。1. Docker镜像是什么?Docker镜像是一种轻量级、可执行(run命令执行)的独立的软件包,镜像包含了软件运行所需的所有内容,例如把应用程序和配置依赖打包好形成一个可交付的运行环境(包括代码、运行时需要的库、环境变量和配置文件等),这...
2022-05-20 11:50:43
1362
原创 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
4357
原创 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
3583
原创 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
877
原创 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
920
原创 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
576
原创 Docker的基础概念
从本篇博客开始,进行目前很火的容器化技术docker的学习。记录下我在学习过程中的一些思考和总结。对于docker,由于我是一个小白,所以更多的是以一个小白的视角来理解和学习docker。有不足的地方,欢迎大神指导。1. docker的优势在网上看了一些docker的资料,讲了很多docker的优势,大体上有一下几个方面更高效的利用系统资源,是因为docker是基于宿主机linux内核运行的,docker本身是没有,这样的docker很轻,占据的资源很少 更快速的启动时间,这个我的理解是由于d
2022-05-13 14:30:08
411
原创 Spring三级缓存处理循环依赖源码解读
上一篇文章进行了spring三级缓存在源码中使用的简要概括,因为没有实际类的举例,阅读起来有点绕。本篇博客是我自己在阅读spring源码过程中,对三级缓存是如何处理循环依赖问题的细节理解。一方面希望对你有所帮助,另一方面也是对自己阅读源码的一个完整的总结过程。话不多说,进入正题。1. 准备工作准备工作比较简单,准备两个类,然后类中相互引入作为对方的属性,在spring配置文件中注入,然后通过ClassPathXmlApplicationContext读取spring的...
2022-05-12 16:01:57
491
原创 Spring使用三级缓存解决Bean的循环依赖流程简括
前面的几篇博客,更多的关注点是bean的创建过程的一些理解梳理,更多的属于基础部分,在实际开发中,业务类不大可能是单独存在,极大可能需要类之间相互引用,这就会导致循环依赖问题,循环依赖我相信大家都听过,spring也有考虑到这个问题,并给出了解决方案,就是通过使用三级缓存来处理,三级缓存,实际上就是DefaultSingletonBeanRegistry类中的三个Map集合,对应的Map集合源码如下://一级缓存private final Map<String, Object&...
2022-05-11 23:13:25
222
原创 Spring创建Bean过程简要总结
经过了前面两个大篇幅的对spring源码的大致梳理,大致上可以总结出spring创建bean的一些关键逻辑。本文是对之前文章的一个简要的总结,并不是spring创建bean的完整过程,我大致梳理流程如下:创建ClassPathXmlApplicationContext对象,传入spring配置文件 在ClassPathXmlApplicationContext的构造方法中调用refresh()方法 refresh()方法中有两个重要步骤, 一个是创建BeanFactory的逻辑,调...
2022-05-10 11:06:05
310
原创 Spring中BeanDefinition的探索
在之前探索创建Bean的过程中,我们看到一个出现很频繁的类,RootBeanDefinition。该类中存储了一个bean的所有信息,后续创建Bean对象就是根据一个bean的BeanDefinition,然后通过反射创建的。该类的类关系图如下:从图中可知,RootBeanDefinition是BeanDefinition的一个实现类。既然后续创建需要用到RootBeanDefinition,那么肯定在使用之前就得创建出来才行。我们本文就来探究一下RootBeanDefinition...
2022-05-08 00:44:50
262
原创 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
329
原创 探索Spring创建Bean过程
Spring对于Java程序员来说,是必须要掌握的一个框架。工作中我们基本上也是使用spring来进行日常的开发。却对项目中的bean创建过程并不是很了解。我自己就属于这种情况。也在网上看过很多的视频,但是都没有将看过的知识点进行总结。导致对于源码总是一知半解的状态。本篇文章用来记录我在探索spring创建bean的源码总结。1. 准备工作阅读源码,个人觉得最好的方法是DEBUG断点调试法,一步一步的看下去,最终找到自己想要的知识,在DEBUG之前就需要准备一个spr...
2022-05-03 19:27:11
735
原创 Spring Security简单理解
最近在学习Spring Security,于是就写了这篇Spring Security的博客来记录自己的学习中的一些总结,本文主要是一些简单的原理分析,没有涉及很深的源码分析。1. Spring Security初体验未引入Spring Security前请求接口情况,接口可以随意定义一个controller测试引入Spring Security后,接口的请求情况如果使用浏览器模拟访问更加明显,会跳到一个登录页面,效果如下:然后输入默认的用户名和密码,默认的...
2022-05-02 22:33:56
1782
原创 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
815
原创 Redis集群环境搭建
Redis往往是项目中非常重要的一环,Redis的宕机对服务会产生可怕的影响。所以在一开始搭建Redis的时候,往往会选择对Redis进行集群部署。本人搭建的Redis集群环境是一主二从,一共3个Redis实例。但是为了防止主节点宕机导致Redis无法写的情况,我们使用哨兵模式来预防,以下是我搭建过程的记录。1. Redis集群环境一主二从的搭建...
2022-04-24 22:51:51
978
原创 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
1031
原创 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
1367
原创 Redis缓存的三大问题以及处理方案
我们日常开发过程中,或多或少都是使用到缓存,通过缓存来实现提升接口响应速度。其中使用Redis作为缓存组件是最常见的技术选型,使用Redis优势很多,但是其存在过程中常见三大问题:缓存穿透,缓存击穿,缓存雪崩,我们也需要有所掌握,并且需要知道怎么解决。1. 缓存穿透缓存穿透是指前端请求到达后端服务器后,先从Redis缓存中查询,没有查询到结果,然后查询数据库,数据库查询不到数据则不进行数据缓存。流程图示如下这种在代码逻辑上会先查询Redis,再查数据库。...
2022-04-22 15:33:37
1887
原创 布隆过滤器的原理与实现
前几天看视频,无意中看到一个Redis缓存会存在三大问题,分别是缓存穿透,缓存击穿,缓存雪崩。在处理缓存穿透的时候,介绍了两种方案,推荐使用布隆过滤器,还有一个是Redis中缓存null。之前只是有听过布隆过滤器,但是对其原理和特点,使用场景并不熟悉。于是网上查阅了挺多资料。总结成为自己看得懂的一篇个人对于布隆过滤器的理解文章。布隆过滤器,英文 Bloom Filter。简单理解是一个叫布隆的人开发的一个过滤器,过滤器我的理解就是为了进行逻辑上的过滤校验。布隆过滤器是一个...
2022-04-21 00:31:35
1684
原创 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
338
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人