准备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就会蒙了。为此,一个解决办法就是在类中增加版本后,每一次类的属性修改,都应该把版本号升级一下,这样,在读取时,比较存储对象时的版本号与当前类的版本号,如果不一致,则直接报版本号不同的错!