<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>chenlb 的学习笔迹</title>
    <description></description>
    <link>http://chenlb.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>solr 分布式(复制)配置</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/211807" style="color:red;">http://chenlb.javaeye.com/blog/211807</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; solr 分布式其实是分发，这概念像Mysql的复制。所有的索引的改变都在主服务器里，所有的查询都在从服务里。从服务器不断地(定时)从主服务器拉内容，以保持数据一致。<br /><br />先描述下我的环境：<br />solr-master(192.168.1.181), solr-slave(192.168.1.155), jdke1.6.0_06, tomcat-5.5.26, solr-1.2&nbsp;<br />tomcat_home在 /home/chenlb/tomcat-5.5.26<br />solr_home在 /home/chenlb/solr-home<br />solr解压后的目录 /home/chenlb/solr-1.2.0<br />最好两机可以ssh无密码交互，ssh无密码登录请看：<a href="http://chenlb.blogjava.net/archive/2008/07/03/212293.html" title="http://www.blogjava.net/chenlb/archive/2008/07/03/212293.html">http://www.blogjava.net/chenlb/archive/2008/07/03/212293.html</a></p>
<p><a href="../../../blog/211809">http://chenlb.javaeye.com/blog/211809</a></p>
<p><br /><br />&nbsp;&nbsp;&nbsp; solr的分发是用rsync的。<br />&nbsp;&nbsp;&nbsp; 快照与分发过程：<br /><br />1.<strong style="color: #ff6600">snapshooter</strong>&nbsp;命令在主服务器产生快照。一般在commit和optimize之后被solr调用。<br /><br />2.<strong style="color: #ff6600">snappuller</strong> 命令在从服务器运行，所做的事是从主服务器拉最新的快照。 用rsync的daemon模式来运行可以获得更好的性能与更底的CPU利用率。<br /><br />3.<strong style="color: #ff6600">snapinstaller</strong> 命令在从服务器运行，当从服务器从主服务器拉完快照后才执行。它会通知本地Solr服务器打开一个新的index reader，然后预热这个新index reader的缓存，此时有请求，原来的index reader继续为这此请求服务。一但预热完成，Solr 启用新的index reader，旧的被消亡。<br /><br />&nbsp;&nbsp;&nbsp; Solr 的Distribution(分发) 在Scripts文件里记录。在solr_home/conf/scripts.conf文件里。<br /><br />我现在这样配置：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000;">user</span><span style="color: #000000;">=</span><span style="color: #000000;">chenlb<br />solr_hostname</span><span style="color: #000000;">=</span><span style="color: #000000;">localhost<br />solr_port</span><span style="color: #000000;">=</span><span style="color: #000000;">8080</span><span style="color: #000000;"><br />rsyncd_port</span><span style="color: #000000;">=</span><span style="color: #000000;">18080</span><span style="color: #000000;"><br />data_dir</span><span style="color: #000000;">=/</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">chenlb</span><span style="color: #000000;">/</span><span style="color: #000000;">solr</span><span style="color: #000000;">-</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">data<br />webapp_name</span><span style="color: #000000;">=</span><span style="color: #000000;">solr<br />master_host</span><span style="color: #000000;">=</span><span style="color: #000000;">192.168</span><span style="color: #000000;">.</span><span style="color: #000000;">1.181</span><span style="color: #000000;"><br />master_data_dir</span><span style="color: #000000;">=/</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">chenlb</span><span style="color: #000000;">/</span><span style="color: #000000;">solr</span><span style="color: #000000;">-</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">data<br />master_status_dir</span><span style="color: #000000;">=/</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">chenlb</span><span style="color: #000000;">/</span><span style="color: #000000;">solr</span><span style="color: #000000;">-</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">logs</span></div>
<p><br />上面的配置两机都一样。<br /><br />1.安装好solr后启动它们，怎样在tomcat安装solr请看：<a href="http://chenlb.blogjava.net/archive/2008/03/25/188459.html" title="http://www.blogjava.net/chenlb/archive/2008/03/25/188459.html">http://www.blogjava.net/chenlb/archive/2008/03/25/188459.html</a></p>
<p><a href="../../../blog/196489">http://chenlb.javaeye.com/blog/196489</a></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000;">[chenlb@solr</span><span style="color: #000000;">-</span><span style="color: #000000;">master&nbsp;</span><span style="color: #000000;">~</span><span style="color: #000000;">]$&nbsp;.</span><span style="color: #000000;">/</span><span style="color: #000000;">tomcat</span><span style="color: #000000;">-</span><span style="color: #000000;">5.5</span><span style="color: #000000;">.</span><span style="color: #000000;">26</span><span style="color: #000000;">/</span><span style="color: #000000;">bin</span><span style="color: #000000;">/</span><span style="color: #000000;">startup.sh</span></div>
<p><br />启用且启动rsync</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000;">[chenlb@solr</span><span style="color: #000000;">-</span><span style="color: #000000;">master&nbsp;</span><span style="color: #000000;">~</span><span style="color: #000000;">]$&nbsp;.</span><span style="color: #000000;">/</span><span style="color: #000000;">solr</span><span style="color: #000000;">-</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">bin</span><span style="color: #000000;">/</span><span style="color: #000000;">rsyncd</span><span style="color: #000000;">-</span><span style="color: #000000;">enable&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">u&nbsp;chenlb&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">v<br /><span style="background-color: #eeeeee;">[chenlb@solr-master ~]$ ./solr-home/bin/rsyncd-start -u chenlb -v<br /></span></span></div>
<p>&nbsp;</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000;">[chenlb@solr</span><span style="color: #000000;">-</span><span style="color: #000000;">slave&nbsp;</span><span style="color: #000000;">~</span><span style="color: #000000;">]$&nbsp;.</span><span style="color: #000000;">/</span><span style="color: #000000;">tomcat</span><span style="color: #000000;">-</span><span style="color: #000000;">5.5</span><span style="color: #000000;">.</span><span style="color: #000000;">26</span><span style="color: #000000;">/</span><span style="color: #000000;">bin</span><span style="color: #000000;">/</span><span style="color: #000000;">startup.sh</span></div>
<p><br />2.solr-master<br />先修改post.sh</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000;">[chenlb@solr</span><span style="color: #000000;">-</span><span style="color: #000000;">master&nbsp;</span><span style="color: #000000;">~</span><span style="color: #000000;">]$&nbsp;cd&nbsp;solr</span><span style="color: #000000;">-</span><span style="color: #000000;">1.2</span><span style="color: #000000;">.0</span><span style="color: #000000;">/</span><span style="color: #000000;">example</span><span style="color: #000000;">/</span><span style="color: #000000;">exampledocs</span><span style="color: #000000;">/</span><span style="color: #000000;"><br />[chenlb@solr</span><span style="color: #000000;">-</span><span style="color: #000000;">master&nbsp;exampledocs]$&nbsp;vi&nbsp;post.sh<br />[chenlb@solr</span><span style="color: #000000;">-</span><span style="color: #000000;">master&nbsp;exampledocs]$<br /></span><span style="color: #008000;">#</span><span style="color: #008000;">把http://localhost:8389/solr/update改下面的</span><span style="color: #008000;"><br /></span><span style="color: #000000;">http:</span><span style="color: #000000;">//</span><span style="color: #000000;">localhost:</span><span style="color: #000000;">8080</span><span style="color: #000000;">/</span><span style="color: #000000;">solr</span><span style="color: #000000;">/</span><span style="color: #000000;">update</span></div>
<p><br />提交数据</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000;">[chenlb@solr</span><span style="color: #000000;">-</span><span style="color: #000000;">master&nbsp;exampledocs]$&nbsp;.</span><span style="color: #000000;">/</span><span style="color: #000000;">post.sh&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">.xml</span></div>
<p><br />产生快照</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000;">[chenlb@solr</span><span style="color: #000000;">-</span><span style="color: #000000;">master&nbsp;</span><span style="color: #000000;">~</span><span style="color: #000000;">]$&nbsp;.</span><span style="color: #000000;">/</span><span style="color: #000000;">solr</span><span style="color: #000000;">-</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">bin</span><span style="color: #000000;">/</span><span style="color: #000000;">snapshooter&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">u&nbsp;chenlb&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">v</span></div>
<p><br />说明：由于&lt;listener event="postCommit" class="solr.RunExecutableListener"&gt;...&lt;/listener&gt;没有设置成功（出现java.io.IOException: Cannot run program "snapshooter" (in directory "solr/bin"): java.io.IOException: error=2, No such file or directory，现在还没解决），可以只能手动生成快照(当然也可以cron)<br /><br />3.solr-slave<br />启用快照下拉</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000;">[chenlb@solr</span><span style="color: #000000;">-</span><span style="color: #000000;">slave&nbsp;</span><span style="color: #000000;">~</span><span style="color: #000000;">]$&nbsp;.</span><span style="color: #000000;">/</span><span style="color: #000000;">solr</span><span style="color: #000000;">-</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">bin</span><span style="color: #000000;">/</span><span style="color: #000000;">snappuller</span><span style="color: #000000;">-</span><span style="color: #000000;">enable&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">u&nbsp;chenlb&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">v</span></div>
<p><br />拉快照</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000;">[chenlb@solr</span><span style="color: #000000;">-</span><span style="color: #000000;">slave&nbsp;</span><span style="color: #000000;">~</span><span style="color: #000000;">]$&nbsp;.</span><span style="color: #000000;">/</span><span style="color: #000000;">solr</span><span style="color: #000000;">-</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">bin</span><span style="color: #000000;">/</span><span style="color: #000000;">snappuller&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">u&nbsp;chenlb&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">v</span></div>
<p><br />安装</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000;">[chenlb@solr</span><span style="color: #000000;">-</span><span style="color: #000000;">slave&nbsp;</span><span style="color: #000000;">~</span><span style="color: #000000;">]$&nbsp;.</span><span style="color: #000000;">/</span><span style="color: #000000;">solr</span><span style="color: #000000;">-</span><span style="color: #000000;">home</span><span style="color: #000000;">/</span><span style="color: #000000;">bin</span><span style="color: #000000;">/</span><span style="color: #000000;">snapinstaller&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">u&nbsp;chenlb&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">v</span></div>
<p><br /><br />现在可以在solr-slave里看结果了：<br /><a href="http://192.168.1.155:8080/solr/select?q=solr">http://192.168.1.155:8080/solr/select?q=solr</a><br /><a href="http://192.168.1.181:8080/solr/select?q=solr">http://192.168.1.181:8080/solr/select?q=solr</a><br /><br />看结果是否一样。</p>
          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/211807#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/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><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 16:49:00 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/211807</link>
        <guid>http://chenlb.javaeye.com/blog/211807</guid>
      </item>
      <item>
        <title>svn服务器迁移, 旧的项目url怎么办?</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/211808" style="color:red;">http://chenlb.javaeye.com/blog/211808</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; 由于svn服务器的调整，很多项目里的链接还是旧的服务器，又由于项目里有些东西还没有提交，所不能删除svn的元数据，怎样才能适应svn的迁移呢？<br /><br />&nbsp;&nbsp;&nbsp; 我的项目全在Eclipse下面，用subeclipse客户端，在subeclipse找了好久没找到此功能，最后在TortoiseSVN找，找到了右击本地与svn相连的目录--&gt;"TortoiseSVN"--&gt;"Reloate..."在to URL那改就行了。^_^<br />&nbsp; <br />&nbsp;&nbsp;&nbsp; subeclipse远不如TortoiseSVN强大，且它还依赖TortoiseSVN&mdash;&mdash;如果没有TortoiseSVN，subeclipse不能保存密码。</p>
          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/211808#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/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, 04 Jul 2008 11:06:00 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/211808</link>
        <guid>http://chenlb.javaeye.com/blog/211808</guid>
      </item>
      <item>
        <title>ssh 免密码登录</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/211809" style="color:red;">http://chenlb.javaeye.com/blog/211809</a>&nbsp;
          发表时间: 2008年07月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对，下面我以CentOS为例。<br />
