自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 问答 (2)
  • 收藏
  • 关注

原创 ForkJoinTask 并行计算使用案例

适用于将大任务拆分成多个小任务并行执行,然后合并结果。是 Java 并行计算框架。

2025-02-10 09:15:00 208

原创 Phaser、CountDownLatch 和 CyclicBarrier 区别对比

Phaser、CountDownLatch 和 CyclicBarrier 区别对比

2025-02-10 08:45:00 276

原创 Java 常见的创建多线程的方式

在 Java 中,创建多线程的方式有多种,常见的有以下 5 种方式

2025-02-08 08:45:00 329

原创 分布式中的两阶段提交协议(2PC)与三阶段提交协议(3PC)

无论是2PC还是3PC,它们都是实现分布式事务的重要方法。2PC更简单,但在高可靠场景下可能显得笨重;3PC容错性更高,但实现复杂度也更大。在实际工程中,选择使用哪种协议,或者是否需要分布式事务,还需要结合业务需求和系统架构权衡利弊。例如,在一些高性能、高可用的分布式系统中,我们可能更倾向于使用BASE理论(基本可用、软状态、最终一致性)来替代强一致性。希望这篇文章能让你对2PC和3PC有一个更清晰的认识,也欢迎大家在评论区讨论你的见解!

2025-02-08 08:00:00 780

原创 使用 EXISTS 解决 SQL 中 IN 查询数量过多的问题

在 SQL 查询中,当我们面对需要在IN子句中列举大量数据的场景时,查询的性能往往会受到显著影响。这时候,使用EXISTS可以成为一种优化的良方。

2025-02-02 14:39:27 798

原创 MySQL 如何深度分页问题

深度分页是 MySQL 中一个常见且棘手的问题,使用子查询和滚动 ID 这两种方式可以在不同的场景下有效解决该问题。子查询适用于需要跳页的场景,通过在二级索引上操作减少回表次数和扫描数据量;滚动 ID 方式适用于顺序分页的场景,通过记录上一页的最后一条记录的 ID 避免大量的偏移操作。在实际应用中,我们需要根据具体的业务需求选择合适的解决方案。

2025-02-01 20:59:58 891

原创 理解 InnoDB 如何处理崩溃恢复

在数据库领域,数据的一致性与可靠性至关重要。InnoDB 存储引擎的崩溃恢复机制是保障数据安全的核心,其中 Doublewrite Buffer 和 Redo Log 发挥着关键作用。下面,我们将详细探讨 InnoDB 从写入到崩溃恢复的全过程。

2025-02-01 20:07:06 1067

原创 如何在 Kafka 中实现自定义分区器

Kafka 中的分区器()决定了每条消息应该被发送到哪个分区。按照消息内容的某个字段按照消息发送的时间按照某种哈希算法或外部因素这时候,我们就可以自己实现一个分区器来替代 Kafka 默认的分区策略。实现了自定义分区器后,接下来我们需要在 Kafka Producer 的配置中指定我们自己实现的分区器类。

2025-01-31 19:22:43 804

原创 从支付宝国补 bug 看程序员的自我修养与系统风险防控

前段时间,支付宝的国补 bug 事件闹得沸沸扬扬,相信不少同学都有所关注。作为一名程序员,看到这样的大平台出现这样的失误,心中感触颇多。今天写下我的一些想法,个人见解~

2025-01-31 18:57:12 544

原创 后端树结构分类数据模型如何设计

树形结构在后端系统中非常常见,特别是分类管理场景,例如商品分类、组织架构等。本文将以给定的数据库表为例,探讨如何设计树结构分类数据模型及其优点。

2025-01-23 08:30:00 552

原创 FreeMaker 模板引擎的使用

FreeMarker 是一个模板引擎,简单来说,它可以帮我们把动态数据填充到模板文件里,生成最终的 HTML、XML 或者其他格式的内容。模板引擎:FreeMarker 的工作原理就是通过模板文件(通常是.ftl文件)和数据模型生成最终内容。模板文件:模板文件里可以包含静态内容和动态占位符,静态内容直接输出,动态部分会用数据模型来填充。数据模型:简单理解就是一个键值对的结构(比如 Map、JavaBean 或集合),用来给模板提供数据。

2025-01-23 08:30:00 637

原创 如何在 Java 中进行内存泄漏分析

