- 博客(9)
- 收藏
- 关注
原创 AOP实现原理
AOP 底层实现方式之一是代理,由代理结合通知和目标,提供增强功能。除此以外,aspectj 提供了两种另外的 AOP 底层实现:第一种是通过 ajc 编译器在class 类文件时,就把通知的增强功能,织入到目标类的字节码中第二种是通过 agent 在目标类时,修改目标类的字节码,织入增强功能。
2023-08-15 23:02:49
107
原创 Spring源码 - 元数据Metadata
元数据,是框架设计中必须的一个概念,所有的流行框架里都能看到它的影子,包括且不限于Spring、SpringBoot、SpringCloud、MyBatis等。它的作用肯定是大大的,它能模糊掉具体的类型,能让数据输出变得统一,能解决Java抽象解决不了的问题,比如运用得最广的便是注解,因为它不能继承无法抽象,所以用元数据方式就可以完美行成统一的向上抽取让它变得与类型无关,也就是常说的模糊效果,这便是框架的核心设计思想。
2023-08-15 22:52:44
546
原创 Spring源码剖析之推断构造方法
1、 默认情况,用无参构造方法,或者只有一个构造方法就用那一个。2、 程序员指定了构造方法入参值,通过getBean()或者BeanDefinition.getConstructorArgumentValues()指定,那就用所匹配的构造方法。3、 程序员想让Spring自动选择构造方法以及构造方法的入参值, autowire = "constructor"。4、 程序员通过@Autowired注解指定了某个构造方法,但是希望Spring自动找该构造方法的入参值。
2023-08-10 23:41:07
148
1
原创 ThreadLocal常见面试题
ThreadLocal 的原理是在Thread内部有一个ThreadLocalMap的集合对象,他的key是ThreadLocal,value就是你要存储的变量副本,不同线程的 ThreadLocalMap 是隔离开的,如果ThreadLocal 变量是非 static 的话,就会使得每次生成实例都要生成不同的 ThreadLocal 对象,虽然这样程序不会有什么异常,但是会造成内存资源的浪费。但是ThreadLocal 变量定义成staic也有一定的缺点,就是在线程池的情况下更容易造成内存泄露。
2023-08-07 23:20:21
1273
原创 常见排序算法
稳定 vs 不稳定我们说一个算法稳不稳定,也就是看排序前后会不会把一些相同元素的顺序给打乱。排序后取值相同的元素顺序没有被打乱,称之为稳定算法。排序后取值相同的元素顺序被打乱了,称之为不稳定算法。排序思想冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系的要求。如果不满足就让它俩互换位置。一次冒泡会让至少一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。动画演示优化:每次循环时,若能确定更合适的右边界,则可以减少冒泡轮数。代码实现快速排序
2023-07-27 23:34:33
124
1
原创 线程池ThreadPoolExecutor源码剖析
主要是为了解决线程中断问题,在空闲时可以响应中断,在执行任务时不可被中断。该策略实现了一种调节机制,该策略既不会抛弃任务,也不会抛出异常,而是将任务回退到调用者(调用线程池执行任务的主线程),由于执行任务需要一定时间,因此主线程至少在一段时间内不能提交任务,从而使得线程池有时间来处理完正在执行的任务。首先 Worker 是内部自己实现的锁,是不可重入锁,相当于内部有个 state 属性值,在 Worker 执行任务前会 w.lock 将 state 设置为1,表明自己正在执行任务,也就是处于非空闲状态。
2023-07-24 19:25:57
192
原创 全面理解 HTTPS 协议
摘要算法用于解决 HTTP 传输数据容易被篡改的问题。摘要算法也称为哈希算法,其输入为任意数据,输出为固定长度的字符串(称为摘要)。主要特点如下:不可逆,即无法通过输出反推输入。相同的输入必会产生相同的输出。不同的输入大概率会产生不同的输出。无论输入的数据有多长,输出摘要的长度固定不变。举个例子:如果将数据的比特流每 8 个比特进行分组(不足的补零),然后将所有分组进行按位异或运算,那么生成的结果就可以称为摘要,此算法就是一种简单的摘要算法。
2023-07-13 22:52:03
104
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人