<br />
有机器A(192.168.1.155)，B(192.168.1.186)。现想A通过ssh免密码登录到B。<br />
<br />
1.在A机下生成公钥/私钥对。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">[chenlb@A</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]$&nbsp;ssh</span><span style="color: #000000">-</span><span style="color: #000000">keygen&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">t&nbsp;rsa&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">P&nbsp;</span><span style="color: #800000">''</span></div>
<br />
-P表示密码，-P '' 就表示空密码，也可以不用-P参数，这样就要三车回车，用-P就一次回车。<br />
它在/home/chenlb下生成.ssh目录，.ssh下有id_rsa和id_rsa.pub。<br />
<br />
2.把A机下的id_rsa.pub复制到B机下，在B机的.ssh/authorized_keys文件里，我用scp复制。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">[chenlb@A&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]$&nbsp;scp&nbsp;.ssh</span><span style="color: #000000">/</span><span style="color: #000000">id_rsa.pub&nbsp;chenlb@</span><span style="color: #000000">192.168</span><span style="color: #000000">.</span><span style="color: #000000">1.181</span><span style="color: #000000">:</span><span style="color: #000000">/</span><span style="color: #000000">home</span><span style="color: #000000">/</span><span style="color: #000000">chenlb</span><span style="color: #000000">/</span><span style="color: #000000">id_rsa.pub&nbsp;<br />
chenlb@</span><span style="color: #000000">192.168</span><span style="color: #000000">.</span><span style="color: #000000">1.181</span><span style="color: #800000">'</span><span style="color: #800000">s&nbsp;password:</span><span style="color: #800000"><br />
</span><span style="color: #000000">id_rsa.pub&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">100</span><span style="color: #000000">%</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #000000">223</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0.2KB</span><span style="color: #000000">/</span><span style="color: #000000">s&nbsp;&nbsp;&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">:</span><span style="color: #000000">00</span></div>
<br />
由于还没有免密码登录的，所以要输入密码。<br />
<br />
3.B机把从A机复制的id_rsa.pub添加到.ssh/authorzied_keys文件里。 <br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">[chenlb@B&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]$&nbsp;cat&nbsp;id_rsa.pub&nbsp;</span><span style="color: #000000">&gt;&gt;</span><span style="color: #000000">&nbsp;.ssh</span><span style="color: #000000">/</span><span style="color: #000000">authorized_keys<br />
[chenlb@B&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]$&nbsp;chmod&nbsp;</span><span style="color: #000000">600</span><span style="color: #000000">&nbsp;.ssh</span><span style="color: #000000">/</span><span style="color: #000000">authorized_keys</span></div>
<br />
<strong style="color: #ff6600">authorized_keys的权限要是600</strong>。<br />
<br />
4.A机登录B机。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">[chenlb@A&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]$&nbsp;ssh&nbsp;</span><span style="color: #000000">192.168</span><span style="color: #000000">.</span><span style="color: #000000">1.181</span><span style="color: #000000"><br />
The&nbsp;authenticity&nbsp;of&nbsp;host&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">192.168.1.181&nbsp;(192.168.1.181)</span><span style="color: #800000">'</span><span style="color: #000000">&nbsp;can</span><span style="color: #800000">'</span><span style="color: #800000">t&nbsp;be&nbsp;established.</span><span style="color: #800000"><br />
</span><span style="color: #000000">RSA&nbsp;key&nbsp;fingerprint&nbsp;</span><span style="color: #0000ff">is</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">00</span><span style="color: #000000">:a6:a8:</span><span style="color: #000000">87</span><span style="color: #000000">:eb:c7:</span><span style="color: #000000">40</span><span style="color: #000000">:</span><span style="color: #000000">10</span><span style="color: #000000">:</span><span style="color: #000000">39</span><span style="color: #000000">:cc:a0:eb:</span><span style="color: #000000">50</span><span style="color: #000000">:d9:6a:5b.<br />
Are&nbsp;you&nbsp;sure&nbsp;you&nbsp;want&nbsp;to&nbsp;</span><span style="color: #0000ff">continue</span><span style="color: #000000">&nbsp;connecting&nbsp;(yes</span><span style="color: #000000">/</span><span style="color: #000000">no)?&nbsp;yes<br />
Warning:&nbsp;Permanently&nbsp;added&nbsp;</span><span style="color: #800000">'</span><span style="color: #800000">192.168.1.181</span><span style="color: #800000">'</span><span style="color: #000000">&nbsp;(RSA)&nbsp;to&nbsp;the&nbsp;list&nbsp;of&nbsp;known&nbsp;hosts.<br />
Last&nbsp;login:&nbsp;Thu&nbsp;Jul&nbsp;&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">&nbsp;0</span><span style="color: #000000">9</span><span style="color: #000000">:</span><span style="color: #000000">53</span><span style="color: #000000">:</span><span style="color: #000000">18</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">2008</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;chenlb</span><span style="color: #000000"><br />
[chenlb@B&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]$</span></div>
<br />
第一次登录是时要你输入yes。<br />
<br />
现在A机可以无密码登录B机了。<br />
<br />
小结：登录的机子可有私钥，被登录的机子要有登录机子的公钥。这个公钥/私钥对一般在私钥宿主机产生。上面是用rsa算法的公钥/私钥对，当然也可以用dsa(对应的文件是id_dsa，id_dsa.pub)<br />
<br />
想让A，B机无密码互登录，那B机以上面同样的方式配置即可。<br />
<br />
参考：SSH-KeyGen 的用法 <a href="http://blog.163.com/chen98_2006@126/blog/static/158584272007101862513886/">http://blog.163.com/chen98_2006@126/blog/static/158584272007101862513886/</a><br />
<br />

          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/211809#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/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>Thu, 03 Jul 2008 12:19:00 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/211809</link>
        <guid>http://chenlb.javaeye.com/blog/211809</guid>
      </item>
      <item>
        <title>cron 用法</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/211810" style="color:red;">http://chenlb.javaeye.com/blog/211810</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我用CentOS为例。<br />
