面试题2(Java基础)20到40

面试题2(Java基础)20到40,第1张

面试题2(Java基础)20到40
  1. HashSet 和 TreeSet 有什么区别?

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

时间复杂度o(1), o(n), o(logn), o(nlogn) - 别先生 - 博客园 (cnblogs.com)

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

1、强引用

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

2、软引用(SoftReference)

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

3、弱引用(WeakReference)

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

4、虚引用(PhantomReference)

就是形同虚设,与其他几种引用都不同,虚引用并不会决定对象的生命周期。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。 虚引用主要用来跟踪对象被垃圾回收器回收的活动。

虚引用与软引用和弱引用的一个区别在于:

虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。

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

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

栈堆

(11条消息) 栈,堆,方法区关系图_自动刷新的博客-CSDN博客_栈堆方法区

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

  1. 对象的状态在构造函数之后都不能被修改,任何修改应该通过创建一个新对象来实现.
  2. 所有的对象属性应该都设置为 final
  3. 对象创建要正确,例如:对象的应用不能在构造函数中被泄露出去
  4. 对象要设置为 final,确保不要继承的 Class 修改了 immutability 特性

  1. Java 中 ++ *** 作符是线程安全的吗?

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

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

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

clone 在第一步是和 new 相似的,都是分配内存,调用 clone 方法时,分配的内存和原对象(即调用 clone 方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域,填充完成之后,clone 方法返回,一个新的相同的对象被创建,同样可以把这个新对象的引用发布到外部。

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

使用==比较原生类型如:boolean、int、char 等等,使用 equals()比较对象。

1、==是判断两个变量或实例是不是指向同一个内存空间。equals 是判断两个变量或实例所指向的内存空间的值是不是相同。

2、==是指对内存地址进行比较。equals()是对字符串的内容进行比较。

3、==指引用是否相同,equals()指的是值是否相同。

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

final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 finally 是异常处理语句结构的一部分,表示总是执行。

finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。

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

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

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

1、静态的属性:随着类的加载而加载,该属性不在属于某个对象,属于整个类

2、静态的方法:直接用类名调用,静态方法里不能访问非静态成员变量

3、静态类:不能直接创建对象,不可被继承

  1. Java 创建对象的几种方式?

new 创建新对象;通过反射机制;采用 clone 机制;通过序列化机制

  1. Object 中有哪些公共方法?

Object 是所有类的父类,任何类都默认继承 Object clone 保护方法,实现对象的浅复制,只有实现了 Cloneable 接口才可以调用该方法,否则抛出 CloneNotSupportedException 异常。equals 在 Object 中与==是一样的,子类一般需要重写该方法。hashCode 该方法用于哈希查找,重写了 equals 方法一般都要重写 hashCode 方法。这个方法在一些具有哈希功能的 Collection 中用到。getClass final 方法,获得运行时类型 wait 使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。

33.&和&&的区别?

&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。

  1. 在.java  源文件中可以有多个类吗(内部类除外)?

一个.java 源文件中可以包括多个类(不是内部类),但是单个文件中只能有一个 public类,并且该 public 类必须与文件名相同

  1. 如何正确的退出多层嵌套循环?

1、使用标号和 break;

2、通过在外层循环中添加标识符

  1. 内部类有什么作用?

1、内部类可以很好的实现隐藏,一般的非内部类,是不允许有 private 与 protected权限的,但内部类可以

2、内部类拥有外围类的所有元素的访问权限

3、可是实现多重继承

4、可以避免修改接口而实现同一个类中两种同名方法的调用

  1. 深拷贝和浅拷贝的区别是什么?

浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象.

深拷贝:被复制对象的所有变量都含有与原来的对象相同的值.而那些引用其他对象的变量将指向被复制过的新对象.而不再是原有的那些被引用的对象.换言之.深拷贝把要复制的对象所引用的对象都复制了一遍.

  1. String 是基本数据类型吗?

基本数据类型包括 byte、int、char、long、float、double、boolean 和 short。 java.lang.String 类是 final 类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用 StringBuffer 类

  1. static 的用法?

Static 可以修饰内部类、方法、变量、代码块;Static 修饰的类是静态内部类;Static 修饰的方法是静态方法,表示该方法属于当前类的,而不属于某个对象的,静态方法也不能被重写,可以直接使用类名来调用。在 static 方法中不能使用 this 或者 super 关键字。 Static 修饰变量是静态变量或者叫类变量,静态变量被所有实例所共享,不会依赖于对象。静态变量在内存中只有一份拷贝,在 JVM 加载类的时候,只为静态分配一次内存。

Static 修饰的代码块叫静态代码块,通常用来做程序优化的。静态代码块中的代码在整个类加载的时候只会执行一次。静态代码块可以有多个,如果有多个,按照先后顺序依次执行。

  1. 什么是值传递和引用传递?

对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值,对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5671989.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存