自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 对MVCC的理解

MVCC即Mutil-Version Concurrency Control(多版本并发控制),用于保证并发快照读下的读已提交级别和可重复读级别。

2025-03-11 20:49:38 549

原创 分布式事务的原理

分布式事务是指在分布式系统中,涉及多个节点或服务之间的数据操作,需要保证这些操作要么全部成功提交,要么全部回滚,以维持数据的一致性。

2025-03-10 21:00:33 580

原创 fail-safe 机制与 fail-fast 机制分别有什么作用

Fail-safe 和 fail-fast 是两种应对系统故障或错误的不同机制,主要用于处理迭代过程中可能发生的并发修改、异常或其他不可预期的错误。它们的作用和实现方式各有不同,适用于不同的场景。

2025-03-08 17:15:47 350

原创 你对Seata的理解

*事务协调者(TC)**主要负责管理全局的分支事务的状态,用于全局性事务的提交和回滚。Seata的主要特点是无侵入以及高性能。它对业务无侵入,可以减少技术架构上的微服务化所带来的分布式事务问题对业务的侵入,同时高性能则是减少分布式事务解决方案所带来的性能消耗。**资源管理器(RM)**用于分支事务上的资源管理,向TC注册分支事务,上报分支事务的状态,接收TC的命令来提交或者回滚分支事务。在Seata的事务处理中主要有三个重要的角色:事务的协调者(TC)、事务的管理者(TM)和事务的作业管理器(RM)。

2025-03-07 21:02:04 223

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

提示:这里对文章进行总结:例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

2025-03-06 21:00:25 368

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

它将 64 位划分为不同部分,包含 1 位符号位(固定为 0)、41 位时间戳(毫秒级)、10 位工作机器 ID(可支持 1024 个节点)和 12 位序列号(同一毫秒内生成不同 ID)。二是 “segment(号段)” 模式,服务端一次性分配一个号段给客户端,客户端在号段内自行生成 ID,用完后再向服务端申请新号段。:利用关系型数据库(如 MySQL)的自增字段特性,每插入一条数据,ID 自动递增。:利用 Redis 的INCR或INCRBY命令,以原子操作的方式递增一个键的值,以此作为 ID。

2025-03-05 20:34:44 1103

原创 你对服务降级的理解

服务降级其实就是降低服务的能力等级。在高并发流量下,因为系统资源有限,导致系统无法为高并发流量提供稳定可靠的支撑。所以我们可以把一些非核心服务下掉,或者提供一些默认的处理结果,把这些计算资源腾出来给到核心服务去使用。从而保证核心服务的稳定运行。

2025-03-04 20:40:43 308

原创 分布式和微服务架构理解

举个易懂的例子,单体服务如果相当于一个快餐店,所有的服务员职责都是一样的,又要负责收银结算,又要负责做汉堡,又要负责端盘子,又要负责打扫,服务员之间不需要有交流,用户来了后,服务员从前到后负责到底。举一个招聘时一个同学来面试的例子。微服务更倾向于使用 Restful 风格的 API,轻量级的协议可以很好得支持跨语言开发的服务,可能有的微服务用 Java 语言实现,有的用 Go 语言,有的用 C++,但所有的语言都可以支持 Http 协议通信,所有的开发人员都能理解 Restful 风格 API 的含义。

2025-03-03 20:00:32 652

原创 nacos数据同步原理能说下吗

当有其他服务(服务消费者)订阅了某个服务(服务提供者)时,Nacos 服务端会将该服务的实例列表信息同步给订阅的服务消费者。这样,服务消费者就能获取到可用的服务提供者实例信息,从而进行服务调用。:当 Nacos 服务端的配置数据发生变化时,如管理员手动修改配置或者通过 API 更新配置,服务端会记录这些变更,并将变更信息推送给所有订阅了该配置的客户端。一旦发现某个实例不健康,服务端会及时将该信息同步给订阅的服务消费者,服务消费者在进行服务调用时就会避开该不健康实例,实现服务实例数据的动态更新和高可用。

2025-02-28 20:58:29 308

原创 你对 Spring Cloud 的理解

