资料内容:
1.JDK动态代理和CGLIB动态代理的区别
JDK动态代理只能对实现了接⼝的类⽣成代理,⽽不能针对类。
CGLIB是针对类实现代理,主要是对指定的类⽣成⼀个⼦类,覆盖其中的⽅法。因为是继承, 所以该类
或⽅法最好不要声明成final。
2.静态代理和动态代理的区别
静态代理中代理类在编译期就已经确定,⽽动态代理则是JVM运⾏时动态⽣成,静态代理的效 率相对动态
代理来说相对⾼⼀些,但是静态代理代码冗余⼤,⼀单需要修改接⼝,代理类和委 托类都需要修改。
3.ArrayList和LinkedList有什么区别?
1. ArrayList和LinkedList的差别主要来⾃于Array和LinkedList数据结构的不同。 ArrayList是基于数
组实现的,LinkedList是基于双链表实现的。另外LinkedList类不 仅是List接⼝的实现类,可以根
据索引来随机访问集合中的元素,除此之外, LinkedList还实现了Deque接⼝,Deque接⼝是
Queue接⼝的⼦接⼝,它代表⼀个双向 队列,因此LinkedList可以作为双向队列 ,栈(可以参⻅
Deque提供的接⼝⽅法)和 List集合使⽤,功能强⼤。
2. 因为Array是基于索引(index)的数据结构,它使⽤索引在数组中搜索和读取数据是很快 的,可以直接
返回数组中index位置的元素,因此在随机访问集合元素上有较好的性能。 Array获取数据的时间
复杂度是O(1),但是要插⼊、删除数据却是开销很⼤的,因为这需 要移动数组中插⼊位置之后的的所
有元素。
3. 相对于ArrayList,LinkedList的随机访问集合元素时性能较差,因为需要在双向列表中 找到要
index的位置,再返回;但在插⼊,删除操作是更快的。因为LinkedList不像 ArrayList⼀样,不需
要改变数组的⼤⼩,也不需要在数组装满的时候要将所有的数据重 新装⼊⼀个新的数组,这是
ArrayList最坏的⼀种情况,时间复杂度是O(n),⽽ LinkedList中插⼊或删除的时间复杂度仅为
O(1)。ArrayList在插⼊数据时还需要更新索 引(除了插⼊数组的尾部)。
4. LinkedList需要更多的内存,因为ArrayList的每个索引的位置是实际的数据,⽽ LinkedList中的每
个节点中存储的是实际的数据和前后节点的位置。
4.重写和重载的区别
重写是⼦类对⽗类的允许访问的⽅法的实现过程进⾏重新编写, 返回值和形参都不能改变。即 外壳不变,
核⼼重写!
重写的好处在于⼦类可以根据需要,定义特定于⾃⼰的⾏为。 也就是说⼦类能够根据需要实现 ⽗类的
⽅法。
重写⽅法不能抛出新的检查异常或者⽐被重写⽅法申明更加宽泛的异常。
重载(overloading) 是在⼀个类⾥⾯,⽅法名字相同,⽽参数不同。返回类型可以相同也可以 不同。
每个重载的⽅法(或者构造函数)都必须有⼀个独⼀⽆⼆的参数类型列表。