<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>简单才是美</title>
    <description></description>
    <link>http://zhongzhao-2008.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>一个29岁总裁对大学生的16条忠告</title>
        <author>zhongzhao_2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhongzhao-2008.javaeye.com">zhongzhao_2008</a>&nbsp;
          链接：<a href="http://zhongzhao-2008.javaeye.com/blog/213169" style="color:red;">http://zhongzhao-2008.javaeye.com/blog/213169</a>&nbsp;
          发表时间: 2008年07月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一、读大学，究竟读什么？   <br /><br />大学生和非大学生最主要的区别绝对不在于是否掌握了一门专业技能……一个经过独立思考而坚持错误观点的人比一个不假思索而接受正确观点的人更值得肯定……草木可以在校园年复一年地生长，而我们却注定要很快被另外一群人替代……尽管每次网到鱼的不过是一个网眼，但要想捕到鱼，就必须要编织一张网……<br /><br /> 二、人生规划：三岔路口的抉择  <br /><br />不走弯路就是捷径…… 仕途，商界，学术。在这人生的三岔路口，你将何去何从……与其跟一百个人去竞争五个职位，不如跟一个人去竞争一个职位……学术精神天然的应当与尘嚣和喧哗保持足够的距离……商场不忌讳任何神话。你也完全可能成为下一个传奇…… <br /><br />三、专业无冷热，学校无高低   <br /><br />没有哪个用人单位会认为你代表了你的学校或者你的专业……既然是概率，就存在不止一种可能性……如果是选择学术，冷门专业比热门专业更容易获得成就……跨专业几乎早已成为一种流行一种时尚……大学之间的实力之争到了考研考场和人才市场原来是那样的微不足道……<br /><br /> 四、不可一业不专，不可只专一业  <br /><br />千招会，不如一招熟…… 十个百分之十并不是百分之百，而是零……在这个现实的社会，真正实现个人价值才是最体面最有面子最有尊严的事情……要想知道需要学什么，最好的方式就是留意招聘信息……很多专业因为不具备专长的有效性，所以成为了屠龙之术……为什么不将“买一送一”的促销思维运用到求职应聘的过程中来呢…… <br /><br />五、不逃课的学生不是好学生  <br /><br />什么课都不逃，跟什么课都逃掉没什么两样……读大学，关键是学会思考问题的方法……逃课没有错，但是不要逃错课……英语角绝对不是学英语的地方……为了英语丢了专业，那就舍本逐末了……招聘单位是用人才的地方，而不是培养人才的地方……既要逃课，又要让老师给高分…… <br /><br />六、勤工俭学的辩证法  <br /><br />对于贫困生来说，首先要做的不是挣钱，而是省钱……大部分女生将电脑当成了影碟机，大部分男生将电脑当成了游戏机……在这个处女膜都可以随意伪造的年代，还有什么值得轻易相信……态度决定一切……当学习下降到次要的地位，大学生就只能说是兼职的学生了…… <br /><br />七、做事不如做人，人脉决定成败  <br /><br />学问好不如做事好，做事好不如做人好……会说话，就能减少奋斗三十年……一个人有多少钱并不是指他拥有多少钱的所有权，而是指他拥有多少钱的使用权……一个人赚的钱，12.5%是靠自身的知识，87.5%则来自人脉关系……三十岁以前靠专业赚钱，三十岁以后拿人脉赚钱……你和世界上的任何一个人之间只隔着四个人…… <br /><br />八、互联网：倚天剑与达摩克利斯之剑  <br /><br />花两个小时就写出一篇天衣无缝的优秀毕业论文……在互联网领域创业的技术门槛并不高，关键的是市场眼光和营销能力……轻舞飞扬已经红颜薄命了，而痞子蔡却继续跟别的女孩发生着一次又一次的亲密接触……很多大学生的网友遍布祖国大江南北，可他们却从未主动向周围的人说一声：你好，我们可以聊聊吗…… <br /><br />九、考研：痛苦的安乐死  <br /><br />没有比浪费青春更失败的事情了……研究生扩招的速度是30%，也就意味着硕士学历贬值的速度是30%……同样是付出三年的努力，你可以让E1的值增加1，也可以让E2的值增加2甚至增加3……读完硕士或博士并不等于工作能力更强……面对13.54万的成本，你还会毫不犹豫地投资读研究生吗……努力就会有结果，但不一定是好结果……   <br /><br />十、留学：“海龟”变“海带”  <br /><br />月薪2500元的工作，居然引得三个“海归”硕士争相竞聘……对于某些专业而言，去美国留学和去埃塞俄比亚留学没什么两样……既然全世界的公司都想到中国的市场上来瓜分蛋糕，为什么中国人还要一门心思到国外去留学然后给外国人打工…… <br /><br />十一、非统招：养卑照样处优  <br /><br />她在中国信息产业界创下了几项纪录。她被称为中国的“打工皇后”。而她不过是一名自考大专生……要想把曾经输掉的东西赢回来，就必须把自己比别人少付出的努力补上来……非统招生不但要有一定的实力，而且必须掌握一定的技巧，做到扬长避短出奇制胜……路在脚下。好走，走好…… <br /><br />十二、毕业：十面埋伏的陷阱  <br /><br />母校不把自己当母亲，你又何必把自己当儿女……听辅导班不过是花钱买踏实……人才市场就是一个地雷阵……通过多种方式求职固然没有错，但是千万不要饥不择食……只要用人单位一说要你交钱，你掉头就走便是了……这年头立字尚且不足以为据，更何况一个口头约定…… <br /><br />十三、求职：做人不要太厚道  <br /><br />求职简历必须突出自己的核心竞争力……求职的时候大可不必像严守一那样“有一说一”……一个人说假话并不难，难的是把假话说到底，并且不露一丝破绽……在填写自己的特长时，一定要尽可能详细……一份求职简历只要用一张A4纸做个表格就足够了……面试其实是有规律的，每次面试的时候只要背标准答案就行了…… <br /><br />十四、骑一头能找千里马的驴 <br /><br /> 美国铁路两条铁轨之间的标准距离是4英尺8.5英寸，为什么呢？因为两匹马臀部之间的宽度是4英尺8.5英寸……垃圾是放错位置的人才……世界上最大的悲剧莫过于有太多的年轻人从来没有发现自己真正想做什么……中小型企业或许能够让你得到更充分的锻炼……从基层做起并不意味着可以从基层的每一个职位做起……要“钱途”，更要前途…… <br /><br />十五、写字楼政治：白领必修课  <br /><br />大公司是做人，小公司是做事……职员能否得到提升，很大程度不在于是否努力，而在于老板对你的赏识程度……公司的事情和秘密永远比你想象的还要复杂和深奥……在适当的时候装糊涂不但是必要的，而且是睿智的……就把你的同事当成一群你可以叫得出名字的陌生人好了…… <br /><br />十六、创业：29岁以前做富翁 <br /><br /> 瘦死的骆驼比马大……撑死胆大的，饿死胆小的……不再是“大鱼吃小鱼”，而是“快鱼吃慢鱼”……对于趋势的把握是一个创业者最重要的能力……高科技行业留给毕业生的空间已经很小……欲速则不达。在创业以前通过给别人打工而积累经验是非常必要的……市场永远比产品更重要……钱不够花，怎么办？第一，看菜吃饭；第二，借鸡生蛋……
          <br/>
          <span style="color:red;">
            <a href="http://zhongzhao-2008.javaeye.com/blog/213169#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Jul 2008 17:21:12 +0800</pubDate>
        <link>http://zhongzhao-2008.javaeye.com/blog/213169</link>
        <guid>http://zhongzhao-2008.javaeye.com/blog/213169</guid>
      </item>
      <item>
        <title>ftp常见的一些命令</title>
        <author>zhongzhao_2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhongzhao-2008.javaeye.com">zhongzhao_2008</a>&nbsp;
          链接：<a href="http://zhongzhao-2008.javaeye.com/blog/213012" style="color:red;">http://zhongzhao-2008.javaeye.com/blog/213012</a>&nbsp;
          发表时间: 2008年07月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          FTP命令   <br />    <br />  　　1.![cmd[args]]：在本地机中执行交互shell，exit回到ftp环境，如：!ls*.zip.     <br />    <br />  　　2.$   macro-ame[args]：执行宏定义macro-name.     <br />    <br />  　　3.account[password]：提供登录远程系统成功后访问系统资源所需的补充口令。   <br />    <br />  　　4.append   local-file[remote-file]：将本地文件追加到远程系统主机，若未指定远程系统文件名，则使用本地文件名。   <br />    <br />  　　5.ascii：使用ascii类型传输方式。   <br />    <br />  　　6.bell：每个命令执行完毕后计算机响铃一次。   <br />    <br />  　　7.bin：使用二进制文件传输方式。   <br />    <br />  　　8.bye：退出ftp会话过程。   <br />    <br />  　　9.case：在使用mget时，将远程主机文件名中的大写转为小写字母。   <br />    <br />  　　10.cd   remote-dir：进入远程主机目录。   <br />    <br />  　　11.cdup：进入远程主机目录的父目录。   <br />    <br />  　　12.chmod   mode   file-name：将远程主机文件file-name的存取方式设置为mode，如：chmod   777   a.out。   <br />    <br />  　　13.close：中断与远程服务器的ftp会话(与open对应)。   <br />    <br />  　　14.cr：使用asscii方式传输文件时，将回车换行转换为回行。   <br />    <br />  　　15.delete   remote-file：删除远程主机文件。   <br />    <br />  　　16.debug[debug-value]：设置调试方式，显示发送至远程主机的每条命令，如：deb   up   3，若设为0，表示取消debug。   <br />    <br />  　　17.dir[remote-dir][local-file]：显示远程主机目录，并将结果存入本地文件local-file。   <br />    <br />  　　18.disconnection：同close。   <br />    <br />  　　19.form   format：将文件传输方式设置为format，缺省为file方式。   <br />    <br />  　　20.get   remote-file[local-file]：将远程主机的文件remote-file传至本地硬盘的local-file。   <br />    <br />  　　21.glob：设置mdelete，mget，mput的文件名扩展，缺省时不扩展文件名，同命令行的-g参数。   <br />    <br />  　　22.hash：每传输1024字节，显示一个hash符号(#)。   <br />    <br />  　　23.help[cmd]：显示ftp内部命令cmd的帮助信息，如：help   get。   <br />    <br />  　　24.idle[seconds]：将远程服务器的休眠计时器设为[seconds]秒。   <br />    <br />  　　25.image：设置二进制传输方式(同binary)。   <br />    <br />  　　26.lcd[dir]：将本地工作目录切换至dir。   <br />    <br />  　　27.ls[remote-dir][local-file]：显示远程目录remote-dir，并存入本地文件local-file。   <br />    <br />  　　28.macdef   macro-name：定义一个宏，遇到macdef下的空行时，宏定义结束。   <br />    <br />  　　29.mdelete[remote-file]：删除远程主机文件。   <br />    <br />  　　30.mdir   remote-files   local-file：与dir类似，但可指定多个远程文件，如：mdir   *.o.*.zipoutfile   <br />    <br />  　　31.mget   remote-files：传输多个远程文件。   <br />    <br />  　　32.mkdir   dir-name：在远程主机中建一目录。   <br />    <br />  　　33.mls   remote-file   local-file：同nlist，但可指定多个文件名。   <br />    <br />  　　34.mode[modename]：将文件传输方式设置为modename，缺省为stream方式。   <br />    <br />  　　35.modtime   file-name：显示远程主机文件的最后修改时间。   <br />    <br />  　　36.mput   local-file：将多个文件传输至远程主机。   <br />    <br />  　　37.newer   file-name：如果远程机中file-name的修改时间比本地硬盘同名文件的时间更近，则重传该文件。   <br />    <br />  　　38.nlist[remote-dir][local-file]：显示远程主机目录的文件清单，并存入本地硬盘的local-file。   <br />    <br />  　　39.nmap[inpattern   outpattern]：设置文件名映射机制，使得文件传输时，文件中的某些字符相互转换，如：nmap   $1.$2.$3[$1，$2].[$2，$3]，则传输文件a1.a2.a3时，文件名变为a1，a2。该命令特别适用于远程主机为非UNIX机的情况。   <br />    <br />  　　40.ntrans[inchars[outchars]]：设置文件名字符的翻译机制，如ntrans   1R，则文件名LLL将变为RRR。   <br />    <br />  　　41.open   host[port]：建立指定ftp服务器连接，可指定连接端口。   <br />    <br />  　　42.passive：进入被动传输方式。   <br />    <br />  　　43.prompt：设置多个文件传输时的交互提示。   <br />    <br />  　　44.proxy   ftp-cmd：在次要控制连接中，执行一条ftp命令，该命令允许连接两个ftp服务器，以在两个服务器间传输文件。第一条ftp命令必须为open，以首先建立两个服务器间的连接。   <br />    <br />  　　45.put   local-file[remote-file]：将本地文件local-file传送至远程主机。   <br />    <br />  　　46.pwd：显示远程主机的当前工作目录。   <br />    <br />  　　47.quit：同bye，退出ftp会话。   <br />    <br />  　　48.quote   arg1，arg2...：将参数逐字发至远程ftp服务器，如：quote   syst.     <br />    <br />  　　49.recv   remote-file[local-file]：同get。   <br />    <br />  　　50.reget   remote-file[local-file]：类似于get，但若local-file存在，则从上次传输中断处续传。   <br />    <br />  　　51.rhelp[cmd-name]：请求获得远程主机的帮助。   <br />    <br />  　　52.rstatus[file-name]：若未指定文件名，则显示远程主机的状态，否则显示文件状态。   <br />    <br />  　　53.rename[from][to]：更改远程主机文件名。   <br />    <br />  　　54.reset：清除回答队列。   <br />    <br />  　　55.restart   marker：从指定的标志marker处，重新开始get或put，如：restart   130。   <br />    <br />  　　56.rmdir   dir-name：删除远程主机目录。   <br />    <br />  　　57.runique：设置文件名唯一性存储，若文件存在，则在原文件后加后缀..1，.2等。   <br />    <br />  　　58.send   local-file[remote-file]：同put。   <br />    <br />  　　59.sendport：设置PORT命令的使用。   <br />    <br />  　　60.site   arg1，arg2...：将参数作为SITE命令逐字发送至远程ftp主机。   <br />    <br />  　　61.size   file-name：显示远程主机文件大小，如：site   idle   7200。   <br />    <br />  　　62.status：显示当前ftp状态。   <br />    <br />  　　63.struct[struct-name]：将文件传输结构设置为struct-name，缺省时使用stream结构。   <br />    <br />  　　64.sunique：将远程主机文件名存储设置为唯一(与runique对应)。   <br />    <br />  　　65.system：显示远程主机的操作系统类型。   <br />    <br />  　　66.tenex：将文件传输类型设置为TENEX机的所需的类型。   <br />    <br />  　　67.tick：设置传输时的字节计数器。   <br />    <br />  　　68.trace：设置包跟踪。   <br />    <br />  　　69.type[type-name]：设置文件传输类型为type-name，缺省为ascii，如：type   binary，设置二进制传输方式。   <br />    <br />  　　70.umask[newmask]：将远程服务器的缺省umask设置为newmask，如：umask   3。   <br />    <br />  　　71.user   user-name[password][account]：向远程主机表明自己的身份，需要口令时，必须输入口令，如：user   anonymous   my@email。   <br />    <br />  　　72.verbose：同命令行的-v参数，即设置详尽报告方式，ftp服务器的所有响应都将显示给用户，缺省为on.     <br />    <br />  　　73.?[cmd]：同help。
          <br/>
          <span style="color:red;">
            <a href="http://zhongzhao-2008.javaeye.com/blog/213012#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 09 Jul 2008 11:42:57 +0800</pubDate>
        <link>http://zhongzhao-2008.javaeye.com/blog/213012</link>
        <guid>http://zhongzhao-2008.javaeye.com/blog/213012</guid>
      </item>
      <item>
        <title>数组的学习4</title>
        <author>zhongzhao_2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhongzhao-2008.javaeye.com">zhongzhao_2008</a>&nbsp;
          链接：<a href="http://zhongzhao-2008.javaeye.com/blog/210409" style="color:red;">http://zhongzhao-2008.javaeye.com/blog/210409</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Java编程那些事儿48—多维数组基础<br />出自：http://blog.csdn.net/mailbomb<br />6.4 多维数组基础<br />在学校里，由于一个班的人数不多，所以按照顺序编号即可，当人数增多时，例如对于学校里的人，在编号时就要增加层次，例如XX班XX号。在部队中也是这样，XX师XX团XX营XX连XX排XX班，这里的层次就比较深了。为了管理数据的方便，一般要加深管理的层次，这就是多维数组的由来。<br />多维数组，指二维以及二维以上的数组。二维数组有两个层次，三维数组有三个层次，依次类推。每个层次对应一个下标。<br />在实际使用中，为了使结构清晰，一般对于复杂的数据都是用多维数组。<br />关于多维数组的理解，最终的是理解数组的数组这个概念，因为数组本身就是一种复合数据类型，所以数组也可以作为数组元素存在。这样二维数组就可以理解成内部每个元素都是一维数组类型的一个一维数组。三维数组可以理解成一个一维数组，内部的每个元素都是二维数组。无论在逻辑上还是语法上都支持“数组的数组”这种理解方式。<br />通常情况下，一般用二维数组的第一维代表行，第二维代表列，这种逻辑结构和现实中的结构一致。<br />和一维数组类似，因为多维数组有多个下标，那么引用数组中的元素时，需要指定多个下标。<br />6.5 多维数组语法<br />下面以二维数组为例，来介绍多维数组的语法。<br />6.5.1 多维数组声明<br />多维数组的声明：<br />数据类型[][] 数组名称; <br />数据类型[] 数组名称[]; <br />数据类型 数组名称[][]; <br />以上三种语法在声明二维数组时的功能是等价的。同理，声明三维数组时需要三对中括号，中括号的位置可以在数据类型的后面，也可以在数组名称的后面，其它的依次类推。<br />例如:<br />int[][] map; <br />char c[][]; <br />和一维数组一样，数组声明以后在内存中没有分配具体的存储空间，也没有设定数组的长度。<br />6.5.2 多维数组初始化<br />和一维数组一样，多维数组的初始化也可以分为静态初始化(整体赋值)和动态初始化两种，其语法格式如下。<br />6.5.2.1 静态初始化<br />以二维数组的静态初始化为例，来说明多维数组静态初始化的语法格式。示例代码如下：<br />int[][] m = {<br />{1,2,3},<br />{2,3,4}<br />}; <br />在二维数组静态初始化时，也必须和数组的声明写在一起。数值书写时，使用两个大括号嵌套实现，在最里层的大括号内部书写数字的值。数值和数值之间使用逗号分隔，内部的大括号之间也使用逗号分隔。<br />由该语法可以看出，内部的大括号其实就是一个一维数组的静态初始化，二维数组只是把多个一维数组的静态初始化组合起来。<br />同理，三维数组的静态初始化语法格式如下：<br />int[][][] b = {<br />{<br />{1,2,3},<br />{1,2,3}<br />},<br />{<br />{3,4,1},<br />{2,3,4}<br />}<br />}; <br />说明：这里只是演示语法格式，数值本身没有意义。<br />6.5.2.2 动态初始化<br />二维数组动态初始化的语法格式：<br />数据类型[][] 数组名称 = new 数据类型[第一维的长度][第二维的长度]; <br />数据类型[][] 数组名称; <br />数组名称 = new 数据类型[第一维的长度][第二维的长度]; <br />示例代码：<br />byte[][] b = new byte[2][3]; <br />int m[][]; <br />m = new int[4][4]; <br />和一维数组一样，动态初始化可以和数组的声明分开，动态初始化只指定数组的长度，数组中每个元素的初始化是数组声明时数据类型的默认值。例如上面初始化了长度为2X3的数组b，和4X4的数组m。<br />使用这种方法，初始化出的第二维的长度都是相同的，如果需要初始化第二维长度不一样的二维数组，则可以使用如下的格式：<br />int n[][]; <br />n = new int[2][]; //只初始化第一维的长度<br />//分别初始化后续的元素<br />n[0] = new int[4]; <br />n[1] = new int[3]; <br />这里的语法就体现了数组的数组概念，在初始化第一维的长度时，其实就是把数组n看成了一个一维数组，初始化其长度为2，则数组n中包含的2个元素分别是n[0]和n[1]，而这两个元素分别是一个一维数组。后面使用一维数组动态初始化的语法分别初始化n[0]和n[1]。<br />6.5.3 引用数组元素<br />对于二维数组来说，由于其有两个下标，所以引用数组元素值的格式为：<br />数组名称[第一维下标][第二维下标]<br />该表达式的类型和声明数组时的数据类型相同。例如引用二维数组m中的元素时，使用m[0][0]引用数组中第一维下标是0，第二维下标也是0的元素。这里第一维下标的区间是0到第一维的长度减1，第二维下标的区间是0到第二维的长度减1。<br />6.5.4 获得数组长度<br />对于多维数组来说，也可以获得数组的长度。但是使用数组名.length获得的是数组第一维的长度。如果需要获得二维数组中总的元素个数，可以使用如下代码：<br />int[][] m = {<br />{1,2,3,1},<br />{1,3},<br />{3,4,2}<br />}; <br />int sum = 0; <br />for(int i = 0; i &lt; m.length; i++){ //循环第一维下标<br />sum += m[i].length; //第二维的长度相加<br />}<br />在该代码中，m.length代表m数组第一维的长度，内部的m[i]指每个一维数组元素，m[i].length是m[i]数组的长度，把这些长度相加就是数组m中总的元素个数。
          <br/>
          <span style="color:red;">
            <a href="http://zhongzhao-2008.javaeye.com/blog/210409#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 10:17:46 +0800</pubDate>
        <link>http://zhongzhao-2008.javaeye.com/blog/210409</link>
        <guid>http://zhongzhao-2008.javaeye.com/blog/210409</guid>
      </item>
      <item>
        <title>数组的学习3</title>
        <author>zhongzhao_2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhongzhao-2008.javaeye.com">zhongzhao_2008</a>&nbsp;
          链接：<a href="http://zhongzhao-2008.javaeye.com/blog/210408" style="color:red;">http://zhongzhao-2008.javaeye.com/blog/210408</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Java编程那些事儿47—数组使用示例3<br />出自：http://blog.csdn.net/mailbomb<br />6.3.7 数字统计<br />要求：统计一个整数中出现最多的数字。如果数字个数一样，则以最大的数字为准，例如1输出1，121输出1，23231输出3。<br />该题是一个综合的题目，在实际分析时可以分解成三个问题：1、把整数中的每个数字拆分出来，2、统计拆分出的数字中0-9每个的个数，3、获得数字个数的最大值。<br />实现思路：<br />1、 拆分数字：整数和10取余可以获得该整数的个位值，然后用该整数除以10可以去掉个位(整数除法)，按照这种结构实现循环，并把拆分出的数字(也就是余数)存储到数组中。<br />2、 统计数字：声明一个长度是10的整型数组，使用这个数组中的第一个元素保存数字0出现的次数，第二个元素保存数字1出现的次数，依次类推。使用循环实现数字个数的统计。<br />3、 获得最大值对应的数字：获得个数数组中最大值的下标，就是需要的数字。<br />则实现的代码如下：<br />int m = 1232312; <br />int[] n = new int[10]; //存储拆分后的数字<br />int num = 0; //存储拆分出的数字个数<br />while(m != 0){ //未拆分完<br />n[num] = m % 10; //获得个位数字<br />num++; //拆分出的数字个数加1<br />m /= 10; //去掉拆分出的数字<br />}<br />int[] count = new int[10]; //存储0-9数字出现的次数<br />//统计数字出现的次数<br />for(int i = 0; i &lt; num; i++){<br />count[n[i]]++; <br />}<br />//获得最大值的下标<br />int index = 0; <br />for(int i = 0; i &lt; count.length; i++){<br />if(count[index] &lt;= count[i]){<br />index = i; <br />}<br />}<br />//输出<br />System.out.println(index); <br />在该代码中，拆分的十进制的数字，首先拆分出个位，并存储到n数组中，然后通过除10去掉拆分出的数字，继续执行循环，一直运算到m为0时为止，变量num保存拆分出的数字的个数。使用数组count记忆0-9每个数字出现的次数，count[0]存储0出现的次数，count[1]存储1出现的次数,依次类推，所以当n[i]的值为几时，只需要count[n[i]]增加1即可。最后使用循环获得最大数字的下标，适用&lt;=进行比较，可以保证当个数相同时取后续的数字，这样就可以通过循环获得最大数值的下标，按照数组count的结构，数组的下标和就是数字的值。<br />6.3.8 数组编码<br />要求：设有一数组A，长度是N，内部的数据是0到N-1之间的所有数字，例如当N等于5时，数组为：A={0,3,2,1,4}。针对A数组，有一个对应的编码数组B，B的长度和A的长度相等，规定数组B中元素的值规定如下：<br />a、 B[0]的值为0<br />b、 B[i]的值是A数组中A[i]以前的值中比A[i]小的元素的个数。<br />c、 例如示例中A数组{0,3,2,1,4}对应的编码数组B的值为{0,1,1,1,4}。<br />现在已知A数组，编码代码计算对应的编码数组B。<br />该题是一个基本的数组变换题目，只要熟悉了题目的要求以后，按照题目的要求求解对应的数组B即可。<br />实现思路：初始化一个长度和A数组一样的B数组，初始化第一个元素的值为0，循环统计比A[i]元素小的数字个数，把个数值赋值给对应的B[i]即可。<br />则实现的代码如下：<br />int[] A = {0,3,2,1,4}; <br />int[] B = new int[A.length]; <br />B[0] = 0; //初始化第一个元素，可选<br />for(int i = 1; i &lt; A.length; i++){<br />int count = 0; //计数变量<br />//统计小于A[i]元素的数量<br />for(int j = i - 1; j >= 0; j--){<br />if(A[j] &lt; A[i]){<br />count++; <br />}<br />}<br />B[i] = count; //赋值<br />}<br />该代码中，按照数组B中值的规定，统计A[i]以前比A[i]小的元素个数，然后把得到的结果赋值给B[i]即完成题目的要求。<br />6.3.9 数组排序<br />要求：将数组中的元素按照从小到大的顺序(升序)进行排列。<br />数组的排序是实现很多数组操作的基础，在实际使用时也有很多的排序方法，这里以冒泡排序为例来说明数组的排序算法。<br />实现思路：每次排序一个元素，总的排序次数是数组的长度减1次。第一次时，首先比较第一个和第二个元素，如果第一个元素比第二个元素大，则交换这两个元素的值，然后比较第二个和第三个元素，如果第二个比第三个大则交换，依次类推，这样当第一次交换完成以后，数组中的最后一个元素一定是数组中最大的元素。第二次时，只比较数组的前长度减一个元素，比较步骤和第一次相同，依次类推，每次都少比较一个元素，最终获得的就是排序完成的数组。<br />则实现的代码如下：<br />int[] m = {2,10,3,4,2}; <br />for(int i = 0; i &lt; m.length - 1; i++){ //排序次数<br />//两两比较，实现排序<br />for(int j = 0; j &lt; m.length - 1 - i; j++){<br />if(m[j] > m[j + 1]){<br />//交换<br />int temp = m[j]; <br />m[j] = m[j + 1]; <br />m[j + 1] = temp; <br />}<br />}<br />}<br />//输出排序后的元素<br />for(int i = 0; i &lt; m.length; i++){<br />System.out.println(m[i]); <br />}<br />冒泡排序通过数组中元素的两两比较和交换，实现数组中元素的排序。其中循环变量为i的循环代表排序的次数，总的排序次数是数组的长度减1次。内部的循环变量为j的循环实现未排序元素的两两比较，其中循环条件可以保证i增加1，内部比较的元素减少1，这个在功能上就是不比较排过序的元素。
          <br/>
          <span style="color:red;">
            <a href="http://zhongzhao-2008.javaeye.com/blog/210408#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 10:17:10 +0800</pubDate>
        <link>http://zhongzhao-2008.javaeye.com/blog/210408</link>
        <guid>http://zhongzhao-2008.javaeye.com/blog/210408</guid>
      </item>
      <item>
        <title>数组的学习2</title>
        <author>zhongzhao_2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhongzhao-2008.javaeye.com">zhongzhao_2008</a>&nbsp;
          链接：<a href="http://zhongzhao-2008.javaeye.com/blog/210407" style="color:red;">http://zhongzhao-2008.javaeye.com/blog/210407</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Java编程那些事儿46—数组使用示例2<br />出自：http://blog.csdn.net/mailbomb<br />6.3.4 判断数组元素是否重复<br />要求：判断一个数组中是否存在相同的元素，如果存在相同的元素则输出“重复”，否则输出“不重复”。<br />该题中如果需要判断数组中元素是否重复，则需要对数组中的元素进行两两比较，如果有任意一组元素相等，则该数组中的元素存在重复，如果任意一组元素都不想等，则表示数组中的元素不重复。<br />实现思路：假设数组中的元素不重复，两两比较数组中的元素，使用数组中的第一个元素和后续所有元素比较，接着使用数组中的第二个元素和后续元素比较，依次类推实现两两比较，如果有一组元素相同，则数组中存储重复，结束循环。把比较的结果存储在一个标志变量里，最后判断标志变量的值即可。<br />则实现的代码如下：<br />int[] n = {1,2,3,1,0}; <br />boolean flag = true; //假设不重复<br />for(int i = 0; i &lt; n.length – 1; i++){ //循环开始元素<br />for(int j = i + 1; j &lt; n.length; j++){ //循环后续所有元素<br />//如果相等，则重复<br />if(n[i] == n[j]){<br />flag = false; //设置标志变量为重复<br />break; //结束循环<br />}<br />}<br />}<br />//判断标志变量<br />if(flag){<br />System.out.println(“不重复”); <br />}else{<br />System.out.println(“重复”); <br />}<br />在该代码中，flag变量存储是否重复，true代表不重复，false代表重复。外部循环中循环变量i代表第一个元素的下标，内部循环中循环变量j代表后续元素的下标，当i为零时和后续所有元素比较，然后当i为1时也和后续所有元素比较，依次类推，这样实现所有元素之间的两两比较。然后如果元素相同，则代表有重复，把flag变量的值置成flase，结束循环。最后根据flag变量的值就可以判断是否重复了。<br />6.3.5 判断数组是否对称<br />要求：判断数组元素是否对称。例如{1}、{1,2,0,2,1},{1,2,3,3,2,1}这样的都是对称数组。<br />该题中用于判断数组中的元素关于中心对称，也就是说数组中的第一个元素和最后一个元素相同，数组中的第二个元素和倒数第二个元素相同，依次类推，如果比较到中间，所有的元素都相同，则数组对称。<br />实现思路：把数组长度的一半作为循环的次数，假设变量i从0循环到数组的中心，则对应元素的下标就是数组长度-i-1，如果对应的元素有一组不相等则数组不对称，如果所有对应元素都相同，则对称。<br />则实现的代码如下：<br />int[] n = {1,2,0,2,1}; <br />boolean flag = true; //假设对称<br />for(int i = 0; i &lt; n.length/2; i++){ //循环数组长度的一半次<br />//比较元素<br />if(n[i] != n[n.length – i – 1]){<br />flag = false; //不对称<br />break; //结束循环<br />}<br />}<br />if(flag){<br />System.out.println(“对称”); <br />}else{<br />System.out.println(“不对称”); <br />}<br />在该代码中，flag作为标志变量，值为true代表对称，false代表不对称，因为是两两比较，只需要比较数组的长度一半次即可，如果对应的元素不相同则数组不对称，结束循环。最后判断标志变量的值，就可以获得数组是否对称了。<br />6.3.6 数制转换<br />要求：将十进制数字转换为二进制数字。<br />在前面介绍过，十进制数字转换为二进制数字时一般使用除二取余法，该方法很规则，在程序中可以通过循环实现，在程序中只需要把得到的数字存储起来即可。<br />实现思路：将除二取余得到的第一个数字存储在数组中第一个元素，第二次得到的余数存储在数组中第二个元素，依次类推，最后反向输出获得的数字即可。<br />实现代码如下：<br />int n = 35; <br />int[] m = new int[32]; <br />//拆分数字<br />int num = 0; <br />while(n != 0){<br />m[num] = n % 2; //存储余数<br />num++; //拆分数字增加1<br />n /= 2; //去掉余数<br />}<br />//输出拆分后的数字<br />for(int i = num - 1; i >= 0; i--){<br />System.out.print(m[i]); <br />}<br />System.out.println(); <br />在该代码中，因为int是32位的，所以最多需要长度是32的数组即可。在存储时把拆分出的第一个数字，也就是二进制的低位，存储在数组的第一个元素，num代表拆分出的数字的个数以及数组下标，一直拆分到n的值为零时结束。循环结束后，因为拆分出来的数字个数是num，所以只需要反向输出数组中0到num-1下标的元素即可。
          <br/>
          <span style="color:red;">
            <a href="http://zhongzhao-2008.javaeye.com/blog/210407#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 10:16:34 +0800</pubDate>
        <link>http://zhongzhao-2008.javaeye.com/blog/210407</link>
        <guid>http://zhongzhao-2008.javaeye.com/blog/210407</guid>
      </item>
      <item>
        <title>数组的学习1</title>
        <author>zhongzhao_2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhongzhao-2008.javaeye.com">zhongzhao_2008</a>&nbsp;
          链接：<a href="http://zhongzhao-2008.javaeye.com/blog/210406" style="color:red;">http://zhongzhao-2008.javaeye.com/blog/210406</a>&nbsp;
          发表时间: 2008年07月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Java编程那些事儿45—数组使用示例1<br />出自：http://blog.csdn.net/mailbomb<br />6.3 数组使用示例<br />本部分通过一系列的示例，熟悉数组的基本语法，并演示一些使用数组可以解决的基本问题。在实际使用数组时，数组的长度以及数组中每个元素存储的数据，都根据逻辑需要进行设计。<br />6.3.1 循环初始化数组元素<br />要求：初始化一个长度为100的int数组，数组中的元素依次为1-100。<br />这是一个基本的使用，主要是熟悉数组的语法，在实际编写时，需要发现数组下标和数组元素值之间的规律即可。<br />第一种思路：循环数组的下标0-99，则和下标对应的元素的值比数组下标多1。<br />则实现代码如下：<br />int[] m = new int[100]; <br />for(int i = 0; i &lt; m.length; i++){<br />m[i] = i + 1; <br />}<br />代码说明：声明并初始化一个长度是100的数组，使用循环循环数组的下标，下标的区间是[0,m.length-1]，其中m.length表示数组的长度。在实际赋值时，把数组的下标做成变量，则当i的值为0时，则m[i]就是m[0]，依次类推，按照题目的要求，则数值的规律是i+1，这样循环结束以后，数组m中的值就依次是1-100了。<br />第二种思路：循环数组的值1-100，则下标比数组的值下1。<br />则实现的代码如下：<br />int[] m = new int[100]; <br />for(int i = 1; i &lt;= 100; i++){<br />m[i – 1] = i; <br />}<br />该代码中循环变量i的值从1循环到100，则数组的下标是i – 1，这样也可以实现题目要求的功能。<br />6.3.2输出数列<br />要求：输出1 1 2 3 5 8 13……这样的数列，输出该数列的前20个数字。<br />该题是一个基本的数字逻辑，在实际解决该问题时，首先要发现该数字的规律，然后按照该规律来设计数组即可。<br />实现思路：数字的规律是除了数列里的前两个数字以外，其它的数字都满足该数字等于前两个数字的和，由于题目要求输出前20个数字，所以需要一个长度为20的数组，第一个和第二个数字直接赋值，后续的数字通过前两个数字元素得到。<br />则实现的代码如下：<br />int[] num = new int[20]; <br />num[0] = 1; <br />num[1] = 1; <br />//循环初始化<br />for(int i = 2; i &lt; num.length; i++){<br />num[i] = num[i – 1] + num[i – 2]; <br />}<br />//循环输出<br />for(int i = 0; i &lt; num.length; i++){<br />System.out.print(num[i]); <br />System.out.print(‘ ‘); <br />}<br />System.out.println(); //换行<br />在该代码中，初始化一个长度为20的数组，首先将数组中的前两个元素赋值成1，然后循环对后续的元素的赋值，如果当前元素的下标是i，则它前一个元素的下标是i-1，再前面一个元素的下标是i-2，只需要将这2个元素的值相加，然后赋值给当前元素即可。后面使用一个循环，输出数组中所有的元素，元素和元素之间有一个间隔的空格，在输出所有的元素以后换行。<br />6.3.3 歌手打分<br />要求：在歌唱比赛中，共有10位评委进行打分，在计算歌手得分时，去掉一个最高分，去掉一个最低分，然后剩余的8位评委的分数进行平均，就是该选手的最终得分。如果已知每个评委的评分，求该选手的得分。<br />该题实际上涉及到求数组的最大值、最小值，以及求数组中所有元素的和，也是数组方便统计的用途体现。<br />实现思路：求出数组元素的最大值、最小值以及和，然后使用和减去最大值和最小值，然后除以8获得得分。<br />则实现的代码如下：<br />int[] score = {90,78,90,96,67,86,78,92,79,85}; //评委打分<br />int sum = 0; //存储和<br />int max =score[0]; //存储最大值<br />int min = score[0]; //存储最小值<br />//求和<br />for(int i = 0; i &lt; score.length; i++){<br />sum += score[i]; <br />}<br />//获得最大值<br />for(int i = 1; i &lt; score.length; i++){<br />//比较<br />if(max &lt; score[i]){ max = score[i]; <br />}<br />}<br />//获得最小值<br />for(int i = 1; i &lt; score.length; i++){<br />//比较<br />if(min > score[i]){ min = score[i]; <br />}<br />}<br />//计算平均分<br />double avg = (sum – max – min)/8.0; <br />System.out.println(avg); <br />在该代码中，实现数组求和的思路和以前的一样，就是每次加一个元素，然后用得到的结果再和后续的元素依次相加。求最大值的思路是首先假设第一个元素最大，把score[0]赋值给max，然后使用max的值和后续依次比较，如果后续的元素比max大，则把该值赋值给max，然后再和后续的元素比较，求最小值的思路和最大值的思路一样。然后计算平均分就完成了题目的要求。<br />该代码虽然结构比较清晰，但是效率不高，为了追求效率，可以把以上三个循环合并起来，代码如下：<br />for(int i = 0; i &lt; score.length; i++){<br />sum += score[i]; //求和<br />//获得最大值<br />if(max &lt; score[i]){ max = score[i]; <br />}<br />//获得最小值<br />if(min > score[i]){ min = score[i]; <br />}<br />}<br />这样虽然在结构上稍微复杂了一些，但是效率得到了改善。在实际编写程序时，一般会在功能书写完成以后，对代码进行优化，提高程序的执行效率。
          <br/>
          <span style="color:red;">
            <a href="http://zhongzhao-2008.javaeye.com/blog/210406#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jul 2008 10:15:30 +0800</pubDate>
        <link>http://zhongzhao-2008.javaeye.com/blog/210406</link>
        <guid>http://zhongzhao-2008.javaeye.com/blog/210406</guid>
      </item>
      <item>
        <title>动态加载jar文件</title>
        <author>zhongzhao_2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhongzhao-2008.javaeye.com">zhongzhao_2008</a>&nbsp;
          链接：<a href="http://zhongzhao-2008.javaeye.com/blog/201487" style="color:red;">http://zhongzhao-2008.javaeye.com/blog/201487</a>&nbsp;
          发表时间: 2008年06月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          初学Java时教科书告诉我们，若要运行Java程序，必需为其设置环境变量。有时候为了实现某种功能（例如动态加载Class）我们需要在程序中来实现这个功能。我们经常使用的Eclipse就是很好的例子，它的所有插件的.jar文件都是放在plugin目录下的，如何加载这些包并使用其中的类成了一个棘手的问题。（关于Eclipse的类加载机制，大家可以参考《Contributing to Eclipse》p54）<br /><br />下面我们就来看看，在程序中如何实现这个功能。<br />1、建立一个工程，并为其增加一个 Interface，命名为ActionInterface.java。该接口为使用者公开了一个方法，如下：<br /><br /> 程序代码<br />package org.junesky.classPathTest;<br />public interface ActionInterface {<br />    public String action();<br />}<br /><br />编译后，将该工程打包为.jar文件。<br />打包方法：<br />在包的顶级目录（也就是例子中的org所在的目录）建立一个名为MANIFEST.MF的文件，键入：Manifest-Version: 1.0保存。<br />在ms-doc窗口中键如命令：jar cvfm classLoader.jar MANIFEST.MF org/<br />其中classLoader.jar是打包后的文件名，org/是path。<br /><br />2、建立一个新工程，将classLoader.jar导入，新建class文件MyAction并实现ActionInterface。如下：<br /><br /> 程序代码<br />package org.junesky. MyAction;<br />import org.junesky.classPathTest. ActionInterface;<br />public class MyAction implements ActionInterface {<br />    public String action() {<br />        // TODO Auto-generated method stub<br />        return "------------------ok";<br />    }<br />}<br /><br />编译后打包为classTest.jar。<br /><br />3、新建一工程，将classLoader.jar和classTest.jar导入，新建class文件MyClassLoader.java并继承URLClassLoader。如下：<br /><br /> 程序代码<br />package org.junesky.classPathTest;<br /><br />import   java.net.URL;<br />import   java.net.URLClassLoader;<br /><br />import org.junesky.classPathTest. ActionInterface;<br /><br />public class ClassPathTest extends URLClassLoader {<br />    public ClassPathTest(URL url) {<br />        super(new URL[] { url });<br />    }<br /><br />    public static Object test(String str , String cls) {<br />        try {<br />            URL url = new URL(str);<br />            ClassPathTest t = new ClassPathTest(url);<br /><br />Class c = t.findClass(cls);<br />ActionInterface action = (ActionInterface)c.newInstance();<br /><br />return action.action();<br />        } catch (Exception ex) {<br />            ex.printStackTrace();<br />        }<br />        return "";<br />    }<br /><br />    public static void main(String[] args) {<br />        try {<br />           <br />            System.out.println(<br />                ClassPathTest.test("file:D:/JavaTest/ClassTest2/lib/ MyAction.jar",<br />                        "org.junesky. MyAction. MyAction "));<br /><br />        } catch (Exception ex) {<br />            ex.printStackTrace();<br />        }<br />    }<br />}<br /><br />编译通过执行，会看到控制台上打印出：<br />------------------ok<br /><br />下面我们来看看，这个程序到底做了什么。首先，我们创建了一个接口ActionInterface，在利用URLClassLoader. findClass后，以这个接口创建对象的实例。在第二个jar文件中，我们创建了MyAction.java并实现了ActionInterface，在方法action中我们返回了一个字符串。接下来，我们利用URLClassLoader加载D:/JavaTest/ClassTest2/lib/ MyAction.jar，并以findClass查找并加载org.junesky. MyAction. MyAction类，为得到的Class生成实例：<br /><br />Class c = t.findClass(cls);  // 加载类<br />ActionInterface action = (ActionInterface)c.newInstance();  // 生成对象实例<br /><br />最后调用ActionInterface中声明的action方法打印出MyAction中返回的字符串。<br /><br />以上代码仅仅是Java Class加载的使用方法的简单说明，在真正开发项目过程序中，往往还需要考虑更多的问题，以后我们再继续说明。
          <br/>
          <span style="color:red;">
            <a href="http://zhongzhao-2008.javaeye.com/blog/201487#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 09 Jun 2008 13:24:44 +0800</pubDate>
        <link>http://zhongzhao-2008.javaeye.com/blog/201487</link>
        <guid>http://zhongzhao-2008.javaeye.com/blog/201487</guid>
      </item>
      <item>
        <title>log4j概述</title>
        <author>zhongzhao_2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhongzhao-2008.javaeye.com">zhongzhao_2008</a>&nbsp;
          链接：<a href="http://zhongzhao-2008.javaeye.com/blog/198558" style="color:red;">http://zhongzhao-2008.javaeye.com/blog/198558</a>&nbsp;
          发表时间: 2008年05月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          转载：http://www.dlog.cn/wliang950/diary/14775<br />log4j.properties 使用<br />一.参数意义说明<br />输出级别的种类<br />ERROR、WARN、INFO、DEBUG<br />ERROR 为严重错误 主要是程序的错误<br />WARN 为一般警告，比如session丢失<br />INFO 为一般要显示的信息，比如登录登出<br />DEBUG 为程序的调试信息<br />配置日志信息输出目的地<br />log4j.appender.appenderName = fully.qualified.name.of.appender.class<br />1.org.apache.log4j.ConsoleAppender（控制台）<br />2.org.apache.log4j.FileAppender（文件）<br />3.org.apache.log4j.DailyRollingFileAppender（每天产生一个日志文件）<br />4.org.apache.log4j.RollingFileAppender（文件大小到达指定尺寸的时候产生一个新的文件）<br />5.org.apache.log4j.WriterAppender（将日志信息以流格式发送到任意指定的地方）<br />配置日志信息的格式<br />log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class<br />1.org.apache.log4j.HTMLLayout（以HTML表格形式布局），<br />2.org.apache.log4j.PatternLayout（可以灵活地指定布局模式），<br />3.org.apache.log4j.SimpleLayout（包含日志信息的级别和信息字符串），<br />4.org.apache.log4j.TTCCLayout（包含日志产生的时间、线程、类别等等信息）<br />控制台选项<br />Threshold=DEBUG:指定日志消息的输出最低层次。<br />ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br />Target=System.err：默认情况下是：System.out,指定输出控制台<br />FileAppender 选项<br />Threshold=DEBUF:指定日志消息的输出最低层次。<br />ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br />File=mylog.txt:指定消息输出到mylog.txt文件。<br />Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。<br />RollingFileAppender 选项<br />Threshold=DEBUG:指定日志消息的输出最低层次。<br />ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。<br />File=mylog.txt:指定消息输出到mylog.txt文件。<br />Append=false:默认值是true,即将消息增加到指定文件中，false指将消息覆盖指定的文件内容。<br />MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时，将会自动滚动，即将原来的内容移到mylog.log.1文件。<br />MaxBackupIndex=2:指定可以产生的滚动文件的最大数。<br />log4j.appender.A1.layout.ConversionPattern=%-4r %-5p %d{yyyy-MM-dd HH:mm:ssS} %c %m%n<br />日志信息格式中几个符号所代表的含义：<br /> -X号: X信息输出时左对齐；<br /> %p: 输出日志信息优先级，即DEBUG，INFO，WARN，ERROR，FATAL,<br /> %d: 输出日志时间点的日期或时间，默认格式为ISO8601，也可以在其后指定格式，比如：%d{yyy MMM dd HH:mm:ss,SSS}，输出类似：2002年10月18日 22：10：28，921<br /> %r: 输出自应用启动到输出该log信息耗费的毫秒数<br /> %c: 输出日志信息所属的类目，通常就是所在类的全名<br /> %t: 输出产生该日志事件的线程名<br /> %l: 输出日志事件的发生位置，相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程，以及在代码中的行数。举例：Testlog4.main (TestLog4.java:10)<br /> %x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。<br /> %%: 输出一个"%"字符<br /> %F: 输出日志消息产生时所在的文件名称<br /> %L: 输出代码中的行号<br /> %m: 输出代码中指定的消息,产生的日志具体信息<br /> %n: 输出一个回车换行符，Windows平台为"\r\n"，Unix平台为"\n"输出日志信息换行<br /> 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如：<br /> 1)%20c：指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，默认的情况下右对齐。<br /> 2)%-20c:指定输出category的名称，最小的宽度是20，如果category的名称小于20的话，"-"号指定左对齐。<br /> 3)%.30c:指定输出category的名称，最大的宽度是30，如果category的名称大于30的话，就会将左边多出的字符截掉，但小于30的话也不会有空格。<br /> 4)%20.30c:如果category的名称小于20就补空格，并且右对齐，如果其名称长于30字符，就从左边较远输出的字符截掉。<br />二.文件配置Sample1<br />log4j.rootLogger=DEBUG,A1,R<br />#log4j.rootLogger=INFO,A1,R<br /># ConsoleAppender 输出<br />log4j.appender.A1=org.apache.log4j.ConsoleAppender<br />log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br />log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c]-[%p] %m%n<br /># File 输出 一天一个文件,输出路径可以定制,一般在根路径下<br />log4j.appender.R=org.apache.log4j.DailyRollingFileAppender<br />log4j.appender.R.File=blog_log.txt<br />log4j.appender.R.MaxFileSize=500KB<br />log4j.appender.R.MaxBackupIndex=10<br />log4j.appender.R.layout=org.apache.log4j.PatternLayout<br />log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n<br />文件配置Sample2<br />下面给出的Log4J配置文件实现了输出到控制台，文件，回滚文件，发送日志邮件，输出到数据库日志表，自定义标签等全套功能。<br />log4j.rootLogger=DEBUG,CONSOLE,A1,im <br />#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE<br />log4j.addivity.org.apache=true<br />################### <br /># Console Appender <br />################### <br />log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender <br />log4j.appender.Threshold=DEBUG <br />log4j.appender.CONSOLE.Target=System.out <br />log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout <br />log4j.appender.CONSOLE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <br />#log4j.appender.CONSOLE.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD] n%c[CATEGORY]%n%m[MESSAGE]%n%n<br />##################### <br /># File Appender <br />##################### <br />log4j.appender.FILE=org.apache.log4j.FileAppender <br />log4j.appender.FILE.File=file.log <br />log4j.appender.FILE.Append=false <br />log4j.appender.FILE.layout=org.apache.log4j.PatternLayout <br />log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n <br /># Use this layout for LogFactor 5 analysis<br />######################## <br /># Rolling File <br />######################## <br />log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender <br />log4j.appender.ROLLING_FILE.Threshold=ERROR <br />log4j.appender.ROLLING_FILE.File=rolling.log <br />log4j.appender.ROLLING_FILE.Append=true <br />log4j.appender.ROLLING_FILE.MaxFileSize=10KB <br />log4j.appender.ROLLING_FILE.MaxBackupIndex=1 <br />log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout <br />log4j.appender.ROLLING_FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />#################### <br /># Socket Appender <br />#################### <br />log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender <br />log4j.appender.SOCKET.RemoteHost=localhost <br />log4j.appender.SOCKET.Port=5001 <br />log4j.appender.SOCKET.LocationInfo=true <br /># Set up for Log Facter 5 <br />log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout <br />log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n<br />######################## <br /># Log Factor 5 Appender <br />######################## <br />log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender <br />log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000<br />######################## <br /># SMTP Appender <br />####################### <br />log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender <br />log4j.appender.MAIL.Threshold=FATAL <br />log4j.appender.MAIL.BufferSize=10 <br />log4j.appender.MAIL.From=chenyl@yeqiangwei.com <br />log4j.appender.MAIL.SMTPHost=mail.hollycrm.com <br />log4j.appender.MAIL.Subject=Log4J Message <br />log4j.appender.MAIL.To=chenyl@yeqiangwei.com <br />log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout <br />log4j.appender.MAIL.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />######################## <br /># JDBC Appender <br />####################### <br />log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender <br />log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test <br />log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver <br />log4j.appender.DATABASE.user=root <br />log4j.appender.DATABASE.password= <br />log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n') <br />log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout <br />log4j.appender.DATABASE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender <br />log4j.appender.A1.File=SampleMessages.log4j <br />log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j' <br />log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout<br />################### <br />#自定义Appender <br />################### <br />log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender<br />log4j.appender.im.host = mail.cybercorlin.net <br />log4j.appender.im.username = username <br />log4j.appender.im.password = password <br />log4j.appender.im.recipient = corlin@yeqiangwei.com <br />log4j.appender.im.layout=org.apache.log4j.PatternLayout <br />log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n<br />三.高级使用<br />实验目的：<br /> 1.把FATAL级错误写入2000NT日志<br /> 2. WARN，ERROR，FATAL级错误发送email通知管理员<br /> 3.其他级别的错误直接在后台输出<br />实验步骤：<br /> 输出到2000NT日志<br /> 1.把Log4j压缩包里的NTEventLogAppender.dll拷到WINNT\SYSTEM32目录下<br /> 2.写配置文件log4j.properties<br /># 在2000系统日志输出<br /> log4j.logger.NTlog=FATAL, A8<br /> # APPENDER A8<br /> log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender<br /> log4j.appender.A8.Source=JavaTest<br /> log4j.appender.A8.layout=org.apache.log4j.PatternLayout<br /> log4j.appender.A8.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n<br />3.调用代码：<br /> Logger logger2 = Logger.getLogger("NTlog"); //要和配置文件中设置的名字相同<br /> logger2.debug("debug!!!");<br /> logger2.info("info!!!");<br /> logger2.warn("warn!!!");<br /> logger2.error("error!!!");<br /> //只有这个错误才会写入2000日志<br /> logger2.fatal("fatal!!!");<br />发送email通知管理员：<br /> 1. 首先下载JavaMail和JAF, <br />  http://java.sun.com/j2ee/ja/javamail/index.html <br />  http://java.sun.com/beans/glasgow/jaf.html <br /> 在项目中引用mail.jar和activation.jar。<br /> 2. 写配置文件<br /> # 将日志发送到email<br /> log4j.logger.MailLog=WARN,A5<br /> #  APPENDER A5<br /> log4j.appender.A5=org.apache.log4j.net.SMTPAppender<br /> log4j.appender.A5.BufferSize=5<br /> log4j.appender.A5.To=chunjie@yeqiangwei.com <br /> log4j.appender.A5.From=error@yeqiangwei.com <br /> log4j.appender.A5.Subject=ErrorLog<br /> log4j.appender.A5.SMTPHost=smtp.263.net<br /> log4j.appender.A5.layout=org.apache.log4j.PatternLayout<br /> log4j.appender.A5.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n<br /> 3.调用代码：<br /> //把日志发送到mail<br /> Logger logger3 = Logger.getLogger("MailLog");<br /> logger3.warn("warn!!!");<br /> logger3.error("error!!!");<br /> logger3.fatal("fatal!!!");<br />在后台输出所有类别的错误：<br /> 1. 写配置文件<br /> # 在后台输出<br /> log4j.logger.console=DEBUG, A1<br /> # APPENDER A1<br /> log4j.appender.A1=org.apache.log4j.ConsoleAppender<br /> log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br /> log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n<br /> 2．调用代码<br /> Logger logger1 = Logger.getLogger("console");<br /> logger1.debug("debug!!!");<br /> logger1.info("info!!!");<br /> logger1.warn("warn!!!");<br /> logger1.error("error!!!");<br /> logger1.fatal("fatal!!!");<br />--------------------------------------------------------------------<br /> 全部配置文件：log4j.properties<br /> # 在后台输出<br /> log4j.logger.console=DEBUG, A1<br /> # APPENDER A1<br /> log4j.appender.A1=org.apache.log4j.ConsoleAppender<br /> log4j.appender.A1.layout=org.apache.log4j.PatternLayout<br /> log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n<br /># 在2000系统日志输出<br /> log4j.logger.NTlog=FATAL, A8<br /> # APPENDER A8<br /> log4j.appender.A8=org.apache.log4j.nt.NTEventLogAppender<br /> log4j.appender.A8.Source=JavaTest<br /> log4j.appender.A8.layout=org.apache.log4j.PatternLayout<br /> log4j.appender.A8.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n<br /># 将日志发送到email<br /> log4j.logger.MailLog=WARN,A5<br /> #  APPENDER A5<br /> log4j.appender.A5=org.apache.log4j.net.SMTPAppender<br /> log4j.appender.A5.BufferSize=5<br /> log4j.appender.A5.To=chunjie@yeqiangwei.com <br /> log4j.appender.A5.From=error@yeqiangwei.com <br /> log4j.appender.A5.Subject=ErrorLog<br /> log4j.appender.A5.SMTPHost=smtp.263.net<br /> log4j.appender.A5.layout=org.apache.log4j.PatternLayout<br /> log4j.appender.A5.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n<br />全部代码：Log4jTest.java<br />  <br />/* <br />  * 创建日期 2003-11-13 <br />  */ <br /> package edu.bcu.Bean; <br /> import org.apache.log4j.*; <br /> //import org.apache.log4j.nt.*; <br /> //import org.apache.log4j.net.*; <br /> /** <br />  * @author yanxu <br />  */ <br /> public class Log4jTest <br /> { <br />  public static void main(String args[]) <br />  { <br />   PropertyConfigurator.configure("log4j.properties"); <br />   //在后台输出 <br />   Logger logger1 = Logger.getLogger("console"); <br />   logger1.debug("debug!!!"); <br />   logger1.info("info!!!"); <br />   logger1.warn("warn!!!"); <br />   logger1.error("error!!!"); <br />   logger1.fatal("fatal!!!");<br />//在NT系统日志输出 <br />   Logger logger2 = Logger.getLogger("NTlog"); <br />   //NTEventLogAppender nla = new NTEventLogAppender(); <br />   logger2.debug("debug!!!"); <br />   logger2.info("info!!!"); <br />   logger2.warn("warn!!!"); <br />   logger2.error("error!!!"); <br />   //只有这个错误才会写入2000日志 <br />   logger2.fatal("fatal!!!");<br />//把日志发送到mail <br />   Logger logger3 = Logger.getLogger("MailLog"); <br />   //SMTPAppender sa = new SMTPAppender(); <br />   logger3.warn("warn!!!"); <br />   logger3.error("error!!!"); <br />   logger3.fatal("fatal!!!"); <br />  } <br /> }
          <br/>
          <span style="color:red;">
            <a href="http://zhongzhao-2008.javaeye.com/blog/198558#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 30 May 2008 10:19:41 +0800</pubDate>
        <link>http://zhongzhao-2008.javaeye.com/blog/198558</link>
        <guid>http://zhongzhao-2008.javaeye.com/blog/198558</guid>
      </item>
      <item>
        <title>ESB的概念</title>
        <author>zhongzhao_2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhongzhao-2008.javaeye.com">zhongzhao_2008</a>&nbsp;
          链接：<a href="http://zhongzhao-2008.javaeye.com/blog/189582" style="color:red;">http://zhongzhao-2008.javaeye.com/blog/189582</a>&nbsp;
          发表时间: 2008年05月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近在看ESB，看了好多资料，也没个头绪。大家可否指点指点。
          <br/>
          <span style="color:red;">
            <a href="http://zhongzhao-2008.javaeye.com/blog/189582#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 05 May 2008 09:14:16 +0800</pubDate>
        <link>http://zhongzhao-2008.javaeye.com/blog/189582</link>
        <guid>http://zhongzhao-2008.javaeye.com/blog/189582</guid>
      </item>
      <item>
        <title>求java报表工具 </title>
        <author>zhongzhao_2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhongzhao-2008.javaeye.com">zhongzhao_2008</a>&nbsp;
          链接：<a href="http://zhongzhao-2008.javaeye.com/blog/188432" style="color:red;">http://zhongzhao-2008.javaeye.com/blog/188432</a>&nbsp;
          发表时间: 2008年04月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          开源，适用，能完成参数、交叉报表、可定制等等功能。
          <br/>
          <span style="color:red;">
            <a href="http://zhongzhao-2008.javaeye.com/blog/188432#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Apr 2008 14:57:53 +0800</pubDate>
        <link>http://zhongzhao-2008.javaeye.com/blog/188432</link>
        <guid>http://zhongzhao-2008.javaeye.com/blog/188432</guid>
      </item>
      <item>
        <title>lucene的效率</title>
        <author>zhongzhao_2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhongzhao-2008.javaeye.com">zhongzhao_2008</a>&nbsp;
          链接：<a href="http://zhongzhao-2008.javaeye.com/blog/187452" style="color:red;">http://zhongzhao-2008.javaeye.com/blog/187452</a>&nbsp;
          发表时间: 2008年04月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          求lucene提高效率？
          <br/>
          <span style="color:red;">
            <a href="http://zhongzhao-2008.javaeye.com/blog/187452#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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 Apr 2008 10:33:16 +0800</pubDate>
        <link>http://zhongzhao-2008.javaeye.com/blog/187452</link>
        <guid>http://zhongzhao-2008.javaeye.com/blog/187452</guid>
      </item>
      <item>
        <title>hibernate validator 怎么验证数据库</title>
        <author>zhongzhao_2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhongzhao-2008.javaeye.com">zhongzhao_2008</a>&nbsp;
          链接：<a href="http://zhongzhao-2008.javaeye.com/blog/187411" style="color:red;">http://zhongzhao-2008.javaeye.com/blog/187411</a>&nbsp;
          发表时间: 2008年04月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近遇到一个问题，用hibernate validator只能进行一般的验证，我想知道可否进行数据库方面的验证?
          <br/>
          <span style="color:red;">
            <a href="http://zhongzhao-2008.javaeye.com/blog/187411#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 28 Apr 2008 09:28:26 +0800</pubDate>
        <link>http://zhongzhao-2008.javaeye.com/blog/187411</link>
        <guid>http://zhongzhao-2008.javaeye.com/blog/187411</guid>
      </item>
  </channel>
</rss>