<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>Lucas Lee</title>
    <description>Lucas Lee Software --- www.lucas-lee.com
             </description>
    <link>http://lucaslee.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>对于单例模式的一点想法</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/211471" style="color:red;">http://lucaslee.javaeye.com/blog/211471</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          单例模式很普遍，对于Spring的实现机制不清楚，单就Java语言上的实现机制来讨论。<br />虽然简单，但要获得一个高性能且线程安全的单例确不简单。<br />最简单的、成熟的单例实现有如下两种：<br />1.<br /><pre name="code" class="java">public static final Singleton INSTANCE=new Singleton();</pre><br />即在声明静态变量时就实例化。这种方法的问题是，不能传入构造参数从而动态的创建实例。<br />2.<br /><pre name="code" class="java">public static synchronized Singleton getInstance(){...}</pre><br />即在方法上同步。这种方法的问题是，始终有同步的开销(虽然对很多应用来说这开销并不大，以致不需要考虑)，而更理想的情况是，读操作不需要同步，只在创建实例时同步。<br />看上去更好的方法(但有问题！)是：<br />Double-checked synchronization,<br />如:<br /><pre name="code" class="java">private static Singleton INSTANCE;
public static Singleton getInstance(){
  if(INSTANCE==null){
    synchronized(Singelton.class){
      //Double checking
      if(INSTANCE==null){
        INSTANCE=new Singleton();
      }
    }
  }
}</pre><br />问题解释如下：<br />参考1:<a href="http://www.ibm.com/developerworks/java/library/j-dcl.html" target="_blank">http://www.ibm.com/developerworks/java/library/j-dcl.html</a><br />参考2:<a href="http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html" target="_blank">http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html</a><br />在参考1中提到，out-of-order writes是原因，就是说INSTANCE=new Singleton();这行代码并不是一定按如下伪代码顺序进行的：<br />1.分配内存<br />2.调用构造器<br />3.赋值给INSTANCE<br /><br />在有的JIT上会编译优化为：<br />1.分配内存<br />2.赋值给INSTANCE<br />3.调用构造器<br /><br />这就是所谓的out-of-order writes。则问题会出在第2步：此时判断(INSTANCE==null)已经返回真了，但构造器还未调用完成，此时访问INSTANCE则会出现不可预料的问题。<br />以上都是简单的重复广为人知的知识，下面是我的补充：<br />在参考2中的"It will work for 32-bit primitive values"一节给了我启发，它提到对32位的原始类型的Double-checked locking是可以的，(我认为实际关键点在于<br />赋值操作是否是原子的)。既然对int的赋值是原子的，我们可以稍加改进，引入一个int hasInitialized：<br /><pre name="code" class="java">private static int hasInitialized=0;
private static Singleton INSTANCE;
public static Singleton getInstance(){
  if(hasInitialized==0){
    synchronized(Singelton.class){
      //Double checking
      if(hasInitialized==0){
        INSTANCE=new Singleton();
        hasInitialized=1;
      }
    }
  }
}</pre><br />区别在于：<br />以hasInitialized==0来判断是否初始化完成，而在NSTANCE=new Singleton();之后才赋值以确认初始化完成。<br />这样不是既可保持高性能(绝大部分情况下没有锁，不进入需同步的块)、又可保证线程安全么？
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/211471#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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>Fri, 04 Jul 2008 12:19:49 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/211471</link>
        <guid>http://lucaslee.javaeye.com/blog/211471</guid>
      </item>
      <item>
        <title>用Eclipse在Web项目引用Java项目时实现热部署</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/58450" style="color:red;">http://lucaslee.javaeye.com/blog/58450</a>&nbsp;
          发表时间: 2007年03月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          以前也研究过Eclipse里Web Project引用Java Project的问题，没有解决，特地再深入研究了一下。<br />思路及实践如下：<br />1.Elcipse里Project Properties里有Project Reference的设置，说明有这个特性，Java Builder Path里也有引用的Projects设置。<br />试验：建立两个Java Project A、B，B引用A，设置B的Java Builder Path/Projects引用Project A，则B中的Class可以调用A中的Class，编译和运行都通过。<br />说明Eclipse对Java Project的解决方案良好。<br />(Project Reference的设置不知道有什么用处)<br />2.Web应用，使用Eclipse WTP<br />按上面的试验设置，（这里的B项目是一个Web项目），编译可以通过，但是运行时找不到A项目中的类。<br />没有找到有相应的解决方案。<br />3.Web应用，使用Sysdeo Tomcat Plugin<br />发现有这个Window/Preferences/Tomcat/Advanced/Add Java Projects to Tomcat classpath设置，将Java项目设置到Tomcat的类路径中，对Tomcat是全局的，有一些不灵活，和其它的缺陷，比如加载这些类的ClassLoader将是SystemClassLoader而不是WebAppClassLoader，这将影响某些资源文件的加载。<br />另外，我在Tomcat5.5.17上试验这个设置，结果启动Tomcat就出错。<br /><br />看了Sysdeo的文档，它介绍了DevLoader就专门解决这个问题的。看了一下他的源码，很简单，总共只有200行，基本上的逻辑是，读取Eclipse项目下的.#webclasspath、.classpath文件以获得引用的java类路径，由<br />DevLoader加载这些项目外的类。<br />具体操作是：<br />1)设置Java Builder Path；<br />2)将Sysdeo Plugin下的DevLoader.zip解压到Tomcat目录/server/classes下，在Tomcat Project/Project Properties/Tomcat/Devloader 中选中Active DevLoader，及选中列表中项目外的classpath。<br />参考Sysdeo Plugin的ReadmeDevLoader.html.<br /><br />这样就解决了这个问题，效果是：修改了项目A、B中的代码，不用重起Tomcat，就可以在浏览器中立即看到修改后的效果。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/58450#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</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>Fri, 09 Mar 2007 11:28:12 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/58450</link>
        <guid>http://lucaslee.javaeye.com/blog/58450</guid>
      </item>
      <item>
        <title>PreparedStatement与Statement性能详细对比</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/49292" style="color:red;">http://lucaslee.javaeye.com/blog/49292</a>&nbsp;
          发表时间: 2007年01月22日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我对PreparedStatement和Statement的性能测试了一下：<br />
