<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Play Java</title>
    <description></description>
    <link>http://yujianqiu.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>问题：列举Spring框架中使用到或者可以联想到的设计模式</title>
        <author>yujianqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yujianqiu.javaeye.com">yujianqiu</a>&nbsp;
          链接：<a href="http://yujianqiu.javaeye.com/blog/210342" style="color:red;">http://yujianqiu.javaeye.com/blog/210342</a>&nbsp;
          发表时间: 2008年07月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          问题：列举Spring框架中使用到或者可以联想到的设计模式<br /><br />答案：<br />Factory Method<br />Singleton<br />Prototype<br />Decorator<br />Proxy<br />Template Method<br />Strategy<br />……<br /><br />点评：<br />这个问题我自己不能确信回答很完全，言多语失。我期望从这个题目里了解面试者对Spring和GoF设计模式的了解程度。
          <br/>
          <span style="color:red;">
            <a href="http://yujianqiu.javaeye.com/blog/210342#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jul 2008 23:32:42 +0800</pubDate>
        <link>http://yujianqiu.javaeye.com/blog/210342</link>
        <guid>http://yujianqiu.javaeye.com/blog/210342</guid>
      </item>
      <item>
        <title>问题：请写一段代码说明如何实现Singleton模式?</title>
        <author>yujianqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yujianqiu.javaeye.com">yujianqiu</a>&nbsp;
          链接：<a href="http://yujianqiu.javaeye.com/blog/210331" style="color:red;">http://yujianqiu.javaeye.com/blog/210331</a>&nbsp;
          发表时间: 2008年07月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          问题：请写一段代码说明如何实现Singleton模式?<br /><br />答案：<br /><pre name="code" class="java">
public class Singleton {
    private static Singleton instance;

    public static Singleton getInstance() {
        if (null == instance) {
           instance = new Singleton();
        }
        return instance;
    }

    private Singleton() {
    }
}
</pre><br /><br />点评：<br />在众模式中，Singleton模式是知名度最高的之一（另外一个是“工厂模式”），不过能够完整写出实现的人并不多。实现Singleton模式的要点有两个：<br />1、静态实例引用，及get方法；<br />2、私有的默认构造器；<br />答错的问题都出在第二点——私有的默认构造器，它是实例唯一性的保证。
          <br/>
          <span style="color:red;">
            <a href="http://yujianqiu.javaeye.com/blog/210331#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jul 2008 23:08:16 +0800</pubDate>
        <link>http://yujianqiu.javaeye.com/blog/210331</link>
        <guid>http://yujianqiu.javaeye.com/blog/210331</guid>
      </item>
      <item>
        <title>问题：判断String是否“相等”？</title>
        <author>yujianqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yujianqiu.javaeye.com">yujianqiu</a>&nbsp;
          链接：<a href="http://yujianqiu.javaeye.com/blog/210323" style="color:red;">http://yujianqiu.javaeye.com/blog/210323</a>&nbsp;
          发表时间: 2008年07月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          问题：如下代码<br /><pre name="code" class="java">
String s1 = "Hello"+"World";
String s2 = "Hello"+"World";
String s3 = new String("HelloWorld");
</pre><br />请问s1==s2，s1.equals(s2)，s1==s3，s1.equals(s3)这几个表达式的值是什么？<br /><br />答案：<br />true<br />true<br />false<br />true<br /><br />点评：<br />最近面试数十人，能正确回答这道题目的人凤毛麟角。一度我自己都不自信起来了，特意写了测试代码验证这个答案。<br />这个题目考察的是对Java语言基础的掌握。要回答这个题目的要点有两个：<br />1、==是比较引用，equals是值等。这一点多数面试者都能答对；<br />2、String有特殊性——不变性，并且有一个全局字符串常量表（这个称呼可能不太规范），所以对于多数情况“==”与“equals”会得到同样的结果——不过这不代表在编程中可以这样用。<br />s1==s2是回答这个题目的关键，如果简单的两个字符串赋值可能就简单了。偏偏还有个字符串连接，就有点困惑。<br />可能有人对这样的“简单”题目不屑一顾，不过“细节决定成败”。
          <br/>
          <span style="color:red;">
            <a href="http://yujianqiu.javaeye.com/blog/210323#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Jul 2008 22:40:28 +0800</pubDate>
        <link>http://yujianqiu.javaeye.com/blog/210323</link>
        <guid>http://yujianqiu.javaeye.com/blog/210323</guid>
      </item>
      <item>
        <title>Java是一个中文编程语言</title>
        <author>yujianqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yujianqiu.javaeye.com">yujianqiu</a>&nbsp;
          链接：<a href="http://yujianqiu.javaeye.com/blog/186972" style="color:red;">http://yujianqiu.javaeye.com/blog/186972</a>&nbsp;
          发表时间: 2008年04月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">
