自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 问答 (2)
  • 收藏
  • 关注

原创 Spring Cloud父子容器及容器的启动源码

接触过Spring Cloud都知道,服务启动的时候会先启动Spring Cloud容器加载bootstrap.yml的配置,然后再启动我们常说的Spring容器,那么为什么需要父子容器,父容器又是在什么地方进行创建的呢?@Override// ...省略前面前面的监听执行的时候会有一句apply方法执行。return;// 增加BootstrapMarkerConfiguration到资源中,我看这个是没有任何代码的类,具体不太清楚目的是何// 拿到Spring容器中的初始化器。

2023-10-08 14:32:31 211

原创 中间件中使用到的设计模式

本文记录阅读源码的过程中,了解/学习到中间件使用到的设计模式及具体运用的组件/功能点。

2023-10-01 23:35:42 796

原创 Spring @Transactional事务传播机制详解

## 总结本文讲解了Spring事务的七种传播机制,我们可以根据具体的类型,具体设置,避免事务的方法过于长,一个事务里面调用的库表越多,就越有可能造成死锁,所以我们要根据具体的需要拆分使用。

2023-04-09 23:10:56 3608

原创 Nacos1.x配置中心客户端长轮询原理

nacos1.x配置中心巧妙的长轮询设计

2023-01-23 17:25:36 2256 4

原创 Spring MVC请求执行全流程核心源码解析

本文对Spring MVC执行请求过程做了核心方法的讲解,只解释了一小部分源码。Spring MVC有九大组件,不同组件负责处理入参、结果、视图、异常等等,功能非常强大。

2022-12-07 17:28:37 401

原创 超详细Spring、SpringBoot所有扩展点整理

超详细总结归纳了Spring、Spring boot中的所有扩展点,让你面试无忧,同时对Spring框架理解更上一个台阶。

2022-10-04 15:20:15 2305

原创 Spring中@Condition底层实现原理

Condition注解帮助我们选择适当的bean进行注册,而不同的bean注册时候又有错综复杂的依赖关系,在SpringBoot中都帮我们很好解决了。

2022-09-14 23:29:46 538

原创 Spring中BeanPostProcessor的八个实现应用点

BeanPostProcessor及其子接口有很多扩展点,帮助我们在bean创建过程中去拓展和灵活创建。总结了在创建过程中四个接口共八个方法作用。

2022-08-29 00:27:27 1118

转载 分布式锁之主从架构数据同步异常问题

本文详细介绍了Redis分布式锁在非单点架构下的实现和提供的Redlock算法,内容很长很多,但仔细看完相信你有帮助,同时对一些复杂的段落进行了总结归纳,希望用最简洁解释告诉你原理

2022-08-12 12:06:56 647

原创 Grafana入门教程

Grafana入门讲解

2022-06-26 21:13:34 18584

原创 Nacos1.x服务注册底层原理

