- 博客(109)
- 问答 (4)
- 收藏
- 关注
原创 Springboot 项目中使用 Filter 全指南
本文系统介绍了Java Web开发中的Filter过滤器技术。主要内容包括:Filter与Interceptor的区别对比,前者是Servlet规范标准组件,后者是Spring框架提供的机制;Filter接口的核心方法及三种实现方式(@WebFilter注解、FilterRegistrationBean配置和DelegatingFilterProxy);典型应用场景如权限验证、跨域处理、日志记录和编码设置等;最后给出了最佳实践建议,包括不同场景下的配置选择和使用注意事项。文章通过代码示例详细展示了各种实现方
2025-07-28 17:43:05
914
原创 滑动窗口算法
滑动窗口算法是一种高效处理数组/字符串子区间问题的技术,通过动态窗口避免重复计算,将时间复杂度从O(n²)优化至O(n)。核心思想是使用双指针(left/right)定义窗口边界,通过扩展、收缩窗口来寻找最优解。算法分为固定窗口(如子数组最大和)和可变窗口(如最小覆盖子串)两种类型。典型应用包括字符串处理(最长无重复子串)、数组处理(滑动窗口最大值)等场景。关键实现要点包含:合理初始化窗口状态、确定收缩条件、选择结果更新时机。优化技巧包括哈希表替代、变量复用等。建议通过LeetCode经典题目(如3、76、
2025-07-11 10:48:25
758
原创 SpringCloud系列 - 分布式锁(八)
本文系统探讨了分布式锁的应用场景与实现方案。首先通过库存扣减案例演示了并发安全问题,分析本地锁在事务内失效、集群环境失效等问题。随后提出解决方案:调整SQL语句实现原子操作或引入分布式锁。重点介绍了基于Redis的分布式锁实现,详细讲解Redisson的多种锁机制(公平锁、读写锁)及同步工具(信号量、闭锁)。文章还解答了分布式锁与本地锁的关系、是否需要结合数据库锁等常见问题。最后指出:跨JVM共享资源必须使用分布式锁,单实例内部竞争可酌情使用本地锁,需根据业务需求平衡性能与一致性。
2025-07-10 17:13:06
1049
原创 SpringCloud系列 - xxl-job 分布式任务调度 (七)
本文系统介绍了XXL-JOB分布式任务调度框架的核心特性和实践应用。首先对比了Java原生Timer、ScheduledExecutorService等调度工具的局限性,阐述了分布式调度的必要性,包括避免重复执行、突破单机处理极限等六大优势。重点解析了XXL-JOB的架构设计,包含调度中心和执行器两大模块,详述了其35项核心特性如动态分片、故障转移等。通过具体示例展示了从环境搭建、任务开发到集群部署的全流程,包括多路由策略实践和任务分片实现。最后探讨了任务堆积等实际问题解决方案,为分布式系统定时任务管理提供
2025-07-09 21:50:12
878
原创 SpringCloud系列 - Seata 分布式事务(六)
摘要:本文介绍了阿里巴巴开源的分布式事务解决方案Seata,详细分析了五种需要分布式事务的场景,重点阐述了Seata的核心架构(TC事务协调器、TM事务管理器和RM资源管理器)。通过一个用户下单案例展示了Seata的整合过程,包括服务端启动、客户端配置和@GlobalTransactional注解的使用。最后介绍了Seata支持的四种事务模式:AT(自动补偿)、TCC(业务控制)、XA(协议支持)和Saga(长事务补偿),帮助开发者解决微服务架构下的数据一致性问题。
2025-07-09 14:56:15
880
原创 SpringCloud系列 - Gateway 网关功能(五)
本文系统介绍了Spring Cloud Gateway在微服务架构中的核心作用与应用实践。主要内容包括:1)网关的五大核心功能:路由转发、负载均衡、安全控制、流量治理和协议转换;2)项目搭建步骤,包含依赖配置和Nacos集成;3)路由规则配置与工作原理,重点解析Route、Predicate和Filter三大组件;4)断言工厂的深度应用,包括11种内置断言和自定义断言实现(如时间范围、年龄校验);5)过滤器的全面使用,涵盖路径重写、响应头处理及自定义过滤器开发;6)跨域处理的统一解决方案。
2025-07-08 15:56:14
1188
原创 SpringCloud系列 - Sentinel 服务保护(四)
摘要: Sentinel是阿里巴巴开源的分布式系统流量控制组件,核心功能包括流量控制、熔断降级、系统保护等。它以资源(服务/接口/方法)为管控对象,通过实时规则动态限流,提供QPS/线程数等多种控制策略。系统采用责任链模式处理请求,支持可视化监控和动态配置。整合步骤包括:1)下载控制台;2)引入依赖;3)配置控制台地址;4)通过@SentinelResource注解定义资源;5)配置流控规则测试效果。Sentinel相比Hystrix具有更灵活的熔断策略和系统级保护能力。
2025-07-04 16:16:07
783
原创 SpringCloud系列 - OpenFeign 远程调用(三)
SpringCloud OpenFeign是SpringCloud提供的声明式HTTP客户端,用于简化微服务间的远程调用。相比于编程式HTTP客户端,OpenFeign通过接口和注解定义远程服务,无需手动编写HTTP请求代码。作为Feign的升级版,OpenFeign支持SpringMVC注解并深度集成Spring生态。本文详细介绍了OpenFeign的使用方法:从基础配置、负载均衡到日志记录、超时控制和重试机制,再到请求拦截器和Fallback兜底策略。特别展示了如何整合Sentinel实现熔断降级,确保
2025-07-04 14:41:44
1354
原创 MySQL进阶 - 排名窗口函数
本文介绍了SQL中三种常用的窗口函数:ROW_NUMBER()、DENSE_RANK()和RANK()。ROW_NUMBER()为每行分配唯一序号(1,2,3,4);DENSE_RANK()对相同值给相同排名且不跳号(1,2,2,3);RANK()对相同值给相同排名但会跳号(1,2,2,4)。文章详细说明了各函数的语法、参数及使用场景,并通过学生成绩排名的具体示例展示了它们的区别和应用方法。窗口函数能够在不合并原数据行的前提下进行复杂分析,是SQL数据分析的重要工具。
2025-07-03 16:27:26
656
原创 本地缓存Caffeine详解(含与Spring Cache集成)
本文深入解析Caffeine缓存库的核心原理与实践应用。作为Java生态中高性能本地缓存的现代解决方案,Caffeine采用优化的ConcurrentHashMap存储结构,结合Window-TinyLFU淘汰算法和精妙的并发控制机制,实现高达98%的命中率。文章通过实战案例演示了基础用法,详细讲解容量控制、过期策略等配置项,并展示与SpringCache的整合方案。针对生产环境,提出防范缓存穿透/雪崩等问题的建议,同时预告了Caffeine与Redis多级缓存架构的实现思路。全文兼具理论深度与实践指
2025-06-27 17:30:51
1576
原创 Spring Cache用法很简单,但你知道这中间的坑吗?
Spring Cache 作为 Spring 框架提供的缓存抽象层,确实能够显著简化项目中 Redis、Caffeine 等缓存技术的使用,但许多开发者在实际应用中会遇到各种"看似正确但缓存不生效"的问题。以下将系统性地分析这些问题的根源,并提供全面的解决方案。这篇文章将会以一个亲身经历者的角度,系统的讲解SpringCache的用法,并且举例介绍使用SpringCache遇到的常见问题。
2025-06-27 14:55:11
938
原创 Uniapp 网络请求封装专题
本文系统梳理了uniapp网络请求的封装方法。首先介绍了uni.request的基本用法和参数配置,通过天气API示例演示了请求发送过程。重点解析了Content-Type的类型选择与后端接收方式的匹配关系,如JSON数据需对应@RequestBody,表单数据需使用@RequestParam。然后结合Promise特性,给出了完整的请求封装方案,包含自动URL拼接、统一错误处理、Token携带等功能模块。最后展示了如何调用封装后的API接口,并对比了同步/异步代码的执行顺序。该方案可有效提升uniapp项
2025-06-19 11:45:24
1057
原创 从单体到集群,再到分布式、微服务架构,你真的清楚它们之间的关系吗?
在现代软件开发中,系统架构的选择直接影响着应用程序的性能、可扩展性和维护性。本文将全面解析四种主流架构模式:单体架构、集群架构、分布式架构和微服务架构,分析它们各自的特点、适用场景以及相互之间的关系。
2025-06-17 15:06:41
1106
原创 SpringBoot自动装配原理 + 自定义starter
简述springboot的自动装配原理,同时用自定义starter的案例,强化对自动装配的理解。
2025-06-17 11:54:42
676
原创 SpringBoot 日志管理
先说明:项目中不要写System.out.println(),应该用日志记录信息!而关于日志的演变也是非常久远的。JDK1.4 开始,通过 java.util.logging 提供日志功能。虽然是官方自带的log lib,JUL的使用确不广泛。原因其实简单:就是那个时候做的真的很烂,也非常不好用。所以后面逐渐涌现出来像Log4j、Logback等优秀的日志框架。今天,我们不会去深度探讨这其中的关系,重在讲解Springboot应用中的主要用法。如果对这方面感兴趣,可以参考这篇文章好,正篇开始!
2025-06-13 14:10:38
1053
原创 SpringCloud系列 - Nacos 配置中心(二)
本文介绍了如何在SpringCloud项目中使用Nacos作为配置中心。主要内容包括:1) 导入Nacos配置中心依赖;2)设置配置文件并解决启动报错;3)测试调用配置文件;4)实现配置实时更新的两种方式:使用@RefreshScope注解或@ConfigurationProperties配置类;5)配置监听功能实现配置变更通知;6)分析配置文件加载顺序规则,说明Nacos配置优先级高于本地配置。文章提供了完整的代码示例,强调了配置文件的正确使用规范和版本兼容性注意事项。
2025-06-11 18:20:14
1321
原创 SpringCloud系列 - Nacos 注册中心 (一)
本文介绍了基于Spring Cloud和Nacos搭建微服务注册中心的完整流程,为开发者提供了Spring Cloud整合Nacos的实用指南。
2025-06-11 13:40:26
1006
原创 什么样的登录方式才是最安全的?
在Web开发中,用户认证是保障系统安全的第一道防线。本文将系统性地介绍HTTP/HTTPS、Cookie、Session、Token等核心概念,分析常见攻击手段(XSS/CSRF),并对比不同认证方案的优劣,帮助开发者构建安全的认证体系。
2025-06-10 17:38:34
1111
原创 技术沙龙:Mybatis中resultMap使用案例分享
没有绝对的好坏,需根据实际需求权衡。联表查询适合简单关联和小数据量,单表查询适合复杂业务和大数据场景。建议通过性能测试选择最优方案。
2025-04-29 15:51:11
1106
原创 Java反射指南
反射(Reflection)是Java语言的一种特性,它允许程序在运行时获取类的内部信息,并能直接操作对象的内部属性和方法。反射机制提供了以下能力:在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判断任意一个类所具有的成员变量和方法在运行时获取泛型信息在运行时调用任意一个对象的成员变量和方法在运行时处理注解生成动态代理。
2025-04-22 15:33:15
1317
原创 设计模式 - 工厂方法模式
工厂方法模式是一种非常实用的设计模式,它通过定义一个创建对象的接口,让子类决定实例化哪一个类。这种方式不仅提高了代码的灵活性和可扩展性,还遵循了开闭原则。在实际开发中,工厂方法模式可以广泛应用于需要创建多种相关对象的场景,尤其是在对象创建逻辑较为复杂的情况下。
2024-10-30 17:54:43
1173
原创 设计模式 - 简单工厂模式
void cut();void box();break;default:简单工厂模式通过将对象的创建逻辑封装在一个静态工厂方法中,简化了客户端代码。然而,随着产品的增加,工厂类可能会变得庞大,难以管理和维护。此外,当需要添加新的产品时,需要修改工厂类,这违反了开闭原则。
2024-10-30 17:27:42
1479
原创 设计模式 - 单例模式(懒汉式、饿汉式、静态内部类、枚举)
单例模式是一种非常实用的设计模式,尤其适用于那些需要频繁访问且创建成本较高的对象。然而,在使用单例模式时也需要谨慎,因为它可能会引入一些设计上的问题,特别是当单例类变得过于庞大时。在现代软件架构中,依赖注入(DI)框架(如Spring)的使用越来越广泛,它提供了一种更加灵活的方式来管理对象的生命周期,因此在很多情况下,单例模式可以通过依赖注入来实现,而不是手动实现。
2024-10-30 16:55:10
1100
原创 Python爬虫系列(一)
一些网站,我们没法直接这样获取到资源,大概率是这些网站做了反爬手段,例如上述下载视频,如果是b站视频,直接这样是下载不到的。我们发现访问https的百度和访问http协议的百度,我们返回的结果是不一样的。https://www.baidu.com的结果明显少了很多内容。这其实就是因为反爬的原因。为什么返回的结果很少?是因为我们提供的数据不完整。那么如何做到无差别浏览器呢?我们慢慢来~
2024-10-29 11:36:50
2236
原创 Canvas 教程(一)
前面演示的方式获取到的仅仅是html元素,现在这种方式 js 能够识别到这是canvas元素。❗ 有博主说:canvas和别的元素不太一样,需要使用属性的方式设置宽和高,不然会有问题。这个情况我暂时还没发现有什么问题,两种方式试了一下都能展示,有问题后面再说。很明显,通过样式修改的宽高尺寸已经严重扭曲。接下来,我们画一个方形看看,直接给代码进行演示。2. 拿到渐变对象,设置渐变的起止颜色,1. 通过画笔对象,创建线性渐变对象。方法把画笔移动到直线的起点。方法把画笔移动到直线的终点。请画出如下所示的折线图?
2024-10-29 11:34:01
3281
原创 SpringBoot项目如何设置定时任务总开关
在一些复杂项目中,我们写了很多定时任务类,但是有的时候,在代码调试阶段,不希望执行这些定时任务,如何更高效的方式关闭这些定时任务,而不是逐一注释代码。解决方式也很简单。
2024-10-29 11:30:48
1677
原创 SQL Server数据库基本安装使用
SSMS是Microsoft SQL Server Management Studio的缩写,即sql server的客户端管理工具,类似于navicat这类。有的朋友在安装sql server的时候选择了仅使用windows身份验证模式,而现在却又想用sql server身份验证模式登陆sql server,怎么解决这个问题呢?18456:出现这个问题是因为你没有做好第二步:选择使用sql server和windows混合身份验证模式。下载下来以后,双击打开,进行在线下载安装。
2024-07-30 11:20:44
2172
原创 Python入门教程 - 文件操作 (七)
一、文件的编码思考:计算机只能识别:0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢?答案:使用编码技术(密码本)将内容翻译成0和1存入。编码技术即:翻译的规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译回可识别内容。计算机中有许多可用编码:UTF-8、GBK、Big5等。不同的编码,将内容翻译成二进制也是不同的。UTF-8是目前全球通用的编码格式。除非有特殊需求,否则,一律以UTF-8格式进行文件编码即可。二、文件的读取在Python。
2024-06-13 16:25:07
1243
原创 Python入门教程 - 模块、包(八)
4.1 制作自定义模块Python中已经帮我们实现了很多的模块,不过有时候我们需要一些个性化的模块,这里就可以通过自定义模块实现, 也就是自己制作一个模块。案例:新建一个Python文件,命名为my_module1.py,并定义test函数。注意每个Python文件都可以作为一个模块,模块的名字就是文件的名字。也就是说自定义模块名必须要符合标识符命名规则。4.2 测试模块。
2024-06-12 17:39:24
1097
原创 C语言中如何自定义头文件(Clion)
这是一个头文件,头文件的名称可以自定义,但是必须是.h结尾。我们定义的函数声明,当然也可以直接写函数。该头文件中声明的函数在这里实现。////main.c最后,就可以在主函数中使用我们自定义的函数了。和标准库不一样的地方是,使用我们自定义的头文件需要用双引号"",而标准库是用尖括号。hello();return 0;运行看看结果:我们自定义的头文件中还定义了带返回值的函数,下面我们使用看看,注意主函数中打印出来,还需要引入printf()函数的标准库哦。hello();
2024-01-23 15:24:41
3109
原创 翻遍全网才找到的Oracle19c安装教程(Windows版)
官方地址:Database Software Downloads | Oracle 中国我下载下来了,有需要的可以网盘领取: 下载下来是一个zip格式的压缩包,体积大约2.89G,我们随便解压到什么地方都可以,安装完毕删掉也可以。以管理员身份安装setup.exe文件 过程有点慢,耐心等待。 安装过程是很慢的。很多人会卡在42%这里,如何你发现半个小时还没有动,那么建议你卸载掉重新安装。安装的时候把安装路径指定到C盘试试。注意不要有中文,再次强调。出现下面这个节目就算安装完了。直接关闭即可。打开cmd窗
2024-01-18 20:02:05
1501
1
原创 Hutool工具包:http客户端工具(使用教程)
Hutool参考文档Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了Java开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;Hutool是项目中“util”包友好的替代,它节省了开发人员对项目中公用类和公用工具方法的封装时间,使开发专注于业务,同时可以最大限度的避免封装不完善带来的bug。
2023-09-19 09:39:18
16977
原创 不同请求方式下请求参数的区别
当发起一次POST请求时,若未指定content-type,则默认content-type为application/x-www-form-urlencoded。即参数会以Form Data的形式进行传递,不会显式出现在请求url中。当发起一次POST请求时,若content-type为application/json,则参数会以Request Payload的形式进行传递(显然的,数据格式为JSON),不会显式出现在请求url中。所以,当我们要传递的参数过长时,要解决这个问题,我们建议使用POST请求。
2023-09-18 15:34:58
762
原创 MySQL搭建主从复制集群,实现读写分离
Sharding-JDBC定位为轻量级的Java框架,在Java的jdbc层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,无需额外部署和依赖,可以理解为增强版的jdbc驱动,完全兼容jdbc和各种orm框架。适用于任何基于JDBC的ORM框架,如:JPA,Hibernate,Mybatis,Spring JDBC Template或直接使用JDBC。支持任何第三方的数据库连接池,如:DBCP,C3P0,Druid,HikariCP等。支持任意实现JDBC规范的数据库。
2023-09-15 10:09:53
1160
原创 Kubernetes(K8S)集群部署
具体操作步骤可以参考之前的教程,建议是先安装一台,然后克隆虚拟机,这样速度快。注意:在克隆时记得修改Mac地址、IP地址、UUID和主机名。(最后别忘了保存下快照~)
2023-09-14 17:48:37
8390
7
原创 大数据技术之Hive:先导篇(一)
什么是分布式SQL计算我们知道,在进行数据统计分析时,通常是编程语言(如Java、Python) + SQL,说明SQL是目前数据统计分析最为方便的编程工具。大数据体系中充斥着非常多的统计分析场景。所以,使用SQL去处理数据,在大数据中也是有极大的需求的。但是前面我们学习的非常重要的MapReduce,它只支持程序开发(Java、Python等),不支持SQL开发。所以,尽管MapReduce很重要,计算效率很高,由于不支持SQL开发,使用上就显得非常复杂。由此,Hive应运而生。
2023-09-12 11:15:09
753
3
原创 大数据技术之Hadoop:提交MapReduce任务到YARN执行(八)
到这一章结束,我们的Hadoop学习就告一段落了。不是说Hadoop技术学完了,而是可以说已经入门了。至于后续要深入学习也有了方向性。下一步我们将讲解Hive技术。过程中会补充MapReduce的一些知识点。最难不过坚持,加油!🧡。
2023-09-10 12:41:48
1713
原创 大数据技术之Hadoop:Yarn集群部署(七)
常用的进程启动命令如下:一键启动YARN集群:会基于yarn-site.xml中配置的yarn.resourcemanager.hostname来决定在哪台机器上启动会基于workers文件配置的主机启动一键停止YARN集群:在当前机器,单独启动或停止进程start和stop决定启动和停止可控制resourcemanager、nodemanager、proxyserver三种进程历史服务器启动和停止start|stop。
2023-09-08 15:00:23
2228
原创 大数据技术之Hadoop:MapReduce与Yarn概述(六)
那么Yarn作为分布式资源调度组件,它具体有啥作用呢?换句话说什么是资源调度?我们为什么需要资源调度?服务器会运行多个程序,每个程序对资源(CPU内存等)的使用都不同程序没有节省的概念,有多少就会用多少。所以,为了提高资源利用率,进行调度就非常有必要了。YARN管控整个集群的资源进行调度,那么应用程序在运行时,就是在YARN的监管(管理)下去运行的。这就像:全部资源都是公司(YARN)的,由公司分配给个人(具体的程序)去使用。比如,一个具体的MapReduce程序。
2023-09-08 10:07:02
1401
原创 大数据技术之Hadoop:HDFS存储原理篇(五)
HDFS分布式文件存储,通常是将1个文件拆分成多个部分,然后分别发送到不同服务器节点上。问题:不同的文件大小不一,粗暴的拆分然后放到服务器不同节点,会导致各个部分的大小也不一样,不利于统一管理。解决办法:设定统一的管理单位,block块。Block块,HDFS最小存储单位每个256MB(可以修改)这样可以将文件分成多个Block块,不同的Block块存入对应服务器。举例说明某个文件大小1G,那么理论上可以分为4个Block块。
2023-09-07 13:58:47
1513
renren-fast-vue导入elementui的drawer抽屉组件问题
2022-11-17
在Springboot中,mybatisplus默认开启驼峰命名吗?
2022-07-13
浏览器发送的post请求在http协议的什么位置?
2022-07-01
MySQL起别名只能在查询语句中使用对吗?
2021-11-06
TA创建的收藏夹 TA关注的收藏夹
TA关注的人