- 博客(15)
- 收藏
- 关注
原创 Mybatis一对一,一对多关联查询
元素用于处理一对一的关联关系。当查询结果中包含一个对象与另一个对象之间的关联,且这种关联是一对一时,可以使用来映射这种关系。元素内部可以定义多个或其他元素,以映射关联对象的属性。元素用于处理一对多的关联关系。当查询结果中包含一个对象与多个对象之间的关联,且这种关联是一对多时,可以使用来映射这种关系。元素内部同样可以定义多个或其他元素,以映射集合中每个元素的属性。
2024-07-11 16:40:22
471
原创 @component注解的分类
一样,都是将类标记为Spring容器中的组件,使其能够被Spring容器管理和自动扫描。但是,它们各自有不同的用途和标记的层次,以便于在大型项目中更好地组织和管理代码。是一个通用的注解,可以用于任何类,但在实际开发中,推荐根据类的职责和层次,选择适当的衍生注解进行标记,以提高代码的可读性和可维护性。有三个主要的衍生注解,它们分别用于标记不同类型的组件,以更好地区分组件的用途和层次。@Component作用类似于xml文件里面的<Bean>:交给IOC去创建相关的实体类对象;此外,需要注意的是,虽然。
2024-07-09 16:40:45
330
原创 Monitor结构解读之EntryQ和WaitSet的区别
总之,EntryQ(或_EntryList)和WaitSet(_或WaitSet)在Java的monitor机制中分别管理着等待获取锁的线程和等待条件变化的线程。它们通过不同的机制来确保线程同步的正确性和高效性。
2024-07-08 17:50:50
433
原创 java集合中sublist()的坑
首先sublist(int start,int end)是前闭后开,之前用list.sublist()时候总觉得是截取一部分形成一个新的集合,有次在工作中发现已经截取过的新的list在其下方代码执行之后报错:java.util.ConcurrentModificationException。或者就new list(原表的sublist视图) 这样收到的就是独立存在的片段了;方法创建了一个原列表的视图,而不是一个全新的、独立的列表。返回的是一个视图,而不是一个独立的列表,因此在某些情况下需要小心使用。
2024-04-27 09:41:18
595
原创 HashMap的若干细节
选择红黑树的原因:查询效率和hashmap相同,而且红黑树的失衡之后的复衡的代价比较低,不想平衡二叉树需要多次旋转(主要原因还是平衡二叉树追求极致的平衡)1.为什么hashMap使用红黑树而不是其他结构?在回答这个问题之前,我们先了解一下有关二叉树的基本内容。①二叉排序树(又称二叉查找树):1)若左子树不为空,则左子树上所有结点的值均小于根结点的值。2)若右子树不为空,则右子树上所有结点的值均大于根节点的值。3)左右子树也为二叉排序树。
2024-04-03 11:16:09
1685
1
原创 Comparable和Comparator比较器
对于自定义类的类型进行比较就需要制定比较规则,就出现了这两种比较方式,区别就是:Comparable比较器需要写在类内部,即需要排序的类需要继承此接口,然后在类内部重写compareTo方法,在主方法中调用Arrays.sort(需要排序的类名)或Collection.Sort(),在compareTo方法中定义排序规则(eg:根据特定的属性进行排序,由返回值确定)
2024-04-01 22:17:12
266
原创 重写equals方法时需重写hashcode的逻辑
方法时,即使两个对象在逻辑上是相等的,它们在散列集合中的行为也可能是不一致的。因此,为了避免这种问题,当重写。该方法具体的实现细节就不探究了(依赖于JVM),总之是基于对象的内存地址来区分对象的hashcode。等)的键,就可能出现不一致的行为。因为此时person类默认的取hashcode的方法是。来确定对象在集合中的存储位置(即“桶”),而。会认为它们是两个不同的键,因此无法找到与。方法的实现,它们是相等的。方法时,如果对象被用作散列集合(如。方法,以确保它们之间的一致性。的哈希码很可能是不同的。
2024-03-31 23:36:43
399
1
原创 computeIfAbsent?好使!
map.computeIfAbsent(fa,key->new ArrayList()),无论map里面有没有fa这个key值的键值对,在执行该语句之后fa就一定有一个value值被拿出来,要么是新建的,要么是此前就有的集合。computeIfAbsent会先判断fa这个key值是否存在map里面,如果不存在就new ArrayList(),如果存在就把key对应的ArrayList类型的集合返回出来。这个方法返回与指定键关联的值,无论它是通过映射函数计算得到的,还是之前就已经存在于映射中的。
2024-03-31 00:06:24
295
1
原创 螺旋数字plus版本
关键:处理四个角点的时候,因为是两边交汇处,如果上个边已经处理了,那下个边就要跳过该坑位;大循环内部嵌套四个小循环分别处理:上边——>右边——>下边——>左边(顺时针缠绕)思路:把所有的数字还有*当成一个彩带,绕圈缠绕在一个框内。外层大循环条件是彩带长度。
2024-03-30 11:39:23
306
原创 数据库事务解读
- 假设这里发生了错误,我们回滚事务ROLLBACK;先开启事务,再执行相关的行为,如果执行顺利直接commit如果执行过程报错则执行ROLLBACK回滚操作。
2024-03-28 10:20:03
845
原创 SQL语句的递归查询
一般来说递归终止条件都是隐式的,当本次递归的结果为空时候,递归查询就终止了,mqsql也有自己的递归层级限制,一般是100层,当递归到相应的层级就会强制结束递归,也可以自定义递归条件,在结果集中添加深度字段(depth),第一次非递归查询的depth=1,此后每次递归的depth=上次递归结果集的depth+1,然后再递归结束的条件限制depth的大小;作为查询的匹配条件,而不是此前所有递归的结果作为查询的匹配条件,当上次递归查询的结果为空,则递归查询结束(若没有显式的写出递归结束条件的话)
2024-03-23 08:55:25
873
1
原创 最大子数组和的贪心算法场景
贪心算法还有一个特点就是:衡量局部最优的标准只有一个,而不是多个条件,这也是为什么不需要瞻前顾后的原因,就像我面前有三张钞票:100、50、20的,只拿一次,怎样面值最大,局部最优就是只拿面值最大的,而不需要考虑拿的钞票面积是否过大,颜色对自己是否有伤害(脱离现实的胡扯,但我想表达的就是局部最优解的衡量标准只有一个)而动态规划就需要瞻前顾后,判断选择了这一步,对整体的影响是否有益。算法难易的标准等同于找到熟悉的处理场景的难易;,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
2024-03-22 12:47:47
393
1
原创 傻瓜式回溯算法,一套代码走天下(子集分割篇)
总结:用二进制的所有情况去映射答案是一种很死板的算法,可以说是傻瓜式的解决问题的方式,如果对回溯算法掌握的不行的情况下,或者不考虑效率的情况下,就可以照搬文章写的食用性不是特别强,这种思想的拓展性应该很强,但由于本人时间紧张,暂时没有扩展,后期有时间会重写一篇,如果只想速成的同学,建议多思考阅读几遍,应该也不算难理解。当数组为[1,0,1]就可以将字符串映射为{"a","c"},大概就是这个意思,二进制每一个输出的数组结果都可以映射为对字符串的处理方式;无非是把分割后的元素进行组合,就拿力扣的。
2024-03-19 11:35:33
618
原创 HashMap.containsValue()解析
学习Map的时候毫无疑问containsKey()的原理一定是用key的hashcode定位,所以时间复杂度为O(1),但对于containsValue()并没有一个清晰的认识,仔细读了一下它的源码,觉得对hashmap的底层认识很有帮助。该方法遍历 HashMap 中的所有条目,检查是否有任何一个条目的值等于给定的值。中的条目数,因为需要遍历所有的条目来查找给定的值。在实际应用中,由于哈希表的分散性质,通常不需要遍历所有的条目就能找到值,所以平均时间复杂度通常要低于 O(n)。的实现和树化的阈值)。
2024-02-24 15:36:46
734
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人