分享一下以前整理的集合以及aop的理解 等
1、常见集合类的区别和适用场景
- 集合区别
- https://www.cnblogs.com/ArvinSnow/p/11045095.html
- 非线程安全原因
- https://blog.csdn.net/wufaliang003/article/details/80219296?utm_source=blogxgwz3
- https://blog.csdn.net/qq_33210715/article/details/104748230
- ConcurrentHashMap 兼顾了线程安全和性能
- https://www.jianshu.com/p/d0b37b927c48
- LinkHashMap
- https://blog.csdn.net/zip_tts/article/details/85537380
- 为何改为尾部插入
- https://www.jianshu.com/p/72181e25afb9
Map
HashMap : 数组+链表+红黑树 非线程安全 ,无序 ,允许Null
TreeMap : 红黑树 非线程安全 ,有序(大小)
HashTable : 结构同hashmap,线程安全,同步锁,效率低下,无序 , 不允许Null
LinkedHashMap : 数组+链表+红黑树 + 双向链表 实现有序(存储顺序) 非线程安全
ConcurrentHashMap : 线程安全 ,效率高 分段锁 ,无序
Set
HashSet : 创建一个HashMap,存到key上 ,value为object-不存nll是因为putval 和rmove等方法成功会返回对象 无序,速度快
TreeSet :创建一个TreeMap,有序(比较大小),速度慢
根据某个属性排序,实现Comparator接口
- https://blog.csdn.net/time_shuo/article/details/52195645
//创建时
Set<TestScenario> scenarios = new TreeSet<>(new test().new Mycompare());
//流的方式分组 —— 》 Map<String, List<TestScenario>>
scenarios.stream().collect(Collectors.groupingBy(TestScenario::getTestTask));
LinkedHashSet:创建一个LinkedHashMap,有序(按插入顺序),速度慢
Set mySet=ConcurrentHashMap.newKeySet(); — 创建一个线程安全的SET
LIST
ArrayList : 线程不安全,数组,查询快,插入慢,动态对象数组实现的,默认构造方法创建一个空数组
Vector : 线程安全,原理也是采用一个动态对象数组实现的,只不过它的默认构造方法创建一个大小为10的对象数组,,适合在多线程访问时使用,效率较低
LinkList : 双向链表 ,插入快,查询慢
- 数组的连续内存, 会有一部分或者全部数据一起进入到CPU缓存, 而链表还需要在去内存中根据上下游标查找, CPU缓存比内存块太多
- https://www.cnblogs.com/guanbin-529/p/11809596.html
数组排序
planItems.sort((x, y) -> Integer.compare(x.getOrd(), y.getOrd()));
支持流
Aop
动态代理
- jdk代理,java 必须实现接口
- CGLIB 代理 实现类
- https://www.cnblogs.com/dengchengchao/p/11823687.html
<aop:aspectj-autoproxy proxy-target-class="true"/> 为cglib
个人调试理解:jdk代理不支持接口,代理controller等无实现接口时会走cglib代理。
代理的类有实现接口时无法直接注入实体类进行代理。cglib可以。
- 方法中嵌套调用aop切不到
- https://blog.csdn.net/weixin_33816300/article/details/91716114
- 个人理解:实测单独再第二个方法设置aop也无法切到。应该时this调用没有从容器中取,调用的方法未经过AOP增强,所以无法切到
- https://www.iteye.com/blog/fyting-109236
- 按我的理解其实就是没有去扫描方法中的方法的注解
解除外键约束
SET FOREIGN_KEY_CHECKS=0;
delete from csrt_assessment;
UPDATE csrt_test_task set ASSESSMENT_ID = null;
SET FOREIGN_KEY_CHECKS=1;
链接: 笔记.