import junit.framework.TestCase;


public class 人 extends TestCase {
	
	public void 你好() {
		System.out.println("你好！");
	}
	
	public void test你好() {
		 你好();
	}

}
</pre><br /><br />纯粹好玩。
          <br/>
          <span style="color:red;">
            <a href="http://yujianqiu.javaeye.com/blog/186972#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 26 Apr 2008 00:31:09 +0800</pubDate>
        <link>http://yujianqiu.javaeye.com/blog/186972</link>
        <guid>http://yujianqiu.javaeye.com/blog/186972</guid>
      </item>
      <item>
        <title>简单说两句关于DAO的看法。 </title>
        <author>yujianqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yujianqiu.javaeye.com">yujianqiu</a>&nbsp;
          链接：<a href="http://yujianqiu.javaeye.com/blog/184235" style="color:red;">http://yujianqiu.javaeye.com/blog/184235</a>&nbsp;
          发表时间: 2008年04月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我觉得如果对Persistent的理解已经到了JPA的时代，那么DAO是不需要的，甚至是不能要的。 <br />先说为什么不需要。 <br />持久的目的是什么？是存储对象的瞬时状态。将其简单理解为对数据库的ＣＲＵＤ是比较狭隘的。如果，内存足够大、计算机永远不会断电，程序员永远不反错误，那么可以不去持久化。 <br />以JPA（Hibernate）的观点来看，一个对象只有两种状态：持久的和非持久的。让一个非持久的对象变为持久对象只需调用persist ()方法将其加入持久域；让一个持久的对象变为持久对象则调用remove()方法使其脱离持久域；如果让一个持久对象刷新其状态就调用flush()方法；如果想undo那么就refresh()。至于那些烦人琐事，让Hibernate那个倒霉蛋去干吧。事情就是这么简单。 <br />如果看透了这一点，那么DAO就可以去光荣下岗了。 <br />再说为什么不能要。 <br />这个解释起来很简单，看看代码就知道了。 <br /><pre name="code" class="java">
public class Person {
    private int id;
    private List&lt;Something> things;
    ...
}
public class Something{
    private int id;
    private Person owner;
    private String name;
    ...
}
</pre><br />很简单的一对多关联，与之对应有了PersonDao和SomethingDao，它们是的实现类中用Hibernate完成CRUD。 <br />来看看“R”吧，它就是把DAO送进坟墓的人。 <br /><pre name="code" class="java">
public void doSomething() {
    Person me = personDao.get(myId);
    //我可以这样做吗？
    List&lt;Something> myThings  = person.getThings();
    //还是要这样做？
    myThings = somethingDao.getThingsOf(me);
}
</pre><br />如果你不想在Hibernate一棵树上吊死，那么就用JPA吧。如果你也不想在JPA上吊死那就自己定义一个XXXPA也可以。不过，在这之前，先认真地想一想你所知道的软件的生命周期内是不是真的会换掉Hibernate呢？
          <br/>
          <span style="color:red;">
            <a href="http://yujianqiu.javaeye.com/blog/184235#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 18 Apr 2008 23:08:37 +0800</pubDate>
        <link>http://yujianqiu.javaeye.com/blog/184235</link>
        <guid>http://yujianqiu.javaeye.com/blog/184235</guid>
      </item>
      <item>
        <title>Null Object Pattern</title>
        <author>yujianqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yujianqiu.javaeye.com">yujianqiu</a>&nbsp;
          链接：<a href="http://yujianqiu.javaeye.com/blog/178616" style="color:red;">http://yujianqiu.javaeye.com/blog/178616</a>&nbsp;
          发表时间: 2008年04月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <strong>In object-oriented computer programming, a Null Object is a behavioral pattern designed to act as a default value of an object.<br /></strong><br /><br /><strong>Motivation</strong><br /><br />In most object-oriented languages, such as Java, references may be null. These references need to be checked to ensure they are not null before invoking any methods, because you can't invoke anything on a null reference. This tends to make code less readable. Instead of using a null reference to convey absence of an object (for instance, a non-existent customer), you use an object which implements the expected interface, but whose method body is empty. The advantage of this approach over a working default implementation, is that a Null Object is very predictable and has no side effects: it does nothing.<br /><br />It can also be used to act as a stub for testing, if a certain feature, such as a database, is not available for testing.<br /><br />Links<br /><a href="http://en.wikipedia.org/wiki/Null_Object_pattern" target="_blank">http://en.wikipedia.org/wiki/Null_Object_pattern</a><br /><a href="http://www.cs.oberlin.edu/~jwalker/nullObjPattern/" target="_blank">http://www.cs.oberlin.edu/~jwalker/nullObjPattern/</a>
          <br/>
          <span style="color:red;">
            <a href="http://yujianqiu.javaeye.com/blog/178616#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Apr 2008 00:18:23 +0800</pubDate>
        <link>http://yujianqiu.javaeye.com/blog/178616</link>
        <guid>http://yujianqiu.javaeye.com/blog/178616</guid>
      </item>
      <item>
        <title>Jbpm的BUG?</title>
        <author>yujianqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yujianqiu.javaeye.com">yujianqiu</a>&nbsp;
          链接：<a href="http://yujianqiu.javaeye.com/blog/178612" style="color:red;">http://yujianqiu.javaeye.com/blog/178612</a>&nbsp;
          发表时间: 2008年04月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我们将Jbpm与Spring整合的过程中发现一个问题，经过晚上的Debug终于找到了问题的原因。<br /><br />我们使用OpenSessionInView这个拦截器，所以请求结束后Session会被关闭。当再次请求时JBpm就会跑出异常，Session is closed。可是其他部分都很正常，开始以为是什么地方不小心把Session给关了，debug后似乎一切正常。其实这个问题之前作UnitTest时就发现了，不过当时以为是TestCase的配置有问题就没太在意。<br /><br />然后不得已只能将hibernate的log打开，一行一行的看，结果发现DbPersistenceService中几个Module的Session竟然与DbPersistenceService的不一样。这些终于有头绪了。打开DbPersistenceService的源代码一看，原来DbPersistenceService的setSession方法没有同时设置其它几个Module的Session，晕！这是JBpm的bug吗？！<br /><br /><pre name="code" class="java">
