<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>一生一火花</title>
    <description>一生一火花</description>
    <link>http://xuliangyong.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>只读操作要不要加事务的思考</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/204922" style="color:red;">http://xuliangyong.javaeye.com/blog/204922</a>&nbsp;
          发表时间: 2008年06月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          关于读数据时是否需要加锁，相信很多用过Hiberate的人一直都有这样的争论，那么到底是应该加还是不应该加呢？<br />还是让我们了解一下加事务后数据会有什么样的变化吧？<br /><span style="color: blue">数据库通常分为两种锁：读锁和写锁。<br />事务对数据加读锁后，这块数据只能被读不能被修改；且该数据只能被其他事务加读锁，不能加写锁<br />事务对数据加写锁后，能够对数据读写。但其他事务既不能读也不能写。</span><br />现在我们来看一下，在只读操作中加与不加事务的区别：<br />加事务：数据加读锁，并发事务不能修改加锁数据，保证不会脏读。就是说任何其他事务只能读不能写<br />不加事务：没有任何锁，任何事务都可对其修改，可能会脏读。<br /><span style="color: blue">所以只读操作加与不加事务，要视情形而定。<br />关键数据 实时数据像读银行帐户的余额等最好加上事务<br />一般的操作，比如像读论坛帖子就没有必要了</span>
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/204922#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 17 Jun 2008 22:52:46 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/204922</link>
        <guid>http://xuliangyong.javaeye.com/blog/204922</guid>
      </item>
      <item>
        <title>转：数据库优化之SQL语句性能调整原则</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/197891" style="color:red;">http://xuliangyong.javaeye.com/blog/197891</a>&nbsp;
          发表时间: 2008年05月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          一、问题的提出<br /><br />　　在应用系统开发初期，由于开发数据库数据比较少，对于查询SQL语句，复杂视图的的编写等体会不出SQL语句各种写法的性能优劣，但是如果将应用系统提交实际应用后，随着数据库中数据的增加，系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL语句的优化。对于海量数据，劣质SQL语句和优质SQL 语句之间的速度差别可以达到上百倍，可见对于一个系统不是简单地能实现其功能就可，而是要写出高质量的SQL语句，提高系统的可用性。<br /><br />　　在多数情况下，数据库使用索引来更快地遍历表，优化器主要根据定义的索引来提高性能。但是，如果在SQL语句的where子句中写的SQL代码不合理，就会造成优化器删去索引而使用全表扫描，一般就这种SQL语句就是所谓的劣质SQL语句。在编写SQL语句时我们应清楚优化器根据何种原则来删除索引，这有助于写出高性能的SQL语句。<br /><br />　　二、SQL语句编写注意问题<br /><br />　　下面就某些SQL语句的where子句编写中需要注意的问题作详细介绍。在这些where子句中，即使某些列存在索引，但是由于编写了劣质的SQL，系统在运行该SQL语句时也不能使用该索引，而同样使用全表扫描，这就造成了响应速度的极大降低。<br /><br />　　1. IS NULL 与 IS NOT NULL<br /><br />　　不能用null作索引，任何包含null值的列都将不会被包含在索引中。即使索引有多列这样的情况下，只要这些列中有一列含有null，该列就会从索引中排除。也就是说如果某列存在空值，即使对该列建索引也不会提高性能。<br /><br />　　任何在where子句中使用is null或is not null的语句优化器是不允许使用索引的。<br /><br />　　2. 联接列<br /><br />　　对于有联接的列，即使最后的联接值为一个静态值，优化器是不会使用索引的。我们一起来看一个例子，假定有一个职工表（employee），对于一个职工的姓和名分成两列存放（FIRST_NAME和LAST_NAME），现在要查询一个叫比尔.克林顿（Bill Cliton）的职工。<br /><br />　　下面是一个采用联接查询的SQL语句，<br /><br />select * from employss<br />where<br />first_name||''||last_name ='Beill Cliton';<br />　　上面这条语句完全可以查询出是否有Bill Cliton这个员工，但是这里需要注意，系统优化器对基于last_name创建的索引没有使用。<br /><br />　　当采用下面这种SQL语句的编写，Oracle系统就可以采用基于last_name创建的索引。<br /><br />Select * from employee<br />where<br />first_name ='Beill' and last_name ='Cliton';<br />　　遇到下面这种情况又如何处理呢？如果一个变量（name）中存放着Bill Cliton这个员工的姓名，对于这种情况我们又如何避免全程遍历，使用索引呢？可以使用一个函数，将变量name中的姓和名分开就可以了，但是有一点需要注意，这个函数是不能作用在索引列上。下面是SQL查询脚本：<br /><br />select * from employee<br />where<br />first_name = SUBSTR('&&name',1,INSTR('&&name',' ')-1)<br />and<br />last_name = SUBSTR('&&name',INSTR('&&name’,' ')+1)<br /><br />　　3. 带通配符（%）的like语句<br /><br />　　同样以上面的例子来看这种情况。目前的需求是这样的，要求在职工表中查询名字中包含cliton的人。可以采用如下的查询SQL语句：<br /><br />select * from employee where last_name like '%cliton%';<br /><br />　　这里由于通配符（%）在搜寻词首出现，所以系统不使用last_name的索引。在很多情况下可能无法避免这种情况，但是一定要心中有底，通配符如此使用会降低查询速度。然而当通配符出现在字符串其他位置时，优化器就能利用索引。在下面的查询中索引得到了使用：<br /><br />select * from employee where last_name like 'c%';<br /><br />　　4. Order by语句<br /><br />　　ORDER BY语句决定了Oracle如何将返回的查询结果排序。Order by语句对要排序的列没有什么特别的限制，也可以将函数加入列中（象联接或者附加等）。任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。<br /><br />　　仔细检查order by语句以找出非索引项或者表达式，它们会降低性能。解决这个问题的办法就是重写order by语句以使用索引，也可以为所使用的列建立另外一个索引，同时应绝对避免在order by子句中使用表达式。<br /><br />　　5. NOT<br /><br />　　我们在查询时经常在where子句使用一些逻辑表达式，如大于、小于、等于以及不等于等等，也可以使用and（与）、or（或）以及not（非）。NOT可用来对任何逻辑运算符号取反。下面是一个NOT子句的例子：<br /><br />... where not (status ='VALID')<br /><br />　　如果要使用NOT，则应在取反的短语前面加上括号，并在短语前面加上NOT运算符。NOT运算符包含在另外一个逻辑运算符中，这就是不等于（&lt;>）运算符。换句话说，即使不在查询where子句中显式地加入NOT词，NOT仍在运算符中，见下例：<br /><br />... where status &lt;>'INVALID';<br /><br />　　再看下面这个例子：<br /><br />select * from employee where salary&lt;>3000;<br /><br />　　对这个查询，可以改写为不使用NOT：<br /><br />select * from employee where salary&lt;3000 or salary>3000;<br /><br />　　虽然这两种查询的结果一样，但是第二种查询方案会比第一种查询方案更快些。第二种查询允许数据库对salary列使用索引，而第一种查询则不能使用索引。<br /><br /> <br /><br />　　6.　IN和EXISTS<br /><br />　　有时候会将一列和一系列值相比较。最简单的办法就是在where子句中使用子查询。在where子句中可以使用两种格式的子查询。<br /><br />　　第一种格式是使用IN操作符：<br /><br />... where column in(select * from ... where ...);<br /><br />　　第二种格式是使用EXIST操作符：<br /><br />... where exists (select 'X' from ...where ...);<br /><br />　　我相信绝大多数人会使用第一种格式，因为它比较容易编写，而实际上第二种格式要远比第一种格式的效率高。在数据库中可以几乎将所有的IN操作符子查询改写为使用EXISTS的子查询。<br /><br />　　第二种格式中，子查询以‘select 'X'开始。运用EXISTS子句不管子查询从表中抽取什么数据它只查看where子句。这样优化器就不必遍历整个表而仅根据索引就可完成工作（这里假定在where语句中使用的列存在索引）。相对于IN子句来说，EXISTS使用相连子查询，构造起来要比IN子查询困难一些。<br /><br />　　通过使用EXIST，数据库系统会首先检查主查询，然后运行子查询直到它找到第一个匹配项，这就节省了时间。Oracle系统在执行IN子查询时，首先执行子查询，并将获得的结果列表存放在在一个加了索引的临时表中。在执行子查询之前，系统先将主查询挂起，待子查询执行完毕，存放在临时表中以后再执行主查询。这也就是使用EXISTS比使用IN通常查询速度快的原因。<br /><br />　　同时应尽可能使用NOT EXISTS来代替NOT IN，尽管二者都使用了NOT（不能使用索引而降低速度），NOT EXISTS要比NOT IN查询效率更高。
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/197891#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 28 May 2008 16:07:05 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/197891</link>
        <guid>http://xuliangyong.javaeye.com/blog/197891</guid>
      </item>
      <item>
        <title>cms的分页</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/197886" style="color:red;">http://xuliangyong.javaeye.com/blog/197886</a>&nbsp;
          发表时间: 2008年05月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          cms系统中文章太长时 分页是必须地<br />怎么分页呢？ 在数据库结构上做文章好像有点麻烦。<br />在生成的时候只有分页内容是变化的，所以只能在内容上做文章<br />我的想法是这样的：多页内容还是在一个textarea中输入，页页之间用一个特定的标记分割 如下<br /><br /><pre name="code" class="java">文章内容第一页。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
--------- 分页标记 ----------
文章内容第二页。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
--------- 分页标记 ----------
文章内容第三页。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。</pre><br /><br />生成程序在读取的时候进行分页生成处理。<br /><br />这样的缺点是要在textarea中多输入一些分页标记 优点是实现起来比较简单<br />不知道有没有其他更好的方法进行分页
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/197886#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>Wed, 28 May 2008 15:56:15 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/197886</link>
        <guid>http://xuliangyong.javaeye.com/blog/197886</guid>
      </item>
      <item>
        <title>lunece的倒排序索引结构</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/197838" style="color:red;">http://xuliangyong.javaeye.com/blog/197838</a>&nbsp;
          发表时间: 2008年05月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          听说倒排序索引好长时间了 感觉挺神秘的 ，下面我们通过一个例子来解读一下什么是倒排序索引结构。<br />假设有两片文章 如下，<br /><pre name="code" class="java">文章1：Tom lives in Guangzhou,I live in Guangzhou too.
文章2：He once lived in Shanghai. </pre><br />lucene要对这两片文章简历索引，大概的步骤是这样的<br />1.找出文章中的所有单词，这个非常简单啦 <br />2.去掉这些单词中无意义的， 如 in too等<br />3.还原单词，如lives lived 还原成live。中文就没有这个问题啦<br />4.建立倒排序索引结构<br /><br />我们重点看一下这两篇文章的倒排序索引结构是什么样子，<br /><pre name="code" class="java">关键字     文章号
Guangzhou  1
live       1,2
shanghai   2</pre><br />这就是传说中的倒排序索引了------通过关键字 找到文章号<br />这些关键字在lucene中叫做term<br />lucene中还有一个field的概念，主要是用来描述term出现在哪儿的，如live是出现在文章内容中还是文章标题中的，一个term可能有多个field。<br />如果要搜索live，很方便的就可以找到对应的文章号，而不需要进行全文扫描，这样就大大提高了速度，也提升了服务器性能。<br /><br />当然lucene的索引文件并没有这么简单，通常还会有出现频率 出现位置（为高亮显示）等<br /><br />参考<a href="http://hi.baidu.com/zhaolijun08/blog/item/d15c7a082e7c4e33e92488df.html" target="_blank">http://hi.baidu.com/zhaolijun08/blog/item/d15c7a082e7c4e33e92488df.html</a>
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/197838#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 28 May 2008 13:44:01 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/197838</link>
        <guid>http://xuliangyong.javaeye.com/blog/197838</guid>
      </item>
      <item>
        <title>第一个js类，包含两个方法 reset validate</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/197227" style="color:red;">http://xuliangyong.javaeye.com/blog/197227</a>&nbsp;
          发表时间: 2008年05月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">&lt;script type="text/javascript">
	var Form = Class.create();
	Form.prototype = {
		initialize: function(formId){
			this.form = $(formId);
		},
		
		reset: function(){
			for(i = 0; i &lt; this.form.length; i++){
				if(this.form[i].type == 'text' || this.form[i].type == 'password'){
					this.form[i].value = '';
				}
			}
		},
		
		validate: function(){
			for(i = 0; i &lt; this.form.length; i++){
				//alert(this.form[i].className);
				if(this.form[i].className.indexOf('required') > -1){
					alert(this.form[i].name + ' is required.');
				}
			}
		}
	};
	
	function clearForm(){
		var myform = new Form('loginForm');
		//myform.reset();
		myform.validate();
	}
&lt;/script>
&lt;/head>
&lt;body>
&lt;form id="loginForm" action="">
	&lt;div>用户名：&lt;input type="input" class="required" name="username" />&lt;/div>
	&lt;div>密码：&lt;input type="password" name="password" />&lt;/div>
	&lt;div>&lt;input type="button" value="test" onclick="clearForm();"/> &lt;/div>
&lt;/form></pre>
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/197227#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 26 May 2008 22:57:31 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/197227</link>
        <guid>http://xuliangyong.javaeye.com/blog/197227</guid>
      </item>
      <item>
        <title>quick guide to somewhat advanced javascript</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/196990" style="color:red;">http://xuliangyong.javaeye.com/blog/196990</a>&nbsp;
          发表时间: 2008年05月26日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          js火了好长时间了，一直也没去学习一下，无意中发现一片快速指南 照着做了一下 发现原来很简单，现记录下来 作为备忘吧<br /><strong><span style="font-size: large">JSON</span></strong><br />json相当于java中的对象：<br />例<br /><pre name="code" class="java">var user = {
    username:'xuly',
    sex:'男',
    sayHello:function(){
        alert('hello world');
    }
};
user.sayHello();</pre><br />输出：hello world<br />在js中函数也是一个对象，你可以传递一个函数作为参数，就像传递一个字符串一样<br /><br /><strong><span style="font-size: large">数组</span></strong><br />这两句是一样的 <br /><pre name="code" class="java">var a = new Array();  //alert(a.size) == 0
var b = [];           //alert(b.size) == 0;
</pre><br /><pre name="code" class="java">b = ['hello', 34, 'java script'];
b[10] = 32; //alert(b.length) == 11</pre><br />数组元素可为任何类型 数组型 字符串都是合法的<br /><br />另外数组下标可以为字符串，主要用于访问对象的属性 如下例<br /><pre name="code" class="java">var user = {};
user['username'] = 'xuly';
user['sex'] = '男';
user['sayHello']=function(){
    alert('hello world');
};
</pre><br />这效果跟上面json的user对象是一样的<br /><pre name="code" class="java">user['sayHello'](); 
user.sayHello();</pre><br />这两句也是做同一件事的<br /><br /><br /><strong><span style="font-size: large">类</span></strong><br /><pre name="code" class="java">js中类的概念是最重要的  下面我们来认识一下类
//定义一个类 ：Person
var Person = function(name, age){
    this.name = name;
    this.age = age;
};

var aPerson = new Person('xuly', 20);
alert(aPerson.name); //  output 'xuly'</pre><br />可以看到js的类就是一个函数， 不同的是这个函数用到了this关键字来定义类属性<br />上例中只是声明了属性 并没有声明方法 方法是这样声明的<br /><pre name="code" class="java">Person.prototype.sayHello = function(){
    return 'hello ' + this.name;
};</pre><br /><br />如果采用prototype.js框架来定义一个类将更加简单<br /><pre name="code" class="java">var Persion = Class.create();
Persion.prototype = {
   //constructor
    initialize:function(name, age){
        this.name = name;
        this.age = age;
    },
    sayHello: function(){
        return 'hello ' + this.name;
    }
};</pre><br /><br /><br />原文：<a href="http://www.sergiopereira.com/articles/advjs.html" target="_blank">http://www.sergiopereira.com/articles/advjs.html</a>
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/196990#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/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>Mon, 26 May 2008 12:33:35 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/196990</link>
        <guid>http://xuliangyong.javaeye.com/blog/196990</guid>
      </item>
      <item>
        <title>svn值得注意的几个特性</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/196674" style="color:red;">http://xuliangyong.javaeye.com/blog/196674</a>&nbsp;
          发表时间: 2008年05月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          cvs中只有文件有版本的概念 而在svn中目录也具有版本概念，换句话说如果你删除或者增加一个文件到目录中，目录的版本会发生变化<br />原子提交：这个svn的新特性，将几个文件看做一个整体进行update commit等<br />元数据：每个文件和目录都可以添加key value对<br /><br />关于svn中的项目<br />通常我们习惯一个project对应一个版本库， 但svn没有项目的概念 你可以把说有的project'放在一个版本库中<br />查看更多<a href="http://www.subversion.org.cn/svnbook/1.2/svn.intro.features.html" target="_blank">http://www.subversion.org.cn/svnbook/1.2/svn.intro.features.html</a>
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/196674#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sun, 25 May 2008 11:35:57 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/196674</link>
        <guid>http://xuliangyong.javaeye.com/blog/196674</guid>
      </item>
      <item>
        <title>pl sql</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/195014" style="color:red;">http://xuliangyong.javaeye.com/blog/195014</a>&nbsp;
          发表时间: 2008年05月20日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          好久没写过pl sql了 今天面试居然考了 <br />赶紧复习一下<br />快（block）是pl sql 的基本执行单位 block 分为定义部分（declare） 执行部分（begin） 例外处理部分（excepion） 结构如下：<br /><pre name="code" class="java">declare
。。。。。
begin
。。。。。。
exception
。。。。。。
end；</pre> <br />游标定义 cursor emp_cursor is select * from emp
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/195014#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 20 May 2008 20:47:45 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/195014</link>
        <guid>http://xuliangyong.javaeye.com/blog/195014</guid>
      </item>
      <item>
        <title>house script</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/190855" style="color:red;">http://xuliangyong.javaeye.com/blog/190855</a>&nbsp;
          发表时间: 2008年05月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          # SQL Manager 2007 for MySQL 4.1.2.1<br /># ---------------------------------------<br /># Host     : localhost<br /># Port     : 3306<br /># Database : house<br /><br /><br />SET FOREIGN_KEY_CHECKS=0;<br /><br />USE `house`;<br /><br />#<br /># Structure for the `t_house_type` table : <br />#<br /><br />DROP TABLE IF EXISTS `t_house_type`;<br /><br />CREATE TABLE `t_house_type` (<br />  `id` INTEGER(11) NOT NULL AUTO_INCREMENT,<br />  `title` VARCHAR(128) COLLATE gbk_chinese_ci NOT NULL COMMENT '房型简单描述 如 两室一厅一卫',<br />  `total_room` TINYINT(4) DEFAULT NULL COMMENT '房间数',<br />  `total_hall` TINYINT(4) DEFAULT NULL COMMENT '厅数 s',<br />  `total_toilet` TINYINT(4) DEFAULT NULL COMMENT '卫生间数  T',<br />  PRIMARY KEY (`id`)<br />)ENGINE=InnoDB COMMENT='InnoDB free: 11264 kB; InnoDB free: 11264 kB' CHECKSUM=0 DELAY_KEY_WRITE=0 PACK_KEYS=0 MIN_ROWS=0 MAX_ROWS=0 ROW_FORMAT=COMPACT CHARACTER SET 'utf8'<br />COLLATE 'utf8_general_ci';<br /><br />#<br /># Structure for the `t_house` table : <br />#<br /><br />DROP TABLE IF EXISTS `t_house`;<br /><br />CREATE TABLE `t_house` (<br />  `id` INTEGER(11) NOT NULL AUTO_INCREMENT,<br />  `title` VARCHAR(512) COLLATE gbk_chinese_ci DEFAULT NULL,<br />  `address` VARCHAR(512) COLLATE gbk_chinese_ci DEFAULT NULL,<br />  `forward` VARCHAR(16) COLLATE gbk_chinese_ci DEFAULT NULL,<br />  `type_id` INTEGER(11) DEFAULT NULL COMMENT '房屋类型 关联表t_house_type',<br />  `build_area` DECIMAL(9,2) DEFAULT NULL COMMENT '建筑面积  L',<br />  `use_area` DECIMAL(9,2) DEFAULT NULL COMMENT '使用面积  L',<br />  `unit_price` DECIMAL(9,2) DEFAULT NULL,<br />  `total_prices` DECIMAL(9,2) DEFAULT NULL,<br />  `floor` SMALLINT(6) DEFAULT NULL,<br />  `total_floor` SMALLINT(6) DEFAULT NULL,<br />  `house_age` TINYINT(4) DEFAULT NULL COMMENT '房龄 s',<br />  `is_sold` BIT(1) DEFAULT NULL COMMENT '是否已出售 d e',<br />  `landlord_name` VARCHAR(32) COLLATE gbk_chinese_ci DEFAULT NULL COMMENT '房东名字  R',<br />  `landlord_phone` VARCHAR(32) COLLATE gbk_chinese_ci DEFAULT NULL COMMENT '房东电话  R',<br />  `remark` VARCHAR(1024) COLLATE gbk_chinese_ci DEFAULT NULL,<br />  `input_time` DATETIME DEFAULT NULL,<br />  PRIMARY KEY (`id`),<br />  KEY `type_id` (`type_id`),<br />  CONSTRAINT `t_house_fk` FOREIGN KEY (`type_id`) REFERENCES `t_house_type` (`id`)<br />)ENGINE=InnoDB COMMENT='InnoDB free: 11264 kB; (`type_id`) REFER `house/t_house_type; InnoDB free: 11264' CHECKSUM=0 DELAY_KEY_WRITE=0 PACK_KEYS=0 MIN_ROWS=0 MAX_ROWS=0 ROW_FORMAT=COMPACT CHARACTER SET 'utf8'<br />COLLATE 'utf8_general_ci';<br /><br />#<br /># Structure for the `t_role` table : <br />#<br /><br />DROP TABLE IF EXISTS `t_role`;<br /><br />CREATE TABLE `t_role` (<br />  `id` INTEGER(11) NOT NULL AUTO_INCREMENT,<br />  `role_name` VARCHAR(64) COLLATE utf8_general_ci NOT NULL,<br />  `descprition` VARCHAR(128) COLLATE utf8_general_ci DEFAULT NULL,<br />  PRIMARY KEY (`id`)<br />)ENGINE=InnoDB COMMENT='InnoDB free: 11264 kB' CHECKSUM=0 DELAY_KEY_WRITE=0 PACK_KEYS=0 MIN_ROWS=0 MAX_ROWS=0 ROW_FORMAT=COMPACT CHARACTER SET 'utf8'<br />COLLATE 'utf8_general_ci';<br /><br />#<br /># Structure for the `t_user` table : <br />#<br /><br />DROP TABLE IF EXISTS `t_user`;<br /><br />CREATE TABLE `t_user` (<br />  `id` INTEGER(11) NOT NULL AUTO_INCREMENT,<br />  `username` VARCHAR(64) COLLATE utf8_general_ci NOT NULL,<br />  `password` VARCHAR(64) COLLATE utf8_general_ci DEFAULT NULL,<br />  `role_id` INTEGER(11) DEFAULT NULL,<br />  `locked` BIT(1) DEFAULT NULL,<br />  PRIMARY KEY (`id`),<br />  KEY `role_id` (`role_id`),<br />  CONSTRAINT `t_user_fk` FOREIGN KEY (`role_id`) REFERENCES `t_role` (`id`)<br />)ENGINE=InnoDB COMMENT='InnoDB free: 11264 kB; (`role_id`) REFER `house/t_role`(`id`)' CHECKSUM=0 DELAY_KEY_WRITE=0 PACK_KEYS=0 MIN_ROWS=0 MAX_ROWS=0 ROW_FORMAT=COMPACT CHARACTER SET 'utf8'<br />COLLATE 'utf8_general_ci';
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/190855#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 08 May 2008 06:47:09 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/190855</link>
        <guid>http://xuliangyong.javaeye.com/blog/190855</guid>
      </item>
      <item>
        <title>linux下配置tomcat6开机自动启动</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/186298" style="color:red;">http://xuliangyong.javaeye.com/blog/186298</a>&nbsp;
          发表时间: 2008年04月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          英文文档参见 <a href="http://tomcat.apache.org/tomcat-6.0-doc/setup.html" target="_blank">http://tomcat.apache.org/tomcat-6.0-doc/setup.html</a><br />中文文档参见<a href="http://zengsun.javaeye.com/blog/161711" target="_blank">http://zengsun.javaeye.com/blog/161711</a><br /><br />中间遇到的问题有这个几个 <br />1：需要安装autoconfig组件 centos中比较方便 #yum install autoconfig搞定<br />2：make是可能会出现权限不足 修改权限即可 #chmod 755 configure <br />3:chkconfig是出现‘tomcat 服务不支持 chkconfig’在tomcat.sh的头部加如下代码<br /><pre name="code" class="java">#!/bin/sh
#
# Startup Script for Tomcat6
#
# chkconfig: 345 88 14
# description: Tomcat Daemon
# processname: jsvc
# pidfile: /var/run/jsvc.pid</pre>
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/186298#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 Apr 2008 11:20:10 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/186298</link>
        <guid>http://xuliangyong.javaeye.com/blog/186298</guid>
      </item>
      <item>
        <title>prototype js Ajax.Updater的用法</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/181778" style="color:red;">http://xuliangyong.javaeye.com/blog/181778</a>&nbsp;
          发表时间: 2008年04月11日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          今天用Ajax.Updater来实现table行删除。思路是浏览器发送id到服务器 服务器删除id的entity，然后返回js让浏览器端执行以删除table tr。<br />这中间遇到了一个低级问题 <pre name="code" class="java">
new Ajax.Updater('a', '${ pageContext.request.contextPath }/message/sender_delete/' + mid, 
				{method: 'get', evalScripts: true});</pre><br />第一个参数：是html元素的id，问题就出在这个id上了。 我随便写了个id ，结果收到的礼物是调试了两个小时 ：（<br />在此做个笔记 加深印象 防止再犯这样的低级错误
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/181778#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 11 Apr 2008 14:47:34 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/181778</link>
        <guid>http://xuliangyong.javaeye.com/blog/181778</guid>
      </item>
      <item>
        <title>Google AdSense的回信 ：申请未通过。管的太细了</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/180150" style="color:red;">http://xuliangyong.javaeye.com/blog/180150</a>&nbsp;
          发表时间: 2008年04月07日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          XXX：您好！<br /><br />非常感谢您对 Google AdSense 的兴趣。很抱歉，在审核您的申请后，我们目前无法批准您参与 Google AdSense 。我们将未批准您申请的原因列在了下面。问题:<br /><br /><br />- 成人内容<br /><br />---------------------<br /><br />详细信息:<br /><br />成人内容：目前，AdSense 计划仅可提供被归类为内容健康的 Google 广告。我们发现您的网站以成人内容为主。这包括含有色情、淫秽或挑衅内容的文字或图片，以及要求用户年满十八岁或不适于在工作场所浏览的网站。因此，我们无法在您的网站上展示相关广告。请参阅我们的政策 (https://www.google.com/adsense/policies )，获取有关不接受网站内容的完整列表。<br /><br />有关AdSense成人内容政策的详细说明请参阅我们的博客文章：<br /><br />http://adsense.googlechinablog.com/2007/10/adsense_23.html<br /><br />---------------------<br /><br />有关 AdSense 标准的完整列表，请访问：https://www.google.com/adsense/policies?hl=zh_CNhttps://www.google.com/adsense/localized-terms?hl=zh_CN<br /><br />要更新并重新提交申请，请访问 https://www.google.com/adsense?hl=zh_CN，并使用与申请一起提交的电子邮件地址和密码在"现有客户登录"框处登录。我们的专家会审核您的帐户，以检查帐户是否符合我们的计划政策，所以，请务必在解决上面列出的所有问题后再重新提交。<br /><br />如有其他问题，建议您访问 AdSense 支持中心: https://www.google.cn/support/adsense 。如果您在这个网站上找不到所需的回答，敬请随时通过 https://www.google.com/adsense/support/bin/request.py? 与我们联系。<br /><br />Google AdSense 小组敬上
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/180150#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>Mon, 07 Apr 2008 15:37:40 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/180150</link>
        <guid>http://xuliangyong.javaeye.com/blog/180150</guid>
      </item>
      <item>
        <title>hibernate annotations和hbm.xml配置文件并存配置</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/178336" style="color:red;">http://xuliangyong.javaeye.com/blog/178336</a>&nbsp;
          发表时间: 2008年04月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">&lt;bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		&lt;property name="dataSource" ref="dataSource" />
		&lt;property name="mappingResources">
			&lt;list>
				&lt;value>/com/yese/domain/Bulletin.hbm.xml&lt;/value>
				&lt;value>/com/yese/domain/User.hbm.xml&lt;/value>
				&lt;value>/com/yese/domain/RoleProgram.hbm.xml&lt;/value>
				&lt;value>/com/yese/domain/Role.hbm.xml&lt;/value>
				&lt;value>/com/yese/domain/QuestionOption.hbm.xml&lt;/value>
				&lt;value>/com/yese/domain/Question.hbm.xml&lt;/value>
				&lt;value>/com/yese/domain/ProgramRecommend.hbm.xml&lt;/value>
				&lt;value>/com/yese/domain/ProgramPhase.hbm.xml&lt;/value>
				&lt;value>/com/yese/domain/ProgramDownloadLog.hbm.xml&lt;/value>
				&lt;value>/com/yese/domain/ProgramCategory.hbm.xml&lt;/value>
				&lt;value>/com/yese/domain/Program.hbm.xml&lt;/value>
				&lt;value>/com/yese/domain/Mail.hbm.xml&lt;/value>
				&lt;value>/com/yese/domain/ArticleCategory.hbm.xml&lt;/value>
			&lt;/list>
		&lt;/property>
		
		&lt;property name="annotatedClasses">
			&lt;list>
				&lt;value>com.yese.domain.Article&lt;/value>
			&lt;/list>
		&lt;/property>

		&lt;property name="hibernateProperties">
			&lt;props>
				&lt;prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect&lt;/prop>
				&lt;prop key="hibernate.show_sql">true&lt;/prop>
				&lt;prop key="hibernate.query.substitutions">true 1, false 0&lt;/prop>
				&lt;prop key="hibernate.autoReconnect">true&lt;/prop>
				&lt;prop key="hibernate.bytecode.use_reflection_optimizer">true&lt;/prop>
				&lt;prop key="hibernate.cache.use_query_cache">true&lt;/prop>
                &lt;prop key="hibernate.cache.use_second_level_cache">true&lt;/prop>
                &lt;prop key="hibernate.cache.provider_class">com.yese.cache.memcached.MemcachedCacheProvider&lt;/prop>
                
                &lt;prop key="hibernate.search.default.directory_provider">org.hibernate.search.store.FSDirectoryProvider&lt;/prop>
                &lt;prop key="hibernate.search.default.indexBase">c:/indexes&lt;/prop>
                &lt;!-- 
                &lt;prop key="hibernate.search.analyzer">&lt;/prop>
                  -->
				
                &lt;prop key="memcached.servers">192.168.1.32:12000&lt;/prop>
				&lt;prop key="memcached.failover">true&lt;/prop>
				&lt;prop key="memcached.initConn">10&lt;/prop>
				&lt;prop key="memcached.minConn">10&lt;/prop>
				&lt;prop key="memcached.maxConn">1000&lt;/prop>
				&lt;prop key="memcached.maintSleep">30&lt;/prop>
				&lt;prop key="memcached.nagle">false&lt;/prop>
				&lt;prop key="memcached.socketTO">3000&lt;/prop>
				&lt;prop key="memcached.aliveCheck">true&lt;/prop>
				
				&lt;!-- memcached -->
				&lt;!-- 
				&lt;prop key="memcached.org.hibernate.cache.StandardQueryCache">30s&lt;/prop>
				&lt;prop key="memcached.org.hibernate.cache.UpdateTimestampsCache">30s&lt;/prop>
				&lt;prop key="memcached.com.yese.domain.Article">30s&lt;/prop>
				&lt;prop key="memcached.com.yese.domain.Mail">30s&lt;/prop>
				 -->
			&lt;/props>
		&lt;/property>
	&lt;/bean></pre><br />&lt;property name="mappingResources">指定映射文件<br />&lt;property name="annotatedClasses">指定annotation类
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/178336#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/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Apr 2008 11:29:25 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/178336</link>
        <guid>http://xuliangyong.javaeye.com/blog/178336</guid>
      </item>
      <item>
        <title>hibernate日期查询引发的问题</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/173851" style="color:red;">http://xuliangyong.javaeye.com/blog/173851</a>&nbsp;
          发表时间: 2008年03月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          下面的代码是查询某两个日期间的记录<br /><pre name="code" class="java">	public int countTodayLogin(){
//		return (Integer)createQuery("select count(*) from User where lastLoginTime between ? and ?")
//				.setDate(0, this.getStartOfToday())
//				.setDate(1, this.getEndOfToday())
//				.setCacheable(true)
//				.uniqueResult();
		return (Integer)createCriteria()
				.add(Restrictions.between("lastLoginTime",getStartOfToday(),getEndOfToday()))
				.setProjection(Projections.count("id"))
				.uniqueResult();
	}</pre><br />不知道为什么 第一种方法就是查不出结果来 （注掉的代码）<br />另外下面两个方法是获取一天的开始和结束时间  <br />感觉写的挺麻烦的 不知道有没有更简单的方法<br /><pre name="code" class="java">	private Date getStartOfToday(){
		Calendar today = Calendar.getInstance();
		int year = today.get(Calendar.YEAR);
		int month = today.get(Calendar.MONTH);
		int day = today.get(Calendar.DAY_OF_MONTH);
		return new GregorianCalendar(year, month, day, 0, 0, 0).getTime();
	}
	
	private Date getEndOfToday(){
		Calendar today = Calendar.getInstance();
		int year = today.get(Calendar.YEAR);
		int month = today.get(Calendar.MONTH);
		int day = today.get(Calendar.DAY_OF_MONTH);
		return new GregorianCalendar(year, month, day, 23, 59, 59).getTime();
	}</pre><br /><br />还有一点就是SimpleDateFormat格式化时要注意的问题： HH大些输出24小时格式  hh小写是12小时  <br />下班了 撤退！<br />在使用SimpleDateFormat时格式化时间的 yyyy.MM.dd 为年月日而如果希望格式化时间为12小时制的，则使用hh:mm:ss 如果希望格式化时间为24小时制的，则使用HH:mm:ss
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/173851#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 19 Mar 2008 17:57:34 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/173851</link>
        <guid>http://xuliangyong.javaeye.com/blog/173851</guid>
      </item>
      <item>
        <title>用观察者模式解决点击一次文章 update一次数据库的问题</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/171388" style="color:red;">http://xuliangyong.javaeye.com/blog/171388</a>&nbsp;
          发表时间: 2008年03月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>接上文<a href="../../blog/171240" target="_blank">http://xuliangyong.javaeye.com/blog/171240</a></p><p>对于第二种方法现用观察着模式来解决 </p><p>思路是这样：当点击a文章(id=1234)够10次后 ,通知文章管理器更新点击次数</p><p>update article set hit_count = hit_count+10 where id = 1234</p><p>这样就减少了访问数据库的次数</p><p>&nbsp;</p><p>代码如下：</p><pre name="code" class="java">public class HitCached extends Observable{
	private static final int DEFAULT_MAX_HITS = 10;
	private Map&lt;Long, Integer&gt; hits = Collections.synchronizedMap(new HashMap&lt;Long, Integer&gt;());
	
	/**
	 * 最大点击量。超过该值就更新数据库
	 */
	private int maxHits = DEFAULT_MAX_HITS;
	
	public HitCached(){}
	
	public HitCached(int maxHits){
		this.maxHits = maxHits;
	}
	
	public void put(Long key, Integer value){
		hits.put(key, value);
	}
	
	/**
	 * 为指定key 增加指定的点击量
	 * @param hitIncreased 增加的点数 
	 */
	public void addHit(Long key, Integer hitIncreased){
		if( !hits.containsKey(key) )
				hits.put(key, 0);
		Integer value = hits.get(key);
		if(value + hitIncreased &gt;= maxHits){
			setChanged();
			notifyObservers(KeyValuePair.create(key, value + hitIncreased));
			hits.remove(key);
		}else{
			hits.put(key, value + hitIncreased);
		}
		
	}
	
	public Integer get(Long key){
		return hits.get(key);
	}
	
	public void clear(){
		hits.clear();
	}
	
}</pre>&nbsp;<pre name="code" class="java">public class ArticleManagerImpl extends HibernateGenericDao&lt;Article, Long&gt; implements ArticleManager ,Oberver{
	
	public void update(Observable o, Object arg){
		KeyValuePair keyValue = (KeyValuePair)arg;
		Article article = this.get(keyValue.getKey());
		article.setHitCount(article.getHitCount() + keyValue.getValue());
		save(article);
	}</pre>&nbsp;<p>&nbsp;</p><p>action中调用</p><pre name="code" class="java">private static HitCached hitCached = new HitCached(5);

public String view() {
		if (id != null){
			entity = articleManager.get(id);
			hitCached.addObserver(articleManager);
			hitCached.addHit(id, 1);
		}
}</pre><p>&nbsp;这样没十次查看才update一次数据库 更新一次缓存 性能得到了大的提升</p><p>存在的问题：</p><p>停止服务会丢失一些数据 可加一个监听器 来处理 </p>
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/171388#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 14 Mar 2008 14:03:15 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/171388</link>
        <guid>http://xuliangyong.javaeye.com/blog/171388</guid>
      </item>
      <item>
        <title>关于文章点击量的缓存</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/171240" style="color:red;">http://xuliangyong.javaeye.com/blog/171240</a>&nbsp;
          发表时间: 2008年03月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>一篇文章 一个帖子都有其点击量 用户每访问一次其点击量就加一 ，就要update一次数据库 是不是效率太低了？<br />如果采用缓存的话 每次加一后，由于数据update, 缓存就会清除，再重新加载 ，也就是说缓存实际上是没其作用的<br />针对上面的问题 我的想法是 把点击量HitCount做成一个单独的表</p><p>ArticleHit表 </p><p>id </p><p>hit_count</p><p>ArticleHit与Article表是一对一关系 ，在增加点击次数的时候只要修改ArticleHit表即可 不会影响到Article表 Article的缓存也不会更新</p><p>这样的好处是每次数据传输量很小，只用两个字段</p><p>缺点是访问数据库的次数没有将下来</p><p>&nbsp;</p><p>另外一种方法是累计点击次数 等到了一定的次数采取更新数据库，例如累计100次后更新一次数据库 </p><p>这样的好处是极大的缓解了数据库压力 </p><p>缺点是实时性不好； 可能丢失点击次数；会占用一些内存；</p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/171240#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>Fri, 14 Mar 2008 10:12:20 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/171240</link>
        <guid>http://xuliangyong.javaeye.com/blog/171240</guid>
      </item>
      <item>
        <title>html中img 的src</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/170740" style="color:red;">http://xuliangyong.javaeye.com/blog/170740</a>&nbsp;
          发表时间: 2008年03月13日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Img标签用了很多年了 但是一直也没有怎么注意它  昨天在做二级缓存的时候发现 <br /><span style="color: red">在刷新一个二级页面的时候 总是会连带这刷新首页</span><br />这个问题让我有点莫不找头脑  看了看程序逻辑发现没有问题 最后焦点对准了jsp<br />删除jsp所有代码，重新刷新页面 ok 没有出现连带刷新首页的现象<br />然后迭代用这种方式 最后找到原因了 &lt;img src="" /><br />就是这个src的原因，我的完整写法是这样的<br /><pre name="code" class="java">&lt;img src="&lt;%=path%>/&lt;ww:property value="scaleUrl"/>"  /></pre><br />如果scaleUrl属性为空，jsp执行后的html为 <br /><pre name="code" class="java">&lt;img src="&lt;%=path%>/"  /></pre><br />也就是web应用的首页 所以就出现了前面的问题
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/170740#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 13 Mar 2008 10:07:45 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/170740</link>
        <guid>http://xuliangyong.javaeye.com/blog/170740</guid>
      </item>
      <item>
        <title>memcached 貌似不支持事务缓存</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/170563" style="color:red;">http://xuliangyong.javaeye.com/blog/170563</a>&nbsp;
          发表时间: 2008年03月12日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          hibernate有4个级别的缓存策略：<br />1.只读缓存 : 数据进入缓存后数据不再改变<br />2.读写缓存：不太明白，大概的意思是更新数据后缓存也要重写  可以防止脏读<br />3.非严格读写缓存 ：跟2类似吧 只是不需要考虑并发 可以接受脏读<br />4.事务缓存：可以避免并发导致的脏读<br />我配置了一个&lt;cache usage="transactional"/> 好像是根本没有缓存数据<br /><br />关于集合属性的缓存 ：<br />如有这样一个关系：两个域对象 Question 和 QuestionOption 为 1：N关系<br />要缓存question id为1的选项questionOptions 这个集合属性<br />正确的做法是<br /><pre name="code" class="java">&lt;set name="questionOptions" ....>
    &lt;cache usage="read-write" />
    ......
&lt;/set></pre><br />而不是在QuestionOption.hbm.xml中添加 &lt;cache usage="read-write" /><br />为什么这样呢 ？ 我的推测是第一种情况实际上是用的查询缓存 添加后相当于query.setCachable(true);<br />而第二种是配置的二级缓存
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/170563#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/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>Wed, 12 Mar 2008 16:00:18 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/170563</link>
        <guid>http://xuliangyong.javaeye.com/blog/170563</guid>
      </item>
      <item>
        <title>memcached 学习</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/169841" style="color:red;">http://xuliangyong.javaeye.com/blog/169841</a>&nbsp;
          发表时间: 2008年03月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          memcached 学习<br /><br />Memcached是高性能的，分布式的内存对象缓存系统，用于在动态应用中减少数据库负载，提升访问速度。<br />Memcached由Danga Interactive开发，用于提升LiveJournal.com访问速度的。LJ每秒动态页面访问量几千次，用户700万。Memcached将数据库负载大幅度降低，更好的分配资源，更快速访问。<br />memcached-Server<br />在服务端运行：<br /><br /># ./memcached -d -m 2048 -l 10.0.0.40 -p 11211<br /><br />这将会启动一个占用2G内存的进程，并打开11211端口用于接收请求。由于32位系统只能处理4G内存的寻址，所以在大于4G内存使用PAE的32位服务器上可以运行2-3个进程，并在不同端口进行监听。<br /><br />memcached server for Win32<br />1.解压缩二进制包到你希望安装的目录 (eg. c:\memcached)<br />2.用命令安装服务：<br /><br />c:\memcached\memcached.exe -d install<br /><br />3.启动服务:<br /><br />c:\memcached\memcached.exe -d start<br /><br />Use the server, 默认端口是11211<br /><br />这样服务器的配置和服务就完成了，客户端的有很多的API，<br />java的：http://www.whalin.com/memcached/#download<br /><br />常用设置：<br />-p 监听的端口<br />-l 连接的IP地址, 默认是本机<br />-d start 启动memcached服务<br />-d restart 重起memcached服务<br />-d stop|shutdown 关闭正在运行的memcached服务<br />-d install 安装memcached服务<br />-d uninstall 卸载memcached服务<br />-u 以的身份运行 (仅在以root运行的时候有效)<br />-m 最大内存使用，单位MB。默认64MB<br />-M 内存耗尽时返回错误，而不是删除项<br />-c 最大同时连接数，默认是1024<br />-f 块大小增长因子，默认是1.25<br />-n 最小分配空间，key+value+flags默认是48<br />-h 显示帮助
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/169841#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 10 Mar 2008 15:27:03 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/169841</link>
        <guid>http://xuliangyong.javaeye.com/blog/169841</guid>
      </item>
      <item>
        <title>centos上安装gcc编译器和libvent   memcached</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/169754" style="color:red;">http://xuliangyong.javaeye.com/blog/169754</a>&nbsp;
          发表时间: 2008年03月10日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          由于安装系统的时候没有装c编译器 导致很多源码安装的程序无法编译  所以需要在linux上装c编译器<br />centos机器上安装比较方便 直接用yum命令在线安装即可 不需要下载安装包<br />安装步骤如下：<br />yum install gcc  <br />就这一条命令就行啦  够简单吧 <br />当然 安装时要确保你的主机能够上网<br />编译器安装后就可以编译安装源码程序包了<br />下面来安装libvent<br /><pre name="code" class="java">tar xzvf libevent-1.4.1-beta.tar.gz
cd libevent-1.4.1-beta
./configure --prefix=/usr/libvent
make
make install</pre><br />ok libvent安装完毕<br />接下来安装memcached<br /><pre name="code" class="java"> tar xzvf memcached-1.2.2.tar.gz    
  cd memcached-1.2.2  
 ./configure --with-libevent=/usr/libvent --prefix=/usr/memcache   
 make   
make install </pre><br />ok了
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/169754#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/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>Mon, 10 Mar 2008 11:19:18 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/169754</link>
        <guid>http://xuliangyong.javaeye.com/blog/169754</guid>
      </item>
      <item>
        <title>删除table行</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/160870" style="color:red;">http://xuliangyong.javaeye.com/blog/160870</a>&nbsp;
          发表时间: 2008年01月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <pre name="code" class="java">&lt;?xml version="1.0" encoding="GBK" ?>
&lt;%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
&lt;html xmlns="http://www.w3.org/1999/xhtml">
&lt;head>
&lt;meta http-equiv="Content-Type" content="text/html; charset=GBK" />
&lt;title>Insert title here&lt;/title>
&lt;script src="&lt;%=request.getContextPath()%>/scripts/prototype.js" type="text/javascript">&lt;/script>
&lt;script type="text/javascript">
	function deleteRow(obj){
		//发送ajax请求删除制定id的数据
		//根据返回标志确定是否要删除对应的行
		alert($(obj).rowIndex);
		$('mytable').deleteRow(0);
	}
&lt;/script>

&lt;/head>
&lt;body>
	&lt;table id="mytable" border="1">
	&lt;tbody>
		&lt;tr id="tr1">
			&lt;td>dddd&lt;/td>
			&lt;td>eeee&lt;/td>
			&lt;td width="200">&lt;a href="javascript:deleteRow('tr1');" >删除&lt;/a>&lt;/td>
		&lt;/tr>
		&lt;tr id="tr2">
			&lt;td>dddd&lt;/td>
			&lt;td>eeee&lt;/td>
			&lt;td width="200">&lt;a href="javascript:deleteRow('tr2');" >删除&lt;/a>&lt;/td>
		&lt;/tr>
		&lt;tr id="tr3">
			&lt;td>dddd&lt;/td>
			&lt;td>eeee&lt;/td>
			&lt;td width="200">&lt;a href="javascript:deleteRow('tr3');" >删除&lt;/a>&lt;/td>
		&lt;/tr>
	&lt;/tbody>	
	&lt;/table>
&lt;/body>
&lt;/html></pre>
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/160870#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 31 Jan 2008 23:01:19 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/160870</link>
        <guid>http://xuliangyong.javaeye.com/blog/160870</guid>
      </item>
      <item>
        <title>pageEncoding的作用</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/159367" style="color:red;">http://xuliangyong.javaeye.com/blog/159367</a>&nbsp;
          发表时间: 2008年01月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在jsp中有这么一个属性 pageEncoding<br />干啥用的呢 ？我们都知道jsp在执行的时候 首先翻译 成servlet类 如 index_jsp.java <br />pageEncoding就是在这个翻译中用的。web容器在翻译的时候不知道jsp文件的编码，我们就是通过<br /><pre name="code" class="java">&lt;%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%></pre> <br />来指定  这里要注意一点：你的jsp文件的实际编码一定要跟pageEncoding指定的一致 否则web 容器，将无法读取你的jsp文件<br /><br />还有一个contentType="text/html;charset=UTF-8" 这儿的charset编码 又是作甚的呢？<br />用于response输出数据的编码，这儿如果写charset=‘GBK’ 那么许多国外的用户可能会显示乱码 因为他们的机器上可能不支持GBK编码<br /><br />浏览器接受到数据后都会统一转换成unicode 然后显示<br />这是我的理解
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/159367#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/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, 25 Jan 2008 16:34:14 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/159367</link>
        <guid>http://xuliangyong.javaeye.com/blog/159367</guid>
      </item>
      <item>
        <title>【超经典】转：随便说说字符集和编码 </title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/159352" style="color:red;">http://xuliangyong.javaeye.com/blog/159352</a>&nbsp;
          发表时间: 2008年01月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          读完之后对字符编码有了一个历史的认识 ， 更让我明白了原来utf8是一种传输格式<br />咳 还号称做了几年的程序呢 汗啊 <br /><br />随便说说字符集和编码<br /><br />快下班时，爱问问题的小朋友Nico又问了一个问题：<br />"sqlserver里面有char和nchar，那个n据说是指unicode的数据，这个是什么意思。"<br />并不是所有简单的问题都很容易回答，就像这个问题一样。于是我答应专门写一篇BLOG来从头讲讲编码的故事。那么就让我们找个草堆坐下，先抽口烟，看看夜晚天空上的银河，然后想一想要从哪里开始讲起。嗯，也许这样开始比较好……<br /><br /><br />很久很久以前，有一群人，他们决定用8个可以开合的晶体管来组合成不同的状态，以表示世界上的万物。他们看到8个开关状态是好的，于是他们把这称为"字节"。<br />再后来，他们又做了一些可以处理这些字节的机器，机器开动了，可以用字节来组合出很多状态，状态开始变来变去。他们看到这样是好的，于是它们就这机器称为"计算机"。<br /><br />开始计算机只在美国用。八位的字节一共可以组合出256(2的8次方)种不同的状态。<br />他们把其中的编号从0开始的32种状态分别规定了特殊的用途，一但终端、打印机遇上约定好的这些字节被传过来时，就要做一些约定的动作。遇上00x10, 终端就换行，遇上0x07, 终端就向人们嘟嘟叫，例好遇上0x1b, 打印机就打印反白的字，或者终端就用彩色显示字母。他们看到这样很好，于是就把这些0x20以下的字节状态称为"控制码"。<br />他们又把所有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示，一直编到了第127号，这样计算机就可以用不同字节来存储英语的文字了。大家看到这样，都感觉很好，于是大家都把这个方案叫做 ANSI 的"Ascii"编码（American Standard Code for Information Interchange，美国信息互换标准代码）。当时世界上所有的计算机都用同样的ASCII方案来保存英文文字。<br />后来，就像建造巴比伦塔一样，世界各地的都开始使用计算机，但是很多国家用的不是英文，他们的字母里有许多是ASCII里没有的，为了可以在计算机保存他们的文字，他们决定采用127号之后的空位来表示这些新的字母、符号，还加入了很多画表格时需要用下到的横线、竖线、交叉等形状，一直把序号编到了最后一个状态255。从128到255这一页的字符集被称"扩展字符集"。从此之后，贪婪的人类再没有新的状态可以用了，美帝国主义可能没有想到还有第三世界国家的人们也希望可以用到计算机吧！<br />等中国人们得到计算机时，已经没有可以利用的字节状态来表示汉字，况且有6000多个常用汉字需要保存呢。但是这难不倒智慧的中国人民，我们不客气地把那些127号之后的奇异符号们直接取消掉, 规定：一个小于127的字符的意义与原来相同，但两个大于127的字符连在一起时，就表示一个汉字，前面的一个字节（他称之为高字节）从0xA1用到 0xF7，后面一个字节（低字节）从0xA1到0xFE，这样我们就可以组合出大约7000多个简体汉字了。在这些编码里，我们还把数学符号、罗马希腊的字母、日文的假名们都编进去了，连在 ASCII 里本来就有的数字、标点、字母都统统重新编了两个字节长的编码，这就是常说的"全角"字符，而原来在127号以下的那些就叫"半角"字符了。<br />中国人民看到这样很不错，于是就把这种汉字方案叫做 "GB2312"。GB2312 是对 ASCII 的中文扩展。<br />但是中国的汉字太多了，我们很快就就发现有许多人的人名没有办法在这里打出来，特别是某些很会麻烦别人的国家领导人。于是我们不得不继续把 GB2312 没有用到的码位找出来老实不客气地用上。<br />后来还是不够用，于是干脆不再要求低字节一定是127号之后的内码，只要第一个字节是大于127就固定表示这是一个汉字的开始，不管后面跟的是不是扩展字符集里的内容。结果扩展之后的编码方案被称为 GBK 标准，GBK 包括了 GB2312 的所有内容，同时又增加了近20000个新的汉字（包括繁体字）和符号。<br />后来少数民族也要用电脑了，于是我们再扩展，又加了几千个新的少数民族的字，GBK 扩成了 GB18030。从此之后，中华民族的文化就可以在计算机时代中传承了。<br />中国的程序员们看到这一系列汉字编码的标准是好的，于是通称他们叫做 "DBCS"（Double Byte Charecter Set 双字节字符集）。在DBCS系列标准里，最大的特点是两字节长的汉字字符和一字节长的英文字符并存于同一套编码方案里，因此他们写的程序为了支持中文处理，必须要注意字串里的每一个字节的值，如果这个值是大于127的，那么就认为一个双字节字符集里的字符出现了。那时候凡是受过加持，会编程的计算机僧侣们都要每天念下面这个咒语数百遍：<br />"一个汉字算两个英文字符！一个汉字算两个英文字符……"<br /><br />因为当时各个国家都像中国这样搞出一套自己的编码标准，结果互相之间谁也不懂谁的编码，谁也不支持别人的编码，连大陆和台湾这样只相隔了150海里，使用着同一种语言的兄弟地区，也分别采用了不同的 DBCS 编码方案——当时的中国人想让电脑显示汉字，就必须装上一个"汉字系统"，专门用来处理汉字的显示、输入的问题，但是那个台湾的愚昧封建人士写的算命程序就必须加装另一套支持 BIG5 编码的什么"倚天汉字系统"才可以用，装错了字符系统，显示就会乱了套！这怎么办？而且世界民族之林中还有那些一时用不上电脑的穷苦人民，他们的文字又怎么办？<br />真是计算机的巴比伦塔命题啊！<br />正在这时，大天使加百列及时出现了——一个叫 ISO （国际标谁化组织）的国际组织决定着手解决这个问题。他们采用的方法很简单：废了所有的地区性编码方案，重新搞一个包括了地球上所有文化、所有字母和符号的编码！他们打算叫它"Universal Multiple-Octet Coded Character Set"，简称 UCS, 俗称 "UNICODE"。<br />UNICODE 开始制订时，计算机的存储器容量极大地发展了，空间再也不成为问题了。于是 ISO 就直接规定必须用两个字节，也就是16位来统一表示所有的字符，对于ascii里的那些“半角”字符，UNICODE 包持其原编码不变，只是将其长度由原来的8位扩展为16位，而其他文化和语言的字符则全部重新统一编码。由于"半角"英文符号只需要用到低8位，所以其高 8位永远是0，因此这种大气的方案在保存英文文本时会多浪费一倍的空间。<br />这时候，从旧社会里走过来的程序员开始发现一个奇怪的现象：他们的strlen函数靠不住了，一个汉字不再是相当于两个字符了，而是一个！是的，从 UNICODE 开始，无论是半角的英文字母，还是全角的汉字，它们都是统一的"一个字符"！同时，也都是统一的"两个字节"，请注意"字符"和"字节"两个术语的不同， “字节”是一个8位的物理存贮单元，而“字符”则是一个文化相关的符号。在UNICODE 中，一个字符就是两个字节。一个汉字算两个英文字符的时代已经快过去了。<br />从前多种字符集存在时，那些做多语言软件的公司遇上过很大麻烦，他们为了在不同的国家销售同一套软件，就不得不在区域化软件时也加持那个双字节字符集咒语，不仅要处处小心不要搞错，还要把软件中的文字在不同的字符集中转来转去。UNICODE 对于他们来说是一个很好的一揽子解决方案，于是从 Windows NT 开始，MS 趁机把它们的操作系统改了一遍，把所有的核心代码都改成了用 UNICODE 方式工作的版本，从这时开始，WINDOWS 系统终于无需要加装各种本土语言系统，就可以显示全世界上所有文化的字符了。<br />但是，UNICODE 在制订时没有考虑与任何一种现有的编码方案保持兼容，这使得 GBK 与UNICODE 在汉字的内码编排上完全是不一样的，没有一种简单的算术方法可以把文本内容从UNICODE编码和另一种编码进行转换，这种转换必须通过查表来进行。<br />如前所述，UNICODE 是用两个字节来表示为一个字符，他总共可以组合出65535不同的字符，这大概已经可以覆盖世界上所有文化的符号。如果还不够也没有关系，ISO已经准备了UCS-4方案，说简单了就是四个字节来表示一个字符，这样我们就可以组合出21亿个不同的字符出来（最高位有其他用途），这大概可以用到银河联邦成立那一天吧！<br /><br />UNICODE 来到时，一起到来的还有计算机网络的兴起，UNICODE 如何在网络上传输也是一个必须考虑的问题，于是面向传输的众多 UTF（UCS Transfer Format）标准出现了，顾名思义，UTF8就是每次8个位传输数据，而UTF16就是每次16个位，只不过为了传输时的可靠性，从UNICODE到 UTF时并不是直接的对应，而是要过一些算法和规则来转换。<br />受到过网络编程加持的计算机僧侣们都知道，在网络里传递信息时有一个很重要的问题，就是对于数据高低位的解读方式，一些计算机是采用低位先发送的方法，例如我们PC机采用的 INTEL 架构，而另一些是采用高位先发送的方式，在网络中交换数据时，为了核对双方对于高低位的认识是否是一致的，采用了一种很简便的方法，就是在文本流的开始时向对方发送一个标志符——如果之后的文本是高位在位，那就发送"FEFF"，反之，则发送"FFFE"。不信你可以用二进制方式打开一个UTF-X格式的文件，看看开头两个字节是不是这两个字节？<br /><br />讲到这里，我们再顺便说说一个很著名的奇怪现象：当你在 windows 的记事本里新建一个文件，输入"联通"两个字之后，保存，关闭，然后再次打开，你会发现这两个字已经消失了，代之的是几个乱码！呵呵，有人说这就是联通之所以拼不过移动的原因。<br />其实这是因为GB2312编码与UTF8编码产生了编码冲撞的原因。<br />从网上引来一段从UNICODE到UTF8的转换规则：<br /><br /><br /><br />Unicode<br />UTF-8<br /><br />0000 - 007F<br />0xxxxxxx<br /><br />0080 - 07FF<br />110xxxxx 10xxxxxx<br /><br />0800 - FFFF<br />1110xxxx 10xxxxxx 10xxxxxx<br /><br /><br /><br /><br />例如"汉"字的Unicode编码是6C49。6C49在0800-FFFF之间，所以要用3字节模板：1110xxxx 10xxxxxx 10xxxxxx。将6C49写成二进制是：0110 1100 0100 1001，将这个比特流按三字节模板的分段方法分为0110 110001 001001，依次代替模板中的x，得到：1110-0110 10-110001 10-001001，即E6 B1 89，这就是其UTF8的编码。<br />而当你新建一个文本文件时，记事本的编码默认是ANSI, 如果你在ANSI的编码输入汉字，那么他实际就是GB系列的编码方式，在这种编码下，"联通"的内码是：<br />c1 1100 0001<br />aa 1010 1010<br />cd 1100 1101<br />a8 1010 1000<br />注意到了吗？第一二个字节、第三四个字节的起始部分的都是"110"和"10"，正好与UTF8规则里的两字节模板是一致的，于是再次打开记事本时，记事本就误认为这是一个UTF8编码的文件，让我们把第一个字节的110和第二个字节的10去掉，我们就得到了"00001 101010"，再把各位对齐，补上前导的0，就得到了"0000 0000 0110 1010"，不好意思，这是UNICODE的006A，也就是小写的字母"j"，而之后的两字节用UTF8解码之后是0368，这个字符什么也不是。这就是只有"联通"两个字的文件没有办法在记事本里正常显示的原因。<br />而如果你在"联通"之后多输入几个字，其他的字的编码不见得又恰好是110和10开始的字节，这样再次打开时，记事本就不会坚持这是一个utf8编码的文件，而会用ANSI的方式解读之，这时乱码又不出现了。<br /><br />好了，终于可以回答NICO的问题了，在数据库里，有n前缀的字串类型就是UNICODE类型，这种类型中，固定用两个字节来表示一个字符，无论这个字符是汉字还是英文字母，或是别的什么。<br />如果你要测试"abc汉字"这个串的长度，在没有n前缀的数据类型里，这个字串是7个字符的长度，因为一个汉字相当于两个字符。而在有n前缀的数据类型里，同样的测试串长度的函数将会告诉你是5个字符，因为一个汉字就是一个字符。
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/159352#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jan 2008 15:51:18 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/159352</link>
        <guid>http://xuliangyong.javaeye.com/blog/159352</guid>
      </item>
      <item>
        <title>webwork ww:iterator 标签嵌套问题</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/156886" style="color:red;">http://xuliangyong.javaeye.com/blog/156886</a>&nbsp;
          发表时间: 2008年01月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          看到网上很多关于ww:iterator嵌套的文章 但都是转来转去 试了一些也没有解决问题<br />最后还是自己研究啦<br />先列出正确代码<br /><pre name="code" class="java">&lt;ww:iterator value="yesePrograms" status="outer">
						&lt;li>
							&lt;ww:iterator value="programsOfRole" status="rowstatus">
								&lt;ww:if test="id == [1].id">
									&lt;input type="checkbox" id="pid" name="pid" checked="checked" value="&lt;ww:property value="id"/>" />
								&lt;/ww:if>
							&lt;/ww:iterator>
							&lt;input type="checkbox" id="pid" name="pid" value="&lt;ww:property value="id"/>" />
							&lt;ww:property value="title"/>
						&lt;/li>
					&lt;/ww:iterator></pre><br />关键代码为<br /><pre name="code" class="java">&lt;ww:if test="id == [1].id"></pre><br />在值栈中 [0]表示栈顶元素，如果不写则默认为栈顶； [1]为第二个元素 依次类推<br />外层跟内层都有一个id属性 <br />第一个id表示内层循环的id<br />[1].id表示外层循环的id
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/156886#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/97' target='_blank'><span style="color:blue;font-weight:bold;">Oracle专区上线，有Oracle最新文章，重要下载及知识库等精彩内容，欢迎访问。</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 17 Jan 2008 14:07:23 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/156886</link>
        <guid>http://xuliangyong.javaeye.com/blog/156886</guid>
      </item>
      <item>
        <title>终于完成hibernate对多对删除中间表了</title>
        <author>xly_971223</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xuliangyong.javaeye.com">xly_971223</a>&nbsp;
          链接：<a href="http://xuliangyong.javaeye.com/blog/156854" style="color:red;">http://xuliangyong.javaeye.com/blog/156854</a>&nbsp;
          发表时间: 2008年01月17日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          先把代码贴上来<br /><pre name="code" class="java">public void grantPrograms(Long roleId, Long[] programIds){
		Role role = get(roleId);
		Set&lt;Program> programs = role.getPrograms();
		//第一趟遍历， 删除未被选中的节目
		for(Iterator&lt;Program> it = programs.iterator(); it.hasNext(); ){
			Program program = it.next();
			if( !ArrayUtils.contains(programIds, program.getId()) ){
				program.getRoles().remove(role); 
				it.remove(); //开始用programs.remove(program);抛java.util.ConcurrentModificationException
			}
		}
		
		//第二趟遍历 插入新选中的节目
		for(Long selectProgramId : programIds){
			if(isNewSelected(programs, selectProgramId)){
				Program p = get(Program.class, selectProgramId);
				p.getRoles().add(role); //添加角色到节目的关联
				programs.add(p);
			}
		}
		
		save(role);
	}
private boolean isNewSelected(Set&lt;Program> programs, Long selecteId){
		for(Program program : programs)
				if(program.getId() == selecteId)return false;
		return true;
	}

</pre><br />可分为三步走 <br />1.删除中间表中的关联，如果包含在被选中集合中 则忽略<br />2.插入新选择的关系到中间表 如果已经存在 则忽略<br />3.保存<br />ps：上面的代码只是对中间表数据产生影响 不会更新两边表的数据
          <br/>
          <span style="color:red;">
            <a href="http://xuliangyong.javaeye.com/blog/156854#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/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></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 17 Jan 2008 11:49:08 +0800</pubDate>
        <link>http://xuliangyong.javaeye.com/blog/156854</link>
        <guid>http://xuliangyong.javaeye.com/blog/156854</guid>
      </item>
  </channel>
</rss>