&nbsp;测试代码如下： <br />
<div class="code_title">java 代码</div>
<div class="dp-highlighter">
<div class="bar">&nbsp;</div>
<ol class="dp-j" start="1">
    <li class="alt"><span><span>Connection&nbsp;con&nbsp;=&nbsp;getOraConnection();&nbsp;&nbsp;</span></span></li>
    <li class=""><span>String&nbsp;sql&nbsp;=&nbsp;<span class="string">&quot;select&nbsp;id,name&nbsp;from&nbsp;test&nbsp;where&nbsp;id=&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>String&nbsp;tempSql;&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">int</span><span>&nbsp;count&nbsp;=&nbsp;</span><span class="number">1000</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">long</span><span>&nbsp;time&nbsp;=&nbsp;System.currentTimeMillis();&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;count;&nbsp;i++)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;Statement&nbsp;st&nbsp;=&nbsp;con.createStatement();&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;tempSql=sql+(<span class="keyword">int</span><span>)&nbsp;(Math.random()&nbsp;*&nbsp;</span><span class="number">100</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;st.executeQuery(tempSql);&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;st.close();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
    <li class=""><span>System.out.println(<span class="string">&quot;st&nbsp;cost:&quot;</span><span>&nbsp;+&nbsp;(System.currentTimeMillis()&nbsp;-&nbsp;time));&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>String&nbsp;psql&nbsp;=&nbsp;<span class="string">&quot;select&nbsp;id,name&nbsp;from&nbsp;test&nbsp;where&nbsp;id=?&quot;</span><span>;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>time&nbsp;=&nbsp;System.currentTimeMillis();&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">for</span><span>&nbsp;(</span><span class="keyword">int</span><span>&nbsp;i&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;i&nbsp;&lt;&nbsp;count;&nbsp;i++)&nbsp;{&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">int</span><span>&nbsp;id=(</span><span class="keyword">int</span><span>)&nbsp;(Math.random()&nbsp;*&nbsp;</span><span class="number">100</span><span>);&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;PreparedStatement&nbsp;pst&nbsp;=&nbsp;con.prepareStatement(psql);&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;pst.setBigDecimal(<span class="number">1</span><span>,&nbsp;</span><span class="keyword">new</span><span>&nbsp;BigDecimal(id));&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;pst.executeQuery();&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;pst.close();&nbsp;&nbsp;</span></li>
    <li class=""><span>}&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>System.out.println(<span class="string">&quot;pst&nbsp;cost:&quot;</span><span>&nbsp;+&nbsp;(System.currentTimeMillis()&nbsp;-&nbsp;time));&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span>con.close();&nbsp;&nbsp;</span></li>
</ol>
</div>
<br />
test表很简单，id int，name varchar(50).<br />
对几种数据库和相应驱动程序进行测试，结果如下(ms)： <br />
oracle:&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 1235&nbsp;&nbsp;&nbsp; 1109<br />
MSSQL2000(JTDS):391&nbsp;&nbsp;&nbsp; 453<br />
MSSQL2000(MS):&nbsp;&nbsp;&nbsp; 453&nbsp;&nbsp;&nbsp; 640<br />
Mysql5:&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 391&nbsp;&nbsp;&nbsp; 891<br />
PostgreSQL8.1:&nbsp;&nbsp; 1078&nbsp;&nbsp;&nbsp; 1047<br />
结论： <br />
1.单并发情况下，oracle--PostgreSQL--MSSQL--MySQL的性能依次增高； <br />
2.MySQL不支持Prepared Statement特性，已在其驱动程序的文档中证实，所以在MySQL里使用  PreparedStatement的性能尤其低，可以比Statement慢一倍以上。   <br />
而MSSQL2000下，PreparedStatement比Statement慢;<br />
Oracle,PostgreSQL对它的支持最好，使用PreparedStatement性能比Statement高。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/49292#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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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>Mon, 22 Jan 2007 22:28:35 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/49292</link>
        <guid>http://lucaslee.javaeye.com/blog/49292</guid>
      </item>
      <item>
        <title>谨慎重写代码</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/48580" style="color:red;">http://lucaslee.javaeye.com/blog/48580</a>&nbsp;
          发表时间: 2007年01月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          程序员很容易就会产生重写的冲动，因为推倒重来比维护一个现有系统要容易，至少是开始的时候。 但我会很谨慎。以前我们的头向总经理提出重写我们在做的那个CRM软件时，boss说的是，我并不反对你们重写，问题是你怎么能保证重写一定会更好，或者更值得？  而且，现有代码经过了多少人次的测试？如果重写这些东西就全丢了。  我会更喜欢重构，而且是阶段性的、甚至随时的，当然要保持重构的几个原则。 所以，我的代码很难会在一个时候实在难以忍受了，象一个生命体，始终有新陈代谢，当然就难以&ldquo;腐化&rdquo;了。  慎之。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/48580#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</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>Fri, 19 Jan 2007 17:39:54 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/48580</link>
        <guid>http://lucaslee.javaeye.com/blog/48580</guid>
      </item>
      <item>
        <title>写代码象写作文</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/40488" style="color:red;">http://lucaslee.javaeye.com/blog/40488</a>&nbsp;
          发表时间: 2006年12月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp; 好的代码的标准也是比较感性的。<br />
&nbsp;&nbsp;&nbsp; 但是可以借鉴和学习的。<br />
&nbsp;&nbsp;&nbsp; 任何时候写一段代码都可以自省一下，是否表达得足够明确简单？ 写代码和以前写作文的感觉是相通的，基本上都是追求用固定的语言语法等元素来表达一定的逻辑意义。 所以简洁易懂等基本目标也应该是类似的。<br />
&nbsp;&nbsp;&nbsp; 我的意思是说，可以回想作文时的感觉来写代码，白居易找老妇来读他的诗来保证易读性，我们是不是可以借他山之石以攻玉？
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/40488#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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><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>Sun, 24 Dec 2006 12:52:23 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/40488</link>
        <guid>http://lucaslee.javaeye.com/blog/40488</guid>
      </item>
      <item>
        <title>性格外向的沟通能力就一定强么？</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/40486" style="color:red;">http://lucaslee.javaeye.com/blog/40486</a>&nbsp;
          发表时间: 2006年12月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &nbsp;&nbsp;&nbsp;&nbsp; 我觉得有些奇怪的现象，就是认为外向的人沟通能力一定强，内向的就一定不强。我的感觉并不是这样的，有的时候需要仔细的倾听，表达的时候只需要讲明重点，关键是能听得进别人的意见，而不是表面上敷衍，这些跟是否外向关系不大。长期的沟通是这样的，如果人家觉得你是在为他考虑，信任你，跟你的沟通是有效率和有价值的，这样人家愿意跟你说心里话。<br />
