- 博客(246)
- 收藏
- 关注

原创 SpringSecurity 认证流程源码详细解读
如果这些校验都通过,就会将 result 返回。没错,他就是在套娃!点进入去之后,我们来到了 AuthenticationManager 接口,但这只是一个接口,显然不是我们要的,具体的实现代码应该在实现类中,所以我们继续选择 ProviderManager ,他是 AuthenticationManager 接口的一个实现类。点进去,发现这是 AbstractUserDetailsAuthenticationProvider 接口中的方法,而且只有一个实现,那我们继续进入实现类实现的方法。
2023-05-09 08:05:47
1937

原创 谈谈你对ThreadLocal的理解
以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用。如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它。当内存空间不足,Java 虚拟机宁愿抛出 OutOfMemoryError 错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足问题。
2023-03-27 08:31:04
732

原创 Java锁机制详解
Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。
2023-02-07 09:52:00
1274
原创 Docker 安装 Redis(redis:7.4)
接下来就是要将redis 的配置文件进行挂载,以配置文件方式启动redis 容器。(挂载:即将宿主的文件和容器内部目录相关联,相互绑定,在宿主机内修改文件的话也随之修改容器内部文件)将daemonize yes注释起来或者 daemonize no设置,因为该配置和docker run中-d参数冲突,会导致容器一直启动失败。退出容器:两次 exit ,先退出客户端连接,再退出 redis 容器。获取之后,通过 Xftp 直接上传到挂载目录即可。获取之后,可以查看已获取的镜像。windows版地址——
2025-03-31 15:26:22
382
原创 docker 安装部署 canal
canal.properties 是 canal 的主要配置文件,用于配置 canal 实例的各项参数。该文件包含了连接 MySQL 数据库、消息队列、数据同步等相关的配置项。例如canal可以有多个instance,每个实例有独立的配置文件,默认只 有一个example实例。如果需要处理多个mysql数据的话,可以复制出多个example,对其重新命名, 命令和配置文件中指定的名称一致。
2025-03-24 18:03:27
695
1
原创 pnpm 启动项目报错 Did you mean to import “@babel/plugin-transform-typescript/lib/index.js“?**
网上搜了一大堆,都是清缓存、强制下载缺失依赖之类的,问了ai 也是类似结果。没想到居然是因为项目路径太深了,或者说项目名太长了,将项目名由 UClass-magin-cube-ui 改为 uc-mc-ui 问题解决。从git上将项目下载后,重新运行 pnpm i ,下载完以来后,pnpm dev 运行项目,报上面的错,问题是什么都没改。这应该是 pnpm 的问题吧,具体是因为项目路径太长还是项目名太长我也没有验证,反正是因为项目路径深导致的,改短即可。
2025-02-28 10:05:43
299
原创 面试凉经总结(一)
OAuth2 是一种授权协议,用于在不泄露用户凭据的情况下,授权第三方应用程序访问用户数据。JSON Web Token(JWT)是一种使用JSON格式传递数据的网络令牌技术,它是一个开放的行业标准(RFC 7519),它定义了一种简洁的、自包含的协议格式,用于在通信双方传递json对象,传递的信息经过数字签名可以被验证和信任,它可以使用HMAC算法或使用RSA的公钥/私钥对来签名,防止内容篡改。JWT(JSON Web Tokens)是一种开放的标准,用于在网络应用程序和服务之间共享安全的信息。
2025-02-24 08:33:11
928
原创 Java学习笔记(二十七)
Spring Cloud Alibaba 提供了一系列组件,帮助开发者更方便地使用阿里巴巴的云计算和微服务生态。组件作用Nacos注册中心 & 配置中心,支持动态配置管理和服务注册发现Sentinel流量控制、熔断降级和系统保护RocketMQ分布式消息队列Seata分布式事务Dubbo高性能 RPC 框架对象存储短信服务任务调度1.1 Nacos(注册中心 & 配置中心)作用:作为服务发现和配置管理工具,替代 Spring Cloud Eureka 和 Spring Cloud Config。
2025-02-17 08:51:16
974
原创 Docker 安装 Nacos 详细步骤
* nacos中JWT令牌密钥生成器<br>* 生成 nacos.core.auth.plugin.nacos.token.secret.key 的值*
2025-02-10 08:31:15
1585
原创 Java学习笔记(二十六)
`SqlSession` 是 MyBatis 框架提供的核心接口之一,**用于执行与数据库交互的操作**。它封装了数据库连接的操作细节,提供了执行 SQL 语句、提交事务、管理缓存等功能。
2025-02-05 08:32:33
578
原创 Java学习笔记(二十五)
是 Kafka 引入的一种新的分布式共识协议,用于取代之前依赖的集群管理机制。从Kafka 2.8开始,Kafka 开始支持基于 KRaft 的独立模式,计划在未来完全移除 ZooKeeper 的依赖。1.1 KRaft 的核心概念Raft 共识协议KRaft 基于 Raft 共识协议,确保在分布式环境中,多个副本能够在网络分区或节点故障的情况下保持数据一致性。Raft 协议的核心是通过选举产生一个 Leader,Leader 负责处理所有写入请求,并将变更复制到其他节点。
2025-01-27 08:11:29
785
原创 Java学习笔记(二十四)
策略模式(Strategy Pattern)是一种行为设计模式,定义了一系列算法,并将它们封装成独立的类,使它们可以互相替换而不会影响使用它们的客户端代码。策略模式的核心思想是将行为与环境解耦,使得行为可以灵活替换。适用于需要在运行时根据条件选择不同算法或行为的情况。
2025-01-20 17:17:45
1195
原创 Java学习笔记(二十三)
Before注解用于在目标方法执行之前执行前置逻辑。@After注解用于在目标方法执行之后执行后置逻辑,无论目标方法是否抛出异常。@Around注解用于在目标方法执行前后执行自定义逻辑,并可以控制是否继续执行目标方法或改变其返回值。这些注解在Spring AOP中非常有用,可以帮助开发者在不修改目标方法代码的情况下实现各种复杂的功能和逻辑。
2025-01-13 08:32:17
1321
原创 Java学习笔记(二十二)
定义:Redis Pipeline允许用户一次性发送多个命令到Redis服务器,并接收所有命令的响应。它通过将命令打包成一个请求来实现,从而减少了网络往返次数,提高了效率和吞吐量。工作原理:在使用Pipeline时,客户端不再逐条发送命令,而是将多个命令一次性打包成一个请求包发送给Redis服务器。服务器在接收到这个请求包后,不是立即返回每条命令的执行结果,而是先将所有命令依次执行完毕,然后将所有结果打包成一个响应包返回给客户端。
2025-01-06 08:44:22
759
原创 Java学习笔记(二十一)
Redis 7 提供了多种持久化机制,以确保数据的可靠性和持久性。Redis 7 提供了多种持久化机制以满足不同的应用场景和需求。在选择持久化机制时,需要根据实际的应用场景和需求来权衡持久化和性能之间的关系。例如,可以通过调整持久化的频率、使用更快的磁盘、优化磁盘 I/O 等方式来减少持久化对 Redis 性能的影响。同时,也需要关注 Redis 的监控和调优,及时发现和解决性能问题。
2025-01-02 08:28:51
650
原创 Java学习笔记(二十)
选择建议数据量小且对性能要求高:可以考虑使用save命令,手动触发,但需要注意其对Redis服务的阻塞影响。数据量大且对性能要求较高:推荐使用bgsave命令,后台异步执行,不会阻塞Redis的主进程。持久化策略除了手动执行save或bgsave命令外,还可以通过Redis配置文件中的save选项来自动触发持久化操作。例如,可以设置“save 900 1”表示在900秒内如果有至少1个键更改,则自动触发持久化操作。注意事项。
2024-12-30 08:48:41
717
原创 Java学习笔记(十九)
需要注意的是,Redis在执行持久化操作时,可能会阻塞服务器以完成数据写入磁盘的过程。综上所述,Redis 7 默认使用RDB持久化方式,这种方式具有紧凑的文件格式和快速的恢复速度,但可能存在数据丢失的风险和fork操作带来的性能影响。这些配置决定了在特定时间间隔内,如果达到指定的键变化数量,Redis将执行一次数据持久化操作,将数据保存到磁盘上的RDB文件中。RDB(Redis Database)是Redis的默认持久化方式,它通过将Redis内存中的数据以快照的形式写入磁盘文件来实现备份。
2024-12-23 08:30:41
906
原创 Java学习笔记(十八)
`@EnumValue` 是 MyBatis-Plus 框架中的一个注解,它主要用于将数据库中的枚举类型字段映射到 Java 枚举类型。通过使用 `@EnumValue` 注解,开发者可以轻松地实现枚举值与数据库字段的映射,避免了手动转换的繁琐步骤。
2024-12-16 08:35:41
982
原创 (HTTP code 500) server error - Ports are not available: exposing port TCP 0.0.0.0:6379 -> 0.0.0.0:0:
如果没有发现占用## windows 下 docker 启动容器报错**(HTTP code 500) server error - Ports are not available: exposing port TCP 0.0.0.0:6379 -> 0.0.0.0:0: listen tcp 0.0.0.0:6379: bind: An attempt was made to access a socket in a way forbidden by its acc端口的进程,可以尝试重启NAT网络。
2024-12-11 08:56:34
1787
原创 前端学习随笔(一)
v-bind:用于单向绑定HTML属性或组件prop到Vue实例的数据。v-on:用于监听DOM事件并在事件触发时执行相应的方法。v-model:用于在表单输入元素上创建双向数据绑定。这三个指令在Vue.js开发中非常常用,掌握它们的用法和区别对于构建高效的Vue应用至关重要。
2024-12-09 09:25:08
739
原创 Java学习笔记(十七)
注解用于启用Spring的事务管理功能,使得开发者可以通过注解来控制事务的边界和隔离级别。当在一个配置类上添加该注解时,Spring会自动配置事务管理器,并启用注解驱动的事务管理功能。注解被用于Spring Boot应用的主配置类上,以启用服务发现功能。当这个注解被添加到配置类上时,Spring Cloud会自动配置一个客户端,该客户端能够与服务注册中心进行通信,并获取服务实例的信息。这样,应用就能够参与到微服务架构中的服务发现流程中。定义是Lombok库中的一个注解,用于自动生成equals()和。
2024-12-02 08:35:45
1228
原创 Java学习笔记(十六)
网络模型Docker网络模型包括三个主要组件:容器、网络和端点。容器是运行应用程序的独立环境,网络提供容器之间和容器与外部世界之间的通信路径,而端点则是连接容器和网络的桥梁。Docker支持多种网络类型,包括桥接网络(bridge)、主机网络(host)、覆盖网络(overlay)和无网络(none)。网络驱动程序Docker网络驱动程序负责创建和管理Docker网络。常见的驱动程序包括bridge、host、overlay等。
2024-11-25 08:27:18
958
原创 pnpm : 无法加载文件 D:\Tool\environment\NodeAndNvm\node\pnpm.ps1,因为在此系统上禁止运行脚本。
【代码】pnpm : 无法加载文件 D:\Tool\environment\NodeAndNvm\node\pnpm.ps1,因为在此系统上禁止运行脚本。
2024-11-18 15:15:06
510
原创 Java学习笔记(十五)
wait方法是Object类中的一个本地方法,用于使当前线程等待,直到其他线程调用同一个对象的notify或notifyAll方法来唤醒它。wait:使当前线程无限期地等待,直到其他线程调用此对象的notify或notifyAll方法。调用此方法后,当前线程会释放它持有的对象锁,并进入等待状态。:使当前线程等待指定的时间(以毫秒为单位),直到其他线程调用此对象的notify或notifyAll方法,或者指定的时间已过。如果在等待期间被唤醒或时间到期,线程将重新获得锁并继续执行。
2024-11-18 09:45:06
1511
原创 Java学习笔记(十四)
Java中的synchronized关键字是用于控制多线程对共享资源的访问,以保证线程安全的一种手段。它可以修饰方法或代码块,确保同一时刻只有一个线程能够执行被修饰的代码段。synchronized的实现基于JVM的内置锁机制,这种锁机制在不同的竞争状态下会表现出不同的行为,即锁的不同状态。Synchronized是Java中用于控制多线程对共享资源的访问的一种手段。它通过内置的锁机制来实现线程同步,保证线程安全。Synchronized的锁状态包括无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态。
2024-11-11 08:30:28
840
原创 Java学习笔记(十三)
happens-before原则是Java内存模型中判断数据是否存在竞争、线程是否安全的依据。它定义了一系列规则,这些规则规定了哪些操作必须按照特定的顺序执行,以保证程序的正确性和线程的安全性。
2024-11-06 08:26:47
1021
原创 Java学习笔记(十二)
表示使用了连接缓存。这通常发生在连接操作(如JOIN)中,当驱动表(被连接的表,如LEFT JOIN左边的表或INNER JOIN中数据少的表)没有索引时,MySQL可能会使用连接缓存来提高查询效率。MySQL的EXPLAIN语句是优化数据库查询的重要手段,其中的Extra列包含了不适合在其他列中显示但十分重要的额外信息。时,它会返回查询的执行计划,其中包含了诸如表的访问方式、使用的索引、扫描的行数等详细信息。方法被执行时,实际上是在一个新的本地线程中,由 JVM 的启动代码间接调用的。
2024-11-04 08:51:40
971
原创 Java学习笔记(十一)
分区表是指在单节点内对表数据内容按照分区键以及围绕分区键的分区策略对表进行逻辑切分。这种切分方式是一种水平分区(Horizontal Partition)策略,它将表的数据横向拆分成更小的、更易于管理的部分。分区表增强了数据库应用程序的性能、可管理性和可用性,并有助于降低存储大量数据的总体拥有成本。是 MySQLEXPLAIN命令输出的一部分,它表示查询中每个 SELECT 子句的类型。这些类型描述了查询是如何构建的,以及查询的各个部分是如何相互关联的。通过查看。
2024-10-29 09:33:34
834
原创 Java学习笔记(十)
MyISAM和InnoDB在索引结构上的主要区别在于是否使用聚集索引。MyISAM使用非聚集索引,索引与数据分开存储;而InnoDB使用聚集索引,主键索引与行记录存储在一起。这种差异导致了它们在性能、事务支持、数据一致性等方面的不同表现。在选择存储引擎时,需要根据具体的应用场景和需求进行权衡。回表是指在执行查询操作时,MySQL首先通过索引(通常是二级索引或非聚集索引)找到满足条件的记录的主键值,然后再通过主键值回到主键索引(聚集索引)中去查找完整的记录信息的过程。
2024-10-28 14:00:33
1254
原创 Java学习笔记(九)
是 Java 反射机制中的一个接口,属于包。它的主要作用是为动态代理提供处理方法调用的能力。当使用 Java 动态代理时,可以通过实现接口来定义在代理对象上调用方法时的行为。// 定义接口// 实现接口@Override// 自定义 InvocationHandler@Override// 前置增强:打印日志// 调用目标方法// 后置增强:打印结束信息// 创建动态代理实例// 调用代理实例的方法用于创建动态代理并处理方法调用。AOP。
2024-10-24 18:22:12
1591
原创 Java学习笔记(八)
综上所述,AuthorizationManager是Spring Security中一个重要的授权接口,它提供了灵活且统一的授权机制,使得开发者可以更容易地定义和管理授权规则。在实际应用中,开发者可以根据具体需求选择合适的AuthorizationManager实现类来定义授权规则,并实现细粒度的访问控制。AuthorizationManager和AuthenticationManager虽然都是Spring Security框架中的核心接口,但它们的职责截然不同。
2024-10-22 09:23:59
1127
原创 Java学习笔记(七)
你可以在 Spring 中注册自定义函数,并在 SpEL 中使用它们。// 调用自定义函数计算平方值Spring SpEL 是一种灵活且功能丰富的表达式语言,能够帮助开发者轻松地进行动态数据处理。在实际应用中,它常用于配置注入、条件判断以及复杂业务逻辑的实现。通过结合 Java 对象及其方法,SpEL 可以极大提高代码的可读性与可维护性。AdvisorAdvisor是 AOP 中最基本的概念,封装了增强和适用范围。是一种特定类型的 Advisor,根据切入点来决定何时应用增强。
2024-10-14 09:15:09
1284
原创 Java学习笔记(六)
getopt 是一个外部命令,可以处理长选项和短选项,但需要额外的安装。getopts 是 Bash 的内置命令,只能处理短选项,但不需要外部依赖。在选择使用哪个工具时,请根据你的具体需求(是否需要长选项)和脚本的运行环境(是否有 getopt 命令可用)来决定。用户 (User):文件或目录的所有者。组 (Group):与用户相关联的组成员。其他 (Others):系统中的所有其他用户。读 ®: 允许查看文件内容或列出目录内容。写 (w): 允许修改文件内容或添加/删除目录中的文件。
2024-10-11 08:30:35
671
原创 Linux执行.sh命令出现-bash: ./bin/start.sh: /bin/bash^M: bad interpreter: No such file or directory
Linux执行.sh命令出现-bash: ./bin/start.sh: /bin/bash^M: bad interpreter: No such file or directory
2024-10-10 10:33:37
388
原创 Java 学习笔记(五)
开发者可以根据实际需求自定义AuthenticationEntryPoint的实现。例如,在自定义实现中,可以记录认证失败的日志、发送特定的错误消息给用户、或者执行其他与认证失败相关的操作。@PreAuthorize注解是Spring Security提供的一种权限控制方式,它允许开发者在方法执行前对用户进行访问控制。通过在方法上添加@PreAuthorize注解,并传入一个表达式作为参数,可以指定哪些用户可以访问该方法。
2024-10-08 11:11:41
1029
原创 Java 学习笔记(四)
综合上述参数,@ConditionalOnProperty(prefix = “spring.aop”, name = “auto”, havingValue = “true”, matchIfMissing = true) 注解的含义是:如果 spring.aop.auto 的配置值为 true,或者该配置项完全不存在(因为 matchIfMissing = true),则条件成立,标注了该注解的类、方法或Bean将被包含进Spring应用上下文中。这对于条件化地激活或禁用自动配置特别有用。
2024-09-18 15:22:11
1021
原创 一个HTTP请求的处理过程
Spring MVC框架通过过滤器、监听器、DispatcherServlet、拦截器、处理器等多个组件的协同工作,实现了对HTTP请求的高效处理。整个处理流程涵盖了请求的接收、预处理、业务逻辑处理、后处理、视图渲染和响应返回等多个阶段,每个阶段都可以通过相应的组件进行自定义和扩展,以满足不同的业务需求。
2024-09-12 08:30:11
639
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人