不过,Spring Cloud 也有一些局限性,例如组件众多导致系统复杂度增加,对开发人员的技术要求较高;在大规模集群环境下,配置和管理成本会有所上升等。但总体而言,Spring Cloud 为微服务架构的快速开发和落地提供了便捷高效的途径,在企业级分布式系统开发中应用广泛。Spring Cloud 是一个基于 Spring Boot 的微服务架构开发工具集,为开发者提供了快速构建分布式系统的一系列解决方案,涵盖了服务发现、配置管理、熔断器、智能路由、微代理、控制总线等多个方面。

2025-02-27 20:58:51 202

原创 IO 和 NIO 有什么区别?

当有 IO 事件发生时,选择器会通知相应的线程去处理,大大提高了系统的并发处理能力,减少了资源的消耗。:通常使用阻塞式的通信模型,每个连接都需要一个独立的线程来处理,当并发连接数增多时,会创建大量的线程,这会消耗大量的系统资源,包括内存和 CPU 时间片,并且线程之间的上下文切换也会带来额外的开销,从而限制了系统的并发处理能力。:是阻塞式的 IO 操作。:适用于高并发、高性能的应用场景,如大型的网络服务器、即时通讯应用、大规模数据处理系统等,能够更好地利用系统资源,提高应用的性能和响应能力。

2025-02-26 20:35:54 396

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

可重入是指一个函数或代码段可以在其执行过程中被再次调用,且不会出现数据混乱或其他错误。也就是说,当函数在执行期间还未返回时,如果再次被调用,它能够正确地处理这种情况,不会因为多次调用而导致程序出现异常或产生不正确的结果。可重入锁是一种特殊的锁机制,它允许同一个线程对同一把锁进行多次获取。当一个线程获取了可重入锁后,在锁释放之前,该线程可以再次获取这把锁而不会被阻塞。可重入锁内部会维护一个计数器,用于记录线程获取锁的次数。每次线程获取锁时,计数器加 1;每次释放锁时,计数器减 1。

2025-02-25 20:54:53 315

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

主库的写入性能直接影响到同步延迟,因为从库必须等待主库的事务提交之后才能同步数据。优化主库的写入性能有助于减少延迟。从库的读取性能决定了从库应用的查询响应速度。如果从库的查询响应速度较慢,可能导致延迟积累。

2025-02-24 20:47:19 524

原创 ReentrantLock实现原理

通过类图我们发现了上篇文章中介绍的AQS的身影,该类继承自AQS,并有两个实现类FairSync、NonfairSync,这两个类分别是ReentrantLock的公平和非公平实现。公平锁和非公平锁的区别时,阻塞队列中存在其他阻塞线程,公平锁就插入阻塞队列尾部,非公平锁是在进行添加操作时都会进行一次锁竞争。eentrantLock是一个Java层面的锁的实现,也是我们常用的一个锁对象,是一个可重入的排他锁。ReentrantLock是Lock的一个实现类,实现了Lock中定义的锁应该具备的功能。

2025-02-22 17:20:01 720

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

索引的作用

2025-02-21 20:36:17 223

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

虽然redis6.0里面增加了多线程模型。但是增加的多线程模型只是用来处理网络的IO事件。对于指令的执行过程仍然是采用主线程来处理,所以说它不存在多个线程同时去执行操作指令的情况。为什么redis里面没有采用多线程来执行指令,有几方面的原因。从redis服务端层面,redis server本身是线程安全的key-value数据库,在redis server端执行指令的时候不需要任何的同步机制,它不会存在任何的线程安全的问题。

2025-02-20 19:48:38 184

原创 Spring Bean 生命周期的执行流程

Java 中的公共类称之为Java Bean,而 Spring 中的 Bean 指的是将对象的生命周期,交给Spring IoC 容器来管理的对象。所以 Spring 中的 Bean 对象在使用时,无需通过 new 来创建对象,只需要通过 DI(依赖注入),从 Spring 中取出要使用的对象即可。

2025-02-19 20:31:38 986

原创 SpringBoot的自动装配原理

