自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 从底层分析并详解SpringAOP底层实现

当这里的proceed方法被调用时,会有一个初始化为0的参数,作用是记录这里第几个调用的Advisor,当所有的Advisor调完后就会执行真正的原始方法。首先定义了两个类实现了MethodInterceptor接口,这里的 MethodInvocation 是对原始方法的包装同时也是AOP通知功能的实现方式。构造参数中传入集合的是刚刚来两个实现MethodInterceptor的类。由于此类是被保护的所以我采用继承的方法去调用相关方法,并自定义了一个Advisor,同时还通过注解去引入。

2024-04-21 18:46:08 387

原创 计算机网络之同轴电缆,集线器,网桥,交换机,路由器

两台主机用交叉线连接,通过88.2ping88.3发现底层是先经过广播,通过arp协议,告诉我要找的ip是88.3,然后88.3主机收到后就把自己的mac地址发送回去,同理88.2发现是发给自己的后就进行接收,有了mac地址然后再通过icmp协议发送数据包。网桥具有自学习能力,它根据左右两个端口的连接,并通过设备之间的广播信息进行记录,比如说左边的接口存储的是左边对应设备的mac地址,右边接口记录的是右边设备的mac。上述所有的设备通信的前提是大家都位于同一个网段,不同网段之间是没办法的。

2024-04-13 21:56:42 493

原创 Spring源码刨析之配置文件的解析和bean的创建以及生命周期

先介绍一个类XmlBeanFactory,这个类负责配置文件的解析和bean的创建和初始化。在Spring中对象信息会被封装为一个BeanDefinition对象,这个对象会保存配置文件中所描述的类的信心比如属性名属性值类名等,以便创建bean时根据BeanDefinition对象的信息反射创建并赋值。

2024-04-13 13:51:11 1056

原创 Netty组件优化之FastThreadLocal

主要讲解Netty对ThreadLocal的优化

2024-03-31 21:20:29 1045

原创 Netty组件优化之时间轮

讲解定时任务底层实现原理

2024-03-31 14:52:24 462

原创 Netty对Channel事件的处理以及空轮询Bug的解决

主要刨析Netty处理连接事件并注册的全过程,有助于理解Netty线程模型

2024-03-28 15:00:24 511

原创 Netty服务端基本启动流程源码刨析

方法是判断普通任务队列(非定时任务)是否有待完成的任务,这里显然是有的上面已经说了提交了一个任务register0,但是这里面的作用是如果有任务就调用selectNow方法,看返回的是否有事件发生。看左下角当前线程是NioEventLoopGroup中的一个线程,并把此线程赋值给Thread属性(懒加载),接着进入SingleThreadEventExecutor.this.run()方法,这里的this.run指的是NioEventLoop的run方法。

2024-03-27 22:10:03 672

原创 静态代理,JDK动态代理,CGLIB代理原理详解

JDK动态代理和CGLIB。JDK动态代理是通过Java的反射机制实现的,它基于接口来代理目标类,并提供了InvocationHandler接口来处理方法调用。CGLIB动态代理则是通过操作字节码实现的,它可以代理具体的类而不仅限于接口。

2023-12-12 21:51:48 225

原创 从AQS源码的角度理解锁重入,锁竞争,公平锁,不可重入锁

该文章深入探讨了Java并发编程中的关键组件之一,即AQS(AbstractQueuedSynchronizer),并对其源代码进行了详细解读。AQS是Java并发库中用于实现锁和同步器的重要基类。文章首先介绍了AQS的基本概念和工作原理,然后深入分析了AQS的核心方法和数据结构。通过对源码的逐行解析,文章解释了AQS如何使用内部的双向链表(CLH队列)来维护线程的等待队列,并通过状态变量来管理线程的获取和释放。此外,文章还涵盖了AQS的独占模式和共享模式的实现细节

2023-11-30 13:42:03 198

原创 双亲委派机制与类加载器的自定义

双亲委派模型是Java类加载器的一种重要机制,它定义了一种层次化的类加载器结构,确保类的加载和安全性。该模型将类加载操作委派给父类加载器,并在父类加载器无法加载时由子类加载器负责。本文将介绍双亲委派模型的工作原理以及其带来的优势。

2023-11-21 21:17:50 241

原创 JVM(二)方法区,堆,垃圾回收算法

垃圾回收是现代编程语言中一项重要的内存管理技术,它通过自动检测和回收不再使用的内存来减少内存泄漏和提高应用程序性能。在垃圾回收算法中,可达性分析是一种常用的技术,用于确定对象的可达性并进行相应的内存回收

2023-11-17 12:36:04 206

原创 JVM(一):类加载器,栈

文件经过编译后由类加载器把字节码文件加载到内存中,内存中会有方法区,堆区,等空间,方法区,堆区是线程之间共享的区域,程序计数器,本地方法栈,虚拟机栈是线程独享,每个线程都有自己的。通过类的全限定名获得定义此类的二进制字节流,把字节流代表的静态存储结构转化为方法区(1.8后称之为元空间,之前成为永久代)的运行时数据结构,在内存中生成这个类的 java.lang.Class对象,作为方法区这个类的各种数据的访问入口。启动类加载器是由本地代码实现的,它负责加载Java的核心类库。

