JAVA面试题系列4

21. HashSet 和 TreeSet 有什么区别?

HashSet 是由一个 hash 表来实现的,因此,它的元素是无序的。add(),remove(),contains() 方法的时间复杂度是 O(1)。TreeSet 是由一个树形的结构来实现的,它里面的元素是有序的。 因此,add(),remove(),contains()方法的时间复杂度是 O(logn)。

22. 强引用和软引用和弱引用以及虚引用?

1、强引用 最普遍的一种引用方式,如 String s = “abc”,变量 s 就是字符串“abc”的强引用,只要 强引用存在,则垃圾回收器就不会回收这个对象。

2、软引用(SoftReference) 用于描述还有用但非必须的对象,如果内存足够,不回收,如果内存不足,则回收。一般用 于实现内存敏感的高速缓存,软引用可以和引用队列 ReferenceQueue 联合使用,如果软引 用的对象被垃圾回收,JVM 就会把这个软引用加入到与之关联的引用队列中。

3、弱引用(WeakReference) 弱引用和软引用大致相同,弱引用与软引用的区别在于:只具有弱引用的对象拥有更短暂的 生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用 的对象,不管当前内存空间足够与否,都会回收它的内存。

4、虚引用(PhantomReference) 就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象 仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。 虚 引用主要用来跟踪对象被垃圾回收器回收的活动。 虚引用与软引用和弱引用的一个区别在于: 虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时, 如果发现它还有虚引,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队 列中。

23. 数组在内存中如何分配?

当一个对象使用 new 关键字创建的时候,会在堆上分配内存空间,然后才返回到对象的引用。 这对数组来说也是一样的,因为数组也是一个对象,简单的值类型的数组,每个数组成员是 一个引用(指针)引用到栈上的空间。

24. Java 中怎么创建一个不可变对象?

  1. 对象的状态在构造函数之后都不能被修改,任何修改应该通过创建一个新对象来实现.

  2. 所有的对象属性应该都设置为 final

  3. 对象创建要正确,例如:对象的应用不能在构造函数中被泄露出去

  4. 对象要设置为 final,确保不要继承的 Class 修改immutability 特性

25. Java 中 ++ 操作符是线程安全的吗?

不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,这个过 程可能会出现多个线程交差。

26. new 一个对象的过程和 clone 一个对象的过程?

new 操作符的本意是分配内存。程序执行到 new 操作符时,首先去看 new 操作符后面的类 型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数, 填充对象的各个域,这一步叫做对象的初始化,构造方法返回后,一个对象创建完毕,可以 把他的引用(地址)发布到外部,在外部就可以使用这个引用操纵这个对象。 clone 在第一步是和 new 相似的,都是分配内存,调用 clone 方法时,分配的内存和原对 象(即调用 clone 方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的 域,填充完成之后,clone 方法返回,一个新的相同的对象被创建,同样可以把这个新对象 的引用发布到外部。

27. Java 中==和 equals()的区别?

使用==比较原生类型如:boolean、int、char 等等,使用 equals()比较对象。
1、==是判断两个变量或实例是不是指向同一个内存空间。equals 是判断两个变量或实例所 指向的内存空间的值是不是相同。
2、==是指对内存地址进行比较。equals()是对字符串的内容进行比较。
3、==指引用是否相同,equals()指的是值是否相同。

28. final、finalize 和 finally 的不同之处?

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally 是异常处理语句结构的一部分,表示总是执行。 finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法, 可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

29.Java 的多态表现在哪里?

多态要有动态绑定,否则就不是多态,方法重载也不是多态(因为方法重载是编译期决定好 的,没有后期也就是运行期的动态绑定)当满足这三个条件:1、有继承 2、有重写 3、要有 父类引用指向子类对象。

30.静态类型有什么特点?

1、静态的属性:随着类的加载而加载,该属性不在属于某个对象,属于整个类
2、静态的方法:直接用类名调用,静态方法里不能访问非静态成员变量
3、静态类:不能直接创建对象,不可被继承

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值