首页

Java开发面试试题20151119(服务端开发)

标签:服务端,面试,笔试,试题,题库,java,开发,面试题     发布时间:2015-11-21   

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镇。而这些铁路相互不能相交。

Java开发面试试题20151119(服务端开发)

答:

Java开发面试试题20151119(服务端开发)

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月却只有一个可能性。


试题下载:Java开发面试试题20151119.docx