自动装配是 Spring Boot 的核心功能之一,旨在根据项目的依赖和配置自动配置 Spring 应用的 Beans,避免繁琐的手动配置。这种机制通过条件注解(如等)实现,允许开发者以最小的配置量快速构建应用。创建 Maven 模块:定义项目结构。添加依赖:在 pom.xml 中添加所需的依赖。实现自动配置:创建自动配置类并使用条件注解。@Bean在pom.xml中,指定 Starter 的相关信息:</</</</开发者可以根据需要自定义自动装配配置,以满足项目的特定需求。

2025-02-18 20:43:03 712

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

Bean A 依赖于 Bean B,而 Bean B 又依赖于 Bean A,这样形成了一个循环。在构造器注入的情况下,Spring 无法解决这个问题,因为所有依赖必须在构造器执行之前就已经准备好。然而,在属性注入(setter注入)和字段注入(field注入)的场景中,Spring 可以通过三级缓存机制打破循环依赖。# 二、使用步骤Spring 使用三级缓存机制(singletonObjects、earlySingletonObjects、singletonFactories)来解决循环依赖问题。

2025-02-17 20:59:54 702

原创 Spring Boot 的约定优于配置,你的理解是什么?

约定优于配置” 指的是在 Spring Boot 框架中,对于常见的开发场景和需求,框架预先设定了一系列合理的默认配置和开发约定。开发者在大多数情况下只需遵循这些约定,无需手动编写大量繁琐的配置代码,框架就能自动完成相应的配置工作。只有当默认配置无法满足特定需求时,开发者才需要通过显式的配置来覆盖默认设置。

2025-02-14 20:42:55 1344

原创 布隆过滤器到底是什么东西?它有什么用

