最近面试了很多公司,一些笔试和面试的问题让我深有感触。虽然说自己对Java已经很熟悉了,不过当面对一些细节的时候,自己确实有点无从下手。下面简单的列举几个例子: 1.Java中堆和栈的区别
其实,这个问题并不是很难。不过也许很多程序员往往忽略了这一点,尤其是在垃圾回收的时候。大家可能习惯了Java的GC机制,其实如果能仔细理解GC,我们完全可以提高执行程序的效率。那么堆和栈就是最基本的东西。 堆和栈都是Java用来在内存存放数据的地方。 简单的来说,用new创建的对象,即运行时动态的分配内存,存在堆中。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,Java的垃圾收集器会自动收走这些不再使用的数据。 为了提高程序的效率,当我们不需要使用这个对象时,只要简单停止对它的引用即可,即把这个对象赋值为NULL,而不是等垃圾回收站慢慢的回收。 而Java的一些基本数据类型和引用一般存在栈中。栈的存取速度很快而且栈中的数据可以共享。 2.Java中sleep和wait的区别
如果你没有用过线程或很少用到线程,这个问题还真的不好回答,而且很容易混淆。
首先,二者都是使线程暂时停止执行的方法。但是二者却又很大的不同。
最基础的一点就是sleep是Thread中的方法,而wait是Object中的方法。
sleep是使当前线程暂时睡眠,可以放在任何位置。而wait是使当前线程暂时放弃对象的使用权进行等待,必须放在同步方法或同步块里。sleep使用的时候,线程并不会放弃对象的使用权,即不会释放对象锁,所以在同步方法或同步块中使用sleep,一个线程访问时,其他的线程也是无法访问的。而wait是会释放对象锁的,就是当前线程放弃对象的使用权,让其他的线程可以访问。线程执行wait方法时,需要另一个线程调用 notify进行唤醒。而sleep只是暂时休眠一定时间,时间到了之后,自动恢复运行,不需另外的线程唤醒。
简单的来说,sleep只是暂时休眠而已。而wait则通常用与线程同步,经常与notify和notifyAll使用。
3.你听过的Java的设计模式
如果不是写过多年的代码,这个问题可能真的不好回答。也许很多初学者会说Java Web开发中的MVC算不算?其实,我以前听过的设计模式也不是很多。最多的可能就是工厂(Factory)模式,单态(Singleton)模式等。关于设计模式,我向大家推荐《Java Design Patterns》,一定会让你获益匪浅。
另外 http://www.jdon.com/designpatterns/
http://www4.it168.com/jtzt/shenlan/tech/javadesignpatern/index.html
http://www.ibm.com/developerworks/cn/java/design/
http://www.cn-java.com/www1/?action-category-catid-101
上述四个网站都是关于Java设计模式的版块,可以学习到很多东西。
posted on 2010-04-16 10:08
landon 阅读(1889)
评论(0) 编辑 收藏 所属分类:
Program