&nbsp;&nbsp;&nbsp; 这是我的观点，就是说沟通能力不仅要看短期能力，比如1分钟内能跟你搭上话，也要看长期的能力，就是是否愿意长期跟你深入的交流。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/40486#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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 24 Dec 2006 12:42:20 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/40486</link>
        <guid>http://lucaslee.javaeye.com/blog/40486</guid>
      </item>
      <item>
        <title>Re: TCP服务器如何提高负载量(长连接)?</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/39102" style="color:red;">http://lucaslee.javaeye.com/blog/39102</a>&nbsp;
          发表时间: 2006年12月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我觉得有一个简单的办法，负载均衡器上采取一个技术：客户端重定向，基于适当的算法（轮换或考虑负载量分配），将对于www.xxx.com单域名的请求客户端重定向到www1.xxx.com--wwwN.xxx.com,然后以后的访问都不变化，这样比较简单。就是说只在第一次访问的时候固定一个子域名。 这种技术我看到IBM的网站似乎是这样用的，会客户端重定向；另外，对于长连接的internet应用，典型的是各类网游，比如ourgame的，就会使用用户选择服务器的方式来达到负载均衡的目的，实际就是有多台服务器，让你自己选择物理位置近的，或者可以自动侦测，也不失为一个可行的办法。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/39102#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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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>Thu, 14 Dec 2006 21:32:07 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/39102</link>
        <guid>http://lucaslee.javaeye.com/blog/39102</guid>
      </item>
      <item>
        <title>使用DBCP连接池检测未关闭的数据库连接</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/34743" style="color:red;">http://lucaslee.javaeye.com/blog/34743</a>&nbsp;
          发表时间: 2006年11月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我一直使用DBCP连接池，效果还不错。<br />最近因为朋友的一个J2EE应用一上连接池，很快就会报connection pool exhausted的错误，所以<br />特地研究了一下如何自动检测未关闭的数据库连接的技术。<br /><br />研究了tomcat文档中DataSource一章，发现有专门的Preventing dB connection pool leaks一节，<br />设置数据源的removeAbandoned="true"，removeAbandonedTimeout="60"，logAbandoned="true"几个属性就可以了。<br />DBCP会自动把超过timeout时间仍未关闭的连接强制关闭，并且打出异常信息(包含打开连接的代码位置)。<br />但是要注意，不能依赖这种方式关闭连接，是有一定风险的，比如万一页面操作数据库的时间偶尔超过了<br />timeout的时间，那会造成执行错误。<br /><br />对我来说，这个方法最好的用法就是用来检测未关闭的连接，然后修改程序，显式的关闭连接。<br /><br />一个经验需要说一下，DBCP的log会输出到控制台，如果使用log4j,需要设置log4j.xml中的console appender的threshold为debug.
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/34743#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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 17 Nov 2006 14:22:21 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/34743</link>
        <guid>http://lucaslee.javaeye.com/blog/34743</guid>
      </item>
      <item>
        <title>权限控制系统概述</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/30670" style="color:red;">http://lucaslee.javaeye.com/blog/30670</a>&nbsp;
          发表时间: 2006年10月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          权限概念中，我认为原子元素只有三种：用户、功能权限、数据权限。其他的角色、用户组之类的东西都是为了解耦用户与其他元素之间关系而引入的，或者为了方便起见，都是一个中间变量而已。<br /><br />1.功能权限。<br />针对某个一功能，是否能访问。比如此用户是否能访问读取客户资料的功能。这个权限比较基础，不是yes就是no，所以有人又称Y/N权限。<br />2.数据权限。<br />在允许访问某一功能权限的基础上，控制可访问的数据范围。比如用户能访问读取客户资料的功能，但他只能访问本人录入的，或分配给本部门的客户资料。<br /><br />我自己开发了一个权限管理系统，对于功能权限，是可配置的，这一点跟JAAS在web.xml配置是类似的；对于数据权限，我采用可插入的SQL过滤条件来处理。(我以前所在的项目的经验证明，如果在读取出所有数据再一条条检查权限，性能会很差。)
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/30670#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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 26 Oct 2006 10:10:46 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/30670</link>
        <guid>http://lucaslee.javaeye.com/blog/30670</guid>
      </item>
      <item>
        <title>用Java编写Oracle存储过程</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/29864" style="color:red;">http://lucaslee.javaeye.com/blog/29864</a>&nbsp;
          发表时间: 2006年10月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Oracle里可以使用多种语言来编写存储过程，比如Pro*C/C++,PL/SQL,COBOL,在Oracle8i开始支持用Java编写存储过程。<br /><br />如果非要写存储过程的话，做为以Java谋生的我，首选用Java编写，用PL/SQL需要记忆很多的语法(Pascal类的语法)和函数，远不如使用Java/JDBC这么轻车熟路。而且，DB2等数据库都支持Java存储过程，所以不比为每一种数据学习一种编写存储过程的方法了。<br /><br />Java存储过程与一般的JDBC程序有所不同的是：<br />1.有安全限制，毕竟是在oracle内部运行的，不允许访问操作系统的资源，如文件。<br />2.获取数据库联接方式，connection = new OracleDriver().defaultConnection();<br />3.System.out,System.err,System.in等输入输出有所不同。可以利用某些命令重定向。<br /><br />下面用Java 存储过程写一个Hello World的例子。<br />1)在plsqldeveloper里，java source里增加一个TestJava1类，<br /><pre name="code" class="java">create or replace and compile java source named TestJava1 as