<br />
简介：<br />
&nbsp;&nbsp;&nbsp;&nbsp;cron来源于希腊单词chronos（意为&#8220;时间&#8221;），是linux系统下一个自动执行指定任务的程序。例如，你想在每晚睡觉期间创建某些文件或文件夹的备份，就可以用cron来自动执行。<br />
<br />
CentOS的cron默认是开机启动的，如果没有开机启动可以用chkconfig<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">[root@chenlb-pc</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]#&nbsp;chkconfig&nbsp;crond&nbsp;on</span></div>
<br />
查看crond是否开机启动<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">[root@chenlb</span><span style="color: #000000">-</span><span style="color: #000000">pc&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]#&nbsp;chkconfig&nbsp;</span><span style="color: #000000">--</span><span style="color: #000000">list&nbsp;crond<br />
crond&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:关闭&nbsp; 1:关闭&nbsp; 2:启用&nbsp; 3:启用&nbsp; 4:启用&nbsp; 5:启用&nbsp; 6:关闭</span></div>
<br />
说明已经是开机启动。<br />
<br />
cron是执行crontab里的任务，所以要把任务加到crontab里。<br />
<br />
1.查看当前用户的任务。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">[chenlb@chenlb</span><span style="color: #000000">-</span><span style="color: #000000">pc&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]$&nbsp;crontab&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">l<br />
no&nbsp;crontab&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;chenlb<br />
</span></div>
<br />
现在还没有任务，可以用crontab -e来编辑任务(可以直接输入crontab是新建，然后回车，Ctrl+D保存，注意这样会覆盖以前的，不建议直接用crontab)，然后再新的文件里输入以下内容。<br />
<br />
2.编辑任务<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">[chenlb@chenlb</span><span style="color: #000000">-</span><span style="color: #000000">pc&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]$&nbsp;crontab&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">e</span></div>
<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">*/</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;*&nbsp;*&nbsp;*&nbsp;*&nbsp;echo&nbsp;`date`&nbsp;&gt;&gt;&nbsp;/home/chenlb/cron-log.txt</span></div>
<br />
上面的意思是指每一分钟打印时间放到/home/chenlb/cron-log.txt文件里，过一分钟后看是否有效，如下命令。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">[chenlb@chenlb</span><span style="color: #000000">-</span><span style="color: #000000">pc&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]$&nbsp;tail&nbsp;</span><span style="color: #000000">/</span><span style="color: #000000">home</span><span style="color: #000000">/</span><span style="color: #000000">chenlb</span><span style="color: #000000">/</span><span style="color: #000000">cron</span><span style="color: #000000">-</span><span style="color: #000000">log.txt<br />
Wed&nbsp;Jul&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">15</span><span style="color: #000000">:</span><span style="color: #000000">43</span><span style="color: #000000">:</span><span style="color: #000000">01</span><span style="color: #000000">&nbsp;CST&nbsp;</span><span style="color: #000000">2008</span></div>
<br />
3.删除任务<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">[chenlb@chenlb</span><span style="color: #000000">-</span><span style="color: #000000">pc&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]$&nbsp;crontab&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">r</span></div>
<br />
<br />
说明：如果是root除了有以上的功能，还有-u参数为用户查看、编辑、删除任务，如用chenlb编辑任务。<br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">[root@chenlb</span><span style="color: #000000">-</span><span style="color: #000000">pc&nbsp;</span><span style="color: #000000">~</span><span style="color: #000000">]#&nbsp;crontab&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">u&nbsp;chenlb&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">e</span></div>
<br />
解说下任务的语法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;min hour day month week&nbsp;user command<br />
<br />
忽略用&#8220;*&#8221;，每多少的用&#8220;/多少&#8221;，多个的用&#8220;,&#8221;，到关系的用&#8220;-&#8221;<br />
<br />
---------------------------------来自htmlor's blog的示例----------------------------------------------<br />
<p>以下是cron语句中的字段与字段说明：</p>
<table cellspacing="0" border="0" cellpadding="5">
    <tbody>
        <tr>
            <td>字段</td>
            <td>说明</td>
        </tr>
        <tr>
            <td>1</td>
            <td>分钟（0-59）</td>
        </tr>
        <tr>
            <td>2</td>
            <td>小时（2-24）</td>
        </tr>
        <tr>
            <td>3</td>
            <td>日期（1-31）</td>
        </tr>
        <tr>
            <td>4</td>
            <td>月份（1-12；或英文缩写Jan、Feb等）</td>
        </tr>
        <tr>
            <td>5</td>
            <td>周几（0-6，0为周日；或单词缩写Sun、Mon等）</td>
        </tr>
        <tr>
            <td>6</td>
            <td>用户名（执行命令时以此用户的身份）</td>
        </tr>
        <tr>
            <td>7</td>
            <td>要执行的命令（路径）</td>
        </tr>
        <tr>
            <td></td>
            <td></td>
        </tr>
    </tbody>
