自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式事务的原理

​背景随着微服务架构的普及,业务系统被拆分为多个独立的服务,每个服务可能拥有独立的数据库。当一个业务操作需要跨多个服务或数据库时,传统单机事务无法满足需求,分布式事务应运而生。​定义分布式事务是指 ​跨多个独立资源(如数据库、服务、消息队列)​的操作序列,这些操作需要满足 ​ACID 特性​(原子性、一致性、隔离性、持久性),以确保数据的一致性。分布式事务的核心是通过 ​协调多节点操作实现数据一致性,其设计需在 CAP 理论与业务场景间权衡。

2025-03-10 21:06:33 718

原创 Seata 核心定位和设计理念

Seata 通过 ​标准化事务模型和 ​分层架构设计,显著降低了分布式事务的开发门槛。开发者可根据业务特性选择合适模式:AT 适合快速落地常规场景,TCC/SAGA 满足金融级严苛需求,XA 则延续传统数据库强一致性优势。随着云原生技术的普及,Seata 正朝着 ​轻量化与 ​智能化方向演进,成为微服务架构下数据一致性的基石型组件。

2025-03-07 21:04:47 1045

原创 常见的限流算法有哪些?

限流算法的核心目标是在系统过载前保护服务可用性。固定窗口和滑动窗口基于时间窗口统计,令牌桶和漏桶则通过速率控制实现限流。实际应用中常结合Redis实现分布式限流,并根据业务场景选择算法。例如,API网关可混合使用滑动窗口(精准控制)和令牌桶(应对突发),达到平衡稳定性和灵活性的效果。

2025-03-06 20:59:59 562

原创 常用的分布式ID设计方案

分布式ID设计需权衡性能、有序性、可用性和复杂度。Snowflake及其衍生方案(如Leaf)是通用性最强的选择,而号段模式适合数据库友好的场景。最终选型应基于业务实际需求,结合团队技术栈和运维能力,确保系统的稳定性和扩展性。

2025-03-05 21:07:16 1041

原创 服务降级的理解

服务降级(Service Degradation)是分布式系统在高并发、资源不足或依赖服务故障时,的一种容错机制。其核心目标是。

2025-03-04 20:46:00 1072

原创 分布式和微服务的理解

分布式系统是由多台计算机(节点)通过网络协同工作,对外表现为一个统一整体的系统。其核心目标是通过。

2025-03-03 20:46:04 965

原创 nginx的作用和应用场景

Nginx 凭借其高性能、模块化设计和灵活的配置,成为现代 Web 架构的核心组件。无论是作为静态资源服务器、反向代理,还是负载均衡器、API 网关,Nginx 都能显著提升系统的扩展性、安全性和响应速度,适用于从小型网站到大型分布式系统的多种场景。

2025-03-02 21:40:52 1162

原创 Nacos数据同步原理解析

优先保证可用性,通过 Distro 协议实现最终一致性,适合高频变更的服务注册场景。

2025-02-28 21:00:03 424

原创 关于“你对SpringCloud的理解”

Spring Cloud 是一套功能强大、生态丰富的微服务框架,它为开发者提供了一站式的分布式系统解决方案,涵盖了服务治理、配置管理、通信等多个方面,能够帮助企业快速、高效地构建和管理微服务架构的应用系统,在当今的分布式系统开发领域中占据着重要的地位,是推动企业数字化转型和创新的重要技术力量。

2025-02-27 20:54:28 377

原创 IO 和NIO有什么区别?

特性IONIO阻塞模型阻塞式非阻塞式数据结构流(单向)通道(双向) + 缓冲区多路复用不支持支持(Selector 管理多个 Channel)线程模型一连接一线程单线程处理多连接适用场景低并发、大数据量(如文件传输)高并发、小数据量(如即时通讯服务器)高级特性无内存映射文件、零拷贝IO适合简单的阻塞式任务,开发简单但资源消耗高。NIO在需要高并发和非阻塞处理时优势明显,但需处理更复杂的 API 和边界条件。选择时需根据具体场景权衡。

2025-02-26 21:01:44 976

原创 什么是可重入,什么是可重入锁? 它用来解决什么问题?

可重入指的是。

2025-02-25 20:49:28 1009

原创 Mysql 主从集群同步延迟问题怎么解决

MySQL 主从集群同步延迟是一个常见的问题,它可能会导致从库上的数据与主库不一致,影响业务的正常运行。

