- 博客(1771)
- 资源 (148)
- 收藏
- 关注
原创 Java内存模型(JMM)
三大特性保证操作不可分割。保证线程间的共享变量修改可被立即看到。保证操作按预期的顺序执行。在多线程编程中,正确使用 volatile和锁可以有效解决这些问题,同时结合 Happen-Before 规则,确保代码的线程安全性和正确性。三大特性之间的关系同时保障了原子性和可见性。volatile只保障可见性,不保障原子性。volatile和 Happen-Before 规则保障了指令的有序性和内存可见性。原子操作的语义本身包含一定的有序性,如写入和读取值的顺序。主内存和工作内存。
2024-12-19 18:31:05 642
原创 RocketMQ如何确保消息的顺序消费
生产端:通过确保特定逻辑标识的消息发送到同一队列。消费端:使用,确保队列内的消息按顺序消费。底层设计:CommitLog 的顺序写和 ConsumeQueue 的顺序索引保证消息的存储顺序。分布式:通过队列锁和负载均衡机制,在分布式场景下也能保证顺序性。
2024-12-19 09:58:08 611
原创 如何确保RocketMQ中的消息只被消费一次
在分布式消息队列中,保证消息的“精确一次消费”是一个复杂的目标,因为它涉及到多方面的因素,如消息重复消费、网络故障、系统崩溃等。来实现,生产者发送消息时,在消息队列中为每条消息创建一个事务状态记录,如果消息发送失败,事务将回滚。这种方法依赖于数据库存储消息ID,但如果在消息处理过程中发生系统崩溃,导致消息ID未能及时存入数据库,可能会发生重复消费。当主节点故障时,备用节点会接管,确保消息不会丢失。通过保证消息消费的幂等性,即使消息被重复消费,最终的业务结果也是一致的,这就是我们解决消息重复消费的核心策略。
2024-12-18 14:47:37 1075
原创 真实系统应用:外观(Facade)模式在分布式系统的应用
外观模式(Facade Pattern)是一种结构型设计模式,其目的在于为复杂的系统或子系统提供一个简化的接口。外观模式并不改变子系统的内部实现,它只是在客户端和复杂系统之间插入一个“外观”类,使得客户端通过外观类来与子系统交互,从而避免了直接调用多个复杂子系统接口。
2024-12-03 20:19:16 962
原创 真实系统优化:RocketMQ消息积压问题解决
即使消费者平台不稳定,消息也不会被过度积压。不会因为消息积压导致我们的系统崩溃或者性能问题。直接通过异步、重试等机制确保消息的可靠消费和门店运营平台同步门店数据:容易造成消息挤压和数据平台同步订单信息:消息数量大,容易造成消息挤压和SAP基础信息平台同步:要保证实时性与准确性。
2024-12-02 16:42:40 991
原创 真实系统优化:解决生产环境中的重复订单问题
锁粒度太大,用车辆码+导购的事业信息 作为锁的key,假设有别的事业部的导购同事扫 车辆码+导购的事业信息 不见得能锁住,尽管里面使用了双重检查的设定,但是两个事务未提交前是不可见的,所以也可能会导致同一辆车创建两个订单。通过这些优化,可以有效避免重复扫码和订单冲突问题,提升系统的可靠性和并发处理能力。业务处理时间可能会太长,锁时间设置五分钟,可能会造成锁失效,导致其他进程能获取锁。在条码平台车辆没有正在扫码的车辆库存占用态,导致能进入到下一步。
2024-12-02 13:57:46 1034
原创 使用 JHipster Registry 和 Spring Cloud Config 搭建微服务配置中心
通过使用 JHipster Registry 和 Spring Cloud Config,您能够轻松实现微服务配置管理和服务发现的功能,提升系统的可维护性和扩展性。在微服务启动时,它们会从 Registry 查询配置信息,确保所有配置的一致性和集中化管理。JHipster Registry 提供了丰富的管理仪表板,帮助开发人员和运维人员监控和管理微服务应用的状态。通过配置以上内容,只有使用有效 JWT 密钥的用户才能访问 Registry 的管理页面和敏感功能。文件中的配置只会作用于生产环境中的网关应用。
2024-11-30 20:02:23 998
原创 真实系统优化:自己捕获异常导致事务无法失效问题修复
在实际的系统开发中,处理权限过滤时常常涉及到重复的权限校验和数据过滤操作。这些操作通常会出现在多个业务逻辑中,导致代码重复且不易维护。本文将介绍如何使用AOP(面向切面编程)和自定义注解,将权限过滤的逻辑提取到统一的切面中,从而有效优化重复的权限校验代码。首先,我们定义一个注解,该注解用于标识需要进行权限校验的业务方法。这样,我们可以在方法上添加注解,而无需手动编写每次权限过滤的逻辑。/*** @PermissionCheck 注解,用于标识需要进行权限校验的方法。
2024-11-30 19:20:29 993
原创 真实系统优化:使用 AOP + 自定义注解提升权限过滤步骤的可维护性
在实际的系统开发中,处理权限过滤时常常涉及到重复的权限校验和数据过滤操作。这些操作通常会出现在多个业务逻辑中,导致代码重复且不易维护。本文将介绍如何使用AOP(面向切面编程)和自定义注解,将权限过滤的逻辑提取到统一的切面中,从而有效优化重复的权限校验代码。首先,我们定义一个注解,该注解用于标识需要进行权限校验的业务方法。这样,我们可以在方法上添加注解,而无需手动编写每次权限过滤的逻辑。/*** @PermissionCheck 注解,用于标识需要进行权限校验的方法。
2024-11-30 17:09:34 891
原创 真实系统优化:业务慢查询问题排查与修复
Oracle 索引查询:通过和视图查询索引详细信息,可以查询索引的唯一性、列信息等。MySQL 索引查询:通过查询表的索引信息,包含索引的名称、唯一性、列信息等。索引创建:无论是 Oracle 还是 MySQL,都支持多种类型的索引,如普通索引、唯一索引、全文索引等。优化建议:根据查询的实际需求选择合适的索引类型,避免过多不必要的索引,同时定期评估和维护索引,确保查询性能。通过合理地管理和创建索引,可以显著提高数据库查询性能,减少 I/O 操作。
2024-11-30 16:41:06 768
原创 真实系统应用——责任链模式保证异步线程池中的日志追踪完整保障上的应用
责任链模式()是一种行为型设计模式,旨在通过将多个处理者连接成一条链来处理请求。在这个链中,每个处理者对象都有两个责任:一是处理当前请求,二是将请求传递给链中的下一个处理者。这个模式允许请求沿着链的传递,直到某个处理者对请求作出响应或者链的末尾没有处理者为止。
2024-11-30 15:00:28 992
原创 系统真实优化:确保系统消息顺序消费的优化策略——从多个消费者到一个消费者工厂模式的转变
但是这样即便发送方保证顺序发送,但在多个消费者并行工作时,系统无法控制它们的处理顺序,这直接导致了消息消费的顺序性丧失但是还不能改变大的结构,并且因为发送方还需要增量同步,比如可以单独推送经销商的信息或者一个经销商的信息,所以要不改变大结构的前提下,我们进行系统优化。消费者工厂模式的核心思想是:将所有的消息消费逻辑封装在一个工厂类中,消费者工厂类会按顺序处理不同类型的消息,避免了并行消费带来的顺序问题。,将多个独立的消费者合并为一个统一的消费者工厂类来集中管理所有消息的消费逻辑,从而保证消息消费的顺序性。
2024-11-30 11:26:26 880
原创 真实系统优化:工厂模式应用——多同类消费者集合消费工厂
工厂模式(Factory Pattern)是一种创建型设计模式,它通过工厂方法来创建对象,而不是直接实例化对象。在这种模式下,工厂类负责决定实例化哪一类对象,客户端代码只需要调用工厂方法,而不关心对象的具体实现细节。假设我们在一个分布式系统中,需要处理不同类型的消息。消息类型是通过标签来区分的,每个消息类型都对应一个不同的处理逻辑。传统上,我们可能会在消费者类中写大量的条件判断语句来区分不同的消息类型,但是这种做法会导致代码越来越臃肿,难以维护。为了应对这种情况,我们采用了工厂模式。
2024-11-29 20:14:48 786
原创 真实系统优化:基于工厂模式的 MQ 封装升级——从手动创建到 Spring 管理
定义一个接口,所有具体的 MQ 生产者和消费者类都将实现该接口,提供统一的操作方法。
2024-11-29 14:50:00 776
原创 真实系统应用:观察者模式与事务回调机制的结合
*观察者模式(Observer Pattern)**是一种行为型设计模式,主要解决一个对象的状态变化需要通知多个对象的问题。核心思想是通过定义一对多的依赖关系,让多个观察者对象同时监听某个被观察者对象的状态变化。当被观察者状态发生变化时,它会自动通知所有注册的观察者,而不需要被观察者关心这些观察者具体如何处理。事务回调机制是指在事务提交后(即数据库操作成功完成后)执行某些需要后续处理的业务逻辑。发送消息到消息队列;更新缓存或第三方系统;执行日志记录等。在Spring框架中,事务回调通常依赖于。
2024-11-29 14:23:28 749
原创 真实系统优化:使用 AOP 解决业务迭代造成的分页查询问题
代码简洁:通过 AOP 统一处理分页逻辑,业务代码不需要显式地处理分页参数,只需要专注于查询操作本身。解耦业务与分页逻辑:分页的参数处理、转换、校验等都集中在 AOP 切面中,避免了在每个方法中重复分页逻辑。扩展性强:如果需要修改分页参数的处理方式(如增加默认页数、校验分页参数等),只需要修改 AOP 切面,不需要修改业务代码。提高可维护性:分页逻辑集中管理,减少了代码重复,增加了系统的可维护性。
2024-11-29 11:00:47 967
原创 真实系统优化:利用模板方法设计模式提升请求发送模块的可扩展性v2.0
模板方法模式是一种行为设计模式,它定义了一个操作的算法框架,而将某些步骤的实现延迟到子类。模板方法模式允许子类在不改变算法结构的情况下,重新定义算法中的某些步骤。在我们的例子中,模板方法就是统一的请求发送流程,而具体的请求头、请求体构建等细节交给具体的Sender类实现。通过模板方法设计模式,我们将外部接口请求的共同部分(如发送请求、处理响应)提取到了父类中,子类只需实现请求的定制部分(如请求头、请求体等),从而避免了代码重复,提高了系统的可维护性。提高代码复用性。
2024-11-28 21:30:42 594
原创 真实系统应用:模板方法设计模式应用外部接口推送器
模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,允许子类在不改变算法结构的情况下,重新定义算法中的某些步骤。通过将算法的步骤定义为抽象方法,模板方法模式可以让子类在不改变整个流程的情况下,实现定制化的行为。在外部接口调用的场景中,模板方法模式的核心是将通用的请求发送流程(如构建请求头、发送请求、处理响应)封装在一个模板方法中,而具体的接口URL、请求体、请求类型等细节则由具体的调用方来提供。不同的外部接口可能需要不同的请求头信息。为了使。
2024-11-28 21:21:34 921
原创 真实系统应用:防腐层设计模式应用认证拦截器
防腐层是一种软件架构模式,它位于系统与外部系统、模块或服务之间,负责对外部系统的请求、数据和协议进行适配、转换和封装。防腐层的核心作用是解耦和隔离,它可以有效地防止外部系统的变化对内部系统产生破坏,保证系统内部的模型和设计不受外部影响。
2024-11-28 16:56:40 657
原创 真实系统优化:策略模式解耦消息重试业务逻辑
策略模式是一种行为设计模式,它将算法封装成一个个独立的策略类,使得算法可以独立于使用它的客户端变化。策略模式的核心思想是:将不同的业务逻辑提取为独立的策略类,通过上下文类(Context)来选择和执行相应的策略。首先定义一个通用的策略接口,每个具体的重试策略类将实现这个接口,处理各自的消息类型。// 定义消息发送的重试逻辑通过引入策略模式,我们的消息重试逻辑变得更加灵活和可扩展。解耦业务逻辑:每种消息的重试逻辑被封装在独立的策略类中,减少了代码的耦合度。易于扩展。
2024-11-28 16:41:49 704
原创 系统高并发优化:CAS + 指数退避算法优化独占锁
指数退避算法是一种渐进式重试算法,广泛应用于分布式系统中的故障恢复。它的核心原理是:在请求失败后,每次重试时会增加一个逐渐增长的时间间隔。这个时间间隔通常按指数增长,也就是每次失败后的重试间隔为上一次的。
2024-11-27 21:17:18 953
原创 Redis分布式锁会发生死锁吗?
例如,线程 A 获取锁 1 后等待锁 2,线程 B 获取锁 2 后等待锁 1,这种循环等待会导致线程永远无法执行下去,虽然 Redis 本身不支持死锁检测,但这种情况也会导致系统被阻塞。Redis 锁机制的实现非常简单,它是基于 key 的唯一性来进行加锁和解锁操作的,因此,单个锁请求之间不会相互依赖。如果 Redis 锁的过期时间设置得过长,或者没有合理的超时机制,可能会导致锁长时间占用,影响其他线程的正常执行。如果加锁后发生异常,导致锁未被释放,其他线程将一直无法获取该锁,可能会出现类似死锁的现象。
2024-11-27 15:58:34 884
原创 真实系统死锁解决:死锁场景与排查方法
在高并发环境下,使用 Redis 分布式锁与数据库行锁的结合可以有效避免死锁并提升系统的性能和稳定性。Redis 分布式锁负责控制分布式系统中对共享资源的访问,而数据库行锁则用于保证在事务级别的并发控制。这种方式的核心思想是:利用 Redis 分布式锁在应用层确保全局资源的独占访问,再使用数据库行锁来确保数据库操作的原子性和一致性。在最初的设计中,系统未引入 Redis 分布式锁,仅依赖 Oracle 数据库的分布式锁(行级锁)来控制资源竞争。由于锁的获取顺序不一致,可能导致资源的循环等待,最终触发死锁。
2024-11-27 15:21:04 791
原创 系统接口优化:对接会员接口高并发和高性能优化
通过以上多维度的优化,可以显著提升系统的并发处理能力和整体性能。你可以根据实际业务场景,选择适合的优化策略逐步落地实施。为外接接口增加熔断限流,保护本系统资源,避免因外部接口过载导致系统性能问题。:如果数据库压力较大,考虑对大表进行分库分表(如按照门店、区域或时间分表)。定义一个服务类,用于调用外部接口并集成 Resilience4j 的功能。:检查 SQL 中是否使用了索引,避免全表扫描。:采用主从复制架构,将读请求分配到从库,写请求交给主库。等功能,集成简单,性能优秀。)中,对常用查询字段加索引。
2024-11-27 11:26:44 602
原创 系统优化:真实系统中的 GC 分析
Java 虚拟机 (JVM) 的垃圾回收 (GC) 是性能优化的核心环节,频繁的 GC 操作会显著降低系统吞吐量,增加响应时间,甚至引发服务不可用。为了理解 GC 的行为,GC 日志分析是必要的工具。GC 日志可以帮助我们发现性能问题,例如频繁的 GC 导致应用停顿时间过长,或者内存不足导致 Full GC 频繁发生。以下是通过 GC 日志分析问题的步骤,以及一个具体的案例。通过详细分析日志和优化 GC 参数,可以最大化系统吞吐量,同时降低延迟,提升整体性能。:老年代过小,导致频繁的 Full GC。
2024-11-25 20:29:06 950
原创 真实系统中 ThreadLocal 的实战分析与架构设计
在复杂的分布式系统或多线程编程中,我们经常需要在不同组件、方法甚至框架间共享某些上下文信息,但不希望将这些信息通过层层方法参数传递。它允许我们在每个线程中保存变量值,并且线程之间互不干扰,达到数据隔离的效果。直接通过方法参数传递这些上下文数据,不仅会导致方法签名复杂化,还会增加维护成本。异步任务通常由线程池执行,而线程池中的线程可能被复用。能确保每个线程在任务执行期间,持有独立的上下文数据。的隐式数据流使问题难以定位,尤其是在复杂的调用链中。在使用线程池时,线程不会销毁,而是被复用。
2024-11-24 19:50:33 714
原创 系统问题排查:JVM 问题定位命令实战
用于快速查询当前用户启动的所有 Java 进程及其进程 ID。场景:线上服务出现故障,需要快速定位目标进程。命令:输出进程 ID 及其主类和传递给 方法的参数。示例:假如服务启动了多个 Java 应用(如微服务),需要查找一个特定服务的进程 ID:输出:2. (内存管理)功能提供进程的堆内存快照、内存分布信息和垃圾回收情况分析。命令:输出当前进程内存中对象实例数量和大小,便于排查异常。示例:排查某服务中可能存在的内存泄漏:场景 2:生成内存快照命令:使用 MAT 工具分
2024-11-22 22:01:07 602
原创 系统问题排查:Arthas 解决系统问题(实战)
以下,我们通过本身经历的具体案例和实战模拟案例解析 Arthas 如何高效解决实际问题,并详细分析每个问题的解决方案。某生产环境中,团队上线了一个功能调整,发现新代码并未生效,但测试环境正常。它弥补了传统排查手段的不足,尤其在生产环境中,为开发者提供了实时、安全、高效的解决方案。,阿里巴巴开源的 Java 应用诊断工具,专注于解决这些棘手问题,其核心是实时、非侵入式的调试能力。某电商系统中,用户投诉订单信息错误,但日志缺乏足够的信息,难以复盘该用户的完整操作流程。重新部署正确版本的 JAR 包,问题解决。
2024-11-22 21:35:18 946
原创 系统问题排查:Arthas 诊断命令详解(理论)
Arthas 是阿里巴巴开源的一款 Java 应用诊断工具,以其强大的功能和易用性在开发者群体中广受欢迎。它专为线上环境的复杂问题而设计,解决了许多 Java 开发中常见的“难题”。
2024-11-22 21:32:30 730
原创 系统问题排查:Java 常见线上故障排查方案详解(理论)
排查和修复生产环境问题是一项重要技能,线上问题的原因多种多样,包括代码、硬件、网络、以及外部协作工具等。线上问题通常分为两类:系统异常 和 业务异常。以下详细总结了 Java 常见线上故障的排查方法与解决思路。Java 线上问题的表现多样,通常可归纳为以下四类:定位问题是解决问题的第一步,以下是常见排查步骤和方法:通过分析业务日志,可以快速找到错误的具体代码位置及错误类型。例如:如果日志显示异常如下:结合异常信息可知,这是 多线程并发操作 ArrayList 导致的数组越界,解决方案可以是:APM(Ap
2024-11-22 21:12:02 653
原创 系统开发:设计一个支持 50 万 QPS 的站内未读消息系统
缓存优先缓存是高并发系统的利器,在设计中充分利用缓存,能够显著提升系统性能。权衡与优化通过分析需求的重要程度,合理取舍(如非活跃用户记录清理、未读数误差容忍)来优化设计。针对性方案不同场景对应不同的业务逻辑,避免用一套通用方案解决所有问题,因地制宜才能设计出更高效的系统。通过合理的设计和优化,即便面对每秒 50 万次请求的高并发系统,也能用有限的资源支撑业务平稳运行。希望这篇博文能为你的系统设计提供灵感!
2024-11-22 20:30:39 599
原创 关于缓存与数据库:要求强一致性的场景以及解决方案
在分布式系统中,如果业务对缓存与数据库的一致性要求非常高,以下是几种。,确保同一时刻只有一个写操作生效,避免缓存和数据库之间的数据不一致。数据库更新较慢时,可能会有读操作读取到缓存中已删除但未更新的数据。,即所有数据读写操作都通过缓存完成,缓存与持久化数据库同步更新。选择方案时需权衡一致性、复杂性和性能,结合业务需求找到最优解。对同一个 key 的写操作引入。
2024-11-22 15:21:41 524
原创 系统优化:假设数据库成为了性能瓶颈点,动态数据查询场景如何提升效率
通过 Etag 和 If-None-Match,浏览器可以缓存静态资源,减少网络传输,提高页面加载速度。用于存储不经常变化的静态数据,例如门户网站的文章、新闻列表等内容,用户访问时直接返回缓存的页面。在视频播放平台如抖音中,播放器会预先缓存后续的视频数据,以提升用户的首播速度并避免卡顿。用户查询不存在的数据,由于缓存没有命中,所有请求都会直接打到数据库,可能导致数据库崩溃。:制作面条的复杂过程可以看作地址转换,而 TLB 的缓存就像方便面,省时省力。在现代的电商系统中,数据库通常是性能优化的重要对象。
2024-11-22 14:36:41 588
原创 为什么复杂的架构一定要做分层设计?
分层设计是将系统拆分为多个层级,各层负责不同的职责。最经典的例子莫过于MVC(Model-View-Controller)架构Model:负责业务逻辑和数据存储。View:用于展示数据和接收用户交互。Controller:连接用户请求与业务逻辑。图1:MVC架构示意图。
2024-11-21 21:43:03 1042
原创 如何快速重置 Grafana 管理员密码
在实际场景中,Grafana 是一个用于数据可视化的强大工具,但当管理员密码遗忘时,无法登录后台会导致数据监控中断。的过程中,可能会因长时间未登录而忘记管理员密码。这篇博文将向大家介绍如何通过简单的命令,将管理员密码重置为默认值。最后一行的 “Admin password changed successfully ✔” 表示重置成功。日志中还会显示一些配置信息,例如路径和环境变量,方便进一步排查问题。如果你使用的是较新版本的 Grafana,可能会提示。登录 Grafana。
2024-11-21 10:33:06 707
原创 Zookeeper 分布式锁工作原理与实现全解析
Zookeeper 是一个高可用、高性能且一致的分布式协调服务,最初设计用于实现分布式锁。配置维护:集中存储和动态更新系统配置信息。分布式通知与协调:实现多个服务之间的高效同步。分布式队列:支持任务的顺序执行与管理。服务注册中心:追踪服务状态并动态发现。Zookeeper 是实现分布式锁的强大工具,其通过临时顺序节点和 Watcher 机制,在保证一致性和高可用性的同时,避免了资源争用问题。通过上述代码与分析,Zookeeper 不仅能够高效地实现分布式锁,还为分布式应用提供了强大的协调能力。
2024-11-20 17:14:59 883
原创 系统数据修复:数据库字段类型误设解决方案
在日常开发中,数据库字段类型的定义非常重要,但一次简单的失误可能带来后续一系列的问题。在一次发版中,我们的同事错误地将字段 定义为 ,而实际业务需求应该是 ,用于存储用户登录 ID(可能包含字母和特殊字符)。上线后,这个字段已经存入了大量的数据。如何在数据不丢失的前提下修正字段类型?以下是我们的处理方案分享。数据库表 中有一个字段 ,原本应该定义为:但由于配置错误,字段被定义为:上线后,该字段中已经存储了一些纯数字的用户 ID 数据。为了支持实际业务需求(如存储字母、符号等),需要将字段改回 类型
2024-11-20 10:16:59 640
原创 系统优化查询:SkyWalking排查
减少了数据库调用次数:通过批量查询和,减少了对数据库的交互次数。提高了代码可读性:将条件设置和数据处理逻辑进行了清晰的分离。SQL查询的简化:合并了一些JOIN,并消除了不必要的复杂性。
2024-11-15 11:38:11 646
elastic-job-lite-console-2.1.5压缩包.rar
2024-09-13
elastic-job-lite-console-2.1.5.rar
2024-09-13
PM任职认证答辩.pptx
2024-05-21
commons-math3-3.6.1-API文档-中文版.rar
2024-02-24
SpringBoot 集成 Flowable + Flowable Modeler 流程配置可视化项目
2023-09-11
IOS手游模拟器(ipadian)电脑版
2023-05-07
CR VideoMate用起来非常顺手,旨在为用户解决因在工作上带来的问题,在业内可谓享有极高的声誉,是业内人士常用的一款工具
2023-04-23
Java开发简历参考项目.docx
2023-02-18
OpenCV例程汇总.doc
2023-01-25
OpenCV例程汇总.pdf
2023-01-25
mybatis一级二级缓存流程图.drawio
2022-07-31
mybatis-plus最新代码生成器项目源码 :mybatis-plus-generator.zip
2022-07-20
Windows10鼠标指针主题资源
2022-07-20
cloud-demo第一次 SpringCloud服务拆分初探与案例解析
2022-07-18
mybatis练习3mybatis练习3mybatis练习3mybatis练习3
2022-07-04
mybatis训练3mybatis训练3mybatis训练3mybatis训练3
2022-07-03
mybatis联系项目2
2022-07-03
Mybatis 框架理解与快速入门详解代码与数据库
2022-06-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人