1.private修饰的方法可以通过反射访问,那么private的意义是什么
答:(1)java的private修饰符并不是为了绝对安全性设计的,更多的是对用户常规使用java的一种约束;
(2)从外部对对象进行常规调用时,能够看到清晰的类结构。
2.Java类初始化顺序
答:基类静态代码块->基类静态成员字段(并列优先级,按照代码中出现的先后顺序执行,且只有第一次加载时执行)->派生类静态代码块->派生类静态成员字段(并列优先级,按照代码中出现的先后顺序执行,且只有第一次加载时执行)->基类普通代码块->基类普通成员字段(并列优点级,按代码中出现先后顺序执行)->基类构造方法->派生类普通代码块->派生类普通成员字段(并列优点级,按代码中出现先后顺序执行)->派生类构造方法。
3.对方法区和永久区的理解以及它们之间的关系
答:方法区是jvm规范里要求的,永久区是Hotspot虚拟机对方法区的具体实现,前者是规范,后者是实现方式。
4.一个java文件有3个类,编译后有几个class文件
答:文件中有几个类编译后就有几个class文件。
5.ReadWriteLock读写之间互斥吗
答:ReadWriteRock读写锁,使用场景可分为读/读、读/写、写/写,除了读和读之间是共享的,其它都是互斥的。
6.写一个你认为最好的单例模式
答:双检锁的:
public class Singleton {
//定义一个私有的实例
private volatile static Singleton instance;
//构造方法私有化
private Singleton() {
}
//定义一个公共的方法获取私有的实例
public static Singleton getInstance(){
if(null==instance){
synchronized (Singleton.class){
if(null==instance){
instance = new Singleton();
}
}
}
return instance;
}
}
7.写一个生产者消费者模式
答:生产者消费者模式,synchronized锁住一个LinkedList,一个生产者,只要队列不满,生产后往里放,一个消费者只要队列不空,向外取,两者通过wait()和notify()进行协调。
8.写一个死锁
答:定义两个ArrayList,将他们都加上锁A,B,线程1,2,1拿住了锁A,请求锁B,2拿住了锁B请求锁A,在等待对方释放锁的过程中谁也不让出已获得的锁。
12.String a = "ab"; String b = "a" + "b"; a == b 是否相等,为什么。
答:相等。
13.int a = 1; 是原子性操作吗
答:int a = 1; 是原子性操作
14.可以用for循环直接删除ArrayList的特定元素吗?可能会出现什么问题?怎样解决
答:for循环直接删除ArrayList中的特定元素是错的,不同的for循环会发生不同的错误,泛型for会抛出ConcurrentModificationException,普通的for想要删除集合中重复且连续的元素,只能删除第一个。
解决方案:用 Iterator。
15.新的任务提交到线程池,线程池是怎样处理
答:第一步:线程池判断核心线程池里的线程是否都在执行任务。如果不是,则创建一个新的工作线程来执行任务。如果核心线程池里的线程都在执行任务,则执行第二步。
第二步 :线程池判断工作队列是否已经满。如果工作队列没有满,则将新提交的任务存储在这个工作队列里进行等待。如果工作队列满了,则执行第三步。
第三步 :线程池判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务。
原文:https://www.cnblogs.com/liqinzhen/p/12897661.html