public class TestJava1
{
  public static void test()
  {
   System.out.println("Hello");
  }
}</pre><br />执行它，以保存并编译。<br /><br />2)增加一个procedure，执行如下命令:<br /><pre name="code" class="java">create or replace procedure testJava1 as language java name 'TestJava1.test()';</pre><br /><br />3)在command window里输入<br /><pre name="code" class="java">SET SERVEROUTPUT ON;
CALL dbms_java.set_output(2000);</pre><br />以使System.out重定向到当前窗口;<br />在command window里输入，exec testJava1();<br />即可看到结果：<br /><br />Hello<br /><br />PL/SQL procedure successfully completed<br /><br /><br />参考资料:<br />Oracle® Database Java Developer's Guide http://download-west.oracle.com/docs/cd/B19306_01/java.102/b14187/toc.htm<br />Sample:<br />http://www.oracle.com/technology/sample_code/tech/java/jsp/oracle9ijsp.html
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/29864#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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>Tue, 24 Oct 2006 15:17:19 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/29864</link>
        <guid>http://lucaslee.javaeye.com/blog/29864</guid>
      </item>
      <item>
        <title>写程序是否是你生活的全部？</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/29460" style="color:red;">http://lucaslee.javaeye.com/blog/29460</a>&nbsp;
          发表时间: 2006年10月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          以前着迷的时候，学习、工作几乎就是我生活的全部。<br /><br />现在我发现打打羽毛球、研究一下如何做饭也很有意思啊。而且我发现里面很多方法很熟悉，就跟我在写程序时用到的一样。简单如菜里放多少盐，你得尝---这就是测试---而且最好放完溶解完全后就立即尝，这样你放盐的正确性能得到立即的反馈，用以巩固经验，同时给后续的操作提供保证---这就是单元测试了吧，尽早测试，不要让错误累计，呵呵<br /><br />上回搬家，整理一大堆东西，发现整理起来也有相当的困难。书籍如何分堆，比较容易找呢？杂物放哪里不碍眼又容易找呢？---归类，又要权衡使用的方便性、美观、环境是否适宜保存等等，比起程序的分包、封装、甚至整体的设计，难道会容易很多么？面对的问题是类似的，而且问题的复杂度我看也相差不大---是否暗示了软件的本质困难，在于概念(或逻辑)的复杂性？而不是如何实现？就收拾屋子来说，我看设计这个方案本身，比移动这些物件要麻烦多了。<br /><br />以前沉迷过围棋。甚至睡觉、坐公车时，眼前会浮现出黑白子棋形，还会自动的走棋，但不是我控制的。有点走火入魔的感觉，不是很好。不过我的棋艺还是在半年内有了长足的进步，自己按书上说的测了一下，可能有业余2-3段了吧。暂时止于此了。随后为生计所迫，不得不放下这些玩意了。<br /><br />写程序，无非是类似围棋的另一种沉迷。如同围棋中的，要到达更高的境界，有时不在棋内而在棋外，是生活历练、为人处事等方面的影响。我喜欢玩程序，不喜欢被程序玩。多接触生活的各方面，大有裨益啊。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/29460#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</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>Mon, 23 Oct 2006 10:22:36 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/29460</link>
        <guid>http://lucaslee.javaeye.com/blog/29460</guid>
      </item>
      <item>
        <title>Re: 你的系统是跨平台的吗？</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/28814" style="color:red;">http://lucaslee.javaeye.com/blog/28814</a>&nbsp;
          发表时间: 2006年10月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          楼主总结得还不错。不过看上去似乎经验不足。（我说错了请原谅我）<br /><br />我补充几点：<br />1.跨应用服务器。这个痛苦我比较有体会。(注意：但tomcat5到4之间的的跨越可能意义不大，因为支持的servlet ,jsp spec版本不同；倒过来是应该完全兼容的。)<br />  1.1 EJB跨应用服务器。虽然有spec，但每家都有自己的扩展，有些特别要命特性比如，EJB spec2.0里居然对like 只支持常数，就是不能传入?。<br />   然后EJB的配置文件都有各自的扩展，真是痛苦。好在Jbuilder可以自动转换Weblogic到Jboss，但也不是那么好，总有魔鬼的细节要你反复调试。<br />   1.2无EJB的跨应用服务器。这个容易多了，但居然也不是很顺利的。我的war曾经在tomcat上调试好了，发布到websphere5上就失败。最后用二分法逐次删除app里的文件，发现引起问题的居然是...eclipse产生的.classpath文件!websphere对eclipse支持得太好了吧？删掉即可。<br />    这就算好的了。我后来把在tomcat5上调试好的war发布到resion3上，更郁闷。我在网上查了resion内置了自己的xml parser，导致我的castor xml无法正确执行，要更换parser，需要N步...遂放弃...<br /><br />2.跨浏览器。这个绝不是很容易的事情。Javascript就够你喝一壶的，各种细微差别，各种特殊的扩展...，这个到罢了，到CSS，更有玩意，特别是主要用CSS布局的，有得玩，这一点上如果采取老式的Table布局，兼容性倒是很不错。还来新玩意要慎用。<br />3.跨数据库。<br />  这个有hibernate之类的封装，就好多了。不用它，问题也不会很大，可参考我以前的帖子。(当然如果你用了stored procedure或trigger之类，只能手动挨个重写了)<br />4.跨操作系统。<br />  这个听上去是最容易的。但我还是碰到了几个问题。<br />  4.1文件路径的分隔符。windows下似乎能兼容Unix的分隔符，但反之不可。不能随意的用/或\，最好是用Java里提供的File.seperator。<br />  4.2字符编码问题。一般我们会是用中文版的windows，默认编码是GBK;Unix可能会有差别，所以在使用new String(byte[])，String.toBytes()等与编码相关的操作时，要注意，可以指定编码。最好还是全部使用UTF-8。<br />5.国际化问题<br />  这里暂只说文字的国际化。<br />  需要将文字资源外部化，并且全部用UTF-8编码，根据Local选择文字资源等等。不难也不简单。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/28814#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/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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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>Fri, 20 Oct 2006 14:41:51 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/28814</link>
        <guid>http://lucaslee.javaeye.com/blog/28814</guid>
      </item>
      <item>
        <title>看看这个笑死我的帖子：&quot;说一说编程恶习&quot;</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/28711" style="color:red;">http://lucaslee.javaeye.com/blog/28711</a>&nbsp;
          发表时间: 2006年10月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          转贴：<br />"说一说编程恶习"<br /><a href="http://www.blogjava.net/uiiang/archive/2006/10/16/75502.html" target="_blank">http://www.blogjava.net/uiiang/archive/2006/10/16/75502.html</a><br /><br />这哥们郁闷阿，维护这么一堆代码...
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/28711#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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>Thu, 19 Oct 2006 15:50:29 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/28711</link>
        <guid>http://lucaslee.javaeye.com/blog/28711</guid>
      </item>
      <item>
        <title>B/S是趋势和主流？</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/27163" style="color:red;">http://lucaslee.javaeye.com/blog/27163</a>&nbsp;
          发表时间: 2006年10月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我对B/S是趋势和主流这个问题有过多年的疑问及困惑。<br /><br />    虽然我一直在做B/S的开发，我并不认为B/S相比C/S有什么特别大，不可超越的优势。C/S并不是死的，是可以变化和进步的。<br />本文中所提到的C/S，不仅是传统的两层结构，包括所有胖客户端+N层服务的结构。<br />    其实两者之间的界限相当模糊，特别是在以Applet为主要界面，至Webstart(可以使用http 80端口自动下载、更新，并可在本地独立启动不需要浏览器)，难以截然区分。<br /><br /><br />针对常见的几个问题我的思考如下：<br />1.B/S部署方便，不用安装，自动更新。<br />  B/S天生的优势，但C/S并不是不能做到，天生的特性并不是不能改变的。<br />  不用安装：毕竟是一次性的，若非偶尔看一下的用户，还是可以忍受安装的。如果就是传统的网站，自然落在B/S的饭碗里，不用说了。<br />  自动更新：这个应该更重要。我们用过各种杀毒软件，都可以自动更新，windows也可以。它并不是那么复杂，特别是，如果做成一个相对通用的方案，有良好的封装的话，可以认为这不是一个问题了。<br /><br />2.采用一般不被封闭的http协议和80端口，穿透防火墙。<br />  若干年前我第一次看到时就觉得有点奇怪。<br />  看看MSN messenger，即使不使用http和80又如何，也没有阻止它发财。或者QQ等其他。<br />  我认为这个因素只对一些面向公众的网站有影响。<br /><br />3.界面漂亮。<br />  HTML可以方便的使用超文本、图片、样式表等技术，界面可以很漂亮。winamp、mediaplayer等也漂亮，需要更高的技术么？我不清楚，但可以肯定地是，有很多换肤等组件使得漂亮不会太难，而且，在一个商业的应用中，漂亮或者花哨的那种漂亮有很大的作用么？我倒是知道，很多国内客户看软件时，只知道评价好看还是不好看。国外软件的界面一般是比较朴素和实用的。<br />  更多一点，也可以适当的嵌入html引擎（或浏览器组件）以丰富界面。Java Swing中某些地方就可以使用基本的html。一个极端的例子，Dreamwaver的全部界面其实都是html+js写的，用自己写的浏览器引擎解析，有兴趣可以研究一下。<br /><br />4.操作简单。<br />  这个问题很有意思。以前的web功能比较单一和简单，所以操作当然也简单了，留下这个印象真是一个思维的定势。如果达到一定的复杂程度，比如大量特性的Grid，或者拖放(甚至跨进程的拖放),我看不一定比C/S的简单了，比如bindows之类，按照windows现有的重造了一套界面机制。<br />  看看界面设计一类的书，就知道在B/S里界面交互技术实际上倒退了10年。一切已经存在很久的很成熟的东西又要重造一次，不容易啊，细节是魔鬼，做一套看上“激动人心”的DEMO不难，经得起推敲和大量实际应用检验是很不容易的。<br /><br />5.客户端可跨平台。<br />  Java也可跨平台。<br /><br />6.采用三层结构，大部分逻辑在服务端处理。<br />  C/S也可以采用三层结构，中间层可以使用多种技术：EJB，Web Service等。<br /><br />7.B/S可以做很多(甚至任何！)你想不到的界面控制，可以提高用户体验。<br />  首先，B/S里做的各种高级GUI编码都是对自身弱点的弥补，在做很多年前C/S就有的东西。<br />  其次，B/S的确可以用很多方法"模拟"出各种界面、组件元素，但纯的HTML+Javascript是不能突破砂箱的，本地的API自不用说，访问文件系统也暂不提，光是各种按键（包括ctl、function键)不能自如的控制，模态和非模态对话框不能自由定义等等“小”问题就足够降低用户体验了。获在一个并不是那么“上心”的Browser容器里，做一个委屈的二等公民，玩着沙箱。<br />  IE在模态和非模态对话框作了一些努力是不错的，还有上下文菜单，也是系统级别的（用div等物模拟的上下文菜单不能覆盖框架和帧...细节是魔鬼！），但不能指望Microsoft在浏览器上有更多的支持---正如Joel on software里说的，他意识到了这是自己给自己挖坟墓，减弱应用程序对windows API的绑定。<br /><br />利益集团的角力：<br />   正如前面提到的，Microsoft依靠windows的垄断，使得他不可能在IE浏览器上有更多的支持。而其他公司如Sun、Oracle、IBM等，则会力推B/S应用，以减低应用程序对Microsoft的依赖程度，而获得更大的控制力和利润。<br />    <br />浏览器技术未来发展的畅想：<br />   如果没有上述利益的问题，我认为应当由最有影响力的公司来推动html相关标准的建立(Maybe M$)，web上不应该只有几个基础控件，如Java抽象出来的组件一样，应该有更丰富的内置组件，如combobox,grid等。<br />   并且应该及时响应趋势并支持B/S的发展，象现在搞的Grid之类不应该人人造轮子。<br /><br /><br />总结：<br />   B/S会在合适的地方发挥自己的长处，特别是面向大众的软件或网站，但我对目前火热的AJAX等持谨慎乐观态度，它不是一种（套）根基很牢的技术。<br />   针对于内部使用的软件(或可以忍受几分钟安装软件的)：<br />   1)B/S在界面上的劣势会导致高级界面交互技术开发困难。<br />   2)对比B/S的各种优点，可以使用Applet，Webstart (可能需要数字证书做代码签名)加EJB、RMI、Web service等技术的三层结构来替代，以获得胖客户端的好处。做一些努力，使用VB、Delphi、PB也可以局部或全部的拥有这些优点。<br />   这么说并不是说B/S就一定差，只是本人对业界的这样的趋势有点看不懂，让我想起了若干年前什么系统都要用EJB的所谓“趋势”和“主流”。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/27163#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 12 Oct 2006 16:40:02 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/27163</link>
        <guid>http://lucaslee.javaeye.com/blog/27163</guid>
      </item>
      <item>
        <title>Re: 复杂商品分类的表如何建立？</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/27141" style="color:red;">http://lucaslee.javaeye.com/blog/27141</a>&nbsp;
          发表时间: 2006年10月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="quote_title">zww80216 写道</div><div class="quote_div">复杂商品的分类，类似淘宝的分类<br />1.每类商品有无限级分类<br />2.每个商品可能会有交叉分类<br />3.每类商品的扩展属性不一样<br />比如：<br />夹克的扩展属性为<br />款式： 拉链夹克 风格： 休闲 品牌： other/其它 适合季节： 春秋 尺码： M L 颜色： 其它颜色 质地： 纯棉<br />主板的扩展属性为<br />品牌： 微星/MSI 类型： Socket478 芯片组： Intel 845 平台类型： Intel平台 宝贝成色： 8成新 <br /><br />这些扩展属性都会动态的变化<br /><br />那么问题来了：<br />1.全文搜索如何合理建立？<br />2.可能后台扩展属性表是否需要动态建立？<br />3.如果单件商品属于交叉分类的话，查询结果记录重复是否需要？<br />4.高效的无限级分类算法大家可否指点一二，这个困惑了我很久了？<br /><br />不求完整解决，给个思路也成</div><br /><br />你的问题很多，分别回答。<br />1.无限分类。树形结构，一般可以认为分类变化的频度很低，所以比较适合于损失插入修改性能以提高查询性能。<br />树形结构的查询，一般最关心和最区别于普通字典数据的地方就是查询子树问题，在Oracle里对应hierarchical query,即使用connect by语句的递归查询。子树举例说：生物分类中，给出所有的鸟类。<br />一般的树形结构在表里的物理存储方式有两大类：<br />1.链表方式。<br />  有各种变形，典型的如，一条记录有唯一id，还有parentId保存父节点的ID。查询子树时需要用SQL递归查询，需要多条SQL。<br />2.ID即是节点在树中的路径。<br />  比如生物id为001，哺乳动物则为001001，鸟类为001002，前三位是父节点的id，后三位是在本级中节点的ID。依此类推。<br />  这种方案有每级节点数量的限制，因此有其他方案来弥补，比如另设一个字段保存上级节点的ID，这样本级节点的长度实际上是算出来的，而不是固定的。但这些方案的共同点就是，对子树问题，都采取id like '父节点%'的方式，只需一句SQL，但是like的效率并不算很高。<br />3.Nested Sets方式。<br />  用两个字段保存树形结构关系，left数和right数，规则是：子的left>父的left,子的right&lt;父的right。这种算法专门针对子树问题优化，根据上述规则，它只需要where left>currentNode.left and right&lt;currentNode.right即可。因为left,right都是数字，所以可以利用索引，可以想见，查询的速度非常快，比用Oracle 的connect by实现内部递归的方式更快。<br />  具体参考：http://www.developersdex.com/gurus/articles/112.asp
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/27141#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><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 12 Oct 2006 12:38:38 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/27141</link>
        <guid>http://lucaslee.javaeye.com/blog/27141</guid>
      </item>
      <item>
        <title>实现数据库兼容并不象你想象的那么难</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/27125" style="color:red;">http://lucaslee.javaeye.com/blog/27125</a>&nbsp;
          发表时间: 2006年10月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="quote_title">ylt 写道</div><div class="quote_div"><br />我同意Readonly的观点。如果不用hql,想实现数据库兼容就太难了。<br />举个例子，在很多手工录入的表格中都要记录录入时间/操作人/备注，我在java中使用date/person/comment来表示，可是java的关键字和sql的是不一样的，不同数据库也有各自的扩展关键字，上面那几个字段很可能就是某种数据库的关键字。用hql,我所有的查询语句就可以保持统一，切换数据库只需要修改mapping。实际上我写了一个自动根据数据库关键字修改mapping的类，这样连mapping文件也只需要一个。<br /></div><br /><br />实现数据库兼容并不象你想象的那么难。：）<br />我做的平台软件在多种数据库上测试过，包括:Oracle9(10),SqlServer2000,MySql4(5),PostgreSQL8,<br />HyperSonic。<br />操作包括CRUD，查询也有比较复杂的。<br />兼容数据库的步骤如下：<br />1)数据库DDL是要自行处理的。当然可以借助PowerDesigner的自动转换数据库功能，虽然也有bug，其实主要无非就是一些数据类型的转换，手写也可。<br />2)CRUD中的字段类型。JDBC的PreparedStatement已经帮你将所有的字段类型都封装了，比如不需要为了插入日期型等数据调用数据库本地的函数，ps.setDate()即可。<br />3)CRUD之SQL语法。ANSI SQL标准虽然贯彻得不够彻底，但常用的语法的确得到了一致认可。比如，表的左外连接在Oracle8里只有a.field1=b.feild2(+)这种方式，但在Oracle9以后，都支持标准的left outer join on语法了。这种语法在上述5种数据库都得到支持。其他的别名的语法也支持良好。<br />我碰到的一个比较搞的问题就是SQLserver2000种删除语句不能给表设置别名，即不能delete from TABLE a where a.id=?，去除别名无问题。<br />4)结果分页。这个的确是我碰到的最需额外处理等问题。我就是参考了hibernate的方法解决的，提供通用的ResultSet滚动方式，以及使用数据库特有的方式在SQL级别上实现，如Oracle中使用RowNum。<br />5)ID生成问题。不同数据库有各自优化的方式，也可以使用通用的方式。也参考hibernate。<br />6)其他问题。比如Oracle里的hierachical query(connect by语句)在其他的数据库可能没有对等的实现方式，此时无法对此特性跨平台了。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/27125#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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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>Thu, 12 Oct 2006 10:58:20 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/27125</link>
        <guid>http://lucaslee.javaeye.com/blog/27125</guid>
      </item>
      <item>
        <title>想到外企混两年，有没有不那么变态的外企？</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/25434" style="color:red;">http://lucaslee.javaeye.com/blog/25434</a>&nbsp;
          发表时间: 2006年10月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          去一家外包的公司待过几天，以加班为主要文化，真不是我能忍受的。<br />还是希望尝试一下外企的感觉，不要那种假的外企，比如实际是台湾人当头的。<br />其实还是不了解，瞎猜测的。<br />说白了就是想体验一下国外搞软件的是不是不加班就一定搞不好软件。<br /><br />钱多钱少就难么回事，关键是你能以这种负载干多久？<br />象某些精英一样四五十岁就翘了，我可不想。<br />这些是过劳死，某人说过，这不是最可怕的，更甚的是过劳而不死。<br />说得我心里发毛。<br />我也的确有这种感觉。身体是一会不如一会了，不开始注意身体，真是没法干了。<br />压力大的时候，一两个月就感冒一次，一次就两个星期。还剩多少好日子啊。<br /><br />我的同学（不同行）去过爱默生，据说那里的文化是健康第一，家庭第二，工作第三。即你可以随时以前面两项为理由请假而不扣钱。当然有一定日期限度啦。但我那同学觉得那里干活没有成就感，辞了。<br /><br />不好的都难说，但怎么也得经历一下才知道啊。<br /><br />谁有经验，或者就在外企，说道说道？工作环境、大体薪资（模糊点也可）、压力和加班情况等。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/25434#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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 01 Oct 2006 17:52:27 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/25434</link>
        <guid>http://lucaslee.javaeye.com/blog/25434</guid>
      </item>
      <item>
        <title>我对颈椎问题之研究与实践</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/25284" style="color:red;">http://lucaslee.javaeye.com/blog/25284</a>&nbsp;
          发表时间: 2006年09月29日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          玩电脑写程序多年了，太投入，以至于得了职业病。手指、手腕、肩颈部都经常疼痛，眼睛干涩红痒，肚子也变将军了。<br />后来颈椎问题变得尤为严重。在网上寻求解决方法，并自行研究实践，有了明显的好转。记录于下，望对使用电脑工作的人有点用处。<br /><br />1.颈椎问题的严重性：会引发脑部供血、脊柱神经、睡眠等问题。不是专家，网上可自己查找相关资料。<br />2.原因。久坐少动。肩颈部肌肉劳损以至骨骼、软骨受损。<br />3.我的解决过程。<br />  买了个太空枕，睡觉时可支撑颈部。效果不明显。<br />  后来每周按摩1小时。你要想有点效果一定得到正规的地方，还得受得了疼。按一次，得疼三天。有是有点用，回想一下，这不是花钱找罪受么？<br />  然后去了曙光医院，医生给开了一些药，问了，大概都是缓解症状的，不能治本。<br /><br />  ---我一向不同意程序员30岁转行的观点，难道我过不去这个坎？---<br /><br />  转而采取日常生活中自己注意保健。一般来说，主流的意见是多运动。包括体育运动和针对性的保健操。<br />  我在家实践了两个月，3天一次长跑或羽毛球，每天一次散步和多次保健操。效果不算明显。<br />  后来我从源头上着手。<br />      硬性的就是减少坐在电脑前的时间，打游戏不打了，工作时想问题就起身。这个也不易。这个对工作有一定影响，但也是重要方法之一。<br />      软的是调整桌椅高度及坐姿。桌椅一定是符合三个90度：坐着膝盖90度，大腿和上身90度，肘部90度。<br />  肘部一定要有依托，至少有椅子的扶手，我现在是用了大桌子，对着90的圆弧，两肘都放在桌面上。<br /><br />现在我的颈椎问题已经好多了。<br />总结一下，方法是综合的。但效果最明显的就是桌椅。其中最关键的就是肘部的依托，肘部放在桌面上我觉得是挺有效。<br />另外，不能觉得没有时间想健康问题，否则结果是不得不想。拿出你打游戏、写程序的劲头对待健康，肯定能解决问题的。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/25284#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/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><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 29 Sep 2006 11:15:45 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/25284</link>
        <guid>http://lucaslee.javaeye.com/blog/25284</guid>
      </item>
      <item>
        <title>缺陷管理系统ClearBug发布</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/24562" style="color:red;">http://lucaslee.javaeye.com/blog/24562</a>&nbsp;
          发表时间: 2006年09月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          看看网上流行的各种缺陷管理系统，总是觉得有所缺憾。<br />BugZilla看上去还不错，但安装各种Perl的插件就让人心生畏惧。<br />国内也有PHP做的，流程比较固定。<br />ClearQuest固然强大，但即使让我用D版的，也得费不少功夫自定义流程和表单。<br /><br />综合多方面的研究，于是自行写了一个缺陷管理、跟踪系统--Clearbug.<br />特色是流程比较灵活。提供三种预定义的流程:<br />1)小团队自由流程。分待解决/测试者验证/已挂起/已关闭等状态。<br />  特点是流程的下一个处理者可以提交时指定，不用项目经理必须参与，比较灵活。<br />2)小团队受控流程。状态同上。 <br />  特点是流程的下一处理者的角色是在流程中预定义的。由于定义在角色上，仍有一定灵活性，比如一个用户可以授予多个角色。<br />  关键是项目经理在其中起控制作用，即新提交的缺陷、修改后的验证、关闭缺陷都由项目经理分配、处理和控制。<br />3)个人软件流程。分待解决/已挂起/已关闭等状态。状态比前者少一个。<br />  流程总是自己到自己。主要用途是记录处理的过程和状态。 适合个人软件或单人开发的过程。<br /><br />是一个Java的B/S应用。<br />免费但不开源。<br /><br /><br />欢迎访问www.lucas-lee.com。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/24562#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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><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>Mon, 18 Sep 2006 16:41:18 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/24562</link>
        <guid>http://lucaslee.javaeye.com/blog/24562</guid>
      </item>
      <item>
        <title>开源琴棋报表1.3.3发布</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/24560" style="color:red;">http://lucaslee.javaeye.com/blog/24560</a>&nbsp;
          发表时间: 2006年09月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          轻量级。功能简明，易于使用，适用与中小型应用。<br /><br />特别针对中国式报表的特点进行设计，是更适合中国用户的报表工具。支持分组汇总，交叉报表等。 <br /><br />易于扩展。可以自行实现系统定义的接口，而扩展功能。可以扩展比如汇总算法、 数据格式化显示等功能。<br /><br />可以输出多种格式,包括HTML、PDF、EXCEL、CSV。其中PDF和EXCEL格式以良好的打印效果解决了报表的打印问题。 <br /><br />欢迎访问www.lucas-lee.com<br /><br />欢迎大家多提宝贵意见！
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/24560#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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>Mon, 18 Sep 2006 16:24:11 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/24560</link>
        <guid>http://lucaslee.javaeye.com/blog/24560</guid>
      </item>
      <item>
        <title>Web服务器开发环境下的线程安全问题</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/24545" style="color:red;">http://lucaslee.javaeye.com/blog/24545</a>&nbsp;
          发表时间: 2006年09月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Servlet是在多线程环境下的。即可能有多个请求发给一个servelt实例，每个请求是一个线程。<br />struts下的action也类似，同样在多线程环境下。可以参考struts user guide: http://struts.apache.org/struts-action/userGuide/building_controller.html 中的Action Class Design Guidelines一节:  Write code for a multi-threaded environment - Our controller servlet creates only one instance of your Action class, and uses this one instance to service all requests. Thus, you need to write thread-safe Action classes. Follow the same guidelines you would use to write thread-safe Servlets. <br />译:为多线程环境编写代码。我们的controller servlet指挥创建你的Action 类的一个实例，用此实例来服务所有的请求。因此，你必须编写线程安全的Action类。遵循与写线程安全的servlet同样的方针。<br />  <br />1.什么是线程安全的代码<br />  在多线程环境下能正确执行的代码就是线程安全的。<br />  安全的意思是能正确执行，否则后果是程序执行错误，可能出现各种异常情况。<br /><br />2.如何编写线程安全的代码<br />  很多书籍里都详细讲解了如何这方面的问题，他们主要讲解的是如何同步线程对共享资源的使用的问题。主要是对synchronized关键字的各种用法，以及锁的概念。<br />  Java1.5中也提供了如读写锁这类的工具类。这些都需要较高的技巧，而且相对难于调试。<br />  <br />  但是，线程同步是不得以的方法,是比较复杂的,而且会带来性能的损失。等效的代码中，不需要同步在编写容易度和性能上会更好些。<br />  我这里强调的是什么代码是始终为线程安全的、是不需要同步的。如下:<br />  1)常量始终是线程安全的，因为只存在读操作。<br />  2)对构造器的访问(new 操作)是线程安全的，因为每次都新建一个实例，不会访问共享的资源。<br />  3)最重要的是:局部变量是线程安全的。因为每执行一个方法，都会在独立的空间创建局部变量，它不是共享的资源。局部变量包括方法的参数变量。<br />    struts user guide里有：<br />    Only Use Local Variables - The most important principle that aids in thread-safe coding is to use only local variables, not instance variables , in your Action class.<br />    译:只使用用局部变量。--编写线程安全的代码最重要的原则就是，在Action类中只使用局部变量，不使用实例变量。<br /><br /> <br />总结：<br />    在Java的Web服务器环境下开发，要注意线程安全的问题。最简单的实现方式就是在Servlet和Struts Action里不要使用类变量、实例变量，但可以使用类常量和实例常量。<br />如果有这些变量，可以将它们转换为方法的参数传入，以消除它们。<br />    注意一个容易混淆的地方：被Servlet或Action调用的类中(如值对象、领域模型类)中是否可以安全的使用实例变量？如果你在每次方法调用时<br />新建一个对象，再调用它们的方法，则不存在同步问题---因为它们不是多个线程共享的资源，只有共享的资源才需要同步---而Servlet和Action的实例对于多个线程是共享的。<br />换句话说，Servlet和Action的实例会被多个线程同时调用，而过了这一层,如果在你自己的代码中没有另外启动线程，且每次调用后续业务对象时都是先新建一个实例再调用，则都是线程安全的。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/24545#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/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 18 Sep 2006 10:58:40 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/24545</link>
        <guid>http://lucaslee.javaeye.com/blog/24545</guid>
      </item>
      <item>
        <title>MySQL5之使用经验 </title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/24544" style="color:red;">http://lucaslee.javaeye.com/blog/24544</a>&nbsp;
          发表时间: 2006年09月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          MySQL5支持视图、存储过程、触发器等高级特性了，终于象个完整的数据库了！<br /><br />很高兴啊，我们做项目的时候选择性更强了。<br /><br />不过在我一个实际的网站项目中，发现事实和看上去的不太相同啊。是否支持这些特性和支持得多好毕竟是不同的问题！比如在使用Oracle时，发现在9i上能正确执行的统计SQL到8i上居然报错，无非是多用了几个嵌套的子查询。Oracle尚且如此，MySQL也的确不能有太高期望。<br /><br />下面列举一下MySQL5的问题：<br /><br />版本5.0.16中对视图进行排序时，会导致服务器崩溃。如:select * from 视图名 order by 某字段。所幸5.0.21版本解决了这个问题。不过我这只是随便一用就能碰上这种致命错误，谁知道还有多少bug隐藏着呢？ <br />存储过程更是不太爽。居然不支持递归，SQLServer和Oracle都早就支持了。郁闷，在处理树形数据时，只能写点固定树的深度的视图了。 <br />1.1.20版本的Query browser和1.1.9版本的Administrator客户端工具稳定性好差，每天能崩个几回。不过功能比以前强些了。Query browser中多粘贴点SQL脚本就能搞死它；CREATE 某东西，按执行多两次、或快了些也能搞死它。只能说比没有强，凑合用吧。 <br />其他基本功能用起来还不错，没碰到什么问题。当然MySQL有如此影响力肯定有他独到之处，对我来说除了免费外就是速度快、用户群大（则技术支持会比较多），否则可以考虑免费的其他数据库，如PostgreSQL，它的客户端工具就专业多了，初步感觉跟SQLServer的差不多了。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/24544#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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>Mon, 18 Sep 2006 10:57:45 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/24544</link>
        <guid>http://lucaslee.javaeye.com/blog/24544</guid>
      </item>
      <item>
        <title>编程方法的发展</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/24542" style="color:red;">http://lucaslee.javaeye.com/blog/24542</a>&nbsp;
          发表时间: 2006年09月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我想了解一下软件开发中的编程方法的历史，以及现在流行的方法的来龙去脉，但是没有找到相关的总结性的文章，于是自行总结了一下，不当之处，请大家批评指正。<br /><br />1.各种方法概述<br />  1)结构化编程<br />    程序应该按自上而下的顺序执行，不会做随便跳转。主要为了提高可读性(特别是控制结构的)，可自上而下的阅读代码，并且执行的顺序也大体是这样的。<br />    它的三个组成部分：顺序Sequence，选择selection,循环(或迭代)repetition (or iteration)。任何控制结构都可以用这三个部分组成。<br />    需要小心使用其他方式如：break,continue,return,throw-catch.<br />  2)模块化编程<br />    将逻辑相关的数据和函数放在一个模块中。<br />    它没有多个实例的概念，相当于面向对象中的仅包含静态方法和静态变量的类。不需要实例化即可直接调用方法，只存在一个"实例"。<br />    VB中的Module就是这个思想的应用。<br />  3)面向对象编程<br />    主要特点：封装,继承,多态。<br />    封装(Encapsulation):将逻辑相关的数据和方法(函数)放在一个类中。跟模块化编程做的一致。<br />    继承(Inheritance):将内容或接口重用，并实现类型的多态。<br />    多态(Polymorphism):不同的语义环境下，同一名称可以有多种不同的实现。<br />        具体表现为两类：<br />        同名方法不同内容，实现方式：使用重载(overload),当然方法的参数是不同的;<br />        同名类型不同内容，实现方式：使用覆盖(override)或实现(implement)。允许使用同一接口调用不同类的的实例对象。<br /><br />2.各种方法的目标<br />  结构化编程。重点是是控制结构，可看作是基本程序语句(无子程序)的结构；<br />  子程序化编程。似乎没有相关的历史潮流,但我认为加入它会使整个方法的发展过程更加完整。子程序(或过程、函数、方法)是模块化、面向对象编程的最重要的基石。<br />  模块化编程。重点是将数据和子程序逻辑相关的组合;<br />  面向对象编程。在模块化的基础上重点加入了模块之间的关系。这里的模块已演化为类。<br />3.方法体系<br />  上述几种编程方法可以归为一类，属于一个方法体系，其重点在于编程本身，力图管理并降低程序逻辑的复杂性。随其发展，管理的代码单元越来越大，越来越复杂，其方式也越来越接近日常的思维。核心是封装逻辑结构(子程序、模块、类)，以便在更高层次上获得简化的关系。<br />  我认为此体系中新的方法还未出现。现在流行的方法中:AOP(面向方面编程)，仅是此体系有益的补充；SOA面向服务架构，重点在于用统一的方式调用，而不依赖于底层技术，是组件化的一种形式，这不是这一类的主线方向。<br />  <br /><br />4.总结：<br />      以往的编程方法和原则在现代的方法中得到了保留和发展，这对新手是一个挑战，不循序渐进的学习这些技术，想要短期学会现代方法(如：面向对象编程)是困难的。<br />      记住这些编程方法的主旨是很有好处的。<br />      新的编程方法必将是历史方法的继承和发展，所以学好这些旧的方法非常重要。<br />      掌握这些在各种层出不穷的新语言和新工具中不变的精华，或许，我们可以不再疲于追赶新的技术潮流。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/24542#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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</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>Mon, 18 Sep 2006 10:56:29 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/24542</link>
        <guid>http://lucaslee.javaeye.com/blog/24542</guid>
      </item>
      <item>
        <title>如何删除字典数据？</title>
        <author>Lucas Lee</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lucaslee.javaeye.com">Lucas Lee</a>&nbsp;
          链接：<a href="http://lucaslee.javaeye.com/blog/22220" style="color:red;">http://lucaslee.javaeye.com/blog/22220</a>&nbsp;
          发表时间: 2006年09月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          所谓字典就是数据库应用中被其他表(通常加以外键约束)引用的表，如客户表引用客户类型，那么客户类型即为字典表。删除字典数据要考虑是否已被其他数据引用，一般不允许做级联删除。<br /><br />这个问题想必大家都碰到过，但各有各的 做法。本人与若干同事讨论过，将各种做法总结一下。<br /><br />物理删除，即用delete SQL删除。如果字典数据被引用，则会抛出违反外键约束的异常，将其封装为可读的信息提示给用户。JDBC中的异常类为SQLException，如何判断是违反外键约束的异常呢？有方法如下： <br />利用SQLException中的errorCode，这是数据库特有的错误编码。 <br />利用SQLException中的SQLState，在JAVA API DOC中说明这个是SQL99或XOPEN 标准的编码，而且可以用connection的meta data来判断符合哪个标准。经过的试验，说明这个meta data不太好用，但是SQLState还是较为统一的。   mysql5.0.21 sqlserver2000 oracle10 postgresql8 的试验报告见<br />http://blog.csdn.net/superbible_cs/archive/2006/09/01/1154315.aspx (是一个表格，这里贴不上。)<br />逻辑删除。即置表中的一个标记字段为已删除。查询时不可见，但实际还保留在表中。 好处是不用处理数据被引用的情况。它的缺点是，如果数据没有被引用，那么它其实可以被物理删除，但确留在系统中成为垃圾数据；其次在数据有唯一编码的情况下，被逻辑删除的数据实际上还占用着一个编码，有时用户会疑惑，明明表中查不到这个编码，我在新增的数据中使用这个编码却总提示编码已存在。 <br />    各位又是用的什么方法来处理的呢?你的方法有何优缺点，不妨一同讨论一下。
          <br/>
          <span style="color:red;">
            <a href="http://lucaslee.javaeye.com/blog/22220#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</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/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 01 Sep 2006 15:29:20 +0800</pubDate>
        <link>http://lucaslee.javaeye.com/blog/22220</link>
        <guid>http://lucaslee.javaeye.com/blog/22220</guid>
      </item>
  </channel>
</rss>