自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式事务seata之AT与TCC模型

seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata提供了AT、TCC、SAGA和XA事务模型,为用户打造一站式的分布式解决方案。简单来说,Seata就是针对主流事务解决方案的封装,我们直接使用Seata这个框架就可以选择性的使用不同的事务模型来解决分布式事务问题。分布式事务seata主要就是为了解决多服务下的数据一致性问题,提供了AT、TCC、SAGA、XA四种事务模型。

2024-06-13 16:32:17 882

原创 初识Springboot

自定义目录后,创建对应的相关资源,然后在属性文件中去覆盖静态资源的路径配置即可# 表示所有的访问都经过静态资源路径# 覆盖默认的配置,所有需要将默认的static public等这些路径将不能作为静态资源的访问。

2024-06-04 22:45:04 1020

原创 Spring之事务管理

事务需要满足ACID特性(可参考博客。

2024-06-04 21:54:18 1028

原创 Spring之AOP

SpringAOP是Spring中一个核心思想,面向切面编程,其主要作用就是提取出公共的业务方法,对目标方法进行一个增强。其原理就是采用的代理模式。

2024-06-04 21:31:29 324

原创 Spring之IOC

value帮助我们给数组动态的设值@Component@Data@Value("bobo") // 注入普通的字符串// 注入操作系统的信息// 注入表达式的结果// 注入其他Bean的属性@Component@Datajava配置类测试若需要读取第三方的properties文件中的信息创建第三方文件,在java配置类中通过@PropertySource注解来显示引入属性文件// 显示的指定要加载的属性文件。

2024-06-04 19:52:50 685

原创 Kafka之Consumer原理

本文主要讲了消费者消费消息的流程,使用offset保证消息消费的正确性,以及offset的存储,offset如果找不到的话的策略配置,还有offset的更新。随后又介绍了消费者组中的消费者和主题中的分区之间的消费策略,最后当消费者数量发生变化,或者分区增加的情况下,kafka采用分区再平衡机制进行维护,利用Coordinator协调者机制,来维护分区和消费者数量的一个平衡。

2024-06-03 22:53:21 927 2

原创 Kafka之Broker原理

本文介绍Broker服务器,主要讲了Broker中日志的存储,从大到小依次为Partition、Segment,副本机制的具体存储形式,是怎么进行负载均衡和容灾保障的,在Segment中我们直到了Segment是由一个Log文件和两个索引文件组成的,索引文件主要起的是一个提升查询效率的作用。随后当kafka中log文件过大的时候,kagka中提供了两种维度上的删除策略以及相同key去重压缩的compact策略。

2024-06-03 20:53:37 1448 1

原创 Kafka之Producer原理

本文主要是介绍了kafka生产者端的一些原理,先是从源码出发,介绍了生产者发送消息到Broker经历的一系列过程:先是创建了一个sender线程,然后在发送消息的过程中一次经过拦截器、累加器、分区器最后根据分区的批量消息是否新建或者满了来触发sender线程发送到Broker服务器中。

2024-06-03 16:58:14 1283 1

原创 MQ之初识kafka

MQ全称是Message Queue,直译过来叫消息队列,在消息的传输中用于保存消息的容器,主要是作为分布式应用之间实现异步通信的方式。主要由三部分组成,分别是 生产者、消息服务端和消费者生产者(Producer),是生产消息的一端,相当于消息的发起方,主要负责载业务信息的消息的创建。消息服务端(Server),是处理消息的单元,本质就是用来创建和保存消息队列,它主要负责消息的存储、投递以及跟消息队列相关的附加功能。消息服务端是整个消息队列最核心的组成部分。第三个是消费者(

2024-06-03 13:40:35 674

原创 力扣之链表专题

力扣的链表专题,主要就是快慢指针的灵活运用,要学会合理的构建指针,构建空链表,以存储不同的链表节点,灵活运用链表的指向关系即可。

2024-06-01 21:17:10 898

原创 力扣之数组专题

数组专题的解题思路,画图,穷举解法,如遇到有重复循环条件的,可采用HashMap减少循环次数,提升时间复杂度。双指针解法,大部分问题都可以采用双指针进行画图 求解;数组本身特性的使用,可以先使用临时数组,然后再过渡到数组本身的使用身上。

2024-06-01 00:23:15 668

原创 Redis之分布式锁

我们直接在并发编程阶段学习过synchronized lock这些都是单机锁。什么是锁呢?就是我们有一些互斥资源,不能并行执行,需要一个东西来保证是串行执行的单机锁的弊端如图,有3个独立的订单服务,4个用户并发从客端访问,用户12访问订单服务1,由于单机锁,所以可以有一个用户能够进行支付操作,用户3 用户4分别进入订单服务2 订单服务3 也能够进行支付操作,因此我们想让4个用户在一个时间内只有一个用户能够进行支付操作,单机锁就无法做到所以就引入了分布式锁。

2024-05-31 00:14:55 1289

原创 Redis之常用实战场景

采用RDB或者不持久化,就会有数据丢失,因为是手动或者配置以快照的形式来进行备份。解决: 启用AOF,以命令追加的形式进行备份,但是默认也会有1s丢失,这是在性能与数据安全性中寻求的一个最适合的方案,如果为了保证数据一致性,可以将配置更改为always,但是性能很慢,一般不用。

2024-05-30 14:47:18 870

原创 Redis之持久化、集群

redis是内存型数据库,因此每次机器关机都会清理内存,因此,要想保证redis的可用性,就需要持久化技术,redis持久化分为RDB快照和AOF追加两种形式;但是为了高可用,流量的分发以及为了应对redis挂了之后的可用性,引入了主从,主从之间就又设计到了数据的全量同步和增量同步;随后,为了更进一步的将主从切换智能化,提出了sentinel哨兵模式,可用监控主的状态,采用一定的策略,保证主挂了以后从可以升级为主;

2024-05-29 23:40:26 921

原创 Redis之内存管理过期、淘汰机制

用lrulock与redisObject.lru进行比较,因为Lrulock只获取了当前秒单位时间的后24位,所以肯定有个轮询所以,我们会用lrulock跟redisObject.lru进行比较,如果lrulock>redisObject.lru,那么我们用lrulock-redisObject.lru,否则lrulock+(24bit的最大值-redisObject.lru),得到的lru越小,那么返回的数据越大,相差越大的越优先会被淘汰!

2024-05-29 17:55:05 826

原创 Dubbo生态之初识分布式事务

传统的关系型数据库只能保证单个数据库中多个数据表的事务特性。一旦多个SQL操作涉及到多个数据库,这类的事务就无法解决跨库事务问题。在传统架构下,这种问题出现的情况非常少,但是在分布式微服务架构中,分布式事务的问题变得更加突出。举例,假设我们要涉嫌下面电商系统中的支付功能。分析: 上图中有3个服务 支付服务、资金服务和红包服务当用户发起支付时,就会涉及到几个事务操作。

2024-05-28 23:36:04 1095

原创 Dubbo生态之深度分析sentinel的流量控制

sentinel是一种系统的保护组件,其提供了限流和熔断,并支持各种策略的配置,开发者可根据具体场景选择合适的策略方式,灵活可扩展,并且sentinel易集成sprigboot,dubbo,nacos等组件,集成度高,还提供了可视化看板供开发者实时监控流量治理情况。

2024-05-28 18:19:40 1061

原创 Dubbo生态之sentinel限流

sentinel除了本身功能的丰富性,还可以集成不同的组件实现流量的控制,同时还能够针对不同维度,不同的指标来控制,并且它还能通过dashboard进行整体流量的管理和监控,这样对我们的整个维护来说会更加友好。核心的两个功能是限流和熔断,本篇只是介绍了限流的使用,后续介绍熔断。限流核心的两个东西是规则和资源,就是说我针对这个资源要通过什么样的规则来实现这个资源的保护。所以,在sentinel中要强化的两个点就是flowrule和resource,resource可以是我们的应用、接口、方法等。

2024-05-27 00:24:40 947

原创 Dubbo生态之nacos

nacos集成dubbo做动态配置管理,其实本质上就是Spring boor集成nacos.只是多了一个Dubbo作为RPC服务通信,其实相当于就是Springboot这个生态下集成dubbo以及其它各个组件来实现微服务架构下的服务治理需求真正来说,DUBBO组件本身并没有提供动态配置管理集成的能力。

2024-05-26 17:25:02 942

原创 Mysql之主从同步

Mysql要去保证高可用,或者去分担请求压力,一般会去主从部署,读写分离。写库只负责写,而读库更多的去承担读的请求,从库不写数据,数据从主库同步,那么到底是怎么同步的呢?同步,一定十把数据同步给从,它得有个载体,比如redis里面有rdb文件,在Mysql里面充当这个载体得就是BinLog.BinLog又称二进制文件,属于Mysql Server层去记录得,所以,不管是什么存储引擎进行的数据存储,如果binLog开启,都会进行记录。二进制日志包含描述数据库更改如表创建操作或表数据更改的事件。

2024-05-26 15:20:10 988

原创 Mysql之事务

ACID是数据库的一个设计原则,其目的就是尽可能的保证数据的可靠性。Innodb存储引擎就是严格遵照了ACID模型。那么Innodb是怎么做到ACID的呢?所谓原子性,就是我们的多个操作是一起执行的,多个或者单个操作语句都是一个事务,来保证用户想要一起提交哪些语句、或者回滚哪些语句.主要是commit 、rollback、 autocommit来保证原子性Consistency(一致性):所谓一致性,就是保证数据的一致,也就是保证数据不要丢失,不会因为突然的断电等导致数据与想要的数据不一致。

2024-05-26 00:22:20 1037

原创 Mysql之InnoDB索引

索引用于快速查找具有特定列值的行。如果没有索引,MySQL必须从第一行开始,然后读取整个表以找到相关的行。表越大,花费就越多。如果表中有相关列的索引,MySQL可以快速确定数据文件中间要查找的位置,而不必查看所有数据。这比按顺序读取每一行要快得多。我们来看一个案例,假设我有一个50w数据的表没有索引的情况下我的查询速度。当我为product_price字段建立索引后的查询速度那么索引究竟是怎么提升性能的呢?InnoDB。

2024-05-25 18:13:05 655

原创 Mysql之Innodb存储引擎

innodb作为一个存储数据的引擎;利用了表空间,分段分区分页的思想对数据进行管控;并且采用了内存缓冲池的机制减少IO,提升数据交互的效率;但是就可能造成两处数据的不一致,形成脏页,innodb就又采用了双写机制,提前做好备份,能够应该故障和灾难时,数据的不一致性问题。但是这解决了更改的性能,更改之前还需要从磁盘中拿,于是innodb又提出了change-buffer(更改缓冲区),改了先放内存,下次用了再同步。当然,这些都是采用了异步刷盘的思想,如果,刷盘之前就宕机了呢?

2024-05-25 00:40:49 1198

原创 Mysql之基本架构

mysql是一种关系型数据库,由表结构来存储数据与数据之间的关系,同时为sql(结构化查询语句)来进行数据操作。sql语句进行操作又分为几个重要的操作类型DQL: Data Query Language 数据查询语句DML: Data Manipulation Language 添加、删除、修改语句DDL: Data definition Language 数据库结构操作DCL:权限控制语句TCL: 事务相关 比如commit/savepoint、rollback。

2024-05-24 21:48:27 665

原创 Dubbo生态之dubbo功能

dubbo具有哪些功能呢?我们要根据dubbo的架构和本质是用来干什么的来思考?dubbo是一个协议,那么我们前后端交互的整体流程就是1.后台项目启动,项目的启动就伴随着对象的自动注入,那么,引用了dubbo就肯定会到注册中心上检查我们引用的dubbo服务接口在不在,有没有注入成功。也就是。

2024-05-23 20:23:00 244

原创 Dubbo生态之初识dubbo协议

a.客户端调用客户端Sub(client stub).这个调用是在本地b.客户端stub会将要传输的参数进行包装,并通过系统调用发送到服务端机器。打包的过程就叫做序列化。(常见的方式有:XML、JSON、二进制编码)c.客户端本地操作系统发送信息至服务器。(可通过自定义TCP协议或HTTP传输)d.服务器系统将信息传送至服务端stub(server stub)e.服务端stub(server stub)解析信息。该过程叫反序列化。

2024-05-23 18:07:30 1030

原创 JVM之性能优化

由博客我们已经了解到了数据存储是在方法区和堆区,而堆区的使用更为频繁。堆区有什么呢?老年代、新生代、GC。因此JVM性能优化,优化什么?我们猜想一下,新生代的大小设置;老年代的大小设置;新生代到老年代的阈值设置;GC算法;大对象的存放阈值;无外乎是这么几种,于是我们带着这么些个问题来进一步探讨。

2024-05-23 00:03:00 928

原创 JVM之垃圾回收

java程序中的对象实例、变量等都需要在JVM中进行存储,而对于Java的一个进程来说,每一次查询操作都是一次线程,在若干多个线程中,有许许多多的对象实例存活的生命周期是很短的,JVM作为一个有限的内存空间,如何合理利用,那么就是把这些信息主要存储在方法区和堆栈中,而堆栈中存储的大部分实例对象都是很短的生命周期的,因此,如何有效的清理掉无用的实例对象就是GC所考虑到的问题。两个确定垃圾对象原则(3.1),3个垃圾收集方法论(3.2),常见的5种垃圾收集算法(以吞吐量和停顿时间作为衡量指标)。

2024-05-22 21:39:34 825

原创 JVM之加载class文件

一个java程序的执行,首先经历编译阶段由.java文件编译为16进制class文件并存放在磁盘或IO设备中,然后JVM可以适用于各个操作系统,将class文件编译为CPU可以运行的二进制文件。JVM首先会经过类加载器,将类名接口名、静态变量、常量等进行初始化并加载到内存中用二进制表示,存储在运行时数据区的方法区中,java代码中的实例对象,全局变量,字符串常量等存储在堆栈中,线程共享;

2024-05-22 00:49:19 1378 1

原创 Redis数据结构扩容源码分析

1.当没有子进程在进行RDB或者AOF时,已使用的数量大于等于hash表的size时就发生扩容;2.当有子进程在进行EDB或者AOF时,已使用的数量需要大于hash表size的5倍时才进行扩容。

2024-05-12 18:27:13 724 2

原创 Redis不同数据类型value存储

redis中String的底层没有用c的char来实现,而是使用SDS数据结构( char buf[])。:浪费空间1.c字符串不记录自身的长度,所以获取一个字符串长度的复杂度是O(N),但是SDS记录分配的长度alloc,已使用长度len,获取长度的复杂度为O(1)。比如,为char,必须一个个遍历,直到遍历到\0,字符串越长,那么速度越慢2.可以减少字符串修改带来的内存重分配次数字符串更改必须要先申明内存,否则会导致内存溢出。

2024-05-10 23:43:45 938

原创 Redis的数据类型及使用场景

redis起初主要就是为了解决性能问题的,那么redis为什么快?基于内存操作的,所以操作不需要跟磁盘进行交互,单次的执行会很快命令执行是单线程 因为基于内存操作 单次执行时间反而比线程切换的时间快Redis本身就是一个k-v结构,类似hashmap 所以查询性能是接近O(1)的底层的数据结构 比如说跳表、sds(空间换时间)网络模型 IO多路复用以下简单介绍redis的一些常见数据类型以及可以使用到的应用场景。

2024-05-06 22:40:54 673

原创 并发编程之线程池的设计和原理

线程池中的核心线程是延迟初始化的先初始化核心线程调用阻塞队列的方法,把task存进去如果true,说明当前的请求量不大,核心线程就可以搞定false,增加工作线程(非核心线程)如果添加失败,说明当前的工作线程数量达到了最大的线程数,直接调用拒绝策略// 前3位记录运行状态 后29位记录线程数// 1.判断当前工作线程数是否小于核心线程数(延迟初始化)if (addWorker(command, true)) // 添加工作线程,并执行任务return;// 2.添加到阻塞队列中。

2024-05-02 22:09:36 864 2

原创 并发编程之线程通信及Condition的原理分析

1.线程的通信是基于在同一个锁下,且线程之间存在竞争,并且还需要有一个共享的资源,彼此之间基于共享资源来进行交互的一种通信方式。2.wait/notify是基于synchronized同步锁实现的3.Condition是J.U.C中的实现,基于Lock锁。

2024-04-23 00:01:22 692 1

原创 并发编程之ConcurrentHashMap源码分析

1. 存在线程竞争的table初始化、赋值以及扩容、数据转移处采用细粒度的CAS操作提升并发效率,整体主要是CAS机制和同步代码块结合使用2. 多线程并发协助扩容和数据转移,在数据转移处,采用多线程并发协助转移各个不同的分段区间,来提升table扩容时数据迁移的效率3.数据迁移时的链表采用高低位快速迁移的方法提升效率。

2024-04-20 22:33:10 570

原创 并发编程之ThreadLocal使用及原理

1.ThreadLocal主要是为了线程安全,避免多线程的资源共享,线程间的资源互相隔离2..ThreadLocal的注意点: ThreadLocal可能会造成内存泄漏,因此在每次使用完后,调用remove进行清理3.为什么ThreadLocal的key值是弱应用,而value值是强引用?在ThreadLocalMap初始化时已经说明了key值为什么要采用弱引用,那么value值为什么不能设置为弱引用呢。

2024-04-14 23:00:50 934

原创 设计模式之委派模式

委派模式又叫委托模式。它的基本作用就是负责任务的调度和任务分配,将任务的分配和执行分离开来。可以看作一种特殊情况下的静态代理的全权代理不属于GOF 23种设计模式之一属于行为型模式。

2024-03-18 23:37:01 443

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

将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 属于结构型设计模式。

2024-03-17 22:33:30 574

原创 设计模式之原型模式

从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节。

2024-03-17 17:53:52 458

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

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

2024-03-17 16:50:25 417

空空如也

空空如也

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

TA关注的人

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