本文讲的是v1.x版本的nacos服务注册原理,2.0改成grpc调用了,本文用的是2.0的版本,深入剖析一下nacos在注册时一些巧妙的设计和数据结构的选择。源码流程1.任务添加到阻塞队列该接口是服务端接受注册的接口,服务注册就是通过该接口来实现的。 /** * Register new instance. * * @param request http request * @return 'ok' if success * @throws .

2022-05-26 16:51:15 452

原创 Spring Cloud微服务注册底层原理及封装

nacos我们都知道是微服务中用来做注册中心和配置中心的中间件,本文就来探讨一下nacos是如何将服务注册到注册中心。.

2022-04-13 17:09:39 351

原创 Jenkins钩子实现代码提交/合并时自动部署

之前讲过如何实现jenkins代码部署,但每次提交/合并后都需要点击部署按钮,手动部署较为不便,所以就多加了个钩子,自动触发,但要注意的是,代码最好写完整再一次性push。超详细教你用Jenkins实现自动化jar包部署1.jenkins钩子回调jenkins钩子作用,就是在当代码提交后,调用jenkins回调方法,让jenkins去构建部署。1.安装Jenkins插件本文演示在gitlab提交后的回调,github等其他可以下载相对应插件和配置对应的触发器即可。插件管理搜索 gitl.

2022-03-23 10:17:01 2481

原创 你知道Redis中的getbit、setbit的作用吗?

Redis常用的有五种数据结构,String、Hash、List、set、zset。而getbit和setbit则是String中特殊的获取数据方式。String底层数据是用二进制来存储的,而我们获取到的值就是通过二进制转换来的,而getBit就是直接获得某一位对应二进制的值。1.什么是偏移量在计算机里所有的数据都是以二进制的形式存储的,每一个非中文字符占一个字节(Byte),中文字符占两个字节,而一个字节又是占8bit。先在redis中设置一个k-v(key:foo value:bar)在.

2022-02-28 18:31:04 2477

原创 CopyOnWriteArrayList写时复制的原理

CopyOnWriteArrayList是一种写时复制的ArrayList,且是线程安全版本。有很多类似设计的数据结构,如CopyOnWriteArraySet。如果想了解具体原理剖析,请看第二章原理,为什么需要拷贝?拓展:CopyOnWriteArraySet线程安全的set,底层使用CopyOnWriteArrayListadd的时候调用addIfAbsent来保证元素无重复和一般set不同,像hashset、treeset底层都是调用相对应map来操作1. 简介CopyOnWrit

2022-01-26 11:30:53 742

原创 手写一个简易版的Spring框架

Spring框架很庞大和复杂,为了更好的理解其实现,尝试去模仿其功能手写一个简易版本,暂时只包括简略的几个功能,为了看情况更新。1. 包含功能@ComponentScan包体扫描@Autowire依赖注入@Scope单例实现BeanPostProcessor后置处理器InitializingBean初始化bean接口BeanNameAware名字资源设置BeanDefinition定义SingletonObjects单例池BeanDefinitionMap池基于注解配置的Appl.

2021-12-26 22:13:38 352

原创 Java源码中你不知道但经常写的超便捷工具类

1

2021-11-27 17:57:10 230

原创 超详细教你用Jenkins实现自动化jar包部署

这里就只演示单个项目的部署,如果是分布式项目或者在KubeSphere只需要将传统构建项目改成流水线即可,这边就简单实现一下拉取代码,maven打包,包体上传,重启jar包等。jenkins安装可以查看我的另一篇blog,里面用了docker安装,快捷而且比传统tomcat+war或者yum安装少了不少坑。注意:使用的maven是挂载进来的,下载maven:maven3.5.4,所以需要先在docker宿主机安装maven,并配置环境变量。1.jenkins入门配置1.获取初始密码打开jen.

2021-11-03 15:50:18 15003 7

原创 CompletableFuture异步任务编排用法和详解

在工作中,常常会调用多个服务或者方法去获取不同的数据,如果传统做法就是串行一个个获取,然后封装返回。我们可以尝试使用CompletableFuture,将多个操作交给异步线程执行,然后主线程等待最长任务完成,将所有结果一并返回即可。Future局限性当我们得到包含结果的Future时,我们可以使用get方法等待线程完成并获取返回值,但我们都知道future.get()是阻塞的方法,会一直等到线程执行完毕拿到返回值。我们可以看到FutureTask中的get方法,就是循环代码直到线程执行完成返回。 .

2021-10-31 01:06:04 1467

原创 Docker 常用指令使用和容器安装

写篇博客总结一下 docker基本指令和容器安装,做一个备忘和总结。Docker安装及使用1.安装docker安装文档:https://docs.docker.com/install/linux/docker-ce/centos/1.卸载系统之前的dockersudo yum remove docker \ docker-client \ docker-client-latest \ d.

2021-09-22 16:22:14 203

原创 超详细总结归纳一下常见十种排序算法

之前在学校学习数据结构的时候,学不太懂也没太认真学,最近找了个时间总结归纳后自己写了一下十种排序算法,用的是Java写的,暂时只适用于非负整数的排序,在关键代码上加了讲解注释,代码可能会存在bug,如有发现希望各位指教!1.冒泡排序最基本的排序算法,本质是从...

2021-08-22 22:29:56 222

原创 Spring Cloud分布式服务跟踪Sleuth组件

在一个大型的微服务项目中、各微服务间调用关系错综复杂,几乎每一个前端请求都会形成一条复杂的分布式服务调用链路, 在每条链路中任何一个依赖服务出现延迟过高或错误的时候都有可能引起请求最后的失败,所以我们需要一个全链路追踪器,这就sleuth的作用。1.快速入门首先我们引入两个基础的Spring Cloud工程,两个工程都注册到同样一个eureka注册中心,同时trace-1工程调用trace-2服务获取结果。1. 引入sleuth包<dependency> <groupid&.

2021-08-10 11:35:14 433

原创 Spring Cloud网关服务zuul过滤器作用

上文中得知,zuul核心用到就是过滤器模式,里面无论路由映射还是请求转发都需要使用到zuul过滤器。所以,过滤器可以说是Zuul实现API网关功能最为核心的部件,每一个进入Zuul的HTTP请求都会经过一系列的过滤器处理链得到请求响应并返回给客户端。1.过滤器接口在Spring Cloud Zuul中实现的过滤器接口ZuulFilter必须包含4个基本特征: 过滤类型、 执行顺序、执行条件、 具体操作。// 过滤类型 pre/post等String filterType();// 过滤器优先级.

2021-07-13 17:19:28 390

原创 Spring Cloud网关服务Zuul基本原理

在我们的系统中会有各种各样的微服务,当我们想要控制权限、限制登录,那么就需要在所有微服务中添加登录校验;因此就有了网关,网关顾名思义就是用来做调度和过滤的1.快速入门创建一个基础SpringBoot网关服务,引入zuul依赖<dependencies> <dependency> <groupid>org.springframework.cloud</groupid> <artifactId>spring-cloud-s.

2021-06-28 00:20:42 152

原创 Spring Cloud服务容错组件Hystrix断路器原理

Spring Cloud Hystrix是用于做微服务之间服务短路,服务限流,服务降级,服务容错等的组件,为了避免在庞大微服务系统中,因为某一服务依赖出现异常导致全盘崩溃的严重问题。1.快速入门@EnableCircuitBreaker@EnableDiscoveryClient @SpringBootApplication public class ConsumerApplication { @Bean @LoadBalanced RestTemplate restTemplat.

2021-06-13 00:08:57 351

原创 Spring Cloud微服务组件Ribbon之负载均衡源码分析

Spring Cloud Ribbon 是一个基于 HTTP 和 TCP 的客户端负载均衡工具,它基于 NetflixRibbon 实现。 通过 Spring Cloud 的封装, 可以让我们轻松地将面向服务的 REST 模板请求自动转换成客户端负载均衡的服务调用。1.Ribbon介绍通过Spring Cloud Ribbon的封装, 我们在微服务架构中使用客户端负载均衡调用非常简单, 只需要如下两步:服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务注册中心。服务.

2021-05-28 16:36:00 179

原创 总结最常见五种BlockingQueue特点

一、前言我们经常可以在很多地方看到BlockingQueue的声影,最常见的就是在线程池中使用各式的阻塞队列。在Java中,BlockingQueue是一个接口,它的实现类有ArrayBlockingQueue、DelayQueue、 LinkedBlockingQueue、PriorityBlockingQueue、SynchronousQueue等,它们的区别主要体现在存储结构上或对元素操作上的不同,但是对于take与put操作的原理,却是类似的。二、阻塞与非阻塞入队add(E e):

2021-05-04 22:42:03 867 1

原创 Java8新特性stream流处理

之前文章说了函数式编程,什么是流:Stream(流)是一个来自数据源的元素队列并支持聚合操作元素是特定类型的对象,形成一个队列。 Java中的Stream并不会存储元素,而是按需计算。数据源 流的来源。 可以是集合,数组,I/O channel, 产生器generator 等;聚合操作 类似SQL语句一样的操作, 比如filter, map, reduce, find, match, sorted等。和以前的Collection操作不同, Stream操作还有两个基础的特征;内部迭代: .

2021-04-23 14:22:54 198

原创 函数式接口-lambda,优雅开发代码

JDK中现在有很多Functional Interface这个特性用来代替我们传统的匿名内部类写法,传统我们使用实例化接口重写接口内对应的方法来帮助我们实现,但这种方法代码冗杂,而且也不好看。Button button = (Button) findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() { @Override public void

2021-04-07 14:29:38 148 1

原创 Java8新特性Optional - 消灭空指针异常

欢迎来我的博客参观,交流:https://endwas.cn前言:空指针异常在Java中的出现就好像死亡在你生命中一样,你无法避免也无法拒绝。不可否认null对象在编程上给我们带来很多便利,但在便捷的同时,要求开发人员仔细检查、校验。相信我们在写代码中的时候都写过无数个if xx = null …这种代码,这篇博客就是教你使用Optional代替没有营养的校验,然后开启你的函数式编程。空指针引用:价值十亿美元的错误我称之为我的十亿美元错误……当时,我正在设计第一个全面的类型系统,用于面向对象语

2021-03-30 17:31:50 217

原创 总结Java中IO流以及几种常见操作

欢迎来我的博客参观,交流:https://endwas.cnjava的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。在java中把不同的输入/输出源(键盘,文件,网络连接等)抽象表述为“流”(stream)。通过流的形式允许java程序使用相同的方式来访问不同的输入/输出源。stram是从起源(source)到接收的(sink)的有序数据。1.IO流IO流可以分为字符流、字节流两大类。字节流一个字节占8位(bit),字符流根据不同字符所占的字节不同而读取的大小不同,常见中文一个

2021-03-21 23:49:49 153

原创 详细分析Spring关键之一的Aop(AspectJ)模块

欢迎来我的博客参观,交流:https://endwas.cn1.Aop作用我们都知道Spring中最关键的两大特性:IOC和AOP两者相辅相成,成就现在的Spring框架;AOP叫面向切面编程,帮助我们在很多切入点进行增强、扩充操作,如果是传统我们就需要在所有类开头加上日志开始,末尾加上日志结束,这样不仅编程效率低下,浪费时间,代码冗余,维护也麻烦,万一有需求换方式记录日志,可不得改死;AOP我们可以使用在很多地方,如日志模块,权限控制,事务处理等;AOP的具体实现有两种方式JDK动态代理(

2021-03-14 00:04:08 305

原创 分析ArrayList扩容机制

转载自:白春雨(https://www.cnblogs.com/baichunyu/p/12965241.html)一、先从 ArrayList 的构造函数说起ArrayList有三种方式来初始化,这里讲最常用的无参数方法: /** * 默认初始容量大小 */ private static final int DEFAULT_CAPACITY = 10; private static final Object[] DEFAULTCAPACITY_EMPTY_EL

