来一波面试题
来源:互联网 发布:类似于淘宝的购物软件 编辑:程序博客网 时间: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.匿名内部类是否可以继承其他类、是否可以实现接口
可以继承其他类、可以实现其它接口
事实上,我们是由匿名类时是必须要继承一个类或者实现一个接口的。
6.什么时候使用断言
当确定程序某个地方一定为真时使用断言来验证,如果不为真,则处理器会发出一个错误信息并终止程序的运行。
对“一定不可能发生”的事情使用断言。
8.简述 synchronized 和 java.util.concurrent.locks.Lock 的异同
相同点:Lock 可以完成 synchronized 的所有功能
不同点:Lock 比 synchronized 有更好的性能, synchronized 可以自动释放锁,Lock需要手动释放,并且必须
在 finally 从句中释放。
9.并行和并发
并行(共同运行):在同一时间间隔内执行,但任意时刻点只有一个程序运行。
并发(共同发生):在同一个时刻共同运行。
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.并行和并发
并行(共同运行):在同一时间间隔内执行,但任意时刻点只有一个程序运行。
并发(共同发生):在同一个时刻共同运行。
阅读全文
0 0
- 来一波面试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 试题
- 微软试题
- 面试题....
- 几道面试题
- 几道面试题
- 面试题
- Netty框架服务端主动向客户端通信
- 简单的弹窗应用(二)--AlertDialog
- 数据结构 — 选择排序
- 第十二周项目一Dijkstra算法的验证
- 【20171120】C语言每日一练
- 来一波面试题
- DSS 代码分析【TimeoutTask】
- MyEclipse8.5汉化方法
- 1135. Is It A Red-Black Tree (30) 红黑树
- xutils3:ViewUtils.inject,没有inject方法或者没有ViewUtils类
- 如何成为一名推荐系统工程师
- 计算几何——HDUOJ 1086
- ES基本概念和常用REST查询
- postgresql 语法