自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 Spring框架接口之RequestBodyAdvice和ResponseBodyAdvice

RequestBodyAdvice和ResponseBodyAdvice是Spring MVC 4.2引入的两个重要接口,用于在请求处理和响应返回过程中提供切面拦截能力。这两个接口通过@ControllerAdvice注解实现全局处理,为Spring应用提供了强大的非侵入式消息处理能力。

2025-09-23 15:39:20 855

原创 Spring面向切面编程之@Aspect和@Pointcut注解

摘要 Spring AOP通过@Aspect和@Pointcut注解实现面向切面编程,将横切关注点(如日志、事务等)模块化。核心概念包括:切面(封装通知和切点)、切点(定义拦截方法)、连接点(方法执行位置)、通知(增强逻辑)和织入(应用过程)。通知类型涵盖前置、后置、环绕等。@Aspect标记切面类,@Pointcut定义切点表达式(如execution匹配方法)。典型应用场景包括日志记录、事务管理等。通过自定义注解(如@LogExecutionTime)可灵活标记需增强的方法,提升代码复用和解耦能力。

2025-09-23 15:38:10 910

原创 Spring框架事件驱动架构核心注解之@EventListener

本文介绍了Spring框架中事件驱动架构的核心注解@EventListener。该注解用于将方法标记为事件监听器,实现组件间的松耦合通信。文章详细讲解了Spring事件机制的三要素:事件(Event)、发布者(Publisher)和监听器(Listener),并展示了自定义事件和监听器的实现方式。同时介绍了高阶特性,包括异步事件处理、多事件监听、条件监听和监听器排序等功能。@EventListener简化了事件监听实现,配合异步执行等特性具有很高的实用价值,是Spring事件机制的重要组成部分。

2025-09-09 17:29:08 1088

原创 spring事务管理之@Transactional

本文详细介绍了Spring事务管理中@Transactional注解的使用。主要内容包括:1) 事务的核心作用是保证数据一致性;2) 适用范围(类、方法、接口),推荐在实现类上使用;3) 核心属性详解,重点说明传播行为(propagation)和回滚规则(rollbackFor);4) 事务失效的常见场景,如非public方法、同类内部调用、异常被捕获等;5) 最佳实践建议,如保持事务粒度小、明确设置回滚规则等。文章通过具体代码示例和表格对比,帮助开发者正确使用事务管理,避免常见陷阱。

2025-09-09 17:27:59 814

原创 Spring注解之@Repository

@Repository是Spring框架中用于数据访问层(DAO)的专用注解,核心功能包括:1) 将类注册为Spring Bean;2) 自动转换底层数据访问异常为Spring统一异常体系;3) 明确标记持久层组件。其通过PersistenceExceptionTranslationPostProcessor实现异常转换,支持JDBC、JPA等技术。该注解与其他层级注解(如@Service)共同构建清晰的应用架构,提升代码可维护性。

2025-07-03 20:40:17 607

原创 Spring注解之@FunctionalInterface(函数式接口)

@FunctionalInterface是Java 8引入的注解,用于标识只有一个抽象方法的函数式接口。它支持Lambda表达式实现,并允许包含多个默认/静态方法。该注解提供编译时检查,确保接口符合函数式定义,同时提升代码可读性。典型应用场景包括Lambda表达式、方法引用和作为方法参数传递。示例展示了传统实现、Lambda实现和方法引用三种使用方式,以及默认方法的扩展功能。

2025-07-03 20:39:08 587

原创 Spring框架注解之@Qualifier

Spring框架中的@Qualifier注解主要用于解决依赖注入时的歧义性问题。当容器中存在多个相同类型的Bean时,使用@Autowired会导致NoUniqueBeanDefinitionException异常,而@Qualifier可以指定具体的Bean名称进行精确注入。该注解可以与@Component、@Bean等配合使用,当与@Primary共存时,@Qualifier具有更高优先级。

2025-06-27 14:19:41 1285

原创 Spring注解之@Configuration、@Component和@Service

本文介绍了Spring中三个常用注解的区别:@Configuration用于定义配置类,可包含@Bean方法;@Component是通用注解,标记普通组件;@Service是@Component的特殊化版本,用于业务服务类。重点对比了@Configuration和@Component:前者使用CGLIB代理确保@Bean方法返回单例,适合集中配置;后者无代理,适合标记普通业务组件。通过示例代码展示了它们的使用方式和适用场景。

2025-06-27 14:16:13 414

原创 Java中String类getBytes方法OOM问题记录