布隆过滤器(英语:Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定。链表、树、散列表(又叫哈希表,Hash table)等等数据结构都是这种思路。但是随着集合中元素的增加,我们需要的存储空间越来越大。同时检索速度也越来越慢,上述三种结构的检索时间复杂度分别为O(n),O(log n),O(1)。

2025-02-13 20:46:47 620

原创 SpringMVC

1.SpringMVC技术与Servlet技术功能等同,均属于web层开发技术,web程序大都基于三层架构实现2.如果所有的处理都交给Servlet来处理的话,所有的东西都耦合在一起,对后期的维护和扩展极为不利3.将后端服务器Servlet拆分成三层,分别是web、service和daoweb层主要由servlet来处理,负责页面请求和数据的收集以及响应结果给前端service层主要负责业务逻辑的处理dao层主要负责数据的增删改查操作。

2025-02-06 21:57:04 910

原创 双亲委派的机制

双亲委派机制(Parent Delegation Model)是一种类加载器的工作模式。在这种模式下,类加载器在加载类时,会先将加载请求委派给父类加载器处理,只有当父类加载器无法完成类加载时,子类加载器才会尝试加载该类。通过继承并覆盖loadClass方法,可以实现不使用双亲委派机制的类加载器。@Override// 不委派给父类加载器,直接加载类// 读取类文件的字节码= -1) {双亲委派机制通过递归委派机制确保了Java类加载的安全性、一致性和性能。

2025-01-07 20:00:29 900

原创 Web实时消息推送

推送的场景比较多,比如有人关注我的公众号,这时我就会收到一条推送消息,以此来吸引我点击打开应用。消息推送通常是指网站的运营工作等人员,通过某种工具对用户当前网页或移动设备 APP 进行的主动消息推送。消息推送一般又分为 Web 端消息推送和移动端消息推送。介绍优点缺点短轮询客户端定时向服务端发送请求,服务端直接返回响应数据(即使没有数据更新)简单、易理解、易实现实时性太差,无效请求太多,频繁建立连接太耗费资源长轮询与短轮询不同是,长轮询接收到客户端请求之后等到有数据更新才返回请求。

2025-01-03 19:43:37 954

原创 CND的工作原理

CDN全称是 Content Delivery Network/Content Distribution Network,翻译过的意思是内容分发网络。内容:指的是静态资源比如图片、视频、文档、JS、CSS、HTML。分发网络:指的是将这些静态资源分发到位于多个不同的地理位置机房中的服务器上,这样,就可以实现静态资源的就近访问比如北京的用户直接访问北京机房的数据。所以,简单来说,CDN 就是将静态资源分发到多个不同的地方以实现就近访问,进而加快静态资源的访问速度,减轻服务器以及带宽的负担。

2025-01-02 17:14:56 1809

原创 Mysql的事务隔离机制

它在保证数据相对一致性的同时,提供了较好的并发性能,适用于对数据实时性有一定要求,但对同一事务内数据多次读取的一致性要求不是特别严格的场景,如一些在线交易系统中的查询操作。它保证在一个事务执行期间,按照相同的查询条件进行查询时,不会出现新插入的符合条件的记录影响结果。不过,由于可能出现脏读问题,在实际应用中很少使用这个级别,除非对数据的实时性要求极高且可以容忍数据不一致的情况。如果没有适当的隔离机制,多个事务同时操作相同的数据可能会导致数据不一致的情况,如脏读、不可重复读和幻读。

2024-12-30 20:31:10 789

原创 MVCC的原理

MVCC,即Multi-Version Concurrency Control (多版本并发控制)。它是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。通俗的讲,数据库中同时存在多个版本的数据,并不是整个数据库的多个版本,而是某一条记录的多个版本同时存在,在某个事务对其进行操作的时候,需要查看这一条记录的隐藏列事务版本id,比对事务id并根据事物隔离级别去判断读取哪个版本的数据。

2024-12-28 15:15:30 864

原创 JVM内存结构

运行时常量池是方法区的一部分,一个有效的class​字节码文件中除了包含类的版本信息、字段、方法以及接口等描述信息外,还包含常量池表,用于存放各种字面量和对类型、域和方法的符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。每个线程都有自己的栈,栈中的数据以栈帧的格式存在,一个线程上正在执行的每个方法都有自己对应的一个栈帧,方法调用栈帧压栈,方法结束栈帧弹出。程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器, 存储指向下一条指令的地址,即将执行的指令代码。

2024-12-27 20:43:56 721

原创 JavaOOP基本思想

4:构造方法只能被new这个关键字调用,用于创建对象,每调用一次就创建一个对象。》5:构造方法之间相互调用,提供this关键字:格式this(参数列表)对象是根据类创建的一个具体实物,类中有什么方法,这个对象就具有什么功能。构造方法:每一个类中都至少有一个构造方法,构造方法是类用来创建对象用的。3:参数列表必须不同:可以是参数类型||参数顺序||参数个数不同都可以。》1:一个类中如果不写构造方法,默认有一个无参构造方法。一个类中有几个方法,方法名相同,就是方法重载。3:给对象的属性(即:成员变量)

2024-12-26 20:43:10 351

原创 MySQL中有几种锁

若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。表级锁的开销较小,加锁快,但由于其锁定粒度大,可能会导致并发度下降,特别是在写操作较多或者并发度较高的场景下。若事务T对数据对象A加上X锁,则事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的X锁。悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。索引记录锁,仅锁住索引记录。

2024-12-12 20:50:47 931

原创 JWT 身份认证优缺点

JWT 其中一个很重要的优势是无状态,但实际上,我们想要在实际项目中合理使用 JWT 做认证登录的话,也还是需要保存 JWT 信息。JWT 也不是银弹,也有很多缺陷,具体是选择 JWT 还是 Session 方案还是要看项目的具体需求。万万不可尬吹 JWT,而看不起其他身份认证方案。另外,不用 JWT 直接使用普通的 Token(随机生成的 ID,不包含具体的信息) 结合 Redis 来做身份认证也是可以的。

2024-12-09 20:43:27 1004

原创 JWT基础概念

JWT (JSON Web Token) 是目前最流行的跨域认证解决方案,是一种基于 Token 的认证授权机制。从 JWT 的全称可以看出,JWT 本身也是 Token,一种规范化之后的 JSON 结构的 Token。JWT 自身包含了身份验证所需要的所有信息,因此,我们的服务器不需要存储 Session 信息。这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。可以看出,JWT 更符合设计 RESTful API 时的「Stateless(无状态)」原则。

2024-12-06 18:49:57 865

原创 索引失效的场景有哪些?

当使用联合索引时,查询条件没有从最左索引列开始,或者跳过了索引中的列,那么索引可能会失效。例如,对于联合索引(sex, age, name),如果查询条件只包含了sex和name而没有age,那么索引可能不会被使用。当查询的数据量非常大,或者查询条件导致索引无法被有效使用时,数据库可能会选择进行全表扫描,此时索引会失效。例如,当变量采用的是times变量,而表的字段采用的是date变量时,或者相反情况,可能会导致索引失效。对于复合索引,如果查询条件只引用了非第一位置的索引列,那么索引可能不会被使用。

2024-11-28 20:54:05 355

原创 MySQL索引实现原理

MySQL中的索引是用于提高数据库查询效率的重要工具。

2024-11-26 20:49:43 1068

原创 MongoDB基础(二)

TTL 索引提供了一个过期机制,允许为每一个文档设置一个过期时间 expireAfterSeconds ,当一个文档达到预设的过期时间之后就会被删除。TTL 索引除了有 expireAfterSeconds 属性外,和普通索引一样。数据过期对于某些类型的信息很有用,比如机器生成的事件数据、日志和会话信息,这些信息只需要在数据库中保存有限的时间。

2024-11-25 20:07:16 872

原创 MongoDB基础(一)

是否需要大数据量的存储?MongoDB 支持分片集群,可以很方便地添加更多的节点(实例),让集群存储更多的数据,具备更强的性能。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一款非常流行的 文档类型数据库。插件式的存储引擎架构可以实现 Server 层和存储引擎层的解耦,可以支持多种存储引擎,如 MySQL 既可以支持 B-Tree 结构的 InnoDB 存储引擎,还可以支持 LSM 结构的 RocksDB 存储引擎。

2024-11-22 19:59:36 700

原创 Maven最佳实践

Maven 是一个强大的工具,可以简化 Java 项目的构建过程和依赖关系管理。通过遵循这些最佳实践和技巧,我们可以优化 Maven 的使用并改善我们的 Java 开发体验。请记住使用标准目录结构,有效管理依赖关系,利用不同环境的配置文件,并将项目与持续集成系统集成,以确保构建一致。

2024-11-21 19:45:20 945

原创 消息推送的详解

推送的场景比较多,比如有人关注我的公众号,这时我就会收到一条推送消息,以此来吸引我点击打开应用。消息推送通常是指网站的运营工作等人员,通过某种工具对用户当前网页或移动设备 APP 进行的主动消息推送。消息推送一般又分为 Web 端消息推送和移动端消息推送。移动端消息推送示例:Web 端消息推送示例:在具体实现之前,咱们再来分析一下前边的需求,其实功能很简单,只要触发某个事件(主动分享了资源或者后台主动推送消息),Web 页面的通知小红点就会实时的 +1 就可以了。

2024-11-13 21:00:47 1093

原创 MySQL的三大范式

3.部分函数依赖:如果A是一个属性组,则B属性值的确定需要依赖A属性组的某一些字段即可,例如学号和课程名称为一个属性组,那么学生姓名其实就只需要学号就可以确定。4.传递函数依赖:如果A属性(属性组),可以确定唯一个B属性的值,再通过B属性的值又可以唯一确定C属性的值,例如一个学号确定一个系名,一个系名对应一个系主任。5.主键:在一张表中,一个属性或者属性组,被其他所有属性完全依赖,则称这个属性为该码的表,比如上图的学号和课程名称组成的属性组。比如上图的姓名,完全依赖于学号。

2024-11-12 20:44:08 443

原创 什么是乐观锁和悲观锁

悲观锁是一种基于悲观态度的数据并发控制机制,用于防止数据冲突。它采取预防性的措施,在修改数据之前将其锁定,并在操作完成后释放锁定,以确保数据的一致性和完整性。悲观锁通常用于并发环境下的数据库系统,是数据库本身实现锁机制的一种方式。在悲观锁的机制下,当一个使用者要修改某个数据时,首先会尝试获取该数据的锁。如果锁已经被其他使用者持有,则当前使用者会被阻塞,直到对应的锁被释放。这种悲观的态度认为数据冲突是不可避免的,因此在修改数据之前先锁定数据,以防止冲突的发生。

2024-11-11 19:20:11 3982 1

空空如也

空空如也

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

TA关注的人

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