- 博客(143)
- 资源 (3)
- 收藏
- 关注
转载 spring注解之@Import注解的三种使用方式(转)
Import注解本身在springboot中用的很多,特别是其中的第二种用法ImportSelector方式在springboot中使用的特别多,尤其要掌握!第三步:编写TestDemo 类,并标注上使用ImportBeanDefinitionRegistrar方式的Myclass2类。对应的import的bean都将加入到spring容器中,这些在容器中bean名称是该类的。:返回需要导入的组件的全类名数组,springboot底层用的特别多【1、返回值: 就是我们实际上要导入到容器中的组件全类名【
2025-03-25 16:22:14
13
原创 Java注解 @Target
Target(ElementType.PACKAGE)——包,用于记录java文件的package信息。@Target(ElementType.FIELD)——字段、枚举的常量。@Target(ElementType.ANNOTATION_TYPE)——注解。@Target(ElementType.TYPE)——接口、类、枚举、注解。@Target(ElementType.PARAMETER)——方法参数。@Target(ElementType.METHOD)——方法。
2025-03-25 16:07:54
194
转载 @Retention注解作用(转)
因为涉及到反射,所以运行时注解的效率多少会受到影响,现在很多的开源项目使用的是编译时注解,关于编译时注解后面再来详细介绍。sb.append( "注解值: ").append(Arrays.toString(fieldInfo.value())).append( "\n\n");sb.append( "注解值: ").append(classInfo.value()).append( "\n\n");sb.append( "Class注解:").append( "\n");
2025-03-25 16:00:55
10
转载 Spring后置处理器(转)
System.out.println(beanName + "." + method.getName() + "执行时间:" + (endTime - startTime) + "ms.");:实现BeanFactoryPostProcessor接口,并将实现类注册到Spring中,Spring就可以自动调用postProcessBeanFactory方法.,一般在Bean的初始化前后执行。Bean实例化之后,填充到单例池singletonObjects之前执行,会进行Bean的初始化。
2025-03-25 15:19:17
13
转载 JDK动态代理和CGLIb代理(转)
动态代理是一种在运行时动态生成代理类的技术,无需手动编写代理类代码。它通过拦截目标方法的调用,实现对核心逻辑的无侵入式增强(如日志、事务、权限控制等)。imageJDK动态代理是Java提供的一种在运行时创建代理对象的机制,它允许开发者在不修改原始类的情况下,为接口实现类添加额外的功能(如日志记录、权限检查等)。这种机制基于类和接口。imageCGLIB(Code Generation Library)是一个强大的字节码生成库,广泛用于在运行时动态生成类的子类作为代理对象。
2025-02-26 13:38:32
27
转载 idea 远程debug调试(转)
一般情况下,生产环境可以采取的手段比较单一,即通过日志的方式获取运行中的环境上下文,分析日志文件并尝试重现bug。测试接口:http://localhost/test 加入Body form-data 参数 id=1,name=marry,Send 测试,返回 success marry,测试OK;指定了调试数据的传送方式,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式,其中,dt_shmem只适用于Windows平台;2,点击+,选择Remote,添加远程DEBUG配置。
2025-02-11 11:27:02
330
转载 @DateTimeFormat @JsonFormat 时间格式传参总结(转)
最近在时间Date传参时,没有加注解、前端多种格式都可以接收到数据,从而总结一下其中的原因。在Spring Boot 2.x中,当前端通过POST请求发送一个时间字符串"2023-06-20 21:04:50"时,后端使用Date类型来接收,并且没有标注任何注解,仍然可以接收到数据的原因是因为Spring Boot默认使用了Jackson库进行JSON序列化和反序列化。ISO-8601日期格式:2023-06-20日期+时间格式:2023-06-20T21:04:50(必须含有中间的T)
2025-02-07 08:56:12
31
原创 Spring AOP 切面中两次调用目标方法,是同一个事务不?
在 Spring 中,使用 AOP(面向切面编程)来拦截和处理方法调用时,事务的行为取决于你如何配置事务管理器和切面逻辑。要回答你的问题,我们需要考虑几个关键因素::Spring 事务管理支持不同的事务传播行为,如REQUIRED(默认)、SUPPORTS等。这些行为决定了当前方法是在现有事务中运行还是启动一个新事务。:切面的配置决定了何时以及如何拦截方法调用。例如,一个切面可以在方法执行前、后、或抛出异常时执行特定的逻辑。。
2024-12-10 16:01:04
538
转载 查看linux服务器硬盘IO读写负载(转)
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘可能存在瓶颈。出现异常,系统反映很慢,相应的应用程序也无法反映,而且还出现死机的情况,经过几天的观察了解,发现。idle小于70% IO压力就较大了,一般读取速度有较多的wait.同时可以结合vmstat 查看查看b参数(等待资源的进程数)IO等待所占用的CPU时间的百分比,高过30%时IO压力高。压力很大,主要的压力来自硬盘的IO访问已经达到100%再通过如下脚本查看高峰的进程io情况。首先 、用top命令查看。
2024-11-26 15:04:06
265
转载 MySQL 执行计划详解(转)
如果要使用覆盖索引,一定要注意select列表中只取出需要的列,不可select *,因为如果将所有字段一起做索引会导致索引文件过大,查询性能下降。本例中,由key_len可知t1表的idx_col1_col2被充分使用,col1匹配t2表的col1,col2匹配了一个常量,即 ’ac’c.range:索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行,常见于between、<、>等的查询。指出MySQL能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用。
2024-11-26 11:15:17
104
转载 activit表结构说明(转)
Activiti只保存流程实例在执行过程中的运行时数据,并且当流程结束后会立即移除这些数据,这是为了保证运行时表尽量的小并运行的足够快;ACT_ID_* : “ID”代表“Identity”(身份),这些表中保存的都是身份信息,如用户和组以及两者之间的关系。ACT_HI_* : “HI”代表“History”(历史),这些表中保存的都是历史数据,比如执行过的流程实例、变量、任务,等等。(6) 一个StartEvent与每一个业务流程有关,它表示该流程的切入点,同样,有一个EndEvent表示流程的结束。
2024-11-15 17:04:27
100
1
转载 Java双亲委派模型(转)
平时做业务开发比较少接触类加载器,但是如果想深入学习Tomcat、Spring等开源项目,或者从事底层架构的开发,了解甚至熟悉类加载的原理是必不可少的。java的类加载器有哪些?什么是双亲委派?为什么要双亲委派?如何打破它?多多少少对这些概念了解一些,甚至因为应付面试背过这些知识点,但是再深入一些细节,却知之甚少。JVM 并不是在启动时就把所有的.class文件都加载一遍,而是程序在运行过程中用到了这个类才去加载。
2024-11-08 16:17:26
134
转载 SpringBoot2.x过滤器OncePerRequestFilter(转)
前两篇简单的讲了一下spring security的基本用法以及相关扩展,今天跟着我一起学习下spring security的原理吧。spring security是有一系列的过滤器组成的一条链,见下图:其中绿色的过滤器需要满足一定的条件才会执行,其他三个颜色的过滤器一定会执行,红色的。
2024-11-04 13:56:28
204
转载 关于JAVA 指针问题(转)
好了,到这里我们就可以自己自由分配内存并且使用内存了,不过这里的内存偏移地址可能跟C语言的不太一样,大家使用的时候注意一下就好了!注意,通过这种方式分配的内存是不会被虚拟机管理的,这部分的内存需要程序员自己释放,相当于C语言开发一样了,大家要注意一下。我们经常使用的hotSpot虚拟机,使用的就是第二种方式,所以如果你用的是HotSpot虚拟机,那么你的引用保存的地址,就是对象的真实地址。有关Unsafe的其他方面就不多介绍了,我现在只介绍有关Unsafe类的指针方面,操作内存方面的东西。
2024-10-31 17:09:11
94
转载 freemark工具类简单使用(转)
即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。""}是非空判断,如果没有非空判断,null的情况下会报错。FreeMarker 是一款。
2024-07-16 11:20:47
252
1
转载 Spring中的“三级缓存”(转)
根本原因是 Spring 解决循环依赖依靠的是 Bean 的 中间态 这个概念,而中间态指的是 已经实例化,但未初始化的状态。具体参见Scope接口。从上面代码可以看到,若构造函数之间发生循环依赖(A的构造方法中依赖B,B的构造方法中依赖A),程序会在运行时一直循环调用最终导致内存溢出。当获得对象的引用时,对象的属性是可以延迟设置的。注意:这里指的循环依赖不是方法之间的循环调用,而是对象的相互依赖关系。循环依赖不仅发生在多个类中,还可能发生在本类中,即 N = 1,这种事极限情况的循环依赖:自己依赖自己。
2023-11-14 15:34:32
228
转载 LocalDateTime、LocalDate、Date、String相互转化大全及其注意事项(转)
大家在开发过程中必不可少的和日期打交道,对接别的系统时,时间日期格式不一致,每次都要转化!每次写完就忘记了,小编专门来整理一篇来详细说一下他们四个的转换的方法,方便后面使用!!需要注意的是,在使用时需要注意时区和时间戳的问题,否则可能会出现一些错误。总之,熟练掌握这些类型之间的转换方式可以提高我们的开发效率,也可以避免一些常见的错误,在实际开发中能够更加高效地处理日期时间相关的任务。如果对你有帮助,还请动一下您的发财小手,关注一下公众号哈!!!建了一个IT交流群,欢迎大家加入,过期加我拉你们进哈!
2023-10-27 15:04:00
316
转载 栈和栈帧(转)
(stack)又称为或,是计算机科学里,它按照)的原则存储数据。栈顶栈底下面是栈的示意图,从图中可以清楚的看到,不管是还是,都是在进行的,还有就是FILO原则,可以看到,如果你想取出B的值,那么你必须先要将B的上面的C取出,要取出C的值,就得取出C上面的值,以此类推。从技术上说,就是CPU寄存器里的。这里所说的“某个指针”通常位于x86/x64平台的ESP寄存器RSP寄存器,以及ARM平台的SP寄存器。操作栈的最常见的指令时PUSH(压栈)和POP(弹栈)。PUSH指令会对ESPRSPSP。
2023-10-27 10:49:43
192
转载 RabbitMQ消息丢失的场景,MQ消息丢失解决方案(转)
如果需要保证消息在整条链路中不丢失,那就需要生产端、mq自身与消费端共同去保障。生产端:对生产的消息进行状态标记,开启confirm机制,依据mq的响应来更新消息状态,使用定时任务重新投递超时的消息,多次投递失败进行报警。mq自身:开启持久化,并在落盘后再进行ack。如果是镜像部署模式,需要在同步到多个副本之后再进行ack。消费端:开启手动ack模式,在业务处理完成后再进行ack,并且需要保证幂等。通过以上的处理,理论上不存在消息丢失的情况,但是系统的吞吐量以及性能有所下降。
2023-10-23 14:48:49
203
转载 别再纠结线程池池大小、线程数量了,哪有什么固定公式 (转)
上面的例子,只是辅助,为了更好的理解线程数/程序行为/CPU状态的关系,来简单总结一下:一个极端的线程(不停执行“计算”型操作时),就可以把单个核心的利用率跑满,多核心CPU最多只能同时执行等于核心数的“极端”线程数如果每个线程都这么“极端”,且同时执行的线程数超过核心数,会导致不必要的切换,造成负载过高,只会让执行更慢I/O 等暂停类操作时,CPU处于空闲状态,操作系统调度CPU执行其他线程,可以提高CPU利用率,同时执行更多的线程。
2023-09-20 16:13:00
165
转载 注意避坑!Java 内部类持有外部类会导致内存泄露(转)
本文介绍 Java 内部类持有外部类导致内存泄露的原因以及其解决方案。为什么内部类持有外部类会导致内存泄露非静态内部类会持有外部类,如果有地方引用了这个非静态内部类,会导致外部类也被引用,垃圾回收时无法回收这个外部类(即使外部类已经没有其他地方在使用了)。若内部类持有外部类的引用,对内部类的使用很多时,会导致外部类数目很多。此时,就算是外部类的数据没有被用到,外部类的数据所占空间也不会被释放。本处在外部类存放大量的数据来模拟。
2023-09-18 13:29:48
142
转载 一个 SpringBoot 项目能处理多少请求?(小心有坑) (转)
这篇文章是基于“一个 SpringBoot 项目能同时处理多少请求?”这个面试题出发的。但是经过我们前面简单的分析,你也知道,这个问题如果在没有加一些特定的前提条件的情况下,答案是各不一样的。比如我再给你举一个例子,还是我们的 Demo,只是使用一下 @Async 注解,其他什么都不变:再次启动项目,发起访问,日志输出变成了这样:同时能处理的请求,直接从 Tomcat 的默认 200 个变成了 8 个?因为 @Async 注解对应的线程池,默认的核心线程数是 8。之前写过这篇文章。
2023-09-15 13:38:09
118
转载 【深度思考】如何优雅的实现脱敏?(转)
如果上文中提到的每一步都正常操作了,但自定义脱敏注解还是不生效:那很可能是Spring Boot默认的消息转换器被替换成fastjson了,因为Spring Boot默认是使用jackson进行序列化的,上面的方案也是@Bean此时的解决方案是新建过滤器类,实现@Overridetry {if (!// 手机号脱敏// 车牌号脱敏// 身份证号脱敏// 银行卡脱敏// 自定义脱敏default:break;此时,上文中自定义的脱敏注解中,和。
2023-08-31 09:45:19
1199
转载 钉钉消息已读、未读咋实现的嘞?(转)
一款app,消息页面有:钱包通知、最近访客等各种通知类别,每个类别可能有新的通知消息,实现已读、未读功能,包括多少个未读,这个是怎么实现的呢?比如用户A访问了用户B的主页,难道用rabitmq给B发通知消息吗?量大了成本受得了吗?有没有成本低的方案呢。
2023-08-31 09:29:24
590
转载 IDEA中如何使用Vue(转)
2.点击File-->Settings-->Editor-->Inspections-->HTML,展开HTML后找到 Unknown HTML tag attribute,然后点击其右边的拓展按钮。1.首先在File中打开Settings -->Editor-->File Types,然后再下拉选项中找到HTML,并且点击其加号添加后缀。3.上一步操作进行完后,点击Installed在其搜索框下搜索Vue插件并且进行勾选,勾选后点击Apply。二、让Vue的后缀文件(.vue)能够识别HTML格式。
2023-07-12 09:38:43
4041
转载 IDEA给【类】和【方法】设置作者和日期等注释(适合初学者)(转)
File--->Settings--->Editor--->Code Style--->Live Templates,里面有很多内置可修改的模板,创建一个属于自己的模板。第一步:File--->Settings--->Editor--->Code Style--->File and Code Templates。原文地址:https://blog.youkuaiyun.com/m0_61933976/article/details/127021176。第一步:创建一个模板组:myTemplates。
2023-07-11 16:13:36
2285
原创 线程池源码---循环中 retry标记的使用
此外,retry标记(只能在循环关键字之前进行标记for,while,do...while)位置后,只能在break,continue 后进行配对使用。此写法需要注意:retry(可以更换为其他)需要紧接着循环进行标记,中间不可以有其它代码。
2023-07-05 13:54:45
227
转载 Spring Boot 项目设计业务操作日志功能(转)
很久以前都想写这篇文章,一直没有空,但直到现在我对当时的情景还有印象,之所以有印象是因为需求很简单,业务操作日志的记录与查询的功能,但是具体实现真的很烂,具体的烂法会在反面示例里细说,领导以及客户层面很认可,一系列迷之操作,让我印象深刻。业务操作日志记录中包含了用户操作的功能名称、功能描述、操作人、操作时间和操作的参数报文,参数报文之所以选择存储在文件中,是因为正常情况下,是不需要知道具体的参数报文,只有在回滚操作的时候才会用到,可以根据上一次的参数报文逆向操作。
2023-06-29 10:59:23
190
转载 Spring MVC官方文档学习笔记(二)之DispatcherServlet(转)
(1) 前面已经提过了,DispatcherServlet会将实际的请求处理过程委托给那些特殊的组件来干,而它本身起一个统一分配与调度的作用,这些特殊的组件已经由Spring提供了默认的实现,但同时Spring也允许我们自己实现替换它们,下表列出了由 DispatcherServlet检测到的这些特殊的Bean类型。针对请求搜索恰当的handler,如果搜索到的话,与该handler相关的执行链(HandlerExecutionChain)将会被执行,以准备渲染模型(model)
2023-06-26 16:25:15
1900
转载 Spring MVC详解(转)
1.1介绍Spring MVC是Spring Framework提供的Web组件,全称是Spring Web MVC,是目前主流的实现MVC设计模式的框架,提供前端路由映射、视图解析等功能Java Web开发者必须要掌握的技术框架1.2MVC是什么MVC是一种软件架构思想,把软件按照模型,视图,控制器来划分Model:模型层,指工程中的JavaBean,用来处理数据JavaBean分成两类:一类称为实体类Bean:专门用来存储业务数据,比如Student,User。
2023-06-26 13:42:38
19146
2
原创 @Autowired,@Bean 的区别
其实在启动spring IOC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource(是CommonAnnotationBeanPostProcessor后置处理器处理的)或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该对象的属性。注解的类里,也可以用在@Component注解(@Controller,@Service,@Repository)的类里。
2023-06-15 13:16:21
1484
转载 Quartz + SpringBoot 实现定时任务(多任务,多执行时间)代码模板(转)
quartz 是一款开源且丰富特性的Java任务调度库,用于实现任务调度和定时任务。它支持各种任务类型和灵活的配置选项,具备作业持久化、集群和分布式调度、错误处理和重试机制等功能。Quartz被广泛应用于各种应用程序中,提供可靠和灵活的任务调度解决方案。
2023-06-12 14:46:18
2573
转载 设计模式之订阅发布模式(转)
订阅发布模式(Publish-Subscribe Pattern)是一种行之有效的解耦框架与业务逻辑的方式,也是一种常见的观察者设计模式,它被广泛应用于事件驱动架构中。在这个模式中,发布者(或者说是主题)并不直接发送消息给订阅者,而是通过调度中心(或者叫消息代理)来传递消息。发布者(或者说是主题)并不知道订阅者的存在,而订阅者也不知道发布者的存在。他们彼此唯一的关系就是在调度中心注册成为订阅者或者发布者。当一个发布者有新消息时,就将这个消息发布到调度中心。调度中心就会将这个消息通知给所有订阅者。
2023-06-07 14:27:02
2091
转载 Redis问题详解(转)
先解释 Redis 基本概念RedisRemoteDictionaryServer) 是一个使用C 语言编写的,开源的(BSD许可)高性能非关系型(NoSQL)的键值对数据库。简单提一下 Redis 数据结构Redis可以存储键和不同类型数据结构值之间的映射关系。键的类型只能是字符串,而值除了支持最基础的五种数据类型外,还支持一些高级数据类型一定要说出一些高级数据结构(当然你自己也要了解.. 下面会说到的别担心),这样面试官的眼睛才会亮。Redis 小总结与传统数据库不同的是Redis。
2023-06-07 10:08:40
213
1
转载 Redis延迟双删实例详解(转)
延迟双删策略是分布式系统中数据库存储和缓存数据保持一致性的常用策略,但它不是强一致。其实不管哪种方案,都避免不了Redis存在脏数据的问题,只能减轻这个问题,要想彻底解决,得要用到同步锁和对应的业务逻辑层面解决。
2023-06-07 09:32:26
1261
原创 RPC框架一,RMI远程调用实例
3,写个RMI服务端程序 RmiSeverTest.java(main方法,注意此类需要和RMI接口实现在同个包下,或者子包中,原因是接口实现的无参构造器是protected权限)将项目打包为rmi-sub-1.0.0.jar (去除其他文件,仅保留必须的MyRmiService.class,MyRmiServiceImpl_Stub.class两个文件)网上找了好久关于RMI调用的实例,大多都是本地调用的,远程调用的示例很少,所以自己整理一版。1,写个RMI接口 MyRmiService.java。
2023-04-13 11:07:28
531
转载 Java8内存模型—永久代(PermGen)和元空间(Metaspace)(转)
Java8内存模型—永久代(PermGen)和元空间(Metaspace)一、JVM 内存模型 根据 JVM 规范,JVM 内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分。 1、虚拟机栈:每个线程有一个私有的栈,随着线程的创建而创建。栈里面存着的是一种叫“栈帧”的东西,每个方法会创建一个栈帧,栈帧中存放了局部变量表(基本数据类型和对象引用)、操作数栈、方法出口等信息。栈的大小可以固定也可以动态扩展。当栈调用深度大于JVM所允许的范围,会抛出StackOverflowErr
2022-02-28 14:02:55
422
转载 Java内存模型与指令重排(转)
Java内存模型与指令重排本文暂不讲JMM(Java Memory Model)中的主存, 工作内存以及数据如何在其中流转等等,这些本身还牵扯到硬件内存架构,直接上手容易绕晕, 先从以下几个点探索JMM原子性 有序性 可见性 指令重排 CPU指令重排 编译器优化重排 Happen-Before规则原子性原子性是指一个操作是不可中断的. 即使是在多个线程一起执行的时候,一个操作一旦开始,就不会被其它线程干扰.例如CPU中的一些指令, 属于原子性的,又或者变量直接..
2022-02-08 15:02:32
240
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人