自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 docker打包部署自己的应用

当谈及使用 Docker 进行容器化部署应用时,可以想象它是一个能够将整个应用程序及其所有依赖项打包成一个独立、可移植的容器的工具。这个容器不仅包含了应用代码,还包括了操作系统、运行时环境以及所有依赖的库和组件。这样一来,开发者就能够确保应用在任何环境中都能以一致的方式运行,而无需担心环境差异可能带来的问题。

2024-04-21 12:35:32 877

原创 自定义多数据源

为了提升服务性能,减少数据库的压力,可以通过读写分离的操作,来提高数据写入和查询的速度,如何将SQL的执行对应不同的数据库,接下来由我来详细描述自定义多数据源的实现方案

2024-04-14 19:17:13 450

原创 docker 部署nacos

借助docker部署nacos,实现微服务的注册与发现

2024-03-11 22:12:15 531 1

原创 docker 安装jdk

手把手教学,如何在linux环境下,借助dokcer安装部署和启动jdk

2023-05-27 09:32:41 5445 6

原创 spring源码整合mybatis原理详细步骤

Spring源码整合mybatis的详细步骤

2023-05-05 21:07:02 505

原创 Spring之循环依赖

Spring循环依赖产生的原因,以及如何解决。

2023-04-15 20:58:39 747

原创 Spring之寻找注入点详解

Spring在属性填充过程中,需要判断属性和方法是否为一个注入点,然后根据注入点找到对象赋值或者创建Bean进行赋值。

2023-04-08 21:58:43 1087

原创 Spring之属性填充

在开发中,如果需要将某个属性自动注入,一般是在这个属性上面添加@Autowired注解,这个使用是很方便,但是除了这种方式,还有很多方式可以注入属性,我将通过以下文章来详细描述Spring如何将不同情况的方式给属性赋值

2023-04-05 14:54:13 535

原创 Spring销毁Bean流程

通常来说,开发人员一般是不会定义Bean的销毁方法,但是作为一个开发,还是需要了解Bean的销毁过程

2023-04-03 23:05:09 1071

原创 Spring之Bean的获取过程

Spring创建Bean是一个复杂的过程,文章中主要介绍了大部分重要的过程,通过看Spring源码,能够很好的理解Spring的执行流程,方便以后工作对有疑问的地方进行排查。

2023-04-02 10:29:19 717

原创 Spring源码扫描逻辑

通过Spring源码,详细了解Spring如何将我们定义的Bean扫描出来

2023-03-29 22:09:07 255

原创 使用docker安装mysql

在docker下面安装mysql的完整步骤。

2023-03-13 22:41:07 161

原创 Filter与Interceptor的区别

spring中拦截器的实现,与过滤器的对比

2022-11-14 15:54:27 87

原创 Random与ThreadLocalRandom对比

例如:在实际工作中,需要借助java中已有的工具类生成随机数,像最常用的Random类,里面就有对应整型,长整型和浮点型等生成的方法。但在JDK7之后,在JUC包下有新增了一种ThreadLocalRandom类用来生成随机数。TheadLocalRandom使用了ThreadLocal的原理,让每一个线程都只有本地种子变量,该种子变量只有在使用随机数时才会被初始化。在多线程下计算新种子时是根据自己线程内维护的种子变量进行更新从而避免竞争。

2022-10-22 11:18:47 324

原创 【设计模式】之【建造者模式】

使用建造者模式能够很好的将对象的创建变得优美,尤其是在对象属性较为多的情况下。除了以上的情况,加入需要对某个对象的参数进行校验时,使用构造者模式也非常实用,在每一个设置属性的同时,根据实际情况进行判断,保证得到的是自己需要的属性,特别是在对判空尤为体现。抽象工厂模式。

2022-09-17 11:14:41 150

原创 【设计模式】之【抽象工厂模式】

假如我们需要定义一系列的规范,具体的实现由不同的使用去实现。例如:连接数据库,对应jdk来说,定义连接协议,执行命令协议等,具体如何实现连接,如何执行命令,由各自厂商去实现。抽象工厂模式是在多个方法工厂模式下建立起来,指在建立规则,不负责具体实现。尤其在服务中连接数据库特别明显,实现数据库的插拔。

2022-09-15 22:05:47 207

原创 【设计模式】之【工厂方法模式】

在实际开发过程中,有些情况下会遇到需要创建有共同类型的对象,而且对象之间又有一些共同的属性与行为。比如猫和狗,都是哺乳动物,同时邮箱相同的属性4条腿。在实际开发的过程中,如果对象种类不是很多的话,其实使用简单工厂就可以应对了。但是一旦后续还有种类要增加的话就涉及到需要更改旧代码,引来未知的风险。而使用工厂方法模式的话就避免了以上的问题,有新的种类增加,就只需要增加一个子类实现即可。

2022-09-15 21:26:58 513

原创 Maven项目整合RocketMQ示例

rocketMQ对应maven项目的简单配置,以及一些消息发送订阅的示例

2022-07-25 19:23:06 922

原创 【关于Zookeeper的理论】

