- 博客(78)
- 收藏
- 关注
原创 JVM内存模型
使用弱引用持有监听器, 当监听器对象不再被强引用时,GC自动回收。实际上是一个存储在栈上的引用,指向堆中实际的对象实例。在框架中管理类加载器的元数据。
2025-02-21 17:32:22
672
原创 Sentinel
Sentinel(哨兵) 只是 Redis 的一种运行模式,帮助我们实现自动的故障转移当 master 节点出现故障的时候, Sentinel 会帮助我们实现故障转移,自动根据一定的规则选出一个 slave 升级为 master,确保整个 Redis 系统的可用性。整个过程完全自动,不需要人工介入。
2025-02-14 14:42:05
624
原创 缓存的介绍
相关面试题 :● 为什么要用缓存?● 本地缓存应该怎么做?● 为什么要有分布式缓存?/为什么不直接用本地缓存?● 为什么要用多级缓存?● 多级缓存适合哪些业务场景?
2025-02-13 21:18:51
606
原创 MySQL常见面试题总结
一种结构化查询语言,提供一种从数据库中读写数据的方法MySQL 是一种关系型数据库,主要用于持久化存储我们的系统中的一些数据比如用户信息。READ-UNCOMMITTED(读取未提交):最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。READ-COMMITTED(读取已提交):允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。REPEATABLE-READ(可重复读)
2025-01-21 18:51:32
642
原创 解决ThreadLocal 存在的问题
问题:我们写业务代码的时候,有些逻辑是需要在异步线程中去执行,如下图所示,异步线程中,再通过去获取上下文数据,就失效了用应该就行了吧!是 Java 提供的另一个特殊的类,它是的子类。与不同,允许线程将其父线程中的值传递给其子线程。这对于一些需要在父子线程之间共享数据的场景非常有用。其实不然,同样有它的弊端,如果我们在使用线程池的情况下,它就不好使了。
2025-01-17 13:52:31
716
原创 数据库基础知识总结
元组:表中的每行(即数据库中的每条记录)就是一个元组,每列就是一个属性。在二维表里,元组也称为行。码:码就是能唯一标识实体的属性,对应表中的列。候选码:若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何、子集都不能再标识,则称该属性组为候选码。例如:在学生实体中,“学号”是能唯一的区分学生实体的,同时又假设“姓名”、“班级”的属性组合足以区分学生实体,那么{学号}和{姓名,班级}都是候选码。主码: 主码也叫主键外码: 外码也叫外键。如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。
2025-01-15 19:38:48
711
原创 Guava Preconditions 参数校验
在某些情况下,对入参中的字段进行参数校验时,没有办法用到,如登录接口中验证码的判空。因为这个接口是个二合一接口,需要同时支持手机号验证码登录,以及账号密码登录。只能在业务层中,手动进行参数校验,如下图所示:现在就校验一个字段,你会感觉代码还不是太难看。试想一下,当有多个字段需要校验时,就会有一堆的if那么,有优化的方法吗?看着很丑陋!我们就将使用谷歌 Guava 库中的 Preconditions 工具类,搭配全局异常捕获,来将这块的代码重构一下。导入依赖</</</</将之前的if。
2025-01-14 16:29:42
485
原创 Spring Boot 3.x 整合 MyBatis 代码生成器插件
是一个 Maven 插件,用于生成 MyBatis 的代码(如 Mapper 接口、Mapper XML 文件等),官方文档地址: https://mybatis.org/generator/。它可以根据数据库表自动生成相应的 Java 实体类、Mapper 接口和 XML 映射文件,大大减少了手动编写这些重复且机械化的代码的工作量。
2025-01-13 15:24:03
1349
原创 Spring Boot 3.x 整合 Druid 数据库连接池(含密码加密)
Druid 是阿里巴巴开源的一个高性能的数据库连接池,GitHub 地址:https://github.com/alibaba/druid。它不仅提供了传统数据库连接池的连接管理功能,还提供了一系列强大的监控和扩展功能。高性能:Druid 是基于 Java 平台开发的,使用了高效的连接池算法和多线程技术,能够提供高性能的数据库连接管理服务。丰富的监控功能。
2025-01-13 14:37:41
1273
原创 @SneakyThrows 注解详解
SneakyThrows 是 Lombok 提供的注解,用于简化异常处理,自动生成 try-catch 代码块,将检查型异常转换为非检查型异常。
2025-01-10 23:33:36
1072
原创 MyBatis基础知识
虽然 MyBatis 解析 xml 映射文件是按照顺序解析的,但是,被引用的 B 标签依然可以定义在任何地方,MyBatis 都可以正确识别。原理是,MyBatis 解析 A 标签,发现 A 标签引用了 B 标签,但是 B 标签尚未解析到,尚不存在,此时,MyBatis 会将 A 标签标记为未解析状态,然后继续解析余下的标签,包含 B 标签,待所有标签解析完毕,MyBatis 会重新解析那些被标记为未解析的标签,此时再解析 A 标签时,B 标签已经存在,A 标签也就可以正常解析完成了。
2025-01-03 18:26:43
934
原创 SpringBoot自动配置的原理详解
我们现在提到自动装配的时候,一般会和 Spring Boot 联系在一起。但是,实际上 Spring Framework 早就实现了这个功能。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化。SpringBoot 定义了一套接口规范,这套规范规定:SpringBoot 在启动时会扫描外部引用 jar 包中的文件,将文件中配置的类型信息加载到 Spring 容器,并执行类中定义的各种操作。
2025-01-03 18:21:16
772
原创 Spring&SpringBoot常用注解总结
这个注解是 Spring Boot 项目的基石,创建 SpringBoot 项目之后会默认在主类加上。我们可以把看作是注解的集合。
2025-01-02 13:51:22
1035
原创 SpringBoot概述
Spring Boot Starters 是一组便捷的依赖描述符,它们预先打包了常用的库和配置,可自动引入所有必要的库和配置,而无需手动逐一添加和配置相关依赖。它的好处就是节约时间,避免了依赖冲突和版本不兼容,减少配置错误举个例子: 在没有 Spring Boot Starters 之前,开发一个 RESTful 服务或 Web 应用程序通常需要手动添加多个依赖,比如 Spring MVC、Tomcat、Jackson 等。这不仅繁琐,还容易导致版本不兼容的问题。
2025-01-02 13:18:23
578
原创 SpringMVC
MVC 是模型(Model)、视图(View)、控制器(Controller)的简写MVC 是一种设计模式,Spring MVC 可以帮助我们进行更简洁的 Web 层的开发,Spring MVC 下我们一般把后端项目分为 Service 层(处理业务)、Dao 层(数据库操作)、Entity 层(实体类)、Controller 层(控制层,返回数据给前台页面)。
2024-12-30 16:10:21
1093
原创 Spring中的设计模式
定义一个事件: 实现一个继承自,并且写相应的构造函数;定义一个事件监听者:实现接口,重写方法;使用事件发布者发布消息: 可以通过的方法发布消息。Example// 定义一个事件,继承自ApplicationEvent并且写相应的构造函数// 定义一个事件监听者,实现ApplicationListener接口,重写 onApplicationEvent() 方法;@Component//使用onApplicationEvent接收消息@Override。
2024-12-30 16:09:02
958
原创 SpringSecurity
- 当前流行的权限控制系统 RBAC 模式,所以数据库表设计基于 RBAC-- 创建数据库-- 用户表user_id BIGINT NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '用户ID主键',phone VARCHAR(50) NOT NULL UNIQUE COMMENT '手机号,唯一',password VARCHAR(255) NOT NULL COMMENT '密码',
2024-12-19 18:24:08
363
原创 使用JustAuth实现gittee登录
设置回调地址,如: http://localhost:8080/oauth/gitee/callback。创建应用,获取 Client ID 和 Client Secret。前端页面,主要是实现点击gitee图标从后端得到连接跳转授权。进入设置 -> 第三方应用。
2024-12-19 18:21:08
703
原创 整合SaToken
等一系列权限相关问题。当你受够 Shiro、SpringSecurity 等框架的三拜九叩之后,你就会明白,相对于这些传统老牌框架,Sa-Token 的 API 设计是多么的简单、优雅!
2024-10-31 09:44:13
842
原创 整合 RedisTemplate
config配置包,并添加配置类/*** @author: 犬小哈* @description: RedisTemplate 配置**/@Bean// 设置 RedisTemplate 的连接工厂// 使用 StringRedisSerializer 来序列化和反序列化 redis 的 key 值,确保 key 是可读的字符串。
2024-10-31 09:43:19
664
原创 整合 flatten-maven-plugin 插件:解决子模块单独打包失败问题
将项目的pom.xml文件转换成一个更简单的扁平版本,包含消费者所需的关键信息。这个扁平的 POM 文件会去除构建相关的配置和不必要的细节,留下一个更干净、简单的 POM,便于理解和管理。简化 POM 文件: 扁平化后的 POM 去除了构建插件、配置文件等构建过程中的不必要细节,使其更简单、更易于下游项目消费。提高可重复性: 通过扁平化,确保消费者获得一致且可重复的项目依赖和元数据,避免构建时的变异。减少大小和复杂性: 该插件有助于减少 POM 文件的大小和复杂性,便于理解和排除故障。
2024-10-30 18:54:56
1043
原创 自定义 Jackson 序列化、反序列化,支持 Java 8 日期新特性
Bean// 初始化一个 ObjectMapper 对象,用于自定义 Jackson 的行为// 忽略未知字段(前端有传入某个字段,但是后端未定义接受该字段值,则一律忽略掉)// JavaTimeModule 用于指定序列化和反序列化规则// 支持 LocalDateTime、LocalDate、LocalTime// 设置时区// 设置凡是为 null 的字段,返参中均不返回,请根据项目组约定是否开启上述代码中,我们定义了一个Bean,它用于自定义。
2024-10-30 15:09:24
502
原创 Spring Boot 3.x 整合 MyBatis 代码生成器插件
在后端项目开发中,每当迭代新功能时,通常都会先进行这一步,第一步就是为每张表创建对应的实体类、Mapper接口,如果你使用的持久层框架是 MyBatis , 还需要额外创建XML映射文件。这些步骤都是模板式的,完全可以自动化生成相关代码,以提升开发效率!
2024-10-29 14:59:50
1333
原创 Spring Boot 3.x 整合 Druid 数据库连接池(含密码加密)
Druid 是阿里巴巴开源的一个高性能的数据库连接池,GitHub 地址:https://github.com/alibaba/druid。它不仅提供了传统数据库连接池的连接管理功能,还提供了一系列强大的监控和扩展功能。高性能:Druid 是基于 Java 平台开发的,使用了高效的连接池算法和多线程技术,能够提供高性能的数据库连接管理服务。丰富的监控功能。
2024-10-29 14:24:15
1730
1
原创 自定义线程池
Java的类提供了一些静态工厂方法来创建预定义的线程池。:创建一个固定大小的线程池。:创建一个单线程化的线程池。:创建一个可缓存的线程池。:创建一个支持定时及周期性任务执行的线程池。可能会导致大量的线程创建,默认线程池的拒绝策略可能是简单地抛出异常或者静默失败,这不利于错误的诊断和处理线程数控制:可以根据应用的具体需求来设定核心线程数、最大线程数和线程存活时间。任务队列:可以选择不同类型的队列来优化任务的排队和调度。线程命名和优先级:可以使用自定义的来创建带有特定名称前缀和优先级的线程。
2024-10-28 13:23:31
883
原创 关于注解@ComponentScan
ComponentScan是Spring框架中的一个注解,用于指定Spring IoC容器扫描哪些包以查找带有特定注解的类,并将它们注册为Bean。
2024-10-27 16:43:50
308
原创 Docker本地安装Minio对象存储
MinIO 是一个开源的对象存储服务器。这意味着它允许你在互联网上存储大量数据,比如文件、图片、视频等,而不需要依赖传统的文件系统。MinIO 的特点在于它非常灵活、易于使用,同时也非常强大,可以在你的应用程序中方便地集成。
2024-10-26 15:55:37
824
原创 Docker本地安装Minio对象存储
MinIO 是一个开源的对象存储服务器。这意味着它允许你在互联网上存储大量数据,比如文件、图片、视频等,而不需要依赖传统的文件系统。MinIO 的特点在于它非常灵活、易于使用,同时也非常强大,可以在你的应用程序中方便地集成。
2024-10-26 15:54:33
1162
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人