- 博客(46)
- 收藏
- 关注
原创 自研RPC,基于Spring整合Netty,Zookeeper作为服务治理,实现自定义RPC,自定义协议。使用Protobuf等多种可选序列化协议,实现轮询,随机,hash等负载均衡算法
手写RPC框架,与Spring整合,基于Netty作为网络框架,protobuf作为序列化协议。实现轮询,hash,随机负载均衡算法,并可以和实际业务相结合
2024-07-29 22:49:53
1171
原创 从底层分析并详解SpringAOP底层实现
当这里的proceed方法被调用时,会有一个初始化为0的参数,作用是记录这里第几个调用的Advisor,当所有的Advisor调完后就会执行真正的原始方法。首先定义了两个类实现了MethodInterceptor接口,这里的 MethodInvocation 是对原始方法的包装同时也是AOP通知功能的实现方式。构造参数中传入集合的是刚刚来两个实现MethodInterceptor的类。由于此类是被保护的所以我采用继承的方法去调用相关方法,并自定义了一个Advisor,同时还通过注解去引入。
2024-04-21 18:46:08
486
原创 计算机网络之同轴电缆,集线器,网桥,交换机,路由器
两台主机用交叉线连接,通过88.2ping88.3发现底层是先经过广播,通过arp协议,告诉我要找的ip是88.3,然后88.3主机收到后就把自己的mac地址发送回去,同理88.2发现是发给自己的后就进行接收,有了mac地址然后再通过icmp协议发送数据包。网桥具有自学习能力,它根据左右两个端口的连接,并通过设备之间的广播信息进行记录,比如说左边的接口存储的是左边对应设备的mac地址,右边接口记录的是右边设备的mac。上述所有的设备通信的前提是大家都位于同一个网段,不同网段之间是没办法的。
2024-04-13 21:56:42
706
原创 Spring源码刨析之配置文件的解析和bean的创建以及生命周期
先介绍一个类XmlBeanFactory,这个类负责配置文件的解析和bean的创建和初始化。在Spring中对象信息会被封装为一个BeanDefinition对象,这个对象会保存配置文件中所描述的类的信心比如属性名属性值类名等,以便创建bean时根据BeanDefinition对象的信息反射创建并赋值。
2024-04-13 13:51:11
1116
原创 Netty服务端基本启动流程源码刨析
方法是判断普通任务队列(非定时任务)是否有待完成的任务,这里显然是有的上面已经说了提交了一个任务register0,但是这里面的作用是如果有任务就调用selectNow方法,看返回的是否有事件发生。看左下角当前线程是NioEventLoopGroup中的一个线程,并把此线程赋值给Thread属性(懒加载),接着进入SingleThreadEventExecutor.this.run()方法,这里的this.run指的是NioEventLoop的run方法。
2024-03-27 22:10:03
726
原创 静态代理,JDK动态代理,CGLIB代理原理详解
JDK动态代理和CGLIB。JDK动态代理是通过Java的反射机制实现的,它基于接口来代理目标类,并提供了InvocationHandler接口来处理方法调用。CGLIB动态代理则是通过操作字节码实现的,它可以代理具体的类而不仅限于接口。
2023-12-12 21:51:48
332
原创 从AQS源码的角度理解锁重入,锁竞争,公平锁,不可重入锁
该文章深入探讨了Java并发编程中的关键组件之一,即AQS(AbstractQueuedSynchronizer),并对其源代码进行了详细解读。AQS是Java并发库中用于实现锁和同步器的重要基类。文章首先介绍了AQS的基本概念和工作原理,然后深入分析了AQS的核心方法和数据结构。通过对源码的逐行解析,文章解释了AQS如何使用内部的双向链表(CLH队列)来维护线程的等待队列,并通过状态变量来管理线程的获取和释放。此外,文章还涵盖了AQS的独占模式和共享模式的实现细节
2023-11-30 13:42:03
266
原创 双亲委派机制与类加载器的自定义
双亲委派模型是Java类加载器的一种重要机制,它定义了一种层次化的类加载器结构,确保类的加载和安全性。该模型将类加载操作委派给父类加载器,并在父类加载器无法加载时由子类加载器负责。本文将介绍双亲委派模型的工作原理以及其带来的优势。
2023-11-21 21:17:50
282
原创 JVM(二)方法区,堆,垃圾回收算法
垃圾回收是现代编程语言中一项重要的内存管理技术,它通过自动检测和回收不再使用的内存来减少内存泄漏和提高应用程序性能。在垃圾回收算法中,可达性分析是一种常用的技术,用于确定对象的可达性并进行相应的内存回收
2023-11-17 12:36:04
264
原创 JVM(一):类加载器,栈
文件经过编译后由类加载器把字节码文件加载到内存中,内存中会有方法区,堆区,等空间,方法区,堆区是线程之间共享的区域,程序计数器,本地方法栈,虚拟机栈是线程独享,每个线程都有自己的。通过类的全限定名获得定义此类的二进制字节流,把字节流代表的静态存储结构转化为方法区(1.8后称之为元空间,之前成为永久代)的运行时数据结构,在内存中生成这个类的 java.lang.Class对象,作为方法区这个类的各种数据的访问入口。启动类加载器是由本地代码实现的,它负责加载Java的核心类库。
2023-11-12 22:30:34
75
原创 Nginx 基础篇总结
Nginx 是一款强大而高效的服务器软件,被广泛应用于构建高性能的网络应用。它采用了基于事件驱动的模型和 I/O 多路复用技术,实现了并发处理和高吞吐量的能力。Nginx 在处理静态资源、反向代理、负载均衡等方面表现出色,同时具有高度的可定制性和可扩展性。它的配置简洁灵活,易于使用和管理。无论是小型网站还是大型分布式系统,Nginx 都是一个理想的选择。通过提供高效的请求处理和优化的性能,Nginx 成为了现代网络架构中不可或缺的一部分,为用户提供了卓越的体验。
2023-11-12 00:19:42
179
原创 BigInteger和BigDecimal详解
当涉及到处理大整数和高精度小数计算时,Java 提供了两个非常有用的类,分别是 BigInteger 和 BigDecimal。这两个类允许开发者处理超出标准数据类型范围的整数和高精度的小数,为金融、科学计算和密码学等领域提供了重要的支持。在本篇博客中,我们将深入探讨 BigInteger 和 BigDecimal 的用途、特性和使用方法。
2023-10-01 01:49:15
742
原创 Redis数据持久化原理到主从集群同步原理
在现代应用程序开发中,数据的持久性是至关重要的。Redis作为一种高性能的内存数据库,也提供了数据持久化机制,以确保数据不会因服务器重启或故障而丢失。本文将深入探讨Redis的数据持久化原理,特别是RDB(Redis DataBase)和AOF(Append-Only File)两种主要的持久化方法,以及如何根据不同的需求选择合适的方法。
2023-09-26 16:38:15
245
原创 LeetCode--字母异位词分组
思路:由于字母的组成一样是关键。我们可以利用Map集合的特性,把字母的组合当作key,把符合条件的单词当做value,并放在List集合中。然后遍历每个单词,根据结果进行单词的添加。即字母的组成一样,但是排序方式不同的字母。题目的意思是指给定指定的字母数组,然后找到。
2023-09-07 16:53:36
69
原创 深入解析 Spring MVC 请求处理流程
本文将深入探讨Spring MVC的核心组件:DispatcherServlet、HandlerMapping和HandlerAdapter,以及它们在请求处理流程中的作用。
2023-08-30 10:53:37
207
原创 深入解析 Spring Framework 中的上下文和 IOC 容器
Spring Framework 作为一款广泛应用于 Java 开发的轻量级框架,引入了众多强大的特性,其中 "上下文" 和 "IOC 容器" 无疑是其核心要素之一。本文将带您深入探讨这两个概念,揭示它们背后的原理、作用以及在实际 Spring 应用中的重要性。
2023-08-25 16:05:52
127
原创 深入理解SpringBoot2,SpringBoot3自动配置原理
Spring Boot 是一个广泛应用于Java应用程序开发的框架,其独特之处在于强大的自动配置机制。本文将深入探讨 Spring Boot 2 和 Spring Boot 3 版本中自动配置的原理,帮助开发者理解其工作方式并优化应用程序的开发流程。
2023-08-21 11:38:19
555
原创 Spring Boot 测试类中 JUnit 4 与 JUnit 5 的区别与常见问题分析
junit4和juint5的区别及常见错误的解决方法
2023-08-11 19:35:49
1020
原创 Spring-Security过滤器链的加载过程和请求对象
本篇博客深入探讨了Spring Security中的两个核心概念:过滤器链和请求对象。在现代Web应用程序中,安全性是至关重要的。Spring Security作为一个功能强大的安全框架,为开发人员提供了一套灵活且易于使用的安全功能。
2023-08-05 11:31:39
448
1
原创 Mybatis的使用和resultType和resultMap的区别
MyBatis是一个Java持久层框架,它将SQL查询、结果映射和数据库操作封装在一起,简化了与数据库的交互过程。与其他ORM框架不同,MyBatis更加注重SQL的可控性和灵活性,允许开发人员完全控制SQL语句的编写。
2023-08-02 19:07:47
122
原创 Web应用程序中常用的状态管理技术Cookie,Session和JWT令牌技术
本文介绍了在Web应用程序中常用的状态管理技术,即Cookie、Session和JWT令牌技术,Cookie、Session和JWT令牌是为了解决Web应用程序中的用户状态管理和身份验证问题而引入的重要技术,它们各自有着优势和适用场景,开发者可以根据具体需求选择合适的技术来实现安全高效的状态管理。
2023-07-24 15:00:08
268
原创 计算机原码反码补码的理解和作用
本文旨在深入探讨整数在计算机中的二进制表示形式以及涉及的源码、反码和补码的运算原理。我们将介绍二进制数的基本概念,解释源码、反码和补码的定义和转换规则,并探讨在运算过程中它们的作用和区别。通过详细的解释和示例,我们希望读者能够全面理解这些概念,并正确应用于实际的计算和编程中。
2023-07-12 23:09:09
539
1
原创 关于为什么前端通过Get请求后端不需要添加相应参数注解就可以完成对象封装而Post请求需要
在Spring MVC中,默认情况下,DELETE请求的主体数据不会被自动封装到方法参数中,与GET请求类似。需要注意的是,这种自动绑定适用于简单的参数类型和对象属性,如果涉及到复杂的数据转换或处理逻辑,可能需要使用其他注解或自定义转换器来处理。注解,Spring MVC会自动将请求体的内容与方法参数的类型进行适配,并将请求体的数据封装到方法参数中,方便后续的处理。注解,Spring MVC会根据请求参数的名称和方法参数的名称进行匹配,并自动封装参数。注解来捕获URL中的参数,并将其映射到方法参数中。
2023-06-05 19:04:06
710
原创 线程绑定 ThreadLocal
通过 ThreadLocal,可以在每个线程中存储和获取变量的值,而不需要显式地传递变量的引用。线程绑定允许在同一个线程中访问和修改特定的变量,而不会影响其他线程中的相同变量。通过ThreadLocal,每个线程都能够独立地访问和修改变量的值,而不会影响其他线程中的副本。这种方式在多线程环境中非常有用,特别是当多个线程需要共享某些数据,但又需要保持数据的独立性和线程安全性时。主线程设置了变量的初始值为 42,然后创建了两个新线程,每个线程都从自己的副本中获取变量的值,并进行操作。
2023-06-04 11:24:41
357
原创 AOP面向切面编程
以上代码定义了一个名为`LoggingAspect`的切面类,在其中使用`@Before`注解定义了一个前置通知,在切点表达式中选择了`com.example.service`包下的所有方法。在软件开发中,面向切面编程(AOP)是一种重要的编程范式,它提供了一种用于将横切关注点从核心业务逻辑中分离出来的方式。切面可以在连接点上定义不同类型的通知,以实现对应的操作。- Spring AOP:Spring框架提供了对AOP的支持,它使用动态代理实现AOP功能,并提供了XML配置和注解驱动的方式。
2023-05-23 14:26:46
431
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人