自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mysql 中 in 跟 exists ,not in 跟 not exists 使用上该怎么选择

当存在一个较小的主查询和一个较大的子查询时,使用 EXISTS 可能会更高效,因为一旦找到匹配项,MySQL 可以立即停止执行子查询。大型值集合:当主查询值集合较大,或者子查询结果集较大时,EXISTS 可能会比 IN 更高效,因为它可以在找到匹配项后立即停止查询。在使用 NOT EXISTS 的情况下,当数据库找到一个匹配的结果时,它可以立即停止执行,因此对于一些情况来说可能会更高效。子查询的结果存在性:当你需要检查是否存在满足特定条件的记录时,尤其是在关联表格或子查询中,使用 EXISTS 更具优势。

2023-08-16 15:23:55 368 1

原创 MYSQL查询一对多的数据表关联,产生重复数据怎么处理

在 MySQL 中,当进行一对多的数据表关联查询时,有时会导致结果中出现重复数据的情况。这是由于多个关联的子表记录与主表记录进行了笛卡尔积,从而产生了重复的结果。上述查询将使用GROUP BY子句按照主表的id进行分组,并使用GROUP_CONCAT函数将多个子表记录合并为一个字符串。上述查询将使用子查询获取子表的数据,并通过 GROUP_CONCAT 函数将多个子表记录合并为一个字符串。上述查询中,子查询通过使用DISTINCT关键字去除了子表中的重复数据,然后与主表进行关联。

2023-06-14 15:53:38 6525

原创 java 分布式事务的实现方式之三阶段提交

三阶段提交(Three-Phase Commit,简称3PC)是一种分布式系统中常用的协议,用于确保多个参与者(或节点)在进行共享资源的更新时保持一致性。协调者(Coordinator)向所有参与者发送预备请求(Prepare Request)。参与者接收到预备请求后,执行本地事务的预备操作,并将执行结果(是否可以提交)发送给协调者。参与者在发送响应前会将本地事务的日志记录下来,以便在后续的阶段中进行回滚操作。协调者根据接收到的参与者响应决定是否可以提交事务。

2023-06-14 15:48:49 553

原创 java 分布式事务的实现方式之TCC方案

TCC 是一种补偿性的事务模式,它通过在事务执行之前定义 Try、Confirm 和 Cancel 三个阶段来实现事务的一致性。在 Try 阶段,业务逻辑会尝试预留所需的资源和执行必要的检查,但不会真正进行数据修改。它会预留相关资源,并执行一些预检查,以确保后续的 Confirm 阶段可以成功执行。如果 Try 阶段执行成功,则事务可以进入 Confirm 阶段。如果 Try 阶段失败,则事务进入 Cancel 阶段。

2023-06-14 15:38:35 1277

原创 java 分布式事务的实现方式之XA协议

需要注意的是,XA协议的实现需要协调器和参与者遵循特定的接口和协议。在Java中,可以使用JTA(Java Transaction API)来实现XA协议。JTA提供了TransactionManager和UserTransaction等接口来管理和控制分布式事务。在使用JTA实现XA协议时,参与者需要实现XAResource接口,该接口定义了参与者与事务管理器之间的交互方法,包括准备(prepare)、提交(commit)、回滚(rollback)等。

2023-06-09 14:43:18 772

原创 RabbitMQ怎么处理消息事务

注意:在生产者中,我们使用 channel.txCommit() 提交事务,而在消费者中,我们使用 channel.basicAck() 手动确认消息或 channel.basicReject() 手动拒绝消息并重新入队。通过将通道(Channel)设置为事务模式,所有发送到该通道的消息都将在提交事务之前被缓存,并且在提交事务后才会被投递到交换机中。在确认监听器中,可以处理确认(ack)和未确认(nack)消息的逻辑,确保消息发送的可靠性。当收到未确认消息时,表示消息发送失败,可以进行相应的处理。

2023-06-09 14:23:55 2132

原创 java 推荐算法-协同过滤推荐算法

协同过滤(Collaborative Filtering)是一种常用的推荐算法,通过分析用户的历史行为数据,找出与当前用户兴趣相似的其他用户或物品,然后将这些相似用户或物品的推荐结果作为给用户的推荐。协同过滤推荐算法主要分为两种类型:基于用户的协同过滤(User-Based Collaborative Filtering)和基于物品的协同过滤(Item-Based Collaborative Filtering)。

2023-05-31 15:20:20 4809 2

原创 去掉满屏if语句,让代码干净清爽

当你看到满屏得if,是不是感觉天旋地转,怀疑人生,其实我们在编写 Java 代码时,有几种方法是可以减少 if 语句的使用,提高代码的可读性和可维护性。

2023-05-29 16:11:55 1629 1

原创 java一个接口多个实现得调用

需要根据具体的应用场景和需求选择适合的方式来调用不同的实现类。在代码中,根据接口类型、条件判断、集合遍历或动态获取实例等方式,可以灵活地调用不同的实现类的方法。

2023-05-29 15:42:06 7676 1

原创 前端密钥怎么存储,才最安全?

对于部署到服务器的应用,您可以使用服务器的环境变量配置功能,如 Linux 系统的 export 命令或 Windows 系统的系统属性配置。如果您使用的是一些现代的前端框架或库,它们可能提供了更便捷的配置文件加载和解析的方法,例如使用 axios、fetch 或特定的配置加载插件。在前端应用中使用环境变量:在您的前端应用代码中,通过访问环境变量来获取密钥的值。解密密钥:在需要使用密钥的时候,通过解密算法对加密的密钥进行解密,获取原始的密钥值。配置密钥:在配置文件中添加密钥的配置项,并为其指定相应的值。

2023-05-29 14:55:52 9433 3

原创 jooq 整合 springboot 实现多数据源

配置数据源:在application.properties或application.yml文件中配置多个数据源的连接信息。例如,定义两个数据源:datasource1和datasource2。

2023-05-29 14:34:24 538

原创 一文读懂java单元测试

验证代码功能:单元测试可以验证代码的各个功能是否按照预期工作。通过编写测试用例覆盖代码的不同路径和逻辑条件,可以确保每个单元都能正确执行其设计的功能。提供反馈和调试:单元测试可以快速发现代码中的错误和缺陷。当测试用例失败时,它们提供了有关出现问题的具体位置和原因的反馈信息,有助于开发人员进行调试和修复。改善代码质量:通过编写单元测试,可以促使开发人员编写可测试的、模块化的代码。这有助于降低代码的耦合性、增加代码的可维护性,并提高代码的整体质量。支持重构和重构安全性:单元测试为代码重构提供了保障。

2023-05-29 13:47:29 2009 1

原创 Spring Boot 的启动过程解析

Spring Boot 的入口是一个主要的配置类,通常是带有 @SpringBootApplication 注解的类。在启动过程中,Spring Boot 首先会加载这个配置类。SpringApplication 是 Spring Boot 的核心类,用于启动应用和初始化 Spring 环境。它负责创建和配置 Spring 应用上下文,加载自动配置,执行初始化和刷新等操作。让我们以 SpringApplication 类为例进行源码分析。

2023-05-26 19:48:45 872 1

原创 使用redis 跟 caffiene 搭建二级缓存

getData() 方法首先尝试从 Caffeine 缓存中获取数据,如果不存在,则从 Redis 主缓存中获取,并将数据存储到 Caffeine 缓存中。它通过高效的数据结构、灵活的内存管理和多种缓存策略,提供了快速、可靠的缓存解决方案。Caffeine 还支持权重函数,可以根据缓存项的权重来管理缓存的大小,使得在内存资源受限的情况下能够更好地管理缓存。在数据更新操作完成后,更新 Redis 中对应的数据,并使用 Caffeine 缓存的 put() 方法来更新或添加数据到 Caffeine 缓存中。

2023-05-26 19:29:48 853 1

原创 Mysql优化之查询语句执行过程-0基础也能迅速掌握

`平时我们使用数据库,看到的通常都是一个整体。比如,你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时:mysql> select * from T where ID=10;我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程。所以今天我想和你一起把 MySQL 拆解一下,看看里面都有哪些“零件”,希望借由这个拆解过程,让你对 MySQL 有更深入的理解。这样当我们碰到 MySQL 的一些异常或者问题时,就能够直戳本质,更为快速地定位并解决问题。下面

2022-06-27 18:44:24 81

原创 数据归档神器-pt-archiver

`pt-archiver是用来归档表的工具,可以做到低影响、高性能的归档工具,从表中删除旧数据,而不会对 OLTP 查询产生太大影响。可以将数据插入到另一个表中,该表不需要在同一台服务器上。可以将其写入适合 LOAD DATA INFILE 的格式的文件中。或者两者都不做,只做一个增量删除。特点:1.可以根据where条件获取需要清理的数据2.支持事务批次提交,数据批次抓取3.支持插入成功后,在删除的逻辑处理4.支持文档备份5.批量模式,自动匹配主键,支持重复归档6.归档速度是存储过程脚本的6倍左右(

2022-06-27 18:25:10 3809

空空如也

空空如也

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

TA关注的人

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