- 博客(39)
- 收藏
- 关注
原创 Spring三级缓存的作用与原理详解
第二级缓存(earlySingletonObjects):这是一个存储早期暴露出来的singleton bean的缓存。在Spring框架中,Bean的创建过程涉及到了三级缓存机制。本文将深入探讨Spring中的三级缓存,以及其在bean生命周期中的重要作用。第一级缓存(singletonObjects):这是一个存储已经完全初始化完成的singleton bean的缓存。通过这种三级缓存机制,Spring可以很好地解决单例模式下的循环依赖问题,同时也能确保bean的创建过程高效且线程安全。
2025-05-16 18:50:44
370
原创 深入解析SpringBoot中的多线程与线程池实战
在现代Web应用中,高并发请求处理是一个常见的需求。例如,一个电商平台在促销活动期间,可能会面临大量用户同时下单的情况。为了提高系统的吞吐量和响应速度,我们需要使用多线程技术来并发处理这些请求。
2025-05-14 10:21:27
343
原创 深入解析Spring Security:JWT认证与授权实践
JWT是一种轻量级的认证和授权机制,由三部分组成:Header、Payload和Signature。它通过签名确保数据的完整性和安全性,适用于分布式系统的认证场景。通过Spring Security和JWT的结合,我们可以实现高效、安全的认证与授权机制。JWT的轻量级特性使其成为分布式系统的理想选择,而Spring Security的强大功能则为开发者提供了灵活的配置选项。
2025-05-14 10:19:45
182
原创 深入理解SpringCloud中的OpenFeign:原理、使用与业务场景
OpenFeign通过声明式的方式简化了微服务之间的调用,提高了开发效率。结合SpringCloud的其他组件,可以构建高可用、高性能的微服务系统。
2025-05-14 10:17:06
437
原创 深入理解SpringBoot中的线程池配置与使用
合理地配置和使用线程池可以显著提升系统的并发处理能力。SpringBoot提供了便捷的线程池配置方式,开发者可以根据业务需求灵活调整参数。
2025-05-14 09:53:19
404
原创 深入理解SpringBoot中的SpringCache缓存技术
SpringCache是Spring框架提供的一种缓存抽象,它通过注解的方式简化了缓存的使用。开发者无需关心底层缓存的具体实现(如Redis、Ehcache等),只需通过简单的注解即可实现缓存功能。SpringCache通过简单的注解实现了缓存的透明化管理,开发者可以专注于业务逻辑而无需关心缓存的具体实现。在电商等高并发场景中,合理使用缓存可以显著提升系统性能。
2025-05-14 09:50:52
544
原创 Java面试必备:深入理解SpringBoot自动配置原理
SpringBoot的自动配置是其核心优势之一,通过深入理解其原理,开发者可以更高效地构建应用。希望本文能帮助你在面试中脱颖而出,同时也能在实际开发中灵活运用这一特性。
2025-05-14 09:46:57
384
原创 互联网大厂Java面试题:深入解析SpringCloud微服务架构中的服务注册与发现机制
通过本文的解析,我们深入了解了Nacos的服务注册与发现机制,以及其在高并发环境下的优化策略。掌握这些技术点,能够帮助你在互联网大厂的Java面试中脱颖而出。
2025-05-14 09:31:07
398
原创 Java面试必备:Spring Boot中如何实现多数据源配置?
通过动态数据源配置,可以灵活地在Spring Boot项目中操作多个数据库。掌握这一技术点,不仅能提升面试竞争力,还能在实际开发中应对复杂的业务需求。
2025-05-14 09:27:28
574
原创 order by的工作流程
在日常的业务开发中,使用到MySQL的order by对数据进行排序是一个很正常的行为,那么你知道order by是如何工作的嘛?
2024-04-15 13:57:09
1158
原创 count(?)为什么越来越慢?
在日常的业务开发中,汇总记录使用是常见用法,分页查询的时候都会用到,那么随着系统记录的数量越来越多,你有没有发现这条语句执行的也越来越慢了呢?
2024-04-12 14:25:54
808
原创 表数据删除了一半,表文件大小却不变?MySQL删除执行流程
本文讨论的就如题目所示,为什么在 MySQL 中,把表数据删除了一半,表文件大小却不变的?以下讨论前提都是使用InnoDB存储引擎,使用DELETE删除,并非。
2024-04-11 10:41:34
1941
原创 MySQL全局锁,表锁,行锁介绍
数据库锁设计的初衷是处理并发问题,作为多用户共享的资源,当出现并发访问的时候,数据库需要合理的控制资源的访问规则,而锁就是用来实现这些访问规则的重要数据结构根据加锁的范围,MySQL 里的锁大概可以分为全局锁,表级锁,行锁三类
2024-04-09 16:51:26
1032
原创 MVCC多版本并发控制
可重复读的核心就是一致性读,而事务更新数据的时候,只能用当前读如果当前记录的行锁被其他事务占用的话,就需要进入锁等待在可重复读隔离级别下,只需要在事务开始的时候创建一致性视图,之后事务里的其他查询都共用这个一致性视图;在读提交隔离级别下,每一个语句执行前都会重新算出一个新的视图。
2024-04-02 16:16:13
412
原创 MySQL事务隔离级别
在不同的隔离级别下,数据库行为是不同的,Oracle数据库默认隔离级别是读已提交MySQL默认隔离级别是可重复读,如果存在 Oracle 迁移到 MySQL,为保证数据库隔离级别一致,需要将 MySQL 的隔离级别改成读已提交MySQL 配置的方式是,将启动参数的值设置成,可以使用来查看当前隔离级别正常情况下,为了保证效率,我们一般都会把事务隔离级别调整成读已提交,那么什么时候需要可重复读的场景呢?大多数在做数据校对的时候,不希望有其他事务来干扰数据,启动可重复读是很方便的。
2024-04-02 13:16:30
798
原创 SQL更新语句执行流程
redolog 是 InnoDB 存储引擎独有的,是保证事物持久性的重要机制。当 mysql 意外宕机或崩溃时,保证已提交的事物,确定持久化到磁盘的一种措施,防止数据丢失;
2024-03-28 16:14:54
534
原创 SQL查询执行流程
在 MySQL 执行一条查询语句的时候,比如,这篇文章来简要的描述SQL查询的执行流程可以把整体结构分成 Server 层和存储引擎层,Server 层包括。存储引擎层则有常见的 InnoDB,MyISAM,Menory 存储引擎,在 MySQL5.5 后默认使用 InnoDB 存储引擎。
2024-03-27 17:53:26
431
原创 Lucene轻量级搜索引擎,Solr 和 ElasticSearch 都是基于 Lucene 的封装
Lucene 是一个本地全文搜索引擎,Solr 和 ElasticSearch 都是基于 Lucene 的封装
2024-03-11 21:30:51
1362
原创 史上最详细的Springboot发送各类邮件教程
*** 普通邮件发送* @param form 发送人* @param to 发送对象* @param subject 主题* @param content 内容*//*** Html邮件发送* @param form 发送人* @param to 发送对象* @param subject 主题* @param content 内容*//*** 邮件发送* @param name 发送人名称* @param form 发送人* @param to 发送对象。
2024-03-09 17:26:41
12941
1
原创 枚举字典最佳实践
枚举是 Java 开发中必不可少的一部分,工作中常用来定义单例工具类,常量,状态字典等,本文主要介绍枚举当做字典的最佳实践。
2024-03-06 17:19:41
1263
1
原创 本地缓存Caffeine
一个项目里可能需要缓存的数据有很多,比如用户信息,权限信息,菜单信息等等,我们需要给不同的场景分配不同的命名空间,并设置不同的过期时间/*** 用户缓存,缓存时间单位/秒*//*** 菜单缓存,缓存时间单位/秒*/;/*** 缓存名称*//*** 过期时间*/...
2023-11-15 11:04:24
866
1
原创 alibabaCloud整合Nacos注册中心和配置中心
如果要在特定范围内(⽐如某个应⽤上)覆盖某个共享dataId上的特定属性,请使⽤ extension-config。user-service-dev.yml(nacos上的当前环境配置) > user-service.yml(⽐如其他应⽤的数据库url,都是⼀个固定的url,使⽤。上的)> application.yml(本地的)数据的,但是这时候从nacos配置中心修改成。是特例,需要为该应⽤配置扩展属性来覆盖。,服务里是不会更新的,获取数据还是。的共享配置,但其中有⼀个应⽤。这样是可以正常获取到。
2023-10-30 15:44:40
224
1
原创 mybatis查询大批量数据
服务端数据准备完成后,进行数据传输,它允许应用程序在数据库服务器上打开一个游标并按需检索数据,而不是一次性获取整个结果集,类似客户端向服务端分批。公司里有很多需要跑批数据的场景,这些数据几十万到几千万不等,目前我们采用的是分页查询,但是分页查询有个深度分页问题,上百万的数据就会查询的很慢。客户端而言,数据每次读取都是从本机器的内核缓冲区,所以性能会更快一些。代表的客户端内核源源不断的输送数据,直到客户端请求 Socket 缓冲区满,这时的。问题,我们可以选择使用分页查询,这样就不会导致内存溢出问题了。
2023-09-14 15:34:18
1796
1
原创 mybatis缓存源码解析
xml配置:yml配置:xml配置:yml配置:创建sqlSession代理对象默认使用2. 创建代理对象方法是个关键方法,决定是创建一个新的还是复用旧的3. 创建或复用对象如果在同一个事务中,则使用旧的对象如果不在同一个事务中,则重新通过创建新的对象如果不在同一个事务下,那么每次查询都会创建一个新的,那就看不到一级缓存的效果了,所以想要看效果,需要开启事务,保证几次查询用的是同一个创建新的对象这个日志很明显4. 创建对象这里的就是二级缓存的开关,
2023-09-13 15:25:07
481
1
原创 SPI机制
SPI (Service Provider Interface),主要适用于扩展作用,SPI可以很灵活的让接口和实现分离,让api提供者只提供接口,第三方来实现,然后可以使用配置文件的方式来实现替换或者扩展,在框架中比较常见,提高框架的可扩展性。
2023-05-11 18:03:02
238
原创 接口安全处理
在我们日常开发中,存在一些接口是敏感且重要的,比如充值接口,如果在你调用充值接口的时候被别人抓包了,然后就可以修改充值的金额,本来充值10元可以改成充值10w,产生重大生产问题,再或者说被被人抓包了,别人可以不限制的调用该充值10元的接口,调用几万次,也是会导致重大问题,那么我们该如何保证接口安全呢?说到数据加密,我们不难想到使用HTTPS进行传输,HTTPS使用了RSA和AES加密的方式保证了数据传输中的安全问题,具体的HTTPS的加密原理,请看。,所以一般转账类安全性要求高的接口开发,都需要。
2023-04-05 17:40:56
1167
2
原创 ThreadLocal父子间通信的四种解决方案
ThreadLocal 是存储在线程栈帧中的一块数据存储区域,其可以做到线程与线程之间的读写隔离。但是在我们的日常场景中,经常会出现父线程需要向子线程中传递消息,而 ThreadLocal 仅能在当前线程上进行数据缓存,这里就介绍4种父子间通信问题;
2023-02-19 19:27:52
1851
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人