- 博客(121)
- 资源 (1)
- 收藏
- 关注

原创 Java基础_语法(equals和==以及重写equals和hashcode)
目录1:==和equals1.1:==和equals的区别1.2:hashcode方法(C语言方法,返回地址指针值)1.3:equals方法2:重写equals和hashcode2.1:String类的equals和hashcode2.2:自定义类型测试(没有重写equals和hashcode)2.3:自定义类型测试(重写equals,不重写hashcode)2...
2019-04-01 14:06:45
2522
3
原创 RocketMQ第五节(springboot整合MQ)
mq的架构我们使用springboot整合RocketMq,学习使用案例,在这里我们的项目架构是一个生产者、两个消费者。在以上的普通消息中,我们知道了生产者发送消息到主题的4个队列,消费者消费队列的消息。消息被消费者获取,并按照消费者本地的业务逻辑进行处理的过程。此时服务端(MQ服务器)会等待消费者完成消费并提交消费结果,如果一定时间后没有收到消费者的响应,Apache RocketMQ会对消息进行重试处理(推送)。消费重试 | RocketMQ2:消息提交消费者完成消费处理,并向服务端提交消费结果。
2025-06-30 22:09:40
637
1
原创 并发基础7(守护线程)
在Java多线程编程中,有两种特殊类型的线程:后台线程和守护线程。本文将详细介绍后台线程和守护线程的概念、特性、用法,以及注意事项。你可以创建一个后台线程或守护线程来执行周期性的任务,例如定时清理临时文件、定时发送心跳包等。后台线程和守护线程的生命周期都取决于是否还有前台线程在运行。如果所有前台线程都结束了,那么后台线程和守护线程会自动退出。这些示例演示了如何使用后台线程执行垃圾回收和日志记录任务,同时确保这些线程不会阻止应用程序的正常退出。是后台线程,当主线程结束时,它会自动退出。
2025-06-27 22:16:10
352
原创 Redis学习_第五章(redis分布式锁)
为什么要设置随机值?主要是为了防止锁被其他客户端删除。有这么一种情况:客户端 A 获得了锁,还没有执行结束,但是锁超时自动释放了;客户端 B 此时过来,是可以获得锁的,加锁成功;此时,客户端 A 执行结束了,要去释放锁,如果不对比随机值,就会把客户端 B 的锁给释放了。
2025-06-27 17:49:16
892
原创 并发基础6(springboot线程池)
本文系统介绍了Java多线程编程的核心技术与进阶应用。主要内容包括: 多线程实现方式对比 继承Thread类(无返回值) 实现Runnable接口(无返回值) Callable+FutureTask组合(有返回值) 线程池优化方案 FutureTask深度解析 异步任务执行与结果获取机制 实际应用场景案例(多任务结果聚合、超时控制、任务取消) 优缺点分析及局限性说明 CompletableFuture进阶 Java8引入的异步编程利器 支持链式调用、任务组合与异常处理 SpringBoot整合实践与典型用例
2025-06-24 11:33:12
938
原创 java的stream流
stream流就像一种更高阶的迭代器,与传统的迭代器不一样,流不存储数据,只是代表了一个计算过程,在这个过程中对数据进行操作。1:我们先看一下迭代器的方法,Java 的集合框架(如 List、Set)均实现了 Iterator 接口,通过iterator() 方法返回迭代器。:流的操作不会改变原始数据集合,它们是无状态的。这就像是音乐家们的乐器,演奏结束后,乐器仍然是原始的状态,没有被改变。传统遍历元素:直接通过索引遍历集合(如数组),客户端需要知道集合的内部结构(如数组长度),不推荐在里边删除元素。
2025-06-21 09:28:30
744
原创 SpringBoot_第十章(启动过程)
1:自定义初始化器ApplicationContextInitializer/*** 自定义初始化器在new springboot的加载初始化容器的过程中加载 根据反射加载 在项目启动中运行*/@OverrideSystem.out.println("我的ApplicationContext初始化器:");System.out.println("初始化器:"+beanDefinitionName);2:自定义监听器ApplicationListener/**
2025-04-18 00:02:08
711
1
原创 Java基础_虚拟机4:(JVM调优)
有两种方法1:-Xmn 直接设置年轻代的大小,总共容量默认10m,设置新生代4m/*** jvm的堆内存设置* -Xms10m 初始堆容量大小* -Xmx10m 堆容量最大值* -Xmn4m 直接设置新生代大小(优先级高于比例设置)* -XX:NewRatio=4 新生代:老年代=1:4 默认值是2也就是1:2* 1:-Xms10m -Xmx10m -XX:NewRatio=4 -XX:+PrintGCDetails (NewRatio设置新生代、老年代比例)
2025-03-28 16:16:07
726
1
原创 RocketMQ第六节(知识点总结)
半事务消息因系统重启或异常情况导致没有提交,生产者客户端会按照事务异常检查间隔时间进行回查,若超过半事务消息超时时长后没有返回结果,半事务消息将会被强制回滚。您可以通过监控该指标避免异常事务。也就是说超过4个小时消息,这条事务消息会回滚。
2025-01-15 12:34:44
910
原创 java运算符
运算符是什么呢?其实这个问题很简单,运算符在我们的生活中很常见,失去了它,我们的数学基本报废了,像“+ , - ,* , /”都是我们最基本的运算符。即:对操作数进行操作时使用的符号,不同操作符的含义各不相同。
2024-11-25 20:59:16
743
原创 并发基础5(ThreadLacal)
而它的构成主要是用Entry来保存数据 ,而且还是继承的弱引用。详细内容要大家自己去跟。ThreadLocal的set()方法实际上就是往ThreadLocalMap设置值,key是ThreadLocal对象弱引用,值Value是传递进来的对象。2:set之后必须调用remove方法,因为ThreadLocal的ThreadLocalMap是Entity,实际上 ThreadLocalMap 中使用的 key 为 ThreadLocal 的弱引用,弱引用的特点是,
2024-11-21 21:16:41
446
原创 Docker学习(第二章节基础命令)
Dockerfile 是一个文本文件,主要作用是构建镜像,包含一系列用于构建镜像的指令(Instructions)。每条指令都会构建一层镜像,指令的内容描述了该层镜像应如何构建。dockerhub上已经有了image,为什么我们需要自己构建镜像呢?用户可以将自己的应用打包成镜像,从而让应用在容器中运行。还可以对官方镜像进行扩展,打包成适合生产环境的应用镜像。构建三步骤编写Dockerfile文件docker run2.2:命令构建镜像。
2024-11-13 00:15:54
1028
1
原创 Docker学习(第一章节基础命令)
传统:按照帮助文档,逐步部署项目Docker:打包镜像发布测试,一键运行将项目打包成镜像,扩展到不同的服务器使用docker,我们的开发测试环境高度一致。
2024-11-09 21:11:46
1180
原创 SpringCloud第七章(链路追踪Micrometer+Zipkin) -2024
组件多,并且一般多是多节点集群方式部署,用户的请求量还大,想要排查一个请求的错误,无异于大海捞针,因此啊,我们就需要一种技术来帮助我们将请求给串起来,这样在出现问题之后就可以拔出萝卜带出泥的定位到没有节点的请求日志,从而轻而易举的定位到问题所在,做到有则时的改之。肯定需要定位这个请求,需要一个全局的id,在A->B->C->D的日志中,都能追踪的到这一条请求。我们可以先想一下在微服务中,一个请求从A调用B,B调用C,C调用D,然后逐次返回,怎么实现链路跟踪?1:在80、91、92中都导入依赖的jar。
2024-09-27 19:38:55
1200
原创 SpringCloud第六章(服务保护CircuitBreaker) -2024
CircuitBreaker是断路器的意思,由于原来的SpringCoud的hystrix停更,所以springcloud社区推出了的新断路器,用来进行springcloud的服务降级、限流、熔断由于Spring Cloud断路器(CircuitBreaker)提供了不同断路器实现的抽象,支持的实现有两种Resilience4J和Spring Retry的实现。在Spring Cloud CircuitBreaker中实现的API位于Spring Cloud Commons中。这些API的使用文档位于。
2024-09-27 01:51:32
1178
原创 SpringBoot_第十一章(Thymeleaf模板引擎)
在项目中,我们使用前后端分离或者前后端不分离的技术,如果不分离就需要引擎模板引擎模板跟JSP相似,都是后端的模板解析器,将数据填充到模板页面,返回给前端的技术。Thymeleaf是一个现代的服务器端Java模板引擎的web和独立的环境,能够处理HTML, XML, JavaScript, CSS,甚至纯文本。
2024-08-03 23:38:07
559
1
原创 ElasticSearch第四章(数据同步和集群)
因为ES中的是数据来自业务数据也就是数据库,比如mysql等,那么就需要把数据库的数据同步到ES中,那么什么时候进行数据同步呢?在ES中存在单机处理上限,以及单机的稳定性,所以集群的搭建是必不可少的。假如我们搭建三台服务器作为集群9200,9201,9202。2:都具有数据节点的功能:数据局存储、搜索、聚合、crud。3:都是ingest,具有数据存储预处理功能。
2024-03-27 00:17:02
2147
原创 ElasticSearch第三章(聚合)
在之前都是使用ES的查询,结合各种查询条件来查询出结果集,聚合即使查询的结果接在学习聚合之前我们先来了解两个名字1:桶(Buckets):满足于特定条件的结果集,相当于mysql的group by2:指标(Metrics):对桶内的文档进行统计计算,相当于mysq的max()、min()、avg()函数。
2024-03-23 19:33:14
1093
原创 ElasticSearch第二章(ES8.X的使用)
这里的索引库就是相当于mysql的表创建es01 就是相当于mysql数据库中的表,mapping:就是对表中字段的映射,properties:就是包含各个字段,type:设置字段类型,包含字符类型、数字类型、布尔类型等analyzer:设置字段的分词,创建倒排索引,便于搜索,只是用text类型文档就是数据,对比mysql的话,就是表中添加数据,但是这里添加的数据是json。
2024-03-17 18:58:27
2665
1
原创 ElasticSearch第一章(ES8.X安装、kibana安装、IK安装)
1:什么是ElasticSearch2:为什么要使用ElasticSearch
2024-02-21 14:30:38
1178
原创 SpringBoot_第九章(CAP和分布式事务)
我们知道在单机下边的事务通过注解开启事务。但是在分布式的系统中,比如扣减订单和减库存客户在主业务中,发起了下单和减库存两个服务,这两个服务在不同的服务器上,我们该怎么保证事务的一致性呢?正常情况下,下单和扣减库存都成功,两边保证了数据的一致性。但是不正常情况下的,比如下单模块失败或者是超时。导致了库存扣减成功后,下单失败。两边就有了一致性问题,出现了数据不一致。我们无法通过单机的事务来控制。于是就有了分布式事务的问题。
2023-11-29 23:46:19
1331
原创 SpringBoot_第八章(读写分离_ShardingSphere实现)
Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。可以实现读写分离和分库分表Apache ShardingSphere 由ShardingSphere-JDBC 和 ShardingSphere-Proxy这 2 款既能够独立部署,又支持混合部署配合使用的产品组成。它们均提供标准化的基于数据库作为存储节点的增量功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景,
2023-11-29 23:45:17
1920
2
原创 SpringBoot_第七章(读写分离_MybatisPlus和自定义路由实现)
dynamic-datasource的jar包的官方文档。controller代码根据请求不同访问不同的数据源。2:配置spring的主从。
2023-11-01 20:28:08
609
原创 SpringBoot_第六章(知识点总结)
Filter、servlet是Servlet规范,拦截的是自定义的请求。因为DispatcherServlet拦截的是/但是Filter、servlet可以自定义拦截请求,根据匹配规则,他们会自己处理请求。/*** 继承Filter* 不会经过拦截器* 拦截/*所有请求 不管get post* 使用次注解生效*/@OverrideSystem.out.println("执行MyFilter无论什么get、post方法:"+name);//调用链Servlet代码实现:/**
2023-09-06 18:56:54
408
1
原创 MyBatis学习——第六篇(mybatisPlus)
mybatisPlus是一个mybatis的增强工具,。目的是为了简化开发代码,提高效率而生的。
2023-08-10 18:06:58
360
原创 RocketMQ第四节(部署模式、监控面板等)
mq的消息在服务器存放多久:保存3天ocketMQ无法避免消息重复(Exactly-Once)所以如果业务对消费重复非常敏感,务必要在业务层面进行去重处理。可以借助关系数据库进行去重。首先需要确定消息的唯一键,可以是msgId,也可以是消息内容中的唯一标识字段,例如订单Id等。在消费之前判断唯一键是否在关系数据库中存在。如果不存在则插入,并消费,否则跳过。
2023-07-18 19:52:56
839
原创 java基础浮点类型
我们在现实生活中经常用到10进制的数据,比如整数和小数。但是小数经常出现小数点后无限循环的情况。比如圆周率的π和1/3。这些数字想要存入计算机中。我们只能使用double和float来存储。但是计算机的内存不是无限的。我们不可能真正的存储下这些数字。float:单精度,占用4个字节的内存空间,也就是4*8=32位二进制。double:双精度,占用8个字节的内存空间,也就是8*8=64位的二进制。
2023-07-16 12:40:30
3955
原创 RocketMQ第三节(生产者和消费者)
根据消息的key将消息轮训的插入队列中,队列的消息能保证FIFO,但是我们并不知道实际具体那条消息在那个队列,无法保证比如订单号是01的所有操作在同一个队列。所有才有了顺序发送,我们传入指定的订单号,只要订单号一直,就一定会存到相同的队列。我们知道,我们发送的消息,存储到了mq的topic的队列里边,默认的topic是4个队列。第一种(推送模式):订阅mq服务的topic,mq收到消息把消息推送给消费者,适用范围广。第二种(拉取模式):订阅mq服务的topic,mq收到消息,消费者定时去mq拉取消息。
2023-05-04 18:16:17
3990
原创 SpringBoot_第三章(依赖管理)
在springboot项目中,简化了Spring应用的初始搭建以及开发过程,同样对jar的依赖管理也有一套自己的标准。我们创建好自己的springboot项目模板后可以看到pom文件,对需要的jar进行依赖管理,在将项目打包之后,由于项目包包含Tomcat,因此我们可以直接使用java -jar 项目包来运行项目。这些都是依赖于springboot的项目管理,下边来具体分析。我们创建好项目,查看pom文件如下开始分析分析结构:我们在此pom中可以看到项目的父级依赖是spring-boot-starte
2022-05-19 17:42:22
1819
原创 java枚举
目录1:什么是枚举2:枚举的用法2.1:final和枚举类2.2:测试方法1:什么是枚举枚举是一个帖特殊的类,用来表示一组常量。Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割。2:枚举的用法枚举和final的比较。final可以重新赋值(重新引用)。枚举不行,枚举可以表示结构化的数据,代码少,利于管理。2.1:final和枚举类//1:final修饰public class Colar { static final Stri
2022-02-17 16:21:57
278
1
原创 Java的Lambda
目录1:Lambda的作用2:jdk1.8的引用2.1:线程、list、Map练习2.2:自定义Lambda练习1:Lambda的作用Lambda表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。函数式编程能有少写点代码。Lambda依赖以前的匿名内部类的基础,必须是接口,且里边只能有一个方法。我们是函数编程来实现此方法语法:(parameters) -> expression或
2022-02-16 22:05:24
974
原创 Java泛型
1:什么是泛型泛型就是不确定类型,用一下几种表示<T>,其他的也行,就是规范。在java代码中随处可见,比如list<E> map<k,v>等等,容器中随处可见。用于在应用中传递对象的容器。但对象类型并不总是相同。因此,需要开发一个能够存储各种类型对象的容器。E:元素 K:键 N:数字 T:类型 V:值 S、U、V等:多参数情况中的第 2、3、4 个类型2:为什么使用泛型,不使用object2.1:我们使用object来试试,看看缺点在哪里定.
2022-02-16 21:44:06
372
原创 设计模式——模板模式
目录1:什么是模板模式2:怎么使用模板模式1:什么是模板模式在一个抽象类中定义抽象方法和模板方法,实现类实现抽象方法来执行不同的业务逻辑减少代码中通用方法在子类中的重复构建2:怎么使用模板模式在spring中的各种Template就是模板1:抽象Template模板public abstract class Template { abstract void execute(); //模板方法 public final void run(){
2022-02-15 18:17:50
122
原创 设计模式——观察者模式
1:什么是观察者模式对象之间存在一对多的依赖关系,一个对象发生改变的的时候,通知到其他的对象2:怎么使用观察者模式1:首先是目标对象,要有添加监听者方法和通知监听者方法//目标类public class Target { private int id; //包含所有的监听者 List<Observer> list=new ArrayList<Observer>(); public int getId() {
2022-02-15 17:42:09
196
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人