自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 记一次内存可见性的深刻感悟

很多同学都知道,volatile关键字是来保证内存可见性的。那如果变量没有被volatile修饰,它一定是不可见的么?我们来一探究竟。

2023-02-27 21:37:32 145 1

原创 异步神器-CompletableFuture

Jdk 1.8中,提供的CompletableFuture针对上文提到的FutureTask的缺点,对其进行了增强,提供了函数式编程(lambda表达式)、回调机制、链式编程等强大的功能。

2023-02-27 00:42:25 201

原创 Java多线程之FutrueTask

Java中创建线程有3种方式,前面2种很多人比较熟悉,继承Thread类或者实现Runnable接口,这2种适用于多线程无返回结果。如果多线程的执行有返回结果,推荐用FutureTask和Callable来创建多线程。

2023-02-25 22:11:58 330

原创 Mybatis之一级缓存二级缓存

缓存,就是将经常访问的数据,放到内存中,减少对数据库的访问,提高查询速度。Mybatis中也有缓存的概念,分为一级缓存和二级缓存。

2023-02-24 15:32:03 566

原创 Mysql之慢查询

慢查询,是指一条sql的执行时间超过10s;这里的10s可以配置,设置为你想要的时间长度。名称上是慢"查询",但不光是查询,也对增加、修改、删除起作用。下面我们来看下相关sql。

2023-02-22 16:38:10 284

原创 Spring aop之针对注解

接触过Spring的都知道,aop是其中重要的特性之一。笔者在开发做项目中,aop更多地是要和注解搭配:在某些方法上加上自定义注解,然后要对这些方法进行增强(很少用execution指定,哪些包下的哪些方法要增强)。那这时就要引出@annotation、@target、@within了。我们一一讲解。

2023-02-21 17:15:56 458

原创 Spring中bean的生命周期(通俗易懂)

bean的生命周期分4个阶段:1.实例化2.属性赋值3.初始化4.销毁

2023-02-20 13:18:03 750

原创 SpringBoot自动装配的原理

在开发SpringBoot项目时,当我们引入spring-boot-starter-xxx依赖后,想要使用依赖中的bean,直接就用@Autowired拿来用了,不需要用xml或者注解的方式把它先注入到Spring容器中。这就是自动装配的特性,本文来讲述SpringBoot是如何实现这一点的。

2023-02-19 16:48:17 361

原创 将bean注入Spring容器的五种方式

我们在项目开发中都用到Spring,知道对象是交由Spring去管理。那么将一个对象加入到Spring容器中,有几种方法呢,我们来总结一下。

2023-02-15 15:07:26 2252

原创 Redis哨兵模式下如何进行故障转移

Redis哨兵模式下分为数据节点和哨兵节点(不存储数据),前者至少一主一从,后者至少一个哨兵,所以总共至少三个节点。本文章讲述,当主节点发生故障时,哨兵节点将从节点转换为主节点的流程。

2023-02-12 16:41:20 858

原创 Maven解决jar包版本冲突的4种方法

先解释下maven的依赖传递:a jar包引入了b jar包,如果项目中引入了a jar包,其实也会把a依赖的b jar包引入。那现在有a、c这2个jar包,a jar包依赖的是1.0.0版本的b jar包,c jar包也依赖了b jar包,版本是2.0.0;如果项目中引入了a、c jar包,那b jar包到底引入哪个版本呢,是1.0.0还是2.0.0?这就是版本冲突,有4种方法可以解决。

2023-02-05 23:35:45 5013

原创 Maven的scope标签

Maven的scope标签、属性

2023-02-04 17:50:52 150

原创 JdbcTemplate-Spring中操作数据库

JdbcTemplate是Spring中对JDBC的封装,简化JDBC中比较繁琐的地方:加载数据库驱动、创建连接、释放连接、直接将返回结果映射到实体类等。这样后端开发们,只需更加关注于提供sql和获取结果,操作数据库更加节省高效。

2023-02-01 10:30:43 236

原创 Redis集群的3种方式

主从复制模式、哨兵模式、Cluster模式