确认是否发生内存泄漏:通过jstat观察 GC 状态,确认是否存在问题。生成和分析 Heap Dump:使用jmap获取 Heap Dump 文件,并利用 MAT 或 VisualVM 工具分析。定位问题和修复代码:找到内存泄漏的根源后,通过优化对象管理和生命周期修复问题。

2025-01-17 09:15:00 673

原创 Java对象引用四种类型的使用

普通的对象引用。只要有强引用指向一个对象,该对象就不会被垃圾回收。普通的对象引用。只要有强引用指向一个对象,该对象就不会被垃圾回收在内存不足时,垃圾回收器会回收软引用指向的对象。适合实现缓存机制。无论内存是否充足,只要垃圾回收器运行,就会回收弱引用指向的对象。常用于 WeakHashMap 等数据结构。不能通过虚引用获取对象。用于跟踪对象的垃圾回收状态。引用类型描述是否被回收的条件适用场景强引用普通对象引用,默认引用类型永远不会被回收核心逻辑和对象的正常使用。

2025-01-14 08:30:00 618

原创 运行时常量池和字符串常量池的区别

运行时常量池和字符串常量池的区别。

2025-01-14 08:30:00 148

原创 通过 Caffeine 和 Spring Cache 的集成,实现高性能的本地缓存

通过 Caffeine 和 Spring Cache 的集成简单易用,通过注解配置,无需显式管理缓存逻辑。在调用数据的方法上加可以减少重复调用问题,降低被调用方的压力,也可结合Redis快速实现多级缓存,解决热点数据问题。

2025-01-08 08:30:00 940

原创 MyBatisPlus 代码生成器(减少工作量,解放双手)

【代码】MyBatisPlus 代码生成器。

2025-01-08 08:15:00 186

原创 MySQL 间隙锁避免“可重复读”出现“幻读”

可重复读导致幻读可重复读级别中的行锁仅保护已存在记录,未锁定查询范围的“间隙”,导致可能插入新记录而出现幻读。MySQL 的解决方案MySQL 的Next-Key Lock(间隙锁 + 行锁)机制,在“可重复读”级别下,防止在查询范围内插入新数据,从而避免幻读。注意事项间隙锁仅在事务隔离级别为可重复读或更高时启用。在性能与隔离性之间,需要根据实际业务需求权衡是否使用这种机制。

2025-01-03 08:30:00 467

原创 时间轮(TimeWheel)的设计

在不同层次的时间轮中,由于槽所代表的时间精度不同,通过降级操作可以确保任务在接近执行时刻时,能够在精度更高的时间轮层中进行管理和调度,从而避免因长时间等待在低精度层而导致的时间误差积累,提高定时任务执行的准确性和及时性。在任务插入过程中,计算槽位的方式也十分巧妙。假设存在一个有八个槽(编号为 0 - 7)且槽的时间单位为 1 秒的时间轮,若要加入一个延时 5 秒的任务,其计算方式为 5 % 8 + 1 = 6,即该任务应放置在槽位为 6(下标为 5)的槽中,并拼接到槽的双向链表的尾部。

2025-01-03 08:00:00 1180

原创 MySQL varchar(255) 为什么不是256,其中奥妙是啥?

开发中总是可以遇到一些细节,我们要尽量留意这些细节的奥秘之处,这样技术才可以有所精进~

2024-12-20 16:50:36 537

原创 Redis 实现分布式锁(内有java实现)

在Redis中实现分布式锁的常见方法是通过set ex nx命令+lua脚本组合使用。确保多个客户端不会获得同一个资源钱锁的同时,也保证了安全解锁和意外情况下锁的自动释放。

2024-12-20 08:30:00 818

原创 领域模型设计方法 充血模式和贫血模式怎么选

充血模式是一种强调将业务逻辑封装在领域对象中的设计模式。领域对象不仅仅存储数据,还负责实现与自身相关的业务行为。贫血模式是一种将领域对象设计为仅仅包含数据(属性),不包含业务逻辑的模式。业务逻辑被放在服务层或其他独立组件中。

2024-12-18 23:09:23 924

原创 牢记面向对象五大原则 SOLID

良好的单一职责设计可以帮助实现接口隔离,而开闭原则的实现通常依赖于依赖倒置原则。在实际开发中,遵循 SOLID 原则可以让我们在需求变化时减少改动成本,提升代码质量,同时也让测试和重构更加轻松。然而,遵守设计原则并不意味着过度设计。开发人员需要在项目的复杂性、规模和团队经验之间找到平衡,在遵循原则的同时,确保代码的实际可用性和效率。设计优雅的系统不仅是技术能力的体现,更是对团队和业务的责任。

