- 博客(32)
- 收藏
- 关注
原创 两万字探讨时间轮算法
时间轮算法(Timing Wheel Algorithm)是一种高效的延时任务调度算法,其核心设计是基于一个“环形数组”,可以类比于时钟表盘。起源:时间轮的思想最早源于对网络协议超时控制问题的优化研究。随着延时任务需求的激增,它逐步发展为一个通用的任务调度算法。Netty 框架中的是时间轮应用的一个典型案例。时间轮算法以其高效、低复杂度的特性,在延时任务调度领域占据了重要地位。它采用环形数组作为核心结构,将任务按照延迟时间映射到不同的槽中,并通过固定间隔推进指针实现任务的触发。
2025-01-17 11:07:16
758
原创 深入理解 ThreadLocal、InheritableThreadLocal 和 TTL
是一个线程本地存储工具,能够为每个线程提供独立的变量副本,变量值仅对该线程可见,适用于线程隔离的场景。是的扩展,增加了“父线程到子线程”的数据传递功能。它的主要特点是:当子线程被创建时,能够继承父线程的值。特性线程隔离是是是子线程继承值否是是线程池兼容否否是异步上下文传递否否是。
2024-12-26 09:36:52
1024
原创 代理模式与Spring中的AOP
代理模式是一种强大且灵活的设计模式,它通过引入代理对象来控制对目标对象的访问。代理模式提供了一种清晰的方式来实现横切关注点的分离,使得在不修改目标类的情况下,可以为其添加额外的功能。通过代理模式,开发人员能够更加高效地处理事务管理、日志记录、安全控制、缓存等常见的横切关注点。在Spring框架中,代理模式被广泛应用于AOP(面向切面编程)中,通过生成代理对象来增强目标对象的行为。Spring AOP支持基于接口的JDK动态代理和基于类的CGLIB代理,提供了非常灵活的编程方式。
2024-12-25 09:52:18
848
原创 责任链模式在Spring中的应用
责任链模式作为一种经典的行为型设计模式,具有解耦、灵活和可扩展的特点。在Spring框架中,责任链模式得到了广泛应用,如过滤器链、拦截器链、事务管理等。通过合理使用责任链模式,开发者可以实现高效的请求处理流程,提升系统的可维护性和扩展性。然而,在实际应用中,责任链模式也需要针对具体场景进行优化。过长的链条、调试困难、动态调整需求等问题都需要引起关注。未来,随着微服务架构和云原生技术的发展,责任链模式可能会进一步与分布式系统的链路追踪、服务治理等技术结合,成为更具价值的设计模式。
2024-12-10 14:20:25
1217
原创 深入理解适配器模式及其在 Spring 中的应用
适配器模式是一种结构型设计模式,旨在解决接口不兼容的问题。通过适配器,我们可以将现有的类包装起来,使其接口与目标接口一致,满足客户端需求。本文从适配器模式的概念、结构、实现到其在 Spring 框架中的应用进行了全面介绍。通过适配器模式,我们可以解决接口不兼容问题,提高系统的复用性和灵活性。
2024-12-10 11:32:08
1076
原创 享元模式定义与应用场景
享元模式通过将共享对象的相同部分进行资源复用,能够有效地降低内存消耗和提升系统性能。它广泛应用于数据库连接池、缓存管理等场景,并在Spring框架中得到了非常好的实现。通过合理使用享元模式,我们不仅可以优化内存消耗,还能在大规模并发系统中提高性能。在分布式系统中,享元模式不仅仅局限于内存对象的复用,还扩展到数据库连接、线程池、缓存和消息队列等资源的共享。通过集中管理和复用这些资源,可以显著提升系统的整体效率和可伸缩性。
2024-12-07 07:00:00
763
原创 策略模式及其在 Spring 框架中的应用
策略模式的定义是:定义一系列算法,将每个算法封装起来,并使它们可以互相替换。策略模式使得算法可以在不影响客户端的情况下发生变化。这一定义表明,策略模式关注于“算法的可替换性”,特别适用于需要动态选择行为的场景。通过封装算法,策略模式避免了直接在客户端硬编码行为逻辑,使代码更加灵活和易于扩展。策略模式通过将算法或行为封装在不同的策略类中,使得客户端可以灵活地选择不同的策略执行,极大提高了代码的灵活性和可扩展性。
2024-12-06 14:33:36
845
原创 精确计算与高效应用:Java 中 BigDecimal 的使用指南
BigDecimal提供了高精度的数值计算能力,是 Java 开发中不可或缺的工具。通过合理的初始化、精准的操作以及高效的批量处理,BigDecimal能够很好地解决开发中的精度问题。希望本文能够帮助您更好地掌握并应用BigDecimal,为您的开发工作保驾护航!欢迎留言分享更多使用技巧!
2024-12-06 13:57:28
1183
原创 第六篇:装饰器模式的应用
装饰器模式属于结构型设计模式,它允许在运行时动态地向对象添加新的行为,同时保持对象的接口不变。这意味着你可以将一个对象包装在另一个对象中,从而为其增加新的功能,而不需要修改原始对象的代码。这种模式有助于遵循开闭原则(Open/Closed Principle),即软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。当您需要为一个类添加功能,但又不希望修改其源代码时。当您有多个装饰器可用于组合,以实现不同的组合效果。当您希望将对象的功能分离成不同的层次,以便分别添加或删除功能。
2023-09-28 15:11:50
496
原创 第五篇:观察者模式的事件驱动
观察者模式,又称为发布-订阅模式,是一种设计模式,用于定义一种对象之间的依赖关系,使得一个对象的状态改变时,其所有依赖对象都会得到通知并自动更新。这种模式提供了一种松耦合的方式,使得主题对象(被观察者)和观察者对象之间能够独立演化,互不影响。主题(Subject):也称为被观察者,它维护一组观察者对象,并通知它们状态的变化。观察者(Observer):观察主题的对象,当主题状态发生改变时,观察者会得到通知并执行相应的操作。
2023-09-27 16:45:49
223
原创 Spring框架中的模板方法模式
在软件开发中,设计模式是解决常见问题的经验总结,能够提供一种优雅的解决方案。Spring框架作为一个开发Java应用程序的强大工具,积极采用和借鉴了多种设计模式,其中依赖注入(Dependency Injection,DI)和控制反转(Inversion of Control,IoC)是其核心概念和设计原则。除了DI和IoC,另一个常用的设计模式是模板方法模式(Template Method Pattern),它在Spring中的应用同样具有重要意义。
2023-06-12 11:00:02
1463
原创 深入解析依赖注入和控制反转在Spring框架中的作用和好处
通过使用接口定义依赖关系,可以实现对象之间的松耦合,并支持灵活的实现替换。当定义依赖关系时,应针对接口而不是具体实现进行编程。// 实现省略 } public class PushNotificationService implements NotificationService {// 实现省略 }在上述示例中,定义了一个 NotificationService 接口,并有两个不同的实现类。在使用依赖注入时,将依赖关系声明为接口类型,从而实现对不同实现类的灵活切换。
2023-06-12 10:40:10
1593
原创 系列二:Spring框架中工厂模式的灵活应用
在软件开发中,工厂模式是一种常用的创建型设计模式,用于通过一个共同的接口创建不同类型的对象。在Spring框架中,工厂模式被广泛应用,以解耦对象的创建过程,提供更灵活的对象创建和配置方式。本篇博客将介绍Spring框架中的工厂模式的不同变体,包括简单工厂、工厂方法和抽象工厂,并探讨它们的适用场景和最佳实践。工厂模式是Spring框架中常用的设计模式之一,它可以帮助我们实现松耦合、可扩展和可配置的对象创建过程。
2023-06-09 15:57:56
1398
原创 系列一:Spring中的单例模式:保证对象唯一性与性能优化
单例模式是一种创建型设计模式,旨在确保一个类只有一个实例,并提供一个全局访问点。它常用于需要共享资源、管理对象状态或控制对象创建和销毁的场景。在Spring中,单例模式被广泛用于管理和创建Bean对象。Spring容器默认使用单例模式来管理Bean对象,以确保在应用程序的整个生命周期中只有一个实例。唯一性:单例模式保证一个类只有一个实例。通过使用单例模式,我们可以确保在系统中全局范围内只存在一个对象实例,从而避免重复创建和消耗资源。
2023-05-22 14:54:23
1182
原创 Spring中的设计模式:优化代码结构与增强可维护性
本篇博客将介绍代理模式的概念、静态代理和动态代理的实现方式,并探讨在Spring框架中如何使用代理模式实现AOP和实现横切关注点的功能。本篇博客将介绍桥接模式的原理、优势和适用场景,并探讨在Spring框架中如何应用桥接模式来处理不同维度的变化和实现功能的组合。本篇博客将介绍状态模式的概念、实现方式和应用场景,并探讨在Spring框架中如何应用状态模式来实现状态的动态切换和业务逻辑的处理。本篇博客将介绍访问者模式的原理、结构和使用方式,并探讨在Spring框架中如何应用访问者模式来实现数据的操作和处理。
2023-05-22 14:42:11
251
原创 JavaScript函数的默认参数:简化代码、提升灵活性
通过在函数定义中指定默认参数的值,我们可以更方便地处理可选参数、简化函数调用,并减少条件检查和参数处理逻辑的复杂性。因此,在日常的JavaScript开发中,我们应该充分利用默认参数的优势,并根据实际需求和最佳实践来设计和使用函数的默认参数。默认参数与arguments对象:在函数内部,arguments对象中的参数数量和顺序与函数定义中的参数一致,不受默认参数的影响。默认参数的兼容性:默认参数是在ECMAScript 6(ES6)中引入的新特性,因此在使用默认参数时需要考虑目标浏览器的兼容性。
2023-05-22 14:27:24
426
原创 深入解析Redis中的跳表:高效有序集合的数据结构
通过本文的深入解析,我们详细介绍了Redis中的跳表数据结构。跳表通过引入索引层次和链表结构,实现了高效的有序集合操作。我们了解了跳表的原理、应用场景以及与其他数据结构的对比。跳表在某些场景下具有优于其他数据结构的性能,并在实际应用中发挥着重要的作用。熟悉跳表的特点和使用方法,有助于开发者在设计和优化数据结构时做出更明智的选择。参考文献:Redis官方文档:https://redis.io/topics/data-types。
2023-05-16 11:06:45
580
原创 深入探究Redis Cluster和Sentinel:高可用分布式解决方案
为了满足大规模应用和高可用性的需求,Redis提供了两种解决方案:Redis Cluster和Redis Sentinel。例如,可以将Redis Cluster作为主要的数据存储层,通过Sentinel来监控和管理Cluster节点的状态,确保集群的高可用性。配置Redis Sentinel需要指定监控的主节点和从节点信息,并设置哨兵的端口和配置文件。当主节点故障时,集群中的其他节点会自动选举一个新的主节点,并继续提供服务,保证数据的连续可访问性。它可以自动检测并处理节点的故障,并确保集群的稳定运行。
2023-05-16 10:54:44
575
原创 Redis实战:高效缓存与数据存储解决方案
Redis是一个基于内存的数据结构存储系统,支持多种数据类型,包括字符串、哈希、列表、集合和有序集合等。它具有快速读写能力和丰富的数据操作命令,是一种高性能的数据存储解决方案。缓存是一种将计算结果存储在高速存储介质中的技术,以提高系统响应速度和降低对后端资源的依赖。Redis作为缓存的选择之一,具有以下优势:快速读写能力:Redis基于内存操作,读写速度极快,适合存储热点数据。多种数据结构支持:Redis支持多种数据结构,能满足不同场景的缓存需求。
2023-05-16 10:49:13
622
原创 好用的软件,你懂的。csdn各种屏蔽
YUhSMGNITTZMeTlvYjI1bmFHRnBMbTl5Wnk4akwzSmxaMmx6ZEdWeVAyTnZaR1U5V1ZacFVtNVljMHc9
2023-05-15 16:43:44
101
原创 程序猿在北京
在北京的繁华城市,程序员在这里漂泊,时常感觉孤独无依,独自面对电脑前的代码。每天早起赶地铁,奔波于高楼大厦间,不断编写新程序,期待着成为技术大咖。茶余饭后独自散步,城市的喧嚣随之远去,只有脑中的思考,和烦忧难以解脱。孤独的程序员,在这个城市漂泊,虽然身处陌生之地,但信仰和梦想从未改变。
2023-04-21 16:18:44
101
原创 Spring Security 八 自定义登录
文章目录自定义表单登录一、如何开启表单登录二、FormLoginConfigurer常用配置三 登录页面总结自定义表单登录一、如何开启表单登录通过继承WebSecurityConfigurerAdapter,然后重写configure(HttpSecurity http)来实现。http.formLogin() 开启表单登录,方法返回的是FormLoginConfigurer对象,可以再详细的定义表单登录具体属性。二、FormLoginConfigurer常用配置loginPage(Strin
2021-08-18 15:00:32
416
原创 解决SpringBoot项目集成thymeleaf,不能成功跳转页面。(亲测可用~)
项目场景:Spring Boot项目 集成 thymeleaf 进行简单的页面跳转问题描述:在进行页面跳转时提示下面的错误信息,找不到对应的页面:2021-08-18 14:21:37.021 ERROR 36948 --- [nio-8082-exec-3] org.thymeleaf.TemplateEngine : [THYMELEAF][http-nio-8082-exec-3] Exception processing template "loginPage"
2021-08-18 14:36:00
803
原创 SpringSecurity 七 HttpSecurity
文章目录前言一、HttpSecurity是什么?1.1 定义:1.2 类图:1.3 DefaultSecurityFilterChain1.4 HttpSecurity的performBuild方法1.5 HttpSecurity常用的方法前言之前的文章分析了WebSecurityConfigurerAdapter,这次分析下HttpSecurity。一、HttpSecurity是什么?1.1 定义:HttpSecurity类似于命名空间配置中 Spring Security 的 XML 元素。
2021-08-02 17:52:58
1181
原创 Spring Security 六 WebSecurityConfigurerAdapter
文章目录一、WebSecurityConfigurerAdapter是什么?1.WebSecurityConfigurer是什么?2.WebSecurity2.1 WebSecurity定义2.2 AbstractConfiguredSecurityBuilder2.3二、使用步骤1.引入库2.读入数据总结一、WebSecurityConfigurerAdapter是什么?WebSecurityConfigurerAdapter是为创建WebSecurityConfigurer实例提供方便的基类,该类允
2021-07-30 14:56:01
7923
1
原创 Spring Security五 自动配置
文章目录自动配置一、SecurityAutoConfiguration1、SpringBootWebSecurityConfiguration2、WebSecurityEnablerConfiguration2.1 WebSecurityConfiguration2.2 @SpringWebMvcImportSelector2.3 @SpringWebMvcImportSelector2.4 @HttpSecurityConfiguration2.5 @EnableGlobalAuthentication总
2021-07-16 18:22:10
1101
原创 Spring Security 四 认证
认证一、认证1. 密码存储二、Spring Security中的密码算法1.PasswordEncoder2.PasswordEncoder的实现类3.DelegatingPasswordEncoder4.PasswordEncoderFactories4.自定义PasswordEncoder一、认证Spring Security 为身份验证提供了全面的支持。身份验证是我们验证尝试访问特定资源的人的身份的方式。验证用户身份的常用方法是要求用户输入用户名和密码。一旦执行身份验证,我们就知道身份并可以执行授
2021-07-05 16:18:48
520
原创 Spring Security 三 Spring Security 配置
Spring Security 配置前言一、UserDetailsServiceAutoConfiguration二、自定义UserDetailsManager1.InMemoryUserDetailsManager2.UserDetailsManager3. 再次启动,登录总结前言hello world 程序示例中,通过集成了spring security的jar包后,编写了一个hello接口,此时通过测试发现,hello接口已经被保护了,需要进行登录认证才能访问。那么用户名和密码是在哪生成的呢?
2021-07-02 17:25:12
908
原创 SpringSecurity 二 Hello World
Hello World一、创建SpringBoot程序二、编写controller 启动项目1.controller2.启动项目3.访问接口4.登录认证一、创建SpringBoot程序通过idea创建 Spring Boot项目 2.x.x 版本,pom中引入spring security 和 spring web 依赖 <dependency> <groupId>org.springframework.boot</groupId
2021-07-02 16:01:44
209
原创 SpringSecurity 一 SpringSecurity简介
SpringSecurity简介一概述:SpringSecurity简介:核心功能:认证:授权:核心模块概述:SpringSecurity简介:Spring Security是一个框架,提供针对常见攻击的身份验证,授权和保护。通过对命令式和反应式应用程序的一流支持,它是保护基于Spring的应用程序的事实标准。核心功能:应用的安全框架,有两个主要的领域:身份认证(authentication)授权(authorization)认证:Spring Security 支持多种不同的认证方式
2021-07-02 15:37:26
231
原创 mysql 删除重复数据并保留一条数据,没有主键(即没有rowid)
mysql 删除重复数据并保留一条数据,没有主键(即没有rowid)现有表信息数据通过分组查询出重复数据为通过limit数据删除重复数据并保留一条现有表信息数据通过分组查询出重复数据为select id, COUNT(id) as count from test_table GROUP BY id HAVING COUNT(id) >1;通过limit数据删除重复数据并保留一条delete from test_table where id = 3 LIMIT 2;...
2021-03-22 16:58:27
806
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人