2021-02-15 18:36:49 236

原创 Java中集合类常见set、list(Queue)、map特性总结

Java中的集合类总共有三种:set、list(列表包含Queue)、mapCollection: Collection是集合List、Set、Queue的基本接口Iterator:迭代器,可以通过迭代器来遍历集合数据,同时使用这种方法不会造成数据越界异常,所以在遍历删除的时候务必使用。Map:是映射表的基础接口。集合框架List集合List集合实现方式排列顺序增删改查线程安全特点ArrayList底层使用数组排列有序,可重复速度快、增删慢线程不安全容

2021-02-12 18:10:29 385 3

原创 定时脚本备份服务器Mysql数据库表

我们平时的数据库为了避免误操作或者在迭代更新的时候都会对数据库进行备份,那么这边使用linux服务器自带的crontab定时脚本+linux shell脚本对我们博客的数据库进行备份。分享两个网站一个是crontab教程、一个是根据表达式推算执行时间。crontab 命令教程:https://www.runoob.com/linux/linux-comm-crontab.htmlcrontab 执行时间计算工具:https://tool.lu/crontab/编写脚本1.在服务器随便找个位置.

2021-02-06 01:00:02 256

原创 SpringSecurity认证、授权、会话原理分析

Spring Security所解决的问题就是安全访问控制,而安全访问控制功能其实就是对所有进入系统的请求进行拦截,校验每个请求是否能够访问它所期望的资源。可以通过Filter或AOP等技术来实现,SpringSecurity对Web资源的保护是靠Filter实现的,所以从这个Filter来入手,逐步深入Spring Security原理。

