1. 请简单描述下transient和volatile两个关键词的用法
答:
transient在序列化类中修饰属性不会被序列化
volatile保证多线程变量是最新值,确保数据一致同步性
2. 抽象类和接口有什么区别?
答:
a.接口可以多重继承 ,抽象类不可以
b.接口定义方法,不给实现;而抽象类可以实现部分方法
c.接口中基本数据类型的数据成员,都默认为static和final,抽象类则不是
3. 在java中怎么实现多线程方式
答:
a.继承Thread类实现多线程
b.实现Runnable接口方式
c.ExecutorService、Callable、Future
4. 请说一下final,finally和finalize的区别?
答:
final定义常量、方法、类都没法修改、重写、继承
finally块的内容一定会被执行,常喝try一起用
finalize是Object类的一个方法,在垃圾收集器删除对象之前对这个对象调用的
5. 请说一下StringBuffer和StringBuilder的区别?
答:
StringBuffer线程安全的,效率高
StringBuilder线程非安全的,效率低
6. 下面的代码运行时会不会报错
interface Playable{@b@ void play();@b@}@b@interface Bounceable{@b@ void play();@b@}@b@interface Rollable extends Playable,Bounceable{@b@ Ball ball=new Ball("PingPang");@b@}@b@class Ball implements Rollable{@b@ private String name;@b@ public String getName(){@b@ return name;@b@ } @b@ public Ball(String name){@b@ this.name=name;@b@ }@b@ public void play(){@b@ ball=new Ball("Football");@b@ System.out.println(ball.getName());@b@ }@b@}
答:正确,不会报错
7. 请举出java.lang.Object中的常用方法
答:
clone();@b@equals(Object);@b@finalize();@b@hashCode();@b@toString();
8. 如果有两个变量,int a=3,int b=5,在不使用中间变量的情况下,如果交换两个变量的值。
答:
a=a+b;@b@b=a-b;@b@a=a-b;
9.请写出一个两个线程竞争资源导致死锁的例子
答:
public class TestDeadLock implements Runnable{@b@ public int flag = 1;@b@ static Object o1 = new Object(), o2 = new Object();@b@ public static void main(String[] argv){@b@ TestDeadLock td1 = new TestDeadLock();@b@ TestDeadLock td2 = new TestDeadLock();@b@ td1.flag = 1;@b@ td2.flag = 0;@b@ Thread t1 = new Thread(td1);@b@ Thread t2 = new Thread(td2);@b@ t1.start();@b@ t2.start();@b@ }@b@ public void run(){@b@ System.out.println("flag = "+ flag);@b@ if(flag == 1){@b@ synchronized (o1){@b@ try{@b@ Thread.sleep(500);@b@ }catch(Exception e){@b@ e.printStackTrace();@b@ }@b@ synchronized(o2){@b@ System.out.println("1");@b@ }@b@ }@b@ }@b@ if(flag == 0){@b@ synchronized(o2){@b@ try{@b@ Thread.sleep(500);@b@ }catch(Exception e){@b@ e.printStackTrace();@b@ }@b@ synchronized(o1){@b@ System.out.println("0");@b@ }@b@ }@b@ }@b@ }@b@}
10. 请写一个Singleton(单态模式)的类
答:
public class Singleton{@b@ private static Singleton single = new Singleton();@b@ private Singleton(){}@b@ public Singleton getInstance(){@b@ return single;@b@ }@b@}
11. 三个村庄A、B、C和三个城镇a、b、c坐落在如下图所示的环形山内。由于历史原因,只有同名的村与镇之间才有往来。为方便交通,他们准备修铁路。问题是:如何在这个环形山内修三条铁路连通A村与a镇,B村与b镇、C村与c镇。而这些铁路相互不能相交。
答:
12.Albert(阿尔伯特)和Bernard(伯纳德)刚刚和Cheryl(谢丽尔)成为朋友,他们想知道 Cheryl 的生日日期,Cheryl 最终给他们十个可能日期:
5月15日、5月16日、5月19日
6月17日、6月18日
7月14日、7月16日
8月14日、8月15日、8月17日
Cheryl分别告诉Albert她生日的月份和Bernard她生日的日子。
Albert:我不知道Cheryl的生日,但我知道Bernard也不会知道。
Bernard:一开始我不知道Cheryl的生日,现在我知道了。
Albert:那我也知道Cheryl的生日了。
那么, Cheryl的生日是哪天?
答:是7月16日
参考思路
1、在10个日子中,只有18日和19日出现过一次,如果Cheryl生日是18或19日,那知道日子的Bernald就能猜到月份,一定知道Cheryl的生日是几月几日。Albert肯定Bernald不知道Cheryl的生日,因此推断生日不会在18或19日,继而判断不会在出现18或19日的5月和6月。所以她的生日一定是7月或8月。
2、根据Bernald的表述,在7月和8月剩下的5个日子中,只有14日出现过两次。如果Cheryl告诉Bernald她的生日在14日,那Bernald就没有可能凭Albert的一句话,猜到她的生日。所以14日被排除。现在的可能性只剩下7月16日、8月15日和8月17日。
3、在Bernald说话后,Albert也知道了Cheryl的生日,这表明生日月份不可能在8月。因为8月有两个可能的日子,7月却只有一个可能性。