自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2024-08-22 10:16:36 563

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

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

2024-08-08 09:59:24 784

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

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

2024-07-19 16:57:10 794

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

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

2024-07-12 10:00:52 1175

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

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

2024-07-05 10:09:15 653

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

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

2024-06-24 10:08:28 729

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

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

2024-05-21 10:34:18 532

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

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

2024-05-17 10:29:21 801

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

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

2024-05-13 15:16:09 554 1

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

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

2024-04-16 10:42:06 9814 4

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

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

2024-04-10 15:53:27 644

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

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

2024-04-03 18:23:33 1196

原创 后端前行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 1178

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

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

2024-03-22 15:23:58 1242

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

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

2024-03-15 10:19:00 1101

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

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

2024-01-29 14:48:15 935

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

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

2023-12-20 14:53:16 865

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

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

2023-12-18 11:16:41 206

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

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

2023-12-01 13:40:17 340

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

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

2023-11-20 10:26:28 105

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

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

2023-11-10 10:19:45 616

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

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

2023-11-06 11:03:56 126

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

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

2023-10-16 10:00:10 1597 1

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

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

2023-10-12 09:54:08 272

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

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

2023-10-11 09:44:28 49

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

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

2023-10-11 09:42:54 107

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

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

2023-10-08 10:09:45 199

原创 一文带你掌握Java框架的底层灵魂:反射,看完之后阅读框架源码再也不头大了

对于每一种类,Java 虚拟机都会初始化出一个 Class 类型的实例,每当我们编写并且编译一个新创建的类就会产生一个对应 Class 对象,并且这个 Class 对象会被保存在同名 .class 文件里。(构造方法的参数获取方法同样)通过 Field 你可以访问给定对象的类变量,包括获取变量的类型、修饰符、注解、变量名、变量的值或者重新设置变量值,即使变量是 private 的。,可以构造任何一个类的对象,获取到任意一个对象所属的类信息,以及这个类的成员变量或者方法,可以调用任意一个对象的属性或者方法。

2023-09-25 10:55:07 116

原创 Spring Boot业务系统如何实现海量数据高效实时搜索

我们都知道随着业务系统的发展和使用,数据库存储的业务数据量会越来越大,逐渐成为了业务系统的瓶颈。在阿里巴巴开发手册中也建议:单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表,如果预计三年后数据量根本达不到这个级别,请不要在创建表时就分库分表。数据库最终都是存储在磁盘上,随着数据量变大,会导致数据操作变得缓慢,无论是计算还是IO,但是话又说回来,单表数据量大就一定要进行分库分表操作吗?重构适配系统。

2023-09-15 10:34:20 692

原创 Spring Boot业务系统如何实现海量数据高效实时搜索

我们都知道随着业务系统的发展和使用,数据库存储的业务数据量会越来越大,逐渐成为了业务系统的瓶颈。在阿里巴巴开发手册中也建议:单表行数超过500万行或者单表容量超过2GB才推荐进行分库分表,如果预计三年后数据量根本达不到这个级别,请不要在创建表时就分库分表。数据库最终都是存储在磁盘上,随着数据量变大,会导致数据操作变得缓慢,无论是计算还是IO,但是话又说回来,单表数据量大就一定要进行分库分表操作吗?重构适配系统。

2023-08-30 10:56:19 445

原创 Spring Boot系统之高可用限流实现解决方案

限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。为什么需要限流其实限流思想在生活中随处可见,例如景区限流,防止人满为患。热门餐饮需要排队就餐等。回到互联网网络上,同样也是这个道理,例如某某明星公布了恋情,访问从平时的50万增加到了500万,系统最多可以支撑200万访问,那么就要执行限流规则,保证系统是一个可用的状态,不至于服务器崩溃导致所有请求不可用。

2023-08-22 09:52:04 494 2

原创 Spring Boot业务代码中使用@Transactional事务失效踩坑点总结

接着之前我们对Spring AOP以及基于AOP实现事务控制的上文,今天我们来看看平时在项目业务开发中使用声明式事务的失效场景,并分析其失效原因,从而帮助开发人员尽量避免踩坑。我们知道 Spring 声明式事务功能提供了极其方便的事务配置方式,配合 Spring Boot 的自动配置,大多数 Spring Boot 项目只需要在方法上标记注解,即可一键开启方法的事务性配置。

2023-08-14 10:41:12 3068

原创 详解很多公司都在用的国产分布式任务调度框架:XXL-JOB

