- 博客(44)
- 收藏
- 关注
原创 RocketMQ-实战事务消息
MQServer收到半消息后会告诉生产者order-service确认收到半消息,这时候order-service需要执行本地事务,执行完本地事务后再告诉MQServer本地事务的执行状态,确认消息究竟是Commit还是Rollback。在本地事务执行完成后会向MQServer发送Commit或Rollback操作,此时如果在发送消息的时候生产者出故障了,那么要保证这条消息最终被消费,MQServer会像服务端发送回查请求,确认本地事务的执行状态。生产者收到确认回查请求后,检查本地事务的执行状态。
2025-01-15 17:05:50
947
原创 RocketMQ-初体验
当开发中需要快速集成RocketMQ时可以考虑使用 rocketmq-spring-boot-starter 搭建RocketMQ的集成环境,但该框架并不完全具备RocketMQ所有的配置简化,如需批量消费消息便需要自定义一个DefaultMQPushConsumer bean去消费了。个人在开发中常用的rocketmq-spring-boot-starter相关类:RocketMQListener接口:消费者都需实现该接口的消费方法onMessage(msg)。
2025-01-14 15:11:19
599
原创 Spring Cloud Alibaba - Nacos理论面试总结-未完结
临时实例和永久实例在 Nacos 中是一个非常非常重要的概念之所以说它重要,主要是因为我在读源码的时候发现,临时实例和永久实例在底层的许多实现机制是完全不同的。
2025-01-13 17:15:28
475
原创 Spring Cloud Alibaba - Nacos健康检查
长连接: 一个连接上可以连续发送多数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包,在Nacos 2.x之后,使用Grpc协议代替了http协议,长连接会保持客户端和服务端发送的状态,在源码中ConnectionManager 管理所有客户端的长连接。上面这个clientManager.clientDisconnected(each)超时连接处理,我们在前面已经分析过了,这里不再分析,关键的逻辑就是发布了两个事件:客户端释放连接事件、客户端断开连接事件。
2025-01-10 14:27:08
373
原创 Spring Cloud Alibaba - Nacos注册
Nacos(Naming Configuration Service) 是一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生应用程序。服务发现是微服务架构中的关键组件之一Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
2025-01-09 15:55:42
862
原创 Java 多线程之@Async
spring:task:execution:pool:# 最大线程数# 核心线程数# 存活时间# 队列大小# 是否允许核心线程超时# 线程名称前缀@Order(-1)//核心线程数目//指定最大线程数//队列中最大的数目;//线程名称前缀//rejection-policy:当pool已经达到max size的时候,如何处理新任务//CALLER_RUNS:不在新线程中执行任务,而是由调用者所在的线程来执行//对拒绝task的处理策略//线程空闲后的最大存活时间。
2025-01-07 17:12:07
787
原创 spring boot 启动慢分析记录
通过实现SpringApplicationRunListener接口,我们可以在SpringApplication运行的各个阶段执行自定义的逻辑,例如初始化资源、清理资源、记录日志等。SpringApplicationRunListener是Spring Boot中的一个接口,它的作用是在SpringApplication运行的各个阶段提供回调接口,以便我们可以在这些阶段执行自定义的逻辑。: 在ApplicationContext准备好,但在其加载源之前调用。: 在Environment准备好,但在。
2025-01-07 14:38:28
146
原创 java 多线程之Future和FutureTask
任务在Executor线程执行器当中是异步执行的,而有些任务是需要返回执行结果的,故在Executor派生接口ExecutorService接口中定义了带返回结果的提交方法submit,其中返回结果为Future接口的对象JDK中的Future。
2025-01-07 09:49:04
918
原创 java 多线程之线程池ThreadPoolExecutor
线程池是通过池化少量线程来提供线程复用的,当调用线程向线程池中投递大量任务后,线程池可能就处于饱和状态了。是Integer的原子变量,使用一个变量同时记录线程池状态和线程池中线程个数 [线程池状态(高3位),线程个数(低29位)],假设计算机硬件的Integer类型是32位二进制标示,如下面代码所示,其中高3位用来表示线程池状态,后面29位用来记录线程池线程个数。如果当前线程池中的线程数量比核心线程数量要多,并且是闲置状态的话,这些闲置的线程能存活的最大时间。:线程池核心线程个数。:线程池最大线程数量。
2025-01-07 09:01:11
863
原创 并发多线程来之龙去脉
Java的内存模型中有主内存和线程的工作内存之分,主内存上存放的是线程共享的变量(实例字段、静态字段和构成数组的元素),线程的工作内存时线程私有的空间,存放的是线程私有的变量(方法参数和局部变量)。线程在工作时如果要操作主内存的共享变量,为了获得更好地执行性能并不是去直接修改主内存而是会线程私有的工作内存中创建一份变量的拷贝(缓存),在工作内存上对其进行修改后再把修改的值刷会到主内存中去。3、判断线程池里的线程是否都处于工作状态,如果没有,则创建一个新的工作线程来执行任务。子进程被称为僵死进程。
2025-01-06 21:30:00
298
原创 时间格式YYYY-MM-DD‘T‘hh:mm:ssZ
为什么同样的时间格式生成就是2024-04-118T05:45:15+0800,而校验理想的是:2024-04-18T05:45:15+0800?
2024-04-27 17:50:46
623
原创 redis 红锁
并且,每个节点执行完tryLock()尝试获取锁之后,无论是否获取锁成功,都会判断目前从各个节点获取锁已经消耗的总时间,如果已经等于最大等待时间,则认定最终申请锁失败,需要对成功加锁集合 acquiredLocks 中的所有锁执行锁释放,然后返回false。线程2来到了redis抢占锁,因为3挂了,1,2有锁,只有4和5可以加锁,因为我们注册的时候是5台,4和5这两台不满足n/2+1原则,抢占锁失败。当redis3挂了,此时线程1获取到了锁,正在顺序执行,难道用了红锁一定能保证加的锁的一定不丢失吗?
2024-03-09 17:29:17
556
原创 Redisson实现分布式锁原理及源码分析
单体应用中,可以通过synchronized等相关锁实现线程间共享数据的独占,但是在分布式环境下,线程锁是不能跨应用的,所以需要通过一个分布式存储组件来实现分布式锁。常用的分布式锁实现组件有Redis和ZooKeeper,由于Redis是AP(可用性)架构的,ZooKeeper是CP(一致性)架构的,根据实际的应用场景,两种实现方案都可以。大多数场景下,用Redis实现分布式锁就可以了,主要是Redis性能比ZooKeeper更好,实现的分布式锁效率更高。
2024-03-09 16:37:58
317
原创 【Java并发编程】导致JVM内存泄露的ThreadLocal详解
返回该线程局部变量的初始值,该方法是一个protected的方法,显然是为了让子类覆盖而设计的。key 使用强引用:对ThreadLocal对象实例的引用被置为null了,但是ThreadLocalMap还持有这个ThreadLocal对象实例的强引用,如果没有手动删除,ThreadLocal的对象实例不会被回收,导致Entry内存泄漏。需要指出的是,当线程结束后,对应该线程的局部变量将自动被垃圾回收,所以显式调用该方法清除线程的局部变量并不是必须的操作,但它可以加快内存回收的速度。
2024-03-04 16:32:13
652
1
原创 openfegin调用
这边也是第三部分的代码截图,只是上面最后的一丢丢截图截不下了,可以看到,这边最后是调用了CompleteFuture#join方法,这个方法会堵塞主线程,直到resultFuture结果返回,也就是说处理reponse的过程是异步的,但是返回结果还是同步的,在最后结果处理结束之前,主线程都是堵塞的。最后大家可能会有疑问,哇,这个处理reponse的AsyncResponseHandler,看这个名字是异步的呀,那OpenFeign难道也是异步返回结果的么?答案是否定的,具体我们来看下代码。
2023-12-10 18:34:14
233
原创 gateway笔记
全局过滤器,不需要在配置文件中配置,作用在所有的路由上,最终通过GatewayFilterAdapter包装成GatewayFilterChain可识别的过滤器,它为请求业务以及路由的URI转换为真实业务服务的请求地址的核心过滤器,不需要配置,系统初始化时加载,并作用在每个路由上。: 需要通过spring.cloud.routes.filters 配置在具体路由下,只作用在当前路由上或通过spring.cloud.default-filters配置在全局,作用在所有路由上。上面的示例是指,请求时间在。
2023-11-28 21:30:56
68
原创 解题第一天
数据表记录包含表索引index和数值value(int范围的正整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照index值升序进行输出。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。输入一个只包含小写英文字母和数字的字符串,按照不同字符统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASCII码由小到大排序输出。程序不考虑负数的情况,若数字含有0,则逆序形式也含有0,如输入为100,则输出为001。
2023-11-11 16:01:03
61
原创 ssm框架
1. mybatis是一个优秀的基于 java 的持久层框架,它内部封装了 jdbc,使开发者只需要关注 sql 语句本身,而不需要花费精力去处理加载驱动、创建连接、创建 statement 等繁杂的过程。采用 ORM 思想解决了实体和数据库映射的问题,**对 jdbc 进行了封装,屏蔽了 jdbc api 底层访问细节,使我们不用与 jdbc api 打交道,就可以完成对数据库的持久化操作。...
2023-05-29 15:55:51
214
原创 java爬虫
网络爬虫的基本概念网络爬虫是什么?网络爬虫是一种运行在互联网上用来数据的自动化程序和脚本分解出三个点:* 互联网上都有哪些数据?* 形形色色的网站组成(新闻|贴吧|知道|音乐|图片|视频|地图|文库)* 电商网站(用户|商品|订单|支付|物流|评论|分享)* 微博(发送信息|转发|点赞|关注|被关注)* 怎么去获取?通过什么样的技术手段去获取* 网站的本质就是服务端程序,通过客户...
2023-05-29 15:54:59
135
原创 mysql原理与redis原理
b+树可以有效的结局树层高存储更多数据,b+树的肥叶子结点只存数据索引。大大降低的查询磁盘的io次数。因为索引数据结构底层都是拍好顺序的索引自增修改的时候比较方便,也会减低新增数据在插入时的数据分裂复杂度。因为节省存储空间可以存更多的数据,降低修改时数据修改的复杂度。非主键索引叶子结点存储的是主键值所以,所有的非主键索引在查询数据的时候,只要返回的字段不是非主键索引中的字段都会有一个回表的操作。联合索引为什么必须遵循最左原则,因为联合索引在存储的时候就是更具索引字段进行排好顺序的。
2023-05-14 22:43:19
3
原创 激光推送样例
激光推送public class JpushClientUtil { private static final Logger log = LoggerFactory.getLogger(JpushClientUtil.class); private final static String appKey = "42915a1c8f8cfe1f06f1e439"; private final static String masterSecret = "d31f9ca1b426f976c
2021-10-10 17:23:11
140
原创 Cookie&&Session&&jsp
会话技术:1.1概念:日常生活中的交流,一连串的你问我答的过程就是会话。b/s架构中的会话:从浏览器第一给服务资源发送请求,建立会话,直到一方断开为止。1.2功能:在一次会话方位内的多次请求之间共享数据1.3会话技术:客户端会话技术:Cookie服务器端会话技术:Session2.Cookiel 概念:客户端会话技术,将数据保存到客户端2.1快速入门常...
2019-08-07 15:52:28
127
原创 JDBC Template&&连接池
连接池连接池其实就是一个容器(集合),存放数据库连接的容器。优点**节约资源,减轻服务器压力提高连接复用性,用户访问高效**1**. DataSource**功能* 获取连接:Connection getConnection();* 归还连接:connection.close(); 我们大家已经养成了习惯今天使用连接池技术后,此方法的调用不再是关闭连接,而是归还连接到容器(连...
2019-03-17 17:21:42
341
原创 JDBC
JDBC概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。2. 快速入门:步骤:在MySQL中导入sql脚...
2019-03-17 16:46:14
139
原创 HTML
webJavaWeb:使用Java语言开发基于互联网的项目软件架构:1.C/S: Client/Server 客户端/服务器端* 在用户本地有一个客户端程序,在远程有一个服务器端程序* 如:QQ,迅雷…* 优点:1. 用户体验好缺点:1. 开发、安装,部署,维护 麻烦2.B/S: Browser/Server 浏览器/服务器端只需要一个浏览器,用户通过不同的网址(U...
2019-03-17 15:37:52
201
原创 HTML&&CSS
1.1 表格标签table – 一个表格caption – 表格标题tr – 一行td – 普通单元格th – 标题单元格 特点:居中且加粗table常用属性border:边框width:宽度align:表格对齐方式cellspacing:单元格的间距,一般设置为0cellpadding:单元格的内边距,一般设置为0tr常用属性align:内容的对齐方式height:行...
2019-03-17 11:14:20
188
原创 JavaScript&&CSS
CSS常用属性1)字体和文本font-size:字体大小font-weight:字体粗细 " bold"粗体font-style:样式 "italic"斜体font-family:类型2.文本color:颜色line-height:行高text-align:内容对齐方式text-decoration:装饰取值:no...
2019-03-17 10:29:45
236
原创 多线程
1.并发与并行并发(JAVA):指两个或多个事件在同一时间段发生。并行:指两个或多个事件在同一时刻发生(同时发生)。2. 线程与进程进程:有独立的内存空间,是系统运行程序的基本单位,但运行的是线程线程:进程内部的执行单元,一个进程至少有一个线程或多个线程一个程序运行至少有一个进程,一个进程中包含多个线程。线程调度:所有线程轮流使用cpu,平均占用时间抢占式调度(JAVA):优先级高...
2019-03-03 23:03:41
157
原创 io流
IO流分类:根据流向分为:输入流****和输出流。根据格局数据类型分为:字节流和字符流。字节流字节流的输出流:public FileOutputStream(File file) :创建文件输出流以写入由指定的 File对象表示的文件。 目的地是一个文件夹的路径FileOutputStream fos1 =new FileOutputStream(new File("09_IOAn...
2019-03-03 23:03:01
205
原创 Collectios list set
java.util.Collection接口所有单列集合的最顶层的接口,里边定义了所有单列集合共性的方法任意的单列集合都可以使用Collection接口中的方法共性的方法:public boolean add(E e): 把给定的对象添加到当前集合中public void clear() :清空集合中所有的元素。public boolean remove(E e): 把给定的对象在...
2019-02-20 14:09:31
186
原创 MAP
java.util.Map<k,v>Collection 中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。Collection 中的集合称为单列集合, Map 中的集合称为双列集合。集合Map集合的特点:1.Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)2.Map集合中的元素,key和value的数据类型可以相...
2019-02-20 11:09:34
147
原创 Java异常处理的五个关键字:try、catch、finally、throw、throws
java.lang.Throwable:类是java语言中所有错误或异常的超类:Exceptio:编译期异常,进行编译(写代码)java程序出现异常。RuntimeException:运行异常,java程序运行过程出现问题。相当于程序得了一个小毛病,把异常处理掉,程序可以执行。Error:错误错误就相当于程序得了一个无法治愈的毛病,必须修改源代码,程序才能执行。异常产生的过程:如果...
2019-02-20 10:44:30
4045
原创 object math System
1.Arrays1.1冒泡排序: int[] arr = {24, 69, 80, 57, 13}; //用arrayToString方法对数组进行遍历 System.out.println("排序前:" + arrayToString(arr)); //每次循环会把数组中的最大值放到最右边 //...
2019-02-15 08:46:39
172
原创 日期
1.包装类什么是包装类:基本数据类型所对应的引用数据类型就是包装类相互转换:JDK1.5以后自动装箱和拆箱[基本类型 包装类int Integerchar Character其他 首字母大写5.2 自动装箱与自动拆箱装箱...
2019-02-14 15:21:34
150
原创 多态 接口 抽象类
多态:同一个对象在不同时刻表现出来的不同形态。前提:List item存在继承/实现关系存在方法重写父类引用指向子类对象多态中成员访问特点使用多态时,访问成员变量的特点:编译看左边,运行看左边使用多态时,访问成员方法的特点:编译看左边,运行看右边public class Animal{public int age=40;public void eat(){ Sys...
2019-01-28 09:17:02
154
原创 继承 修饰符
1.继承继承是面向对象的三大特征之一,可以使子类具有父类的属性和方法, 还可以在子类中重新定义。继承:是通过extends实现的。格式:class 子类extends 父类(){}public class fu { public void show(){ System.out.println("父类方法show被调用"); }}//子类集成父类的格式p...
2019-01-27 11:02:02
376
原创 总结基础班的基本所有东西
ArrayList的使用步骤java.util.ArrayList:该类需要import导入后使用。 ,表示一种指定的数据类型,叫做泛型。 E ,取自Element(元素)的首字母。在出现 E 的地方,我们用一种引用数据类型将其替换即可,表示我们将存储哪种引用类型的元素。ArrayList对象不能存储基本类型,只能存储引用类型的数据。类似 不能写,但是存储基本数据类型对应的包装类型是可以的...
2019-01-25 14:59:53
226
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人