2023-01-28 00:27:53 67

原创 Redis常用命令汇总

redis常用命令

2023-01-27 17:02:42 81

原创 Hutool-省时省力的工具类库

日常的业务开发,我们会重复编写一些代码:日期和字符串相互转换、发送Http请求调用接口、拷贝对象等。所以为了避免重复编写,项目中会封装好相关方法,我们直接调用。但这样是不是还是挺麻烦,封装的方法我们还是得想得编,还得想的面面俱到。其实大可不必这么麻烦,Hutool是一个绝佳的解决方法,它是一款开源的java语言编写的工具类库,上述说的、还有其余非常多的工具性质的方法,都已封装好,非常全,几乎可以满足所有的业务诉求。

2023-01-23 00:00:18 1473

原创 RedisTemplate-Spring中操作Redis

spring-data-redis提供了在Spring应用中通过简单的配置访问redis服务,封装了 RedisTemplate 对象来对Redis进行各种操作、异常处理及序列化,支持发布订阅。

2023-01-20 23:16:24 135

原创 Spring中Bean被注入的几种方式

1. @Autowired+属性,被注入 2. 通过构造方法,被注入3. 通过set方法,被注入4. 通过List属性,被注入5. 通过Map属性,被注入

2023-01-18 14:35:14 233

原创 面试官:Redisson超时了,任务没执行完怎么办

在单机环境下,使用锁我们可以用synchronized关键字和Lock。但如果是分布式环境下呢(即各个线程在不同的jvm中)?分布式锁的实现有很多,比如单节点的setnx命令;Redisson是官方提供给开发者的一套处理分布式锁的组件,宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中地放在处理业务逻辑上。

2023-01-08 22:45:01 762

原创 SpringCloud之Seata

Seata组件是Spring Cloud Alibaba提供的处理分布式事务的组件。那何为分布式事务呢?在微服务环境下,假设有3个服务,A、B、C服务,A的某个方法,方法逻辑是通过OpenFeign调用B服务的方法,再通过OpenFeign调用C服务的方法,最后再执行自身的业务逻辑,对数据库执行操作。那如果在对数据库执行操作时出现异常,此时要进行回滚,即调用B服务的方法和调用C服务的方法中,对数据库的操作,要进行回滚。如果没有分布式事务的介入,B、C服务对数据库的操作是无法回滚的。

2023-01-01 18:38:54 956

原创 SpringCloud之Sentinel(二)

,下面的子元素和ds1一样,只是有2个子元素的值要变,data-id和rule-type:data-id是你要在nacos中新建的配置名称,rule-type的值还可以是degrade(熔断规则)、param-flow(热点规则)、system(系统规则)。还有一个注意点是,资源名要设置成@SentinelResource的value值,设置成方法的请求路径:/user/byUrl,热点规则也会无效。nacos可以作为配置中心,Sentinel的持久化就是把各种规则保存到nacos的配置列表中。

2022-12-08 23:08:25 149

原创 SpringCloud之Sentinel(一)

  Sentinel组件承担了流量防卫兵的职责,主要用来限流与熔断。它提供了dashboard(仪表盘),让开发者能够可视化配置,简化操作。

2022-12-04 21:32:16 230

原创 SpringCloud之Gateway

Gateway是SpringCloud Alibaba中的路由组件(前身是Zuul),作为浏览器端请求的统一入口。当项目采用微服务模式时,若包含了路由模块,浏览器端的请求都不会直接请求含有业务逻辑的各个业务模块,而是请求这个路由模块,然后再由它来转发到各个业务模块去。

2022-11-27 19:03:47 7770

原创 SpringCloud之OpenFeign

在上面一篇介绍Nacos的文章最后,两个服务的相互调用是用的RestTemplate类完成的。但这种方式不是很推荐,更佳的方式是用OpenFeign组件去调用。OpenFeign是官方推出的服务调用和负载均衡组件,基于Ribbon和Hystrix,前身是第一代Spring Cloud的Feign,对Feign进行了扩展,支持了SpringMvc的相关注解。

2022-11-20 18:32:02 188