2023-11-12 22:30:34 36

原创 Nginx 基础篇总结

Nginx 是一款强大而高效的服务器软件,被广泛应用于构建高性能的网络应用。它采用了基于事件驱动的模型和 I/O 多路复用技术,实现了并发处理和高吞吐量的能力。Nginx 在处理静态资源、反向代理、负载均衡等方面表现出色,同时具有高度的可定制性和可扩展性。它的配置简洁灵活,易于使用和管理。无论是小型网站还是大型分布式系统,Nginx 都是一个理想的选择。通过提供高效的请求处理和优化的性能,Nginx 成为了现代网络架构中不可或缺的一部分,为用户提供了卓越的体验。

2023-11-12 00:19:42 130

原创 解决Redis数据存储不一致

本问主要对解决数据库和redis缓存不一致问题提出解决方案

2023-10-01 02:07:06 524

原创 BigInteger和BigDecimal详解

当涉及到处理大整数和高精度小数计算时,Java 提供了两个非常有用的类,分别是 BigInteger 和 BigDecimal。这两个类允许开发者处理超出标准数据类型范围的整数和高精度的小数,为金融、科学计算和密码学等领域提供了重要的支持。在本篇博客中,我们将深入探讨 BigInteger 和 BigDecimal 的用途、特性和使用方法。

2023-10-01 01:49:15 220

原创 Redis数据持久化原理到主从集群同步原理

在现代应用程序开发中,数据的持久性是至关重要的。Redis作为一种高性能的内存数据库,也提供了数据持久化机制,以确保数据不会因服务器重启或故障而丢失。本文将深入探讨Redis的数据持久化原理,特别是RDB(Redis DataBase)和AOF(Append-Only File)两种主要的持久化方法,以及如何根据不同的需求选择合适的方法。

2023-09-26 16:38:15 180

原创 Redission分布式锁原理以及不可重入不可重试超时释放等问题的解决和详解

本博客关于分布式锁的常见问题做出了详细的解答

2023-09-23 21:25:41 2140

原创 解决Redis数据存储不一致

讲解redis数据的存储不一致问题以及解决方法,全面深入

2023-09-20 09:57:19 238

原创 ThreadLocal深度理解

本文详细讲解了ThreadLoca的原理从使用到内存泄露原理讲解,全面的理解ThreadLocal

2023-09-18 22:21:22 36

原创 LeetCode--字母异位词分组

思路:由于字母的组成一样是关键。我们可以利用Map集合的特性,把字母的组合当作key,把符合条件的单词当做value,并放在List集合中。然后遍历每个单词,根据结果进行单词的添加。即字母的组成一样,但是排序方式不同的字母。题目的意思是指给定指定的字母数组,然后找到。

2023-09-07 16:53:36 37

原创 深入解析 Spring MVC 请求处理流程

本文将深入探讨Spring MVC的核心组件:DispatcherServlet、HandlerMapping和HandlerAdapter,以及它们在请求处理流程中的作用。

2023-08-30 10:53:37 129

原创 深入解析 Spring Framework 中的上下文和 IOC 容器

Spring Framework 作为一款广泛应用于 Java 开发的轻量级框架,引入了众多强大的特性,其中 "上下文" 和 "IOC 容器" 无疑是其核心要素之一。本文将带您深入探讨这两个概念,揭示它们背后的原理、作用以及在实际 Spring 应用中的重要性。

2023-08-25 16:05:52 61

原创 深入理解SpringBoot2,SpringBoot3自动配置原理

Spring Boot 是一个广泛应用于Java应用程序开发的框架,其独特之处在于强大的自动配置机制。本文将深入探讨 Spring Boot 2 和 Spring Boot 3 版本中自动配置的原理,帮助开发者理解其工作方式并优化应用程序的开发流程。

2023-08-21 11:38:19 380

原创 Spring Boot 测试类中 JUnit 4 与 JUnit 5 的区别与常见问题分析

junit4和juint5的区别及常见错误的解决方法

2023-08-11 19:35:49 654

原创 从数据结构栈到递归算法详解

从栈的角度理解递归

2023-08-08 23:07:49 168 1

原创 Spring-Security过滤器链的加载过程和请求对象

本篇博客深入探讨了Spring Security中的两个核心概念:过滤器链和请求对象。在现代Web应用程序中,安全性是至关重要的。Spring Security作为一个功能强大的安全框架,为开发人员提供了一套灵活且易于使用的安全功能。

2023-08-05 11:31:39 300 1

原创 Mybatis的使用和resultType和resultMap的区别

MyBatis是一个Java持久层框架,它将SQL查询、结果映射和数据库操作封装在一起,简化了与数据库的交互过程。与其他ORM框架不同,MyBatis更加注重SQL的可控性和灵活性,允许开发人员完全控制SQL语句的编写。