2025-02-24 20:33:01 636

原创 索引有哪些缺点以及具体有哪些索引类型

索引类型适用场景核心缺点B-Tree范围查询、高基数字段前缀模糊查询无效,维护成本高哈希等值查询、内存表不支持范围查询,哈希冲突风险全文文本搜索分词复杂度高,存储占用大位图低基数字段、OLAP高并发写入性能差空间索引地理数据仅支持特定空间操作建议优先为高频查询条件建立索引,避免过度索引。定期监控索引使用率,删除冗余索引。组合索引需遵循最左匹配原则,合理安排字段顺序。

2025-02-21 20:55:54 953

原创 Redis 存在线程安全问题吗?为什么?

单线程模型Redis 使用单个线程处理所有客户端请求,包括读写操作、持久化等。单线程避免了多线程环境中的竞态条件和锁争用问题。线程安全的操作由于单线程模型,Redis 的所有操作都是原子性的,无需担心线程安全问题。例如,INCRDECRLPUSHRPUSH等操作在单线程中都是原子的。多线程模块从 Redis 6.0 开始,引入了多线程 I/O,用于处理网络 I/O,但核心命令执行仍然是单线程的。多线程 I/O 提升了网络请求的处理能力,但命令执行依然是线程安全的。Lua 脚本。

2025-02-20 20:47:20 640

原创 SpringBean生命周期的执行流程

