I want to fly higher
programming Explorer
posts - 114,comments - 263,trackbacks - 0
        最近面试了很多公司,一些笔试和面试的问题让我深有感触。虽然说自己对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

只有注册用户登录后才能发表评论。


网站导航: