自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 详解SQL查询语句关键字执行顺序

SQL 语句的执行顺序与书写顺序不同,理解执行顺序有助于优化查询性能。在实际开发中,应尽量避免在WHERE和HAVING中使用复杂的计算,以减少查询的开销。通过掌握 SQL 语句的执行顺序,我们可以更好地编写高效、可维护的查询语句,并深入理解 SQL 查询的底层逻辑。

2025-04-01 09:58:51 269

原创 MySQL之主从延迟、主从切换、读写分离

这个分发日志要严格保证对同一行数据更新的两个事务的执行顺序和主库的执行顺序一样的,所以这个分发事务执行不是简单的随机或者轮训啥的,要按照一定规则来保证,当然了,同一个事务的更新语句是不能分开执行了,一个事务更新了表 t1 和表 t2 中的各一行,如果这两条更新语句被分到不同 worker 的话,虽然最终的结果是主从一致的,但如果表 t1 执行完成的瞬间,从库上有一个查询,就会看到这个事务“更新了一半的结果”,破坏了事务逻辑的隔离性。得到,原来从库 C 是 A 的从库,本地记录的也是 A 的位点。

2025-03-06 10:18:54 925

原创 RDS用多了,你还知道MySQL主从复制底层原理和实现方案吗?

MySQL 主从复制是提升数据库性能和可用性的有效手段,通过合理的配置和优化,可以有效实现读写分离、数据备份和故障恢复。本文从主从复制的原理入手,详细讲解了配置步骤和常见问题解决方案,希望能帮助你搭建稳定可靠的 MySQL 高可用架构。

2025-02-17 10:14:29 858

原创 详解如何优雅实现先分组再组内排序取数据解决方案

分组后组内排序取第一条记录的操作,是 SQL 查询中的高频需求。推荐优先使用窗口函数,其次是子查询方法,并根据实际业务场景选择合适的实现方式。同时,结合索引和字段优化,可以显著提升查询性能。当然这是针对大批量查询的情况下,如果你这是查询一两个姓名的最小年纪这种,你完全可以查询出所有数据,在Java代码逻辑中利用内存分组之后再排序,取相应数据即可。

2025-02-06 09:55:40 925

原创 谈谈定时任务实战问题及解决方案、实现原理

我们应该都知道,定时任务一大常见使用场景就是在每天晚上凌晨跑定时任务做数据处理,这样可以在系统流量少、负载低的时候去做一些复杂的逻辑处理,但是一旦定时任务执行失败,如果没做好任务执行过程的日志链路,查找问题起来也是相当困难的,之前就碰到过这么一个问题,客户反馈数据不对,然后测试介入排查发现对应的定时任务执行了(看到了任务的info输出日志),但是没看到有error日志,这就很怪了,造成了一种这个代码执行了,但是数据不对的现状,然后开发又去翻看代码一行一行去解读一下,发现没问题呀。

2025-01-13 09:58:50 794

原创 详解Spring Boot定时任务的几种实现方案

在 Spring Boot 中,定时任务的实现方案多种多样,本文主要基于单机模式环境下讲述,所谓单机就是一个Java应用服务,至于集群分布式定时任务之前有总结过,感兴趣的可去公众号自行查看。Java原生提供的和TimerSpring Task提供的@Scheduled注解实现定时任务尽量避免使用Timer,因为它的单线程实现和异常处理问题容易引发严重后果,在现代 Java 开发中,尽量使用替代Timer,但是要注意配置合理的线程池大小,避免任务积压或线程资源浪费,使用try-catch。

2024-12-17 10:32:29 895

原创 闹笑话了,差点以为Java三目运算符有BUG!!!

在 Java 中使用三目运算符时,要特别注意返回类型的推断是否会导致拆箱操作。若条件结果可能为null,而又涉及自动拆箱操作,则会引发空指针异常。因此,确保条件表达式返回值类型一致或明确避免null拆箱操作,是解决此问题的关键。

2024-11-18 10:36:07 947

原创 一文带你掌握elasticsearch复合字段类型:Arrays、Flattened、Nested在业务系统中最佳实践

在当下互联网系统中使用非常广泛,是一个非常热门的组件框架。那到底是什么呢?是一个分布式、实时的搜索和分析引擎,通常用于处理和查询大规模的结构化与非结构化数据。它基于 Apache Lucene 构建,具有高效的全文搜索、数据存储、数据分析和数据可视化功能。主要应用于日志分析、监控、数据检索、实时分析等场景。这里关于基础入门使用篇elasticsearch入门使用教程详解,看这篇就够了高级进阶原理篇elasticsearch高级篇:核心概念和实现原理官方文档地址字段类型适用场景优点缺点Array。

2024-11-13 09:46:08 1238

原创 详解Spring Boot 启动时执行特定代码逻辑实现方案

书接上回,我们总结了,大致分为环境配置、IOC容器bean加载、事件通知等,具体详细总结可自行调转查看。今天我们来看看一个平时在业务开发中常见的逻辑场景。在开发 Spring Boot 应用时,我们经常需要在项目启动时执行一些初始化逻辑,比如加载缓存、连接外部系统、初始化配置信息等。Spring Boot 提供了多种实现方式,允许我们在应用启动的不同阶段插入代码逻辑。本文将结合启动过程详细介绍这些方式,并说明适用的场景及实现示例。

2024-11-01 10:06:33 948

原创 深入解析 Spring Boot 启动过程都做了些什么?

Spring Boot 提供了简化的配置和自动化功能,使开发者能够快速构建应用。但在 Spring Boot 的背后,启动过程涉及一系列复杂的流程,包括 Bean 的加载、环境配置、自动配置的注册等。这篇博文将详细总结 Spring Boot 的启动过程,并结合源码解析每一步具体做了什么。Spring Boot 的启动过程虽然看似简单,但背后涉及大量的逻辑处理,包括环境配置、IOC 容器初始化、事件广播、Bean 生命周期管理等。

2024-10-24 10:00:26 1117 1

原创 一文带你掌握ApplicationRunner和CommandLineRunner如何使用及实现原理

和是 Spring Boot 提供的两个接口,允许在 Spring 应用程序启动完成后执行特定的代码。它们的主要作用是在应用启动后执行一段初始化或任务逻辑,常见于一些启动任务,例如加载数据、验证配置、执行调度等。接下来我们就来详细看看它们在项目开发中的实际应用和 ApplicationRunner常用于应用启动后的初始化任务或一次性任务执行。它们允许你在 Spring 应用启动完成后立即执行一些逻辑。更适合需要处理命令行参数的场景,而 CommandLineRunner更简单直接。通过@Order。

2024-10-10 11:02:03 1431

原创 你知道怎么合理设置线程池参数吗?

提交一个任务,线程池会判断当前线程数是否小于核心线程数,如果是则会立即创建一个工作线程执行任务,即使当前线程池中有空闲线程(ps:之前提交任务所创建的线程执行完任务之后就空闲下来了)可以用来执行当前提交的任务,也会创建一个新的线程去执行,概括来说就是如果没有达到核心线程数,不管当前线程池中有没有空闲线程,都会立即新建一个工作线程去执行当前任务。,即有非核心线程(线程池中核心线程以外的线程)时,这些非核心线程空闲后不会立即销毁,而是会等待,直到等待的时间超过了。如果非要回收空闲的核心线程,可以将线程池的。

2024-09-25 10:30:33 1719

原创 工作五年了,总是要尝试着用回调机制Callback和函数式编程写一些优雅的代码了!!!

回调(Callback)是一种编程模式,其中一个函数(或方法)在执行完成后通过调用另一个函数(或方法)来传递执行结果,或在特定事件发生时调用。这种模式常用于异步操作、事件驱动编程中,可以提升代码的可扩展性、灵活性和模块化。回调机制指的是将一个方法或函数作为参数传递给另一个方法,待特定事件或操作完成时调用这个方法,处理结果或执行后续操作。可以理解为一种“通知”机制,当一个任务完成时,调用回调函数来传递结果或执行后续逻辑回调可以分为同步回调和异步回调:异步回调。

2024-09-13 11:18:53 1118

原创 你知道有哪些Spring MVC扩展点可以解析接口参数和处理返回值吗?

Spring MVC是一个灵活且强大的框架,它允许开发者在框架的基础上进行深度定制,以满足各种复杂的业务需求。和是Spring MVC提供的两个重要扩展点,分别用于处理控制器方法的参数解析和返回值处理。本文将详细探讨这两个接口的作用、使用场景以及如何自定义实现。关于Spring MVC谈谈@ControllerAdvice的使用及其实现原理:用于定义全局的异常处理、数据绑定、数据预处理等功能。

2024-08-22 10:16:36 797

原创 Spring Cache在业务系统中最佳实践教程详解及实现原理

接着之前总结的如何保证MySQL与Redis数据同步一致性一文中提到在业务代码中一般采用旁路缓存策略方式实现同步,就是基于该策略方式提供的一种缓存抽象,可以帮助开发者简化缓存的使用过程。它支持多种缓存实现,并通过注解的方式提供简洁的缓存操作。核心思想是通过缓存抽象层解耦具体的缓存实现,从而可以灵活地替换和配置不同的缓存方案,在包中定义了和两个顶层接口来统一不同的缓存技术。这种抽象思想是非常值得学习的,比如平时我们在业务系统代码中通过 Kafka 来发送异步消息。

2024-08-08 09:59:24 878

原创 Spring Boot项目如何优雅丝滑地从Date过渡到LocalDateTime

书接上回,我们总结了使用Date处理日期时间的存在问题以及讲述了Java 8全新日期时间等强大功能。可谓是使用LocalDateTime替代Date操作处理日期时间之后:任凭风浪起,稳坐钓鱼台。但我们都知道大部分开发人员是守旧的,我Date用的好好的,也用了这么多年了,现在要换成Java 8提供的全新,你说换就换啊???兼容吗?出问题了谁负责?😄 所以在项目中大家从Date过渡到使用类型字段作为接口出入参数,能正常映射转换前端传入的参数吗?返回参数前端是否能收到一个正常的日期时间字段值?使用。

2024-07-19 16:57:10 1029

原创 一文带你掌握SpringMVC扩展点RequestBodyAdvice和ResponseBodyAdvice如何使用及实现原理

`RequestBodyAdvice`和`ResponseBodyAdvice` 是 `Spring MVC` 提供的一种扩展点钩子机制。`RequestBodyAdvice`允许开发者在处理 HTTP 请求体之前或之后插入自定义逻辑。它通过与 `HttpMessageConverter` 紧密集成,在请求体读取和转换的过程中提供了扩展点。了解其工作原理有助于在复杂的请求处理场景中实现更强大的功能,如**日志记录、数据预处理加解密和签名验证**等。`ResponseBodyAdvice` 是一个强大的工

2024-07-12 10:00:52 2186

原创 使用LocalDateTime替代Date操作处理日期时间之后:任凭风浪起,稳坐钓鱼台

在日常开发系统过程中,日期和时间的操作处理是一个常见的应用功能场景,Java提供了多种工具和库来处理日期和时间操作,其中主要分为:Java 8之前的提供。Java 8引入了全新的日期时间API,提供了更好用且更强大的日期时间处理功能,主要的类包括LocalDateLocalTime和。在这篇博文中,我们将总结讲解一些常用的日期处理操作,证明Java 8使用全新的等类来替代以前老的Date必要性。平时我们在使用Date处理日期时间或多或少都有感觉到繁琐不方便,甚至出现逻辑不对、线程安全等问题。

2024-07-05 10:09:15 823

原创 @ControllerAdvice:你可以没用过,但是不能不了解

最近在梳理Spring MVC相关扩展点时发现了@ControllerAdvice这个注解,用于定义全局的异常处理、数据绑定、数据预处理等功能。通过使用,可以将一些与控制器相关的通用逻辑提取到单独的类中进行集中管理,从而减少代码重复,提升代码的可维护性。定义如下/*** ........*/@ComponentClass

2024-06-24 10:08:28 780

原创 kafka入门实战教程看这篇就够了

Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。**发布/订阅**:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息 分为不同的类别,订阅者只接收感兴趣的消息。

2024-05-21 10:34:18 676

原创 技术大佬灵魂质问:你们对外提供的API接口竟然没加黑白名单限制!!!

IP 黑白名单是一种常见的网络安全机制,用于控制对特定资源或服务的访问。黑名单列出了被拒绝访问的 IP 地址,而白名单列出了被允许访问的 IP 地址。通过这种方式,可以有效地防止未经授权的访问,提高系统的安全性。对于对外提供的API接口,通过设置IP黑白名单,确保只有经过认证或信任的系统和客户端才能调用接口。可以阻止已知的恶意IP地址或曾经尝试攻击系统的IP地址,防止这些来源对服务器进行未经授权的访问、扫描、攻击等行为。在项目系统服务代码中实现IP黑白名单和在Nginx中设置IP黑白名单都是可行的方式。

2024-05-17 10:29:21 983

原创 从使用教程、实现原理、差异对比全方面带你玩转业务系统中高频使用的过滤器与拦截器

在Java Web开发中,**过滤器(Filter)和拦截器(Interceptor)**是两种常见的组件,用于在请求到达目标资源之前或之后执行一些操作,如日志记录、权限控制、字符编码处理等。虽然它们的作用有些类似,但在实际应用中又有不同之处。本文将深入探讨过滤器与拦截器的实现原理、区别差异以及在实际应用中的使用场景和示例。过滤器(Filter)过滤器是一种基于规范的组件,用于在请求到达Servlet之前或响应离开Servlet之后对请求和响应进行预处理和后处理。

2024-05-13 15:16:09 605 2

原创 一文带你彻底玩转EasyExcel:导入导出excel数据起飞

EasyExcel 是一个功能强大、易于使用的 Excel 操作工具,它大大简化了 Excel 数据的读取和写入操作,提高了开发效率。通过本文的介绍,相信读者对 EasyExcel 库有了更深入的了解,希望能够在实际开发中更多地利用 EasyExcel 提升工作效率

2024-04-16 10:42:06 20510 10

原创 详解Spring event如何优雅实现系统业务解耦、实现原理及使用注意项

Spring事件(Spring Event)是Spring框架的一项功能,它允许不同组件之间通过**发布-订阅机制**进行解耦的通信。在Spring中,事件是表示应用程序中特定事件的对象,例如**用户注册、订单创建、数据更新**等。当这些事件发生时,可以通知其他组件来执行相应的操作。

2024-04-10 15:53:27 1219

原创 后端前行Vue之路(三):计算属性和监视属性

都用于响应数据变化。都是Vue实例的选项,可以在组件定义时使用。都可以监视数据变化,并在数据变化时执行自定义的操作。计算属性是基于依赖的缓存属性,只有在相关依赖发生改变时才会重新求值,而监视属性则没有缓存机制,每次数据变化都会触发相应的操作。计算属性通常用于处理需要根据其他数据动态计算得出的属性值,而监视属性用于执行异步或开销较大的操作,或者在数据变化时执行其他自定义的操作。总之,计算属性和监视属性都是Vue提供的响应式数据处理机制,您可以根据具体的需求选择使用其中之一或者两者结合使用。

2024-04-03 18:23:33 1232

原创 后端前行Vue之路(二):模版语法之插值与指令

Vue.js的模板语法是一种将Vue实例的数据绑定到HTML文档的方法。Vue的模板语法是一种基于HTML的扩展,允许开发者将Vue实例中的数据绑定到HTML元素,以及在HTML中使用一些简单的逻辑和指令。Vue.js 基于 HTML 的模板语法允许开发者声明式地将 DOM 绑定至底层 Vue 实例的数据。所有 Vue.js 的模板都是合法的 HTML,所以能被遵循规范的浏览器和 HTML 解析器解析。在底层的实现上,Vue 将模板编译成虚拟 DOM 渲染函数。