CAP理论指出一个分布式计算机系统来说,不可能同时满足以下三点:BASE 理论是**基本可用(Basically Available)、软状态(Soft-state)和最终一致性(Eventually Constant)**三个的缩写。在zookeeper中,ZAB 协议是用来实现分布式数据的一致性。ZAB 协议分为两个部分:消息广播Zookeeper使用单一的主进程Leader来接收和处理客户端所有事务请求,并采用ZAB协议的原子广播协议,将事务请求以Proposal提议广播到所有Follwer节点,

2022-06-10 11:17:12 80

原创 spring cloud gateway Route配置

gateway routes规则1、After Route所有匹配的请求必须在这个时间点之后spring: cloud: gateway: routes: - id: after_route uri: https://example.org predicates: - After=2022-05-23T19:52:33.736+08:00[Asia/Shanghai] #时间格式为ZonedDateTime.now()

2022-05-24 11:07:56 11203

原创 springcloud-gateway整合nacos

1、 首先创建一个maven项目2、在pom文件中添加依赖<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency>

2022-05-22 22:52:48 596

原创 使用idea将一个java类打成jar完整步骤

机缘提示:可以和大家分享最初成为创作者的初心例如:实战项目中的经验分享日常学习过程中的记录通过文章进行技术交流…收获提示:在创作的过程中都有哪些收获例如:获得了多少粉丝的关注获得了多少正向的反馈,如赞、评论、阅读量等认识和哪些志同道合的领域同行…日常提示:当前创作和你的工作、学习是什么样的关系例如:创作是否已经是你生活的一部分了有限的精力下,如何平衡创作和工作学习…憧憬提示:职业规划、创作规划等​​Tips您发布的文章将会展示至 里程碑专区

2022-05-20 17:44:51 10050

原创 【文件每行读取】