public class DbPersistenceService implements Service, PersistenceService {

  public void setSession(Session session) {
    this.session = session;
    log.debug("injecting a session disables transaction");
    isTransactionEnabled = false;
  }

}
</pre><br /><br />好在Jbpm设计优秀，可以轻松替换掉这个实现。我做了一个简单的修改override了setSession，问题顺利解决。<br /><br /><pre name="code" class="java">
public class DbPersistenceService extends
		org.jbpm.persistence.db.DbPersistenceService {

	/**
	 * 
	 */
	private static final long serialVersionUID = -7021022287407291604L;

	public DbPersistenceService(
			DbPersistenceServiceFactory persistenceServiceFactory) {
		super(persistenceServiceFactory);
	}

	@Override
	public void setSession(Session session) {
		super.setSession(session);

		graphSession = null;
		taskMgmtSession = null;
		jobSession = null;
		contextSession = null;
		loggingSession = null;

	}

}
</pre><br /><br />当然还有它的工厂类<br /><br /><pre name="code" class="java">
public class DbPersistenceServiceFactory extends
		org.jbpm.persistence.db.DbPersistenceServiceFactory {

	private static final Log log = LogFactory.getLog(DbPersistenceServiceFactory.class);

	/**
	 * 
	 */
	private static final long serialVersionUID = 6711179796157080648L;

	@Override
	public Service openService() {
		DbPersistenceServiceFactory.log.debug("creating persistence service");
		return new DbPersistenceService(this);
	}

}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://yujianqiu.javaeye.com/blog/178612#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Apr 2008 23:57:17 +0800</pubDate>
        <link>http://yujianqiu.javaeye.com/blog/178612</link>
        <guid>http://yujianqiu.javaeye.com/blog/178612</guid>
      </item>
      <item>
        <title>Barbecue: 一个条码打印API</title>
        <author>yujianqiu</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://yujianqiu.javaeye.com">yujianqiu</a>&nbsp;
          链接：<a href="http://yujianqiu.javaeye.com/blog/178601" style="color:red;">http://yujianqiu.javaeye.com/blog/178601</a>&nbsp;
          发表时间: 2008年04月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Barbecue一个条码打印API。支持大多数类型条形码的生成。它是一个SourcForge上的开源项目。<br />它不仅可以在Swing中使用，还可以作为Servlet来使用，非常适合B/S的场景。我将其中的BarcodeServlet稍作修改，成为Struts2中的Action，方便配置。<br /><br />项目主页：<br />http://barbecue.sourceforge.net
          <br/>
          <span style="color:red;">
            <a href="http://yujianqiu.javaeye.com/blog/178601#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Apr 2008 23:18:14 +0800</pubDate>
        <link>http://yujianqiu.javaeye.com/blog/178601</link>
        <guid>http://yujianqiu.javaeye.com/blog/178601</guid>
      </item>
  </channel>
</rss>