<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>liudaoru - 悟</title>
    <description></description>
    <link>http://liudaoru.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>深入了解jvm(Inside java virture machine)</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/211768" style="color:red;">http://liudaoru.javaeye.com/blog/211768</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>很不错的关于java虚拟机的一本书～</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/211768#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 21:23:15 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/211768</link>
        <guid>http://liudaoru.javaeye.com/blog/211768</guid>
      </item>
      <item>
        <title>CSS 图片预加载[z]</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/211749" style="color:red;">http://liudaoru.javaeye.com/blog/211749</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>本来想解决使用innerHTML方式设置内容时，里面样式中的图片无法加载的问题，结果意外的发现了一种图片预加载的方式。</p>
<p>From： <a href="http://blog.guoshuang.com/showlog.asp?log_id=3947">http://blog.guoshuang.com/showlog.asp?log_id=3947</a></p>
<p>&nbsp;</p>
<pre name="code" class="html">&lt;style&gt;
#preloadedImages {
       width: 0px;
       height: 0px;
       display: inline;
       background-image: url(path/to/image1.png);
       background-image: url(path/to/image2.png);
       background-image: url(path/to/image3.png);
       background-image: url(path/to/image4.png);
       background-image: url();
} 
&lt;/style&gt;
&lt;div id="preloadedImages"&gt;&lt;/div&gt;
</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/211749#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/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>Fri, 04 Jul 2008 18:38:22 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/211749</link>
        <guid>http://liudaoru.javaeye.com/blog/211749</guid>
      </item>
      <item>
        <title>Eclipse远程调试[z]</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/211533" style="color:red;">http://liudaoru.javaeye.com/blog/211533</a>&nbsp;
          发表时间: 2008年07月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>From: <a href="http://www.blogjava.net/justfly/archive/2007/02/05/98090.html">http://www.blogjava.net/justfly/archive/2007/02/05/98090.html</a></p>
<p>&nbsp;</p>
<p>可视化的展示远程调整的文章： <a href="http://java.chinaitlab.com/Eclipse/36364.html">http://java.chinaitlab.com/Eclipse/36364.html</a></p>
<p>&nbsp;</p>
<p>第一次提出这种方法的文章：<a href="http://eclipsezone.com/eclipse/forums/t53459.html">http://eclipsezone.com/eclipse/forums/t53459.html</a></p>
<p>&nbsp;</p>
<p>　<strong>配置Eclipse进行远程调试</strong><br />　　<br />　　为了能在Eclipse中远程调试JBoss应用，需要以debug模式启动JBoss<a href="http://server.chinaitlab.com/" class="channel_keylink" target="_blank"><span style="font-size: small;">服务器</span></a>，这可以通过在批命令脚本文件bin/run中设置debug选项来实现。JBoss提供的调试机制是基于<a href="http://java.chinaitlab.com/" class="channel_keylink" target="_blank"><span style="font-size: small;">Java</span></a>平台调试架构（JPDA）的。按以下方式设置JAVA_OPTS变量：<br />　　<br />　　set JAVA_OPTS= -Xdebug -Xnoagent　 -Xrunjdwp:transport=dt_socket,address=8787,　server=y, suspend=n %JAVA_OPTS%<br />　　</p>
<p>。。。</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/211533#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 04 Jul 2008 13:57:10 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/211533</link>
        <guid>http://liudaoru.javaeye.com/blog/211533</guid>
      </item>
      <item>
        <title>Maxthon对链接的处理问题</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/211043" style="color:red;">http://liudaoru.javaeye.com/blog/211043</a>&nbsp;
          发表时间: 2008年07月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>今天在Maxthon下测试播放列表时发现了一个问题，那就是我使用</p>
<p>&nbsp;</p>
<pre name="code" class="html">&lt;a href="javascript:void(0);" onclick="location='http://www.trs.com.cn/';"&gt;测试&lt;/a&gt;</pre>
<p>&nbsp;</p>
<p>时链接不能正确的跳转。而我使用button和直接在地址链输入脚本都是可以执行的，后来用了下面的方法才解决了这个问</p>
<p>题</p>
<pre name="code" class="html">&lt;a href="javascript:location='http://www.trs.com.cn/';"&gt;测试&lt;/a&gt;</pre>
<p>&nbsp;</p>
<p>这两种方式本质上应该是相同的，就是不知道Maxthox为什么会屏蔽第一种方式。</p>
<p>难道是因为它认为href已经被屏蔽了，然后就不再允许打开链接了？后来又发现window.open方法却是可以的，真的很奇怪。。。</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/211043#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/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>Thu, 03 Jul 2008 14:10:25 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/211043</link>
        <guid>http://liudaoru.javaeye.com/blog/211043</guid>
      </item>
      <item>
        <title>Linux下 zip 和 unzip的用法[z]</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/210558" style="color:red;">http://liudaoru.javaeye.com/blog/210558</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>From: <a href="http://www.hinn.cn/2008/01/linux_zip_unzip.html">http://www.hinn.cn/2008/01/linux_zip_unzip.html</a></p>