public void customDestroy() { /* 自定义销毁逻辑 */ }public void customInit() { /* 自定义初始化逻辑 */ }public void preDestroy() { /* 销毁前逻辑 */ }以下是其执行流程的详细总结(以。public void destroy() { /* 销毁逻辑 */ }public void init() { /* 初始化逻辑 */ }调用 Bean 的构造函数(或工厂方法),创建 Bean 的实例对象。

2025-02-19 20:44:28 819

原创 Spring Boot 中自动装配机制的原理

使用 @Configuration 注解创建配置类。在配置类中定义需要自动配置的 Bean。使用 @Conditional 注解族控制 Bean 的注册条件。在 META-INF/spring.factories 文件中注册自定义的自动配置类。Spring Boot 的自动装配机制通过条件化配置和依赖管理,简化了 Spring 应用的开发流程。理解其原理和机制有助于开发者更好地使用 Spring Boot 构建高效、灵活的应用。

2025-02-18 20:47:45 907

原创 Spring 是如何解决循环依赖问题的?

Spring 通过三级缓存提前暴露未初始化的 Bean 引用,解决了单例 Bean 的循环依赖问题。核心在于将实例化与初始化分离,允许“未完成”的 Bean 被引用,最终通过依赖注入完成闭环。

2025-02-17 20:17:15 425

原创 空间复杂度O(m) O(n) O是什么,m是什么,n是什么

和哈希函数数量,布隆过滤器可以在极小的内存占用下(如 1MB)处理海量数据(如 100 万元素),而传统哈希表可能需要数百 MB 内存。是算法复杂度分析中的符号,用来描述数据结构或算法在不同输入规模下对内存的消耗趋势。public void add(T item) { /* 向位数组中插入元素 */ }// 位数组,长度 m。:HashSet 内部通常使用哈希表(Hash Table)实现,存储每个元素的引用。,即描述算法或数据结构的资源消耗(时间或空间)每个元素需要存储其实际内容(如对象地址或值)。

2025-02-14 20:47:42 814

原创 布隆过滤器的原理和应用场景,解决缓存穿透

这和上面提到的hashcode判定原理是一样的,相同hashcode的字符串会存储在一个index,删除时,是将某个index移除,此时,就可能移除拥有相同hashcode的不同字符串,细品~高效地插入和查询,占用空间少,返回的结果是不确定的,一个元素如果判断结果为存在,它不一定存在;不存在时,一定不存在。组成,用来判断某个数据是否存在,它和HyperLogLog一样,不是那么的精准,存在一定的误判概率。,请求先在布隆过滤器中判断,如果布隆过滤器不存在时,直接返回,不再反问Redis和MySQL。

2025-02-13 20:46:37 839

原创 springBoot开发步骤和知识点

Java17Maven、IDEASpring使用commons-logging作为内部日志,但底层日志实现是开放的。可对接其他日志框架。spring5及以后 commons-logging被spring直接自己写了。支持 jul,log4j2,logback。SpringBoot 提供了默认的控制台输出配置,也可以配置输出为文件。logback是默认使用的。虽然日志框架很多,但是我们不用担心,使用 SpringBoot 的默认配置就能工作的很好。

2025-02-06 10:12:24 634

原创 RabbitMq入门

MQ(message queue),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。Producter-Consumer:生产者-消费者Broker:接收和分发消息的应用,RabbitMQ Server(RabbitMQ服务器)就是Message Broker(消息实体)

2025-02-06 10:09:42 1044

原创 duoker安装

tip:如果重启了服务器,可能有些容器会启动失败。所有程序都可运行成功,并且不会丢失数据。创建自定义网络,实现主机名作为稳定域名访问。暴露5672和15672端口。使用 CentOS 7.9。单密码模式:123456。默认utf8mb4字符集。持久化数据到MySQL。你的ip:15672。nacos配套数据库。你的ip:13306。

2025-02-06 10:03:16 1049

原创 前端工程化

官网:https://cn.vitejs.dev快速创建前端项目脚手架统一的工程化规范:目录结构、代码规范、git提交规范 等自动化构建和部署:前端脚手架可以自动进行代码打包、压缩、合并、编译等常见的构建工作,可以通过集成自动化部署脚本,自动将代码部署到测试、生产环境等;v-onv-bindv-slotAxios 是一个基于 promise 的网络请求库,可以用于浏览器和 node.jsAPI测试服务器:Vite App。

2025-02-06 10:01:26 701

原创 springCload快速入门

Nacos 快速开始 | Nacos 官网Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。OpenFeign 是一个声明式远程调用客户端;随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel以流量为切入点,从流量控制、流量路由、熔断降级、系统自适应过载保护、热点流量防护等多个维度保护服务的稳定性。丰富的应用场景。

2025-02-02 21:28:36 1441 1

原创 vue项目创建命令

vue create -p dcloudio/uni-preset-vue [项目名称]使用vue cli : vue2和vue3项目。vue create [项目名称]创建uniapp项目 vue2。创建vue-ts项目vue3。

2025-01-06 15:23:57 188

原创 MySQL的mvcc原理和底层

MVCCMVCC,全称,即多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。mvcc - @百度百科MVCC在中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读在学习 MVCC 多版本并发控制之前,我们必须先了解一下,什么是 MySQL InnoDB 下的当前读和快照读?当前读像 select lock in share mode (共享锁update;

2024-12-05 20:34:55 941

原创 MySQL中SQL语句的执行过程详解

MySQL的分层体系结构使其具有高度的灵活性和可扩展性。每一层各司其职,共同实现高效的数据管理和操作。通过这种结构,MySQL不仅可以提供高效的查询和数据存储,还能通过不同的存储引擎满足各种应用场景的需求。

2024-11-29 19:51:50 2209

原创 java 线程池详解(一)

顾名思义,线程池就是管理一系列线程的资源池,其提供了一种限制和管理线程资源的方式。每个线程池还维护一些基本统计信息,例如已完成任务的数量。降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

2024-11-22 19:11:30 908

原创 java CAS详解

在 Java 中,CAS 通过Unsafe类中的native方法实现,这些方法调用底层的硬件指令来完成原子操作。由于其实现依赖于 C++ 内联汇编和 JNI 调用,因此 CAS 的具体实现与操作系统以及 CPU 密切相关。CAS 虽然具有高效的无锁特性,但也需要注意 ABA 、循环时间长开销大等问题。

2024-11-19 19:12:42 654

原创 java bigDecimal 详解

BigDecimal可以实现对浮点数的运算,不会造成精度丢失。通常情况下,大部分需要浮点数精确运算结果的业务场景(比如涉及到钱的场景)都是通过BigDecimal来做的。浮点数之间的等值判断,基本数据类型不能用 == 来比较,包装数据类型不能用 equals 来判断。具体原因我们在上面已经详细介绍了,这里就不多提了。想要解决浮点数运算精度丢失这个问题,可以直接使用BigDecimal来定义浮点数的值,然后再进行浮点数的运算操作即可。// 0。

2024-11-14 19:32:13 865

原创 java 代理模式详解

在 Java 动态代理机制中接口和Proxy类是核心。Proxy,这个方法主要用来生成一个代理对象。Class<?......loader:类加载器,用于加载代理对象。interfaces: 被代理类实现的一些接口;h: 实现了接口的对象;要实现动态代理的话,还必须需要实现来自定义处理逻辑。当我们的动态代理对象调用一个方法时,这个方法的调用就会被转发到实现接口类的invoke方法来调用。/*** 当你使用代理对象调用方法的时候实际会调用到这个方法*/invoke()proxy。

2024-11-13 19:57:08 1111

原创 vue2入门

以上内容涵盖了 Vue 2 的基础概念,包括安装、创建 Vue 实例、模板语法、计算属性、事件处理、条件渲染和循环渲染。通过这些示例,你可以初步了解 Vue 2 的工作方式和一些基本用法。

2024-11-12 08:10:48 321

原创 java 反射机制详解

如果说大家研究过框架的底层原理或者咱们自己写过框架的话,一定对反射这个概念不陌生。反射之所以被称为框架的灵魂,主要是因为它赋予了我们在运行时分析类以及执行类中方法的能力。通过反射你可以获取任意一个类的所有属性和方法,你还可以调用这些方法和属性。

2024-11-11 19:15:20 588 1

原创 java 值传递详解

Java 中将实参传递给方法(或函数)的方式是值传递如果参数是基本类型的话,很简单,传递的就是基本类型的字面量值的拷贝,会创建副本。如果参数是引用类型,传递的就是实参所引用的对象在堆中地址值的拷贝,同样也会创建副本。

2024-11-10 22:30:40 952

原创 java基础(I/O流 | 语法糖 篇)

语法糖(Syntactic sugar)代指的是编程语言为了方便程序员开发程序而设计的一种特殊语法,这种语法对编程语言的功能并没有影响。实现相同的功能,基于语法糖写出来的代码往往更简单简洁且更易阅读。举个例子,Java 中的for-each就是一个常用的语法糖,其原理其实就是基于普通的 for 循环和迭代器。String[] strs = {"JavaGuide", "公众号:JavaGuide", "博客:https://javaguide.cn/"};

2024-11-08 19:21:20 459

原创 java基础(序列化篇)

如果我们需要持久化 Java 对象比如将 Java 对象保存在文件中,或者在网络传输 Java 对象,这些场景都需要用到序列化。对于 Java 这种面向对象编程语言来说,我们序列化的都是对象(Object)也就是实例化后的类(Class),但是在 C++这种半面向对象的语言中,struct(结构体)定义的是数据结构类型,而 class 对应的是对象类型。

2024-11-07 18:59:28 816

原创 java基础(反射和SPI篇)

Annotation(注解) 是 Java5 开始引入的新特性,可以看作是一种特殊的注释,主要用于修饰类、方法或者变量,提供某些信息供程序在编译或者运行时使用。注解本质是一个继承了AnnotationJDK 提供了很多内置的注解(比如@Override),同时,我们还可以自定义注解。

2024-11-06 19:52:52 387

原创 java基础(泛型篇)

是 JDK 5 中引入的一个新特性。使用泛型参数,可以增强代码的可读性以及稳定性。并且,原生List返回类型是Object,需要手动转换类型才能使用,使用泛型后编译器自动转换。

2024-11-05 22:28:13 259

原创 springBoot+shiro权限管理

SpringBoot与Shiro的整合为Java Web应用提供了强大的权限管理功能。Shiro是一个轻量级的安全框架,提供了认证、授权、加密和会话管理等功能。与Spring Security相比,Shiro更加简洁和易于使用。在SpringBoot项目中,Shiro的集成主要涉及到配置安全管理器(SecurityManager)、自定义Realm、配置Filter以及编写相关的Controller和Service层代码。Realm是Shiro的核心组件之一,用于进行权限信息的验证,我们需要实现自己的Rea

2024-11-04 17:15:33 565 1

原创 java基础(异常篇-下)

trycatchcatchfinallycatchfinallyfinallytrycatchreturnfinally当 try 语句和 finally 语句中都有 return 语句时,try 语句块中的 return 语句会被忽略。这是因为 try 语句中的 return 返回值会先被暂存在一个本地变量中,当执行到 finally 语句中的 return 之后,这个本地变量的值就变为了 finally 语句中的 return 返回值。中有明确提到:If thetryreturnjsr。

2024-11-03 16:42:07 612

空空如也

空空如也

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

TA关注的人

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