摘要:Java中getBytes()方法会将字符串转为字节数组,当处理超大字符串(如GB级)时可能引发OOM内存溢出问题。文章通过代码示例展示了OOM场景,并提出分段处理解决方案,使用NIO的CharBuffer和ByteBuffer分块编码,结合MessageDigest进行安全哈希计算。改进方案通过固定缓冲区大小(如4096字节)循环处理数据,避免一次性内存分配,有效预防OOM风险。文中还给出了完整的SHA256计算分段实现代码。

2025-06-16 16:39:10 259

原创 Maven中的<scope>元素总结

Maven的<scope>元素定义了依赖项的作用范围,控制其在编译、测试、运行等阶段的可见性及是否打包到最终产物中。常见scope包括:compile(默认)、provided(容器提供)、runtime(运行阶段)、test(仅测试)、system(本地路径)和import(依赖管理)。合理使用scope可优化构建过程,减少冲突。

2025-06-16 16:38:07 1005

原创 高阶之Spring与Kubernetes结合场景优雅停机设置

在Spring与Kubernetes结合的场景中,优雅停机设置对于确保在升级或删除Pod时,长连接请求能够正常结束至关重要。Spring的优雅停机流程包括接收停机信号、拒绝新请求、处理进行中的请求、销毁Bean和资源清理、关闭应用上下文。Kubernetes的流程则包括接收删除Pod请求、拒绝新请求、执行PreStop Hook、发送SIGTERM信号、等待容器关闭、强制停止、释放资源和记录事件。

2025-05-18 07:43:55 753

原创 Spring之定时任务和异步任务

Spring框架提供了便捷的定时任务和异步任务处理机制。定时任务可通过@Scheduled和@EnableScheduling注解实现,支持cron表达式、fixedDelay、fixedRate和initialDelay等配置,适用于周期性任务调度。异步任务则通过@Async和@EnableAsync注解实现,允许方法在独立线程中执行,提升系统响应速度。默认使用SimpleAsyncTaskExecutor线程池,也可自定义线程池以满足特定需求。此外,@SchedulerLock注解可用于分布式环境下控制

2025-05-18 07:40:56 1258

原创 Java注解之@PostConstruct

@PostConstruct是Java中的一个注解,用于标记一个方法在对象依赖注入完成后自动执行,常用于初始化操作。它在Spring等依赖注入框架中,确保在Bean实例化和依赖注入完成后调用该方法。执行顺序为:构造函数 → @Autowired → @PostConstruct。适用场景包括数据库资源池初始化、配置文件加载和缓存载入等。使用时需注意:只能标记一个非静态方法,方法无参数、返回值为void,且不抛出已检查异常,且仅执行一次。示例代码展示了如何在依赖注入完成后初始化数据库表结构。

2025-05-10 10:13:15 535

原创 网络地址转换之SNAT和DNAT

SNAT(源网络地址转换)和DNAT(目的网络地址转换)是网络地址转换(NAT)技术中的两种主要类型。SNAT主要用于转换数据包的源IP地址,使内部网络中的主机在访问外部网络时,源IP地址被转换为公网IP地址,从而节省公网IP资源并隐藏内部网络结构。DNAT则用于转换数据包的目的IP地址,将外部网络对特定公网IP地址的访问请求转换为对内部网络中特定主机的请求,常用于发布内部服务和实现负载均衡。两者在转换对象、应用场景和主要功能上存在显著区别,分别用于内部网络访问外部网络和外部网络访问内部服务器的场景。

2025-05-10 10:07:42 850

原创 ReflectionTestUtils.invokeMethod方法

ReflectionTestUtils.invokeMethod是 Spring Test 框架中的一个方法,主要用于在测试环境中通过反射机制调用私有或受保护的方法,方便对这些方法进行单独测试。

2025-01-05 11:40:06 557

原创 Reactor测试框架之StepVerifier

在响应式编程中,Reactor框架提供了StepVerifier测试类,用于对响应式序列进行断言和验证。StepVerifier主要用于对Publisher发出的元素序列进行逐步的、精确的验证。

2025-01-05 10:48:09 1039

原创 linux之rpm2cpio命令

rpm2cpio命令是linux系统提供的一个用于转换rpm包的工具。它将rpm软件包中的内容提取出来,转换为 cpio 格式的归档文件,以便用户能够方便地查看和提取软件包中的文件,或者进行其他操作。

2025-01-04 11:14:15 546

原创 Arthas问题记录

