- 博客(119)
- 资源 (2)
- 收藏
- 关注
原创 Spring Cache sync属性
表示同步缓存,防止缓存击穿。当多个线程同时请求同一个缓存键并且该键在缓存中不存在时,只有一个线程会执行缓存方法,其他线程会等待结果被缓存。这种方式可以有效提高缓存的性能和稳定性。
2024-08-22 17:27:40
198
原创 受检异常和非受检异常
受检异常:必须在方法签名中声明或在方法内部捕获和处理。编译器会强制检查。非受检异常:不需要显式声明或捕获,编译器不会强制检查。
2024-08-21 17:27:33
196
原创 CacheLoader和装饰器模式
用于异步地重新加载缓存中的值,不会立即删除旧值,适用于需要定期刷新缓存数据的场景。:用于立即删除缓存中的指定键及其对应的值,适用于需要手动控制缓存失效的场景。在使用 Google Guava 的时,cache.get方法会在缓存中没有找到对应键的值时调用的load方法来加载数据。在使用 Google Guava 的时,cache.get方法会在缓存未命中时调用的load方法来加载数据,并将加载的数据存入缓存。这样可以确保在缓存中找不到数据时,能够自动从数据源加载最新的数据。
2024-08-21 16:46:45
710
原创 Spring学习笔记
是 Lombok 提供的注解,它用于简化 Java 类的构建器模式。它允许你使用一个简洁的语法来创建带有可选参数和默认值的构建器。它用于将一个元素映射到多个元素的流中,并将其扁平化为单个流来处理。方法接受一个映射函数,该函数将输入流中的每个元素转换为一个流。它将每个子流中的元素提取并将其添加到输出流中。它消除了创建和维护单独的构建器类以及编写冗长的构建器代码的需要。该方法返回一个构建器对象,允许你设置类的属性。方法也用于将输入流中的元素映射到一个新的流。方法将每个元素映射到一个包含多个值的流。
2024-08-18 23:52:40
336
原创 Spring动态代理与AOP
通过上述步骤,Spring能够通过动态代理技术,在目标方法执行之前自动调用@Before通知中的方法,实现程序的模块化、可维护性和可扩展性。这样的机制使得开发者能够专注于核心业务逻辑,而不需要在每一处方法调用中编写重复的前置检查代码。实际上,当你在方法上使用注解时,Spring会确保该方法被代理,使其能够正确地管理事务。这个代理过程是基于Spring的AOP机制,并且是在运行时动态生成的,无需开发者在类定义或方法声明中添加额外的代码。
2024-08-18 23:45:24
915
原创 SpringBoot事件监听机制
这种使用反射的方式来处理事件监听,使得Spring能够实现动态的依赖注入、事件匹配和方法调用,而这些操作在运行时进行,增强了框架的灵活性和扩展性。在Java中,CGlib是一个常用的类库,用于实现动态代理,尤其对于那些声明了接口(继承了某个接口或实现了某个接口)的类,因为Java语言不支持在运行时动态创建接口的实现类。这里的查找和匹配过程,从宏观上看,是Spring框架在进行的一种“增强”操作,实际上是在执行AOP的逻辑。的方法的类型相匹配,那么Spring会调用该方法来处理事件。),遵循了接口隔离原则。
2024-08-18 23:12:21
1059
原创 log4j日志配置%X{TransId}
是的静态内部类,用于存储每个线程的变量副本。Entry是的静态内部类,包含一个弱引用的键和一个强引用的值。使用一个数组table来存储Entry对象,并通过哈希算法和线性探测解决哈希冲突。主要方法包括set()get()和remove(),用于存储、获取和移除键值对。内存泄漏问题:由于键是弱引用,值是强引用,建议在使用完变量后显式调用remove()方法清除变量副本。
2024-08-15 10:16:26
1121
原创 REDOS
是的缩写,指的是利用正则表达式的漏洞进行拒绝服务攻击。攻击者通过构造特定的输入,使得正则表达式在处理这些输入时消耗大量的计算资源,从而导致系统性能下降甚至崩溃。攻击的主要原理是利用正则表达式的回溯机制。在某些情况下,正则表达式引擎会尝试多种匹配路径,这些路径的数量可能会随着输入长度的增加而呈指数级增长,从而导致计算时间急剧增加。为了防止通过这些措施,可以有效地减少系统受到攻击的风险。一个经典的攻击示例是使用具有重复和分支结构的正则表达式。(a|aa)+$这个正则表达式试图匹配一个或多个a或aa。
2024-08-12 14:46:24
271
原创 运行时异常和检查异常
运行时异常:不必捕获,但在某些情况下可以捕获以提供更友好的错误信息、记录日志或防止程序崩溃。检查异常:必须捕获或声明,以便编译器能够确保异常被正确处理。根据具体情况和需求,决定是否捕获运行时异常。
2024-08-06 17:46:35
395
原创 @SpringBootConfiguration重复加载报错
的exclude属性:用于排除特定的自动配置类,而不是用于排除主配置类本身。不同的配置类:可以创建不同的配置类,并在不同的环境中使用不同的配置类。:用于创建测试专用的配置类,并在测试中使用。
2024-08-05 14:27:52
358
原创 @ConfigurationProperties加在方法上
配置属性类:创建一个简单的类,用于映射外部配置文件中的属性。配置类:在方法上使用注解和@Bean注解,将配置属性注入到Spring容器中的Bean中。配置文件:在或文件中添加配置属性。使用配置属性:通过注入配置属性类来使用这些配置属性。在Spring框架中,@Autowired注解通常用于自动注入依赖。虽然它通常用于类的字段或构造函数上,但也可以用于方法参数上。@Autowired加在形参上的用法也是合法的,并且可以与@Qualifier注解一起使用,以指定具体的bean。
2024-08-05 10:09:38
348
原创 Kafka
不同分区之间:不同分区之间的消息传递不涉及多播,它们是独立的,用于实现并行处理和负载均衡。多播:多播是通过消费者组来实现的,一个主题中的消息可以被多个消费者组独立消费。在Apache Kafka中,不同分区之间的消息传递并不直接涉及多播的概念。为了更好地理解这个问题,我们需要明确Kafka的分区和多播的定义。不同分区之间:不同分区之间的消息传递不涉及多播,它们是独立的,用于实现并行处理和负载均衡。多播:多播是通过消费者组来实现的,一个主题中的消息可以被多个消费者组独立消费。
2024-08-05 09:46:40
1797
原创 跳表Java
跳表(Skip List)是一种用于有序数据存储的数据结构,它在链表的基础上增加了多级索引,从而提高了查找、插入和删除操作的效率。跳表的平均时间复杂度为Ologn,与平衡二叉搜索树(如 AVL 树、红黑树)相当,但实现和维护相对简单。
2024-08-02 16:55:36
507
原创 分库分表Java
在大型应用中,随着数据量的增加,单个数据库和单张表可能无法满足性能需求。此时,可以采用分库分表的策略来提升系统的性能和可扩展性。MyBatis 是一个流行的持久层框架,它可以与分库分表策略结合使用。
2024-08-02 16:48:26
961
原创 redisson分布式锁
Redisson 是一个基于 Redis 的 Java 驻内存数据网格(In-Memory Data Grid)客户端,它提供了许多分布式数据结构和服务,包括分布式锁。Redisson 的分布式锁实现基于 Redis 的。Redisson 的分布式锁是可重入的,这意味着同一个线程可以多次获取同一个锁,而不会发生死锁。通过以上步骤,可以使用 Redisson 实现分布式锁,从而在分布式系统中确保资源的互斥访问。使用 Redisson 客户端获取分布式锁,并进行加锁和解锁操作。
2024-08-02 15:40:47
895
原创 加密算法Java
对称加密:速度快,适合大数据量的加密,但密钥管理复杂。非对称加密:安全性高,密钥管理简单,但计算复杂度高,速度较慢。在实际应用中,通常会结合使用对称加密和非对称加密。例如,使用非对称加密算法来安全地交换对称加密的密钥,然后使用对称加密算法来加密数据。这种方式既能保证数据的安全性,又能提高加密和解密的效率。
2024-08-02 11:16:20
552
原创 策略模式Java
策略模式(Strategy Pattern)是一种行为设计模式,它定义了一系列算法,并将每个算法封装起来,使它们可以互相替换。策略模式使得算法可以在不影响客户端的情况下发生变化。该模式通过将算法的实现从使用它的客户端中分离出来,使得算法的变化不会影响到客户端。
2024-08-02 11:05:41
429
原创 布隆过滤器
布隆过滤器(Bloom Filter)是一种空间效率非常高的概率型数据结构,用于测试一个元素是否属于一个集合。它可以用来快速判断一个元素是否在一个集合中,但它有一定的误判率,即可能会误判一个不存在的元素为存在,但不会误判一个存在的元素为不存在。
2024-08-02 10:57:50
405
原创 restTemplate配合@Sentinel进行熔断降级
在Spring Cloud中,Sentinel是一个流量控制、熔断降级的组件。你可以通过配置和注解的方式将Sentinel与RestTemplate结合使用,实现熔断降级功能。
2024-08-02 10:14:42
298
原创 MockBean
MockBean用于在测试环境中创建和注入 mock 对象。它可以替换现有的 Spring 容器中的 bean。可以在一个测试类中使用多个@MockBean注解来创建多个 mock 对象。通过使用@MockBean,你可以在测试中轻松地模拟依赖对象,从而专注于测试你的业务逻辑。这行代码是使用 Mockito 框架来模拟的行为。具体来说,它定义了当的findById方法被调用并传入参数1L时,返回一个包含mockUser的Optional对象。
2024-08-01 17:03:07
424
原创 Collectors.groupingBy
假设我们有一个学生列表,每个学生有姓名、年级和分数三个属性,我们希望按照年级对学生进行分组,并且在分组后计算每个年级学生的平均分数。通过一个具体的例子来说明。
2024-07-30 14:15:50
356
原创 ThreadPoolTaskExecutor
是 Spring 框架中的一个类,用于管理和配置线程池。它是接口的一个实现,提供了对 JavaExecutor和的抽象封装。通常用于在 Spring 应用中执行异步任务。
2024-07-25 10:00:04
418
原创 Java异步
你还可以使用自定义的线程池来执行异步任务,而不是使用默认的。// 创建自定义线程池 ExecutorService executor = Executors . newFixedThreadPool(2);// 使用 supplyAsync 在自定义线程池中异步执行任务 CompletableFuture < String > future = CompletableFuture . supplyAsync(() -> {// 模拟耗时操作 try {
2024-07-24 19:36:36
551
原创 .collect(Collectors.groupingBy(dto -> dto.getId()));
是 Java Stream API 中的一个操作,用于将流中的元素根据某个条件进行分组。属性进行分组,分组的结果是一个。:这段代码的作用是将流中的。对象被分组到了一起。
2024-07-24 19:19:23
150
原创 SSRF攻击
SSRF(Server-Side Request Forgery,服务器端请求伪造)是一种安全漏洞,攻击者通过该漏洞可以让服务器在未经授权的情况下发起请求。SSRF 攻击通常利用服务器的权限来访问内部系统或外部资源,从而获取敏感信息或执行恶意操作。
2024-07-23 10:33:53
300
原创 exclude = DruidDataSourceAutoConfigure.class
即使排除了,你仍然可以使用数据库。排除自动配置类只是意味着 Spring Boot 不会自动配置 Druid 数据源,需要手动配置数据源和相关的数据库设置。
2024-07-22 14:37:17
218
原创 Object和?
是一个通配符类型,表示未知的具体类型,它可以匹配任意类型。表示一种不确定的类型,而。,而不能匹配其他类型的。在写法上有什么区别吗?
2024-07-19 00:23:16
138
原创 @RequestBody接收到的参数中如何限制List的长度?
的长度是否在指定范围内。如果不符合范围,将返回验证错误信息。的请求时,Spring MVC会自动验证。在Spring MVC中,你可以使用。注解和自定义的验证注解来限制。这样,当你发送一个包含。
2024-07-18 20:14:35
405
原创 K8S内存资源配置
CPU 资源500m表示 0.5 个 CPU 核心。内存资源500Mi表示 500 Mebibytes 的内存。通过配置资源请求和限制,可以更好地管理和优化 Kubernetes 集群中的资源使用,确保应用程序的稳定性和性能。
2024-07-18 14:20:37
593
原创 自定义RuntimeException
在 Java 中,自定义异常类是一个常见的需求,特别是当你需要创建特定的业务逻辑异常时。自定义可以让你创建一个不需要显式捕获或声明的异常(即非受检异常)。以下是如何自定义一个继承:创建一个新的类并继承。定义构造函数:根据需要定义不同的构造函数,例如默认构造函数、带消息的构造函数、带消息和原因的构造函数等。try {// 模拟一个异常情况通过自定义,你可以创建特定的业务逻辑异常,使代码更加清晰和易于维护。自定义异常类可以包含额外的信息和方法,以便更好地描述和处理异常情况。不调用。
2024-07-18 09:38:01
916
原创 Collections.unmodifiableList
以上方法都可以用来复制一个List,具体选择哪种方法取决于你的需求和使用场景。如果你需要一个简单的、快速的复制,可以使用ArrayList构造函数或addAll方法。如果你需要更灵活的操作,可以考虑使用stream和。
2024-07-17 19:32:25
646
原创 queryWrapper.eq()和lambdaQueryWrapper.eq()
确保传入的值类型与数据库字段类型匹配,以避免查询结果不正确或抛出异常。
2024-07-17 18:56:28
467
原创 @TableName(value=““)
如果你希望使用不同的命名策略,可以通过配置文件来进行配置。例如,可以配置为将实体类名称直接映射为表名(不进行转换):在或定义自定义命名策略} }} }} }} }} }import com} }} }} }} }import com} }} }} }} }
2024-07-17 15:33:29
817
原创 序列化和反序列化
在 Jackson 中,自定义序列化器和反序列化器可以通过继承和类来实现。以下是如何定义和使用自定义序列化器和反序列化器的详细步骤。定义自定义序列化器继承类并重写serialize方法。
2024-07-17 14:54:45
815
原创 cn.hutool.core.util.IdUtil.getSnowflake
1 位符号位:始终为 0。41 位时间戳:表示毫秒级时间,可以使用约 69 年。10 位机器 ID:可以表示 1024 个节点。12 位序列号:每个节点每毫秒可以生成 4096 个 ID。通过使用 Hutool 的方法,你可以方便地生成基于 Snowflake 算法的分布式唯一 ID。这个方法非常适合在分布式系统中使用,能够保证高并发下的唯一性和性能。
2024-07-17 11:02:53
1019
原创 RedisAtomicLong
是 Spring Data Redis 提供的一个类,用于在 Redis 中实现原子性的长整型操作。它类似于 Java 的AtomicLong,但其操作是基于 Redis 的,因此可以在分布式环境中使用。Redis 的原子性命令保证了并发操作的正确性,因此在多个服务之间同时写入到同一个实例时,不会导致值被覆盖。你可以放心地在分布式环境中使用来实现线程安全的计数器。
2024-07-17 10:02:38
936
原创 baomidou @DS注解
DS注解是 MyBatis-Plus 提供的一个注解,用于实现多数据源的动态切换。MyBatis-Plus 是一个增强的 MyBatis 框架,提供了许多实用的功能,其中之一就是多数据源支持。
2024-07-17 09:53:29
742
原创 @SuperBuilder
Lombok 的注解会自动生成构造函数,并在构造函数中为final字段赋值,因此你不需要显式地在代码中为final字段赋值。这是 Lombok 提供的便利之一,使得代码更加简洁和易于维护。
2024-07-17 09:38:43
431
社科类跨考085400-软件工程专硕上岸小心得分享
2021-04-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人