2023-08-02 19:07:47 71

原创 Web应用程序中常用的状态管理技术Cookie,Session和JWT令牌技术

本文介绍了在Web应用程序中常用的状态管理技术,即Cookie、Session和JWT令牌技术,Cookie、Session和JWT令牌是为了解决Web应用程序中的用户状态管理和身份验证问题而引入的重要技术,它们各自有着优势和适用场景,开发者可以根据具体需求选择合适的技术来实现安全高效的状态管理。

2023-07-24 15:00:08 165

原创 文件图片存储两种方式实现:本地存储和云端存储oss

用于图片等文件上传并进行页面显示

2023-07-23 10:00:47 829 1

原创 计算机原码反码补码的理解和作用

本文旨在深入探讨整数在计算机中的二进制表示形式以及涉及的源码、反码和补码的运算原理。我们将介绍二进制数的基本概念,解释源码、反码和补码的定义和转换规则,并探讨在运算过程中它们的作用和区别。通过详细的解释和示例,我们希望读者能够全面理解这些概念,并正确应用于实际的计算和编程中。

2023-07-12 23:09:09 446 1

原创 AOP面向切面编程思想

通过实例帮助理解AOP思想

2023-07-03 23:48:03 105 1

原创 子网掩码网关和DNS服务器的关系

子网掩码,网关,dns的关联

2023-06-14 20:57:48 787

原创 关于为什么前端通过Get请求后端不需要添加相应参数注解就可以完成对象封装而Post请求需要

在Spring MVC中,默认情况下,DELETE请求的主体数据不会被自动封装到方法参数中,与GET请求类似。需要注意的是,这种自动绑定适用于简单的参数类型和对象属性,如果涉及到复杂的数据转换或处理逻辑,可能需要使用其他注解或自定义转换器来处理。注解,Spring MVC会自动将请求体的内容与方法参数的类型进行适配,并将请求体的数据封装到方法参数中,方便后续的处理。注解,Spring MVC会根据请求参数的名称和方法参数的名称进行匹配,并自动封装参数。注解来捕获URL中的参数,并将其映射到方法参数中。

2023-06-05 19:04:06 509

原创 线程绑定 ThreadLocal

通过 ThreadLocal,可以在每个线程中存储和获取变量的值,而不需要显式地传递变量的引用。线程绑定允许在同一个线程中访问和修改特定的变量,而不会影响其他线程中的相同变量。通过ThreadLocal,每个线程都能够独立地访问和修改变量的值,而不会影响其他线程中的副本。这种方式在多线程环境中非常有用,特别是当多个线程需要共享某些数据,但又需要保持数据的独立性和线程安全性时。主线程设置了变量的初始值为 42,然后创建了两个新线程,每个线程都从自己的副本中获取变量的值,并进行操作。

2023-06-04 11:24:41 251

原创 SpringMVC和SpringBoot关系

SpringBoot和SpringMVC关系

2023-06-03 20:15:33 690

原创 关于服务器如何判别不同用户,以及判断用户登录状态执行相应功能

关于服务器如何判断不同用户请求

2023-06-03 17:54:26 898

原创 关于MyBatisPlus中分页查询为什么要使用拦截器的解释

MyBatisPlus关于分页查询的理解

2023-06-03 16:44:21 2229

原创 AOP面向切面编程

以上代码定义了一个名为`LoggingAspect`的切面类,在其中使用`@Before`注解定义了一个前置通知,在切点表达式中选择了`com.example.service`包下的所有方法。在软件开发中,面向切面编程(AOP)是一种重要的编程范式,它提供了一种用于将横切关注点从核心业务逻辑中分离出来的方式。切面可以在连接点上定义不同类型的通知,以实现对应的操作。- Spring AOP:Spring框架提供了对AOP的支持,它使用动态代理实现AOP功能,并提供了XML配置和注解驱动的方式。

2023-05-23 14:26:46 340 1

原创 Java动态代理

在Main类中,我们通过动态代理创建了一个代理对象helloProxyInstance,并调用了其中的sayHello()方法。InvocationHandler接口定义了一个单一的方法invoke(),当代理对象上的方法被调用时,该方法会被调用。在Java开发中,动态代理是一种强大的技术,它允许我们在运行时创建代理对象,以实现对目标对象的间接访问和控制。与静态代理不同,动态代理是在运行时生成代理对象,而无需编写特定的代理类。3. 当代理对象上的方法被调用时,调用处理程序的invoke()方法。

2023-05-23 14:25:03 384 1

原创 管理学生数据和MySql数据库相结合实现根据学号进行增删改查

conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/stu", "root", "密码");conn = DriverManager.getConnection(url, "root", "密码");btnUpdate = new JButton("修改");lbInfo.setText("添加失败");lbInfo.setText("查询成功");lbInfo.setText("查询失败");

2023-05-01 08:00:54 211

ThreadLocal深度理解

ThreadLocal深度理解

2023-09-18

空空如也

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

TA关注的人

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