</table>
<p>现在来看第一行：</p>
<pre>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">12</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">3</span><span style="color: #000000">&nbsp;*&nbsp;*&nbsp;*&nbsp;root&nbsp;tar&nbsp;czf&nbsp;/usr/local/backups/daily/etc.tar.gz&nbsp;/etc&nbsp;&gt;&gt;&nbsp;/dev/null&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&gt;&amp;</span><span style="color: #000000">1</span></div>
</pre>
<p>这条语句将在<strong>每天的凌晨3点12分</strong>（03:12）运行 <code>tar czf /usr/local/backups/daily/etc.tar.gz /etc</code> 命令。<code>&gt;&gt; /dev/null 2&gt;&amp;1</code> 表示把所有标准输出发送到 /dev/null（linux的回收站），把标准错误输出（2）发送到和标准输出（1）同样的地方（即 /dev/null）。运行这行命令将不会产生任何输出。</p>
<p>这条语句可以变得稍微复杂一点：</p>
<pre>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">30</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">15</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">13</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">6</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">&nbsp;*&nbsp;root&nbsp;tar&nbsp;czf&nbsp;/usr/local/backups/daily/etc.tar.gz&nbsp;/etc&nbsp;&gt;&gt;&nbsp;/dev/null&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&gt;&amp;</span><span style="color: #000000">1</span></div>
</pre>
<p>它将在<strong>6月13日周一的15:30</strong>运行 <code>tar czf /usr/local/backups/daily/etc.tar.gz /etc</code> 命令。</p>
<p>以下语句可以达到同样的效果：</p>
<pre>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">30</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">15</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">13</span><span style="color: #000000">&nbsp;Jun&nbsp;Mon&nbsp;*&nbsp;root&nbsp;tar&nbsp;czf&nbsp;/usr/local/backups/daily/etc.tar.gz&nbsp;/etc&nbsp;&gt;&gt;&nbsp;/dev/null&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&gt;&amp;</span><span style="color: #000000">1</span></div>
</pre>
<p>如果你想以用户joey的身份<strong>每小时的第15分钟</strong>运行某个程序，可以使用：</p>
<pre>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">15</span><span style="color: #000000">&nbsp;*&nbsp;*&nbsp;*&nbsp;*&nbsp;joey&nbsp;/usr/bin/somecommand&nbsp;&gt;&gt;&nbsp;/dev/null&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&gt;&amp;</span><span style="color: #000000">1</span></div>
</pre>
<p>其中的星号（*）是通配符，表示cron将忽略这个字段。</p>
<p>如果你想<strong>每两小时</strong>就运行某个程序，可以在小时字段里使用 <code>*/2</code>。它将会在2点，4点，6点&#8230;&#8230;22点，24点运行。具体语句如下：</p>
<pre>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">0</span><span style="color: #000000">&nbsp;*/</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;*&nbsp;*&nbsp;*&nbsp;joey&nbsp;/usr/bin/somecommand&nbsp;&gt;&gt;&nbsp;/dev/null&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&gt;&amp;</span><span style="color: #000000">1</span></div>
</pre>
<p>cron语句中还可以使用逗号（,）来指定多个时间。例如你想在<strong>每小时的15分和30分</strong>运行某个程序，可以在分钟字段使用 <code>15,30</code>：</p>
<pre>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">15</span><span style="color: #000000">,</span><span style="color: #000000">30</span><span style="color: #000000">&nbsp;*&nbsp;*&nbsp;*&nbsp;*&nbsp;joey&nbsp;/usr/bin/somecommand&nbsp;&gt;&gt;&nbsp;/dev/null&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&gt;&amp;</span><span style="color: #000000">1</span></div>
</pre>
<p>如果你想在<strong>每月的第一周（即1号到7号）每天的指定时间</strong>运行某个程序，可以在日期字段使用 <code>1-7</code>：</p>
<pre>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">15</span><span style="color: #000000">,</span><span style="color: #000000">30</span><span style="color: #000000">&nbsp;*/</span><span style="color: #000000">2</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">-</span><span style="color: #000000">7</span><span style="color: #000000">&nbsp;*&nbsp;*&nbsp;joey&nbsp;/usr/bin/somecommand&nbsp;&gt;&gt;&nbsp;/dev/null&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&gt;&amp;</span><span style="color: #000000">1</span></div>
</pre>
<p>这条语句将在<strong>每月的第1-7日每两小时的15分和30分</strong>（02:15，02:30&#8230;&#8230;22: 15，22:30等）运行 <code>/usr/bin/somecommand</code> 命令。</p>
<p>如果你想在<strong>每天的16:18</strong>执行一个脚本集合，可以把所有要执行的脚本放到一个目录中（如 /home/username/cron），可以使用：</p>
<pre>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #000000">18</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">16</span><span style="color: #000000">&nbsp;*&nbsp;*&nbsp;*&nbsp;root&nbsp;run-parts&nbsp;/home/username/cron&nbsp;&gt;&gt;&nbsp;/dev/null&nbsp;</span><span style="color: #000000">2</span><span style="color: #000000">&gt;&amp;</span><span style="color: #000000">1</span></div>
</pre>
<p>如果你想保存某个程序的输出结果， 可以把 <code>&gt;&gt; /dev/null 2&gt;&amp;1</code> 替换为 <code>&gt;&gt; /home/user/somecommand.log 2&gt;&amp;1</code> 。</p>
<br />
<br />
参考：<a href="http://blog.htmlor.com/2006/07/25/cron_guide/">http://blog.htmlor.com/2006/07/25/cron_guide/</a> 

          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/211810#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>Wed, 02 Jul 2008 16:23:00 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/211810</link>
        <guid>http://chenlb.javaeye.com/blog/211810</guid>
      </item>
      <item>
        <title>solr 术语</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/208179" style="color:red;">http://chenlb.javaeye.com/blog/208179</a>&nbsp;
          发表时间: 2008年06月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; Solr 涉及的术语，简单介绍下：</p>
<ul>
<li>Auto-warming(自动预热) 当打开一个新的缓存时，它把在旧缓存里命中较高的键/值添加到新的缓存里。</li>
<li>Constraint(限制) 限制对象集的方法。</li>
<li>Facet(层面) 对象集的一个方面或特定的一部分，这可以用来资源分类。</li>
<li>Filter(过虑器) 它由上下方决定，可能是：<br />1. Constraint(限制)的那称呼。<br />2. 限制查询结果的"fq"参数。<br />3. 涉及特定的Lucene的"Filter"类。</li>
<li>Solr Home Dir(Solr主目录) 又叫Solr Home Directory或Solr Home，它是Solr查找配置文件、数据、插件的主要目录，默认是./solr目录，可以JNDI配置solr/home属性，也可配置系统的solr.solr.home属性。</li>
<li>Static warming(静态预热) 当newSearcher 和 firstSearcher 的事件监听器强逼预热事件时，Solr会根据solrconfig.xml配置里的"static"查询来填充缓存。</li>
</ul>
<p>来源：<a href="http://wiki.apache.org/solr/SolrTerminology">http://wiki.apache.org/solr/SolrTerminology</a></p>
<p>&nbsp;</p>
<p>说的不对的地方，希望指出，一起学习。</p>
          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/208179#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/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><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 Jun 2008 11:52:31 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/208179</link>
        <guid>http://chenlb.javaeye.com/blog/208179</guid>
      </item>
      <item>
        <title>Levenshtein Distance(LD)-计算两字符串相似度算法</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/207631" style="color:red;">http://chenlb.javaeye.com/blog/207631</a>&nbsp;
          发表时间: 2008年06月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; 两字符串相似度计算方法有好多，现对基于编距的算法的相似度计算自己总结下。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 简单介绍下Levenshtein Distance(LD)：LD 可能衡量两字符串的相似性。它们的距离就是一个字符串转换成那一个字符串过程中的添加、删除、修改数值。</p>