2024-12-18 23:08:57 758

原创 Redis 四种高级数据类型 BitMap、HyperLogLog、GEO 和 Stream 用法场景

BitMap、HyperLogLog、GEO 和 Stream 这些高级数据类型增强了 Redis 在特殊业务场景中的适用性,进一步提升了其在大规模、高并发场景下的灵活性与性能。

2024-12-13 09:00:00 601

原创 Redis 5 种数据结构的用法&场景

Redis 提供了五种基本数据类型:String、Hash、List、Set、Sorted Set。以下是每种类型的定义、使用场景和常用命令。

2024-12-13 08:30:00 1498

原创 用UUID-V7替换UUID-V4 提高MySQL数据库性能

使用 UUID v7 代替 UUID v4 的主要原因是为了在高频数据插入场景中提升性能,同时保留全局唯一性和兼容性,并且增加了对数据的时间语义支持。

2024-12-06 08:30:00 1018

原创 Java 开发不可不知的 7 个 JDK 命令

jmap 主要用于生成 Java 进程的内存映射信息,包括堆内存的使用情况、对象分布等,也可以用于获取堆转储文件(heap dump),以便后续使用其他工具(如 jhat 或专业的内存分析工具)进行深入的内存分析,找出内存泄漏、高内存占用等问题。:jcmd 是一个多功能的命令行工具,它可以用于向运行中的 Java 进程发送诊断命令,获取进程的相关信息,执行一些特定的操作,如生成堆转储文件、获取线程信息等,并且它能够适应不同版本的 JVM,提供了统一的操作接口。

2024-12-05 22:31:25 888

原创 JDK 9+ 模块化(记一次JDK升级的坑)

前段时间 JDK8 升级到 JDK21,今天跑了一下接口代码发现报错了,报错信息如下:Error querying database. Cause: java.lang.reflect.InaccessibleObjectException: Unable to make public int java.util.ArrayList$SubList.size() accessible: module java.base does not “opens java.util” to unnamed module

2024-12-05 08:30:00 1152

原创 ClickHouse 分布式表写入基本流程

Distributed表引擎是一种特殊的表引擎,自身不会存储任何数据,而是通过读取或写入其他远端节点上的表进行数据处理的表引擎,该表引擎需要依赖各个节点的本地表来创建.在 ClickHouse 中,当使用 分布式表 (Distributed Table) 插入数据时,数据的写入流程涉及多个步骤,特别是在数据需要跨节点传输时。您提到的流程在实际操作中有很多细节,下面我会逐一解释清楚这些步骤。

2024-11-28 08:00:00 801

原创 ElasticSearch 写数据过程和正确创建索引

Elasticsearch 写入数据的过程涉及客户端请求、路由、节点缓冲区、分片处理和段文件管理

2024-11-27 08:00:00 1042

原创 CLickHouse 物化视图的使用及分布式建表案例

ClickHouse 的物化视图 (Materialized View) 是一种优化查询性能的工具。物化视图会在底层维护一份实际存储的数据副本,这样可以加速查询性能而不需要每次都从原始表中读取数据和计算。

2024-11-27 08:00:00 1313

原创 AOP+SpEL 生成动态的操作日志

大家好!操作日志模块是我们后端项目经常会有的,前段时间我参考了美团的如何优雅地记录操作日志?这一篇文档写了简单版本的AOP+SpEL 生成动态的操作日志,上手简单,超级好用,分享给大家。

2024-11-11 17:52:51 718

原创 Redis 主从复制实现的原理

Redis 主从复制是指把 Redis 主节点的数据同步到从节点的过程,使得主节点的数据和从节点的数据保持一致。

2024-11-07 21:43:16 952

原创 ElasticSearch reindex 操作

Elasticsearch Reindex 是用于数据迁移、结构调整和修复的强大工具。当需要修改索引的配置、优化性能或处理数据变化时,Reindex 是一种无缝的方式来复制和重新索引数据。

2024-10-25 14:28:53 646

原创 ClickHouse入门学习笔记

学习目标:clickhouseclickhouse入门clickhouse特点:列式存储,clickhouse cpu占有率非常高,性能好吞吐大clickhous inset一批数据的时候会保证原子性docker使用命令:1.docker run -it clickhouse/clickhouse-server /bin/bash​ 2.clickhouse --help​ 3.clickhouse start​ 4.clickhouse-cl

2022-05-04 17:20:28 2051

空空如也

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

TA关注的人

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