文件读取public static List<String> importFile(String fileName) { List<String> list = new ArrayList<>(); try{ File file = new File(fileName); if (file.isFile() && file.exists()) {

2022-04-25 16:05:27 190

原创 Liunx常用命令

Linux基本命令目录操作mkdir 目录名称 增加目录ls或ll (ll是 ls -l 的缩写, ll命令可以看到该目录下的所有目录和文件的详细信息) 查看目录信息find 目录 参数 : 寻找目录(查)列出当前目录及子目录下所有文件和文件夹: find .在/home目录下查找以.txt结尾的文件名: find /home -name “*.txt”同上,忽略大小写: find /home -iname “*.txt”当前目录以及子目录下查找所有以.txt和.pdf结尾的文

2022-04-18 22:16:03 137

原创 【Java创建线程的3种方式】

文章目录Java创建线程的3种方式一、继承Thread类二、实现Runnable接口三、实现Callable接口四、结果一、继承Thread类 public static class ThreadExtend extends Thread { public void run() { System.out.println("Thread extends method!"); } }优点在run()方法内部获取当前线程直接使用th

2022-04-13 20:45:59 386

原创 求2到n范围内的素数和

求2到n范围内的素数和一、暴力破解法二、埃筛法一、暴力破解法解题思路从2开始遍历每一个数字如果这个数组从2到n有一个数能够整除,那么这个数字就位合数否者,这个数字则为素数。 public static int bf(int num) { int count = 0; for (int i=2; i<= num; i++) { count+= isPrime(i)?1:0; } return coun

2022-04-09 11:02:50 1534

原创 Redis内存淘汰策略

系列文章目录Redis缓存不一致问题如何解决使用Redis缓存数据可能需要的问题文章目录系列文章目录前言一、如何给Redis设置缓存淘汰策略?二、内存淘汰策略1.TTL算法2.LRU算法(Least recently used)3.LFU算法(Least frequently Used)4.LRU和LFU对比总结前言在分布式系统中,为了提高系统的性能,会使用到Redis来作为缓存中间件,将一部分数据库中的数据存储到缓存中,但是不会把数据库中的数据全部都放到缓存中,而是将其中一部分热点数据放入缓存

2022-03-13 08:57:55 196

原创 Spring源码之推断构造方法

文章目录前言一、什么是构造方法?二、在Spring中如何找到最合适的构造方法1、找出所有的构造方法2、遍历所有的构造方法获取到的构造方法3、找到构造方法之后,需要找出合适的构造方法4、整个推断构造方法的总结5、在获取所有构造方法之前还使用了DCL来保证线程安全问题。总结前言在Spring容器启动的时候会把所有的单例bean都给加载到容器中,但是在这些单例bean是如何被创建出来的呢?在Spring容器中,会使用推断构造方法将单例bean的构造方法找出来,找到最合适的构造方法进行对象的创建,具体找到构造

2022-03-09 23:59:54 461 1

原创 Redis缓存不一致问题如何解决

Redis缓存不一致问题如何解决第一章 Redis之缓存可能遇到的问题文章目录Redis缓存不一致问题如何解决前言一、Redis是什么?二、使用Redis带来的缓存不一致问题1.搭建高可用的分布式缓存总结前言在单机、并发量小的情况下,我们可以直接让请求直接访问数据库,单机MySQL查询最大能够支持每秒1万左右的查询请求,3千左右的新增更改的请求。但是在高并发场面下,并发量远远大于这些请求,为了保证系统的安全和高可用,一般会使用缓存作为中间缓存层,避免请求直接访问数据库。一、Redis是什么?

2022-03-08 08:43:37 2044

原创 Redis数据缓存可能遇到的问题

Redis第一章 Redis之缓存可能遇到的问题文章目录Redis前言一、我们为什么使用缓存?二、使用缓存可能会带来哪些问题?1.缓存雪崩2.缓存穿透3、缓存击穿总结前言数据批量导入,这一批数据的过期时间可能一样,如果这时候有大量请求访问,该如何解决?如果别人知道缓存中的key某个生成规则,专门发送一些攻击请求,又该怎么办?一、我们为什么使用缓存?使用缓存的目的就是为了减少请求直接访问数据库,使用更高性能的缓存中间件来加快查询数据,同时保护数据库不被大量请求所打垮。二、使用缓存可能会带来哪

2022-03-07 23:44:41 660

原创 二叉树遍历(前中后)

二叉树定义:public class TreeNode{ int value; TreeNode left; TreeNode right; public TreeNode(){} public TreeNode(int value) { this.value = value; } public TreeNode(int vlaue, TreeNode left, TreeNode right) { this.value = value; this.left = left;

2022-02-03 16:19:16 1251

原创 【算法】leetCde之反转链表(第206题)

一、题目给定一个头结点为 head 的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。二、示例输入:[1,2,3,4,5]输出:此列表中的结点 3 (序列化形式:[3,4,5])返回的结点值为 3 。 (测评系统对该结点序列化表述是 [3,4,5])。注意,我们返回了一个 ListNode 类型的对象 ans,这样:ans.val = 3, ans.next.val = 4, ans.next.next.val = 5, 以及 ans.next.next.next

2022-01-31 11:47:59 59

原创 【算法】leetCde之反转链表(第206题)

一、题目给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。二、示例输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]代码实现链表节点public class ListNode { int val; ListNode next; ListNode(){} ListNode(int val){ this.val = val; } ListNode(int val, ListNode next){

2022-01-30 16:32:57 557

原创 【算法】leetCde之删除排序链表中的重复元素(第83题)

一、题目存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。二、示例输入:head = [1,1,2]输出:[1,2]代码实现链表节点public class ListNode { int val; ListNode next; ListNode(){} ListNode(int val){ this.val = val; } ListN

2022-01-24 22:10:05 91

原创 【算法】leetCde之合并两个有序链表(第70题)

一、题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。二、示例输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]代码实现链表节点public class ListNode { int val; ListNode next; ListNode(){} ListNode(int val){ this.val = val; } ListNode

2022-01-23 22:32:39 291 1

原创 【算法】leetCde之爬楼梯(第70题)

一、题目假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。二、示例输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1 阶 + 1 阶2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1 阶 + 1 阶 + 1 阶1 阶 + 2 阶2 阶 + 1 阶代码实现递归 public int climbStairs(int n) { if

2022-01-16 15:01:51 182 1

原创 设计模式之享元模式

工厂模式:工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。工厂模式分类:1、简单工厂(SimpleFactory)2、抽象工厂 (AbstractFactory)简单工厂利用简单工厂创建接口,但是也可以利用简单工厂创建抽象类或者普通类的实例。示例、利用简单工厂创建对象先定义一个接口,接

2022-01-12 23:43:29 55

原创 借助CountDownLatch解决并行执行相同任务后汇总问题

项目场景:借助CountDownLatch解决并行执行相同任务后汇总问题问题描述:由于其他平台有限制,每次远程查询信息量只有20个,如果大于20个,那就需要进行多次查询汇总,这个时候借助线程池,并且使用CountDownLatch来控制请求达到什么样的条件之后才开始汇总数据。业务执行内容:public static Integer getNum() throws InterruptedException { Thread.sleep(100); return new

2022-01-11 23:43:04 610 3

原创 设计模式详解之单例模式

设计模式详解之单例模式前言提示:软件设计模式(Design pattern),又称设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。提示:以下是本篇文章正文内容,下面案例可供参考一、懒汉式相较于饿汉式,第一次获取对象时为空,需要创建对象。由于使用了Double check和synchronized,对性能稍微有写损耗。代码展示/** * 懒汉模式 * 1、volati

2022-01-09 19:10:22 261

原创 cglib动态代理和JDK动态代理

CGLIB原理:cglib是一个java字节码的生成工具,它动态生成一个被代理类的子类,子类重写被代理的类的所有不是final的方法。在子类中采用方法拦截的技术拦截所有父类方法的调用,顺势织入横切逻辑。GGLIB代码展示: UserService userService = new UserService(); Enhancer enhancer = new Enhancer(); enhancer.setSuperclass(UserService.class

2021-10-16 16:16:05 157

从0到1学习JVM如何调优

从0到1学习JVM如何调优

2023-12-03

空空如也

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

TA关注的人

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