- 博客(101)
- 资源 (15)
- 收藏
- 关注
原创 Spring事务如何通过AOP实现的
可以说此处配置是事务的开关,如果没有此处配置,那么Spring中将不存在事务的功能。那么我们就从这个配置开始分析。根据之前的分析,我们因此可以判断,在自定义标签中的解析过程中一定是做了一些辅助操作,于是我们先从自定义标签入手进行分析。@Override在遇到诸如tx:annotation-driven为开头的配置后,Spring都会使用AnnotationDrivenBeanDefinitionParser类的parse方法进行解析。
2024-07-24 09:34:38 1091
原创 IOC之循环依赖处理
循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图所示:注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。
2024-07-24 09:32:36 1025
原创 IOC默认标签解析
本文主要研究Spring标签的解析,Spring的标签中有默认标签和自定义标签,两者的解析有着很大的不同,这次重点说默认标签的解析过程。默认标签的解析是在DefaultBeanDefinitionDocumentReader.parseDefaultElement函数中进行的,分别对4种不同的标签(import,alias,bean和beans)做了不同处理。// recurse。
2024-07-18 11:30:10 309 1
原创 Spring源码分析
上一篇我们了解了Spring的整体架构,这篇我们开始真正的阅读Spring源码。在分析spring的源码之前,我们先来简单回顾下spring核心功能的简单使用。接下来我们先了解下spring-bean最核心的两个类:DefaultListableBeanFactory和XmlBeanDefinitionReader。
2024-07-18 11:28:41 422
原创 如何判断对象可以被回收
在Java中,对象是否可以被回收通常由垃圾回收器决定。垃圾回收器使用一种称为""的算法来确定对象是否可被回收。可达性分析是指如果一个对象无法从任何。GC Roots是一组特殊的引用,它们被认为是程序中可访问对象的。直接或间接访问到,它就被认为是不可达的,可以被垃圾回收。,即从这些引用开始,可以追踪到所有仍然被程序引用的对象。
2024-04-22 15:51:47 593
原创 对象分配规则
这些规则确保了对象在创建时的正确初始化和内存管理。对于程序员来说,最重要的是编写好构造函数以确保对象在创建后具有合适的初始状态,并且不忘记在不再需要对象时将引用置为null,以便垃圾回收器能够回收不再使用的对象。在Java中,对象分配规则是关于如何为新对象分配内存的一套规则,以确保内存的有效使用和对象的。
2024-04-22 15:51:16 492
原创 揭秘一致性Hash算法
没错,一致性哈希算法就是通过这种方法,判断一个对象应该被缓存到哪台服务器上的,将缓存服务器与被缓存对象都映射到hash环上以后,从被缓存对象的位置出发,沿顺时针方向遇到的第一个服务器,就是当前对象将要缓存于的服务器,由于被缓存对象与服务器hash后的值是固定的,所以,在服务器不变的情况下,一张图片必定会被缓存到固定的服务器上,那么,当下次想要访问这张图片时,只要再次使用相同的算法进行计算,即可算出这个图片被缓存在哪个服务器上,直接去对应的服务器查找对应的图片即可。我们来模拟一遍,即可得到答案。
2024-04-19 13:09:52 797
原创 JWT原理
在Web应用中,不能把JWT当作Session使用,绝大多数情况下,传统的cookie-session机制工作得更好JWT适合一次性的命令认证,颁发一个有效期极短的JWT,即使暴露了危险也很小,由于每次操作都会生成新的JWT,因此也没必要保存JWT,真正实现无状态。
2024-04-19 13:09:16 1054
原创 什么是缓存?在NGINX中如何配置缓存以提升性能?
缓存是一种在计算机系统中常用的技术,用于存储临时数据副本,以便在将来的请求中更快地访问这些数据。缓存可以显著提升应用程序和网站的性能,因为它可以减少对后端服务器或数据库的重复请求,从而减少响应时间并降低资源消耗。在实际应用中,你还可以根据具体的需求和网站特点进行更详细的配置,以提升性能并优化缓存策略。不同的应用场景可能需要不同的缓存设置,因此建议根据实际情况进行调整。在Web服务器中,缓存通常用于存储已经生成的页面、资源或数据,以便下次请求时可以直接提供这些内容,而无需重新生成或从原始数据源获取。
2024-04-18 09:02:09 896
原创 什么是Lua模块?你会如何使用NGINX的Lua模块来定制请求处理流程?
通过使用NGINX的Lua模块,你可以实现高度定制化的请求处理逻辑,处理复杂的场景,以满足特定的业务需求。需要注意的是,使用Lua模块可能会对性能产生影响,因此在使用时要进行充分的测试和性能优化。Lua模块是NGINX的一个扩展,允许你使用Lua编程语言在NGINX配置中嵌入自定义的脚本逻辑。通过使用Lua模块,你可以在请求处理过程中执行自定义的操作,从而实现灵活的定制和扩展。
2024-04-18 09:00:55 834
原创 Seata
Seata是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata将为用户提供了AT、TCC、SAGA和XA事务模式,为用户打造一站式的分布式解决方案。
2024-04-17 15:24:12 1138
原创 什么是三高架构
综合来说,高并发性能能够保证系统在面对大量并发请求时能够高效处理;高可用性能够保证系统在面对故障和异常时能够持续提供服务;高性能能够保证系统在有限资源下能够以较快的速度完成任务。这三者相辅相成,构成了一个健壮、可靠和高效的软件系统。三高架构是指在软件系统设计与开发中,注重解决高并发性、高可用性和高性能的架构设计模式。
2024-04-17 15:23:00 399
原创 JRebel&XRebel在线激活
包含所有新旧版本,包括2023.4.2、2023.4.1、2023.4.0、2023.3.2、2023.3.1、2023.3.0、2023.2.2、2023.2.1、2023.2.0、2023.1.2、2023.1.1 等以及所有2022版本。JRebel&XRebel激活服务器地址。激活服务器地址(路线1,推荐)激活服务器地址(路线2)激活服务器地址(路线3)
2024-04-16 15:02:42 3612 1
原创 JDK动态代理和CGLIB动态代理
JDK动态代理在方法调用时需要通过反射机制来调用目标方法,因此性能略低于CGLIB,尽管JDK动态代理在Java 8中有了性能改进,但CGLIB动态代理仍然具有更高的方法调用性能。CGLIB动态代理在方法调用时不需要通过反射,直接调用目标方法,通常具有更高的方法调用性能,同时无需类型转换。另外,JDK代理生成的代理类较小,占用较少的内存,而CGLIB生成的代理类通常较大,占用更多的内存。而CGLIB动态代理不依赖于目标对象是否实现接口,可以代理没有实现接口的类,它通过继承或者代理目标对象的父类来实现代理。
2024-04-16 09:09:39 577
原创 Spring的事务传播行为
通过@Transactional注解的propagation属性来指定事务传播行为。事务的传播特性指的是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行?
2024-04-16 09:06:51 540
原创 Spring事务的失效原因
方法是private也会失效,解决:改成public: Spring的事务代理通常是通过Java动态代理或CGLIB动态代理生成的,这些代理要求目标方法是公开可访问的(public)。私有方法无法被代理,因此事务将无效。解决方法是将目标方法改为public或protected。 目标类没有配置为Bean也会失效,解决:配置为Bean: Spring的事务管理需要在Spring容器中配置的Bean上才能生效。如果目标类没有被配置为Spring Bean,那么事务将无法被应用。解决方法是确保目标类被正确配置为
2024-04-15 09:45:23 838
原创 SpringBoot的启动原理
总的来说,Spring Boot的启动过程是一个复杂的流程,它从Main方法开始,经过一系列步骤来初始化Spring容器和启动内置tomcat。
2024-04-12 09:27:55 496
原创 添加索引真的不会锁表吗
进行DDL操作时尽量在业务低峰期进行操作。在操作之前最好确认对要操作的表没有任何进行中的操作、没有未提交事务、也没有显式事务中的报错语句。设置超时时间lock_wait_timeout,避免长时间的metedata锁等待。
2024-04-11 15:13:17 966
原创 7种SQL的进阶用法
在MySQL中ORDER BY排序除了可以用ASC和DESC之外,还可以使用自定义排序方式来实现。('咱们结婚吧', '靳东', 43.2, '2013-04-12'),('四大名捕', '刘亦菲', 62.5, '2013-12-21'),('猎场', '靳东', 68.5, '2017-11-03'),('芳华', '范冰冰', 55.0, '2017-09-15'),('功夫瑜伽', '成龙', 91.8, '2017-01-28'),
2024-04-11 14:50:04 754
原创 MySQL表设计经验汇总篇
如果没有特殊的理由, 一般都建议将字段定义为 NOT NULL。为什么呢?首先,NOT NULL 可以防止出现空指针问题。其次,NULL值存储也需要额外的空间的,它也会导致比较运算更为复杂,使优化器难以优化SQL。NULL值有可能会导致索引失效如果将字段默认设置成一个空字符串或常量值并没有什么不同,且都不会影响到应用逻辑, 那就可以将这个字段设置为NOT NULL。
2024-04-11 14:46:11 2028
原创 【无标题】
sentinel,中文名是哨兵。集群监控:负责监控 redis master 和 slave 进程是否正常工作。消息通知:如果某个 redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。哨兵用于实现 redis 集群的高可用,本身也是分布式的,作为一个哨兵集群去运行,互相协同工作。
2024-04-11 14:44:34 1108
原创 高并发下如何解决数据库性能瓶颈问题
以上是一些常见的方法来解决数据库性能瓶颈问题,具体的解决方案要根据具体的业务场景和数据库系统来确定。在实际应用中,常常需要综合运用多种方法来达到更好的性能优化效果。在高并发场景下,数据库往往是性能瓶颈的一个重要因素。
2024-04-10 08:44:31 480
原创 高并发下如何保证数据的一致性和可靠性
综上所述,维护数据的一致性和可靠性需要结合合适的技术手段和策略,在系统架构、数据管理和异常处理等方面进行综合考虑和实施。在高并发环境中,确保数据的一致性和可靠性是非常重要的。
2024-04-10 08:43:54 843
原创 如何实现系统的高可用性
以上是一些常见的高可用方案,具体的方案和实施方式要根据系统的需求和实际情况来确定。一般来说,综合使用多种方案能够提高系统的高可用性,并根据业务需求进行系统层面、网络层面以及数据层面等多方面的高可用设计。实现系统的高可用性是确保系统持续提供服务的关键要素。
2024-04-09 10:43:22 435
原创 高并发下如何解决数据库性能瓶颈问题
以上是一些常见的方法来解决数据库性能瓶颈问题,具体的解决方案要根据具体的业务场景和数据库系统来确定。在实际应用中,常常需要综合运用多种方法来达到更好的性能优化效果。在高并发场景下,数据库往往是性能瓶颈的一个重要因素。
2024-04-09 10:42:52 312
原创 什么是索引下推
索引下推(INDEX CONDITION PUSHDOWN,简称 ICP)是在 MySQL 5.6 针对扫描二级索引的一项优化改进。总的来说是通过把索引过滤条件下推到存储引擎,来减少 MySQL 存储引擎访问基表的次数以及 MySQL 服务层访问存储引擎的次数。ICP 适用于 MYISAM 和 INNODB,本篇的内容只基于 INNODB。MySQL 服务层:也就是 SERVER 层,用来解析 SQL 的语法、语义、生成查询计划、接管从 MySQL 存储引擎层上推的数据进行二次过滤等等。
2024-04-08 08:47:51 3740
原创 Spring 框架中都用到了哪些设计模式
简单工厂:责任链模式:模板方法模式:策略模式:观察者模式:代理模式:装饰器模式:适配器模式:单例模式:工厂方法:
2024-04-07 09:51:58 324
原创 List操作的一些常见问题
从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是CopyOnWriteArrayList和CopyOnWriteArraySet。CopyOnWrite容器非常有用,可以在非常多的并发场景中使用到。在写操作(add、remove等)时,不直接对原数据进行修改,而是先将原数据复制一份,然后在新复制的数据上执行写操作,最后将原数据引用指向新数据。这样做的好处是读操作(get、iterator等)可以不加锁,因为读取的数据始终是不变的。
2024-04-07 09:42:36 739
原创 线程池中线程复用原理
线程复用的关键是将任务的提交和线程的创建、管理、执行分离,通过线程池来统一管理和调度,减少了创建和销毁线程的开销,提高了系统的效率。同时,由于线程池的复用特性,可以有效控制并发度,避免大量线程的创建和销毁导致的系统负载过大。线程池中的线程数量是有限的,核心线程数通常是固定的,最大线程数可以设置,超过最大线程数后,任务会被拒绝。线程池会对线程进行封装,核心原理在于将线程的创建和管理与任务的执行分离。线程池的线程复用原理是指,将线程放入线程池中重复利用,,如果是,则新建一个线程来执行任务;
2024-04-03 09:19:13 391
原创 如何优化线程池的性能
总之,在优化线程池性能时,需要根据实际情况进行参数配置,并选择合适的队列类型和任务拒绝策略。同时,还需要注意系统资源的利用和线程池的可维护性。要优化线程池的性能,需要根据实际情况进行参数配置。
2024-04-03 09:18:42 328
原创 CAS的原理
ABA问题是指一个值原来是A,变成了B,又变成了A,那么使用CAS进行检查时会发现它的值没有发生变化,但是实际上却变化了。开销问题则是因为CAS自旋操作需要不断轮询内存位置,直到成功为止,这会消耗大量的CPU资源。CAS(Compare And Swap)是一种乐观的并发控制机制,它的核心原理是基于硬件层面的原子性保证。CAS操作包含三个操作数——内存位置(V)、预期原值(A)和新值(B)。然而,CAS也存在一些缺点,例如。
2024-04-03 09:12:48 492
原创 JVM为什么使用元空间替换了永久代
总的来说,元空间相对于永久代来说具有更好的内存管理、更高的性能和更灵活的特性,能够更好地满足现代应用程序的需求。因此,虚拟机选择使用元空间替代永久代。虚拟机使用元空间替代了永久代是因为永久代在过去的实现中存在一些问题和限制,而元空间提供了更好的性能和灵活性。
2024-04-02 10:24:34 747
原创 JVM中一次完整的 GC 流程
以上是一次完整的GC流程的一般步骤。不同的GC算法和实现可能会有所差异,但整体的流程大致相同。GC的目标是回收垃圾对象,释放内存空间,并且尽量减少对应用程序的影响,保证程序的正常运行。JVM中的垃圾回收是自动进行的,它的目标是回收不再使用的对象,释放内存空间,并且保证程序的正常运行。
2024-04-02 10:24:03 751
原创 Mybatis分页原理
MyBatis在数据库查询中执行分页操作时,通常会使用分页插件来处理。分页插件能够根据数据库的不同,生成适当的分页查询语句,并将查询结果进行分页处理。下面我将解释MyBatis如何进行分页以及分页插件的一般原理。分页插件是一种扩展机制,它允许MyBatis在查询过程中,自动应用分页逻辑而不需要手动编写分页查询语句。
2024-04-01 14:01:26 288
原创 OAuth2
传统的客户端-服务器身份验证模型中存在的问题。在这种模型中,客户端通过使用资源所有者的凭据对服务器进行身份验证,从而请求访问受限资源(受保护的资源)。为了使第三方应用程序能够访问受限资源,资源所有者需与第三方共享其凭据。第三方应用程序通常需要明文存储资源所有者的凭据(通常是密码),以备将来使用。服务器需要支持密码身份验证,而且密码身份验证存在安全弱点。第三方应用程序可能获得对资源所有者受保护资源的过于广泛的访问权限,而资源所有者无法限制对资源的访问时长或访问的资源子集。
2024-04-01 13:58:32 1492
原创 算法思想 - 贪心算法
由于它只关注当前的局部最优解,并没有回溯和修正之前的选择,可能会导致无法达到全局最优解。因此,在应用贪心算法时需要仔细分析问题的特点和约束条件,判断是否适合使用贪心算法。贪心算法的步骤相对简单明了。然后,在每一步选择中确定当前情况下的局部最优解,并更新问题的状态。它适用于那些能够通过局部最优解达到全局最优解的问题,而且通常可以快速得到一个次优或近似最优解。贪心算法的核心思想是在求解过程中做出当前情况下的最优选择,并相信这个选择对全局来说也是最优的。它不考虑子问题的解决过程,只关注当前状态下的最优解。
2024-04-01 13:46:49 894
Springboot素材网-会员-积分.zip
2022-04-21
Springboot爱心救助站
2022-04-21
医院电子病历系统源码+sql.zip
2021-04-16
java高校社团管理系统+sql.zip
2021-04-13
学生请销假管理系统源码+sql(vue+Element UI)
2021-01-25
驾校源码+sql.zip
2021-01-25
基于Web的酒店管理系统源码+sql
2021-01-25
旅游管理系统源码+sql
2021-01-25
小区物业管理系统源码.zip
2021-01-07
SpringBoot宠物医院管理系统
2021-01-06
基于java的医药进销存项目
2021-01-06
图书管理系统源码.zip
2021-01-06
农业培育项目源码.zip
2021-01-04
java 电影院购票选择系统源码+sql
2020-12-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人