原创 SpringCloud之Nacos(手把手教你使用)

第一代SpringCloud即SpringCloud Netflix很多组件已经停止更新和维护了,迫使我们必须要找到一个可以代替Netflix的第二代产品,这时SpringCloud Alibaba出现了。Nacos是SpringCloud Alibaba的核心组件,它充当了配置中心 + 注册中心的角色。

2022-11-17 20:27:22 1843

原创 Java中的反射,反射是什么

Java程序员都知道,类中private修饰的字段、方法,只能在类内部使用;那真的没有办法在类外部使用private修饰的成员么?这时本篇的主角登场了:反射机制提供在运行时,对于任意一个类,都能够访问这个类的所有信息(构造函数、字段、方法等,也不管是public还是private修饰的)。在java中,编写的类都是.java结尾,编译后是以.class结尾。程序运行后,.class文件加载到jvm中,转换为Class对象。类可以有多个对象,但这个类对应的Class对象仅有一个。

2022-11-06 00:49:40 59

原创 设计模式-适配器模式

将一个接口(或者是类)转换成客户希望的接口(或者是类),使得原本因接口不匹配的两个类能够一起工作。比如我们日常生活中和电脑搭配使用的转接线。该模式又分为类适配器模式和对象适配器模式。

2022-10-23 00:00:55 69

原创 WebSocket实现消息推送

大部分的web开发者,开发的业务都是基于Http协议的:前端请求后端接口,携带参数,后端执行业务代码,再返回结果给前端。作者参与开发的项目,有一个报警推送的功能,服务端实时推送报警信息给浏览器端;还有像抖音里面,如果有人关注、回复你的评论时,抖音就会推送相关消息给你了,你就会收到一条消息。有些同学会说了,基于Http协议也能实现啊:前端定时访问后端(每隔3s或者几秒),后端返回消息数据,前端拿到后弹出消息。这种方式太low了,而且每个浏览器都这样,使用系统的人一多,服务器的压力就太大了些。

2022-10-17 00:19:48 6573

原创 手写雪花算法

这时雪花算法就可以派上用场了:它是由twitter(推特)公司推出,生成一个Long类型的数值。比如你的项目需要用更久时间,可以把记录时间戳的位数再多占几位,把5位机房id+5位机器id少占几位,只要保证总位数是64即可。41位:记录时间戳(生成时刻与初始时间相差的毫秒数),能用大概69年(2^41/1000/60/60/24/365)(注:你要把位运算符>>、&、|等弄明白,不然代码会看得一知半解)10位:5位机房id+5位机器id或10位机器id。1位:标志位,一般是固定的0。

2022-10-10 20:19:47 303

原创 mysql插入-更新、替换、忽略

mysql中,正常的插入语句大部分程序员都会写;今天讲解3种"变异"版的。

2022-10-06 14:41:56 1001

原创 xxl-job的讲解及使用

之前有段时间公司任务不多,领导牵头开了一个技术沙龙,一个同事就分享介绍了xxl-job;作者最近回头查阅了相关资料,在此把知识点整理出来。xxl-job,是一款分布式轻量级的任务调度框架。它的命名也是根据它的作者:许雪里,拼音首字母而来。其核心设计目标是开发迅速、学习简单、轻量级、易扩展。当项目中碰到定时任务、批量数据处理时,技术选型可以考虑用它。

2022-10-04 22:23:20 4034

原创 SpringBoot整合Kafka示例使用

作者之前接触过消息中间件,如RocketMq;最近工作中项目使用到了Kafka,机制和RocketMq相似,这里把代码、心得总结给贴出来。

2022-09-27 13:11:14 1190

原创 设计模式-建造者模式

将一个复杂对象的构造与表示分离,意思是使用同样的构造过程可以创建不同的表示。

2022-09-04 17:30:39 120

原创 设计模式-组合模式