2024-03-27 14:13:50 1228

原创 后端前行Vue之路(一):初识Vue

总的来说,Vue具有轻量、简单、灵活的特点,使得它成为了Web开发中的热门选择。它不仅易于学习和上手,而且具有丰富的生态系统和活跃的社区支持,为开发者提供了丰富的资源和工具。

2024-03-22 15:23:58 1281

原创 JVM高频面试点(一):Java类加载过程

在 Java 中,类加载过程是指将 Java 类的字节码加载到内存中,并转换为 Java 虚拟机能够识别和执行的数据结构的过程。类加载是 Java 虚拟机执行 Java 程序的必要步骤之一,它负责加载程序中用到的类和接口。

2024-03-15 10:19:00 1188

原创 数据脱敏实现:“想在哪脱就在哪脱,想脱谁就脱谁! ! !“

以上全部就是本期关于数据脱敏知识点的总结介绍啦。首先介绍了数据脱敏需求的背景、概念和重要性,紧接着我们逐步探讨实现方案,权衡利弊了相关实现选择,最终选择的自带的jackson自定义序列化实现,它的实现原来其实就是在json进行序列化渲染给前端时,进行脱敏,这样可以有效降低性能损耗,并且也不会侵入系统业务层逻辑这样可以保证我们的业务逻辑不会因为数据脱敏出现逻辑错误。与此同时也强调了动态灵活可配置的脱敏信息配置,我们通过拦截器实现脱敏信息上下文设置,在上面思路我们进行代码实现剖析和实操,借助于Hutool。

2024-01-29 14:48:15 1026

原创 知乎上高频提问:Redis到底是单线程还是多线程程序?

Redis到底是多线程还是单线程程序要看是针对哪个功能而言,对于核心业务功能部分(命令操作处理数据),Redis是单线程的,主要是指 Redis 的网络 IO 和键值对读写是由一个线程来完成的,这也是 Redis 对外提供键值存储服务的主要流程,所以一般我们认为Redis是个单线程程序。但是从整个框架层面出发严格来说Redis是多线程的。Redis v4.0:引入多线程异步处理一些耗时较旧的任务,例如异步删除命令unlink,异步持久化等等Redis v6.0。

2023-12-20 14:53:16 1092

原创 Redis最实用的基础入门数据结构和常用指令使用教程

一方面,Redis 的大部分操作在内存上完成,再加上它采用了高效的数据结构,例如哈希表和跳表,这是它实现高性能的一个重要原因。另一方面,就是 Redis 采用了多路复用机制,使其在网络 IO 操作中能并发处理大量的客户端请求,实现高吞吐率。Linux 中的 IO 多路复用机制是指一个线程处理多个 IO 流,就是我们经常听到的 select/epoll 机制。简单来说,在 Redis 只运行单线程的情况下,该机制允许内核中,同时存在多个监听套接字和已连接套接字。内核会一直监听这些套接字上的连接请求或数据请

2023-12-18 11:16:41 240

原创 既生瑜何生亮,浅析下层出不穷的新ORM框架: MyBatis-Flex

这里先说说我的观点哈,仅是个人观点哦,不喜勿喷。现在这些框架层出不穷,其实吧个人感觉没必要过度关注,因为这些框架并没有完完全全做到推陈出新,反倒是有一点互相“学习copy”的感觉,并没有那么新颖强大、从无到有的一个过程。那说回今天的主题ORM框架,在Java后端技术栈里面我们都知道MyBatis是主流的ORM框架,现在很多公司都在使用着,后来在MyBatis基础上出现了两个比较主流的增强框架和MyBatis-plus最详细的入门使用教程​。

2023-12-01 13:40:17 487 1

原创 你知道MyBatis-Plus有哪些plus高级功能“玩法”吗?