原因:Java 进程操作用户和执行 java -jar arthas-boot.jar ${pid} 操作用户不是同一个用户。命令:watch -v -n 3。问题描述:执行 java -jar arthas-boot.jar ${pid}报错。原因:watch命令加了-v选项,但方法没有对应的v属性。解决方案:却换到进程启动用户账号,再启动arthas。问题描述:执行watch命令时报错。

2024-09-17 12:27:31 959

原创 curl常见问题记录

解决方案:https改为http。解决方案:更新curl版本。解决方案:关闭证书验证。

2024-09-17 12:26:10 2679

原创 shell脚本引号区别

反引号:反引号之间一般为命令,会显示命令执行的结果。单引号:在单引号之间的内容不会解析,会原样输出;双引号:会被解析,与不加任何引号效果一样;

2024-09-17 12:23:21 405

原创 Git随记

Git随记。

2024-09-05 16:15:26 286 1

原创 Spring响应式编程之Reactor操作符

操作符并不是响应式流规范的一部分,但为了改进响应式代码的可读性并降低开发成本,Reactor 库中的 API 提供了一组丰富的操作符,这些操作符为响应式流规范提供了最大的附加值。下面介绍一些常用的操作符。flatmap:将Mono中的值或Flux中的每个元素转换为另一个Mono或另一个Publisher,并展平结果;collectList: 将Flux中的所有元素收集到一个List中,返回Mono;window:将Flux中的元素分组到Flux中,每组包含指定数量的元素;

2024-06-23 21:11:53 2139 3

原创 Spring响应式编程之Reactor核心组件

Reactor 框架提供了两个核心组件来发布数据,分别是 Flux 和 Mono 组件。两者都是实现Publisher接口的高级抽象,可以说是应用程序开发过程中最基本的编程对象。二者都可以被onComplete信号或者onError信号所终止。

2024-06-23 21:09:40 1638

原创 Spring响应式编程之Reactor核心接口

Subscription代表一种订阅上下文对象,用于管理Publisher和Subscriber之间的订阅关系。Subscription是确保发布者和订阅者针对数据处理速度达成一种动态平衡的基础,也是流量控制中实现背压机制的关键。Processo接口既可以是Publisher也可以是Subscriber,用于对数据流进行处理和转换。核心接口包括:Publisher、Subscriber、Subscription 和 Processor

2024-06-23 21:08:09 1157

原创 Spring响应式编程之Reactor背压机制

在生产-发布模式下,由于事件处理平台大小有限制,生产者和消费者存在处理速度的差异,生产者不能持续不断的发布数据并推送,即流量控制问题。适用于消费者处理能力波动较大,需要动态调整处理速率的场景。背压机制简单理解,通过一种反馈机制来告知生产者当前消费者的处理能力,生产者动态调整数据生成的速率,确保消费者能够处理生产者产生的数据。丢弃(dropping):丢弃超出消费者处理能力的数据,只保留最新的数据或最重要的数据。最新(lastest):只保留最新的数据,丢弃旧的数据,确保消费者始终处理最新的数据。

2024-06-23 21:07:14 998

原创 Spring响应式编程之Reactor介绍

响应式编程(Reactive Programming)是一种面向数据流和变化传播的编程范式。Java中的Reactor是一个用于响应式编程的库,它建立在Reactive Streams规范之上,旨在帮助开发者构建非阻塞的、高效的、具有弹性的应用程序。

2024-06-23 21:06:15 1938

原创 Linux之sed命令(包含MacOS使用方法)

Linux下的sed命令是一种流编辑器,用于在命令行中对文本进行处理,常见的操作如:添加、修改、删除、追加等。当所用系统为MacOS时,直接使用sed会出现此类报错,处理方法如下:解决方案1:sed命令改写 --> 添加一个空串改写为解决方案2:调整mac下的sed命令 --> 安装gnu-sed本人建议使用第二种方式解决,一劳永逸。extra:在使用sed新增一行时会使用到,macOS会把反斜杠解析为命令结束字符,后面不允许携带新字符,导致报错,只能通过把命令分割成两行内容。

2024-05-01 10:00:47 1100

原创 MongoDB随记

MongoDB是一个分布式文件存储的数据库,介于关系数据库和非关系数据库之间,支持的数据结构类型为BSON,类似于JSON。MongoDB中的记录是一个document,由字段和值对组成的数据结构。MongoDB适合在数据量大,读写频繁,对事务性要求不高的场景应用。分片(sharding)是 MongoDB 用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法。

2023-11-19 14:26:16 812

原创 Curl命令