<p>&nbsp;&nbsp;&nbsp; 举例：</p>
<ul>
<li>如果str1="test"，str2="test"，那么LD(str1,str2) = 0。没有经过转换。</li>
<li>如果str1="test"，str2="tent"，那么LD(str1,str2) = 1。str1的"s"转换"n"，转换了一个字符，所以是1。</li>
</ul>
<p>如果它们的距离越大，说明它们越是不同。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; Levenshtein distance最先是由俄国科学家Vladimir Levenshtein在1965年发明，用他的名字命名。不会拼读，可以叫它edit distance（编辑距离）。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; Levenshtein distance可以用来：</p>
<ul>
<li>Spell checking(拼写检查)</li>
<li>Speech recognition(语句识别)</li>
<li>DNA analysis(DNA分析)</li>
<li>Plagiarism detection(抄袭检测)</li>
</ul>
<p>LD用m*n的矩阵存储距离值。算法大概过程：</p>
<ol>
<li>str1或str2的长度为0返回另一个字符串的长度。</li>
<li>初始化(n+1)*(m+1)的矩阵d，并让第一行和列的值从0开始增长。</li>
<li>扫描两字符串（n*m级的），如果：str1[i] == str2[j]，用temp记录它，为0。否则temp记为1。然后在矩阵d[i][j]赋于d[i-1][j]+1 、d[i][j-1]+1、d[i-1][j-1]+temp三者的最小值。</li>
<li>扫描完后，返回矩阵的最后一个值即d[n][m]</li>
</ol>
<p>最后返回的是它们的距离。怎么根据这个距离求出相似度呢？因为它们的最大距离就是两字符串长度的最大值。对字符串不是很敏感。现我把相似度计算公式定为1-它们的距离/字符串长度最大值。</p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; 源码：</p>
<pre name="code" class="java">package com.chenlb.algorithm;

/**
 * 编辑距离的两字符串相似度
 * 
 * @author chenlb 2008-6-24 下午06:41:55
 */
public class Similarity {

	private int min(int one, int two, int three) {
		int min = one;
		if(two &lt; min) {
			min = two;
		}
		if(three &lt; min) {
			min = three;
		}
		return min;
	}
	
	public int ld(String str1, String str2) {
		int d[][];	//矩阵
		int n = str1.length();
		int m = str2.length();
		int i;	//遍历str1的
		int j;	//遍历str2的
		char ch1;	//str1的
		char ch2;	//str2的
		int temp;	//记录相同字符,在某个矩阵位置值的增量,不是0就是1
		if(n == 0) {
			return m;
		}
		if(m == 0) {
			return n;
		}
		d = new int[n+1][m+1];
		for(i=0; i&lt;=n; i++) {	//初始化第一列
			d[i][0] = i;
		}
		for(j=0; j&lt;=m; j++) {	//初始化第一行
			d[0][j] = j;
		}
		for(i=1; i&lt;=n; i++) {	//遍历str1
			ch1 = str1.charAt(i-1);
			//去匹配str2
			for(j=1; j&lt;=m; j++) {
				ch2 = str2.charAt(j-1);
				if(ch1 == ch2) {
					temp = 0;
				} else {
					temp = 1;
				}
				//左边+1,上边+1, 左上角+temp取最小
				d[i][j] = min(d[i-1][j]+1, d[i][j-1]+1, d[i-1][j-1]+temp);
			}
		}
		return d[n][m];
	}
	
	public double sim(String str1, String str2) {
		int ld = ld(str1, str2);
		return 1 - (double) ld / Math.max(str1.length(), str2.length()); 
	}
	
	public static void main(String[] args) {
		Similarity s = new Similarity();
		String str1 = "chenlb.blogjava.net";
		String str2 = "chenlb.javaeye.com";
		System.out.println("ld="+s.ld(str1, str2));
		System.out.println("sim="+s.sim(str1, str2));
	}
}
</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>不知sim方法中的公式是合理，个人认为差强人意思，不知javaeyer们，有没有高见，指点一二，^_^</p>
<p>&nbsp;</p>
<p>参考: <a href="http://www.merriampark.com/ld.htm">http://www.merriampark.com/ld.htm</a></p>
          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/207631#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>Tue, 24 Jun 2008 18:46:11 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/207631</link>
        <guid>http://chenlb.javaeye.com/blog/207631</guid>
      </item>
      <item>
        <title>不抛出越界异常的求子串方法</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/205132" style="color:red;">http://chenlb.javaeye.com/blog/205132</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp; 用String.substring方法，不小心会有越界异常。现实现一个没抛出越界异常，越界就返回null，不过直接返回的再用其它方法，可能有Null异常。现还实现可以负index的，可能逆向的。</p>
<pre name="code" class="java">package com.chenlb.util;

public class StringUtil {
	
	/**
	 * start与end均可负数&lt;br/&gt;
	 * start &lt; end正向取, start &gt; end逆向取&lt;br/&gt;
	 * 示例:str="I am chenlb"&lt;br/&gt;
	 * StringUtil.substring(str, 0, 12) -&gt; null&lt;br/&gt;
	 * StringUtil.substring(str, 12, 12) -&gt; null&lt;br/&gt;
	 * StringUtil.substring(str, 12, 13) -&gt; null&lt;br/&gt;
	 * StringUtil.substring(str, 4, 4) -&gt; ""&lt;br/&gt;
	 * StringUtil.substring(str, 0, 4) -&gt; "I am"&lt;br/&gt;
	 * StringUtil.substring(str, -4, -1) -&gt; "enl"&lt;br/&gt;
	 * StringUtil.substring(str, -2, 4) -&gt; "lbI am"&lt;br/&gt;
	 * StringUtil.substring(str, 4, 0) -&gt; "ma I"&lt;br/&gt;
	 * StringUtil.substring(str, -1, -4) -&gt; "lne"&lt;br/&gt;
	 * StringUtil.substring(str, 1, -4) -&gt; "Iblne"&lt;br/&gt;
	 * StringUtil.substring(str, 0, -4) -&gt; "blne"&lt;br/&gt;
	 * StringUtil.substring(str, -4, 0) -&gt; "enlb"&lt;br/&gt;
	 * @return 越界返回null, start==end返回空
	 * @author chenlb 2008-6-18 下午12:39:51
	 */
	public static String substring(String str, int start, int end) {
		if(str == null) {
			return null;
		}
		int len = str.length();
		if(Math.abs(start) &gt;= len) {
			return null;
		}
		if(Math.abs(end) &gt; len) {
			return null;
		}
		StringBuilder sb = new StringBuilder();
		if(end &gt; start) {	//正向
			substring(sb, str, start, end);
		} else if(end == start) {
			return "";
		} else {	//逆向 end &lt; start
			substring(sb, str, end, start);
			sb.reverse();
		}
		return sb.toString();
	}
	