<p>&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp; zip命令的基本用法是：zip [参数] [文件1] [文件2]<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简单的例子：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 把本目录下的test文件打包成test.zip文件：zip test.zip test/* ，如果在文件中用绝对的路径，那么在压缩文件中也是绝对路径。就是说，如果你 zip test.zip /home/test/* ,那么在压缩文件中也是这样的层次关系。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数列表：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -a&nbsp;&nbsp;&nbsp;&nbsp; 将文件转成ASCII模式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -F&nbsp;&nbsp;&nbsp;&nbsp; 尝试修复损坏的压缩文件&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -h&nbsp;&nbsp;&nbsp;&nbsp; 显示帮助界面<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -m&nbsp;&nbsp;&nbsp;&nbsp; 将文件压缩之后，删除源文件</p>
<div class="asset-more" id="more">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -n 特定字符串&nbsp;&nbsp;&nbsp; 不压缩具有特定字尾字符串的文件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -o&nbsp;&nbsp;&nbsp;&nbsp; 将压缩文件内的所有文件的最新变动时间设为压缩时候的时间<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -q&nbsp;&nbsp;&nbsp;&nbsp; 安静模式，在压缩的时候不显示指令的执行过程<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -r&nbsp;&nbsp;&nbsp;&nbsp; 将指定的目录下的所有子目录以及文件一起处理<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -S&nbsp;&nbsp;&nbsp;&nbsp; 包含系统文件和隐含文件（S是大写）<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -t 日期&nbsp;&nbsp;&nbsp;&nbsp; 把压缩文件的最后修改日期设为指定的日期，日期格式为mmddyyyy<br />&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unzip命令的基本语法是：unzip [参数] zip文件<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 简单例子：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 把本目录下的test.zip文件解压：unzip test.zip<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 参数列表：<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -l&nbsp;&nbsp;&nbsp;&nbsp; 列出压缩文件所包含的内容<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -v&nbsp;&nbsp;&nbsp;&nbsp; 显示详细的执行过程<br /></div>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/210558#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><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 13:31:00 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/210558</link>
        <guid>http://liudaoru.javaeye.com/blog/210558</guid>
      </item>
      <item>
        <title>oracle 存储过程</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/210396" style="color:red;">http://liudaoru.javaeye.com/blog/210396</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>创建带参数的存储过程：</p>
<p>&nbsp;</p>
<pre name="code" class="sql">--
create or replace procedure p_loop
(j in integer)
Is
  number1 integer:=80;
  i integer:=0;
begin
  for i in 1..10 loop
    number1:=number1+1;
  end loop;
  dbms_output.put_line('number1"s value:'||to_char(number1)||j);
end;
/</pre>
<pre name="code" class="sql">--执行
 execute p_loop(1);</pre>
<p>&nbsp;</p>
<p>创建不带参数的存储过程：</p>
<p>&nbsp;</p>
<pre name="code" class="sql">--
create or replace procedure p_loop
Is
  number1 integer:=80;
  i integer:=0;
begin
  for i in 1..10 loop
    number1:=number1+1;
  end loop;
  dbms_output.put_line('number1"s value:'||to_char(number1)||j);
end;
/</pre>
<pre name="code" class="sql">-- 执行

execute p_loop();</pre>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/210396#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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 09:52:22 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/210396</link>
        <guid>http://liudaoru.javaeye.com/blog/210396</guid>
      </item>
      <item>
        <title>Oracle SQLServer 的随机数问题[z]</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/208522" style="color:red;">http://liudaoru.javaeye.com/blog/208522</a>&nbsp;
          发表时间: 2008年06月27日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>From: <a href="http://www.heysky.net/archives/2006/10/oracle_sqlserver_random.html">http://www.heysky.net/archives/2006/10/oracle_sqlserver_random.html</a></p>
<p>&nbsp;</p>
<p>在数据库操作中经常会碰到使用随机数的问题，几天前翔哥来问我关于 <span style="font-family: Arial;">SQLServer 批量产生随机数的问题，记得之前他也问过我 Oracle 下面随机数的问题，当时找到了一些资料但没来得及整理，今天正好把 Oracle 和 SQLServer 下的随机数问题整理一下。</span></p>
<p><strong>1. 产生随机数</strong></p>
<li>Oracle<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Oracle 下随机数可以用 <span style="font-family: Arial;">DBMS_RANDOM 包来实现，他调用 Oracle 内部随机数生成器来产生随机数，具体使用可以参考<a href="http://download-west.oracle.com/docs/cd/B10501_01/appdev.920/a96612/d_random.htm#998102" target="_blank">文档</a>，另外 <a href="http://www.psoug.org/" target="_blank">psoug</a>&nbsp;上有更详细的<a href="http://www.psoug.org/reference/dbms_random.html" target="_blank">参考</a>。</span> </li>
<li>SQLServer&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQLServer 下可以用 <span style="font-family: Arial;">RAND 函数产生随机数，不过这个函数似乎只能一次产生一个随机数，如果大批量产生随机数，都是重复的（在 Oracle 中使用 <span style="font-family: Arial;">DBMS_RANDOM 产生的随机数不太会重复</span>）：<br /></span>
<blockquote>
<pre>SELECT TOP 5 RAND()
FROM sysobjects

0.72910389475358373
0.72910389475358373
0.72910389475358373
0.72910389475358373
0.72910389475358373</pre>
</blockquote>
<span style="font-family: Arial;"><span style="font-family: Arial;"><span style="font-family: Arial;"><span style="font-family: Arial;"><span style="font-family: Arial;"><span style="font-family: Arial;"><span style="font-family: Arial;"><span style="font-family: Arial;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;之后 google 了一下，找到了<span style="font-family: Arial;"><a href="http://blog.csdn.net/zjcxc/" target="_blank">邹建</a>的一篇<a href="http://blog.csdn.net/zjcxc/archive/2006/08/20/1099215.aspx" target="_blank">文章</a>，巧妙地通过 <span style="font-family: Arial;">CHECKSUM(NEWID()) 产生随机数，并用 <span style="font-family: Arial;">RIGHT 函数获得其中几位（我觉得用 Left 更好，这样可以防止首位为 0，从而避免插入数据时位数变少），这样不但很好地实现了批量产生随机数，效率也不错。</span></span></span></span></span></span></span></span></span></span></span>
<p><strong>2. 随机从表中取数</strong></p>
</li>
<li>Oracle<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;之前就是在 Oracle 下碰到了这个问题才去研究随机数，发现非常有意思，方法可以概括为两大类，一类就是根据随机数来 Order by 从而将数据随机排列。这类方法又可以分为两种方法，一种就是用 <span style="font-family: Arial;">dbms_random 产生随机数：<br /></span>
<blockquote>
<pre>select *
  from (select * from t order by dbms_random.value)
 where rownum &lt; 50;</pre>
</blockquote>
<span style="font-family: Arial;"><br />根据 <span style="font-family: Arial;">jametong 所说，由于<span style="font-family: Arial;">随机数发生器本身初始化需要时间，而且产生随机数的过程中会频繁读取数据库，所以这种方法效率最差。第二种方法是用 dbms_utility.get_hash_value 产生随机数：<br /></span></span></span>
<blockquote>
<pre>select *
  from (select dbms_utility.get_hash_value(to_char(dbms_utility.get_time) ||
                                           tb1.col1,2,1048576) rand_num,
               a.*
          from tb1
         order by rand_num)
 where rand_num &lt;= 50;</pre>
</blockquote>
这种方法效率稍好。第二类方法就是用 <span style="font-family: Arial;">sample 对表做采样，这是效率最高的方法：<br /></span>
<blockquote>
<pre>SELECT emp FROM emp SAMPLE(10);</pre>
</blockquote>
<span style="font-family: Arial;">SAMPLE(n) 是一个很有用的方法，它随机从表中抽取 n% 的数据，但并不是一定是 n% 可能小于该值，所以如果总共 1000 行数据，要随机取 100 行，最好将 n 设得大于 10。另外，这种方法只能用于一个表，from 后不能有多个表。</span><br /></li>
<li>SQLServer&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQLServer 下只想到了 Order by&nbsp; 的方法，由于 <span style="font-family: Arial;">rand() 产生重复，所以还是可以用 <span style="font-family: Arial;">NEWID() 的方法：</span></span></li>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/208522#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/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 27 Jun 2008 10:40:39 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/208522</link>
        <guid>http://liudaoru.javaeye.com/blog/208522</guid>
      </item>
      <item>
        <title>Jsp&amp;servlet相关小知识</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/207762" style="color:red;">http://liudaoru.javaeye.com/blog/207762</a>&nbsp;
          发表时间: 2008年06月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span style="font-size: x-small;">代码&rdquo; ${pageContext.request.contextPath}&rdquo;的作用是取出部署的应用程序名，这样不管如何部署，所用路径都是正确的。</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/207762#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>Wed, 25 Jun 2008 10:35:16 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/207762</link>
        <guid>http://liudaoru.javaeye.com/blog/207762</guid>
      </item>
      <item>
        <title>Oracle CHAR，VARCHAR，VARCHAR2类型的区别与使用[z]</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/207469" style="color:red;">http://liudaoru.javaeye.com/blog/207469</a>&nbsp;
          发表时间: 2008年06月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>From: <a href="http://www.knowsky.com/390043.html">http://www.knowsky.com/390043.html</a></p>
<p>&nbsp;</p>
<p><span class="t18"><strong><span style="color: #ff6600;">区别：</span></strong><span style="color: #99cc00;"> </span>　　</span></p>
<p><span class="t18">1．CHAR的长度是固定的，而VARCHAR2的长度是可以变化的， 比如，存储字符串&ldquo;abc"，对于CHAR (20)，表示你存储的字符将占20个字节(包括17个空字符)，而同样的VARCHAR2 (20)则只占用3个字节的长度，20只是最大值，当你存储的字符小于20时，按实际长度存储。　　</span></p>
<p>&nbsp;</p>
<p><span class="t18">2．CHAR的效率比VARCHAR2的效率稍高。　　</span></p>
<p>&nbsp;</p>
<p><span class="t18">3．目前VARCHAR是VARCHAR2的同义词。工业标准的VARCHAR类型可以存储空字符串，但是<a href="http://www.knowsky.com/article.asp?typeid=171" class="ReplaceKeyword" target="_blank">Oracle</a>不这样做，尽管它保留以后这样做的权利。Oracle自己开发了一个数据类型VARCHAR2，这个类型不是一个标准的VARCHAR，它将在<a href="http://www.knowsky.com/sql.asp" class="ReplaceKeyword" target="_blank">数据库</a>中varchar列可以存储空字符串的特性改为存储NULL值。假如你想有向后兼容的能力，Oracle建议使用VARCHAR2而不是VARCHAR。 <span style="color: #ff6600;">　　</span></span></p>
<p><span class="t18"></span></p>
<p><span class="t18"><span style="color: #ff6600;">何时该用CHAR，何时该用varchar2？</span> 　　</span></p>
<p>&nbsp;</p>
<p><span class="t18">CHAR与VARCHAR2是一对矛盾的统一体，两者是互补的关系. 　　VARCHAR2比CHAR节省空间，在效率上比CHAR会稍微差一些，即要想获得效率，就必须牺牲一定的空间，这也就是我们在数据库设计上常说的&lsquo; 以空间换效率&rsquo;。　　</span></p>
<p>&nbsp;</p>
<p><span class="t18">VARCHAR2虽然比CHAR节省空间，但是假如一个VARCHAR2列经常被修改，而且每次被修改的数据的长度不同，这会引起&lsquo;行迁移&rsquo;(Row Migration)现象，而这造成多余的I/O，是数据库设计和调整中要尽力避免的，在这种情况下用CHAR代替VARCHAR2会更好一些。 </span></p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/207469#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 24 Jun 2008 14:07:39 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/207469</link>
        <guid>http://liudaoru.javaeye.com/blog/207469</guid>
      </item>
      <item>
        <title>你所不知道的农作物的原产地(z)</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/205938" style="color:red;">http://liudaoru.javaeye.com/blog/205938</a>&nbsp;
          发表时间: 2008年06月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><span class="Text13">From: <a href="http://www.sg.bj.cn/agsite/common/detail.jsp?sk=1&amp;id=17">http://www.sg.bj.cn/agsite/common/detail.jsp?sk=1&amp;id=17</a></span></p>
<p>&nbsp;</p>
<p><span class="Text13">大豆、稻子、谷子、茶、枣都原产于我国。现在美国的大豆产量居世界第一；印度的茶叶出口量居世界第一。棉花原产南美洲和印度。宋代以后，棉花分三路传入我国：第一路从东南亚传入我国海南岛和两广；第二路从印度经缅甸传入我国云南；第三路从中亚传入我国新疆和河西走廊。 </span></p>
<p>&nbsp;</p>
<p><span class="Text13">甘蔗原产地是印度。现在巴西的蔗田面积和蔗糖产量居世界第一位，古巴的蔗糖出口量居世界第一。番薯，又名红薯、地瓜，原产美洲墨西哥和哥伦比亚一带。哥伦布从美洲带回薯种奉献给西班牙女王，西班牙人又把薯种带到菲律宾。明代万历年间菲律宾爱国华侨陈振龙把薯种带回福建广为栽种。马铃薯，又名土豆，原产南美洲，清朝初年由南洋传入我国。土豆被前苏联称为&ldquo;国宝&rdquo;，土豆一词在印度语中叫&ldquo;万能之物&rdquo;。西瓜原产地在非洲。五代时由中亚经丝绸之路传入我国。因瓜种来自我国西部，故名&ldquo;西瓜&rdquo;。</span></p>
<p>&nbsp;</p>
<p><span class="Text13">向日葵原产美洲，世纪后分两路传来我国，一路从南洋，一路从俄国传入。蕃茄，又名西红柿，原产南美洲秘鲁，当地人称&ldquo;狼桃&rdquo;，18世纪传入我国。蕃茄色彩鲜艳，原先一直认为有毒，不敢入口。据说18世纪有一位画家，冒着死亡的危险亲口吃下狼桃，然后直挺挺地躺在床上等死，12小时以后，这位画家竟安然无恙，从此蕃茄才成为美味食品。茄子原产地在印度和泰国。约在晋代传入我国。　 </span></p>
<p>&nbsp;</p>
<p><span class="Text13">黄瓜原产地在印度，晋代以后传入我国。 菠菜原产地在尼泊尔，唐朝初年传入我国。辣椒原产南美洲热带地区。最早由印第安人培植，唐代传入我国。 胡萝卜原产地在北欧。元代由波斯传入我国。 葡萄原产地中海沿岸。汉代传入我国。石榴原产在古波斯一带。晋代时我国种植已很广泛。 核桃原产地在西亚和南欧，晋朝传入我国。椰子原产菲律宾，现在菲律宾的椰子产量和出口量仍居世界第一位，有&ldquo;椰子王国&rdquo;之称。</span></p>
<p>&nbsp;</p>
<p><span class="Text13">烟叶原产美洲。哥伦布发现新大陆时，经常看到印第安人嘴里都衔着一团燃烧的&ldquo;干草&rdquo;，并一口一口地吸着它的烟雾。约于明代万历年间通过菲律宾??澳门传入我国内地。咖啡、枣椰、油棕和香蕉的故乡都在非洲。咖啡原产地在东非埃塞俄比亚的咖法省，据说古代有一牧羊人发现羊吃了一种红色浆果以后，特别兴奋。于是这位牧羊人亦摘此果煮汁以解渴，结果感到特别振奋，异常舒适。从此咖啡这种饮料就流传开了。现在巴西的咖啡产量居世界第一位；伊拉克的枣椰居世界首位；马来西亚的油棕产量居世界第 一，中美洲的香蕉在世界上最多、最有名。</span></p>
<p>&nbsp;</p>
<p><span class="Text13">橡胶、可可和金鸡纳的故乡在南美洲。橡胶的原产地在亚马逊河流域。哥伦布探险时，发现印第安人把一种树缝里流出的粘糊状白汁揉成实心球，这种球有弹性，印第安人把这种球投入高处石圈作游戏。哥伦布把这种球带回欧洲，以后加拿大人奈斯密斯把这种球改造成了现代的篮球。现在马来西亚的橡胶产量居世界首位，巴西的可可产量、印度尼西亚的金鸡纳产量都居世界第一位。 </span></p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/205938#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><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, 19 Jun 2008 19:24:48 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/205938</link>
        <guid>http://liudaoru.javaeye.com/blog/205938</guid>
      </item>
      <item>
        <title>我常去的一些网站</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/205898" style="color:red;">http://liudaoru.javaeye.com/blog/205898</a>&nbsp;
          发表时间: 2008年06月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>1、javaeye：<a href="http://www.javaeye.com">http://www.javaeye.com</a></p>
<p>&nbsp;</p>
<p>这个不用多说，这里的技术氛围我很喜欢。</p>
<p>&nbsp;</p>
<p>2、csdn：<a href="http://www.csdn.net">http://www.csdn.net</a></p>
<p>&nbsp;</p>
<p>算是国内最大的技术社区了，东西比较全面，但是深度不够。</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/205898#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 19 Jun 2008 17:19:09 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/205898</link>
        <guid>http://liudaoru.javaeye.com/blog/205898</guid>
      </item>
      <item>
        <title>我的常用软件工具</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/205897" style="color:red;">http://liudaoru.javaeye.com/blog/205897</a>&nbsp;
          发表时间: 2008年06月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <h3>1、HttpWatch</h3>
<p>ie插件，查看http请求的工具，查看参数、状态的必备工具。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>2、Instant Source</h3>
<p>ie插件，查看即使html代码的工具，可以查看由js动态构建的页面代码，是调页面做交互开发的必备。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h3>3、谷歌金山词霸</h3>
<p>学习英语的好工具，简洁明了的界面很让我喜欢。</p>
<p>&nbsp;</p>
<h3>4、FireBug</h3>
<p>&nbsp;</p>
<p>FF下查看源代码，跟踪错误的插件，也是相当不多。</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/205897#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 19 Jun 2008 17:17:08 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/205897</link>
        <guid>http://liudaoru.javaeye.com/blog/205897</guid>
      </item>
      <item>
        <title>google code jam!!!</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/205730" style="color:red;">http://liudaoru.javaeye.com/blog/205730</a>&nbsp;
          发表时间: 2008年06月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><a href="http://code.google.com/codejam/">http://code.google.com/codejam/</a></p>
<p>&nbsp;</p>
<p>google编程挑战赛，想参加的交流一下啊。。。。。。。。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/205730#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 19 Jun 2008 13:30:37 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/205730</link>
        <guid>http://liudaoru.javaeye.com/blog/205730</guid>
      </item>
      <item>
        <title>ping　netstat ARP ipconfig netsh net telnet命令用法[z]</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/205036" style="color:red;">http://liudaoru.javaeye.com/blog/205036</a>&nbsp;
          发表时间: 2008年06月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>From: <a href="http://hi.baidu.com/z_s_c/blog/item/a42d96c4353babc838db4943.html">http://hi.baidu.com/z_s_c/blog/item/a42d96c4353babc838db4943.html</a></p>
<div class="cnt" id="blog_text">
<p>了解和掌握下面几个命令将会有助于你更快地检测到网络 故障所在，从而节省时间，提高效率。<br /><br />1、ping　测试物理网络 </p>
<p>命令：ping 192.168.0.8 －t ，参数－t是等待用户去中断测试.-n 是发包的次数，-l 发送包的大小，<br />－a显示NetBios名 。<br />参数<br />&middot;ping IP &ndash;t<br />连续对IP地址执行Ping命令，直到被用户以Ctrl+C中断。</p>
<p>　　&middot;ping IP -l 3000<br />指定Ping命令中的数据长度为3000字节，而不是缺省的32字节。</p>
<p>　　&middot;ping IP &ndash;n<br />执行特定次数的Ping命令。<br /><br />&middot;ping IP &ndash;a<br />显示NetBios名</p>
<p>友情提示：这个是最基本，最常用的网络命令</p>
<p>　　通过Ping检测网络故障的常见手法<br /><br />下面就给出一个典型的使用ping命令来排错的过程：</p>
<p>　　&middot;ping 127.0.0.1<br />这个ip是是微软保留给每台机器本机回环地址，可以不需要连接网线PING通。如果此时收到错误信息，则表明 TCP/IP 安装不正确。要删除并重新安装 TCP/IP</p>
<p>　　&middot;ping 本机IP<br />在确保配置和网线连接都正确的情况下如果此时收到错误信息，则说明 Windows NT 和网络适配器之间可能存在通信问题。要解决这一问题，请删除并重新安装网络适配器驱动程序<br />&middot;ping 局域网内其他IP<br />这个命令将数据报通过经过网卡和网络电缆给其他计算机，再返回。收到回送应答表明本地网络中的网卡和载体运行正确。但如果收到0个回送应答，那么有可能存在这们一些问题：<br />（1.查看IP地址和子网掩码是不是正确，对方机器是不是防火墙过滤了ICMP包）</p>
<p>　　&middot;ping 网关IP<br />这个命令如果应答正确，表示局域网中的网关路由器正在运行并能够作出应答.说明了你的机器网络配置正常，如果不通。</p>
<p>　　&middot;ping 远程IP<br />如果能收到4个数据包的响应应答，那么表示成功的使用了缺省网关。通往互联网的链路是通的。</p>
<p>　　&middot;ping localhost<br />localhost是个系统安装后自动添加的一个解析，它是127.0.0.1的别名，每太计算机都应该能够将该名字转换成该地址。如果没有做到这一带内，则表示主机文件（hosts）中存在问题。</p>
<p>　　&middot;ping <a href="http://www.ithao123.com/" target="_blank"><span style="color: #810081;">www.ithao123.com</span></a>（如<a href="http://www.ithao123.com/" target="_blank"><span style="color: #810081;">www.ithao123.com</span></a><a href="http://www.99191.com/"></a>IT经验网 ）<br />如果执行ping后，出现无法解析出IP。那么就有可能是DNS出现问题了。那么这时候我们就可以试着<br />在PING一个IP地址来确认是不是DNS的问题。如：163的IP：202.108.9.16 必须是在正常情况下能允许PING的机器。</p>
<p>　　如果上面的测试都通过的话，那么访问互联网一般就没什么大问题了。</p>
<p>2、netstat</p>
<p>命令：</p>
<p>netstat -an 显示出你的计算机当前所开放的所有端口</p>
<p>3、地址解析协议(Address Resolution Protocol，AR P)<br />探测arp绑定（动态和静态）列表，显示所有连接了我的计算机，显示对方IP和MAC地址</p>
<p>命令：arp -a -------显示ARP 表<br />arp -s --------添加一个ARP 解析<br />arp -d--------删除一个ARP 解析</p>
<p><br />4. ipconfig -----------网管员必须掌握的 </p>
<p>IPConfig最常用的选项 </p>
<p>　　&middot;ipconfig <br />当使用IPConfig时不带任何参数选项，那么它为每个已经配置了的接口显示IP地址、子网掩码和缺省网关值。 </p>
<p>　　&middot;ipconfig /all <br />当使用all选项时，IPConfig能为DNS和WINS服务器显示它已配置且所要使用的附加信息（如IP地址等），并且显示内置于本地网卡中的物理地址（MAC）。如果IP地址是从DHCP服务器租用的，IPConfig将显示DHCP服务器的IP地址和租用地址预计失效的日期。 </p>
<p>　　&middot;ipconfig /release和ipconfig /renew <br />这是两个附加选项，只能在向DHCP服务器租用其IP地址的计算机上起作用。如果我们输入ipconfig /release，那么所有接口的租用IP地址便重新交付给DHCP服务器（归还IP地址）。如果我们输入ipconfig /renew，那么本地计算机便设法与DHCP服务器取得联系，并租用一个IP地址。请注意，大多数情况下网卡将被重新赋予和以前所赋予的相同的IP地址。 </p>
<p>5. netsh命令详解 </p>
<p>命令行工具是一个功能很强大的命令行工具</p>
<p>配置ＩＰ地址：<br />netsh interface ip set address "本地连接" static 192.168.1.100 255.255.255.0</p>
<p>配置主ＤＮＳ：<br />netsh interface ip set dns "本地连接" static 202.106.196.115</p>
<p>配置备用ＤＮＳ：<br />netsh interface ip add dns "本地连接" 202.106.0.20</p>
<p>导出配置脚本：<br />netsh -c interface ip dump &gt;c:\ip.txt<br />导入配置脚本：<br />netsh -f c:\ip.txt</p>
<p>6 net 命令-----------网管员必须掌握的。<br />net use \\ip\ipc$ " " /user:" " 建立IPC空链接 <br />禁止空连接Local_Machine\System\CurrentControlSet\Control\LSA\RestrictAnonymous 把这个值改成&rdquo;1&rdquo;即可<br />net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接 <br />net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对方C：到本地为H: <br />net use h: \\ip\c$ 登陆后映射对方C：到本地为H: <br />net use \\ip\ipc$ /del 删除IPC链接 <br />net use h: /del 删除映射对方到本地的为H:的映射 <br />net user 用户名　密码　/add 建立用户 <br />net user guest /active:yes 激活guest用户 <br />net user 查看有哪些用户 查看帐户的属性<br />net localgroup administrators 用户名 /add 把&ldquo;用户&rdquo;添加到管理员中使其具有管理员权限,注意：administrator后加s用复数 <br />在网络邻居上隐藏你的计算机 <br />net config server /hidden:yes <br />net config server /hidden:no 则为开启 <br />命令：Net send 计算机名/IP　* </p>
<p>命令：net stop messenger 停止信使服务，也可以在面板－服务修改</p>
<p>命令：net start messenger 开始信使服务</p>
<p>7.nslookup<br />用法是：　nslookup 域名<br />nslookup &ndash;type=类型 目标域名<br />nslookup &ndash;qt=类型 目标域名　注意qt必须小写。　类型可以是一下字符，不区分大小写<br />指定使用的名字服务器在默认情况下nslookup使用的是我们在本机TCP/IP配置中的DNS服务器进行查询，但有时候我们需要指定一个特定的服务器进行查询试验。这时候我们不需要更改本机的TCP/IP配置<br />nslookup &ndash;qt=类型 目标域名 指定的DNS服务器</p>
<p>8. telnet<br />例子：telnet ip 端口 远和登陆服务器,默认端口为23 </p>
</div>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/205036#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 18 Jun 2008 10:47:42 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/205036</link>
        <guid>http://liudaoru.javaeye.com/blog/205036</guid>
      </item>
      <item>
        <title>java 中变量的初始化顺序</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/204681" style="color:red;">http://liudaoru.javaeye.com/blog/204681</a>&nbsp;
          发表时间: 2008年06月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">public class T extends B {

	public T() {
		System.out.println(c);
	}

	public static void main(String[] args) {
		T.c = 'a';
		T t = new T();
	}

}

class B {

	static {
		c = 'b';
	}

	public static char c = 'c';

	public B() {
		System.out.println(c + "    1");
		c = 'd';
	}
	
	{
		c = 'e';
	}
	
}</pre>
<p>&nbsp;</p>
<p>基本的顺序是：</p>
<p>（静态初始化构造块 静态初始化定义） -&gt; 类名.变量初始化 -&gt; 普通初始化构造块 -&gt; 构造函数</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/204681#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Jun 2008 14:31:24 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/204681</link>
        <guid>http://liudaoru.javaeye.com/blog/204681</guid>
      </item>
      <item>
        <title>什么是TTL[z]</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/204641" style="color:red;">http://liudaoru.javaeye.com/blog/204641</a>&nbsp;
          发表时间: 2008年06月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>From: <a href="http://www.sudu8.com/wenti/2006-6-17/13.htm">http://www.sudu8.com/wenti/2006-6-17/13.htm</a></p>
<p>&nbsp;</p>
<p>什么是TTL</p>
<p>&nbsp;</p>
<p>在解析域名的时候我们经常会看到一个参数:TTL,那么什么是TTL呢?</p>
<p>&nbsp;</p>
<p class="titledetail">TTL值全称是&ldquo;生存时间（Time To Live)&rdquo;，简单的说它表示DNS记录在DNS服务器上缓存时间，直接的说，此值影响客户第2次访问您站点的速度，建议设为7200。</p>
<p class="titledetail">要理解TTL值，请先看下面的一个例子： </p>
<p class="titledetail">假设，有这样一个域名myhost.abc.com（其实，这就是一条DNS记录，通常表示在abc.com域中有一台名为myhost的主机）对应IP地址为1.1.1.1，它的TTL为10分钟。这个域名或称这条记录存储在一台名为dns.abc.com的DNS服务器上。 <br />现在有一个用户在浏览器中键入一下地址（又称URL）：<a href="http://myhost.abc.com/"><span style="color: #985d16;">http://myhost.abc.com</span></a> 这时会发生什么呢？</p>
<p class="titledetail">该访问者指定的DNS服务器（或是他的ISP,互联网服务商, 动态分配给他的)8.8.8.8就会试图为他解释myhost.abc.com，当然8.8.8.8这台DNS服务器由于没有包含myhost.abc.com这条信息，因此无法立即解析，但是通过全球DNS的递归查询后，最终定位到dns.abc.com这台DNS服务器，dns.abc.com这台DNS服务器将myhost.abc.com对应的IP地址1.1.1.1告诉8.8.8.8这台DNS服务器，然有再由8.8.8.8告诉用户结果。8.8.8.8为了以后加快对myhost.abc.com这条记录的解析，就将刚才的1.1.1.1结果保留一段时间，这就是TTL时间， 在这段时间内如果用户又有对myhost.abc.com这条记录的解析请求，它就直接告诉用户1.1.1.1，当TTL到期则又会重复上面的过程。 </p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/204641#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/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Jun 2008 12:14:59 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/204641</link>
        <guid>http://liudaoru.javaeye.com/blog/204641</guid>
      </item>
      <item>
        <title>微软的js加密工具</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/203873" style="color:red;">http://liudaoru.javaeye.com/blog/203873</a>&nbsp;
          发表时间: 2008年06月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>今天溜达csdn发现了一篇帖子《奇特的网页病毒代码？》<a href="http://topic.csdn.net/u/20080606/10/0FCFCA71-A23C-4026-8372-A9E2B19F0EF1.html">http://topic.csdn.net/u/20080606/10/0FCFCA71-A23C-4026-8372-A9E2B19F0EF1.html</a>，说有段代码怎么看都不像有问题，但是却会有安全提示。</p>
<p>&nbsp;</p>
<p>看了里面的说法，说可能是Script Encoder(<a href="http://www.onlinedown.net/soft/6376.htm">http://www.onlinedown.net/soft/6376.htm</a>下载)加密后的东西，先记一下，回头好好研究研究。。。。</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/203873#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>Sun, 15 Jun 2008 22:54:19 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/203873</link>
        <guid>http://liudaoru.javaeye.com/blog/203873</guid>
      </item>
      <item>
        <title>html文件中js代码执行顺序</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/203039" style="color:red;">http://liudaoru.javaeye.com/blog/203039</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>大家都知道js是顺序执行的，但是如果在一个函数的定义之前调用这个函数那会是什么效果那？</p>
<p>下面的代码是一个列子，如果myAbc没有定义则会提示错误，如果已经定义则会正确提示。</p>
<p>&nbsp;</p>
<pre name="code" class="js">&lt;script&gt;
try {
	myAbc();
} catch(e) {
	alert("error");
}
&lt;/script&gt;
&lt;script&gt;
function myAbc() {
	alert("myAbc");
}
&lt;/script&gt;
</pre>
<p>&nbsp;在这种情况下会报错。</p>
<p>&nbsp;</p>
<pre name="code" class="js">&lt;script&gt;
try {
	myAbc();
} catch(e) {
	alert("error");
}
function myAbc() {
	alert("another myAbc()");
}
&lt;/script&gt;
</pre>
<p>&nbsp;这种情况是可以执行的，这说明在一个script范围内定义函数会预加载，这样在调用函数的时候函数就已经存在了。</p>
<p>&nbsp;</p>
<pre name="code" class="js">&lt;script&gt;
try {
	myAbc();
} catch(e) {
	alert("error");
}
function myAbc() {
	alert("another myAbc()");
}
&lt;/script&gt;
&lt;script&gt;
function myAbc() {
	alert("myAbc");
}
&lt;/script&gt;
</pre>
<p>&nbsp;</p>
<p>这种情况下会提示什么那？</p>
<p>呵呵，another myAbc()，跟你想的不一样吧。</p>
<p>&nbsp;</p>
<p>总结一下，就是各个script代码模块都是顺序执行的，每个模块的代码只能执行前面已经定义的函数和自己所在代码模块的函数，而不能调用在其后面的模块的函数。</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/203039#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 13 Jun 2008 16:47:31 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/203039</link>
        <guid>http://liudaoru.javaeye.com/blog/203039</guid>
      </item>
      <item>
        <title>Java多态性探悉[z]</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/202756" style="color:red;">http://liudaoru.javaeye.com/blog/202756</a>&nbsp;
          发表时间: 2008年06月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>From: <a href="http://topic.csdn.net/u/20071127/11/2a64066b-2f42-4877-b799-c596710e49a6.html">http://topic.csdn.net/u/20071127/11/2a64066b-2f42-4877-b799-c596710e49a6.html</a></p>
<p>&nbsp;</p>
<p>一、基本概念 <br /><br />&nbsp; &nbsp; &nbsp; 多态性：发送消息给某个对象，让该对象自行决定响应何种行为。 <br />&nbsp; &nbsp; &nbsp; 通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。 <br /><br />&nbsp; &nbsp; &nbsp; java 的这种机制遵循一个原则：当超类对象引用变量引用子类对象时，被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法，但是这个被调用的方法必须是在超类中定义过的，也就是说被子类覆盖的方法。 <br /><br />&nbsp; &nbsp; &nbsp; 1. 如果a是类A的一个引用，那么，a可以指向类A的一个实例,或者说指向类A的一个子类。 <br />&nbsp; &nbsp; &nbsp; 2. 如果a是接口A的一个引用，那么,a必须指向实现了接口A的一个类的实例。 <br /><br /><br />二、Java多态性实现机制 <br /><br />&nbsp; &nbsp; &nbsp; SUN目前的JVM实现机制，类实例的引用就是指向一个句柄（handle）的指针，这个句柄是一对指针： <br />&nbsp; &nbsp; &nbsp; 一个指针指向一张表格，实际上这个表格也有两个指针（一个指针指向一个包含了对象的方法表，另外一个指向类对象，表明该对象所属的类型）； <br />&nbsp; &nbsp; &nbsp; 另一个指针指向一块从java堆中为分配出来内存空间。 <br /><br />&nbsp; &nbsp; &nbsp; The Java Virtual Machine does not require any particular internal structure for objects. In Sun's current implementation of the Java Virtual Machine, a reference to a class instance is a pointer to a handle that is itself a pair of pointers: one to a table containing the methods of the object and a pointer to the Class object that represents the type of the object, and the other to the memory allocated from the Java heap for the object data. （jvm规范中关于对象内存布局的说明） <br /><br /><br />三、总结 <br /><br />&nbsp; &nbsp; &nbsp; 1、通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。 <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; DerivedC c2=new DerivedC(); <br />&nbsp; &nbsp; &nbsp; &nbsp; BaseClass a1= c2;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //BaseClass 基类，DerivedC是继承自BaseClass的子类 <br />&nbsp; &nbsp; &nbsp; &nbsp; a1.play();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //play()在BaseClass，DerivedC中均有定义，即子类覆写了该方法 <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; 分析： <br />&nbsp; &nbsp; &nbsp; &nbsp; *&nbsp; 为什么子类的类型的对象实例可以覆给超类引用？ <br />&nbsp; &nbsp; &nbsp; &nbsp; 自动实现向上转型。通过该语句，编译器自动将子类实例向上移动，成为通用类型BaseClass； <br />&nbsp; &nbsp; &nbsp; &nbsp; *&nbsp; a.play()将执行子类还是父类定义的方法？ <br />&nbsp; &nbsp; &nbsp; &nbsp; 子类的。在运行时期，将根据a这个对象引用实际的类型来获取对应的方法。所以才有多态性。一个基类的对象引用，被赋予不同的子类对象引用，执行该方法时，将表现出不同的行为。 <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; 在a1=c2的时候，仍然是存在两个句柄，a1和c2，但是a1和c2拥有同一块数据内存块和不同的函数表。 <br /><br />&nbsp; &nbsp; &nbsp; 2、不能把父类对象引用赋给子类对象引用变量 <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; BaseClass a2=new BaseClass(); <br />&nbsp; &nbsp; &nbsp; &nbsp; DerivedC c1=a2;//出错 <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; 在java里面，向上转型是自动进行的,但是向下转型却不是，需要我们自己定义强制进行。 <br />&nbsp; &nbsp; &nbsp; &nbsp; c1=(DerivedC)a2; 进行强制转化,也就是向下转型. <br /><br />&nbsp; &nbsp; &nbsp; 3、记住一个很简单又很复杂的规则，一个类型引用只能引用引用类型自身含有的方法和变量。 <br />&nbsp; &nbsp; &nbsp; &nbsp; 你可能说这个规则不对的，因为父类引用指向子类对象的时候，最后执行的是子类的方法的。 <br />&nbsp; &nbsp; &nbsp; &nbsp; 其实这并不矛盾，那是因为采用了后期绑定，动态运行的时候又根据型别去调用了子类的方法。而假若子类的这个方法在父类中并没有定义，则会出错。 <br />&nbsp; &nbsp; &nbsp; &nbsp; 例如，DerivedC类在继承BaseClass中定义的函数外，还增加了几个函数（例如 myFun()） <br /><br />&nbsp; &nbsp; &nbsp; &nbsp; 分析： <br />&nbsp; &nbsp; &nbsp; &nbsp; 当你使用父类引用指向子类的时候，其实jvm已经使用了编译器产生的类型信息调整转换了。 <br />&nbsp; &nbsp; &nbsp; &nbsp; 这里你可以这样理解，相当于把不是父类中含有的函数从虚拟函数表中设置为不可见的。注意有可能虚拟函数表中有些函数地址由于在子类中已经被改写了，所以对象虚拟函数表中虚拟函数项目地址已经被设置为子类中完成的方法体的地址了。 <br /><br /><br />&nbsp; &nbsp; &nbsp; 4、Java与C++多态性的比较 <br /><br />&nbsp; &nbsp; &nbsp; jvm关于多态性支持解决方法是和c++中几乎一样的， <br />&nbsp; &nbsp; &nbsp; 只是c++中编译器很多是把类型信息和虚拟函数信息都放在一个虚拟函数表中，但是利用某种技术来区别。 <br /><br />&nbsp; &nbsp; &nbsp; Java把类型信息和函数信息分开放。Java中在继承以后，子类会重新设置自己的虚拟函数表，这个虚拟函数表中的项目有由两部分组成。从父类继承的虚拟函数和子类自己的虚拟函数。 <br />&nbsp; &nbsp; &nbsp; 虚拟函数调用是经过虚拟函数表间接调用的，所以才得以实现多态的。 <br /><br />&nbsp; &nbsp; &nbsp; Java的所有函数，除了被声明为final的，都是用后期绑定。 <br />&nbsp; &nbsp; &nbsp; C++实现多态性，使用关键字virtual，为了引起晚捆绑，使用虚函数。若一个函数在基类被声明为virtual，则所有子类中都是virtual的。对虚函数的重定义成为越位。 <br /></p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/202756#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 13 Jun 2008 00:21:22 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/202756</link>
        <guid>http://liudaoru.javaeye.com/blog/202756</guid>
      </item>
      <item>
        <title>UML相关知识</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/200659" style="color:red;">http://liudaoru.javaeye.com/blog/200659</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>UML统一建模语言介绍：<a href="http://www.ibm.com/developerworks/cn/rational/r-uml/">http://www.ibm.com/developerworks/cn/rational/r-uml/</a></p>
<p>UML2.0：<a href="http://www.ibm.com/developerworks/cn/rational/321_uml/">http://www.ibm.com/developerworks/cn/rational/321_uml/</a></p>
<p><span style="color: #999999;">UML 基础: </span>类图：<a href="http://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/">http://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/</a></p>
<p><span style="color: #999999;">UML 基础: </span>序列图：<a href="http://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/3101.html">http://www.ibm.com/developerworks/cn/rational/rationaledge/content/feb05/bell/3101.html</a></p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/200659#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/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><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, 05 Jun 2008 19:34:52 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/200659</link>
        <guid>http://liudaoru.javaeye.com/blog/200659</guid>
      </item>
      <item>
        <title>处理tomcat中文乱码问题[z]</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/200535" style="color:red;">http://liudaoru.javaeye.com/blog/200535</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>在JSP/Servlet 中主要有以下几个地方可以设置编码，pageEncoding="UTF-8"、contentType="text/html;charset=UTF -8"、request.setCharacterEncoding("UTF-8")和response.setCharacterEncoding ("UTF-8")，其中前两个只能用于JSP中，而后两个可以用于JSP和Servlet中。 <br /><br />1、pageEncoding="UTF-8"的作用是设置JSP编译成Servlet时使用的编码。 <br /><br />众所周知，JSP在服务器上是要先被编译成Servlet的。pageEncoding="UTF-8"的作用就是告诉JSP编译器在将JSP文件编译成Servlet时使用的编码。通常，在JSP内部定义的字符串（直接在JSP中定义，而不是从浏览器提交的数据）出现乱码时，很多都是由于该参数设置错误引起的。例如，你的JSP文件是以GBK为编码保存的，而在JSP中却指定pageEncoding="UTF-8"，就会引起JSP内部定义的字符串为乱码。 <br /><br />另外，该参数还有一个功能，就是在JSP中不指定contentType参数，也不使用response.setCharacterEncoding方法时，指定对服务器响应进行重新编码的编码。 <br /><br />2、contentType="text/html;charset=UTF-8"的作用是指定对服务器响应进行重新编码的编码。 <br /><br />在不使用response.setCharacterEncoding方法时，用该参数指定对服务器响应进行重新编码的编码。服务器在将数据发送到浏览器前，对数据进行重新编码时，使用的就是该编码。 <br /><br />3、request.setCharacterEncoding("UTF-8")的作用是设置对客户端请求进行重新编码的编码。 <br /><br />该方法用来指定对浏览器发送来的数据进行重新编码（或者称为解码）时，使用的编码。 <br /><br />4、response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。 <br /><br />服务器在将数据发送到浏览器前，对数据进行重新编码时，使用的就是该编码。 <br /><br />其次，要说一说浏览器是怎么样对接收和发送的数据进行编码的 <br /><br />response.setCharacterEncoding("UTF-8")的作用是指定对服务器响应进行重新编码的编码。同时，浏览器也是根据这个参数来对其接收到的数据进行重新编码（或者称为解码）。所以在无论你在JSP中设置response.setCharacterEncoding ("UTF-8")或者response.setCharacterEncoding("GBK")，浏览器均能正确显示中文（前提是你发送到浏览器的数据编码是正确的，比如正确设置了pageEncoding参数等）。读者可以做个实验，在JSP中设置 response.setCharacterEncoding("UTF-8")，在IE中显示该页面时，在IE的菜单中选择"查看(V)"&agrave;"编码 (D)"中可以查看到是" Unicode（UTF-8）"，而在在JSP中设置response.setCharacterEncoding ("GBK")，在IE中显示该页面时，在IE的菜单中选择"查看(V)"&agrave;"编码(D)"中可以查看到是"简体中文（GB2312）"。 <br /><br />浏览器在发送数据时，对URL和参数会进行URL编码，对参数中的中文，浏览器也是使用response.setCharacterEncoding参数来进行URL编码的。以百度和GOOGLE为例，如果你在百度中搜索"汉字"，百度会将其编码为"%BA%BA%D7%D6"。而在GOOGLE中搜索 "汉字"，GOOGLE会将其编码为"%E6%B1%89%E5%AD%97"，这是因为百度的 response.setCharacterEncoding参数为GBK，而GOOGLE的的 response.setCharacterEncoding参数为UTF-8。 <br /><br />浏览器在接收服务器数据和发送数据到服务器时所使用的编码是相同的，默认情况下均为JSP页面的response.setCharacterEncoding参数（或者contentType和 pageEncoding参数），我们称其为浏览器编码。当然，在IE中可以修改浏览器编码（在IE的菜单中选择"查看(V)"&agrave;"编码(D)"中修改），但通常情况下，修改该参数会使原本正确的页面中出现乱码。一个有趣的例子是，在IE中浏览GOOGLE的主页时，将浏览器编码修改为"简体中文（GB2312）"，此时，页面上的中文会变成乱码，不理它，在文本框中输入"汉字"，提交，GOOGLE会将其编码为"%BA%BA%D7%D6"，可见，浏览器在对中文进行URL编码时，使用的就是浏览器编码。 <br /><br />弄清了浏览器是在接收和发送数据时，是如何对数据进行编码的了，我们再来看看服务器是在接收和发送数据时，是如何对数据进行编码的。 <br /><br />对于发送数据，服务器按照response.setCharacterEncoding&mdash;contentType&mdash;pageEncoding的优先顺序，对要发送的数据进行编码。 <br /><br />对于接收数据，要分三种情况。一种是浏览器直接用URL提交的数据，另外两种是用表单的GET和POST方式提交的数据。 <br /><br />因为各种WEB服务器对这三种方式的处理也不相同，所以我们以Tomcat5.0为例。 <br /><br />无论使用那种方式提交，如果参数中包含中文，浏览器都会使用当前浏览器编码对其进行URL编码。 <br /><br />对于表单中POST方式提交的数据，只要在接收数据的JSP中正确request.setCharacterEncoding参数，即将对客户端请求进行重新编码的编码设置成浏览器编码，就可以保证得到的参数编码正确。有写读者可能会问，那如何得到浏览器编码呢？上面我们提过了，在默认请情况下，浏览器编码就是你在响应该请求的JSP页面中response.setCharacterEncoding设置的值。所以对于POST表单提交的数据，在获得数据的JSP页面中request.setCharacterEncoding要和生成提交该表单的JSP页面的 response.setCharacterEncoding设置成相同的值。 <br /><br />对于URL提交的数据和表单中GET方式提交的数据，在接收数据的JSP中设置request.setCharacterEncoding参数是不行的，因为在Tomcat5.0中，默认情况下使用ISO- 8859-1对URL提交的数据和表单中GET方式提交的数据进行重新编码（解码），而不使用该参数对URL提交的数据和表单中GET方式提交的数据进行重新编码（解码）。要解决该问题，应该在Tomcat的配置文件的Connector标签中设置useBodyEncodingForURI或者 URIEncoding属性，其中useBodyEncodingForURI参数表示是否用request.setCharacterEncoding 参数对URL提交的数据和表单中GET方式提交的数据进行重新编码，在默认情况下，该参数为false（Tomcat4.0中该参数默认为true）； URIEncoding参数指定对所有GET方式请求（包括URL提交的数据和表单中GET方式提交的数据）进行统一的重新编码（解码）的编码。 URIEncoding和useBodyEncodingForURI区别是，URIEncoding是对所有GET方式的请求的数据进行统一的重新编码（解码），而useBodyEncodingForURI则是根据响应该请求的页面的request.setCharacterEncoding参数对数据进行的重新编码（解码），不同的页面可以有不同的重新编码（解码）的编码。所以对于URL提交的数据和表单中GET方式提交的数据，可以修改 URIEncoding参数为浏览器编码或者修改useBodyEncodingForURI为true，并且在获得数据的JSP页面中 request.setCharacterEncoding参数设置成浏览器编码。 <br /><br />下面总结下，以Tomcat5.0为WEB服务器时，如何防止中文乱码。 <br /><br />1.对于同一个应用，最好统一编码，推荐为UTF-8，当然GBK也可以。 <br /><br />2.正确设置JSP的pageEncoding参数 <br /><br />3.在所有的JSP/Servlet中设置contentType="text/html;charset=UTF-8"或response.setCharacterEncoding("UTF-8")，从而间接实现对浏览器编码的设置。 <br /><br />4.对于请求，可以使用过滤器或者在每个JSP/Servlet中设置request.setCharacterEncoding("UTF-8")。同时，要修改Tomcat的默认配置，推荐将useBodyEncodingForURI参数设置为true，也可以将URIEncoding参数设置为 UTF-8（有可能影响其他应用，所以不推荐）。</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/200535#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 05 Jun 2008 15:22:36 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/200535</link>
        <guid>http://liudaoru.javaeye.com/blog/200535</guid>
      </item>
      <item>
        <title>Hashtable和HashMap的区别[z]</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/200366" style="color:red;">http://liudaoru.javaeye.com/blog/200366</a>&nbsp;
          发表时间: 2008年06月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>From: <a href="http://java.ccidnet.com/art/3737/20060428/533331_1.html">http://java.ccidnet.com/art/3737/20060428/533331_1.html</a></p>
<p>&nbsp;</p>
<p><strong>Hashtable和HashMap的区别：</strong><br />1.Hashtable是Dictionary的子类，HashMap是Map接口的一个实现类；</p>
<p><br />2.Hashtable中的方法是同步的，而HashMap中的方法在缺省情况下是非同步的。即是说，在多线程应用程序中，不用专门的操作就安全地可以使用Hashtable了；而对于HashMap，则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决：<br />Map&nbsp;Collections.synchronizedMap(Map&nbsp;m)<br />这个方法返回一个同步的Map，这个Map封装了底层的HashMap的所有方法，使得底层的HashMap即使是在多线程的环境中也是安全的。</p>
<p><br />3.在HashMap中，null可以作为键，这样的键只有一个；可以有一个或多个键所对应的值为null。当get()方法返回null值时，即可以表示HashMap中没有该键，也可以表示该键所对应的值为null。因此，在HashMap中不能由get()方法来判断HashMap中是否存在某个键，而应该用containsKey()方法来判断。</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/200366#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/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/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, 05 Jun 2008 09:47:51 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/200366</link>
        <guid>http://liudaoru.javaeye.com/blog/200366</guid>
      </item>
      <item>
        <title>Hadoop入门[z]</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/199779" style="color:red;">http://liudaoru.javaeye.com/blog/199779</a>&nbsp;
          发表时间: 2008年06月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <div class="blog_content"></div>
<div class="blog_content"><span style="color: #000000;"><span class="hilite1">Hadoop</span> 是Google </span><a href="http://avindev.googlepages.com/mapreduce.doc"><span style="color: #000000;">MapReduce</span></a><span style="color: #000000;">的一个Java实现。MapReduce是一种简化的分布式编程模式，让程序自动分布到一个由普通机器组成的超大集群上并发执行。就如同java程序员可以不考虑内存泄露一样， MapReduce的run-time系统会解决输入数据的分布细节，跨越机器集群的程序执行调度，处理机器的失效，并且管理机器之间的通讯请求。这样的模式允许程序员可以不需要有什么并发处理或者分布式系统的经验，就可以处理超大的分布式系统得资源。 </span></div>
<h2 class="blog_content"><span style="color: #000000;">&nbsp;&nbsp;&nbsp; 一、概论</span></h2>
<p class="blog_content"><span style="color: #000000;">&nbsp;&nbsp;&nbsp; 作为<span class="hilite1">Hadoop</span>程序员，他要做的事情就是：<br />&nbsp;&nbsp;&nbsp; 1、定义Mapper，处理输入的Key-Value对，输出中间结果。<br />&nbsp;&nbsp;&nbsp; 2、定义Reducer，可选，对中间结果进行规约，输出最终结果。<br />&nbsp;&nbsp;&nbsp; 3、定义InputFormat 和OutputFormat，可选，InputFormat将每行输入文件的内容转换为Java类供Mapper函数使用，不定义时默认为String。<br />&nbsp;&nbsp;&nbsp; 4、定义main函数，在里面定义一个Job并运行它。<br />&nbsp;&nbsp;&nbsp; </span></p>
<p class="blog_content"><span style="color: #000000;">&nbsp;&nbsp;&nbsp; 然后的事情就交给系统了。<br />&nbsp;&nbsp;&nbsp; 1.基本概念：<span class="hilite1">Hadoop</span>的HDFS实现了google的GFS文件系统，NameNode作为文件系统的负责调度运行在master，DataNode运行在每个机器上。同时<span class="hilite1">Hadoop</span>实现了Google的MapReduce，JobTracker作为MapReduce的总调度运行在master，TaskTracker则运行在每个机器上执行Task。<br /><br />&nbsp;&nbsp;&nbsp; 2.main()函数，创建JobConf，定义Mapper，Reducer，Input/OutputFormat 和输入输出文件目录，最后把Job提交給JobTracker，等待Job结束。<br /><br />&nbsp;&nbsp;&nbsp; 3.JobTracker，创建一个InputFormat的实例，调用它的getSplits()方法，把输入目录的文件拆分成FileSplist作为Mapper task 的输入，生成Mapper task加入Queue。<br /><br />&nbsp;&nbsp;&nbsp; 4.TaskTracker 向 JobTracker索求下一个Map/Reduce。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mapper Task先从InputFormat创建RecordReader，循环读入FileSplits的内容生成Key与Value，传给Mapper函数，处理完后中间结果写成SequenceFile.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Reducer Task 从运行Mapper的TaskTracker的Jetty上使用http协议获取所需的中间内容（33%），Sort/Merge后（66%），执行Reducer函数，最后按照OutputFormat写入结果目录。 </span></p>
<p class="blog_content"><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TaskTracker 每10秒向JobTracker报告一次运行情况，每完成一个Task10秒后，就会向JobTracker索求下一个Task。</span></p>
<p class="blog_content"><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Nutch项目的全部数据处理都构建在<span class="hilite1">Hadoop</span>之上，详见</span><a href="http://wiki.apache.org/lucene-hadoop-data/attachments/HadoopPresentations/attachments/yahoo-sds.pdf"><span style="color: #000000;">Scalable Computing with <span class="hilite1">Hadoop</span></span></a><span style="color: #000000;">。</span></p>
<h2 class="blog_content"><br /><span style="color: #000000;">&nbsp;&nbsp;&nbsp; 二、程序员编写的代码</span></h2>
<p class="blog_content"><span style="color: #000000;">&nbsp;&nbsp;&nbsp; 我们做一个简单的分布式的Grep，简单对输入文件进行逐行的正则匹配，如果符合就将该行打印到输出文件。因为是简单的全部输出，所以我们只要写Mapper函数，不用写Reducer函数，也不用定义Input/Output Format。</span></p>
<div class="blog_content"><span style="color: #000000;"><span>package</span> </span><span><span style="color: #000000;">&nbsp;demo.<span class="hilite1">hadoop</span><br /></span></span><span><br /><span style="color: #000000;">public</span></span><span style="color: #000000;"> <span>&nbsp;</span> <span>class</span> </span><span style="color: #000000;"><span>&nbsp;<span class="hilite1">Hadoop</span>Grep&nbsp;{<br /><br />&nbsp;</span> <span>public</span> <span>&nbsp;</span> <span>static</span> <span>&nbsp;</span> <span>class</span> <span>&nbsp;RegMapper&nbsp;</span> <span>extends</span> <span>&nbsp;MapReduceBase&nbsp;</span> <span>implements</span> </span><span style="color: #000000;"><span>&nbsp;Mapper&nbsp;{<br /><br />&nbsp;&nbsp;</span> <span>private</span> </span><span style="color: #000000;"><span>&nbsp;Pattern&nbsp;pattern;<br /><br />&nbsp;&nbsp;</span> <span>public</span> <span>&nbsp;</span> <span>void</span> </span><span style="color: #000000;"><span>&nbsp;configure(JobConf&nbsp;job)&nbsp;{<br />&nbsp;&nbsp;&nbsp;pattern&nbsp;</span> <span>=</span> <span>&nbsp;Pattern.compile(job.get(</span> <span>"</span> <span>mapred.mapper.regex</span> <span>"</span> </span><span style="color: #000000;"><span>));<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;</span> <span>public</span> <span>&nbsp;</span> <span>void</span> </span><span style="color: #000000;"><span>&nbsp;map(WritableComparable&nbsp;key,&nbsp;Writable&nbsp;value,&nbsp;OutputCollector&nbsp;output,&nbsp;Reporter&nbsp;reporter)<br />&nbsp;&nbsp;&nbsp;&nbsp;</span> <span>throws</span> </span><span style="color: #000000;"><span>&nbsp;IOException&nbsp;{<br />&nbsp;&nbsp;&nbsp;String&nbsp;text&nbsp;</span> <span>=</span> </span><span style="color: #000000;"><span>&nbsp;((Text)&nbsp;value).toString();<br />&nbsp;&nbsp;&nbsp;Matcher&nbsp;matcher&nbsp;</span> <span>=</span> </span><span style="color: #000000;"><span>&nbsp;pattern.matcher(text);<br />&nbsp;&nbsp;&nbsp;</span> <span>if</span> </span><span style="color: #000000;"><span>&nbsp;(matcher.find())&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;output.collect(key,&nbsp;value);<br />&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;}<br />&nbsp;}<br /><br />&nbsp;</span> <span>private</span> </span><span style="color: #000000;"><span>&nbsp;<span class="hilite1">Hadoop</span>Grep&nbsp;()&nbsp;{<br />&nbsp;}&nbsp;</span> <span>//</span> <span>&nbsp;singleton</span> </span><span><br /></span><span><br /><span style="color: #000000;">&nbsp;</span></span><span style="color: #000000;"> <span>public</span> <span>&nbsp;</span> <span>static</span> <span>&nbsp;</span> <span>void</span> <span>&nbsp;main(String[]&nbsp;args)&nbsp;</span> <span>throws</span> </span><span style="color: #000000;"><span>&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;<br />&nbsp;&nbsp;JobConf&nbsp;grepJob&nbsp;</span> <span>=</span> <span>&nbsp;</span> <span>new</span> <span>&nbsp;JobConf(<span class="hilite1">Hadoop</span>Grep.</span> <span>class</span> </span><span style="color: #000000;"><span>);<br />&nbsp;&nbsp;grepJob.setJobName(</span> <span>"</span> <span>grep-search</span> <span>"</span> </span><span style="color: #000000;"><span>);<br />&nbsp;&nbsp;grepJob.set(</span> <span>"</span> <span>mapred.mapper.regex</span> <span>"</span> <span>,&nbsp;args[</span> <span>2</span> </span><span style="color: #000000;"><span>]);<br /><br />&nbsp;&nbsp;grepJob.setInputPath(</span> <span>new</span> <span>&nbsp;Path(args[</span> <span>0</span> </span><span style="color: #000000;"><span>]));<br />&nbsp;&nbsp;grepJob.setOutputPath(</span> <span>new</span> <span>&nbsp;Path(args[</span> <span>1</span> </span><span style="color: #000000;"><span>]));<br />&nbsp;&nbsp;grepJob.setMapperClass(RegMapper.</span> <span>class</span> </span><span style="color: #000000;"><span>);<br />&nbsp;&nbsp;grepJob.setReducerClass(IdentityReducer.</span> <span>class</span> </span><span><span style="color: #000000;">);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;JobClient.runJob(grepJob);<br />&nbsp;}<br />}<br /></span></span></div>
<p class="blog_content"><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RegMapper类的configure()函数接受由main函数传入的查找字符串，map() 函数进行正则匹配，key是行数，value是文件行的内容，符合的文件行放入中间结果。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main()函数定义由命令行参数传入的输入输出目录和匹配字符串，Mapper函数为RegMapper类，Reduce函数是什么都不做，直接把中间结果输出到最终结果的的IdentityReducer类，运行Job。</span></p>
<p class="blog_content"><br /><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>整个代码非常简单，丝毫没有分布式编程的任何细节。</strong></span></p>
<h2 class="blog_content"><br /><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 三.运行<span class="hilite1">Hadoop</span>程序</span></h2>
<p class="blog_content"><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hilite1">Hadoop</span>这方面的文档写得不全面，综合参考</span><a href="http://wiki.apache.org/lucene-hadoop/GettingStartedWithHadoop"><span style="color: #000000;">GettingStartedWith<span class="hilite1">Hadoop</span></span></a><span style="color: #000000;">&nbsp;与<span style="text-decoration: underline;"><span>Nutch <span class="hilite1">Hadoop</span> Tutorial</span></span> 两篇后，再碰了很多钉子才终于完整的跑起来了，记录如下：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /><br /></span><span style="color: #000000;"><strong>3.1 local运行模式<br /></strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 完全不进行任何分布式计算，不动用任何namenode,datanode的做法，适合一开始做调试代码。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解压<span class="hilite1">hadoop</span>，其中conf目录是配置目录，<span class="hilite1">hadoop</span>的配置文件在<span class="hilite1">hadoop</span>-default.xml，如果要修改配置，不是直接修改该文件，而是修改<span class="hilite1">hadoop</span>-site.xml，将该属性在<span class="hilite1">hadoop</span>-site.xml里重新赋值。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1">hadoop</span>-default.xml的默认配置已经是local运行，不用任何修改，配置目录里唯一必须修改的是<span class="hilite1">hadoop</span>-env.sh 里<span style="font-family: Courier New;">JAVA_HOME</span>的位置。</span></p>
<p class="blog_content"><br /><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将编译好的<span class="hilite1">Hadoop</span>Grep与RegMapper.class 放入<span class="hilite1">hadoop</span>/build/classes/demo/<span class="hilite1">hadoop</span>/目录 找一个比较大的log文件放入一个目录，然后运行</span></p>
<div class="blog_content"><span style="color: #000000;"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hilite1">hadoop</span></span> <span>/</span> <span>bin</span> <span>/</span> <span><span class="hilite1">hadoop</span>&nbsp;demo.<span class="hilite1">hadoop</span>.<span class="hilite1">Hadoop</span>Grep&nbsp;log文件所在目录&nbsp;任意的输出目录&nbsp;grep的字符串</span> </span></div>
<p class="blog_content"><br /><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;查看输出目录的结果，查看<span class="hilite1">hadoop</span>/logs/里的运行日志。&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp; 在重新运行前，先删掉输出目录。<br />&nbsp; </span></p>
<p class="blog_content"><span style="color: #000000;"><strong>3.2 单机集群运行模式</strong> </span></p>
<p class="blog_content"><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;现在来搞一下只有单机的集群.假设以完成3.1中的设置，本机名为<span class="hilite1">hadoop</span>server<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第1步.&nbsp;&nbsp;&nbsp; 然后修改<span class="hilite1">hadoop</span>-site.xml ，加入如下内容：</span></p>
<div class="blog_content"><span style="color: #000000;"><span>&lt;</span> <span>property</span> <span>&gt;</span> </span><span><br /><span style="color: #000000;">&nbsp;&nbsp;</span></span><span style="color: #000000;"> <span>&lt;</span> <span>name</span> <span>&gt;</span> <span>fs.default.name</span> <span>&lt;/</span> <span>name</span> <span>&gt;</span> </span><span><br /><span style="color: #000000;">&nbsp;&nbsp;</span></span><span style="color: #000000;"> <span>&lt;</span> <span>value</span> <span>&gt;</span> <span><span class="hilite1">hadoop</span>server:9000</span> <span>&lt;/</span> <span>value</span> <span>&gt;</span> </span><span><br /></span><span style="color: #000000;"><span>&lt;/</span> <span>property</span> <span>&gt;</span> </span><span><br /></span><span style="color: #000000;"><span>&lt;</span> <span>property</span> <span>&gt;</span> </span><span><br /><span style="color: #000000;">&nbsp;&nbsp;</span></span><span style="color: #000000;"> <span>&lt;</span> <span>name</span> <span>&gt;</span> <span>mapred.job.tracker</span> <span>&lt;/</span> <span>name</span> <span>&gt;</span> </span><span><br /><span style="color: #000000;">&nbsp;&nbsp;</span></span><span style="color: #000000;"> <span>&lt;</span> <span>value</span> <span>&gt;</span> <span><span class="hilite1">hadoop</span>server:9001</span> <span>&lt;/</span> <span>value</span> <span>&gt;</span> </span><span><br /></span><span style="color: #000000;"><span>&lt;/</span> <span>property</span> <span>&gt;</span> </span><span><br /></span><span style="color: #000000;"><span>&lt;</span> <span>property</span> <span>&gt;</span> </span><span><br /><span style="color: #000000;">&nbsp;&nbsp;</span></span><span style="color: #000000;"> <span>&lt;</span> <span>name</span> <span>&gt;</span> <span>dfs.replication</span> <span>&lt;/</span> <span>name</span> <span>&gt;</span> </span><span><br /><span style="color: #000000;">&nbsp;&nbsp;</span></span><span style="color: #000000;"> <span>&lt;</span> <span>value</span> <span>&gt;</span> <span>1</span> <span>&lt;/</span> <span>value</span> <span>&gt;</span> </span><span><br /></span><span style="color: #000000;"><span>&lt;/</span> <span>property</span> <span>&gt;</span> </span></div>
<p class="blog_content"><br /><span style="color: #000000;">&nbsp;&nbsp;&nbsp; 从此就将运行从local文件系统转向了<span class="hilite1">hadoop</span>的hdfs系统，mapreduce的jobtracker也从local的进程内操作变成了分布式的任务系统，9000，9001两个端口号是随便选择的两个空余端口号。<br />&nbsp; <br />&nbsp; 另外，如果你的/tmp目录不够大，可能还要修改<span class="hilite1">hadoop</span>.tmp.dir属性。</span></p>
<p class="blog_content"><br /><span style="color: #000000;">&nbsp; 第2步. 增加ssh不输入密码即可登陆。<br /><br />&nbsp;&nbsp;&nbsp; 因为<span class="hilite1">Hadoop</span>需要不用输入密码的ssh来进行调度，在不su的状态下，在自己的home目录运行ssh-keygen -t rsa ,然后一路回车生成密钥，再进入.ssh目录,cp id_rsa.pub authorized_keys<br />&nbsp;&nbsp;&nbsp; 详细可以man 一下ssh, 此时执行ssh <span class="hilite1">hadoop</span>server，不需要输入任何密码就能进入了。</span></p>
<p class="blog_content"><span style="color: #000000;">&nbsp; 3.格式化namenode，执行<br />&nbsp;&nbsp;bin/<span class="hilite1">hadoop</span> namenode -format<br /><br />&nbsp; 4.启动<span class="hilite1">Hadoop</span><br />&nbsp;&nbsp;&nbsp;&nbsp; 执行<span class="hilite1">hadoop</span>/bin/start-all.sh, 在本机启动namenode,datanode,jobtracker,tasktracker<br />&nbsp; <br />&nbsp; 5.现在将待查找的log文件放入hdfs,。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;执行<span class="hilite1">hadoop</span>/bin/<span class="hilite1">hadoop</span> dfs 可以看到它所支持的文件操作指令。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;执行<span class="hilite1">hadoop</span>/bin/<span class="hilite1">hadoop</span> dfs put log文件所在目录 in ，则log文件目录已放入hdfs的/user/user-name/in 目录中</span></p>
<p class="blog_content"><span style="color: #000000;">&nbsp; 6.现在来执行Grep操作<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="hilite1">hadoop</span>/bin/<span class="hilite1">hadoop</span> demo.<span class="hilite1">hadoop</span>.<span class="hilite1">Hadoop</span>Grep in out<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 查看<span class="hilite1">hadoop</span>/logs/里的运行日志，重新执行前。运行<span class="hilite1">hadoop</span>/bin/<span class="hilite1">hadoop</span> dfs rmr out 删除out目录。<br /><br />&nbsp; 7.运行<span class="hilite1">hadoop</span>/bin/stop-all.sh 结束</span></p>
<p class="blog_content"><span style="color: #000000;"><strong>&nbsp; 3.3 集群运行模式<br /></strong>&nbsp; 假设已执行完3.2的配置，假设第2台机器名是<span class="hilite1">hadoop</span>server2<br />&nbsp; 1.创建与<span class="hilite1">hadoop</span>server同样的执行用户，将<span class="hilite1">hadoop</span>解压到相同的目录。<br /><br />&nbsp; 2.同样的修改haoop-env.sh中的JAVA_HOME 及修改与3.2同样的<span class="hilite1">hadoop</span>-site.xml<br /><br />&nbsp; 3. 将<span class="hilite1">hadoop</span>server中的/home/username/.ssh/authorized_keys 复制到<span class="hilite1">hadoop</span>server2,保证<span class="hilite1">hadoop</span>server可以无需密码登陆<span class="hilite1">hadoop</span>server2<br />&nbsp;&nbsp;&nbsp;&nbsp; scp /home/username/.ssh/authorized_keys&nbsp; </span><a href="mailto:username@hadoopserver2:/home/username/.ssh/authorized_keys"><span style="color: #000000;">username@<span class="hilite1">hadoop</span>server2:/home/username/.ssh/authorized_keys</span></a><br /><span style="color: #000000;">&nbsp;<br />&nbsp; 4.修改<span class="hilite1">hadoop</span>-server的<span class="hilite1">hadoop</span>/conf/slaves文件, 增加集群的节点，将localhost改为<br />&nbsp;&nbsp;&nbsp; <span class="hilite1">hadoop</span>-server<br />&nbsp;&nbsp;&nbsp; <span class="hilite1">hadoop</span>-server2<br /><br />&nbsp; 5.在<span class="hilite1">hadoop</span>-server执行<span class="hilite1">hadoop</span>/bin/start-all.sh<br />&nbsp;&nbsp; 将会在<span class="hilite1">hadoop</span>-server启动namenode,datanode,jobtracker,tasktracker<br />&nbsp;&nbsp; 在<span class="hilite1">hadoop</span>-server2启动datanode 和tasktracker<br />&nbsp; <br />&nbsp; 6.现在来执行Grep操作<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="hilite1">hadoop</span>/bin/<span class="hilite1">hadoop</span> demo.<span class="hilite1">hadoop</span>.<span class="hilite1">Hadoop</span>Grep in out<br />&nbsp;&nbsp;&nbsp; 重新执行前,运行<span class="hilite1">hadoop</span>/bin/<span class="hilite1">hadoop</span> dfs rmr out 删除out目录<br /><br />&nbsp; 7.运行<span class="hilite1">hadoop</span>/bin/stop-all.sh 结束。<br />&nbsp;&nbsp;&nbsp; </span></p>
<h2 class="blog_content"><span style="color: #000000;">四、效率</span></h2>
<p class="blog_content"><span style="color: #000000;">&nbsp;&nbsp; &nbsp;经测试，<span class="hilite1">Hadoop</span>并不是万用灵丹，很取决于文件的大小和数量，处理的复杂度以及群集机器的数量，相连的带宽，当以上四者并不大时，<span class="hilite1">hadoop</span>优势并不明显。<br />&nbsp;&nbsp; &nbsp;比如，不用<span class="hilite1">hadoop</span>用java写的简单grep函数处理100M的log文件只要4秒，用了<span class="hilite1">hadoop</span> local的方式运行是14秒，用了<span class="hilite1">hadoop</span>单机集群的方式是30秒，用双机集群10M网口的话更慢，慢到不好意思说出来的地步。</span></p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/199779#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/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/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 03 Jun 2008 16:40:54 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/199779</link>
        <guid>http://liudaoru.javaeye.com/blog/199779</guid>
      </item>
      <item>
        <title>积点成字</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/199753" style="color:red;">http://liudaoru.javaeye.com/blog/199753</a>&nbsp;
          发表时间: 2008年06月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp;休息一下。。。</p>
<p>............................................................<br />..........&nbsp;&nbsp; .................................... ..........<br />..........&nbsp;&nbsp; .................................... ..........<br />................................................. ..........<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;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .................. ..........<br />....&nbsp;&nbsp;&nbsp; ...............&nbsp;&nbsp; ....................... ..........<br />.....&nbsp;&nbsp; ..............&nbsp; ......................... ..........<br />......&nbsp;&nbsp; ...........&nbsp; ........................... ..........<br />.......&nbsp;&nbsp; .........&nbsp; .................... ....... ..........<br />........&nbsp;&nbsp; ......&nbsp; ...................... ....... ..........<br />..........&nbsp; ...&nbsp;&nbsp; ....................... ....... ..........<br />............&nbsp;&nbsp;&nbsp; ......................... ....... ..........<br />..........&nbsp; ..&nbsp; ......................... ....... ..........<br />.........&nbsp;&nbsp; ...&nbsp; ........................ ....... ..........<br />........&nbsp; ......&nbsp; ....................... ....... ..........<br />.......&nbsp;&nbsp; ......&nbsp;&nbsp; ...................... ....... ..........<br />......&nbsp;&nbsp;&nbsp; ......&nbsp;&nbsp;&nbsp; ............................. ..........<br />.................&nbsp;&nbsp;&nbsp; ............................ ..........<br />..................&nbsp;&nbsp;&nbsp; ........................... ..........<br />..................&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ......................... ..........<br />............................................&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ..........<br />............................................................</p>
<p>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOO<span style="color: #ffffff;">OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO</span>OOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OOOOOOOOOOOOOOOOOOOOOOO</span>OOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOO<span style="color: #ffffff;">OOO</span>OOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOO<span style="color: #ffffff;">OO</span>OOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOO<span style="color: #ffffff;">OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO</span>OOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO<br />OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/199753#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 03 Jun 2008 15:40:25 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/199753</link>
        <guid>http://liudaoru.javaeye.com/blog/199753</guid>
      </item>
      <item>
        <title>SimpleDateFormat相关参数</title>
        <author>liudaoru</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://liudaoru.javaeye.com">liudaoru</a>&nbsp;
          链接：<a href="http://liudaoru.javaeye.com/blog/199568" style="color:red;">http://liudaoru.javaeye.com/blog/199568</a>&nbsp;
          发表时间: 2008年06月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>From: <a href="http://topic.csdn.net/t/20031217/15/2573884.html">http://topic.csdn.net/t/20031217/15/2573884.html</a></p>
<p>import &nbsp; java.text.SimpleDateFormat; &nbsp; <br />&nbsp; String &nbsp; strDate=new &nbsp; SimpleDateFormat("yyyy-MM-dd").format(new &nbsp; java.util.Date()); &nbsp; <br />&nbsp; &nbsp; <br />&nbsp; 其中参数解释： &nbsp; <br />&nbsp; Letter &nbsp; &nbsp; Date &nbsp; or &nbsp; Time &nbsp; Component &nbsp; &nbsp; Presentation &nbsp; &nbsp; Examples &nbsp; &nbsp; &nbsp; <br />&nbsp; G &nbsp; &nbsp; Era &nbsp; designator &nbsp; &nbsp; Text &nbsp; &nbsp; AD &nbsp; &nbsp; &nbsp; <br />&nbsp; y &nbsp; &nbsp; Year &nbsp; &nbsp; Year &nbsp; &nbsp; 1996; &nbsp; 96 &nbsp; &nbsp; &nbsp; <br />&nbsp; M &nbsp; &nbsp; Month &nbsp; in &nbsp; year &nbsp; &nbsp; Month &nbsp; &nbsp; July; &nbsp; Jul; &nbsp; 07 &nbsp; &nbsp; &nbsp; <br />&nbsp; w &nbsp; &nbsp; Week &nbsp; in &nbsp; year &nbsp; &nbsp; Number &nbsp; &nbsp; 27 &nbsp; &nbsp; &nbsp; <br />&nbsp; W &nbsp; &nbsp; Week &nbsp; in &nbsp; month &nbsp; &nbsp; Number &nbsp; &nbsp; 2 &nbsp; &nbsp; &nbsp; <br />&nbsp; D &nbsp; &nbsp; Day &nbsp; in &nbsp; year &nbsp; &nbsp; Number &nbsp; &nbsp; 189 &nbsp; &nbsp; &nbsp; <br />&nbsp; d &nbsp; &nbsp; Day &nbsp; in &nbsp; month &nbsp; &nbsp; Number &nbsp; &nbsp; 10 &nbsp; &nbsp; &nbsp; <br />&nbsp; F &nbsp; &nbsp; Day &nbsp; of &nbsp; week &nbsp; in &nbsp; month &nbsp; &nbsp; Number &nbsp; &nbsp; 2 &nbsp; &nbsp; &nbsp; <br />&nbsp; E &nbsp; &nbsp; Day &nbsp; in &nbsp; week &nbsp; &nbsp; Text &nbsp; &nbsp; Tuesday; &nbsp; Tue &nbsp; &nbsp; &nbsp; <br />&nbsp; a &nbsp; &nbsp; Am/pm &nbsp; marker &nbsp; &nbsp; Text &nbsp; &nbsp; PM &nbsp; &nbsp; &nbsp; <br />&nbsp; H &nbsp; &nbsp; Hour &nbsp; in &nbsp; day &nbsp; (0-23) &nbsp; &nbsp; Number &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; <br />&nbsp; k &nbsp; &nbsp; Hour &nbsp; in &nbsp; day &nbsp; (1-24) &nbsp; &nbsp; Number &nbsp; &nbsp; 24 &nbsp; &nbsp; &nbsp; <br />&nbsp; K &nbsp; &nbsp; Hour &nbsp; in &nbsp; am/pm &nbsp; (0-11) &nbsp; &nbsp; Number &nbsp; &nbsp; 0 &nbsp; &nbsp; &nbsp; <br />&nbsp; h &nbsp; &nbsp; Hour &nbsp; in &nbsp; am/pm &nbsp; (1-12) &nbsp; &nbsp; Number &nbsp; &nbsp; 12 &nbsp; &nbsp; &nbsp; <br />&nbsp; m &nbsp; &nbsp; Minute &nbsp; in &nbsp; hour &nbsp; &nbsp; Number &nbsp; &nbsp; 30 &nbsp; &nbsp; &nbsp; <br />&nbsp; s &nbsp; &nbsp; Second &nbsp; in &nbsp; minute &nbsp; &nbsp; Number &nbsp; &nbsp; 55 &nbsp; &nbsp; &nbsp; <br />&nbsp; S &nbsp; &nbsp; Millisecond &nbsp; &nbsp; Number &nbsp; &nbsp; 978 &nbsp; &nbsp; &nbsp; <br />&nbsp; z &nbsp; &nbsp; Time &nbsp; zone &nbsp; &nbsp; General &nbsp; time &nbsp; zone &nbsp; &nbsp; Pacific &nbsp; Standard &nbsp; Time; &nbsp; PST; &nbsp; GMT-08:00 &nbsp; &nbsp; &nbsp; <br />&nbsp; Z &nbsp; &nbsp; Time &nbsp; zone &nbsp; &nbsp; RFC &nbsp; 822 &nbsp; time &nbsp; zone &nbsp; &nbsp; -0800 &nbsp; &nbsp; &nbsp; <br />&nbsp; &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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 结果： &nbsp; <br />&nbsp; "yyyy.MM.dd &nbsp; G &nbsp; 'at' &nbsp; HH:mm:ss &nbsp; z" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2001.07.04 &nbsp; AD &nbsp; at &nbsp; 12:08:56 &nbsp; PDT &nbsp; &nbsp; &nbsp; <br />&nbsp; "EEE, &nbsp; MMM &nbsp; d, &nbsp; ''yy" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Wed, &nbsp; Jul &nbsp; 4, &nbsp; '01 &nbsp; &nbsp; &nbsp; <br />&nbsp; "h:mm &nbsp; a" &nbsp; &nbsp; 12:08 &nbsp; PM &nbsp; &nbsp; &nbsp; <br />&nbsp; "hh &nbsp; 'o''clock' &nbsp; a, &nbsp; zzzz" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 12 &nbsp; o'clock &nbsp; PM, &nbsp; Pacific &nbsp; Daylight &nbsp; Time &nbsp; &nbsp; &nbsp; <br />&nbsp; "K:mm &nbsp; a, &nbsp; z" &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; 0:08 &nbsp; PM, &nbsp; PDT &nbsp; &nbsp; &nbsp; <br />&nbsp; "yyyyy.MMMMM.dd &nbsp; GGG &nbsp; hh:mm &nbsp; aaa" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 02001.July.04 &nbsp; AD &nbsp; 12:08 &nbsp; PM &nbsp; &nbsp; &nbsp; <br />&nbsp; "EEE, &nbsp; d &nbsp; MMM &nbsp; yyyy &nbsp; HH:mm:ss &nbsp; Z" &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Wed, &nbsp; 4 &nbsp; Jul &nbsp; 2001 &nbsp; 12:08:56 &nbsp; -0700 &nbsp; &nbsp; &nbsp; <br />&nbsp; "yyMMddHHmmssZ" &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; 010704120856-0700&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://liudaoru.javaeye.com/blog/199568#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>Mon, 02 Jun 2008 23:12:52 +0800</pubDate>
        <link>http://liudaoru.javaeye.com/blog/199568</link>
        <guid>http://liudaoru.javaeye.com/blog/199568</guid>
      </item>
  </channel>
</rss>