赞
踩
这部分面试题多用于面试的热身运动,对很多找实习和准备毕业找工作的小伙伴至关重要。
可以使用transient 关键字修饰不想进行序列化的变量。
transient 关键字的作用是:阻止实例中那些用此关键字修饰的变量序列化;当对象被反序列化时,被transient 修饰的变量值不会被持久化和恢复。
注意transient 只能修饰变量,不能修饰类和方法。
强引用
强引用是平常中使用最多的引用,强引用在程序内存不足(OOM)的时候也不会被回收
软引用
软引用在程序内存不足时,会被回收,
// 注意:wrf 这个引用也是强引用,它是指向SoftReference 这个对象的,
// 这里的软引用指的是指向new String("str")的引用,也就是SoftReference 类中T
SoftReference<String> wrf = new SoftReference<String>(new String("str"));
创建缓存的时候,创建的对象放进缓存中,当内存不足时,JVM 就会回收早先创建的对象。
WeakReference<String> wrf = new WeakReference<String>(str);
PhantomReference<String> prf = new PhantomReference<String>(new String("str"),new ReferenceQueue<>());
浅拷贝(shallowCopy)只是增加了一个指针指向已存在的内存地址,
深拷贝(deepCopy)是增加了一个指针并且申请了一个新的内存,使这个增加的指针指向这个
新的内存,
使用深拷贝的情况下,释放内存的时候不会因为出现浅拷贝时释放同一个内存的错误。
最好是结合克隆以及原型模式联系在一起哈,记得复习的时候,把这几个联系起来的。
这个之前面腾讯被问过。
List
接口提供了一个名为 subList(int fromIndex, int toIndex)
的方法,用于获取原始列表中从 fromIndex
(包括)到 toIndex
(不包括)之间的子列表。这个子列表是原始列表的一个视图,对子列表的修改会影响原始列表,反之亦然。
这个方法的用法如下:
import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { ArrayList<Integer> originalList = new ArrayList<>(); for (int i = 0; i < 10; i++) { originalList.add(i); } // 获取子列表(包括第3个元素,不包括第7个元素) List<Integer> subList = originalList.subList(2, 7); System.out.println("Original List: " + originalList); System.out.println("Sub List: " + subList); // 修改子列表 subList.set(0, 100); System.out.println("Original List after modifying Sub List: " + originalList); System.out.println("Sub List after modifying: " + subList); // 修改原始列表 originalList.set(3, 200); System.out.println("Original List after modifying: " + originalList); System.out.println("Sub List after modifying Original List: " + subList); } }
我们创建了一个包含0到9的整数的 ArrayList
,然后使用 subList()
方法获取了一个子列表,从索引2(包括)到索引7(不包括)。修改子列表或原始列表都会相互影响。
金三银四面试题(十三):Java基础问题(4)2024-04-03
金三银四面试题(十二):Java基础问题(3)2024-04-02
金三银四面试题(十一):Java基础问题(2)2024-04-01
金三银四面试题(十):Java基础问题(1)2024-03-31
金三银四面试题(九):JVM常见面试题(3)2024-03-30
金三银四面试题(八):JVM常见面试题(2)2024-03-30
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。