2021-02-01 12:53:42 586

原创 域名购买和网站备案心得

在上一篇部署云服务器的文章中,已经租用和部署好了服务器,那么就讲一下最麻烦的域名购买和备案。1.域名购买首先说一下域名购买,我是在腾讯云购买的,价格很便宜一年也就30左右,对比服务器价格便宜的多,所以建议大家可以入手三年起步,点击跳转购买购买付费后进入控制台。选择自己想要的域名,进行购买即可2.域名实名点击实名认证,输入自己的身份信息,拍一张身份证正面上传,一般一天就可以通过很便捷。通过后就会提示你,服务状态正常了,但这个时候你还是不能做域名备案,他需要你等待三个自然日。3.域名备案

2021-01-28 00:33:24 666

原创 手把手零经验教你线上部署云服务器

本文从服务器购买到,软件下载安装,环境配置,到项目部署运行,到域名购买和备案、最后到域名访问,手把手来讲述该springboot博客项目的部署

2021-01-21 14:12:11 1269

原创 博客管理页面所有功能展示

博客页面功能展示博客地址 :如果喜欢恳请Star!(符合条件也可以互加友链哦~)源码出处onestar,但大神的代码都是静态页面,所有请求协议都是未添加的,所以上传一份最新版的,所有的thymeleaf和js代码都是最新可运行的,直接按照协议名写后端代码即可~一、主页页面首页主要是一些文字描述和个人信息,如果你的显示屏分辨率比较高或者页面缩放的比较小的话,可以看到下面有最新推荐专栏二、分类页面显示分类名称,点击可以显示不同的分类文章三、时间轴采用两边分开的阶梯状按照时间顺序来展示

2021-01-14 17:31:50 1057 2

空空如也

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

TA关注的人

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