准备Java面试一个月,倒计时之Java基础01

1.线程如何同步和通讯?:

同学回答说synchronized方法或代码块!面试官似乎不太满意!

 

 

  只有多个synchronized代码块使用的是同一个监视器对象,这些synchronized代码块之间才具有线程互斥的效果,假如a代码块用obj1作为监视器对象,假如b代码块用obj2作为监视器对象,那么,两个并发的线程可以同时分别进入这两个代码块中。 …这里还可以分析一下同步的原理。

 

  对于同步方法的分析,所用的同步监视器对象是this,

 

  接着对于静态同步方法的分析,所用的同步监视器对象是该类的Class对象,接着对如何实现代码块与方法的同步进行分析。

 

2.分层设计的好处? 

  把各个功能按调用流程进行了模块化,模块化带来的好处就是可以随意组合,官方一些的解释:

  1.实现了软件之间的解耦  2.便于进行分工  3.便于维护  4.提高软件组件的重用

  5.便于替换某种产品,比如持久层用的是hibernate,需要更换产品用toplink,就不用该其他业务代码,直接把配置一改。

  6.便于产品功能的扩展。  7.便于适用用户需求的不断变化

3.序列化接口的id有什么用?

  对象经常要通过IO进行传送,让你写程序传递对象,你会怎么做?把对象的状态数据用某种格式写入到硬盘,Person->"zxx,male,28,30000"->Person,既然大家都要这么干,并且没有个统一的干法,于是,sun公司就提出一种统一的解决方案,它会把对象变成某个格式进行输入和输出,这种格式对程序员来说是透明(transparent)的,但是,我们的某个类要想能被sun的这种方案处理,必须实现Serializable接口。

 

   ObjectOutputStream.writeObject(obj);

 

   Object obj = ObjectInputStream.readObject();

 

   假设两年前我保存了某个类的一个对象,这两年来,我修改该类,删除了某个属性和增加了另外一个属性,两年后,我又去读取那个保存的对象,或有什么结果?未知!sun的jdk就会蒙了。为此,一个解决办法就是在类中增加版本后,每一次类的属性修改,都应该把版本号升级一下,这样,在读取时,比较存储对象时的版本号与当前类的版本号,如果不一致,则直接报版本号不同的错!

 

posted @ 2013-06-24 21:53  子愚昧落后  阅读(364)  评论(0)    收藏  举报