- 博客(18)
- 收藏
- 关注
原创 缓存穿透解决方案之「布隆过滤器」
【摘要】布隆过滤器是一种高效解决缓存穿透问题的数据结构,由位数组和多个哈希函数组成。其核心原理是通过哈希映射将元素存入二进制位数组,查询时若所有映射位均为1则可能存在(存在误判可能),否则一定不存在。该方案显著减少无效数据库查询(如某电商系统减少75%查询量),通过位数组节省90%以上内存空间。优化方向包括增大位数组或调整哈希函数数量以平衡误判率与内存消耗。特性总结:断言不存在时绝对准确,断言存在时可能有小概率误判。
2025-09-25 17:37:35
331
原创 Spring循环依赖以及三个级别缓存
Spring通过三级缓存机制解决单例Bean的循环依赖问题。一级缓存存储完全初始化的Bean,二级缓存存放未完成初始化的半成品Bean,三级缓存则保存Bean工厂用于生成早期引用(可能包含代理对象)。当BeanA和BeanB相互依赖时,Spring会先实例化BeanA,将其工厂放入三级缓存,在填充BeanA属性时发现需要BeanB,转而创建BeanB并同样存入三级缓存。当BeanB需要注入BeanA时,从三级缓存获取BeanA的早期引用,从而打破循环依赖。这种方法既能处理普通循环依赖,也能支持AOP代
2025-07-26 09:56:30
660
原创 SpringSecurity框架入门
Spring Security 是一个 Java 框架,用于保护应用程序的安全性。它提供了一套全面的安全解决方案,包括身份验证、授权、防止攻击等功能。Spring Security 基于过滤器链的概念,可以轻松地集成到任何基于 Spring 的应用程序中。它支持多种身份验证选项和授权策略,开发人员可以根据需要选择适合的方式。此外,Spring Security 还提供了一些附加功能,如集成第三方身份验证提供商和单点登录,以及会话管理和密码编码等。总之,Spring Security 是一个强大且易于使用的框
2025-04-06 17:00:43
1053
原创 深入浅出消息队列 (RabbitMQ)
在分布式系统中,经常被用来实现异步解耦、流量削峰等功能。它能够让系统在高并发环境下更具弹性,并且在各个模块之间实现“松耦合”的交互。
2025-03-14 22:49:03
1194
原创 Cookie,Seesion和Token区别及用途
Cookie、Session、Token 和 JWT(JSON Web Token)都是用于在网络应用中进行身份验证和状态管理的机制。虽然它们有一些相似之处,但在实际应用中有着不同的作用和特点。
2024-12-16 17:09:45
873
原创 Redisson分布式锁
Redisson不只是一个 Java Redis 客户端,它是一个以内存 Redis 服务器作为后端的处理 Java 对象(如等)的一个框架。Redisson提供了使用Redis的最简单和最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上,Redisson底层采用的是Netty框架。SETNX适用于简单场景,但在高可靠性、高并发的生产环境中,建议使用更完善的分布式锁实现。
2024-12-09 15:35:00
1445
原创 Mybatis框架中resultType和resultMap的区别
和 是 MyBatis 框架中用于处理查询结果映射的两种方式。 查询的结果将自动映射到 类的 , , 字段上 允许将数据库表中的 、、 映射到 Java 对象 的 、 和 属性上。
2024-09-05 16:17:33
583
原创 Java开发中的vo,dto,po
DTO:用于数据传输,通常在服务层与表现层之间传递数据,目的是优化数据传输效率。VO:用于表现层,通常是业务数据的封装,直接用于前端显示。PO:用于持久化,直接与数据库中的表结构对应,是 ORM 框架操作数据库的基础。
2024-09-01 13:34:35
2510
原创 mybatis 二级缓存
二级缓存是 MyBatis 提供的一种缓存机制,用于减少对数据库的访问次数,提高应用程序的性能。它是基于 SQLSessionFactory 级别的缓存,与一级缓存(SQLSession 级别的缓存)不同,二级缓存在多个 SQLSession 之间共享。以下是二级缓存的一些关键点:形象解释一下:二级缓存可以形象地比喻成一个共享的图书馆,用来提高数据查询的效率。
2024-07-06 17:56:49
1234
原创 Spring Cache 注解---@EnableCaching,@Cacheable、@CachePut 和 @CacheEvict
Spring Cache 注解---@EnableCaching,@Cacheable、@CachePut 和 @CacheEvict。
2024-05-24 23:54:48
594
原创 @PathVariable,@RequestParam和@RequestBody区别
尽管在大多数情况下 DTO(Data Transfer Object)用于封装多个请求参数,但在某些情况下,你可能还需要直接从请求参数中读取某个特定的参数,同时仍使用 DTO 来封装其他参数。注解在 Spring MVC 中通常用于从 HTTP 请求的 body 中绑定数据到方法参数上,特别是在处理 POST、PUT 或 PATCH 请求时,这些请求通常包含 JSON、XML 等格式的请求体数据。通常用于处理 GET 请求的查询字符串参数,而 POST/PUT 请求的体数据则通常使用。
2024-05-10 23:43:35
1806
原创 Java多线程中currentThread()方法
从结果可以发现,ThreadDemo类的构造方法是被main线程调用的,而run方法是被名为Thread-0的线程调用的,run方法是自动调用方法。在Java多线程编程中,currentThread()方法通常用于获取当前线程的名称或ID,以便于线程之间的区分和管理。上述代码可以输出当前线程的名称,如果没有设置线程名称,则输出默认名称“Thread-N”,其中N为线程在线程池中的编号。该方法可返回当前正在执行的线程对象的引用。上述代码可以输出当前线程的ID,ID是线程的唯一标识符,用于线程之间的区分。
2023-12-23 11:36:41
1180
1
原创 Java中的缓冲区
由于计算机的磁盘读写速度较慢,而内存读写速度较快,因此将数据从磁盘读取到内存,再将数据从内存写入到磁盘的过程中,可以使用缓冲区来减少数据在内存和磁盘之间的传输次数,从而提高程序的性能。在Java NIO(New I/O)中,缓冲区是一个非常重要的概念,它用于存储不同类型数据的数组。在Java中,缓冲区类Buffer提供了一些常用的方法,如append、get、put等,用于对数据进行读写操作。Java中的缓冲区(Buffer)是一个用于临时存储数据的固定长度的数据容器。
2023-12-19 20:16:30
685
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人