curl(Command Line URL Viewer),一种常用的命令行工具,用来请求Web服务器,发送网络请求。它支持多种传输协议,包括HTTP、HTTPS、SCP、FTP、TELNET等,可以使用其进行发送请求,上传/下载文件,且支持aksk身份验证,代理支持等。

2023-11-18 14:14:51 614

原创 Shell之wc命令

Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数、字数、行数,并将统计结果显示输出。

2023-10-22 16:16:59 1018

原创 Java中的过滤器Filter和拦截器Interceptor

过滤器和拦截器在Java Web应用程序中,都用于请求处理过程中执行特定的操作。过滤器:从一堆东西中筛选出符合要求的,例如过滤敏感信息;拦截器:干预到一个请求当中,不符合可以直接终止,例如鉴权,qos设置。

2023-08-19 15:49:15 391

原创 python中json库的load、loads、dump、dumps方法

json.load()和json.loads()方法都是将json格式的数据转换成python对象,通常是字典、列表类型;json.dump()和json.dumps()方法则与之相对,将python对象进行json格式的编码。

2023-08-19 09:58:53 1337

原创 JVM之jstat

jstat对程序的资源和性能进行实时的监控,用于查看heap size和垃圾回收情况。每隔1000ms打印10次gc信息。

2023-04-05 11:38:54 606

原创 JVM之jmap

jmap -F -dump:format=b,file= :如果进程没有响应,这个命令会强制生成一个堆内存快照,即使进程正在执行垃圾回收。生成一个堆内存快照。展示进程中所有等待被调用的finalize()方法的对象信息,包括对象的数量和占用内存等。jmap用于生成Java进程的内存快照(dump文件),查看进程堆内存的使用情况。展示Java Heap中对象的统计信息,包括:对象的数量,占用内存大小,类的全类名。

2023-04-05 11:33:29 582

原创 JVM之jstack

jstack是JVM当前时刻的线程快照,是JVM当前每一条线程正在执行的堆栈信息的集合。通过jstack命令可以获取Java应用程序运行时线程的状态、调用栈、锁状态等信息,以此来定位线程出现长时间停顿的原因,如线程死锁,线程阻塞等。信息中包含死锁具体位置和原因,便于定位问题。可以发现可能存在问题的代码行。

2023-04-05 11:26:37 325

原创 PowerMock的简单使用

在做ut时,发现要测试的方法会引用很多外部依赖的对象,就可能需要用Mock工具来模拟这些外部依赖的对象,来完成ut。PowerMock在EasyMock、Mockito等的基础上,增加了对static、final、private等方法的mock。PowerMock有两个十分重要的注解:@Runwith、@prepareForTest

2022-12-17 17:10:13 3083

原创 Linux之iptables命令

5、在配置IPTABLES白名单时,往往会将链的默认策略设置为ACCEPT,通过在链的最后设置REJECT规则实现白名单机制,而不是将链的默认策略设置为DROP,如果将链的默认策略设置为DROP,当链中的规则被清空时,管理员的请求也将会被DROP掉。iptables:运行在用户空间的应用软件,命令行工具,通过其设置规则,来控制netfilter模块,从而实现网络数据包的管理,从而实现防火墙的配置。在没有顺序要求的情况下,不同类别的规则,被匹配次数多、匹配频率高的规则应放在前面。

2022-10-31 18:51:31 1212

原创 Java之PriorityQueue的用法

方法作用add();队尾插入元素,调整堆结构,失败时抛异常offer();队尾插入元素,调整堆结构,失败时抛falseremove();根据value值删除指定元素,调整堆结构,失败时抛异常poll();删除队头元素,调整堆结构,失败时抛nullelement();获取队列头元素peek();获取队列头元素clear();清空队列size();获取队列元素个数contains();判断队列中是否包含指定元素isEmpty();判断队列是否为空。

2022-10-23 12:01:41 6838

原创 Java之BigInteger的用法

BigInteger在Java中用于操作大整数,当一个数超过了Long表示的最大范围时就可以考虑使用BigInteger来操作。BigInteger的使用方法很多,也可以用于进制转换的一些操作,本文记录了一些BigInteger的常用方法。

2022-10-22 11:47:14 3699

原创 Linux可视化管理

Webmin是功能强大的基于Web的Unix/Linux系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理操作。除了各版本的Linux外还可用于:AIX、HPUX、Solaris、Unixware、Irix和FreeBSD等系统。下载地址:http://download.webmin.com/download/yum/也可以用wget命令进行下载安装:重置密码 ``/usr/libexec/webmin/changepass.pl /etc/webmin root test`roo

2022-06-07 18:42:06 530

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除