	private static void substring(StringBuilder sb, String str, int start, int end) {
		int len = str.length();
		if(start &lt; 0) {
			if(end &lt; 0) {
				sb.append(str.substring(len+start, len+end));
			} else {
				sb.append(str.substring(len+start, len));
				sb.append(str.substring(0, end));
			}
		} else {
			sb.append(str.substring(start, end));
		}
	}
}</pre>
<p>&nbsp;</p>
<p>测试代码：</p>
<pre name="code" class="java">public void testSubstring() {
		String str = "I am chenlb";
		
		assertEquals(null, StringUtil.substring(str, 0, 12));
		assertEquals(null, StringUtil.substring(str, 12, 12));
		assertEquals(null, StringUtil.substring(str, 12, 13));
		
		assertEquals("", StringUtil.substring(str, 4, 4));
		
		assertEquals("I am", StringUtil.substring(str, 0, 4));
		assertEquals("am", StringUtil.substring(str, 2, 4));
		assertEquals("I am chenlb", StringUtil.substring(str, 0, 11));
		
		assertEquals("enl", StringUtil.substring(str, -4, -1));
		assertEquals("lbI am", StringUtil.substring(str, -2, 4));
		
		assertEquals("ma I", StringUtil.substring(str, 4, 0));
		assertEquals("lne", StringUtil.substring(str, -1, -4));
		assertEquals("Iblne", StringUtil.substring(str, 1, -4));
		
		assertEquals("blne", StringUtil.substring(str, 0, -4));
		assertEquals("enlb", StringUtil.substring(str, -4, 0));
	}</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/205132#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/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Jun 2008 14:36:24 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/205132</link>
        <guid>http://chenlb.javaeye.com/blog/205132</guid>
      </item>
      <item>
        <title>提供&quot;Hadoop分布式文件系统：架构和设计要点(翻译)&quot;下载</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/202565" style="color:red;">http://chenlb.javaeye.com/blog/202565</a>&nbsp;
          发表时间: 2008年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; 网上找到这方面的资料，javaeye也有这个<a href="http://www.javaeye.com/topic/200508" title="Hadoop分布式文件系统：架构和设计要点(翻译)" target="_blank">帖子</a>&nbsp;，想学习这方面的知识，虽然网上很容易找到这方面的资料，但我还是把它上传来与感兴趣的javaeye友一起学习。</p>
          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/202565#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/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 12 Jun 2008 17:26:12 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/202565</link>
        <guid>http://chenlb.javaeye.com/blog/202565</guid>
      </item>
      <item>
        <title>curl 简单介绍</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/202396" style="color:red;">http://chenlb.javaeye.com/blog/202396</a>&nbsp;
          发表时间: 2008年06月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; 前段时间学习Linux命令，偶然发现curl命令很有用。这里简单介绍下。网络上部分解析是：curl是一个利用URL语法在命令行方式下工作的文件传输工具。</p>
<p>&nbsp;&nbsp; 它可以取得有规律的url的内容。比如：http://www.example.com/001.html 到 http://www.example.com/100.html ，它有一种表达式可以这些内容下载下来，这功能绝对比迅雷强，迅雷只支持一个变量，curl只你喜欢可任意多。它可继点续传，提交表单&hellip;&hellip;</p>
<p>&nbsp;&nbsp; 来看下简单的使用：</p>
<p>1.查看响应的头</p>
<pre name="code" class="html">curl -I http://chenlb.javaeye.com</pre>
<p>&nbsp;现在正如<a href="http://robbin.javaeye.com/blog/199084" target="_blank">robbin说的</a>可以看下X-Runtime: 0.47101</p>
<p>2.在学校要代理才可以上javaeye.com。用-x设代理</p>
<pre name="code" class="html">curl -x proxy.gdut.edu.cn:8080 -I http://chenlb.javaeye.com</pre>
<p>3.把返回的内容保存下来，用-o filename参数</p>
<pre name="code" class="html">curl -o chenlb.html http://chenlb.javaeye.com</pre>
<p>4.保存内容时要filename很烦，用一个-O参数来指定用服务器的文件名，这个批量下载很有用。</p>
<pre name="code" class="html">curl -O http://baike.baidu.com/view/[1-2].htm</pre>
<p>批量下载百科的1.htm 2.htm两个页面，这功能够强。</p>
<p>我常用的就是以上四个。</p>
<p>5.很多要referer的，有-e参数可以设置</p>
<pre name="code" class="html">curl -o me.html -e http://www.javaeye.com http://chenlb.javaeye.com</pre>
<p>&nbsp;</p>
<p>还有很多很多参数，留给大家去发现，比如：发送数据，提交表单，设置用户与密码，用什么协议啊&hellip;&hellip;</p>
          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/202396#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>Thu, 12 Jun 2008 10:12:18 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/202396</link>
        <guid>http://chenlb.javaeye.com/blog/202396</guid>
      </item>
      <item>
        <title>Windows网络命令行程序</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/200961" style="color:red;">http://chenlb.javaeye.com/blog/200961</a>&nbsp;
          发表时间: 2008年06月06日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>Windows网络命令行程序&nbsp;</p>
<p>&nbsp;<br /> ipconfig /all 查看配置&nbsp;<br /> ipconfig /renew 刷新配置&nbsp;<br /> ipconfig 管理 DNS 和 DHCP 类别 ID <br />Ping 测试连接 <br />Arp 解决硬件地址问题 <br />nbtstat 解决 NetBIOS 名称问题 <br />netstat 显示连接统计 <br />tracert 跟踪网络连接 <br />pathping 测试路由器</p>
          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/200961#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/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 06 Jun 2008 15:18:44 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/200961</link>
        <guid>http://chenlb.javaeye.com/blog/200961</guid>
      </item>
      <item>
        <title>Tomcat 内存调优</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/200680" style="color:red;">http://chenlb.javaeye.com/blog/200680</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; 今天运行下程序，报错说&ldquo;内存不够&rdquo;。在Tomcat可以扩大JVM的内存栈呢？然后看那bin目录下启动文件，找到catalina.bat文件的JAVA_OPTS（大概在103行，5.5.X），在再添加一个set JAVA_OPTS参数即可如：</p>
<p>&nbsp;</p>
<pre name="code" class="java">set JAVA_OPTS=%JAVA_OPTS% -Xms100m -Xmx512m</pre>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/200680#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><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, 05 Jun 2008 20:54:29 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/200680</link>
        <guid>http://chenlb.javaeye.com/blog/200680</guid>
      </item>
      <item>
        <title>java -D参数简化加入多个jar</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/198592" style="color:red;">http://chenlb.javaeye.com/blog/198592</a>&nbsp;
          发表时间: 2008年05月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp; java命令引入jar时可以-cp参数，但时-cp不能用通配符(多个jar时什么烦要一个个写,不能*.jar)，面通常的jar都在同一目录，且多于1个。前些日子找到（发现）-Djava.ext.dirs太好。</p>
<p>如：</p>
<pre name="code" class="java">java -Djava.ext.dirs=lib MyClass</pre>
          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/198592#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/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, 30 May 2008 11:22:40 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/198592</link>
        <guid>http://chenlb.javaeye.com/blog/198592</guid>
      </item>
      <item>
        <title>博客搬家到javaeye</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/197189" style="color:red;">http://chenlb.javaeye.com/blog/197189</a>&nbsp;
          发表时间: 2008年05月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp; 开始写博客是在blogjava里。它的稳定、简洁、文档编辑强等吸引我。但久而久之发现，写的博客文章很少有互动性（我没有发布到blogjava主页上）。我觉得写的技术相关的文章要与大家交流才比较有意思，技术才有更好的进步。</p>
<p>&nbsp;&nbsp;&nbsp; 我也在javaeye注册了好久了，而javaeye高手很多，文章质量也高，与大家讨论问题，一起学习才比较有意思。所以决定把博客搬到javaeye里。</p>
<p>&nbsp;&nbsp;&nbsp; 与大家一起学习。^_^</p>
          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/197189#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/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 26 May 2008 20:18:49 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/197189</link>
        <guid>http://chenlb.javaeye.com/blog/197189</guid>
      </item>
      <item>
        <title>Javascript XSLT 处理XML文件(IE and Firefox)</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/196477" style="color:red;">http://chenlb.javaeye.com/blog/196477</a>&nbsp;
          发表时间: 2008年05月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;javascript xslt 处理xml备忘录。支持firefox。<br />参考：<br />w3school XSLT - 客户端 <a href="http://www.w3school.com.cn/xsl/xsl_client.asp">http://www.w3school.com.cn/xsl/xsl_client.asp</a><br />如何使用Javascript&nbsp;XSLT&nbsp;处理XML文件 <a href="http://java.chinaitlab.com/advance/533787.html">http://java.chinaitlab.com/advance/533787.html</a><br /><br />1.xml文件，cdcatalog.xml</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br /></span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Edited&nbsp;with&nbsp;XML&nbsp;Spy&nbsp;v2007&nbsp;(http://www.altova.com)&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">catalog</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">cd</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Empire&nbsp;Burlesque</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artist</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Bob&nbsp;Dylan</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artist</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">country</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">USA</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">country</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">company</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Columbia</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">company</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">price</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">10.90</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">price</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">year</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">1985</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">year</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">cd</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">cd</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Hide&nbsp;your&nbsp;heart</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">artist</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Bonnie&nbsp;Tyler</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">artist</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">country</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">UK</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">country</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">company</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">CBS&nbsp;Records</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">company</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">price</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">9.90</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">price</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">year</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">1988</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">year</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">cd</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">catalog</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br /></span></div>