Quartz,但是Quartz使用起来也比较麻烦,不尽人意。Quzrtz并没有内置 UI 管理控制台,导致任务动态管理不够友好调用API的的方式操作任务不人性化,比较繁杂。需要持久化业务QuartzJobBean到底层数据表中,系统侵入性相当严重。无论是将Quartz的表放到单独库还是和业务库都不好,放在单独库,那么业务服务就是多数据源,需要视频,放在业务库会导致数据库繁琐,耦合。

2023-08-11 11:00:28 586

原创 分布式任务调度框架之开山鼻祖:Quartz

XXL-JOB,方便对任务的管理控制。本来一开始就想讲述一下该框架,但是在学习了解过程中发现该框架式基于Quartz思想开发实现的,Quartz是一个很火的开源任务调度框架,完全由Java写成,可以说是 Java 定时任务领域的老大哥或者说参考标准,所以在这里先讲讲Quartz框架。

2023-08-08 10:20:33 381

原创 Spring Boot多级缓存实现方案

以上全部就是关于多级缓存的实现方案总结,多级缓存就是为了解决项目服务中单一缓存使用不足的缺点。应用场景有:接口权限校验,每次请求接口都需要根据当前登录人有哪些角色,角色有哪些权限,如果每次都去查数据库性能开销比较严重,再加上权限一般不怎么会频繁变更,所以使用多级缓存是最合适不过了;还有就是很多管理系统列表界面都有组织架构信息(所属部门、小组等),这些信息同样可以使用多级缓存来完美提升性能。

2023-08-07 10:36:20 1371

原创 K8S核心篇:Pod

Pod 是k8s 系统中可以创建和管理的最小单元,是资源对象模型中由用户创建或部署的最小资源对象模型,也是在k8s 上运行容器化应用的资源对象,其他的资源对象都是用来支撑或者扩展Pod 对象功能的,比如控制器对象是用来管控Pod 对象的,Service 或者Ingress 资源对象是用来暴露Pod 引用对象的,PersistentVolume 资源对象是用来为Pod提供存储等等,k8s 不会直接处理容器,而是Pod,Pod 是由一个或多个container 组成。

2023-08-02 14:07:44 76

原创 K8S基础篇:概念与架构

这也是为何,Kubernetes 项目并不关心你部署的是什么容器运行时、使用的什么技术实现,只要你的这个容器运行时能够运行标准的容器镜像,它就可以通过实现 CRI 接入到 Kubernetes 项目当中。对于容器编排管理技术,最具代表性的容器编排工具,当属 Docker 公司的 Compose+Swarm 组合,以及 Google 与 RedHat 公司共同主导的 Kubernetes 项目,当然今天Compose+Swarm已经无人问津了,因为和Kubernetes比起来黯然失色。

2023-08-02 14:04:11 60

原创 Spring基于AOP事务控制实现原理

对于一个系统应用而言,使用数据库进行数据存储是必然的,意味着开发过程中事务的使用及控制也是必不可少的,当然事务是数据库层面的知识点并不是Spring框架所提出的。使用JDBC开发时,我们使用对事务进行控制,使用MyBatis时,我们使用SqlSession对事务进行控制,缺点显而易见,当我们切换数据库访问技术时,事务控制的方式总会变化,所以Spring就在这些技术基础上,提供了统一的控制事务的接口。Spring的事务分为:编程式事务控制和声明式事务控制。编程式事务控制。

2023-07-31 09:52:54 223

原创 docker终极篇:再谈docker容器

容器容器其实是一种沙盒技术。顾名思义,沙盒就是能够像一个集装箱一样,把你的应用“装”起来的技术。这样,应用与应用之间,就因为有了边界而不至于相互干扰;而被装进集装箱的应用,也可以被方便地搬来搬去。对于进程来说,它的静态表现就是程序,平常都安安静静地待在磁盘上;而一旦运行起来,它就变成了计算机里的数据和状态的总和,这就是它的动态表现。而容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。基于Linux 内核的Cgroup,Namespace,以及Union FS。

2023-07-27 15:49:01 114

原创 Spring AOP切面编程实现原理

Spring AOP是Spring框架中极为重要的核心功能,和Spring IOC并称为Spring的两大核心模块。顾名思义,AOP 即 Aspect Oriented Programming,翻译为面向切面编程。OOP面向对象编程是纵向地对一个事物的抽象,一个对象包括静态的属性信息、动态的方法信息等。而AOP是横向地对不同事物的抽象,属性与属性、方法与方法、对象与对象都可以组成一个切面,而用这种思维去设计编程的方式叫做面向切面编程。Spring AOP是利用CGLIB 和 JDK 动态代理。

2023-07-24 10:14:04 237

空空如也

空空如也

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

TA关注的人

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