- 博客(9)
- 收藏
- 关注
原创 AOP学习记录
环绕:环绕通知是所有通知类型中可操作范围最大的一种,因为它可以直接拿到目标对象,以及要执行的方法,所以环绕通知可以任意的在目标对象的方法调用前后搞事,甚至可以根据条件判断是否调用目标对象的方法。第二步:配置一个AOP切面,@Aspect 标志切面,@Pointcut 设置切点,以自定义注解为切点,@Around 环绕切点打印方法参数和执行时间。CGLIB 代理是基于继承实现的,可以代理没有实现接口的类,但不能代理 final 类或者方法。JDK 动态代理是基于接口实现的,只能代理实现了接口的类。
2025-07-25 16:36:15
186
原创 HashMap 的扩容机制
4、如果原来的数组 table 和阈值 oldThr 都为零,则说明是通过无参数构造方法创建的 HashMap,此时将默认初始容量 DEFAULT_INITIAL_CAPACITY(16)和默认负载因子 DEFAULT_LOAD_FACTOR(0.75)计算出新数组长度 newCap 和新阈值 newThr。除此之外,扩容也能提高查询效率,因为数组变大,以往需要链表储存的键值对(链表查询有时候要遍历,时间复杂度为O(n)),有了自己的位置。6、创建新数组 newTab,并将其赋值给成员变量 table。
2025-06-07 22:21:43
625
原创 HashMap hash方法解析
这个取模操作的目的是将哈希值映射到桶(Bucket)的索引上,桶是 HashMap 中的一个数组,每个桶中会存储着一个链表(或者红黑树),装载哈希值相同的键值对(没有相同哈希值的话就只存储一个键值对)。例如26的二进制是 11010 ,计算 26% 8,8是2 ^3,所以我们关注26 二进制表示的低3位是010,对应的值是2。26%8的结果就是2。总的来说,HashMap 的 hash 方法就是将 key 对象的 hashCode 值进行处理,得到最终的哈希值,并通过一定的算法映射到实际的存储位置上。
2025-06-06 23:05:14
554
原创 Spring八股
Web方面:@RequestMapping(GetMapping、PostMapping、DeleteMapping、PutMapping):映射URL 请求到具体的方法上。容器方面:@Value:用于将 Spring Boot 中 application.properties 配置的属性值赋值给变量。Spring Context:Spring的上下文容器,BeanFactory功能加强的子接口。复杂的API模板封装:对一下复杂的API(JDBC、远程调用等)提供了模块化的封装方法。
2024-06-22 14:35:20
379
原创 Java并发八股
* 什么是进程?**进程是程序的一次执行过程,程序执行的基本单位。一个程序的运行就是一个进程从创建–运行–消亡的过程。Java中启动mian函数时就是启动了一个JVM进程,main函数所在的线程就是主线程。** 什么是线程?**线程与进程类似,是比进程更小的执行单位。一个进程的执行过程中可以产生多个线程。与进程不同的是,同类的多个线程可以共享进程的** 堆 **和 ** 方法区 **资源。但每个线程有自己的本地方法栈,程序计数器,虚拟机栈。所以系统产生一个线程或者在线程中切换,开销较小。
2024-06-22 14:35:08
612
原创 Redis学习记录:分布式锁
常用分布式锁的情况:例如一个简单的用户操作,一个线程去修改用户的状态,首先从数据库中读取用户状态,然后在内存中修改,修改完成后,在存入数据库。单线程环境下没有问题,但多线程环境下,可能会出现数据紊乱等问题。对于这种问题,使用分布式锁可以限制程序的并发执行。一个线程先占位,当别的线程进入时,发现已经有线程占位,就会放弃,或者稍后再来。
2024-06-11 15:53:44
289
原创 Redis学习记录:Java客户端
Jedis封装的API方法与Redis命令高度重合,直接使用即可。创建Maven项目,pom文件里引入Jedis依赖。Jedis对象本身线程不安全,一般通过连接池获取。利用try-with-resource改进一下。继续改进可以封装成接口,通过调用实现类来操作。Redis默认不支持远程连接,需要手动开启。修改配置文件 redis.conf。
2024-06-04 16:25:09
341
原创 Redis学习记录:常用命令
noSql的数据结构,key-value形式存储数据。常用作缓存,分布式锁·····(Java中操作的对象,序列化后保存在Redis中也是字符串)。但不同的key对应的value则具备不同的数据结构。
2024-06-03 14:14:47
950
原创 二分查找(Java简单实现)
二分查找Java简单实现算法原理:1.取中间值与目标值进行对比如果 目标值大于中间值,说明目标值只能重新在数组后半部分,将范围缩小如果 目标值小于中间值,说明目标值只能出现在数组前半部分,将范围缩小等于中间值就退出返回该数组下标2.重复步骤1直到找目标值,或者左指针超过右指针(说明没有查找到)时间复杂度 O(log n)使用前提条件:有序数组(支持随机存取)public int binarySearch(int[] nums,int target){ int left=0,rig
2022-03-24 23:50:27
401
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