来一波面试题

来源:互联网 发布:类似于淘宝的购物软件 编辑:程序博客网 时间:2024/06/15 20:24
1.解释内存中 stack、heap、static area的用法
stack:驻留于常规的RAM,是仅次于寄存器的最快的地方,常用于保存局部变量、句柄对象。
heap:一种常规用途的内存池(RAM区域),保存Java对象。
static area:static指的是位于固定的位置,(仍在RAM区域),使用static关键字指出一个对象中特定的元素是静态的。

2.什么是Java的优先级队列(Priority Queue)
Priority Queue 是一个基于优先堆的无界队列,优先队列不允许空值。
因为有限队列需要使用Comparable和Comparator接口对对象进行排序,所以优先队列不允许 non-comparable 的对象。
因为优先队列是一个最小堆,所以优先队列的头是是基于Comparable的最小元素。当获取优先队列时,获取队列的头对象。
Priority Queue 是非线程安全的,PriorityBlockingQueue 是线程安全的。

3.描述JVM加载class文件的原理机制
Bootstarp Classloader --> Extension Classloader --> App Classloader
当需要加载一个类时,App Classloader 先找到相应的class文件,询问 Extension Classloader 是否可以装载,
Extension Classloader 询问 Bootstarp Classloader 是否可以装载,当两者都无法装载时,App Classloader
会装载这个 class 文件,在装载时文件验证器会对 class 文件进行详细的检查

4.Java中会存在内存泄漏吗?
肯定会!
ThreadLock变量是维护在Thread内部的,只要线程不退出,对象的引用会一直存在。
当我们使用ThreadLock并且使用线程池时,因为当前的线程不一定销毁,所以可能 ThreadLock 中引用了一个很大的对象,
这个对象已经没有用处,但是因为存在对该对象的引用,所以该对象不能被GC回收,引起内存泄漏。

虽然在Java中失去引用的对象会自动的被GC,这使得我们不需要去考虑一个对象在失去引用时如何回收的情况。但相对来说,
我们更需要注意的是那些隐藏的引用,这类的引用更不容易被发现,但是一旦存在这类引用那肯定就会引起内存泄漏。

5.匿名内部类是否可以继承其他类、是否可以实现接口
可以继承其他类、可以实现其它接口
事实上,我们是由匿名类时是必须要继承一个类或者实现一个接口的。

例如:一个方法的参数是一个抽象方法,那么在给这个方法传递参数时,可以直接使用匿名抽象类

public abstract class Bird {  private String name;    public String getName() {  return name;  }    public void setName(String name) {  this.name = name;  }    public abstract int fly();  }public class Test{public void test(Bird bird){  System.out.println(bird.getName() + "能够飞 " + bird.fly() + "米");  }    public static void main(String[] args) {  Test test = new Test(); //以下是匿名内部类test.test(new Bird() {  private String name = "";//匿名内部类的属性//匿名内部类不能由构造函数,所以使用代码块初始化{name = "大雁";}//以下是方法的重写public int fly() {  return 10000;  } public String getName(){return name;}});  } }


6.什么时候使用断言
当确定程序某个地方一定为真时使用断言来验证,如果不为真,则处理器会发出一个错误信息并终止程序的运行。
对“一定不可能发生”的事情使用断言。

8.简述 synchronized 和 java.util.concurrent.locks.Lock 的异同
相同点:Lock 可以完成 synchronized 的所有功能
不同点:Lock 比 synchronized 有更好的性能, synchronized 可以自动释放锁,Lock需要手动释放,并且必须
在 finally 从句中释放。

9.并行和并发
并行(共同运行):在同一时间间隔内执行,但任意时刻点只有一个程序运行。
并发(共同发生):在同一个时刻共同运行。












原创粉丝点击