以上全部就是mp提供的一些高级扩展功能,在日常开发中比较实用,都有相应的场景去使用,提高代码高效性,防止重复编码。

2023-11-20 10:26:28 145

原创 MyBatis-plus最详细的入门使用教程来了

(简称 MP,下文就使用简称啦)是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求支持 Lambda 形式调用。

2023-11-10 10:19:45 756

原创 为了理直气壮怼回去,写了一个日志切面输出接口出入参数

以上全部就是我们对打印接口参数日志的功能实现方案分析总结,合理打印输出日志有助于提高排查问题的效率,但是也不能随心所欲地打印日志,会对接口性能造成一定影响和分布式日志收集同步延时等。同时我们也分析如何实现动态灵活性,做到可插拔,最后对日志进行分类归档,方便查询。

2023-11-06 11:03:56 173

原创 Spring Boot如何优雅实现动态灵活可配置的高性能数据脱敏功能

以上全部就是本期关于数据脱敏知识点的总结介绍啦。首先介绍了数据脱敏需求的背景、概念和重要性,紧接着我们逐步探讨实现方案,权衡利弊了相关实现选择,最终选择的自带的jackson自定义序列化实现,它的实现原来其实就是在json进行序列化渲染给前端时,进行脱敏,这样可以有效降低性能损耗,并且也不会侵入系统业务层逻辑这样可以保证我们的业务逻辑不会因为数据脱敏出现逻辑错误。与此同时也强调了动态灵活可配置的脱敏信息配置,我们通过拦截器实现脱敏信息上下文设置,在上面思路我们进行代码实现剖析和实操,借助于Hutool。

2023-10-16 10:00:10 2110 2

原创 详解Zookeeper(铲屎官)在众多中间件的应用和在Spring Boot业务系统中实现分布式锁和注册中心的解决方案

Zookeeper: 直译过来是动物园管理员的意思,这里的动物表示的就是当下主流的众多框架组件(ps:现在的框架组件都喜欢用动物当图标),而Zookeeper的图标如下图所示,是一个人拿着一个铲子(铲屎官),生动形象地说明了Zookeeper等等ZooKeeper是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的反馈进行下一步合理操作。最终,将简单易用的接口和性能高效、功能稳定的系统提供给用户。分布式应用程序可以基于Zookeeper实现诸如。

2023-10-12 09:54:08 386

原创 JUC并发编程(二):线程相关知识点

在当今高流量、高并发的互联网业务场景下,并发编程技术显得尤为重要,不管是哪一门编程语言,掌握并发编程技术是个人进阶的必经之路。时隔一个半月没有写技术博客文章,有点生疏了。。。闲话少叙,接下来我将围绕并发编程知识点进行总结讲解,这里从并发编程入门开始,讲述Java内存模型和并发的三大特性。

2023-10-11 09:44:28 62

原创 JUC并发编程(一):Java内存模型(JMM)及三大特性:可见性、有序性、原子性

在当今高流量、高并发的互联网业务场景下,并发编程技术显得尤为重要,不管是哪一门编程语言,掌握并发编程技术是个人进阶的必经之路。时隔一个半月没有写技术博客文章,有点生疏了。。。闲话少叙,接下来我将围绕并发编程知识点进行总结讲解,这里从并发编程入门开始,讲述Java内存模型和并发的三大特性。

2023-10-11 09:42:54 153

原创 你知道Spring Boot插件开发模式思想—SPI机制是什么吗?

SPI全称,是Java提供的一套用来被第三方实现或者扩展的接口,它可以用来启用框架扩展和替换组件。SPI的作用就是为这些被扩展的API寻找服务实现。本质是将接口实现类的全限定名配置在文件中,并由服务加载器读取配置文件,加载实现类。这样可以在运行时,动态为接口替换实现类。通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加载文件里所定义的类,进而实现可插拔,解耦。SPI。

2023-10-08 10:09:45 239

空空如也

空空如也

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

TA关注的人

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