基础面试题Ⅰ
1、float 型 float f=3.4是否正确,编译能否通过
不正确,不能通过编译;精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4。
2、heap(堆) 和 stack(栈) 有什么区别
栈是一种线形集合,其添加和删除元素的操作应在同一段完成,栈按照后进先出的方式进行处理;堆是栈的一个组成元素。
3、在 JAVA 中,如何跳出当前的多重嵌套循环
在最外层循环前加 label 标识,然后用 break:label 方法即可跳出多重循环。
4、当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递
是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
5、String, StringBuffer StringBuilder的区别
String类是不可变的。
StringBuffer是可变的,支持并发操作,线程安全的,适合在多线程中使用。
StringBuild也是可变的,不支持并发操作,线程不安全,在单线程中的性能比StringBuffer好。
6、JVM 加载 class 文件的原理机制
JVM 中类的装载是由 ClassLoader 和它的子类来实现的,Java ClassLoader是一个重要的 Java 运行时系统组件。它负责在运行时查找和装入类文件的类。
7、静态内部类和内部类的区别
静态内部类可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。
8、垃圾回收的优点和原理
由于有个垃圾回收机制,Java 中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。
9、垃圾回收机制
java中标记垃圾的算法主要有两种:引用计数法和可达性分析
引用计数法:是给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加 1;当引用失效,计数器就减 1;任何时候计数器为 0 的对象就是不可能再被使用的,可以当做垃圾收集。
优点:执行效率高,程序执行受影响较小
缺点:无法检测出循环引用的情况,导致内存泄漏
可达性分析:是把所有引用的对象想象成一棵树,从树的根结点 GC Roots 出发,持续遍历找出所有连接的树枝对象,这些对象则被称为“可达”对象,或称“存活”对象。不能到达的则被可回收对象。
四种垃圾回收算法,标记清除算法、复制算法、标记整理算法以及分代回收算法
标记清除算法:标记阶段的任务是标记出所有需要被回收的对象,清除阶段就是回收被标记的对象所占用的空间。
特点:简单方便,容易产生内存碎片
复制算法:可以将内存分为大小相同的两块,每次使用其中的一块。当第一块的内存使用完后,就将还存活的对象复制到另一块去,然后再把使用的空间一次清理掉。这样就使每次的内存回收都是对内存区间的一半进行回收。
特点:简单,不会产生碎片,内存利用率太低,只用了一半
标记整理算法:标记阶段和标记清除一样,但是在完成标记之后,它不是直接清理可回收对象,而是将存活对象都向一端移动,然后清理掉端边界以外的内存。
特点:适合存货对象多,垃圾少的情况,需要整理的过程
分代回收算法:根据对象存活周期的不同将内存划分为几块,一般是新生代和老年代,新生代基本采用复制算法,老年代采用标记整理算法。
10、String s=new String(“xyz”);创建了几个 String Object
两个对象,一个是"xyz",一个是指向"xyz"的引用对象 s。

浙公网安备 33010602011771号