该模式的目的是系统对单个对象和多个对象的使用,具有一致性。比如我们的电脑上,有文件和文件夹(多个对象),新增、删除、修改它们用相同的操作,还有像树形菜单。这样客户端无需辨别到底是单个对象还是多个对象,可以直接操作,给客户带来便利。抽象节点角色:通常是一个抽象类,声明以下2个角色的公共行为操作树枝节点角色:继承抽象节点角色,实现抽象节点声明的方法。该角色会存储子元素(叶子节点或树枝节点),通常有add()、remove()、getChild()方法来管理子元素。

2022-09-03 16:18:47 101

原创 设计模式-装饰模式

在不改变现有对象结构以及不使用继承的情况下,给对象扩展功能。它是通过创建装饰对象,然后包裹目标对象的方式来完成。基类角色:被装饰者角色和装饰者角色共同的父类,通常是一个抽象类被装饰者角色:继承基类,通过装饰者增强抽象装饰者角色:继承基类,并包含一个被装饰者的实例具体装饰者角色:继承抽象装饰者,重写方法,方法内部使用被装饰者实例和额外的代码来实现增强。...

2022-08-31 13:56:34 46

原创 设计模式-桥接模式

我们在日常生活中会遇到这样的场景:去西餐厅点牛排时,服务员会问你要眼肉、西冷还是菲力(部位),然后有时还会问其他维度的:要日本和牛、澳洲和牛还是澳洲安格斯牛。在软件开发中,我们也会碰到这种场景:类的变化维度有多个,如果用继承的方法去实现,会有类爆炸的问题,这时桥接模式就是来解决这类问题。具体抽象化角色:抽象化角色的具体实现,该维度有几种变化就对应有几个具体的具体抽象化角色。具体实现化角色:实现化角色的具体实现,该维度有几种变化,就有几个具体实现化类。实现化角色:是一接口,代表某一种维度。...

2022-08-28 16:40:17 118

原创 设计模式-责任链模式

抽象处理者角色:一个处理请求的接口,包含一个抽象处理方法和一个后继属性具体处理者角色:实现抽象处理者角色定义的接口,处理方法实现为:判断能否处理该请求,能处理就处理,不能处理则转给后继属性客户端角色:创建责任链,并向链首的具体处理者对象提交请求。

2022-08-21 22:14:54 77

原创 设计模式-享元模式

系统要使用大量对象,但它们有很高的相似性,只有少量状态不同,这时我们就可以利用享元模式:将创建的对象数量大大的缩减,提高对象的复用性,减少资源占用。具体享元角色:实现抽象享元角色规定的接口(也可能是抽象类),定义内部状态,不能从客户端设置,并且内部状态唯一。抽象享元角色:定义操作方法,一般会明确指定参数,用来设置外部状态。享元工厂角色:用来创建、管理具体享元角色的实例,向客户端提供实例。缺点:分离出内、外部状态,关注线程安全问题,并且程序逻辑变得复杂。优点:减少了对象的创建,降低了内存的占用。

2022-08-20 23:56:27 167

原创 设计模式-备忘录模式

人如其名,该模式是保存对象的某个状态,以便在适当的时候恢复对象(有点像"后悔药")。适用场景:撤销操作:如在Wps中编写文档,使用CTRL + Z恢复到上一步的内容状态恢复:如在游戏中的存档、恢复存档。...

2022-08-14 23:19:31 91

原创 设计模式-外观模式

在某个系统下,如果子模块比较多,而且内部的细节也比较多,这时调用这些子模块就会比较麻烦。这时外观模式就应运而生,系统会提供一个外观者,由它来调用各个子模块的各个步骤,而使用者去调用外观者的方法就可。将一个家庭影院映射到编程中,家庭影院有爆米花机、屏幕、投影仪、DVD播放器(各个子模块);外观者:为调用者提供封装好的接口,屏蔽子模块的细节,接口内部请求各个子模块的方法。1.对外屏蔽了子模块的细节,因此降低了客户端对子模块使用的复杂性。子模块:处理外观者指派的任务,它是功能的实际提供者。...

2022-08-14 00:47:00 94

WindowsFormsApplication2

是c#课程中作业的一项任务,有了它,应付老师不用愁了

2015-07-06

空空如也

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

TA关注的人

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