- 博客(34)
- 收藏
- 关注
原创 事务与mysql数据库锁的关系
锁是事务隔离性的 “实现工具”:事务需要隔离性来避免并发冲突,而锁通过 “互斥 / 共享” 规则,直接保障了隔离性(尤其是写操作的隔离);事务是锁的 “生命周期容器”:锁由事务创建,随事务提交 / 回滚释放,不存在 “脱离事务的锁”;隔离级别决定锁的 “使用策略”:低隔离级别(如读已提交)依赖 MVCC 减少锁开销,高隔离级别(如串行化)依赖强锁策略保障一致性,二者平衡 “隔离性” 和 “并发效率”;锁的粒度影响事务的 “并发能力”
2025-09-14 15:59:30
734
原创 http接口幂等性
选择合适的方案:查询操作天然幂等,无需额外处理;写操作根据业务选择令牌或唯一约束过期策略:幂等键需设置合理过期时间,避免存储空间无限增长异常处理:确保幂等控制逻辑的异常不影响正常业务流程分布式场景:必须使用 Redis 等分布式存储,避免单机存储导致的问题原子性保证:验证和业务操作需在同一事务中,或使用分布式锁确保原子性。
2025-09-07 20:13:22
298
原创 应用开发使用缓存
从前端到数据库,典型架构中涉及的缓存层次约为7-9 层浏览器缓存前端应用缓存网关 / 反向代理缓存应用本地缓存分布式缓存MyBatis 一级缓存MyBatis 二级缓存操作系统页缓存这些缓存从上层到下层依次作用,共同提升系统性能,减少底层数据库的访问压力。实际开发中需根据业务场景设计合理的缓存策略,避免缓存穿透、击穿、雪崩等问题。
2025-08-31 21:01:00
531
原创 阿里rocketMQ实现分布式事务
在分布式系统中,保证跨服务操作的数据一致性是一个核心挑战。阿里 RocketMQ 通过机制提供了分布式事务的解决方案,其核心思想是基于 "两阶段提交" 思想,通过半事务消息、本地事务执行、事务状态确认三个关键步骤,确保本地事务与消息发送的原子性。
2025-08-15 17:49:03
561
原创 mysql慢查询sql
在 MySQL 中,指的是执行时间超过预设阈值(通常由参数定义)的 SQL 语句。这类 SQL 会消耗大量数据库资源(如 CPU、IO、内存),是导致数据库性能下降的常见原因。以下从慢查询的识别、分析、常见原因及优化方法展开详细说明。
2025-08-11 09:02:18
837
原创 阻塞队列特性
自动阻塞:无需手动使用wait()notify(),减少并发错误。线程安全:内部实现同步,避免重复开发锁逻辑。灵活适配:不同实现类可满足有界 / 无界、优先级、定时等多样化需求。实际开发中,需根据场景选择合适的实现类(如需要固定容量选,线程池任务队列选。
2025-08-01 14:25:59
788
原创 Stream流
在 JDK 1.8 中,Stream API 是一个全新的抽象层,它允许你以声明式的方式处理数据集合(如列表、集合等)。Stream API 可以极大地提高代码的可读性和效率,尤其适合用于数据处理、过滤、映射和聚合等操作。
2025-07-25 17:23:54
413
原创 java反射
Java 反射机制是 Java 语言提供的一项强大功能,它允许程序在运行时检查和操作类、方法、字段等语言元素。通过反射,你可以在运行时获取类的信息,创建对象,调用方法,访问和修改字段,即使在编译时这些类或方法的具体信息还未知。
2025-07-21 08:47:33
294
原创 redis分布式锁
分布式锁是在分布式系统中控制多个进程对共享资源访问的一种机制。Redis 因其高性能和原子操作特性,成为实现分布式锁的常用工具。
2025-07-14 08:48:17
460
原创 java哨兵底层原理
的优化策略,通过引入特殊的标记对象来简化算法逻辑,减少边界条件的判断,从而提高执行效率。它使用一个双向循环链表结构,其中包含一个。这里虽然没有显式的哨兵节点,但链表末尾的 null 值实际上充当了哨兵的角色,终止遍历过程。Java 中的哨兵机制是一种强大的设计模式,通过引入特殊标记对象简化算法逻辑,提高执行效率。理解哨兵机制的底层原理,有助于编写更高效、更健壮的 Java 代码,特别是在处理复杂数据结构和并发场景时。:当弱引用对象被回收时,会将引用对象放入队列,队列末尾的 null 值可视为哨兵。
2025-06-13 18:00:01
419
原创 SpringBoot底层
Spring Boot 的自动装配是其核心特性之一,它能够让开发者在不进行大量手动配置的情况下,快速搭建起一个功能完整的应用程序。文件管理自动配置类,利用条件注解动态控制配置的生效,并确保用户配置的优先级高于自动配置。Spring Boot 会自动确定需要扫描的基础包,通常是主启动类所在的包及其子包。如果用户已配置,则自动配置类会跳过相应的 Bean 注册,避免覆盖用户配置。对自动配置类进行过滤,只保留符合条件的配置类(通过条件注解判断)。自动配置类会检查用户是否已提供相关配置(如自定义的。
2025-06-06 11:55:46
859
原创 jvm深层次理解
将内存分为两块,每次只使用一块,回收时将存活对象复制到另一块,清空原区域。(如虚拟机栈中的引用对象、静态变量引用的对象)为起点,遍历对象图,不可达的对象可被回收。将热点代码(频繁执行的方法或循环)编译为本地机器码,提高执行效率。标记存活对象,将其移动到内存一端,然后清除边界外的内存,避免碎片。所有对象实例和数组分配的内存区域,垃圾回收的主要区域。类加载时,先委托父类加载器尝试加载,失败后再由子类加载器自行加载。存储类信息、常量、静态变量等。方法区的一部分,存储编译期生成的常量和符号引用。
2025-05-23 17:58:23
931
原创 java并发编程线程锁
乐观锁并不会实际加锁,它是通过版本号机制或者 CAS(Compare-and-Swap)操作来实现并发控制的,这种锁适用于读多写少的场景。在 Java 中,锁的种类丰富多样,不同的锁适用于不同的场景。分段锁并非是一种具体的锁实现,而是一种锁的设计理念。在这种设计中,将数据分成多个段,每个段都有独立的锁,以此来提高并发性能。公平锁会按照请求锁的先后顺序来分配锁,这样能避免线程饥饿的情况发生;:当有其他线程尝试获取锁时,偏向锁会升级为轻量级锁,此时线程会通过自旋的方式来等待锁的释放,而不会进入阻塞状态。
2025-05-16 10:46:11
352
原创 多线程编程数据类型
在上述代码中,这里使用AtomicInteger来保证count变量在多线程环境下的原子性操作,无论有多少线程同时对其进行增减操作,都能保证数据的一致性,最终输出的count值一定是0。由于int类型的自增和自减操作不是原子性的,在多线程环境下会出现数据不一致的情况,最终输出的count值不一定是0。是线程安全的集合类,它在进行写操作时会创建一个新的数组来复制原数组的内容,然后在新数组上进行操作,这样就不会影响到其他线程对集合的读取操作,从而保证了多线程环境下的安全性。
2025-05-09 15:29:48
457
原创 java多并发、多线程安全
在 Java 多并发编程中,多线程安全是一个重要的问题,当多个线程同时访问共享资源时,如果处理不当,可能会导致数据不一致、脏读、幻读等问题。下面为你介绍几种保证多线程安全的方法,并给出相应的代码示例。synchronized 关键字可以用来修饰方法或代码块,确保同一时间只有一个线程可以访问被修饰的方法或代码块。以上这些方法都可以在 Java 多并发编程中保证多线程安全,你可以根据具体的场景和需求选择合适的方法。等,这些类使用 CAS(Compare-And-Swap)操作来保证操作的原子性。
2025-05-06 09:25:14
194
原创 java泛型
泛型是 Java 中的一个重要特性,它提供了编译时类型安全检测机制,允许在编译时检测出非法的类型。以下为你详细介绍泛型类、泛型方法、泛型接口的定义与使用,以及类型擦除机制。
2025-04-27 11:59:56
428
原创 MySQL 是一款广泛应用的开源关系型数据库管理系统
主数据库记录二进制日志(binlog),从数据库通过 I/O 线程读取主数据库的 binlog,并将其复制到本地的中继日志(relay log),然后 SQL 线程从中继日志中读取并执行更新操作。语句可以分析查询语句的执行计划,了解 MySQL 如何执行查询,包括使用的索引、扫描的行数等。当查询的列刚好是索引的一部分时,MySQL 可以直接从索引中获取数据,而不需要回表查询。数据备份:从数据库可以作为主数据库的备份,当主数据库出现问题时,可以快速切换到从数据库。例如,一个电商系统可能有一个名为。
2025-04-18 17:51:47
624
原创 java Stream流
在 Java 中,Stream 是 Java 8 引入的一个新特性,它为处理集合(如 List、Set 等)中的元素提供了一种声明式的方式。Stream 可以让你以更简洁、更高效的方式进行数据处理和操作,例如过滤、映射、排序、聚合等。下面为你介绍 Stream 流的基本概念和使用方法。
2025-04-07 08:51:50
311
原创 MySQL如何存储数据
主要包括:错误日志(Error Log)、 查询日志(General Query Log)、慢查询日志(Slow Query Log)、二进制日志(Binary Log)、 中继日志(Relay Log)(在复制中使用)、事务日志(InnoDB Transaction Log)。(3)存储引擎特定文件:如 InnoDB 的 .ibd 文件(包含表数据和索引)和.sdi文件(存储与表、 列、索引等数据库元数据相关的数据字典信息)、MyISAM 的 .MYD 和 .MYI 文件、ARCHIVE 的压缩文件等。
2025-03-28 17:59:45
447
原创 Docker
因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在 Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。所以严格来说,镜像并非是像一个 ISO 那样的打包文件,镜像只是一个虚拟的概念,其实际体现并非由一个文件组成,而是由一组文件系统组成,或者说,由多层文件系统联合组成。Docker 使用的分层存储以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。因此容器要比传统虚拟机更为轻便。
2025-03-21 15:46:47
843
原创 java高性能
根据应用程序的实际需求,合理配置 JVM 的堆内存大小,避免频繁的垃圾回收。在多线程环境中,锁的使用会带来性能开销,尽量减少锁的持有时间和范围。根据具体的使用场景选择合适的数据结构可以显著提高性能。频繁创建对象会增加垃圾回收的负担,尽量复用对象。:适用于多 CPU 环境下的吞吐量优先场景。如果需要频繁插入和删除元素,使用。:如果需要频繁随机访问元素,使用。:适用于对响应时间要求较高的场景。:适用于大内存、多 CPU 环境。:适用于单线程环境和小型应用。来保证线程安全和高性能。
2025-03-02 21:08:44
312
原创 Spring Cloud 技术讲解文档
Spring Cloud 是 Spring 官方提供的一个用于构建分布式系统的开发工具集,它基于 Spring Boot 构建,简化了分布式系统的开发和部署。Spring Cloud 提供了一系列的组件,涵盖了微服务架构中的各个方面,如服务发现、配置管理、负载均衡、熔断降级、消息总线等,开发者可以根据自己的需求选择合适的组件来构建自己的微服务架构。Eureka 是 Netflix 开源的服务发现组件,Spring Cloud 将其集成进来,提供了服务注册与发现的功能。
2025-02-23 19:36:20
656
原创 java内存模型jvm
特点:被所有线程共享。当方法区内存不足时,会抛出 OutOfMemoryError。运行时常量池是方法区的一部分,用于存放编译期生成的各种字面量和符号引用。作用:存储已被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
2025-02-09 20:51:22
190
原创 Spring AI 技术
SpringAI是Spring生态系统中用于人工智能和机器学习集成的相关技术和工具的统称,以下是其相关介绍:以使用SpringAI集成Scikit-learn模型进行简单的线性回归预测为例,假设已有训练好的Scikit-learn线性回归模型保存为model.pkl文件:以上代码通过SpringAI的ModelFactory加载Scikit-learn模型,并使用该模型进行简单的预测。
2025-01-19 18:21:55
768
原创 如何在Java中进行性能调优和优化
在Java中进行性能调优和优化的基本原则、具体技巧和方法。优化代码、算法、数据结构以及系统配置,可以显著提升Java应用程序的运行效率和响应速度,从而更好地满足用户需求和提升系统稳定性。
2025-01-12 23:03:08
534
原创 Kafka下的生产消费者模式与订阅发布模式
在下图中,由Producer负责接收前端上报的数据,投递到对应的topic中(这里忽略了Broker Server的细节),在Consumer端,所有对该数据感兴趣的业务都可以建立自己的group来消费数据,至于group内部开多少个worke来消费完全取决于数据量和业务的实时性要求了。订阅发布模式,本质上也是一种生产消费者模式,不同的是,由订阅者首先向消息中心指定自己对哪些数据感兴趣,发布者推送的数据经过消息中心后,每个订阅者拿到的仅仅是自己感兴趣的一组数据。这边是典型的订阅发布模式。
2025-01-05 22:46:16
1303
原创 kafka 超详细的消息订阅与消息消费几种方式
这种方式需要能对多种消息处理,对于一些能通用处理,不感知具体业务数据的场景比较合适。比如B系统需要同步A系统数据,我们按正则订阅,当A系统有新的数据需要同步,这是只需要A发满足条件正则的消息,B系统无需任何改动。正常业务不会使用,如果订阅的分区不存在,会报错。kafka 给我们提供了灵活的消息订阅以及消息消费方式,我们需要根据实际业务场景选择。,我们可以对消息进行按主题、按分区进行处理,当然可以统一处理,不分主题和分区。能获取分区情况,如果需要按分区订阅,该方法一定用的上。,当我们选择了某种订阅方式如果。
2024-12-29 22:47:22
630
原创 SDK概念
综上所述,SDK 是一个更大范围的工具包,包含了多种工具和资源,而 API 则是其中的一部分,是用于定义软件组件之间交互的接口。在使用某个服务或构建应用程序时,开发者可能会使用相应的 SDK 来更全面地进行开发,而 API 则是 SDK 中的一个关键部分,用于实现具体的功能点。在软件开发中,项目可能会依赖于不同的服务、库或平台,而这些服务、库或平台通常会提供相应的SDK来帮助开发者与其进行集成和交互。文档: 详细的技术文档,包括 API 文档、开发指南、教程等,用于指导开发者正确地使用 SDK。
2024-12-19 16:13:44
533
原创 Java中的分布式缓存:Redis与Memcached实现
今天我们将讨论在Java中如何使用Redis和Memcached这两种主流的分布式缓存,并探讨它们各自的策略与优化。如果追求极致的速度和简单的键值对缓存,Memcached也不失为一种高效的解决方案。在实际应用中,为了充分发挥分布式缓存的优势,需要结合具体的业务场景,合理设计缓存策略,避免缓存穿透、击穿和雪崩等问题。Redis:支持丰富的数据结构,如字符串、列表、集合、哈希等,具有持久化能力,支持主从复制和高可用。Memcached:以简单的键值对存储数据,访问速度快,但只支持内存存储,数据结构较为简单。
2024-12-13 18:13:25
1058
原创 基于Java的分布式系统开发详解
分布式系统是一个由多个独立计算机组成的系统,这些计算机通过网络互相通信,协同完成特定任务。分布式系统的目标是提高系统的性能、可靠性和可扩展性。1.2 分布式系统的特点透明性:用户无需关心系统的分布性。容错性:系统能够应对部分节点的故障。可扩展性:系统能够方便地增加或减少节点。一致性:多个节点对相同数据的一致视图。1.3 分布式系统的挑战网络分区:网络出现问题时,如何保证系统的一致性和可用性。数据一致性:如何保证多个节点上的数据一致。分布式事务:如何保证分布式环境下的事务一致性。
2024-12-08 14:16:14
1452
原创 Oracle拉链表
在处理前一天的数据时,它从ods层获取到增量更新的那部分数据后,会和拉链表正在生效分区 的数据,也就是9999-12-31的分区数据进行比对,如果新增的数据它是已经存在于生效分区的 数据里面,那么会把正在生效分区里面的数据的生效结束生效时间置为前一天,然后新增一条 一样的数据,但是生效开始时间置为前一天,生效结束时间置为9999-12-31。公共维度层的数据是以拉链表的形式进行存储的,拉链表是以生效结束时间作为分区键进行划 分的。
2024-12-01 17:54:21
540
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1