<p><br />2.xsl文件，cdcatalog.xsl</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
<a href="http://www.CodeHighlighter.com/" target="_blank">http://www.CodeHighlighter.com/</a><br />
<br />
--><span style="color: #0000ff;">&lt;?</span><span style="color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="ISO-8859-1"</span><span style="color: #0000ff;">?&gt;</span><span style="color: #000000;"><br /></span><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;Edited&nbsp;with&nbsp;XML&nbsp;Spy&nbsp;v2007&nbsp;(http://www.altova.com)&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsl:stylesheet&nbsp;</span><span style="color: #ff0000;">version</span><span style="color: #0000ff;">="1.0"</span><span style="color: #ff0000;"><br />xmlns:xsl</span><span style="color: #0000ff;">="http://www.w3.org/1999/XSL/Transform"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsl:output&nbsp;</span><span style="color: #ff0000;">method</span><span style="color: #0000ff;">='html'&nbsp;</span><span style="color: #ff0000;">version</span><span style="color: #0000ff;">='1.0'&nbsp;</span><span style="color: #ff0000;">encoding</span><span style="color: #0000ff;">='UTF-8'&nbsp;</span><span style="color: #ff0000;">indent</span><span style="color: #0000ff;">='yes'/&gt;<br /><br /></span><span style="color: #ff0000;">&lt;xsl:template&nbsp;match</span><span style="color: #0000ff;">="/"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">h2</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">My&nbsp;CD&nbsp;Collection</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">h2</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">table&nbsp;</span><span style="color: #ff0000;">border</span><span style="color: #0000ff;">="1"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">tr&nbsp;</span><span style="color: #ff0000;">bgcolor</span><span style="color: #0000ff;">="#9acd32"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">th&nbsp;</span><span style="color: #ff0000;">align</span><span style="color: #0000ff;">="left"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Title</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">th</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">th&nbsp;</span><span style="color: #ff0000;">align</span><span style="color: #0000ff;">="left"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">Artist</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">th</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">xsl:for-each&nbsp;</span><span style="color: #ff0000;">select</span><span style="color: #0000ff;">="catalog/cd"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">xsl:value-of&nbsp;</span><span style="color: #ff0000;">select</span><span style="color: #0000ff;">="title"</span><span style="color: #0000ff;">/&gt;&lt;/</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;&lt;</span><span style="color: #800000;">xsl:value-of&nbsp;</span><span style="color: #ff0000;">select</span><span style="color: #0000ff;">="artist"</span><span style="color: #0000ff;">/&gt;&lt;/</span><span style="color: #800000;">td</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">tr</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsl:for-each</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">table</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsl:template</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">xsl:stylesheet</span><span style="color: #0000ff;">&gt;</span></div>
<p><br /><br />3.html文件，index.html</p>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
<a href="http://www.CodeHighlighter.com/" target="_blank">http://www.CodeHighlighter.com/</a><br />
<br />
--><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br /><br /></span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">script&nbsp;</span><span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text/javascript"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000; background-color: #f5f5f5;"><br /></span><span style="color: #0000ff; background-color: #f5f5f5;">var</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;xml;<br /></span><span style="color: #0000ff; background-color: #f5f5f5;">var</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;xsl;<br /></span><span style="color: #0000ff; background-color: #f5f5f5;">if</span><span style="color: #000000; background-color: #f5f5f5;">(</span><span style="color: #0000ff; background-color: #f5f5f5;">typeof</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;window.ActiveXObject&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">!=</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;'undefined')&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;xml&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">=</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">new</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;ActiveXObject(</span><span style="color: #000000; background-color: #f5f5f5;">"</span><span style="color: #000000; background-color: #f5f5f5;">Microsoft.XMLDOM</span><span style="color: #000000; background-color: #f5f5f5;">"</span><span style="color: #000000; background-color: #f5f5f5;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;xsl&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">=</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">new</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;ActiveXObject(</span><span style="color: #000000; background-color: #f5f5f5;">"</span><span style="color: #000000; background-color: #f5f5f5;">Microsoft.XMLDOM</span><span style="color: #000000; background-color: #f5f5f5;">"</span><span style="color: #000000; background-color: #f5f5f5;">);<br />}&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">else</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">if</span><span style="color: #000000; background-color: #f5f5f5;">(document.implementation&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">&amp;&amp;</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;document.implementation.createDocument)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5;">//</span><span style="color: #008000; background-color: #f5f5f5;">mozilla</span><span style="color: #008000; background-color: #f5f5f5;"><br /></span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;&nbsp;&nbsp;&nbsp;xml&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">=</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;document.implementation.createDocument(</span><span style="color: #000000; background-color: #f5f5f5;">""</span><span style="color: #000000; background-color: #f5f5f5;">,&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">""</span><span style="color: #000000; background-color: #f5f5f5;">,&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">null</span><span style="color: #000000; background-color: #f5f5f5;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;xsl&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">=</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;document.implementation.createDocument(</span><span style="color: #000000; background-color: #f5f5f5;">""</span><span style="color: #000000; background-color: #f5f5f5;">,&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">""</span><span style="color: #000000; background-color: #f5f5f5;">,&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">null</span><span style="color: #000000; background-color: #f5f5f5;">);<br />}<br /></span><span style="color: #008000; background-color: #f5f5f5;">//</span><span style="color: #008000; background-color: #f5f5f5;">&nbsp;Load&nbsp;XML&nbsp;</span><span style="color: #008000; background-color: #f5f5f5;"><br /></span><span style="color: #000000; background-color: #f5f5f5;"><br />xml.async&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">=</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">false</span><span style="color: #000000; background-color: #f5f5f5;">;<br />xml.load(</span><span style="color: #000000; background-color: #f5f5f5;">"</span><span style="color: #000000; background-color: #f5f5f5;">cdcatalog.xml</span><span style="color: #000000; background-color: #f5f5f5;">"</span><span style="color: #000000; background-color: #f5f5f5;">);<br /><br /></span><span style="color: #008000; background-color: #f5f5f5;">//</span><span style="color: #008000; background-color: #f5f5f5;">&nbsp;Load&nbsp;XSL</span><span style="color: #008000; background-color: #f5f5f5;"><br /></span><span style="color: #000000; background-color: #f5f5f5;"><br />xsl.async&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">=</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">false</span><span style="color: #000000; background-color: #f5f5f5;">;<br />xsl.load(</span><span style="color: #000000; background-color: #f5f5f5;">"</span><span style="color: #000000; background-color: #f5f5f5;">cdcatalog.xsl</span><span style="color: #000000; background-color: #f5f5f5;">"</span><span style="color: #000000; background-color: #f5f5f5;">);<br /><br /></span><span style="color: #008000; background-color: #f5f5f5;">//</span><span style="color: #008000; background-color: #f5f5f5;">&nbsp;Transform</span><span style="color: #008000; background-color: #f5f5f5;"><br /></span><span style="color: #000000; background-color: #f5f5f5;"><br /></span><span style="color: #0000ff; background-color: #f5f5f5;">if</span><span style="color: #000000; background-color: #f5f5f5;">(</span><span style="color: #0000ff; background-color: #f5f5f5;">typeof</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;window.ActiveXObject&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">!=</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;'undefined')&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;document.write(xml.transformNode(xsl));<br />}&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">else</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">if</span><span style="color: #000000; background-color: #f5f5f5;">(document.implementation&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">&amp;&amp;</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;document.implementation.createDocument)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5;">//</span><span style="color: #008000; background-color: #f5f5f5;">mozilla</span><span style="color: #008000; background-color: #f5f5f5;"><br /></span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">var</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;xsltProcessor&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">=</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">new</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;XSLTProcessor();<br />&nbsp;&nbsp;&nbsp;&nbsp;xsltProcessor.importStylesheet(xsl);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; background-color: #f5f5f5;">//</span><span style="color: #008000; background-color: #f5f5f5;">&nbsp;transformToDocument方式</span><span style="color: #008000; background-color: #f5f5f5;"><br /></span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">var</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;result&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">=</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;xsltProcessor.transformToDocument(xml);<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">var</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;xmls&nbsp;</span><span style="color: #000000; background-color: #f5f5f5;">=</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;</span><span style="color: #0000ff; background-color: #f5f5f5;">new</span><span style="color: #000000; background-color: #f5f5f5;">&nbsp;XMLSerializer();<br />&nbsp;&nbsp;&nbsp;&nbsp;document.write(xmls.serializeToString(result));<br />}<br /><br /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">script</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br /><br /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span></div>
<p><br /></p>
          <br/>
          <span style="color:red;">
            <a href="http://chenlb.javaeye.com/blog/196477#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>Sun, 18 May 2008 19:02:00 +0800</pubDate>
        <link>http://chenlb.javaeye.com/blog/196477</link>
        <guid>http://chenlb.javaeye.com/blog/196477</guid>
      </item>
      <item>
        <title>[原]自己实现的优先队列 PriorityQueue</title>
        <author>chenlb</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenlb.javaeye.com">chenlb</a>&nbsp;
          链接：<a href="http://chenlb.javaeye.com/blog/196620" style="color:red;">http://chenlb.javaeye.com/blog/196620</a>&nbsp;
          发表时间: 2008年05月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;&nbsp;&nbsp;&nbsp;java库里的PriorityQueue无法满足我，它不能固定容量，不遍历（遍历后就无序了），它的排序因字是从小到大（虽然可以用Comparator来反转大小顺序）。我所要的是可以固定容量（在一大堆数据通信中选择最大或最小的几个数时很有用），可遍历（不是一个个poll()）。<br />&nbsp;&nbsp;&nbsp;&nbsp;于是，在有空的时间里写了一下。内容是一个双向链表（带头的，头不作保存数据），用插入排序。个人认为一个个添加的用插入排序效果比较好。从队尾到队头找合适的插入位置，是稳定的排序。<br />&nbsp;&nbsp;&nbsp;&nbsp;添加的实体可以用Comparator或Comparable，如果这两个都不是，就失去排序的效果。实现了比较高兴，发表下。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;net.blogjava.chenlb.util;<br /><br /></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.AbstractQueue;<br /></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.Comparator;<br /></span><span style="color: #0000ff;">import</span><span style="color: #000000;">&nbsp;java.util.Iterator;<br /><br /></span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;&lt;E&gt;<br />&nbsp;*&nbsp;容量capacity大于0,最多只能添加capacity个,多出的被删除掉.&lt;br/&gt;<br />&nbsp;*&nbsp;删除时根据{</span><span style="color: #808080;">@link</span><span style="color: #008000;">&nbsp;Comparable}或{</span><span style="color: #808080;">@link</span><span style="color: #008000;">&nbsp;Comparator}&nbsp;和&nbsp;desc<br />&nbsp;*&nbsp;如果comparator==null时使用Comparable&lt;br/&gt;<br />&nbsp;*&nbsp;non-thread&nbsp;safe<br />&nbsp;*&nbsp;</span><span style="color: #808080;">@author</span><span style="color: #008000;">&nbsp;chenlb&nbsp;2008-4-23&nbsp;下午11:31:06<br />&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br /></span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;TopPriorityQueue</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">E</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;AbstractQueue</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">E</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">implements</span><span style="color: #000000;">&nbsp;java.io.Serializable&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">final</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">long</span><span style="color: #000000;">&nbsp;serialVersionUID&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1L</span><span style="color: #000000;">;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;size;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;LinkedItem&nbsp;head;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;LinkedItem&nbsp;last;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;top;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">top&gt;0后,容量有限制</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;Comparator</span><span style="color: #000000;">&lt;?</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">super</span><span style="color: #000000;">&nbsp;E</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;comparator;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;desc;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">降序</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;容量无限制,升序.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;TopPriorityQueue()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">(</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;容量无限制,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;desc&nbsp;true为降序.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;TopPriorityQueue(</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;desc)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">(</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,&nbsp;desc);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;容量无限制,升序,用comparator排序<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;TopPriorityQueue(Comparator</span><span style="color: #000000;">&lt;?</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">super</span><span style="color: #000000;">&nbsp;E</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;comparator)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">(</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;comparator,&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;容量无限制,用comparator排序<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;</span><span style="color: #808080;">@param</span><span style="color: #008000;">&nbsp;desc&nbsp;true为降序<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;TopPriorityQueue(Comparator</span><span style="color: #000000;">&lt;?</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">super</span><span style="color: #000000;">&nbsp;E</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;comparator,&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;desc)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">(</span><span style="color: #000000;">0</span><span style="color: #000000;">,&nbsp;comparator,&nbsp;desc);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/**</span><span style="color: #008000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;容量限制为capacity.超出容量限制的,会删除优先级最小(队尾).<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;TopPriorityQueue(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;capacity)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">(capacity,&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;TopPriorityQueue(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;capacity,&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;desc)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">(capacity,&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">,&nbsp;desc);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;TopPriorityQueue(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;capacity,&nbsp;Comparator</span><span style="color: #000000;">&lt;?</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">super</span><span style="color: #000000;">&nbsp;E</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;comparator)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">(capacity,&nbsp;comparator,&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;TopPriorityQueue(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;capacity,&nbsp;Comparator</span><span style="color: #000000;">&lt;?</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">super</span><span style="color: #000000;">&nbsp;E</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;comparator,&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;desc)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;head&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;LinkedItem();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;head;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;top&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;capacity;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.comparator&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;comparator;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.desc&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;desc;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;Iterator</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">E</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;iterator()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;迭代器</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;It(head);<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;@Override<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;size()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;size;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">boolean</span><span style="color: #000000;">&nbsp;offer(E&nbsp;o)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;TODO&nbsp;添加到适当的位置</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(o&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">throw</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;IllegalArgumentException(</span><span style="color: #000000;">"</span><span style="color: #000000;">不能添加值为null的!</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LinkedItem&nbsp;temp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;LinkedItem(o);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;">last.next&nbsp;=&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.prev&nbsp;=&nbsp;last;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(last&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;head)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">第一个</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last.next&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;temp.prev&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;last;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;last&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;temp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LinkedItem&nbsp;tempPrev&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;last;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(comparator&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(tempPrev</span><span style="color: #000000;">!=</span><span style="color: #0000ff;">null</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;tempPrev&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;head)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;r&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;comparator.compare(tempPrev.data,&nbsp;temp.data);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(desc)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">&nbsp;r;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(r&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">tempPrev&nbsp;&gt;&nbsp;temp<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">重置,继续向前找</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tempPrev&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;tempPrev.prev;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">找到插入的位置</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(o&nbsp;</span><span style="color: #0000ff;">instanceof</span><span style="color: #000000;">&nbsp;Comparable)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">用Comparable</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(tempPrev</span><span style="color: #000000;">!=</span><span style="color: #0000ff;">null</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;tempPrev&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;head)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Comparable</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">E</span><span style="co