﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Terry.Li-彬</title><link>http://www.blogjava.net/libin2722/</link><description>虚其心，可解天下之问；专其心，可治天下之学；静其心，可悟天下之理；恒其心，可成天下之业。</description><language>zh-cn</language><lastBuildDate>Sat, 11 Apr 2026 20:58:45 GMT</lastBuildDate><pubDate>Sat, 11 Apr 2026 20:58:45 GMT</pubDate><ttl>60</ttl><item><title>身份证JS校验</title><link>http://www.blogjava.net/libin2722/archive/2017/04/14/432452.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 14 Apr 2017 02:37:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2017/04/14/432452.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/432452.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2017/04/14/432452.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/432452.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/432452.html</trackback:ping><description><![CDATA[idcard: function (value, option) {
        ///<summary>身份证号校验</summary>
        ///<params name="option" type="object">校验参数配置项
        if (!value) return false; 

        if (value.length == 0) {
            return "身份证号不可以为空！";
        }
        if (value.length != 18) {
            return "18位身份证号长度错误！";
        }
       
        value = value.toUpperCase();
        var city = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江 ", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北 ", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏 ", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外 " };
        if (!value || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[012]\d|3[01])\d{3}(\d|X)$/i.test(value)) {
            return "身份证号码格式错误，请重新输入！";
        }

        else if (!city[value.substr(0, 2)]) {
        	  return "无效的地区编码，请重新输入！";
        }
        else {
            //18位身份证需要验证最后一位校验位
            value = value.split('');
            //∑(ai×Wi)(mod 11)
            //加权因子
            var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
            //校验位
            var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
            var sum = 0;
            var ai = 0;
            var wi = 0;
            for (var i = 0; i &lt; 17; i++) {
                ai = value[i];
                wi = factor[i];
                sum += ai * wi;
            }
            var last = parity[sum % 11];
            if (parity[sum % 11] != value[17]) {
            	  return "无效的身份证号，请重新输入！！";
            }
        }
        return;
    }, </params><img src ="http://www.blogjava.net/libin2722/aggbug/432452.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2017-04-14 10:37 <a href="http://www.blogjava.net/libin2722/archive/2017/04/14/432452.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL导入.sql文件及常用命令</title><link>http://www.blogjava.net/libin2722/articles/427346.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 16 Sep 2015 00:49:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/427346.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/427346.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/427346.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/427346.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/427346.html</trackback:ping><description><![CDATA[
		<p style="margin: 0px; padding: 0px; color: rgb(0, 0, 0); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-indent: 2em; background-color: rgb(255, 255, 255);">
				<strong>
						<em>
								<span style="font-size: large;">
										<span style="color: rgb(255, 0, 0);">MySQL导入.sql文件及常用命令</span>
								</span>
						</em>
				</strong>
		</p>
		<table style="color: rgb(0, 0, 0); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" border="0">
				<tbody>
						<tr>
								<td>
										<p style="margin: 0px; padding: 0px;">
												<span style="color: rgb(0, 0, 0);">
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">在MySQL Qurey   Brower中直接导入*.sql脚本，是不能一次执行多条sql命令的，在mysql中执行sql文件的命令：</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">mysql&gt; source   d:/myprogram/database/db.sql;</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">另附mysql常用命令：</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">一) 连接MYSQL：</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    格式： mysql -h主机地址 -u用户名 －p用户密码</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">1、例1：连接到本机上的MYSQL</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    首先在打开DOS窗口，然后进入mysql安装目录下的bin目录下，例如： D:/mysql/bin，再键入命令mysql -uroot -p，回车后提示你输密码，如果刚安装好MYSQL，超级用户root是没有密码的，故直接回车即可进入到MYSQL中了，MYSQL的提示符是：mysql&gt;</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">2、例2：连接到远程主机上的MYSQL (远程：IP地址)</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    假设远程主机的IP为：10.0.0.1，用户名为root,密码为123。则键入以下命令：</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">   mysql -h10.0.0.1 -uroot -p123</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">   （注：u与root可以不用加空格，其它也一样）</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">3、退出MYSQL命令</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    exit （回车）</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">(二) 修改密码：</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    格式：mysqladmin -u用户名 -p旧密码 password 新密码</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">1、例1：给root加个密码123。首先在DOS下进入目录C:/mysql/bin，然后键入以下命令：</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    mysqladmin -uroot -password 123</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    注：因为开始时root没有密码，所以-p旧密码一项就可以省略了。</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">2、例2：再将root的密码改为456</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    mysqladmin -uroot -pab12 password 456</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">(三) 增加新用户：（注意：和上面不同，下面的因为是MYSQL环境中的命令，所以后面都带一个分号作为命令结束符）</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    格式：grant select on 数据库.* to 用户名@登录主机 identified by "密码"</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    例1、增加一个用户test1密码为abc，让他可以在任何主机上登录，并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL，然后键入以下命令：     grant select,insert,update,delete on *.* to<span class="Apple-converted-space"> </span></span>
												</span>
												<a href="mailto:test2@localhost" style="color: rgb(202, 0, 0); text-decoration: none;">
														<span style="color: rgb(0, 0, 0);">
																<span style="background-color: rgb(255, 255, 255);">test2@localhost</span>
														</span>
												</a>
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">
																<span class="Apple-converted-space"> </span>identified by "abc";</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    如果你不想test2有密码，可以再打一个命令将密码消掉。     grant select,insert,update,delete on mydb.* to<span class="Apple-converted-space"> </span></span>
												</span>
												<a href="mailto:test2@localhost" style="color: rgb(202, 0, 0); text-decoration: none;">
														<span style="color: rgb(0, 0, 0);">
																<span style="background-color: rgb(255, 255, 255);">test2@localhost</span>
														</span>
												</a>
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">
																<span class="Apple-converted-space"> </span>identified by "";</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">(四) 显示命令</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">1、显示数据库列表：</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    show databases;     刚开始时才两个数据库：mysql和test。mysql库很重要它里面有MYSQL的系统信息，我们改密码和新增用户，实际上就是用这个库进行操作。</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">2、显示库中的数据表：</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    use mysql； //打开库    show tables;</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">3、显示数据表的结构：</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    describe 表名;</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">4、建库：</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    create database 库名;</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">5、建表：</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    use 库名；     create table 表名 (字段设定列表)；</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">6、删库和删表:</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    drop database 库名;     drop table 表名；</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">7、将表中记录清空：</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    delete from 表名;</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">8、显示表中的记录：</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">    select * from 表名;</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">导出sql脚本</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 255);">
														<span style="color: rgb(0, 0, 0);">
														</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">mysqldump -u 用户名 -p 数据库名 &gt; 存放位置</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">mysqldump -u root -p test &gt; c:/a.sql</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 255);">
														<span style="color: rgb(0, 0, 0);">
														</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">导入sql脚本</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 255);">
														<span style="color: rgb(0, 0, 0);">
														</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">mysql -u 用户名 -p 数据库名 &lt; 存放位置</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">mysqljump -u root -p test &lt; c:/a.sql</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 255);">
														<span style="color: rgb(0, 0, 0);">
														</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">注意,test数据库必须已经存在</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">MySQL导出导入命令的用例</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">1.导出整个数据库</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 255);">
														<span style="color: rgb(0, 0, 0);">
														</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">mysqldump -u 用户名 -p 数据库名 &gt; 导出的文件名</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">mysqldump -u wcnc -p smgp_apps_wcnc &gt; wcnc.sql</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 255);">
														<span style="color: rgb(0, 0, 0);">
														</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">2.导出一个表</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 255);">
														<span style="color: rgb(0, 0, 0);">
														</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">mysqldump -u 用户名 -p 数据库名表名&gt; 导出的文件名</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">mysqldump -u wcnc -p smgp_apps_wcnc users&gt; wcnc_users.sql</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 255);">
														<span style="color: rgb(0, 0, 0);">
														</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">3.导出一个数据库结构</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 255);">
														<span style="color: rgb(0, 0, 0);">
														</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">mysqldump -u wcnc -p -d --add-drop-table smgp_apps_wcnc &gt;d:wcnc_db.sql</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">-d 没有数据 --add-drop-table 在每个create语句之前增加一个drop table</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 255);">
														<span style="color: rgb(0, 0, 0);">
														</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">4.导入数据库</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 255);">
														<span style="color: rgb(0, 0, 0);">
														</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">常用source 命令</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">进入mysql数据库控制台,</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">如mysql -u root -p</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">mysql&gt;use 数据库</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">然后使用source命令,后面参数为脚本文件(如这里用到的.sql)</span>
												</span>
										</p>
										<p style="margin: 0px; padding: 0px; text-indent: 2em;">
												<span style="color: rgb(0, 0, 0);">
														<span style="background-color: rgb(255, 255, 255);">mysql&gt;source d:wcnc_db.sql</span>
												</span>
										</p>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/libin2722/aggbug/427346.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2015-09-16 08:49 <a href="http://www.blogjava.net/libin2722/articles/427346.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ERROR 2006 (HY000) at line xx: MySQL server has gone away 解决方法  </title><link>http://www.blogjava.net/libin2722/articles/427345.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 16 Sep 2015 00:48:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/427345.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/427345.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/427345.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/427345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/427345.html</trackback:ping><description><![CDATA[
		<p>1.执行批量的MYSQL语句，例如备份恢复的时候，时间过长。 
<br />对应：修改my.cnf中的wait_timeout和interactive_timeout变量 
<br />在一些不便修改的情形下，如租用的空间，可以采取sql语句修改，如何做呢？ <br /><br />解决办法</p>
		<p>找到my.ini文件</p>
		<p>添加一句max_allowed_packet=16M，如果不行将16M再加大</p>
		<p>加大wait_timeout也可起一定作用</p>
		<p>eg:</p>
		<p>wait_timeout=2880000<br />interactive_timeout <wbr>= <wbr>2880000<br />max_allowed_packet <wbr>= <wbr>100M</wbr></wbr></wbr></wbr></p>
		<p>
				<strong>应用时记住重启数据库哦～～</strong>
		</p>
		<div class="bct fc05 fc11 nbw-blog ztag" __1442363812727__="ev_3764059504">
				<wbr>除此之外，可能还有一些别的buffer_size的变量会影响到，也值得注意 
<br />例如 <br />read_buffer_size <br />read_rnd_buffer_size</wbr>
		</div>
<img src ="http://www.blogjava.net/libin2722/aggbug/427345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2015-09-16 08:48 <a href="http://www.blogjava.net/libin2722/articles/427345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax Session Timeout 超时 处理</title><link>http://www.blogjava.net/libin2722/articles/407255.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 05 Dec 2013 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/407255.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/407255.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/407255.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/407255.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/407255.html</trackback:ping><description><![CDATA[/**<br /> * Author : Larry Li<br /> * Date : 2013-12-5<br /> * Email : larry.li@aicent.com<br /> */<br />var Session = function() {<br />    var defaults = {<br />            title        : 'Session Notification',<br />            message      : 'Your session is about to expire.',<br />            keepAliveUrl : '/admin/session/keep-alive',<br />            redirUrl     : '/account/timed-out',<br />            logoutUrl    : '/account/logout',<br />            warnAfter    : 900000, // 15 minutes<br />            redirAfter   : 1200000 // 20 minutes<br />    };<br />    <br />    var o = defaults, dialogTimer, redirTimer;<br />    <br />    var controlRedirTimer = function(action) {<br />        switch(action) {<br />            case 'start':<br />                // Dialog has been shown, if no action taken during redir period, redirect<br />                redirTimer = setTimeout(function(){<br />                    window.location = o.redirUrl;<br />                }, o.redirAfter - o.warnAfter);<br />                break;<br />    <br />            case 'stop':<br />                clearTimeout(redirTimer);<br />                break;<br />            case 'restart':<br />                clearTimeout(redirTimer);<br />                redirTimer = setTimeout(function(){<br />                    window.location = o.redirUrl;<br />                }, o.redirAfter - o.warnAfter);<br />                break;<br />        }<br />    };<br />    <br />    var controlDialogTimer = function(action) {<br />        switch(action) {<br />            case 'start':<br />                dialogTimer = setTimeout(function(){<br />                    $('#sessionTimeout-dialog').modal('show');<br />                    controlRedirTimer('start');<br />                }, o.warnAfter);<br />                break;<br />            case 'stop':<br />                clearTimeout(dialogTimer);<br />                break;<br />            case 'restart':<br />                clearTimeout(dialogTimer);<br />                dialogTimer = setTimeout(function(){<br />                    $('#sessionTimeout-dialog').modal('show');<br />                    controlRedirTimer('restart');<br />                }, o.warnAfter);<br />                break;<br />        }<br />    };<br />    <br />    var doKeepAlive = function() {<br />        $.ajax({<br />            type: 'POST',<br />            url: o.keepAliveUrl,<br />            success: function() {<br />                // Stop redirect timer and restart warning timer<br />                controlRedirTimer('restart');<br />                controlDialogTimer('restart');<br />            }<br />        });<br />    };<br />    <br />    return {<br />        sessionTimeout: function(options) {<br />            if ( options ) { o = $.extend( defaults, options ); }<br />            <br />            var warning_dialog = '&lt;div class="modal fade" id="sessionTimeout-dialog"&gt;'<br />                                +'    &lt;div class="modal-dialog modal-small"&gt;'<br />                                +'        &lt;div class="modal-content"&gt;'<br />                                +'            &lt;div class="modal-header"&gt;'<br />                                +'                &lt;button id="_close" type="button" class="close" data-dismiss="modal" aria-hidden="true"&gt;&amp;times;&lt;/button&gt;'<br />                                +'                &lt;h4 class="modal-title"&gt;'+ o.title +'&lt;/h4&gt;'<br />                                +'            &lt;/div&gt;'<br />                                +'            &lt;div class="modal-body"&gt;'+ o.message +'&lt;/div&gt;'<br />                                +'            &lt;div class="modal-footer"&gt;'<br />                                +'                &lt;button id="sessionTimeout-dialog-logout" type="button" class="btn btn-default"&gt;Logout&lt;/button&gt;'<br />                                +'                &lt;button id="sessionTimeout-dialog-keepalive" type="button" class="btn btn-primary" data-dismiss="modal"&gt;Stay Connected&lt;/button&gt;'<br />                                +'            &lt;/div&gt;'<br />                                +'        &lt;/div&gt;'<br />                                +'    &lt;/div&gt;'<br />                                +'&lt;/div&gt;';<br />            <br />            $('body').append(warning_dialog);<br />            <br />            $('#sessionTimeout-dialog-logout').on('click', function () { window.location = o.logoutUrl; });<br />            <br />            $('#_close,#sessionTimeout-dialog-keepalive').click(function() {<br />                doKeepAlive();<br />            });<br />            // Begin warning period<br />            controlDialogTimer('start');<br />        },<br />        <br />        sessionTimeoutKeepAlive: function() {<br />            controlRedirTimer('restart');<br />            controlDialogTimer('restart');<br />        }<br />    };<br />}();<br /><br />$(function() {<br />    Session.sessionTimeout({<br />        title: 'Session Timeout Notification',<br />        message: 'Your session is about to expire.',<br />        keepAliveUrl: contextPath + '/admin/session/keep-alive',<br />        redirUrl: contextPath + '/account/login',<br />        logoutUrl: contextPath + '/account/logout',<br />        warnAfter: 1500000, <br />        redirAfter: 1780000<br />    });<br />    <br />    $(document).ajaxComplete(function() {<br />        Session.sessionTimeoutKeepAlive();<br />    });<br />});<img src ="http://www.blogjava.net/libin2722/aggbug/407255.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-12-05 16:11 <a href="http://www.blogjava.net/libin2722/articles/407255.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>忘掉jQuery，使用JavaScript原生API</title><link>http://www.blogjava.net/libin2722/articles/406911.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 28 Nov 2013 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/406911.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/406911.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/406911.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/406911.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/406911.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: jQuery目前已经成为最流行的JavaScript库，它可以让开发者“write less, do more（写得更少，做得更多）”，这也是它的核心理念。通过它，用户可以更方便地处理HTML documents、events，更轻松地实现动画效果、AJAX交互等。 						尽管jQuery帮助开发者节省了大量的工作，但是并不是所有的产品都适合使用jQuery。jQuery 2.0...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/406911.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/406911.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-11-28 09:31 <a href="http://www.blogjava.net/libin2722/articles/406911.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ehcache详细解读</title><link>http://www.blogjava.net/libin2722/articles/406569.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 20 Nov 2013 04:53:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/406569.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/406569.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/406569.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/406569.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/406569.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Ehcache				 是现在最流行的纯Java开源缓存框架，配置简单、结构清晰、功能强大，最初知道它，是从Hibernate的缓存开始的。网上中文的EhCache材料以简单介绍和配置方法居多，如果你有这方面的问题，请自行google；对于API，官网上介绍已经非常清楚，请参见官网；但是很少见到特性说明和对实现原理的分析，因此在这篇文章里面，我会详细介绍和分析EhCache的特性，加上一些自己...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/406569.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/406569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-11-20 12:53 <a href="http://www.blogjava.net/libin2722/articles/406569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>How can I print SQL query result log with log4j?</title><link>http://www.blogjava.net/libin2722/articles/405551.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 23 Oct 2013 06:34:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/405551.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/405551.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/405551.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/405551.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/405551.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: I'm using Spring 3.1.1, MyBatis 3.1.1, MySQL 5.0.67. My Spring configuration is below:												&lt;						bean id						=						"dataSource"						 class						=						"org.apache.tomca...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/405551.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/405551.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-10-23 14:34 <a href="http://www.blogjava.net/libin2722/articles/405551.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>repositories</title><link>http://www.blogjava.net/libin2722/articles/404849.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 10 Oct 2013 15:08:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/404849.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/404849.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/404849.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/404849.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/404849.html</trackback:ping><description><![CDATA[
		<pre style="color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; word-wrap: break-word; white-space: pre-wrap;">&lt;!-- ********************************************** --&gt;
&lt;!-- **** REPOSITORIOS DEL PROYECTO **** --&gt;
&lt;!-- ********************************************** --&gt;
&lt;repositories&gt;

&lt;!-- ****** RELEASE ****** --&gt;
&lt;repository&gt;
&lt;id&gt;atlassian&lt;/id&gt;
&lt;url&gt;http://maven.atlassian.com/repository/public&lt;/url&gt;
&lt;releases&gt; &lt;enabled&gt; true&lt;/enabled&gt; &lt;/releases&gt;
&lt;snapshots&gt; &lt;enabled&gt; false &lt;/enabled&gt; &lt;/snapshots&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;maven.org.repo2&lt;/id&gt;
&lt;name&gt;Repository of Maven.org&lt;/name&gt;
&lt;url&gt;http://search.maven.org/#search&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;search.maven.org&lt;/id&gt;
&lt;name&gt;Repository of Maven.org&lt;/name&gt;
&lt;url&gt;http://search.maven.org&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;itextpdf.com&lt;/id&gt;
&lt;name&gt;Maven Repository for iText&lt;/name&gt;
&lt;url&gt;http://maven.itextpdf.com&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;repository.jboss.com&lt;/id&gt;
&lt;name&gt;Jboss Repository for Maven&lt;/name&gt;
&lt;url&gt;http://repository.jboss.com&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;snapshots.jboss.org&lt;/id&gt;
&lt;name&gt;Jboss Snapshot Repository for Maven&lt;/name&gt;
&lt;url&gt;http://snapshots.jboss.org/maven2&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;java.net&lt;/id&gt;
&lt;name&gt;Repository of Java.net&lt;/name&gt;
&lt;url&gt;http://download.java.net/maven/1&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;deltaset.org&lt;/id&gt;
&lt;name&gt;Repository of Deltaset&lt;/name&gt;
&lt;url&gt;http://deltaset.googlecode.com/svn/maven2&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;prime.com&lt;/id&gt;
&lt;name&gt;Repository of PrimeFaces&lt;/name&gt;
&lt;url&gt;http://repository.prime.com.tr/org&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;com.springsource.repository.maven.milestone&lt;/id&gt;
&lt;name&gt;Spring Framework Maven Milestone Releases (Maven Central Format)&lt;/name&gt;
&lt;url&gt;http://maven.springframework.org/milestone&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;maven-repository2.dev.java.net&lt;/id&gt;
&lt;name&gt;Java.net Repository for Maven 2&lt;/name&gt;
&lt;url&gt;http://download.java.net/maven/2&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;mvnrepository.com&lt;/id&gt;
&lt;name&gt;mvnrepository.com&lt;/name&gt;
&lt;url&gt;http://mvnrepository.com&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;www.mvnbrowser.com&lt;/id&gt;
&lt;name&gt;www.mvnbrowser.com&lt;/name&gt;
&lt;url&gt;http://www.mvnbrowser.com&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;objectweb&lt;/id&gt;
&lt;name&gt;Objectweb repository&lt;/name&gt;
&lt;url&gt;http://maven.objectweb.org/maven2&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;ops4j.repository&lt;/id&gt;
&lt;name&gt;OPS4J Repository&lt;/name&gt;
&lt;url&gt;http://repository.ops4j.org/maven2&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;Codehaus Snapshots&lt;/id&gt;
&lt;url&gt;http://snapshots.repository.codehaus.org/&lt;/url&gt;
&lt;/repository&gt;


&lt;!-- **** SNAPSHOTS **** --&gt;
&lt;repository&gt;
&lt;id&gt;apache-maven-snapshots&lt;/id&gt;
&lt;name&gt;Repository of Snapshots&lt;/name&gt;
&lt;url&gt;http://repository.apache.org/snapshots&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt;
&lt;id&gt;apache.snapshots&lt;/id&gt;
&lt;name&gt;ASF Maven 2 Snapshot&lt;/name&gt;
&lt;url&gt;http://people.apache.org/builds/struts/2.1.8.1/m2-staging-repository&lt;/url&gt;
&lt;/repository&gt;

&lt;repository&gt; &lt;id&gt;com.springsource.repository.maven.snapshot&lt;/id&gt;
&lt;name&gt;SpringSource Enterprise Bundle Maven Repository - SpringSource Snapshot Releases&lt;/name&gt; &lt;url&gt;http://maven.springframework.org/snapshot&lt;/url&gt;
&lt;/repository&gt;

&lt;/repositories&gt;</pre>
<img src ="http://www.blogjava.net/libin2722/aggbug/404849.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-10-10 23:08 <a href="http://www.blogjava.net/libin2722/articles/404849.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ehcache 配置参数说明</title><link>http://www.blogjava.net/libin2722/articles/404115.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Mon, 16 Sep 2013 02:43:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/404115.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/404115.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/404115.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/404115.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/404115.html</trackback:ping><description><![CDATA[
		<div class="content" style="color: rgb(0, 0, 0); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 25.1875px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); overflow: auto;">
				<span>
						<strong style="font-weight: bold;">
								<span style="color: rgb(0, 102, 153);">
										<span class="tag">&lt;</span>
										<span class="Apple-converted-space"> </span>
										<span class="tag-name">ehcache</span>
										<span class="Apple-converted-space"> </span>
								</span>
						</strong>
						<span> </span>
						<span class="Apple-converted-space"> </span>
						<span class="attribute">
								<span style="color: rgb(255, 0, 0);">xmlns:xsi</span>
								<span class="Apple-converted-space"> </span>
						</span>
						<span>=</span>
						<span class="Apple-converted-space"> </span>
						<span class="attribute-value">
								<span style="color: rgb(0, 0, 255);">"http://www.w3.org/2001/XMLSchema-instance"</span>
								<span class="Apple-converted-space"> </span>
						</span>
						<span>  </span>
						<span class="Apple-converted-space"> </span>  </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">xsi:noNamespaceSchemaLocation</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"ehcache.xsd"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span class="tag">
						<strong style="font-weight: bold;">
								<span style="color: rgb(0, 102, 153);">&gt;</span>
								<span class="Apple-converted-space"> </span>
						</strong>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<strong style="font-weight: bold;">
						<span style="color: rgb(0, 102, 153);">
								<span class="tag">&lt;</span>
								<span class="Apple-converted-space"> </span>
								<span class="tag-name">diskStore</span>
								<span class="Apple-converted-space"> </span>
						</span>
				</strong>
				<span> </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">path</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"java.io.tmpdir"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span class="tag">
						<strong style="font-weight: bold;">
								<span style="color: rgb(0, 102, 153);">/&gt;</span>
								<span class="Apple-converted-space"> </span>
						</strong>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<strong style="font-weight: bold;">
						<span style="color: rgb(0, 102, 153);">
								<span class="tag">&lt;</span>
								<span class="Apple-converted-space"> </span>
								<span class="tag-name">defaultCache</span>
								<span class="Apple-converted-space"> </span>
						</span>
				</strong>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">maxElementsInMemory</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"10000"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">maxElementsOnDisk</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"0"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">eternal</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"true"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">overflowToDisk</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"true"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">diskPersistent</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"false"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">timeToIdleSeconds</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"0"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">timeToLiveSeconds</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"0"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">diskSpoolBufferSizeMB</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"50"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">diskExpiryThreadIntervalSeconds</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"120"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">memoryStoreEvictionPolicy</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"LFU"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="tag">
						<strong style="font-weight: bold;">
								<span style="color: rgb(0, 102, 153);">/&gt;</span>
								<span class="Apple-converted-space"> </span>
						</strong>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<strong style="font-weight: bold;">
						<span style="color: rgb(0, 102, 153);">
								<span class="tag">&lt;</span>
								<span class="Apple-converted-space"> </span>
								<span class="tag-name">cache</span>
								<span class="Apple-converted-space"> </span>
						</span>
				</strong>
				<span> </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">name</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"myCache"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">maxElementsInMemory</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"100"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">maxElementsOnDisk</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"0"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">eternal</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"false"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">overflowToDisk</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"false"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">diskPersistent</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"false"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">timeToIdleSeconds</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"120"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">timeToLiveSeconds</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"120"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">diskSpoolBufferSizeMB</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"50"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">diskExpiryThreadIntervalSeconds</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"120"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute">
						<span style="color: rgb(255, 0, 0);">memoryStoreEvictionPolicy</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>=</span>
				<span class="Apple-converted-space"> </span>
				<span class="attribute-value">
						<span style="color: rgb(0, 0, 255);">"FIFO"</span>
						<span class="Apple-converted-space"> </span>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<span>    </span>
				<span class="Apple-converted-space"> </span>
				<span class="tag">
						<strong style="font-weight: bold;">
								<span style="color: rgb(0, 102, 153);">/&gt;</span>
								<span class="Apple-converted-space"> </span>
						</strong>
				</span>
				<span>  </span>
				<span class="Apple-converted-space"> </span>
				<br />
				<strong style="font-weight: bold;">
						<span style="color: rgb(0, 102, 153);">
								<span class="tag">&lt;/</span>
								<span class="Apple-converted-space"> </span>
								<span class="tag-name">ehcache</span>
								<span class="Apple-converted-space"> </span>
								<span class="tag">&gt;</span>
						</span>
				</strong>
		</div>
		<div class="content" style="color: rgb(0, 0, 0); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 25.1875px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); overflow: auto;">
				<span>  <span class="Apple-converted-space"> </span></span>
				<br />
				<strong style="font-weight: bold;">diskStore</strong>
				<span class="Apple-converted-space"> </span>：指定数据存储位置，可指定磁盘中的文件夹位置<br /><strong style="font-weight: bold;">defaultCache</strong><span class="Apple-converted-space"> </span>： 默认的管理策略</div>
		<div class="content" style="color: rgb(0, 0, 0); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 25.1875px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); overflow: auto;">
				<br />
		</div>
		<div class="content" style="color: rgb(0, 0, 0); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 25.1875px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); overflow: auto;">
				<strong style="font-weight: bold;">以下属性是必须的：</strong>
		</div>
		<div class="content" style="color: rgb(0, 0, 0); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 25.1875px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); overflow: auto;">
				<ol style="font-size: 1em; line-height: 1.4em; margin: 0px 0px 1.5em; padding: 0px;">
						<li style="font-size: 1em; margin: 0px 0px 0.25em 30px; padding: 0px;">
								<span>
										<strong style="font-weight: bold;">name：</strong>
										<span class="Apple-converted-space"> </span>Cache的名称，必须是唯一的(ehcache会把这个cache放到HashMap里)。</span>
						</li>
						<li style="font-size: 1em; margin: 0px 0px 0.25em 30px; padding: 0px;">
								<span>
										<strong style="font-weight: bold;">maxElementsInMemory：</strong>
										<span class="Apple-converted-space"> </span>
								</span>在内存中缓存的element的最大数目<span>。<span class="Apple-converted-space"> </span><br /></span></li>
						<li style="font-size: 1em; margin: 0px 0px 0.25em 30px; padding: 0px;">
								<span>
										<strong style="font-weight: bold;">maxElementsOnDisk：</strong>
										<span class="Apple-converted-space"> </span>
								</span>在磁盘上缓存的element的最大数目<span>，默认值为0，表示不限制。<span class="Apple-converted-space"> </span><br /></span></li>
						<li style="font-size: 1em; margin: 0px 0px 0.25em 30px; padding: 0px;">
								<span>
										<strong style="font-weight: bold;">eternal：</strong>
										<span class="Apple-converted-space"> </span>
								</span>设定缓存的elements是否永远不过期。如果为true，则缓存的数据始终有效，如果为false那么还要根据timeToIdleSeconds，timeToLiveSeconds判断<span>。<span class="Apple-converted-space"> </span><br /></span></li>
						<li style="font-size: 1em; margin: 0px 0px 0.25em 30px; padding: 0px;">
								<span>
										<strong style="font-weight: bold;">overflowToDisk：</strong>
										<span class="Apple-converted-space"> </span>如果内存中数据超过内存限制，是否要缓存到磁盘上。</span>
						</li>
				</ol>
		</div>
		<div class="content" style="color: rgb(0, 0, 0); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 25.1875px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); overflow: auto;">
				<br />
		</div>
		<div class="content" style="color: rgb(0, 0, 0); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 25.1875px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); overflow: auto;">
				<strong style="font-weight: bold;">以下属性是可选的：</strong>
				<span class="Apple-converted-space"> </span>
				<span>
						<br />
				</span>
				<ol style="font-size: 1em; line-height: 1.4em; margin: 0px 0px 1.5em; padding: 0px;">
						<li style="font-size: 1em; margin: 0px 0px 0.25em 30px; padding: 0px;">
								<span>
										<strong style="font-weight: bold;">timeToIdleSeconds：</strong>
										<span class="Apple-converted-space"> </span>对象空闲时间，指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值0，表示一直可以访问。</span>
						</li>
						<li style="font-size: 1em; margin: 0px 0px 0.25em 30px; padding: 0px;">
								<span>
										<strong style="font-weight: bold;">timeToLiveSeconds：</strong>
										<span class="Apple-converted-space"> </span>对象存活时间，指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值0，表示一直可以访问。</span>
						</li>
						<li style="font-size: 1em; margin: 0px 0px 0.25em 30px; padding: 0px;">
								<span>
										<strong style="font-weight: bold;">diskPersistent：</strong>
										<span class="Apple-converted-space"> </span>是否在磁盘上持久化。指重启jvm后，数据是否有效。默认为false。</span>
						</li>
						<li style="font-size: 1em; margin: 0px 0px 0.25em 30px; padding: 0px;">
								<span>
										<strong style="font-weight: bold;">diskExpiryThreadIntervalSeconds：</strong>
										<span class="Apple-converted-space"> </span>对象检测线程运行时间间隔。标识对象状态的线程多长时间运行一次。</span>
						</li>
						<li style="font-size: 1em; margin: 0px 0px 0.25em 30px; padding: 0px;">
								<span>
										<strong style="font-weight: bold;">diskSpoolBufferSizeMB：</strong>
										<span class="Apple-converted-space"> </span>DiskStore使用的磁盘大小，默认值30MB。每个cache使用各自的DiskStore。</span>
						</li>
						<li style="font-size: 1em; margin: 0px 0px 0.25em 30px; padding: 0px;">
								<span>
										<strong style="font-weight: bold;">memoryStoreEvictionPolicy：</strong>
										<span class="Apple-converted-space"> </span>如果内存中数据超过内存限制，向磁盘缓存时的策略。默认值LRU，可选FIFO、LFU。</span>
						</li>
				</ol>
		</div>
		<div class="content" style="color: rgb(0, 0, 0); font-family: Helvetica, Tahoma, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 25.1875px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); overflow: auto;">
				<span>
						<strong style="font-weight: bold;">缓存的3 种清空策略</strong>
						<span class="Apple-converted-space"> </span>：<br /><strong style="font-weight: bold;">FIFO<span class="Apple-converted-space"> </span></strong>，first in first out (先进先出).<br /><br /><strong style="font-weight: bold;">LFU<span class="Apple-converted-space"> </span></strong>， Less Frequently Used (最少使用).意思是一直以来最少被使用的。缓存的元素有一个hit 属性，hit 值最小的将会被清出缓存。<br /><br /><strong style="font-weight: bold;">LRU<span class="Apple-converted-space"> </span></strong>，Least Recently Used(最近最少使用). (ehcache 默认值).缓存的元素有一个时间戳，当缓存容量满了，而又需要腾出地方来缓存新的元素的时候，那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。<span class="Apple-converted-space"><br /></span></span>
		</div>
<img src ="http://www.blogjava.net/libin2722/aggbug/404115.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-09-16 10:43 <a href="http://www.blogjava.net/libin2722/articles/404115.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>OSChina架构中，依照“管理重于配置”的思路使用Servlet设计的MVC</title><link>http://www.blogjava.net/libin2722/articles/403043.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Mon, 19 Aug 2013 08:41:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/403043.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/403043.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/403043.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/403043.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/403043.html</trackback:ping><description><![CDATA[
		<pre style="color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">package my.mvc;

import java.io.*;
import java.lang.reflect.*;
import java.net.URLDecoder;
import java.util.*;

import javax.servlet.*;
import javax.servlet.http.*;

import my.db.DBException;
import my.util.ResourceUtils;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;

/**
 * 业务处理方法入口，URI的映射逻辑：
 * /action/xxxxxx/xxxx -&gt; com.dlog4j.action.XxxxxxAction.xxxx(req,res)
 * &lt;pre&gt;
	林花谢了春红，
	太匆匆，
	无奈朝来寒雨晚来风。

	胭脂泪，
	相留醉，
	几时重，
	自是人生长恨水长东。
 * &lt;/pre&gt;
 * @author Winter Lau (http://my.oschina.net/javayou)&lt;br&gt; */
public final class ActionServlet extends HttpServlet {

	private final static String ERROR_PAGE = "error_page";
	private final static String GOTO_PAGE = "goto_page";
	private final static String THIS_PAGE = "this_page";
	private final static String ERROR_MSG = "error_msg";
	
	private final static String UTF_8 = "utf-8";	
	private List&lt;String&gt; action_packages = null;
	private final static ThreadLocal&lt;Boolean&gt; g_json_enabled = new ThreadLocal&lt;Boolean&gt;();
	
	@Override
	public void init() throws ServletException {
		String tmp = getInitParameter("packages");
		action_packages = Arrays.asList(StringUtils.split(tmp,','));
		String initial_actions = getInitParameter("initial_actions");
		for(String action : StringUtils.split(initial_actions,','))
			try {
				_LoadAction(action);
			} catch (Exception e) {
				log("Failed to initial action : " + action, e);
			}
	}

	@Override
	public void destroy() {
		for(Object action : actions.values()){
			try{
				Method dm = action.getClass().getMethod("destroy");
				if(dm != null){
					dm.invoke(action);
					log("!!!!!!!!! " + action.getClass().getSimpleName() + 
						" destroy !!!!!!!!!");
				}
			}catch(NoSuchMethodException e){
			}catch(Exception e){
				log("Unabled to destroy action: " + action.getClass().getSimpleName(), e);
			}
		}
		super.destroy();
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		process(RequestContext.get(), false);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		process(RequestContext.get(), true);
	}
	
	/**
	 * 执行Action方法并进行返回处理、异常处理
	 * @param req
	 * @param resp
	 * @param is_post
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void process(RequestContext req, boolean is_post) 
		throws ServletException, IOException 
	{
		try{
			req.response().setContentType("text/html;charset=utf-8");
			if(_process(req, is_post)){ 
				String gp = req.param(GOTO_PAGE);
				if(StringUtils.isNotBlank(gp))
					req.redirect(gp);
			}
		}catch(InvocationTargetException e){
			Throwable t = e.getCause();
			if(t instanceof ActionException)
				handleActionException(req, (ActionException)t);
			else if(t instanceof DBException)
				handleDBException(req, (DBException)t);
			else
				throw new ServletException(t);
		}catch(ActionException t){
			handleActionException(req, t);
		}catch(IOException e){
			throw e;
		}catch(DBException e){
			handleDBException(req, e);
		}catch(Exception e){
			log("Exception in action process.", e);
			throw new ServletException(e);
		}finally{
			g_json_enabled.remove();
		}
	}
	
	/**
	 * Action业务异常
	 * @param req
	 * @param resp
	 * @param t
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void handleActionException(RequestContext req, ActionException t)	
		throws ServletException, IOException 
	{		
		handleException(req, t.getMessage());
	}
	
	protected void handleDBException(RequestContext req, DBException e) 
		throws ServletException, IOException 
	{
		log("DBException in action process.", e);
		handleException(req, ResourceUtils.getString("error", 
			"database_exception", e.getCause().getMessage()));
	}
	
	/**
	 * URL解码
	 * 
	 * @param url
	 * @param charset
	 * @return
	 */
	private static String _DecodeURL(String url, String charset) {
		if (StringUtils.isEmpty(url))
			return "";
		try {
			return URLDecoder.decode(url, charset);
		} catch (Exception e) {
		}
		return url;
	}

	protected void handleException(RequestContext req, String msg) 
		throws ServletException, IOException 
	{
		String ep = req.param(ERROR_PAGE);
		if(StringUtils.isNotBlank(ep)){
			if(ep.charAt(0)=='%')
				ep = _DecodeURL(ep, UTF_8);
			ep = ep.trim();
			if(ep.charAt(0)!='/'){
				req.redirect(req.contextPath()+"/");
			}
			else{
				req.request().setAttribute(ERROR_MSG, msg);
				req.forward(ep.trim());
			}
		}
		else{
			if(g_json_enabled.get())
				req.output_json("msg", msg);
			else
				req.print(msg);
		}
	}	
	
	/**
	 * 业务逻辑处理
	 * @param req
	 * @param resp
	 * @param is_post_method
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 * @throws IOException 
	 * @throws ServletException
	 * @throws IOException
	 * @throws InvocationTargetException 
	 * @throws IllegalArgumentException 
	 */
	private boolean _process(RequestContext req, boolean is_post)
			 throws InstantiationException,
					IllegalAccessException, 
					IOException, 
					IllegalArgumentException,
					InvocationTargetException
	{
		String requestURI = req.uri();
		String[] parts = StringUtils.split(requestURI, '/');
		if(parts.length&lt;2){
			req.not_found();
			return false;
		}
		//加载Action类
		Object action = this._LoadAction(parts[1]);
		if(action == null){
			req.not_found();
			return false;
		}
		String action_method_name = (parts.length&gt;2)?parts[2]:"index";
		Method m_action = this._GetActionMethod(action, action_method_name);
		if(m_action == null){
			req.not_found();
			return false;
		}
		
		//判断action方法是否只支持POST
		if (!is_post &amp;&amp; m_action.isAnnotationPresent(Annotation.PostMethod.class)){
			req.not_found();
			return false;
		}
		
		g_json_enabled.set(m_action.isAnnotationPresent(Annotation.JSONOutputEnabled.class));
		
		if(m_action.isAnnotationPresent(Annotation.UserRoleRequired.class)){
			IUser loginUser = req.user();
			if(loginUser == null){
				String this_page = req.param(THIS_PAGE, "");
				throw req.error("user_not_login", this_page);
			}
			if(loginUser.IsBlocked())
				throw req.error("user_blocked");
			
			Annotation.UserRoleRequired urr = (Annotation.UserRoleRequired)
				m_action.getAnnotation(Annotation.UserRoleRequired.class);
			if(loginUser.getRole() &lt; urr.role())
				throw req.error("user_role_deny");			
		}
		
		//调用Action方法之准备参数
		int arg_c = m_action.getParameterTypes().length;
		switch(arg_c){
		case 0: // login()
			m_action.invoke(action);
			break ;
		case 1:
			m_action.invoke(action, req);
			break;
		case 2: // login(HttpServletRequest req, HttpServletResponse res)
			m_action.invoke(action, req.request(), req.response());
			break ;
		case 3: // login(HttpServletRequest req, HttpServletResponse res, String[] extParams)
			StringBuilder args = new StringBuilder();
			for(int i=3;i&lt;parts.length;i++){
				if(StringUtils.isBlank(parts[i]))
					continue;
				if(args.length() &gt; 0)
					args.append('/');
				args.append(parts[i]);
			}
			boolean isLong = m_action.getParameterTypes()[2].equals(long.class);
			m_action.invoke(action, req.request(), req.response(), isLong ? NumberUtils.toLong(
					args.toString(), -1L) : args.toString());
			break ;
		default:
			req.not_found();
			return false;
		}
		
		return true;
	}
	
	/**
	 * 加载Action类
	 * @param act_name
	 * @return
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 */
	protected Object _LoadAction(String act_name) 
		throws InstantiationException,IllegalAccessException 
	{
		Object action = actions.get(act_name);
		if(action == null){
			for(String pkg : action_packages){
				String cls = pkg + '.' + StringUtils.capitalize(act_name) + "Action";
				action = _LoadActionOfFullname(act_name, cls);
				if(action != null)
					break;
			}
		}
		return action ;
	}
	
	private Object _LoadActionOfFullname(String act_name, String cls) 
		throws IllegalAccessException, InstantiationException 
	{
		Object action = null;
		try {								
			action = Class.forName(cls).newInstance();
			try{
				Method action_init_method = action.getClass().getMethod("init", ServletContext.class);
				action_init_method.invoke(action, getServletContext());
			}catch(NoSuchMethodException e){
			}catch(InvocationTargetException excp) {
				excp.printStackTrace();
			}
			if(!actions.containsKey(act_name)){
				synchronized(actions){
					actions.put(act_name, action);
				}
			}
		} catch (ClassNotFoundException excp) {}
		return action;
	}
	
	/**
	 * 获取名为{method}的方法
	 * @param action
	 * @param method
	 * @return
	 */
	private Method _GetActionMethod(Object action, String method) {
		String key = action.getClass().getSimpleName() + '.' + method;
		Method m = methods.get(key);
		if(m != null) return m;
		for(Method m1 : action.getClass().getMethods()){
			if(m1.getModifiers()==Modifier.PUBLIC &amp;&amp; m1.getName().equals(method)){
				synchronized(methods){
					methods.put(key, m1);
				}
				return m1 ;
			}
		}
		return null;
	}

	private final static HashMap&lt;String, Object&gt; actions = new HashMap&lt;String, Object&gt;();
	private final static HashMap&lt;String, Method&gt; methods = new HashMap&lt;String, Method&gt;();

}</pre>
<img src ="http://www.blogjava.net/libin2722/aggbug/403043.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-08-19 16:41 <a href="http://www.blogjava.net/libin2722/articles/403043.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>class卸载、热替换和Tomcat的热部署的分析</title><link>http://www.blogjava.net/libin2722/articles/396091.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Tue, 05 Mar 2013 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/396091.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/396091.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/396091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/396091.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/396091.html</trackback:ping><description><![CDATA[
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">这篇文章主要是分析Tomcat中关于热部署和JSP更新替换的原理，在此之前先介绍class的热替换和class的卸载的原理。</p>
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">一 class的热替换<br />ClassLoader中重要的方法<br />loadClass<br />      ClassLoader.loadClass(...) 是ClassLoader的入口点。当一个类没有指明用什么加载器加载的时候，JVM默认采用AppClassLoader加载器加载没有加载过的class，调用的方法的入口就是loadClass(...)。如果一个class被自定义的ClassLoader加载，那么JVM也会调用这个自定义的ClassLoader.loadClass(...)方法来加载class内部引用的一些别的class文件。重载这个方法，能实现自定义加载class的方式，抛弃双亲委托机制，但是即使不采用双亲委托机制，比如java.lang包中的相关类还是不能自定义一个同名的类来代替，主要因为JVM解析、验证class的时候，会进行相关判断。<br /> <br />defineClass<br />      系统自带的ClassLoader，默认加载程序的是AppClassLoader，ClassLoader加载一个class，最终调用的是defineClass(...)方法，这时候就在想是否可以重复调用defineClass(...)方法加载同一个类(或者修改过)，最后发现调用多次的话会有相关错误:<br />...<br />java.lang.LinkageError<br />attempted duplicate class definition<br />...<br />所以一个class被一个ClassLoader实例加载过的话，就不能再被这个ClassLoader实例再次加载(这里的加载指的是，调用了defileClass(...)放方法，重新加载字节码、解析、验证。)。而系统默认的AppClassLoader加载器，他们内部会缓存加载过的class，重新加载的话，就直接取缓存。所与对于热加载的话，只能重新创建一个ClassLoader，然后再去加载已经被加载过的class文件。www.2cto.com</p>
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">下面看一个class热加载的例子：<br />代码：HotSwapURLClassLoader自定义classloader，实现热替换的关键<br />  1 package testjvm.testclassloader;<br />  2<br />  3 import java.io.File;<br />  4 import java.io.FileNotFoundException;<br />  5 import java.net.MalformedURLException;<br />  6 import java.net.URL;<br />  7 import java.net.URLClassLoader;<br />  8 import java.util.HashMap;<br />  9 import java.util.Map;<br /> 10<br /> 11 /**<br /> 12  * 只要功能是重新加载更改过的.class文件，达到热替换的作用<br /> 13  * @author banana<br /> 14  */<br /> 15 public class HotSwapURLClassLoader extends URLClassLoader {<br /> 16     //缓存加载class文件的最后最新修改时间<br /> 17     public static Map&lt;String,Long&gt; cacheLastModifyTimeMap = new HashMap&lt;String,Long&gt;();<br /> 18     //工程class类所在的路径<br /> 19     public static String projectClassPath = "D:/Ecpworkspace/ZJob-Note/bin/";<br /> 20     //所有的测试的类都在同一个包下<br /> 21     public static String packagePath = "testjvm/testclassloader/";<br /> 22    <br /> 23     private static HotSwapURLClassLoader hcl = new HotSwapURLClassLoader();<br /> 24    <br /> 25     public HotSwapURLClassLoader() {<br /> 26         //设置ClassLoader加载的路径<br /> 27         super(getMyURLs());<br /> 28     }<br /> 29    <br /> 30     public static HotSwapURLClassLoader  getClassLoader(){<br /> 31         return hcl;<br /> 32     }<br /> 33<br /> 34     private static  URL[] getMyURLs(){<br /> 35         URL url = null;<br /> 36         try {<br /> 37             url = new File(projectClassPath).toURI().toURL();<br /> 38         } catch (MalformedURLException e) {<br /> 39             e.printStackTrace();<br /> 40         }<br /> 41         return new URL[] { url };<br /> 42     }<br /> 43    <br /> 44     /**<br /> 45      * 重写loadClass，不采用双亲委托机制("java."开头的类还是会由系统默认ClassLoader加载)<br /> 46      */<br /> 47     @Override<br /> 48     public Class&lt;?&gt; loadClass(String name,boolean resolve) throws ClassNotFoundException {<br /> 49         Class clazz = null;<br /> 50         //查看HotSwapURLClassLoader实例缓存下，是否已经加载过class<br /> 51         //不同的HotSwapURLClassLoader实例是不共享缓存的<br /> 52         clazz = findLoadedClass(name);<br /> 53         if (clazz != null ) {<br /> 54             if (resolve){<br /> 55                 resolveClass(clazz);<br /> 56             }<br /> 57             //如果class类被修改过，则重新加载<br /> 58             if (isModify(name)) {<br /> 59                 hcl = new HotSwapURLClassLoader();<br /> 60                 clazz = customLoad(name, hcl);<br /> 61             }<br /> 62             return (clazz);<br /> 63         }<br /> 64<br /> 65         //如果类的包名为"java."开始，则有系统默认加载器AppClassLoader加载<br /> 66         if(name.startsWith("java.")){<br /> 67             try {<br /> 68                 //得到系统默认的加载cl，即AppClassLoader<br /> 69                 ClassLoader system = ClassLoader.getSystemClassLoader();<br /> 70                 clazz = system.loadClass(name);<br /> 71                 if (clazz != null) {<br /> 72                     if (resolve)<br /> 73                         resolveClass(clazz);<br /> 74                     return (clazz);<br /> 75                 }<br /> 76             } catch (ClassNotFoundException e) {<br /> 77                 // Ignore<br /> 78             }<br /> 79         }<br /> 80        <br /> 81         return customLoad(name,this);<br /> 82     }<br /> 83<br /> 84     public Class load(String name) throws Exception{<br /> 85         return loadClass(name);<br /> 86     }<br /> 87<br /> 88     /**<br /> 89      * 自定义加载<br /> 90      * @param name<br /> 91      * @param cl<br /> 92      * @return<br /> 93      * @throws ClassNotFoundException<br /> 94      */<br /> 95     public Class customLoad(String name,ClassLoader cl) throws ClassNotFoundException {<br /> 96         return customLoad(name, false,cl);<br /> 97     }<br /> 98<br /> 99     /**<br />100      * 自定义加载<br />101      * @param name<br />102      * @param resolve<br />103      * @return<br />104      * @throws ClassNotFoundException<br />105      */<br />106     public Class customLoad(String name, boolean resolve,ClassLoader cl)<br />107             throws ClassNotFoundException {<br />108         //findClass()调用的是URLClassLoader里面重载了ClassLoader的findClass()方法<br />109         Class clazz = ((HotSwapURLClassLoader)cl).findClass(name);<br />110         if (resolve)<br />111             ((HotSwapURLClassLoader)cl).resolveClass(clazz);<br />112         //缓存加载class文件的最后修改时间<br />113         long lastModifyTime = getClassLastModifyTime(name);<br />114         cacheLastModifyTimeMap.put(name,lastModifyTime);<br />115         return clazz;<br />116     }<br />117    <br />118     public Class&lt;?&gt; loadClass(String name) throws ClassNotFoundException {<br />119         return loadClass(name,false);<br />120     }<br />121    <br />122     @Override<br />123     protected Class&lt;?&gt; findClass(String name) throws ClassNotFoundException {<br />124         // TODO Auto-generated method stub<br />125         return super.findClass(name);<br />126     }<br />127    <br />128     /**<br />129      * @param name<br />130      * @return .class文件最新的修改时间<br />131      */<br />132     private long getClassLastModifyTime(String name){<br />133         String path = getClassCompletePath(name);<br />134         File file = new File(path);<br />135         if(!file.exists()){<br />136             throw new RuntimeException(new FileNotFoundException(name));<br />137         }<br />138         return file.lastModified();<br />139     }<br />140    <br />141     /**<br />142      * 判断这个文件跟上次比是否修改过<br />143      * @param name<br />144      * @return<br />145      */<br />146     private boolean isModify(String name){<br />147         long lastmodify = getClassLastModifyTime(name);<br />148         long previousModifyTime = cacheLastModifyTimeMap.get(name);<br />149         if(lastmodify&gt;previousModifyTime){<br />150             return true;<br />151         }<br />152         return false;<br />153     }<br />154    <br />155     /**<br />156      * @param name<br />157      * @return .class文件的完整路径 (e.g. E:/A.class)<br />158      */<br />159     private String getClassCompletePath(String name){<br />160         String simpleName = name.substring(name.lastIndexOf(".")+1);<br />161         return projectClassPath+packagePath+simpleName+".class";<br />162     }<br />163    <br />164 }<br />165</p>
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">代码：Hot被用来修改的类<br />1 package testjvm.testclassloader;<br />2<br />3 public class Hot {<br />4     public void hot(){<br />5         System.out.println(" version 1 : "+this.getClass().getClassLoader());<br />6     }<br />7 }<br />8</p>
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">代码：TestHotSwap测试类<br /> 1 package testjvm.testclassloader;<br /> 2<br /> 3 import java.lang.reflect.Method;<br /> 4<br /> 5 public class TestHotSwap {<br /> 6<br /> 7     public static void main(String[] args) throws Exception {<br /> 8         //开启线程，如果class文件有修改，就热替换<br /> 9         Thread t = new Thread(new MonitorHotSwap());<br />10         t.start();<br />11     }<br />12 }<br />13<br />14 class MonitorHotSwap implements Runnable {<br />15     // Hot就是用于修改，用来测试热加载<br />16     private String className = "testjvm.testclassloader.Hot";<br />17     private Class hotClazz = null;<br />18     private HotSwapURLClassLoader hotSwapCL = null;<br />19<br />20     @Override<br />21     public void run() {<br />22         try {<br />23             while (true) {<br />24                 initLoad();<br />25                 Object hot = hotClazz.newInstance();<br />26                 Method m = hotClazz.getMethod("hot");<br />27                 m.invoke(hot, null); //打印出相关信息<br />28                 // 每隔10秒重新加载一次<br />29                 Thread.sleep(10000);<br />30             }<br />31         } catch (Exception e) {<br />32             e.printStackTrace();<br />33         }<br />34     }<br />35<br />36     /**<br />37      * 加载class<br />38      */<br />39     void initLoad() throws Exception {<br />40         hotSwapCL = HotSwapURLClassLoader.getClassLoader();<br />41         // 如果Hot类被修改了，那么会重新加载，hotClass也会返回新的<br />42         hotClazz = hotSwapCL.loadClass(className);<br />43     }<br />44 }</p>
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">     在测试类运行的时候，修改Hot.class文件<br />Hot.class<br />原来第五行:System.out.println(" version 1 : "+this.getClass().getClassLoader());<br />改后第五行:System.out.println(" version 2 : "+this.getClass().getClassLoader());<br />  <br />输出<br /> version 1 : testjvm.testclassloader.HotSwapURLClassLoader@610f7612<br /> version 1 : testjvm.testclassloader.HotSwapURLClassLoader@610f7612<br /> version 2 : testjvm.testclassloader.HotSwapURLClassLoader@45e4d960<br /> version 2 : testjvm.testclassloader.HotSwapURLClassLoader@45e4d960<br />     所以HotSwapURLClassLoader是重加载了Hot类 。注意上面，其实当加载修改后的Hot时，HotSwapURLClassLoader实例跟加载没修改Hot的HotSwapURLClassLoader不是同一个。<br />图：HotSwapURLClassLoader加载情况<br /><img src="http://www.2cto.com/uploadfile/2012/1114/20121114104945333.jpg" style="border-width: 0px; padding: 0px; margin: 0px; list-style: none; width: 630px; height: 277.089715536105px;" /></p>
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">     总结：上述类热加载，需要自定义ClassLoader，并且只能重新实例化ClassLoader实例，利用新的ClassLoader实例才能重新加载之前被加载过的class。并且程序需要模块化，才能利用这种热加载方式。</p>
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">二 class卸载<br />      在Java中class也是可以unload。JVM中class和Meta信息存放在PermGen space区域。如果加载的class文件很多，那么可能导致PermGen space区域空间溢出。引起：java.lang.OutOfMemoryErrorPermGen space.  对于有些Class我们可能只需要使用一次，就不再需要了，也可能我们修改了class文件，我们需要重新加载 newclass，那么oldclass就不再需要了。那么JVM怎么样才能卸载Class呢。</p>
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">      JVM中的Class只有满足以下三个条件，才能被GC回收，也就是该Class被卸载（unload）：<br />   - 该类所有的实例都已经被GC。<br />   - 加载该类的ClassLoader实例已经被GC。<br />   - 该类的java.lang.Class对象没有在任何地方被引用。</p>
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">     GC的时机我们是不可控的，那么同样的我们对于Class的卸载也是不可控的。</p>
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">例子：<br />代码：SimpleURLClassLoader，一个简单的自定义classloader<br />  1 package testjvm.testclassloader;<br />  2<br />  3 import java.io.File;<br />  4 import java.net.MalformedURLException;<br />  5 import java.net.URL;<br />  6 import java.net.URLClassLoader;<br />  7<br />  8 public class SimpleURLClassLoader extends URLClassLoader {<br />  9     //工程class类所在的路径<br /> 10     public static String projectClassPath = "E:/IDE/work_place/ZJob-Note/bin/";<br /> 11     //所有的测试的类都在同一个包下<br /> 12     public static String packagePath = "testjvm/testclassloader/";<br /> 13    <br /> 14     public SimpleURLClassLoader() {<br /> 15         //设置ClassLoader加载的路径<br /> 16         super(getMyURLs());<br /> 17     }<br /> 18    <br /> 19     private static  URL[] getMyURLs(){<br /> 20         URL url = null;<br /> 21         try {<br /> 22             url = new File(projectClassPath).toURI().toURL();<br /> 23         } catch (MalformedURLException e) {<br /> 24             e.printStackTrace();<br /> 25         }<br /> 26         return new URL[] { url };<br /> 27     }<br /> 28    <br /> 29     public Class load(String name) throws Exception{<br /> 30         return loadClass(name);<br /> 31     }<br /> 32<br /> 33     public Class&lt;?&gt; loadClass(String name) throws ClassNotFoundException {<br /> 34         return loadClass(name,false);<br /> 35     }<br /> 36    <br /> 37     /**<br /> 38      * 重写loadClass，不采用双亲委托机制("java."开头的类还是会由系统默认ClassLoader加载)<br /> 39      */<br /> 40     @Override<br /> 41     public Class&lt;?&gt; loadClass(String name,boolean resolve) throws ClassNotFoundException {<br /> 42         Class clazz = null;<br /> 43         //查看HotSwapURLClassLoader实例缓存下，是否已经加载过class<br /> 44         clazz = findLoadedClass(name);<br /> 45         if (clazz != null ) {<br /> 46             if (resolve){<br /> 47                 resolveClass(clazz);<br /> 48             }<br /> 49             return (clazz);<br /> 50         }<br /> 51<br /> 52         //如果类的包名为"java."开始，则有系统默认加载器AppClassLoader加载<br /> 53         if(name.startsWith("java.")){<br /> 54             try {<br /> 55                 //得到系统默认的加载cl，即AppClassLoader<br /> 56                 ClassLoader system = ClassLoader.getSystemClassLoader();<br /> 57                 clazz = system.loadClass(name);<br /> 58                 if (clazz != null) {<br /> 59                     if (resolve)<br /> 60                         resolveClass(clazz);<br /> 61                     return (clazz);<br /> 62                 }<br /> 63             } catch (ClassNotFoundException e) {<br /> 64                 // Ignore<br /> 65             }<br /> 66         }<br /> 67        <br /> 68         return customLoad(name,this);<br /> 69     }<br /> 70<br /> 71     /**<br /> 72      * 自定义加载<br /> 73      * @param name<br /> 74      * @param cl<br /> 75      * @return<br /> 76      * @throws ClassNotFoundException<br /> 77      */<br /> 78     public Class customLoad(String name,ClassLoader cl) throws ClassNotFoundException {<br /> 79         return customLoad(name, false,cl);<br /> 80     }<br /> 81<br /> 82     /**<br /> 83      * 自定义加载<br /> 84      * @param name<br /> 85      * @param resolve<br /> 86      * @return<br /> 87      * @throws ClassNotFoundException<br /> 88      */<br /> 89     public Class customLoad(String name, boolean resolve,ClassLoader cl)<br /> 90             throws ClassNotFoundException {<br /> 91         //findClass()调用的是URLClassLoader里面重载了ClassLoader的findClass()方法<br /> 92         Class clazz = ((SimpleURLClassLoader)cl).findClass(name);<br /> 93         if (resolve)<br /> 94             ((SimpleURLClassLoader)cl).resolveClass(clazz);<br /> 95         return clazz;<br /> 96     }<br /> 97    <br /> 98     @Override<br /> 99     protected Class&lt;?&gt; findClass(String name) throws ClassNotFoundException {<br />100         return super.findClass(name);<br />101     }<br />102 }<br />103</p>
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">代码：A<br />1 public class A { <br />2 //  public static final Level CUSTOMLEVEL = new Level("test", 550) {}; // 内部类<br />3 }<br />代码：TestClassUnload，测试类<br /> 1 package testjvm.testclassloader;<br /> 2<br /> 3 public class TestClassUnLoad {<br /> 4<br /> 5     public static void main(String[] args) throws Exception {<br /> 6         SimpleURLClassLoader loader = new SimpleURLClassLoader();<br /> 7         // 用自定义的加载器加载A<br /> 8         Class clazzA = loader.load("testjvm.testclassloader.A");<br /> 9         Object a = clazzA.newInstance();<br />10         // 清除相关引用<br />11         a = null;<br />12         clazzA = null;<br />13         loader = null;<br />14         // 执行一次gc垃圾回收<br />15         System.gc();<br />16         System.out.println("GC over");<br />17     }<br />18 }<br />19</p>
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">      运行的时候配置VM参数: -verbose:class；用于查看class的加载与卸载情况。如果用的是Eclipse，在Run Configurations中配置此参数即可。<br />图:Run Configurations配置   </p>
		<p style="border-width: 0px; padding: 0px; margin: 0px 0px 8px; list-style: none; text-indent: 2em; color: rgb(51, 51, 51); font-family: 宋体; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 28px; orphans: auto; text-align: start; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">
				<img src="http://www.2cto.com/uploadfile/2012/1114/20121114104946794.jpg" style="border-width: 0px; padding: 0px; margin: 0px; list-style: none; width: 587px; height: 463px;" />输出结果<br />.....<br />[Loaded java.net.URI$Parser from E:\java\jdk1.7.0_03\jre\lib\rt.jar]<br />[Loaded testjvm.testclassloader.A from file:/E:/IDE/work_place/ZJob-Note/bin/]<br />[Unloading class testjvm.testclassloader.A]<br />GC over<br />[Loaded sun.misc.Cleaner from E:\java\jdk1.7.0_03\jre\lib\rt.jar]<br />[Loaded java.lang.Shutdown from E:\java\jdk1.7.0_03\jre\lib\rt.jar]<br />......</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/396091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-03-05 17:16 <a href="http://www.blogjava.net/libin2722/articles/396091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>个性化推荐技术漫谈</title><link>http://www.blogjava.net/libin2722/articles/396041.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Mon, 04 Mar 2013 08:39:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/396041.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/396041.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/396041.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/396041.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/396041.html</trackback:ping><description><![CDATA[
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">如果说过去的十年是搜索技术大行其道的十年，那么个性化推荐技术将成为未来十年中最重要的革新之一。目前几乎所有大型的电子商务系统，如Amazon、CDNOW、Netflix等，都不同程度地使用了各种形式的推荐系统。而近来以“发现”为核心的网站正开始在互联网上崭露头角，比如侧重于音乐推荐的八宝盒，侧重于图书推荐的豆瓣等等。</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">那么，一个好的推荐系统需要满足什么目标呢？<br style="margin: 0px; padding: 0px;" />个性化推荐系统必须能够基于用户之前的口味和喜好提供相关的精确的推荐，而且这种口味和喜欢的收集必须尽量少的需要用户的劳动。推荐的结果必须能够实时计算，这样才能够在用户离开网站前之前获得推荐的内容，并且及时的对推荐结果作出反馈。实时性也是推荐系统与通常的数据挖掘技术显著不同的一个特点。</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">一个完整的推荐系统由三部分构成：行为记录模块、模型分析模块和推荐模块。行为记录模块负责记录能够体现用户喜好的行为，比如购买、下载、评分等。这部分看起来简单，其实需要非常仔细的设计。比如说购买和评分这两种行为表达潜在的喜好程度就不尽相同完善的行为记录需要能够综合多种不同的用户行为，处理不同行为的累加。模型分析模块的功能则实现了对用户行为记录的分析，采用不同算法建立起模型描述用户的喜好信息。最后，通过推荐模块，实时的从内容集筛选出目标用户可能会感兴趣的内容推荐给用户。因此，除了推荐系统本身，为了实现推荐，还需要一个可供推荐的内容集。比如，对于音乐推荐系统来说，一个音乐库就是这样的内容集。我们对内容集本身需要提供的信息要求非常低，在经典的协同过滤算法下，内容集甚至只需要提供ID就足够。而对于基于内容的推荐系统来说，由于往往需要对内容进行特征抽取和索引，我们就会需要提供更多的领域知识和内容属性。这种情况下，还是拿音乐举例，歌手、流派之类的属性和音频信息就成为必需的内容集信息。<br style="margin: 0px; padding: 0px;" /><br style="margin: 0px; padding: 0px;" /></div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">迄今为止在个性化推荐系统中，协同过滤（Collaborative Filtering）技术是应用最成功的技术。目前国内外互联网上有许多大型网站已经应用这项技术为用户更加智能的推荐内容。如果你想要研究协同过滤，一定不能错过MovieLens（<a href="http://movielens.umn.edu/" style="margin: 0px; padding: 0px; color: rgb(51, 102, 153); text-decoration: none;">http://movielens.umn.edu/</a>）。它是协同过滤最著名的研究项目之一。</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">第一代的协同过滤技术，又被称为基于用户（User-based）的协同过滤。基于用户的协同过滤，基本原理是基于用户行为选择的相关性。用户的行为选择这里指的是下载、购买、评价等等能够显式或者隐式体现出用户喜好的行为。在一个典型的基于协同过滤技术的推荐系统中，输入数据通常可以表述为一个m×n 的用户内容矩阵R，m是用户数，n是内容数。矩阵的值与内容的类型有关，通常由行为记录模块决定。如果内容是网上书店中的书，则矩阵的值可以表示用户购买与否，例如1表示购买，0表示没有购买；或者表示用户对它的评价有多高，这样的评价值就可以有几个等级，比如常见的1～5级评价制。</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">基于用户的协同过滤，通过比较目标用户的一系列行为选择和其他用户之间的相似性，来识别出一组相互具有类似喜好的用户，又可以称为“同好”。一旦系统能够识别一个用户的同好用户，就能够将他们最感兴趣的内容作为当前用户的推荐结果推荐给这个用户。也就是说，以前的行为选择与你相似的用户，在以后的行为中很可能也会和你相似。因此将这些用户做为基准来向你推荐内容。</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">协同过滤的核心问题是寻找与目标用户兴趣相近的一组用户。这种相似用户通常被称为最近邻居（Nearest Neighbor）。用户之间的相似度是通过比较两个用户的行为选择矢量得到的。目前，比较行为选择矢量的相似度计算方法有许多种，比较经典的算法包括泊松相关系数（Person Correlation Coefficient）和余弦相似性（Cosine-based Similarity）。</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">“最近邻居”产生后，我们就能够计算得到用户最可能感兴趣的内容集（也叫做TopN推荐集）。为了得到推荐集，分别统计“最近邻居”中的用户对不同内容的兴趣度，取其中排在最前面的内容作为推荐集。下面是一个简化的示例：假如用户张三有两个同好：李四和王五。</div>
		<div style="margin: 0px 0px 0px 21pt; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-indent: 21pt;"> </div>
		<div style="margin: 0px 0px 0px 21pt; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-indent: 21pt;">张三喜欢看电影A；</div>
		<div style="margin: 0px 0px 0px 21pt; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-indent: 21pt;">李四喜欢看电影A，B，C和D；</div>
		<div style="margin: 0px 0px 0px 21pt; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-indent: 21pt;">王五喜欢看电影A，B，D，E和F；</div>
		<div style="margin: 0px 0px 0px 21pt; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-indent: 21pt;"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">这样，推荐系统就能够过滤出相似用户都喜欢的电影B和D作为张三最可能也会喜欢的电影推荐给张三。</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">基于用户的协同过滤技术在个性化推荐系统中获得了极大的成功，但它有自身的局限性。推荐集的产生方式意味着一个内容只有已经被用户选择（购买）后才有机会被推荐给其他用户。对于一个网上书店来说，新上架的书因为还没有被相当数量的用户购买或者评价的记录，便很少有机会被用户的“最近邻居”筛选进入推荐集。这个问题，也被称之为协同过滤的“冷启动”问题。</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">此外，因为计算用户的相似度时，是通过将目标用户的历史行为记录与其他每一个用户的记录相比较得出的，所以对于一个现实的推荐系统来说，扩展性将成为非常严重的问题。设想一下，对于一个拥有上百万用户的网站来说，每计算一个用户都将涉及到上百万次的比较，更不要说其中会带来的大量数据库IO操作的开销。</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">于是第二代基于内容项（Item-based）的协同过滤技术就产生了。与基于用户的技术不同的是，这种方法比较的是内容项与内容项之间的相似度。Item-based 方法同样需要进行三个步骤获得推荐：1）得到内容项（Item）的历史评分数据；2）针对内容项进行内容项之间的相似度计算，找到目标内容项的“最近邻居”；3）产生推荐。这里内容项之间的相似度是通过比较两个内容项上的用户行为选择矢量得到的。举个例子，假设用户和内容项如下：</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);" align="center">
				<table style="margin: 0px; padding: 0px; border: medium none; border-collapse: collapse;" border="1" cellpadding="0" cellspacing="0">
						<tbody style="margin: 0px; padding: 0px;">
								<tr style="margin: 0px; padding: 0px; height: 15pt;">
										<td style="margin: 0px; padding: 0cm 5.4pt; border-width: 1.5pt medium 1pt; border-style: solid none; border-top-color: green; width: 40.8pt; border-bottom-color: green; height: 15pt;" valign="top" width="54">
												<div style="margin: 0px; padding: 0px;"> </div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border-width: 1.5pt medium 1pt; border-style: solid none; border-top-color: green; width: 51.3pt; border-bottom-color: green; height: 15pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;">电影A</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border-width: 1.5pt medium 1pt; border-style: solid none; border-top-color: green; width: 50.45pt; border-bottom-color: green; height: 15pt;" valign="top" width="67">
												<div style="margin: 0px; padding: 0px;">电影B</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border-width: 1.5pt medium 1pt; border-style: solid none; border-top-color: green; width: 51.3pt; border-bottom-color: green; height: 15pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;">电影C</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border-width: 1.5pt medium 1pt; border-style: solid none; border-top-color: green; width: 51.3pt; border-bottom-color: green; height: 15pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;">电影D</div>
										</td>
								</tr>
								<tr style="margin: 0px; padding: 0px; height: 15.75pt;">
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 40.8pt; height: 15.75pt;" valign="top" width="54">
												<div style="margin: 0px; padding: 0px;">张三</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 51.3pt; height: 15.75pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;">喜欢</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 50.45pt; height: 15.75pt;" valign="top" width="67">
												<div style="margin: 0px; padding: 0px;"> </div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 51.3pt; height: 15.75pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;"> </div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 51.3pt; height: 15.75pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;"> </div>
										</td>
								</tr>
								<tr style="margin: 0px; padding: 0px; height: 15.75pt;">
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 40.8pt; height: 15.75pt;" valign="top" width="54">
												<div style="margin: 0px; padding: 0px;">李四</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 51.3pt; height: 15.75pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;">喜欢</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 50.45pt; height: 15.75pt;" valign="top" width="67">
												<div style="margin: 0px; padding: 0px;">喜欢</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 51.3pt; height: 15.75pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;">喜欢</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 51.3pt; height: 15.75pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;">喜欢</div>
										</td>
								</tr>
								<tr style="margin: 0px; padding: 0px; height: 15.75pt;">
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 40.8pt; height: 15.75pt;" valign="top" width="54">
												<div style="margin: 0px; padding: 0px;">王五</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 51.3pt; height: 15.75pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;">不喜欢</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 50.45pt; height: 15.75pt;" valign="top" width="67">
												<div style="margin: 0px; padding: 0px;"> </div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 51.3pt; height: 15.75pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;">不喜欢</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border: medium none; width: 51.3pt; height: 15.75pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;">不喜欢</div>
										</td>
								</tr>
								<tr style="margin: 0px; padding: 0px; height: 15.75pt;">
										<td style="margin: 0px; padding: 0cm 5.4pt; border-width: medium medium 1.5pt; border-style: none none solid; width: 40.8pt; border-bottom-color: green; height: 15.75pt;" valign="top" width="54">
												<div style="margin: 0px; padding: 0px;">赵六</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border-width: medium medium 1.5pt; border-style: none none solid; width: 51.3pt; border-bottom-color: green; height: 15.75pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;">喜欢</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border-width: medium medium 1.5pt; border-style: none none solid; width: 50.45pt; border-bottom-color: green; height: 15.75pt;" valign="top" width="67">
												<div style="margin: 0px; padding: 0px;">喜欢</div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border-width: medium medium 1.5pt; border-style: none none solid; width: 51.3pt; border-bottom-color: green; height: 15.75pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;"> </div>
										</td>
										<td style="margin: 0px; padding: 0cm 5.4pt; border-width: medium medium 1.5pt; border-style: none none solid; width: 51.3pt; border-bottom-color: green; height: 15.75pt;" valign="top" width="68">
												<div style="margin: 0px; padding: 0px;">喜欢</div>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">可以看出，电影A与D是最相似的。因为张三喜欢A，所以电影D就可以推荐给张三。</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">和基于用户的推荐系统相比，基于内容项的推荐系统最大的改进是更具有扩展性。基于内容项的方法通过计算内容项之间的相似性来代替用户之间的相似性。对于通常的互联网应用来说，提供的内容项数量相对较为稳定。比如一个大型网上书店，可能出售的书籍数量也就在几十万上下，而用户数量就可能达到几百万。所以，比起用户，内容项之间的相似性计算需要的计算量要少很多，从而大大降低了在线计算量，提高系统性能。基于内容项的推荐系统应用最为成功的是Amazon。Amazon为此还申请了一项专利叫做”Collaborative recommendations using item-to-item similarity mappings”<a title="" name="_ftnref1" href="http://writeblog.csdn.net/Editor/FCKeditor/editor/fckeditor.html?InstanceName=ctl00_ContentPlaceHolder1_EntryEditor1_richTextEditor_richTextEditor&amp;Toolbar=Default#_ftn1" style="margin: 0px; padding: 0px; color: rgb(51, 102, 153); text-decoration: none;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px;"><span style="margin: 0px; padding: 0px; font-size: 10.5pt;">[1]</span></span></span></span>。当然，在降低了计算量的同时，完全基于内容项的推荐技术也在推荐的准确度上做了小小的牺牲。大多数情况下，基于用户的推荐技术表现要略好于基于内容项的方法。这是因为基于内容的方法忽略了相似用户之间的组群特征。</a></div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">不论是第一代的基于用户方法，还是第二代的基于内容项方法，都不可避免的遇到数据稀疏的问题。在任何一个网站中，用户的评分记录或者购买记录，相对整个可供选择的内容集来说，都是很小的一部分。所以在许多推荐系统中，每个用户涉及的数据量相当有限，在一些大的系统如Amazon中，用户最多不过就评价过上百万本书的1％，造成评估数据相当稀疏。当用户评价过的内容之间找不到交集时，就难以判断用户的口味是否相似，难以找到相似用户集，导致推荐效果大大降低。为了解决用户数据的稀疏问题，最方便的办法就是将用户对没有选择过的内容项的评分设为一个固定的缺省值，例如用户的平均评分。针对如何预测遗漏的评分业内又提出了很多种方法，不过一般来说采用最简单的改进方法就可以有效地提高协同过滤推荐系统的准确度。</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">另外一方面，即便采用了基于内容项的方法，在数据量巨大的时候，计算复杂度仍然成为性能瓶颈。为了进一步解决协同过滤技术的扩展性能问题，目前比较有效的办法是在用户评分数据上做一次聚类分析(clustering)。聚类技术首先将具有相似兴趣爱好的用户分配到相同的分类中。聚类产生之后，它或者将“最近邻居”搜索对象限制在最相近的聚类中，根据类中其他用户的评价预测目标用户的评价，或者用聚类的中心作为近似提取推荐结果。由于用户之间的分类相对变化比较小，因此聚类过程往往可以离线进行，而无需实时计算，这样就大大降低了实时推荐的计算压力，提高推荐系统的速度。一般来说，聚类将用户分为多少个类，推荐系统的整体速度就能够提高多少倍。具体选择什么样的聚类算法，又会因应用领域和数据的分布特性而不同。如果聚类算法选择不当，反而会降低推荐的准确性。近年来，推荐系统的算法技术的发展也有了一些新的方向，比如SlopeOne，SVD等方法，就不一一列举了。</div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </div>
		<div style="margin: 0px; padding: 0px; color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">在我看来，一个商用推荐系统的尤其关键之处在于对海量用户数据的处理。因为推荐系统是数据优先，数据的积累越多对推荐的精度就越有好处。而当用户的行为数据真正积累到上百万甚至上亿时，如何在合理时间内得出有效的推荐，就是对推荐技术最大的考验。除此之外，一个优秀的推荐系统需要能够结合内容相似与用户行为相。传统的协同过滤方法是忽略内容本身的属性的，这一方面固然是对数据要求少的优点，但另一方面也带来了难以避免的“冷启动”问题。其实，随着标签系统在互联网上的广泛应用，标签本身就不失为是一种很好的内容属性。如何利用也是值得大家探讨的。充分利用到内容本身的属性，将不同的相似性结合起来，这会给基于协同过滤的推荐技术带来新的动力。最后一点，设计良好的推荐技术要能够从用户对推荐内容的反馈中自行调整和学习。因为实际上每个用户对于推荐的内容都有不同的要求，比如有的用户可能偏好比较热门的内容，有的用户更愿意发现冷门的内容。针对不同用户的反馈来不断学习每个用户的特征，才能够避免所采用算法本身先天的偏差，获得较为理想的效果。</div>
<img src ="http://www.blogjava.net/libin2722/aggbug/396041.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-03-04 16:39 <a href="http://www.blogjava.net/libin2722/articles/396041.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>探索推荐引擎内部的秘密，第 1 部分: 推荐引擎初探</title><link>http://www.blogjava.net/libin2722/articles/396035.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Mon, 04 Mar 2013 06:30:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/396035.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/396035.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/396035.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/396035.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/396035.html</trackback:ping><description><![CDATA[
		<div id="dw-summary-article" style="width: 930px; background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(255, 255, 255)), to(rgb(236, 236, 236))); background-color: rgb(255, 255, 255); margin-top: 3px; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; color: rgb(0, 0, 0); font-family: Simsun; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: initial initial; background-repeat: initial initial;">
				<div class="ibm-container-body ibm-two-column" style="overflow: visible; height: 169.3125px;">
						<div class="ibm-column ibm-first" style="width: 500px; float: left; padding-left: 14px; margin-bottom: 10px;">
								<p style="font-family: arial, nsimsun, sans-serif; font-size: 0.76em; margin: 0em; padding: 0em 0em 1em;">
										<strong>简介：</strong> 随着 Web 技术的发展，使得内容的创建和分享变得越来越容易。每天都有大量的图片、博客、视频发布到网上。信息的极度爆炸使得人们找到他们需要的信息将变得越来越难。传统的搜索技术是一个相对简单的帮助人们找到信息的工具，也广泛的被人们所使用，但搜索引擎并不能完全满足用户对信息发现的需求，原因一是用户很难用恰当的关键词描述自己的需求，二是基于关键词的信息检索在很多情况下是不够的。而推荐引擎的出现，使用户获取信息的方式从简单的目标明确的数据的搜索转换到更高级更符合人们使用习惯的上下文信息更丰富的信息发现。</p>
						</div>
						<div class="ibm-column ibm-second" style="width: 380px; float: right; padding-right: 10px;">
								<p class="leading" style="font-family: arial, nsimsun, sans-serif; font-size: 0.76em; margin: 0em; padding: 0em 0em 1em; line-height: 18px;">
										<b style="font-size: 1em; font-weight: bold;">发布日期：</b> 2011 年 3 月 16 日<span class="Apple-converted-space"> </span><br /><b style="font-size: 1em; font-weight: bold;">级别：</b> 高级<span class="Apple-converted-space"> </span><br /><strong>访问情况 ：</strong> 65031 次浏览<span class="Apple-converted-space"> </span><br /><strong>评论：</strong> <span id="nCmts">11 (<a class="dw-view-comment" href="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html#icomments" style="padding: 0px 0px 3px 15px; background-image: url(http://www.ibm.com/i/v16/icons/d_bold.gif); margin-left: -4px; color: rgb(153, 102, 153); background-repeat: no-repeat no-repeat;">查看</a> | <a href="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html#" style="color: rgb(153, 102, 153);">添加评论</a><span class="Apple-converted-space"> </span>- 登录)</span></p>
								<div id="art-rating-summary" style="font-family: arial, sans-serif !important; font-size: 0.76em !important;">
										<img alt="平均分 5 星 共 236 个评分" src="http://dw1.s81c.com/developerworks/i/stars120x20-5b.jpg" class="dw-avg-rating" style="border: 0px; vertical-align: -4px; padding: 0px !important;" />
										<span class="Apple-converted-space"> </span>平均分 (236个评分)<br /><a class="dw-view-comment" href="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html#iratings" style="padding: 0px 0px 3px 15px; background-image: url(http://www.ibm.com/i/v16/icons/d_bold.gif); margin-left: -4px; color: rgb(153, 102, 153); background-repeat: no-repeat no-repeat;">为本文评分</a></div>
								<br />
						</div>
				</div>
		</div>
		<div id="ibm-content-body" style="background-image: none; background-attachment: scroll; background-color: rgb(255, 255, 255); width: 930px; padding: 15px 0px; clear: both; color: rgb(0, 0, 0); font-family: Simsun; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-position: 0px 0px; background-repeat: no-repeat no-repeat;">
				<div id="ibm-content-main" style="float: left; clear: left; width: 710px; padding-left: 10px;">
						<div class="ibm-container" style="margin: 0px 0px 1.2em; width: 710px;">
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">“探索推荐引擎内部的秘密”系列将带领读者从浅入深的学习探索推荐引擎的机制，实现方法，其中还涉及一些基本的优化方法，例如聚类和分类的应用。同时在理论讲解的基础上，还会结合 Apache Mahout 介绍如何在大规模数据上实现各种推荐策略，进行策略优化，构建高效的推荐引擎的方法。本文作为这个系列的第一篇文章，将深入介绍推荐引擎的工作原理，和其中涉及的各种推荐机制，以及它们各自的优缺点和适用场景，帮助用户清楚的了解和快速构建适合自己的推荐引擎。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<a name="major1">
												<span class="atitle" style="font-size: 1.5em; font-weight: bold;">信息发现</span>
										</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">如今已经进入了一个数据爆炸的时代，随着 Web 2.0 的发展， Web 已经变成数据分享的平台，那么，如何让人们在海量的数据中想要找到他们需要的信息将变得越来越难。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">在这样的情形下，搜索引擎（Google，Bing，百度等等）成为大家快速找到目标信息的最好途径。在用户对自己需求相对明确的时候，用搜索引擎很方便的通过关键字搜索很快的找到自己需要的信息。但搜索引擎并不能完全满足用户对信息发现的需求，那是因为在很多情况下，用户其实并不明确自己的需要，或者他们的需求很难用简单的关键字来表述。又或者他们需要更加符合他们个人口味和喜好的结果，因此出现了推荐系统，与搜索引擎对应，大家也习惯称它为推荐引擎。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">随着推荐引擎的出现，用户获取信息的方式从简单的目标明确的数据的搜索转换到更高级更符合人们使用习惯的信息发现。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">如今，随着推荐技术的不断发展，推荐引擎已经在电子商务 (E-commerce，例如 Amazon，当当网 ) 和一些基于 social 的社会化站点 ( 包括音乐，电影和图书分享，例如豆瓣，Mtime 等 ) 都取得很大的成功。这也进一步的说明了，Web2.0 环境下，在面对海量的数据，用户需要这种更加智能的，更加了解他们需求，口味和喜好的信息发现机制。</p>
								<p class="ibm-ind-link ibm-back-to-top" style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 5px; font-size: 0.76em; clear: both; text-align: right; height: 15px;">
										<a href="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html#ibm-pcon" class="ibm-anchor-up-link" style="color: rgb(153, 102, 153); display: inline; margin: 0px; padding: 0px 0px 0px 18px; text-decoration: none; background-image: url(http://1.www.s81c.com/i/v16/icons/u_bold.gif); font-weight: bold; background-position: 0px -1px; background-repeat: no-repeat no-repeat;">回页首</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<a name="major2">
												<span class="atitle" style="font-size: 1.5em; font-weight: bold;">推荐引擎</span>
										</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">前面介绍了推荐引擎对于现在的 Web2.0 站点的重要意义，这一章我们将讲讲推荐引擎到底是怎么工作的。推荐引擎利用特殊的信息过滤技术，将不同的物品或内容推荐给可能对它们感兴趣的用户。</p>
								<br />
								<a name="fig1">
										<b style="font-size: 0.76em; font-weight: bold; padding: 0.3em 5px 0.7em; font-family: arial, sans-serif;">图 1. 推荐引擎工作原理图</b>
								</a>
								<br />
								<img alt="图 1. 推荐引擎工作原理图" src="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/image003.jpg" style="border: 0px; padding: 0.3em 5px 0.7em;" height="296" width="403" />
								<span class="Apple-converted-space"> </span>
								<br />
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">图 1 给出了推荐引擎的工作原理图，这里先将推荐引擎看作黑盒，它接受的输入是推荐的数据源，一般情况下，推荐引擎所需要的数据源包括：</p>
								<ul style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 0.76em;">
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">要推荐物品或内容的元数据，例如关键字，基因描述等；</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">系统用户的基本信息，例如性别，年龄等</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">用户对物品或者信息的偏好，根据应用本身的不同，可能包括用户对物品的评分，用户查看物品的记录，用户的购买记录等。其实这些用户的偏好信息可以分为两类：</li>
								</ul>
								<ul style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 0.76em;">
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">显式的用户反馈：这类是用户在网站上自然浏览或者使用网站以外，显式的提供反馈信息，例如用户对物品的评分，或者对物品的评论。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">隐式的用户反馈：这类是用户在使用网站是产生的数据，隐式的反应了用户对物品的喜好，例如用户购买了某物品，用户查看了某物品的信息等等。</li>
								</ul>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">显式的用户反馈能准确的反应用户对物品的真实喜好，但需要用户付出额外的代价，而隐式的用户行为，通过一些分析和处理，也能反映用户的喜好，只是数据不是很精确，有些行为的分析存在较大的噪音。但只要选择正确的行为特征，隐式的用户反馈也能得到很好的效果，只是行为特征的选择可能在不同的应用中有很大的不同，例如在电子商务的网站上，购买行为其实就是一个能很好表现用户喜好的隐式反馈。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">推荐引擎根据不同的推荐机制可能用到数据源中的一部分，然后根据这些数据，分析出一定的规则或者直接对用户对其他物品的喜好进行预测计算。这样推荐引擎可以在用户进入的时候给他推荐他可能感兴趣的物品。</p>
								<p class="ibm-ind-link ibm-back-to-top" style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 5px; font-size: 0.76em; clear: both; text-align: right; height: 15px;">
										<a href="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html#ibm-pcon" class="ibm-anchor-up-link" style="color: rgb(153, 102, 153); display: inline; margin: 0px; padding: 0px 0px 0px 18px; text-decoration: none; background-image: url(http://1.www.s81c.com/i/v16/icons/u_bold.gif); font-weight: bold; background-position: 0px -1px; background-repeat: no-repeat no-repeat;">回页首</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<a name="major3">
												<span class="atitle" style="font-size: 1.5em; font-weight: bold;">推荐引擎的分类</span>
										</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">推荐引擎的分类可以根据很多指标，下面我们一一介绍一下：</p>
								<ol style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 0.76em;" type="1">
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">推荐引擎是不是为不同的用户推荐不同的数据<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0px 0px; font-size: 1em;">根据这个指标，推荐引擎可以分为基于大众行为的推荐引擎和个性化推荐引擎</p><ul style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 1em;"><li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">根据大众行为的推荐引擎，对每个用户都给出同样的推荐，这些推荐可以是静态的由系统管理员人工设定的，或者基于系统所有用户的反馈统计计算出的当下比较流行的物品。</li><li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">个性化推荐引擎，对不同的用户，根据他们的口味和喜好给出更加精确的推荐，这时，系统需要了解需推荐内容和用户的特质，或者基于社会化网络，通过找到与当前用户相同喜好的用户，实现推荐。</li></ul><p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0px 0px; font-size: 1em;">这是一个最基本的推荐引擎分类，其实大部分人们讨论的推荐引擎都是将个性化的推荐引擎，因为从根本上说，只有个性化的推荐引擎才是更加智能的信息发现过程。</p></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">根据推荐引擎的数据源<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0px 0px; font-size: 1em;">其实这里讲的是如何发现数据的相关性，因为大部分推荐引擎的工作原理还是基于物品或者用户的相似集进行推荐。那么参考图 1 给出的推荐系统原理图，根据不同的数据源发现数据相关性的方法可以分为以下几种：</p><ul style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 1em;"><li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">根据系统用户的基本信息发现用户的相关程度，这种被称为基于人口统计学的推荐（Demographic-based Recommendation）</li><li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">根据推荐物品或内容的元数据，发现物品或者内容的相关性，这种被称为基于内容的推荐（Content-based Recommendation）</li><li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">根据用户对物品或者信息的偏好，发现物品或者内容本身的相关性，或者是发现用户的相关性，这种被称为基于协同过滤的推荐（Collaborative Filtering-based Recommendation）。</li></ul></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">根据推荐模型的建立方式<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0px 0px; font-size: 1em;">可以想象在海量物品和用户的系统中，推荐引擎的计算量是相当大的，要实现实时的推荐务必需要建立一个推荐模型，关于推荐模型的建立方式可以分为以下几种：</p><ul style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 1em;"><li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">基于物品和用户本身的，这种推荐引擎将每个用户和每个物品都当作独立的实体，预测每个用户对于每个物品的喜好程度，这些信息往往是用一个二维矩阵描述的。由于用户感兴趣的物品远远小于总物品的数目，这样的模型导致大量的数据空置，即我们得到的二维矩阵往往是一个很大的稀疏矩阵。同时为了减小计算量，我们可以对物品和用户进行聚类， 然后记录和计算一类用户对一类物品的喜好程度，但这样的模型又会在推荐的准确性上有损失。</li><li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">基于关联规则的推荐（Rule-based Recommendation）：关联规则的挖掘已经是数据挖掘中的一个经典的问题，主要是挖掘一些数据的依赖关系，典型的场景就是“购物篮问题”，通过关联规则的挖掘，我们可以找到哪些物品经常被同时购买，或者用户购买了一些物品后通常会购买哪些其他的物品，当我们挖掘出这些关联规则之后，我们可以基于这些规则给用户进行推荐。</li><li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">基于模型的推荐（Model-based Recommendation）：这是一个典型的机器学习的问题，可以将已有的用户喜好信息作为训练样本，训练出一个预测用户喜好的模型，这样以后用户在进入系统，可以基于此模型计算推荐。这种方法的问题在于如何将用户实时或者近期的喜好信息反馈给训练好的模型，从而提高推荐的准确度。</li></ul></li>
								</ol>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">其实在现在的推荐系统中，很少有只使用了一个推荐策略的推荐引擎，一般都是在不同的场景下使用不同的推荐策略从而达到最好的推荐效果，例如 Amazon 的推荐，它将基于用户本身历史购买数据的推荐，和基于用户当前浏览的物品的推荐，以及基于大众喜好的当下比较流行的物品都在不同的区域推荐给用户，让用户可以从全方位的推荐中找到自己真正感兴趣的物品。</p>
								<p class="ibm-ind-link ibm-back-to-top" style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 5px; font-size: 0.76em; clear: both; text-align: right; height: 15px;">
										<a href="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html#ibm-pcon" class="ibm-anchor-up-link" style="color: rgb(153, 102, 153); display: inline; margin: 0px; padding: 0px 0px 0px 18px; text-decoration: none; background-image: url(http://1.www.s81c.com/i/v16/icons/u_bold.gif); font-weight: bold; background-position: 0px -1px; background-repeat: no-repeat no-repeat;">回页首</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<a name="major4">
												<span class="atitle" style="font-size: 1.5em; font-weight: bold;">深入推荐机制</span>
										</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">这一章的篇幅，将详细介绍各个推荐机制的工作原理，它们的优缺点以及应用场景。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<a name="minor4.1">
												<span class="smalltitle" style="font-size: 1.2em; font-weight: bold;">基于人口统计学的推荐</span>
										</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">基于人口统计学的推荐机制（Demographic-based Recommendation）是一种最易于实现的推荐方法，它只是简单的根据系统用户的基本信息发现用户的相关程度，然后将相似用户喜爱的其他物品推荐给当前用户，图 2 给出了这种推荐的工作原理。</p>
								<br />
								<a name="fig2">
										<b style="font-size: 0.76em; font-weight: bold; padding: 0.3em 5px 0.7em; font-family: arial, sans-serif;">图 2. 基于人口统计学的推荐机制的工作原理</b>
								</a>
								<br />
								<img alt="图 2. 基于人口统计学的推荐机制的工作原理" src="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/image005.jpg" style="border: 0px; padding: 0.3em 5px 0.7em;" height="213" width="351" />
								<span class="Apple-converted-space"> </span>
								<br />
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">从图中可以很清楚的看到，首先，系统对每个用户都有一个用户 Profile 的建模，其中包括用户的基本信息，例如用户的年龄，性别等等；然后，系统会根据用户的 Profile 计算用户的相似度，可以看到用户 A 的 Profile 和用户 C 一样，那么系统会认为用户 A 和 C 是相似用户，在推荐引擎中，可以称他们是“邻居”；最后，基于“邻居”用户群的喜好推荐给当前用户一些物品，图中将用户 A 喜欢的物品 A 推荐给用户 C。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">这种基于人口统计学的推荐机制的好处在于：</p>
								<ol style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 0.76em;" type="1">
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">因为不使用当前用户对物品的喜好历史数据，所以对于新用户来讲没有“冷启动（Cold Start）”的问题。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">这个方法不依赖于物品本身的数据，所以这个方法在不同物品的领域都可以使用，它是领域独立的（domain-independent）。</li>
								</ol>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">那么这个方法的缺点和问题是什么呢？这种基于用户的基本信息对用户进行分类的方法过于粗糙，尤其是对品味要求较高的领域，比如图书，电影和音乐等领域，无法得到很好的推荐效果。可能在一些电子商务的网站中，这个方法可以给出一些简单的推荐。另外一个局限是，这个方法可能涉及到一些与信息发现问题本身无关却比较敏感的信息，比如用户的年龄等，这些用户信息不是很好获取。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<a name="minor4.2">
												<span class="smalltitle" style="font-size: 1.2em; font-weight: bold;">基于内容的推荐</span>
										</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">基于内容的推荐是在推荐引擎出现之初应用最为广泛的推荐机制，它的核心思想是根据推荐物品或内容的元数据，发现物品或者内容的相关性，然后基于用户以往的喜好记录，推荐给用户相似的物品。图 3 给出了基于内容推荐的基本原理。</p>
								<br />
								<a name="fig3">
										<b style="font-size: 0.76em; font-weight: bold; padding: 0.3em 5px 0.7em; font-family: arial, sans-serif;">图 3. 基于内容推荐机制的基本原理</b>
								</a>
								<br />
								<img alt="图 3. 基于内容推荐机制的基本原理" src="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/image007.jpg" style="border: 0px; padding: 0.3em 5px 0.7em;" height="220" width="357" />
								<span class="Apple-converted-space"> </span>
								<br />
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">图 3 中给出了基于内容推荐的一个典型的例子，电影推荐系统，首先我们需要对电影的元数据有一个建模，这里只简单的描述了一下电影的类型；然后通过电影的元数据发现电影间的相似度，因为类型都是“爱情，浪漫”电影 A 和 C 被认为是相似的电影（当然，只根据类型是不够的，要得到更好的推荐，我们还可以考虑电影的导演，演员等等）；最后实现推荐，对于用户 A，他喜欢看电影 A，那么系统就可以给他推荐类似的电影 C。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">这种基于内容的推荐机制的好处在于它能很好的建模用户的口味，能提供更加精确的推荐。但它也存在以下几个问题：</p>
								<ol style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 0.76em;" type="1">
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">需要对物品进行分析和建模，推荐的质量依赖于对物品模型的完整和全面程度。在现在的应用中我们可以观察到关键词和标签（Tag）被认为是描述物品元数据的一种简单有效的方法。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">物品相似度的分析仅仅依赖于物品本身的特征，这里没有考虑人对物品的态度。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">因为需要基于用户以往的喜好历史做出推荐，所以对于新用户有“冷启动”的问题。</li>
								</ol>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">虽然这个方法有很多不足和问题，但他还是成功的应用在一些电影，音乐，图书的社交站点，有些站点还请专业的人员对物品进行基因编码，比如潘多拉，在一份报告中说道，在潘多拉的推荐引擎中，每首歌有超过 100 个元数据特征，包括歌曲的风格，年份，演唱者等等。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<a name="minor4.3">
												<span class="smalltitle" style="font-size: 1.2em; font-weight: bold;">基于协同过滤的推荐</span>
										</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">随着 Web2.0 的发展，Web 站点更加提倡用户参与和用户贡献，因此基于协同过滤的推荐机制因运而生。它的原理很简单，就是根据用户对物品或者信息的偏好，发现物品或者内容本身的相关性，或者是发现用户的相关性，然后再基于这些关联性进行推荐。基于协同过滤的推荐可以分为三个子类：基于用户的推荐（User-based Recommendation），基于项目的推荐（Item-based Recommendation）和基于模型的推荐（Model-based Recommendation）。下面我们一个一个详细的介绍着三种协同过滤的推荐机制。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<strong>基于用户的协同过滤推荐</strong>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">基于用户的协同过滤推荐的基本原理是，根据所有用户对物品或者信息的偏好，发现与当前用户口味和偏好相似的“邻居”用户群，在一般的应用中是采用计算“K- 邻居”的算法；然后，基于这 K 个邻居的历史偏好信息，为当前用户进行推荐。下图 4 给出了原理图。</p>
								<br />
								<a name="fig4">
										<b style="font-size: 0.76em; font-weight: bold; padding: 0.3em 5px 0.7em; font-family: arial, sans-serif;">图 4. 基于用户的协同过滤推荐机制的基本原理</b>
								</a>
								<br />
								<img alt="图 4. 基于用户的协同过滤推荐机制的基本原理" src="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/image009.jpg" style="border: 0px; padding: 0.3em 5px 0.7em;" height="210" width="287" />
								<span class="Apple-converted-space"> </span>
								<br />
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">上图示意出基于用户的协同过滤推荐机制的基本原理，假设用户 A 喜欢物品 A，物品 C，用户 B 喜欢物品 B，用户 C 喜欢物品 A ，物品 C 和物品 D；从这些用户的历史喜好信息中，我们可以发现用户 A 和用户 C 的口味和偏好是比较类似的，同时用户 C 还喜欢物品 D，那么我们可以推断用户 A 可能也喜欢物品 D，因此可以将物品 D 推荐给用户 A。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">基于用户的协同过滤推荐机制和基于人口统计学的推荐机制都是计算用户的相似度，并基于“邻居”用户群计算推荐，但它们所不同的是如何计算用户的相似度，基于人口统计学的机制只考虑用户本身的特征，而基于用户的协同过滤机制可是在用户的历史偏好的数据上计算用户的相似度，它的基本假设是，喜欢类似物品的用户可能有相同或者相似的口味和偏好。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<strong>基于项目的协同过滤推荐</strong>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">基于项目的协同过滤推荐的基本原理也是类似的，只是说它使用所有用户对物品或者信息的偏好，发现物品和物品之间的相似度，然后根据用户的历史偏好信息，将类似的物品推荐给用户，图 5 很好的诠释了它的基本原理。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">假设用户 A 喜欢物品 A 和物品 C，用户 B 喜欢物品 A，物品 B 和物品 C，用户 C 喜欢物品 A，从这些用户的历史喜好可以分析出物品 A 和物品 C 时比较类似的，喜欢物品 A 的人都喜欢物品 C，基于这个数据可以推断用户 C 很有可能也喜欢物品 C，所以系统会将物品 C 推荐给用户 C。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">与上面讲的类似，基于项目的协同过滤推荐和基于内容的推荐其实都是基于物品相似度预测推荐，只是相似度计算的方法不一样，前者是从用户历史的偏好推断，而后者是基于物品本身的属性特征信息。</p>
								<br />
								<a name="fig5">
										<b style="font-size: 0.76em; font-weight: bold; padding: 0.3em 5px 0.7em; font-family: arial, sans-serif;">图 5. 基于项目的协同过滤推荐机制的基本原理</b>
								</a>
								<br />
								<img alt="图 5. 基于项目的协同过滤推荐机制的基本原理" src="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/image011.jpg" style="border: 0px; padding: 0.3em 5px 0.7em;" height="213" width="301" />
								<span class="Apple-converted-space"> </span>
								<br />
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">同时协同过滤，在基于用户和基于项目两个策略中应该如何选择呢？其实基于项目的协同过滤推荐机制是 Amazon 在基于用户的机制上改良的一种策略，因为在大部分的 Web 站点中，物品的个数是远远小于用户的数量的，而且物品的个数和相似度相对比较稳定，同时基于项目的机制比基于用户的实时性更好一些。但也不是所有的场景都是这样的情况，可以设想一下在一些新闻推荐系统中，也许物品，也就是新闻的个数可能大于用户的个数，而且新闻的更新程度也有很快，所以它的形似度依然不稳定。所以，其实可以看出，推荐策略的选择其实和具体的应用场景有很大的关系。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<strong>基于模型的协同过滤推荐</strong>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">基于模型的协同过滤推荐就是基于样本的用户喜好信息，训练一个推荐模型，然后根据实时的用户喜好的信息进行预测，计算推荐。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">基于协同过滤的推荐机制是现今应用最为广泛的推荐机制，它有以下几个显著的优点：</p>
								<ol style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 0.76em;" type="1">
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">它不需要对物品或者用户进行严格的建模，而且不要求物品的描述是机器可理解的，所以这种方法也是领域无关的。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">这种方法计算出来的推荐是开放的，可以共用他人的经验，很好的支持用户发现潜在的兴趣偏好</li>
								</ol>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">而它也存在以下几个问题：</p>
								<ol style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 0.76em;" type="1">
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">方法的核心是基于历史数据，所以对新物品和新用户都有“冷启动”的问题。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">推荐的效果依赖于用户历史偏好数据的多少和准确性。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">在大部分的实现中，用户历史偏好是用稀疏矩阵进行存储的，而稀疏矩阵上的计算有些明显的问题，包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">对于一些特殊品味的用户不能给予很好的推荐。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">由于以历史数据为基础，抓取和建模用户的偏好后，很难修改或者根据用户的使用演变，从而导致这个方法不够灵活。</li>
								</ol>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<a name="minor4.4">
												<span class="smalltitle" style="font-size: 1.2em; font-weight: bold;">混合的推荐机制</span>
										</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">在现行的 Web 站点上的推荐往往都不是单纯只采用了某一种推荐的机制和策略，他们往往是将多个方法混合在一起，从而达到更好的推荐效果。关于如何组合各个推荐机制，这里讲几种比较流行的组合方法。</p>
								<ol style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 0.76em;" type="1">
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">加权的混合（Weighted Hybridization）: 用线性公式（linear formula）将几种不同的推荐按照一定权重组合起来，具体权重的值需要在测试数据集上反复实验，从而达到最好的推荐效果。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">切换的混合（Switching Hybridization）：前面也讲到，其实对于不同的情况（数据量，系统运行状况，用户和物品的数目等），推荐策略可能有很大的不同，那么切换的混合方式，就是允许在不同的情况下，选择最为合适的推荐机制计算推荐。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">分区的混合（Mixed Hybridization）：采用多种推荐机制，并将不同的推荐结果分不同的区显示给用户。其实，Amazon，当当网等很多电子商务网站都是采用这样的方式，用户可以得到很全面的推荐，也更容易找到他们想要的东西。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 5px; padding-right: 5px; padding-bottom: 3px;">分层的混合（Meta-Level Hybridization）: 采用多种推荐机制，并将一个推荐机制的结果作为另一个的输入，从而综合各个推荐机制的优缺点，得到更加准确的推荐。</li>
								</ol>
								<p class="ibm-ind-link ibm-back-to-top" style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 5px; font-size: 0.76em; clear: both; text-align: right; height: 15px;">
										<a href="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html#ibm-pcon" class="ibm-anchor-up-link" style="color: rgb(153, 102, 153); display: inline; margin: 0px; padding: 0px 0px 0px 18px; text-decoration: none; background-image: url(http://1.www.s81c.com/i/v16/icons/u_bold.gif); font-weight: bold; background-position: 0px -1px; background-repeat: no-repeat no-repeat;">回页首</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<a name="major5">
												<span class="atitle" style="font-size: 1.5em; font-weight: bold;">推荐引擎的应用</span>
										</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">介绍完推荐引擎的基本原理，基本推荐机制，下面简要分析几个有代表性的推荐引擎的应用，这里选择两个领域：Amazon 作为电子商务的代表，豆瓣作为社交网络的代表。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<strong>推荐在电子商务中的应用 – Amazon</strong>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">Amazon 作为推荐引擎的鼻祖，它已经将推荐的思想渗透在应用的各个角落。Amazon 推荐的核心是通过数据挖掘算法和比较用户的消费偏好于其他用户进行对比，借以预测用户可能感兴趣的商品。对应于上面介绍的各种推荐机制，Amazon 采用的是分区的混合的机制，并将不同的推荐结果分不同的区显示给用户，图 6 和图 7 展示了用户在 Amazon 上能得到的推荐。</p>
								<br />
								<a name="fig6">
										<b style="font-size: 0.76em; font-weight: bold; padding: 0.3em 5px 0.7em; font-family: arial, sans-serif;">图 6. Amazon 的推荐机制 - 首页</b>
								</a>
								<br />
								<img alt="图 6. Amazon 的推荐机制 - 首页" src="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/image013.gif" style="border: 0px; padding: 0.3em 5px 0.7em;" height="329" width="511" />
								<span class="Apple-converted-space"> </span>
								<br />
								<br />
								<a name="fig7">
										<b style="font-size: 0.76em; font-weight: bold; padding: 0.3em 5px 0.7em; font-family: arial, sans-serif;">图 7. Amazon 的推荐机制 - 浏览物品</b>
								</a>
								<br />
								<img alt="图 7. Amazon 的推荐机制 - 浏览物品" src="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/image015.gif" style="border: 0px; padding: 0.3em 5px 0.7em;" height="339" width="475" />
								<span class="Apple-converted-space"> </span>
								<br />
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">Amazon 利用可以记录的所有用户在站点上的行为，根据不同数据的特点对它们进行处理，并分成不同区为用户推送推荐：</p>
								<ul style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 0.76em;">
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">今日推荐 (Today's Recommendation For You): 通常是根据用户的近期的历史购买或者查看记录，并结合时下流行的物品给出一个折中的推荐。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">新产品的推荐 (New For You): 采用了基于内容的推荐机制 (Content-based Recommendation)，将一些新到物品推荐给用户。在方法选择上由于新物品没有大量的用户喜好信息，所以基于内容的推荐能很好的解决这个“冷启动”的问题。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">捆绑销售 (Frequently Bought Together): 采用数据挖掘技术对用户的购买行为进行分析，找到经常被一起或同一个人购买的物品集，进行捆绑销售，这是一种典型的基于项目的协同过滤推荐机制。</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">别人购买 / 浏览的商品 (Customers Who Bought/See This Item Also Bought/See): 这也是一个典型的基于项目的协同过滤推荐的应用，通过社会化机制用户能更快更方便的找到自己感兴趣的物品。</li>
								</ul>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">值得一提的是，Amazon 在做推荐时，设计和用户体验也做得特别独到：</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">Amazon 利用有它大量历史数据的优势，量化推荐原因。</p>
								<ul style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 0.76em;">
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">基于社会化的推荐，Amazon 会给你事实的数据，让用户信服，例如：购买此物品的用户百分之多少也购买了那个物品；</li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">基于物品本身的推荐，Amazon 也会列出推荐的理由，例如：因为你的购物框中有 ***，或者因为你购买过 ***，所以给你推荐类似的 ***。</li>
								</ul>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">另外，Amazon 很多推荐是基于用户的 profile 计算出来的，用户的 profile 中记录了用户在 Amazon 上的行为，包括看了那些物品，买了那些物品，收藏夹和 wish list 里的物品等等，当然 Amazon 里还集成了评分等其他的用户反馈的方式，它们都是 profile 的一部分，同时，Amazon 提供了让用户自主管理自己 profile 的功能，通过这种方式用户可以更明确的告诉推荐引擎他的品味和意图是什么。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<strong>推荐在社交网站中的应用 – 豆瓣</strong>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">豆瓣是国内做的比较成功的社交网站，它以图书，电影，音乐和同城活动为中心，形成一个多元化的社交网络平台，自然推荐的功能是必不可少的，下面我们看看豆瓣是如何推荐的。</p>
								<br />
								<a name="fig8">
										<b style="font-size: 0.76em; font-weight: bold; padding: 0.3em 5px 0.7em; font-family: arial, sans-serif;">图 8 . 豆瓣的推荐机制 - 豆瓣电影</b>
								</a>
								<br />
								<img alt="图 8 . 豆瓣的推荐机制 - 豆瓣电影" src="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/image017.gif" style="border: 0px; padding: 0.3em 5px 0.7em;" height="259" width="336" />
								<span class="Apple-converted-space"> </span>
								<br />
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">当你在豆瓣电影中将一些你看过的或是感兴趣的电影加入你看过和想看的列表里，并为它们做相应的评分，这时豆瓣的推荐引擎已经拿到你的一些偏好信息，那么它将给你展示如图 8 的电影推荐。</p>
								<br />
								<a name="fig9">
										<b style="font-size: 0.76em; font-weight: bold; padding: 0.3em 5px 0.7em; font-family: arial, sans-serif;">图 9 . 豆瓣的推荐机制 - 基于用户品味的推荐</b>
								</a>
								<br />
								<img alt="图 9 . 豆瓣的推荐机制 - 基于用户品味的推荐" src="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/image019.gif" style="border: 0px; padding: 0.3em 5px 0.7em;" height="333" width="395" />
								<span class="Apple-converted-space"> </span>
								<br />
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">豆瓣的推荐是通过“豆瓣猜”，为了让用户清楚这些推荐是如何来的，豆瓣还给出了“豆瓣猜”的一个简要的介绍。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<em>“</em>
										<em>你的个人推荐是根据你的收藏和评价自动得出的，每个人的推荐清单都不同。你的收藏和评价越多，豆瓣给你的推荐会越准确和丰富。</em>
										<br />
										<em>每天推荐的内容可能会有变化。随着豆瓣的长大，给你推荐的内容也会越来越准。</em>
										<em>”</em>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">这一点让我们可以清晰明了的知道，豆瓣必然是基于社会化的协同过滤的推荐，这样用户越多，用户的反馈越多，那么推荐的效果会越来越准确。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">相对于 Amazon 的用户行为模型，豆瓣电影的模型更加简单，就是“看过”和“想看”，这也让他们的推荐更加专注于用户的品味，毕竟买东西和看电影的动机还是有很大不同的。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">另外，豆瓣也有基于物品本身的推荐，当你查看一些电影的详细信息的时候，他会给你推荐出“喜欢这个电影的人也喜欢的电影”， 如图 10，这是一个基于协同过滤的应用。</p>
								<br />
								<a name="fig10">
										<b style="font-size: 0.76em; font-weight: bold; padding: 0.3em 5px 0.7em; font-family: arial, sans-serif;">图 10 . 豆瓣的推荐机制 - 基于电影本身的推荐</b>
								</a>
								<br />
								<img alt="图 10 . 豆瓣的推荐机制 - 基于电影本身的推荐" src="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/image021.gif" style="border: 0px; padding: 0.3em 5px 0.7em;" height="199" width="356" />
								<span class="Apple-converted-space"> </span>
								<br />
								<p class="ibm-ind-link ibm-back-to-top" style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 5px; font-size: 0.76em; clear: both; text-align: right; height: 15px;">
										<a href="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html#ibm-pcon" class="ibm-anchor-up-link" style="color: rgb(153, 102, 153); display: inline; margin: 0px; padding: 0px 0px 0px 18px; text-decoration: none; background-image: url(http://1.www.s81c.com/i/v16/icons/u_bold.gif); font-weight: bold; background-position: 0px -1px; background-repeat: no-repeat no-repeat;">回页首</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<a name="major6">
												<span class="atitle" style="font-size: 1.5em; font-weight: bold;">总结</span>
										</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">在网络数据爆炸的年代，如何让用户更快的找到想要的数据，如何让用户发现自己潜在的兴趣和需求，无论是对于电子商务还是社会网络的应用都是至关重要的。推荐引擎的出现，使得这个问题越来越被大家关注。但对大多数人来讲，也许还在惊叹它为什么总是能猜到你到底想要些什么。推荐引擎的魔力在于你不清楚在这个推荐背后，引擎到底记录和推理了些什么。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">通过这篇综述性的文章，你可以了解，其实推荐引擎只是默默的记录和观察你的一举一动，然后再借由所有用户产生的海量数据分析和发现其中的规律，进而慢慢的了解你，你的需求，你的习惯，并默默的无声息的帮助你快速的解决你的问题，找到你想要的东西。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">其实，回头想想，很多时候，推荐引擎比你更了解你自己。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">通过第一篇文章，相信大家对推荐引擎有一个清晰的第一印象，本系列的下一篇文章将深入介绍基于协同过滤的推荐策略。在现今的推荐技术和算法中，最被大家广泛认可和采用的就是基于协同过滤的推荐方法。它以其方法模型简单，数据依赖性低，数据方便采集，推荐效果较优等多个优点成为大众眼里的推荐算法“No.1”。本文将带你深入了解协同过滤的秘密，并给出基于 Apache Mahout 的协同过滤算法的高效实现。Apache Mahout 是 ASF 的一个较新的开源项目，它源于 Lucene，构建在 Hadoop 之上，关注海量数据上的机器学习经典算法的高效实现。</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">感谢大家对本系列的关注和支持。</p>
								<p class="ibm-ind-link ibm-back-to-top" style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 5px; font-size: 0.76em; clear: both; text-align: right; height: 15px;">
										<a href="http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html#ibm-pcon" class="ibm-anchor-up-link" style="color: rgb(153, 102, 153); display: inline; margin: 0px; padding: 0px 0px 0px 18px; text-decoration: none; background-image: url(http://1.www.s81c.com/i/v16/icons/u_bold.gif); font-weight: bold; background-position: 0px -1px; background-repeat: no-repeat no-repeat;">回页首</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<a name="major7">
												<span class="atitle" style="font-size: 1.5em; font-weight: bold;">声明</span>
										</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">本人所发表的内容仅为个人观点，不代表 IBM 公司立场、战略和观点。</p>
								<br />
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<a name="resources">
												<span class="atitle" style="font-size: 1.5em; font-weight: bold;">参考资料</span>
										</a>
								</p>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<b style="font-size: 1em; font-weight: bold;">学习</b>
								</p>
								<ul style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 0.76em;">
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">
												<a href="http://www.slideshare.net/antiraum/recommender-engines-seminar-paper" style="color: rgb(153, 102, 153);">Recommendation Engines Seminar Paper</a>, Thomas Hess, 2009: 推荐引擎的总结性文章，Thomas 给出推荐引擎的模型，各种推荐机制的工作原理，并分析了推荐引擎面临的众多问题。<br /><br /></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">
												<a href="http://portal.acm.org/citation.cfm?id=1070751" style="color: rgb(153, 102, 153);">Toward the Next Generation of Recommender Systems: A Survey of the State-of-the-Art and Possible Extensions</a>, Adomavicius, G.; Tuzhilin, A., 2005：2005 年的论文，对现今流行的推荐技术进行总结，深入具体的实现技术方法，同时也提出了对下一代推荐引擎的展望。<br /><br /></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">
												<a href="http://www.springerlink.com/index/KK844421T5466K35.pdf" style="color: rgb(153, 102, 153);">A Taxonomy of RecommenderAgents on the Internet</a>, Montaner, M.; Lopez, B.; de la Rosa, J. L., 2003, 对互联网上推荐引擎进行总结，给出的不同推荐方法的分类和特点，帮助读者对推荐引擎有全面的认识。<br /><br /></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">Amazon:<span class="Apple-converted-space"> </span><a href="http://www.amazon.com/" style="color: rgb(153, 102, 153);">www.amazon.com</a>：推荐技术的先驱，Amazon 在 B2C 领域的推荐技术值得大家参考。<br /><br /></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">豆瓣：<a href="http://www.douban.com/" style="color: rgb(153, 102, 153);">www.douban.com</a>：作为国内社交网络的先驱，豆瓣在推荐技术上也处于领先的位置，同时对于不同内容的推荐策略有深入的研究。<br /><br /></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">
												<a href="http://blog.csdn.net/java060515/archive/2007/04/19/1570243.aspx" style="color: rgb(153, 102, 153);">个性化推荐技术漫谈</a>：对个性化推荐技术的基本原理进行简要介绍，提出了作者对优秀的个性化推荐的多角度认识<br /><br /></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">
												<a href="https://groups.google.com/group/resys" style="color: rgb(153, 102, 153);">Google Recommender System Group</a>：推荐系统的 Google 讨论组，有很多关于推荐引擎的有趣讨论<br /><br /></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">
												<a href="http://www.deitel.com/ResourceCenters/Web20/RecommenderSystems/RecommenderSystemAlgorithms/tabid/1317/Default.aspx" style="color: rgb(153, 102, 153);">Recommender System Algorithms</a>：关于推荐引擎算法的资源<br /><br /></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">
												<a href="http://www.slideshare.net/rashmi/design-of-recommender-systems" style="color: rgb(153, 102, 153);">Design of Recommender System</a>：关于推荐引擎的设计方法的介绍<br /><br /></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">
												<a href="http://www.slideshare.net/blueace/how-to-build-a-recommender-system-presentation" style="color: rgb(153, 102, 153);">How to build a recommender system</a>：这个演示给出了如何构建一个推荐引擎，并结合例子详细介绍了基于协同过滤的推荐策略。<br /><br /></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">
												<a href="http://www.ibm.com/developerworks/cn/web/" style="color: rgb(153, 102, 153);">developerWorks</a>
												<a href="http://www.ibm.com/developerworks/cn/web/" style="color: rgb(153, 102, 153);">Web</a>
												<a href="http://www.ibm.com/developerworks/cn/web/" style="color: rgb(153, 102, 153);">技术专区</a>：数百篇关于 Web 编程各个方面的文章。<span class="Apple-converted-space"> </span><br /><br /><br /></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">
												<a href="http://www.ibm.com/developerworks/cn/ajax/" style="color: rgb(153, 102, 153);">developerWorks Ajax 资源中心</a>：这是有关 Ajax 编程模型信息的一站式中心，包括很多文档、教程、论坛、blog、wiki 和新闻。任何 Ajax 的新信息都能在这里找到。<br /><br /></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">
												<a href="http://www.ibm.com/developerworks/cn/web20/" style="color: rgb(153, 102, 153);">developerWorks Web 2.0 资源中心</a>，这是有关 Web 2.0 相关信息的一站式中心，包括大量 Web 2.0 技术文章、教程、下载和相关技术资源。您还可以通过<span class="Apple-converted-space"> </span><a href="http://www.ibm.com/developerworks/cn/web20/newto/" style="color: rgb(153, 102, 153);">Web 2.0 新手入门</a>栏目，迅速了解 Web 2.0 的相关概念。<br /><br /></li>
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">查看<span class="Apple-converted-space"> </span><a href="http://www.ibm.com/developerworks/cn/web/lp/html5/" style="color: rgb(153, 102, 153);">HTML5 专题</a>，了解更多和 HTML5 相关的知识和动向。<br /><br /></li>
								</ul>
								<p style="font-family: arial, nsimsun, sans-serif; margin: 0px; padding: 0.3em 5px 0.7em; font-size: 0.76em;">
										<b style="font-size: 1em; font-weight: bold;">讨论</b>
								</p>
								<ul style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 5px; font-size: 0.76em;">
										<li style="font-family: arial, nsimsun, sans-serif; margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-right: 5px; padding-bottom: 3px;">加入<span class="Apple-converted-space"> </span><a href="http://www.ibm.com/developerworks/cn/community/" style="color: rgb(153, 102, 153);">developerWorks 中文社区</a>。</li>
								</ul>
						</div>
				</div>
		</div>
<img src ="http://www.blogjava.net/libin2722/aggbug/396035.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-03-04 14:30 <a href="http://www.blogjava.net/libin2722/articles/396035.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>一个类引发的回忆</title><link>http://www.blogjava.net/libin2722/archive/2013/03/01/395890.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 01 Mar 2013 01:52:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2013/03/01/395890.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/395890.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2013/03/01/395890.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/395890.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/395890.html</trackback:ping><description><![CDATA[没事查看很早以前的备份文件，发现7年前写的一个连库类，想起了当年的点点滴滴，原来代码也是有生命的。<br /><br /><br /><div style="background-color:#eeeeee;font-size:13px;BORDER:1px solid #CCCCCC;PADDING-RIGHT: 5px;PADDING-BOTTOM: 4px;PADDING-left: 4px;PADDING-TOP: 4px;WIDTH: 98%;word-break:break-all"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000FF; ">package</span><span style="color: #000000; "> com.itgenius.netoa.admin;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.sql.</span><span style="color: #000000; ">*</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> javax.sql.</span><span style="color: #000000; ">*</span><span style="color: #000000; ">;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> javax.naming.Context;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> javax.naming.InitialContext;<br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> javax.naming.</span><span style="color: #000000; ">*</span><span style="color: #000000; ">;<br /><br /></span><span style="color: #0000FF; ">import</span><span style="color: #000000; "> java.util.List;<br /><br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">class</span><span style="color: #000000; "> EJBDAO </span><span style="color: #0000FF; ">implements</span><span style="color: #000000; "> ApplicationUtil {<br />  </span><span style="color: #0000FF; ">private</span><span style="color: #000000; ">  Connection conn</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br />  </span><span style="color: #0000FF; ">private</span><span style="color: #000000; "> Statement st</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br />  </span><span style="color: #0000FF; ">private</span><span style="color: #000000; "> PreparedStatement pst</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br />  </span><span style="color: #0000FF; ">private</span><span style="color: #000000; "> CallableStatement cs</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br />  </span><span style="color: #0000FF; ">private</span><span style="color: #000000; "> ResultSet rs</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br />  </span><span style="color: #0000FF; ">private</span><span style="color: #000000; "> DataSource ds</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">;<br />  </span><span style="color: #0000FF; ">private</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; "> isCorrect</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br /><br />  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> EJBDAO() {<br />  }<br />  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> getConnection(){<br />    </span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">{<br />      Context ctx </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">new</span><span style="color: #000000; "> InitialContext();<br />      ds</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(DataSource)ctx.lookup(dsJndi);<br />      conn</span><span style="color: #000000; ">=</span><span style="color: #000000; ">ds.getConnection();<br />    }</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; "> (NamingException ex) {<br />      ex.printStackTrace();<br />    }</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">(SQLException e){<br />      e.printStackTrace();<br />    }<br />  }<br />  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> getConnection(String dburl,String dbdriver,String dbusername,String dbpasswd){<br />  }<br />  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> getStatement(){<br />    </span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">{<br />      getConnection();<br />      st </span><span style="color: #000000; ">=</span><span style="color: #000000; "> conn.createStatement();<br />    }</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; "> (SQLException ex) {<br />      ex.printStackTrace();<br />    }<br />  }<br />  </span><span style="color: #008000; ">//</span><span style="color: #008000; ">得到预备状态通道</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> getPStatement(String sql){<br />    </span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">{<br />      getConnection();<br />      pst </span><span style="color: #000000; ">=</span><span style="color: #000000; "> conn.prepareStatement(sql);<br />    }</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; "> (SQLException ex) {<br />    }<br />  }<br />  </span><span style="color: #008000; ">//</span><span style="color: #008000; ">执行查询得到结果集</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> ResultSet getResultSet(String sql){<br />    </span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">{<br />       getStatement();<br />       rs</span><span style="color: #000000; ">=</span><span style="color: #000000; ">st.executeQuery(sql);<br />    }</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">(SQLException ex) {<br />    }</span><span style="color: #0000FF; ">finally</span><span style="color: #000000; ">{<br />       </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> rs;<br />    }<br />  }<br />  </span><span style="color: #008000; ">//</span><span style="color: #008000; ">给预备状态通道中的sql的变量付值，然后执行</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; "> executePstatement(List list){<br />     isCorrect</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />     </span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">{<br />          </span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">; i </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; "> list.size(); i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">){<br />            pst.setString((i </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">), list.get(i).toString());<br />          }<br />          pst.executeUpdate();<br />          isCorrect</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />      }</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; "> (SQLException ex) {<br />      }</span><span style="color: #0000FF; ">finally</span><span style="color: #000000; ">{<br />         </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> isCorrect;<br />      }<br />  }<br />  </span><span style="color: #008000; ">//</span><span style="color: #008000; ">执行新增、修改、删除</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; "> doUpdate(String sql){<br />    isCorrect</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />    </span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">{<br />      getStatement();<br />      st.executeUpdate(sql);<br />      isCorrect</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />    }</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; "> (SQLException ex){<br />       ex.printStackTrace();<br />    }</span><span style="color: #0000FF; ">finally</span><span style="color: #000000; ">{<br />      </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> isCorrect;<br />    }<br />  }<br />  </span><span style="color: #008000; ">//</span><span style="color: #008000; ">执行存储过程</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; "> doProcure(String pname,List list){<br />      isCorrect</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />    </span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">{<br />        getConnection();<br />       cs</span><span style="color: #000000; ">=</span><span style="color: #000000; ">conn.prepareCall(</span><span style="color: #000000; ">"</span><span style="color: #000000; ">{call </span><span style="color: #000000; ">"</span><span style="color: #000000; ">+</span><span style="color: #000000; ">pname</span><span style="color: #000000; ">+</span><span style="color: #000000; ">"</span><span style="color: #000000; ">}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">);<br />       </span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">; i </span><span style="color: #000000; ">&lt;</span><span style="color: #000000; "> list.size(); i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">)<br />       {<br />           cs.setString((i </span><span style="color: #000000; ">+</span><span style="color: #000000; "> </span><span style="color: #000000; ">1</span><span style="color: #000000; ">), list.get(i).toString());<br />       }<br />       cs.execute();<br />       isCorrect</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />    }</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; "> (SQLException ex) {<br />    }</span><span style="color: #0000FF; ">finally</span><span style="color: #000000; ">{<br />      </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> isCorrect;<br />    }<br />  }<br />  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> addBatch(List list){<br />    </span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">{<br />      </span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> i</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0</span><span style="color: #000000; ">;i</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">list.size();i</span><span style="color: #000000; ">++</span><span style="color: #000000; ">){<br />        st.addBatch(list.get(i).toString());<br />      }<br />    }</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">(Exception e){<br />    }<br />  }<br />  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">boolean</span><span style="color: #000000; "> ExecuteBatch(){<br />     isCorrect</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">false</span><span style="color: #000000; ">;<br />     </span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">{<br />       st.executeBatch();<br />       isCorrect</span><span style="color: #000000; ">=</span><span style="color: #0000FF; ">true</span><span style="color: #000000; ">;<br />     }</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; ">(Exception e){<br />        e.printStackTrace();<br />     }</span><span style="color: #0000FF; ">finally</span><span style="color: #000000; ">{<br />        Close();<br />        </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> isCorrect;<br />     }<br />  }<br />  </span><span style="color: #008000; ">//</span><span style="color: #008000; ">关闭连接</span><span style="color: #008000; "><br /></span><span style="color: #000000; ">  </span><span style="color: #0000FF; ">public</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">void</span><span style="color: #000000; "> Close(){<br />      </span><span style="color: #0000FF; ">try</span><span style="color: #000000; ">{<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(rs</span><span style="color: #000000; ">!=</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">)<br />        {<br />          rs.close();<br />        }<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(st</span><span style="color: #000000; ">!=</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">){<br />          st.close();<br />        }<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(pst</span><span style="color: #000000; ">!=</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">)<br />        {<br />          pst.close();<br />        }<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(cs</span><span style="color: #000000; ">!=</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">)<br />          cs.close();<br />        </span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">(conn</span><span style="color: #000000; ">!=</span><span style="color: #0000FF; ">null</span><span style="color: #000000; ">)<br />        conn.close();<br />      }</span><span style="color: #0000FF; ">catch</span><span style="color: #000000; "> (SQLException ex) {<br />      }<br />  }<br /><br />}<br /></span></div><br /><img src ="http://www.blogjava.net/libin2722/aggbug/395890.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-03-01 09:52 <a href="http://www.blogjava.net/libin2722/archive/2013/03/01/395890.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置_Druid和Spring关联监控配置</title><link>http://www.blogjava.net/libin2722/articles/395482.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 20 Feb 2013 09:40:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/395482.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/395482.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/395482.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/395482.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/395482.html</trackback:ping><description><![CDATA[
		<p style="margin-top: 0px !important; margin-right: 0px; margin-bottom: 15px; margin-left: 0px; padding: 0px; border: 0px; color: rgb(51, 51, 51); font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">Druid提供了Spring和Jdbc的关联监控。</p>
		<h1 style="margin: 20px 0px 10px; padding: 0px; border: 0px; font-weight: bold; -webkit-font-smoothing: antialiased; cursor: text; position: relative; font-size: 28px; color: rgb(0, 0, 0); font-family: Helvetica, arial, freesans, clean, sans-serif; font-style: normal; font-variant: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">配置spring</h1>
		<p style="margin: 0px 0px 15px; padding: 0px; border: 0px; color: rgb(51, 51, 51); font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">com.alibaba.druid.support.spring.stat.DruidStatInterceptor是一个标准的Spring MethodInterceptor。可以灵活进行AOP配置。</p>
		<p style="margin: 15px 0px; padding: 0px; border: 0px; color: rgb(51, 51, 51); font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">Spring AOP的配置文档：<span class="Apple-converted-space"> </span><a href="http://static.springsource.org/spring/docs/current/spring-framework-reference/html/aop-api.html" style="margin: 0px; padding: 0px; border: 0px; color: rgb(65, 131, 196); text-decoration: none;">http://static.springsource.org/spring/docs/current/spring-framework-reference/html/aop-api.html</a></p>
		<h2 style="margin: 20px 0px 10px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-weight: bold; -webkit-font-smoothing: antialiased; cursor: text; position: relative; font-size: 24px; color: rgb(0, 0, 0); font-family: Helvetica, arial, freesans, clean, sans-serif; font-style: normal; font-variant: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">按类型拦截配置</h2>
		<pre style="margin: 15px 0px; padding: 6px 10px; border: 1px solid rgb(204, 204, 204); font-size: 13px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); line-height: 19px; overflow: auto; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; color: rgb(51, 51, 51); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
				<code style="margin: 0px; padding: 0px; border: none; font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: pre; background-position: initial initial; background-repeat: initial initial;">  &lt;bean id="druid-stat-interceptor"
    class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"&gt;
  &lt;/bean&gt;

  &lt;bean id="druid-type-proxyCreator" class="com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator"&gt;
    &lt;!-- 所有ABCInterface的派生类被拦截监控  --&gt;
    &lt;property name="targetBeanType" value="xxxx.ABCInterface" /&gt;
    &lt;property name="interceptorNames"&gt;
        &lt;list&gt;
            &lt;value&gt;druid-stat-interceptor&lt;/value&gt;
        &lt;/list&gt;
    &lt;/property&gt;
  &lt;/bean&gt;
</code>
		</pre>
		<h2 style="margin: 20px 0px 10px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-weight: bold; -webkit-font-smoothing: antialiased; cursor: text; position: relative; font-size: 24px; color: rgb(0, 0, 0); font-family: Helvetica, arial, freesans, clean, sans-serif; font-style: normal; font-variant: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">方法名正则匹配拦截配置</h2>
		<pre style="margin: 15px 0px; padding: 6px 10px; border: 1px solid rgb(204, 204, 204); font-size: 13px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); line-height: 19px; overflow: auto; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; color: rgb(51, 51, 51); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
				<code style="margin: 0px; padding: 0px; border: none; font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: pre; background-position: initial initial; background-repeat: initial initial;">  &lt;bean id="druid-stat-interceptor"
    class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"&gt;
  &lt;/bean&gt;

&lt;bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut"
    scope="prototype"&gt;
    &lt;property name="patterns"&gt;
        &lt;list&gt;
            &lt;value&gt;com.mycompany.service.*&lt;/value&gt;
            &lt;value&gt;com.mycompany.dao.*&lt;/value&gt;
        &lt;/list&gt;
    &lt;/property&gt;
&lt;/bean&gt;

&lt;aop:config&gt;
    &lt;aop:advisor advice-ref="druid-stat-interceptor"
        pointcut-ref="druid-stat-pointcut" /&gt;
&lt;/aop:config&gt;
</code>
		</pre>
		<p style="margin: 15px 0px; padding: 0px; border: 0px; color: rgb(51, 51, 51); font-family: Helvetica, arial, freesans, clean, sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 22px; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">有些情况下，可能你需要配置proxy-target-class，例如：</p>
		<pre style="margin: 15px 0px; padding: 6px 10px; border: 1px solid rgb(204, 204, 204); font-size: 13px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); line-height: 19px; overflow: auto; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; color: rgb(51, 51, 51); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
				<code style="margin: 0px; padding: 0px; border: none; font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: pre; background-position: initial initial; background-repeat: initial initial;">&lt;aop:config proxy-target-class="true"&gt;
    &lt;aop:advisor advice-ref="druid-stat-interceptor"
        pointcut-ref="druid-stat-pointcut" /&gt;
&lt;/aop:config&gt;
</code>
		</pre>
		<h2 style="margin: 20px 0px 10px; padding: 0px; border-width: 0px 0px 1px; border-bottom-style: solid; border-bottom-color: rgb(204, 204, 204); font-weight: bold; -webkit-font-smoothing: antialiased; cursor: text; position: relative; font-size: 24px; color: rgb(0, 0, 0); font-family: Helvetica, arial, freesans, clean, sans-serif; font-style: normal; font-variant: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">按照BeanId来拦截配置</h2>
		<pre style="margin-top: 15px; margin-right: 0px; margin-bottom: 0px !important; margin-left: 0px; padding: 6px 10px; border: 1px solid rgb(204, 204, 204); font-size: 13px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: rgb(248, 248, 248); line-height: 19px; overflow: auto; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; color: rgb(51, 51, 51); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;">
				<code style="margin: 0px; padding: 0px; border: none; font-size: 12px; font-family: Consolas, 'Liberation Mono', Courier, monospace; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: pre; background-position: initial initial; background-repeat: initial initial;">  &lt;bean id="druid-stat-interceptor"
    class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"&gt;
  &lt;/bean&gt;

&lt;bean
    class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"&gt;
    &lt;property name="proxyTargetClass" value="true" /&gt;
    &lt;property name="beanNames"&gt;
        &lt;list&gt;
            &lt;!-- 这里配置需要拦截的bean id列表 --&gt;
            &lt;value&gt;xxx-dao&lt;/value&gt;
            &lt;value&gt;xxx-service&lt;/value&gt;
        &lt;/list&gt;
    &lt;/property&gt;
    &lt;property name="interceptorNames"&gt;
        &lt;list&gt;
            &lt;value&gt;druid-stat-interceptor&lt;/value&gt;
        &lt;/list&gt;
    &lt;/property&gt;
&lt;/bean&gt;</code>
		</pre>
<img src ="http://www.blogjava.net/libin2722/aggbug/395482.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-02-20 17:40 <a href="http://www.blogjava.net/libin2722/articles/395482.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AtomicInteger</title><link>http://www.blogjava.net/libin2722/archive/2013/01/31/394996.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 31 Jan 2013 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/archive/2013/01/31/394996.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394996.html</wfw:comment><comments>http://www.blogjava.net/libin2722/archive/2013/01/31/394996.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394996.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394996.html</trackback:ping><description><![CDATA[
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">AtomicInteger，一个提供原子操作的Integer的类。在Java语言中，++i和i++操作并不是线程安全的，在使用的时候，不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">来看AtomicInteger提供的接口。</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">//获取当前的值</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">public final int get()</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">//取当前的值，并设置新的值</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> public final int getAndSet(int newValue)</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">//获取当前的值，并自增</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> public final int getAndIncrement()</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">//获取当前的值，并自减</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">public final int getAndDecrement()</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">//获取当前的值，并加上预期的值</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">public final int getAndAdd(int delta)</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">... ...</p>
		<br />
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">下面是一个对比测试，我们写一个synchronized的方法和一个AtomicInteger的方法来进行测试，直观的感受下性能上的差异</p>
		<div class="dp-highlighter bg_java" style="font-family: Consolas, 'Courier New', Courier, mono, serif; font-size: 12px; background-color: rgb(231, 229, 220); width: 687.046875px; overflow: auto; padding-top: 1px; text-align: left; margin: 18px 0px !important;">
				<div class="bar" style="padding-left: 45px;">
						<div class="tools" style="padding: 3px 8px 10px 10px; font-style: normal; font-variant: normal; font-weight: normal; font-size: 9px; line-height: normal; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; color: silver; background-color: rgb(248, 248, 248); border-left-width: 3px; border-left-style: solid; border-left-color: rgb(108, 226, 108);">
								<b>[java]</b>
								<span class="Apple-converted-space"> </span>
								<a href="http://blog.csdn.net/sunnydogzhou/article/details/6564396#" class="ViewSource" title="view plain" style="color: rgb(160, 160, 160); text-decoration: none; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_plain.gif); background-color: inherit; border: none; padding: 1px; margin: 0px 10px 0px 0px; font-size: 9px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat;">view plain</a>
								<a href="http://blog.csdn.net/sunnydogzhou/article/details/6564396#" class="CopyToClipboard" title="copy" style="color: rgb(160, 160, 160); text-decoration: none; background-image: url(http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/images/default/ico_copy.gif); background-color: inherit; border: none; padding: 1px; margin: 0px 10px 0px 0px; font-size: 9px; display: inline-block; width: 16px; height: 16px; text-indent: -2000px; background-position: 0% 0%; background-repeat: no-repeat no-repeat;">copy</a>
						</div>
				</div>
				<ol start="1" class="dp-j" style="margin: 0px 0px 1px 45px !important; padding: 0px; border: none; list-style: decimal; background-color: rgb(255, 255, 255); color: rgb(92, 92, 92);">
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">
										<span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">package</span>
										<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> zl.study.concurrency;  </span>
								</span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">
										<span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">import</span>
										<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> java.util.concurrent.atomic.AtomicInteger;  </span>
								</span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">
										<span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">public</span>
										<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> </span>
										<span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">class</span>
										<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> AtomicIntegerCompareTest {  </span>
								</span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">    <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">private</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> </span><span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">int</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> value;  </span></span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">      </span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">    <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">public</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> AtomicIntegerCompareTest(</span><span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">int</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> value){  </span></span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">this</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">.value = value;  </span></span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">    }  </span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">      </span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">    <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">public</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> </span><span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">synchronized</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> </span><span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">int</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> increase(){  </span></span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">return</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> value++;  </span></span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">    }  </span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">      </span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">    <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">public</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> </span><span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">static</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> </span><span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">void</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> main(String args[]){  </span></span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">long</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> start = System.currentTimeMillis();  </span></span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">          </span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        AtomicIntegerCompareTest test = <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">new</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> AtomicIntegerCompareTest(</span><span class="number" style="margin: 0px; padding: 0px; border: none; color: rgb(192, 0, 0); background-color: inherit;">0</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">);  </span></span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">for</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">( </span><span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">int</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> i=</span><span class="number" style="margin: 0px; padding: 0px; border: none; color: rgb(192, 0, 0); background-color: inherit;">0</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">;i&lt; </span><span class="number" style="margin: 0px; padding: 0px; border: none; color: rgb(192, 0, 0); background-color: inherit;">1000000</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">;i++){  </span></span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">            test.increase();  </span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        }  </span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">long</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> end = System.currentTimeMillis();  </span></span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        System.out.println(<span class="string" style="margin: 0px; padding: 0px; border: none; color: blue; background-color: inherit;">"time elapse:"</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">+(end -start));  </span></span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">          </span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">long</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> start1 = System.currentTimeMillis();  </span></span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">          </span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        AtomicInteger atomic = <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">new</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> AtomicInteger(</span><span class="number" style="margin: 0px; padding: 0px; border: none; color: rgb(192, 0, 0); background-color: inherit;">0</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">);  </span></span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">          </span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">for</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">( </span><span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">int</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> i=</span><span class="number" style="margin: 0px; padding: 0px; border: none; color: rgb(192, 0, 0); background-color: inherit;">0</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">;i&lt; </span><span class="number" style="margin: 0px; padding: 0px; border: none; color: rgb(192, 0, 0); background-color: inherit;">1000000</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">;i++){  </span></span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">            atomic.incrementAndGet();  </span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        }  </span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        <span class="keyword" style="margin: 0px; padding: 0px; border: none; color: rgb(0, 102, 153); background-color: inherit; font-weight: bold;">long</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;"> end1 = System.currentTimeMillis();  </span></span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">        System.out.println(<span class="string" style="margin: 0px; padding: 0px; border: none; color: blue; background-color: inherit;">"time elapse:"</span><span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">+(end1 -start1) );  </span></span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">          </span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">          </span>
						</li>
						<li class="alt" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(255, 255, 255); color: inherit; line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">    }  </span>
						</li>
						<li class="" style="margin: 0px !important; padding: 0px 3px 0px 10px !important; border-style: none none none solid; border-left-width: 3px; border-left-color: rgb(108, 226, 108); list-style: decimal-leading-zero outside; background-color: rgb(248, 248, 248); color: rgb(92, 92, 92); line-height: 18px;">
								<span style="margin: 0px; padding: 0px; border: none; color: black; background-color: inherit;">}  </span>
						</li>
				</ol>
		</div>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">结果</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">time elapse:31<br />time elapse:16<br />由此不难看出，通过JNI本地的CAS性能远超synchronized关键字</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);"> </p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">Reference</p>
		<p style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 26px; orphans: auto; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255);">http://stackoverflow.com/questions/2443239/java-atomicinteger-what-are-the-differences-between-compareandset-and-weakcompar</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/394996.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-31 17:15 <a href="http://www.blogjava.net/libin2722/archive/2013/01/31/394996.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring通过annotation注册MBean到JMX</title><link>http://www.blogjava.net/libin2722/articles/394995.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 31 Jan 2013 09:02:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394995.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394995.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394995.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394995.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394995.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1、前言				JMX管理及使用日趋成熟。spring对bean的管理功能也很强大，通过annotation把某些方法暴露成MBean，然后通过JMX远程管理，在某些场景下会带来意想不到的效果。		 		本文只介绍两个内容：spring通过annotation暴露MBean、相关的xml配置。		 		 						2、spring通过annotation暴露MBe...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/394995.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/394995.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-31 17:02 <a href="http://www.blogjava.net/libin2722/articles/394995.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BootStrap入门教程 (四)</title><link>http://www.blogjava.net/libin2722/articles/394967.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 31 Jan 2013 03:08:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394967.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394967.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394967.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394967.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394967.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 回顾：Bootstrap组件丰富同时具有良好可扩展性，能够很好地应用在生产环境。这些组件包括按钮(Button),导航(Navigation)，缩略图( thumbnails),提醒(Alert)，进度条(progress bar)等，能够很好减少前端工程师的代码量，实现更加丰富充实的页面。		      Bootstrap作为一套良好的前端工具，要实现现代的动态页面效果，javascript...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/394967.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/394967.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-31 11:08 <a href="http://www.blogjava.net/libin2722/articles/394967.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BootStrap入门教程 (三)</title><link>http://www.blogjava.net/libin2722/articles/394961.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 31 Jan 2013 02:16:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394961.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394961.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394961.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394961.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394961.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 回顾：Bootstrap的基础CSS(Base CSS)提供了优雅，一致的多种基础Html页面要素，包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求。																						      Bootstrap作为完整的前端工具集，内建了大量的强大优雅可重用的组件,包括按钮(										Button),导航(Navigation),标...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/394961.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/394961.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-31 10:16 <a href="http://www.blogjava.net/libin2722/articles/394961.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BootStrap入门教程 (二)</title><link>http://www.blogjava.net/libin2722/articles/394960.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 31 Jan 2013 02:14:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394960.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394960.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394960.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394960.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394960.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 回顾：Bootstrap的手脚架(Scaffolding)提供了固定(fixed)和流式(fluid)两种布局，它同时建立了一个宽达940px和12列的格网系统。		      基于手脚架(Scaffolding)之上，Bootstrap的基础CSS(Base CSS)提供了一系列的基础Html页面要素，旨在为用户提供新鲜、一致的页面外观和感觉。本文将主要深入讲解排版(Typography),...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/394960.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/394960.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-31 10:14 <a href="http://www.blogjava.net/libin2722/articles/394960.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>BootStrap入门教程 (一)</title><link>http://www.blogjava.net/libin2722/articles/394959.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Thu, 31 Jan 2013 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394959.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394959.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394959.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394959.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394959.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 2011年，twitter的“一小撮”工程师为了提高他们内部的分析和管理能力，用业余时间为他们的产品构建了一套易用、优雅、灵活、可扩展的前端工具集--BootStrap。Bootstrap由MARK OTTO和Jacob Thornton所设计和建立，在github上开源之后，迅速成为该站上最多人watch&amp;fork的项目。大量工程师踊跃为该项目贡献代码，社区惊人地活跃，代码版本进化非常快...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/394959.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/394959.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-31 10:08 <a href="http://www.blogjava.net/libin2722/articles/394959.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux centos 6.3 Tomcat Install</title><link>http://www.blogjava.net/libin2722/articles/394027.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 09 Jan 2013 07:01:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394027.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394027.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394027.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394027.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394027.html</trackback:ping><description><![CDATA[https://github.com/fly2wind/TSShellScript<br /><br />#!/bin/sh<br />########################################################################################<br />#<br /># Install Ejabberd Server<br /># <br /># Shawn Ma<br />#<br />########################################################################################<br /># Define<br />TARGET=apache-tomcat-7.0.34.tar.gz<br />SOURCE=http://mirror.bjtu.edu.cn/apache/tomcat/tomcat-7/v7.0.34/bin/$TARGET<br /><br /># Create a build directory<br />mkdir -p /opt/install/tomcat &amp;&amp; cd /opt/install/tomcat<br /><br /># Prepare for compilation source<br />curl -o $TARGET $SOURCE<br />mkdir -p tmp &amp;&amp; tar -zxvf $TARGET -C tmp<br /><br /># Install build dependencies<br />yum install -y gcc gcc-c++ make cmake autoconf automake<br />yum install -y apr-devel openssl-devel<br /><br /># Create a User Group<br />groupadd tomcat<br />useradd -r -g tomcat tomcat<br /><br /># Compile and deploy<br />mkdir -p /opt/server/web &amp;&amp; mv tmp/* /opt/server/web/tomcat &amp;&amp; cd /opt/server/web/tomcat/bin<br />tar -zxvf tomcat-native.tar.gz &amp;&amp; cd tomcat-native-1.1.24-src/jni/native/<br />./configure \<br />--with-apr=/usr/bin/apr-1-config \<br />--with-java-home=/opt/environment/java/1.7.0 \<br />--with-ssl=yes \<br />--prefix=/opt/server/web/tomcat<br />make<br />make install<br /><br />cd /opt/server/web/tomcat<br />curl -o conf/server.xml https://raw.github.com/fly2wind/TSShellScript/master/tomcat/conf/server.xml<br />curl -o conf/tomcat-users.xml https://raw.github.com/fly2wind/TSShellScript/master/tomcat/conf/tomcat-users.xml<br />curl -o conf/wrapper.conf https://raw.github.com/fly2wind/TSShellScript/master/tomcat/wrapper/wrapper.conf<br />curl -o lib/wrapper.jar https://raw.github.com/fly2wind/TSShellScript/master/tomcat/wrapper/wrapper.jar<br />curl -o lib/wrapper.so https://raw.github.com/fly2wind/TSShellScript/master/tomcat/wrapper/libwrapper.so<br />curl -o bin/tomcat https://raw.github.com/fly2wind/TSShellScript/master/tomcat/wrapper/tomcat<br /><br /># Postinstallation setup<br />cd /opt/server/web/tomcat<br />chown -R tomcat .<br />chgrp -R tomcat .<br />chown -R root .<br />chown -R tomcat conf webapps work temp logs<br /><br /># Configuration<br />curl -o /etc/init.d/tomcat https://raw.github.com/fly2wind/TSShellScript/master/tomcat/init/tomcat<br />chmod a+x /etc/init.d/tomcat<br /><br /># Additional<br />chkconfig --add tomcat<br />chkconfig tomcat on<br /><br /><img src ="http://www.blogjava.net/libin2722/aggbug/394027.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-09 15:01 <a href="http://www.blogjava.net/libin2722/articles/394027.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux centos 6.3 Nginx Install</title><link>http://www.blogjava.net/libin2722/articles/394024.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 09 Jan 2013 07:00:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394024.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394024.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394024.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394024.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394024.html</trackback:ping><description><![CDATA[https://github.com/fly2wind/TSShellScript<br /><br />#!/bin/sh<br />########################################################################################<br />#<br /># Install Ejabberd Server<br /># <br /># Shawn Ma<br />#<br />########################################################################################<br /># Define<br />TARGET=nginx-1.2.6.tar.gz<br />SOURCE=http://nginx.org/download/nginx-1.2.6.tar.gz<br /><br /># Create a build directory<br />mkdir -p /opt/install/nginx &amp;&amp; cd /opt/install/nginx<br /><br /># Prepare for compilation source<br />curl -o $TARGET $SOURCE<br />curl -o ngx_devel_kit.tar.gz https://nodeload.github.com/simpl/ngx_devel_kit/tar.gz/v0.2.17<br />curl -o lua-nginx-module.tar.gz https://nodeload.github.com/chaoslawful/lua-nginx-module/tar.gz/v0.7.12<br /><br />mkdir -p tmp &amp;&amp; tar -zxvf $TARGET -C tmp<br />tar -zxvf ngx_devel_kit.tar.gz<br />tar -zxvf lua-nginx-module.tar.gz<br /><br /># Install build dependencies<br />yum install -y gcc gcc-c++ make cmake autoconf automake<br />yum install -y pcre-devel zlib-devel openssl-devel<br /><br /># Create a User Group<br />groupadd nginx<br />useradd -r -g nginx nginx<br /><br /># Compile and deploy<br />mv tmp/* source &amp;&amp; cd source<br /><br />export LUAJIT_LIB=/opt/environment/lua/lj2/lib<br />export LUAJIT_INC=/opt/environment/lua/lj2/include/luajit-2.0<br /><br />./configure \<br />--prefix=/opt/server/web/nginx \<br />--user=nginx \<br />--group=nginx \<br />--with-http_ssl_module \<br />--with-http_gzip_static_module \<br />--with-http_stub_status_module \<br />--http-client-body-temp-path=/opt/server/web/nginx/var/tmp/nginx/client-body \<br />--http-proxy-temp-path=/opt/server/web/nginx/var/tmp/nginx/proxy \<br />--http-fastcgi-temp-path=/opt/server/web/nginx/var/tmp/nginx/fastcgi \<br />--http-uwsgi-temp-path=/opt/server/web/nginx/var/tmp/nginx/uwsgi \<br />--http-scgi-temp-path=/opt/server/web/nginx/var/tmp/nginx/scgi \<br />--add-module=../ngx_devel_kit-0.2.17 \<br />--add-module=../lua-nginx-module-0.7.12 \<br />--with-ld-opt="-Wl,-rpath,$LUAJIT_LIB"<br />make<br />make install<br /><br />cd /opt/server/web/nginx<br />mkdir -p var/tmp/nginx var/lock var/run<br /><br />curl -o conf/nginx.conf https://raw.github.com/fly2wind/TSShellScript/master/nginx/conf/nginx.conf<br /><br /># Postinstallation setup<br />cd /opt/server/web/nginx<br />chown -R nginx .<br />chgrp -R nginx .<br />chown -R root .<br />chown -R nginx html var<br /><br /># Configuration<br />curl -o /etc/init.d/nginx https://raw.github.com/fly2wind/TSShellScript/master/nginx/init/nginx<br />chmod a+x /etc/init.d/nginx<br /><br /># Additional<br />chkconfig --add nginx<br />chkconfig nginx on<br /><br /><br /><img src ="http://www.blogjava.net/libin2722/aggbug/394024.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-09 15:00 <a href="http://www.blogjava.net/libin2722/articles/394024.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux centos 6.3 Python Install</title><link>http://www.blogjava.net/libin2722/articles/394025.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 09 Jan 2013 07:00:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394025.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394025.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394025.html</trackback:ping><description><![CDATA[https://github.com/fly2wind/TSShellScript<br /><br />#!/bin/sh<br />########################################################################################<br />#<br /># Install JDK Script<br /># <br /># Shawn Ma<br />#<br />########################################################################################<br /># Define<br />TARGET=Python-2.7.3.tar.bz2<br />SOURCE=http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2<br /><br /># Create a build directory<br />mkdir -p /opt/install/python &amp;&amp; cd /opt/install/python<br /><br /># Prepare for compilation source<br />curl -o $TARGET $SOURCE<br />mkdir -p tmp &amp;&amp; tar -xvf $TARGET -C tmp<br /><br /># Install build dependencies<br />yum install -y gcc gcc-c++ make cmake autoconf automake<br />yum install -y ncurses-devel openssl-devel readline-devel<br /><br /># Create a User Group<br /><br /># Compile and deploy<br />mv tmp/* source &amp;&amp; cd source<br />./configure \<br />--prefix=/opt/environment/python/2.7.3<br />make<br />make install<br /><br />cd ..<br />curl -O http://python-distribute.org/distribute_setup.py<br />curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py<br />/opt/environment/python/2.7.3/bin/python2.7 distribute_setup.py<br />/opt/environment/python/2.7.3/bin/python2.7 get-pip.py<br /><br /># Postinstallation setup<br />export PATH=$PATH:/opt/environment/python/2.7.3/bin<br /><br /># Configuration<br /><br /># Additional<br />sed -i '/export PATH=/a\export PATH=$PATH:\/opt\/environment\/python\/2.7.3\/bin' /etc/profile<br /><br /><br /><img src ="http://www.blogjava.net/libin2722/aggbug/394025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-09 15:00 <a href="http://www.blogjava.net/libin2722/articles/394025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux centos 6.3 Redis Install</title><link>http://www.blogjava.net/libin2722/articles/394026.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 09 Jan 2013 07:00:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394026.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394026.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394026.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394026.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394026.html</trackback:ping><description><![CDATA[https://github.com/fly2wind/TSShellScript<br /><br />#!/bin/sh<br />########################################################################################<br />#<br /># Install Ejabberd Server<br /># <br /># Shawn Ma<br />#<br />########################################################################################<br /># Define<br />TARGET=redis-2.6.7.tar.gz<br />SOURCE=http://redis.googlecode.com/files/redis-2.6.7.tar.gz<br /><br /># Create a build directory<br />mkdir -p /opt/install/redis &amp;&amp; cd /opt/install/redis<br /><br /># Prepare for compilation source<br />curl -o $TARGET $SOURCE<br />mkdir -p tmp &amp;&amp; tar -zxvf $TARGET -C tmp<br /><br /># Install build dependencies<br />yum install -y gcc gcc-c++ make cmake autoconf automake<br /><br /># Create a User Group<br />groupadd redis<br />useradd -r -g redis redis<br /><br /># Compile and deploy<br />mv tmp/* source &amp;&amp; cd source<br />make PREFIX=/opt/server/cache/redis<br />make install PREFIX=/opt/server/cache/redis<br /><br />cd /opt/server/cache/redis<br />mkdir -p conf var/run var/lock var/snapshot logs<br />curl -o conf/redis.conf https://raw.github.com/fly2wind/TSShellScript/master/redis/conf/redis.conf<br /><br /># Postinstallation setup<br />cd /opt/server/cache/redis<br />chown -R redis .<br />chgrp -R redis .<br />chown -R root .<br />chown -R redis var logs<br /><br /># Configuration<br />curl -o /etc/init.d/redis https://raw.github.com/fly2wind/TSShellScript/master/redis/init/redis<br />chmod a+x /etc/init.d/redis<br /><br /># Additional<br />chkconfig --add redis<br />chkconfig redis on<br /><br /><br /><img src ="http://www.blogjava.net/libin2722/aggbug/394026.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-09 15:00 <a href="http://www.blogjava.net/libin2722/articles/394026.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux centos 6.3 Mysql Install</title><link>http://www.blogjava.net/libin2722/articles/394022.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 09 Jan 2013 06:59:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394022.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394022.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394022.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394022.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394022.html</trackback:ping><description><![CDATA[https://github.com/fly2wind/TSShellScript<br /><br />#!/bin/sh<br />########################################################################################<br />#<br /># Install MySQL Script<br /># <br /># Shawn Ma<br /># 2013-01-06<br />#<br />########################################################################################<br /># Define<br />TARGET=mysql-5.5.29.tar.gz<br />SOURCE=http://cdn.mysql.com/Downloads/MySQL-5.5/$TARGET<br /><br /># Create a build directory<br />mkdir -p /opt/install/mysql &amp;&amp; cd /opt/install/mysql<br /><br /># Prepare for compilation source<br />curl -o $TARGET $SOURCE<br />mkdir -p tmp &amp;&amp; tar -zxvf $TARGET -C tmp<br /><br /># Install build dependencies<br />yum install -y gcc gcc-c++ make cmake autoconf automake<br />yum install -y bison ncurses-devel<br /><br /># Create a User Group<br />groupadd mysql<br />useradd -r -g mysql mysql<br /><br /># Compile and deploy<br />mv tmp/* source &amp;&amp; cd source<br />cmake \<br />-DCMAKE_INSTALL_PREFIX=/opt/server/database/mysql \<br />-DSYSCONFDIR=/opt/server/database/mysql \<br />-DMYSQL_UNIX_ADDR=/opt/server/database/mysql/tmp/mysql.sock \<br />-DMYSQL_TCP_PORT=3306 \<br />-DMYSQL_DATADIR=/opt/server/database/mysql/data \<br />-DDEFAULT_CHARSET=utf8 \<br />-DDEFAULT_COLLATION=utf8_general_ci \<br />-DWITH_EXTRA_CHARSETS:STRING=all \<br />-DWITH_INNOBASE_STORAGE_ENGINE=1 \<br />-DWITH_READLINE=1 \<br />-DENABLED_LOCAL_INFILE=1 \<br />-DWITH_DEBUG=OFF \<br />-DMYSQL_USER=mysql<br />make<br />make install<br /><br />cd /opt/server/database/mysql<br />curl -o my.cnf https://raw.github.com/fly2wind/TSShellScript/master/mysql/conf/my.cnf<br /><br /><br /># Postinstallation setup<br />cd /opt/server/database/mysql<br />chown -R mysql .<br />chgrp -R mysql .<br />scripts/mysql_install_db --user=mysql<br />chown -R root .<br />chown -R mysql data<br /><br /># Configuration<br />curl -o /etc/init.d/mysql https://raw.github.com/fly2wind/TSShellScript/master/mysql/init/mysql<br />chmod a+x /etc/init.d/mysql<br /><br />/etc/init.d/mysql start<br />bin/mysqladmin -u root password "TV.xian"<br />bin/mysql -u root -pTV.xian -e "GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'TV.xian' WITH GRANT OPTION; FLUSH PRIVILEGES;"<br />bin/mysql -u root -pTV.xian -e "GRANT REPLICATION SLAVE ON *.* TO 'backup'@'%' IDENTIFIED BY 'backup'; FLUSH PRIVILEGES;"; <br />/etc/init.d/mysql stop<br /><br /># Additional<br />chkconfig --add mysql<br />chkconfig mysql on<br /><br /><img src ="http://www.blogjava.net/libin2722/aggbug/394022.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-09 14:59 <a href="http://www.blogjava.net/libin2722/articles/394022.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux centos 6.3 Mysql slave Install</title><link>http://www.blogjava.net/libin2722/articles/394023.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 09 Jan 2013 06:59:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394023.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394023.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394023.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394023.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394023.html</trackback:ping><description><![CDATA[https://github.com/fly2wind/TSShellScript<br /><br />#!/bin/sh<br />########################################################################################<br />#<br /># Install MySQL Script<br /># <br /># Shawn Ma<br />#<br />########################################################################################<br /># Define<br />TARGET=mysql-5.5.29.tar.gz<br />SOURCE=http://cdn.mysql.com/Downloads/MySQL-5.5/$TARGET<br /><br /># Create a build directory<br />mkdir -p /opt/install/mysql &amp;&amp; cd /opt/install/mysql<br /><br /># Prepare for compilation source<br />curl -o $TARGET $SOURCE<br />mkdir -p tmp &amp;&amp; tar -zxvf $TARGET -C tmp<br /><br /># Install build dependencies<br />yum install -y gcc gcc-c++ make cmake autoconf automake<br />yum install -y bison ncurses-devel<br /><br /># Create a User Group<br />groupadd mysql<br />useradd -r -g mysql mysql<br /><br /># Compile and deploy<br />mv tmp/* source &amp;&amp; cd source<br />cmake \<br />-DCMAKE_INSTALL_PREFIX=/opt/server/database/mysql_slave \<br />-DSYSCONFDIR=/opt/server/database/mysql_slave \<br />-DMYSQL_UNIX_ADDR=/opt/server/database/mysql_slave/tmp/mysql.sock \<br />-DMYSQL_TCP_PORT=3307 \<br />-DMYSQL_DATADIR=/opt/server/database/mysql_slave/data \<br />-DDEFAULT_CHARSET=utf8 \<br />-DDEFAULT_COLLATION=utf8_general_ci \<br />-DWITH_EXTRA_CHARSETS:STRING=all \<br />-DWITH_INNOBASE_STORAGE_ENGINE=1 \<br />-DWITH_READLINE=1 \<br />-DENABLED_LOCAL_INFILE=1 \<br />-DWITH_DEBUG=OFF \<br />-DMYSQL_USER=mysql<br />make<br />make install<br /><br /># Postinstallation setup<br />cd /opt/server/database/mysql_slave<br />chown -R mysql .<br />chgrp -R mysql .<br />scripts/mysql_install_db --user=mysql<br />chown -R root .<br />chown -R mysql data<br /><br /># Configuration<br />cp support-files/my-medium.cnf my.cnf<br />sed -i "/\[mysqld\]$/a\datadir         = \/opt\/server\/database\/mysql_slave\/data/" my.cnf<br />sed -i "s/^server-id.*/server-id       = 2/g" my.cnf<br />cp support-files/mysql.server /etc/init.d/mysql_slave &amp;&amp; chmod a+x /etc/init.d/mysql_slave<br />##chkconfig --add mysql<br />##chkconfig --level 345 mysql on <br />##update-rc.d -a mysql<br />##update-rc.d mysql defaults<br /><br /># Additional<br />/etc/init.d/mysql_slave start<br />bin/mysqladmin -u root password "TV.xian"<br />bin/mysql -u root -pTV.xian -e "GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'TV.xian' WITH GRANT OPTION; FLUSH PRIVILEGES;"<br />bin/mysql -u root -pTV.xian -e "change master to master_host='192.168.102.128',master_port=3306,master_user='backup',master_password='backup', master_log_file='mysql-bin.000005',master_log_pos=326;" <br />bin/mysql -u root -pTV.xian -e "start slave;"<br /><br />/etc/init.d/mysql_slave stop<br /><br /><img src ="http://www.blogjava.net/libin2722/aggbug/394023.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-09 14:59 <a href="http://www.blogjava.net/libin2722/articles/394023.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux centos 6.3 Lua Install</title><link>http://www.blogjava.net/libin2722/articles/394020.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 09 Jan 2013 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394020.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394020.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394020.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394020.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394020.html</trackback:ping><description><![CDATA[https://github.com/fly2wind/TSShellScript<br /><br />#!/bin/sh<br />########################################################################################<br />#<br /># Install Lua Script<br /># <br /># Shawn Ma<br />#<br />########################################################################################<br /># Define<br />TARGET=LuaJIT-2.0.0.tar.gz<br />SOURCE=http://luajit.org/download/LuaJIT-2.0.0.tar.gz<br /><br /># Create a build directory<br />mkdir -p /opt/install/lua &amp;&amp; cd /opt/install/lua<br /><br /># Prepare for compilation source<br />curl -o $TARGET $SOURCE<br />mkdir -p tmp &amp;&amp; tar -zxvf $TARGET -C tmp<br /><br /># Install build dependencies<br /><br /># Create a User Group<br /><br /># Compile and deploy<br />mv tmp/* source &amp;&amp; cd source<br />make PREFIX=/opt/environment/lua/lj2<br />make install PREFIX=/opt/environment/lua/lj2<br /><br /># Postinstallation setup<br />export PATH=$PATH:/opt/environment/lua/lj2/bin<br /><br /># Configuration<br /><br /># Additional<br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/libin2722/aggbug/394020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-09 14:58 <a href="http://www.blogjava.net/libin2722/articles/394020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux centos 6.3 Memcached Install</title><link>http://www.blogjava.net/libin2722/articles/394021.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 09 Jan 2013 06:58:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394021.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394021.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394021.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394021.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394021.html</trackback:ping><description><![CDATA[https://github.com/fly2wind/TSShellScript<br /><br />#!/bin/sh<br />########################################################################################<br />#<br /># Install Ejabberd Server<br /># <br /># Shawn Ma<br />#<br />########################################################################################<br /># Define<br />TARGET=memcached-1.4.15.tar.gz<br />SOURCE=http://memcached.googlecode.com/files/memcached-1.4.15.tar.gz<br /><br /># Create a build directory<br />mkdir -p /opt/install/memcached &amp;&amp; cd /opt/install/memcached<br /><br /># Prepare for compilation source<br />curl -o $TARGET $SOURCE<br />mkdir -p tmp &amp;&amp; tar -zxvf $TARGET -C tmp<br /><br /># Install build dependencies<br />yum install -y gcc gcc-c++ make cmake autoconf automake<br />yum install -y libevent-devel<br /><br /># Create a User Group<br />groupadd memcache<br />useradd -r -g memcache memcache<br /><br /># Compile and deploy<br />mv tmp/* source &amp;&amp; cd source<br />./configure \<br />--prefix=/opt/server/cache/memcached<br />make<br />make install<br /><br />cd /opt/server/cache/memcached<br />mkdir -p conf var/run var/lock logs<br />curl -o conf/memcached.conf https://raw.github.com/fly2wind/TSShellScript/master/memcached/conf/memcached.conf<br /><br /># Postinstallation setup<br />cd /opt/server/cache/memcached<br />chown -R memcache .<br />chgrp -R memcache .<br />chown -R root .<br />chown -R memcache var logs<br /><br /># Configuration<br />curl -o /etc/init.d/memcached https://raw.github.com/fly2wind/TSShellScript/master/memcached/init/memcached<br />chmod a+x /etc/init.d/memcached<br /><br /># Additional<br />chkconfig --add memcached<br />chkconfig memcached on<br /><br /><br /><img src ="http://www.blogjava.net/libin2722/aggbug/394021.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-09 14:58 <a href="http://www.blogjava.net/libin2722/articles/394021.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux centos 6.3 Erlang Install</title><link>http://www.blogjava.net/libin2722/articles/394018.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 09 Jan 2013 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394018.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394018.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394018.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394018.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394018.html</trackback:ping><description><![CDATA[https://github.com/fly2wind/TSShellScript<br /><br />#!/bin/sh<br />########################################################################################<br />#<br /># Install JDK Script<br /># <br /># Shawn Ma<br />#<br />########################################################################################<br /># Define<br />TARGET=OTP_R15B03-1.tar.gz<br />SOURCE=https://nodeload.github.com/erlang/otp/tar.gz/OTP_R15B03-1<br /><br /># Create a build directory<br />mkdir -p /opt/install/erlang &amp;&amp; cd /opt/install/erlang<br /><br /># Prepare for compilation source<br />curl -o $TARGET $SOURCE<br />mkdir -p tmp &amp;&amp; tar -zxvf $TARGET -C tmp<br /><br /># Install build dependencies<br />yum install -y gcc gcc-c++ make cmake autoconf automake<br />yum install -y ncurses-devel openssl-devel<br /><br /># Create a User Group<br /><br /># Compile and deploy<br />mv tmp/* source &amp;&amp; cd source<br />./otp_build autoconf<br />./configure \<br />--prefix=/opt/environment/erlang/R15B03 \<br />--enable-threads \<br />--enable-smp-support \<br />--enable-kernel-poll \<br />--enable-hipe \<br />--without-termcap \<br />--without-javac \<br />--with-ssl<br />make<br />make install<br /><br /># Postinstallation setup<br />export PATH=$PATH:/opt/environment/erlang/R15B03/bin<br /><br /># Configuration<br /><br /># Additional<br /># export PATH USER<br />sed -i '/export PATH=/a\export PATH=$PATH:\/opt\/environment\/erlang\/R15B03\/bin' /etc/profile<br /><br /><img src ="http://www.blogjava.net/libin2722/aggbug/394018.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-09 14:57 <a href="http://www.blogjava.net/libin2722/articles/394018.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux centos 6.3 Graphicsmagick Install</title><link>http://www.blogjava.net/libin2722/articles/394019.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 09 Jan 2013 06:57:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394019.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394019.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394019.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394019.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394019.html</trackback:ping><description><![CDATA[https://github.com/fly2wind/TSShellScript<br /><br />#!/bin/sh<br />########################################################################################<br />#<br /># Install Ejabberd Server<br /># <br /># Shawn Ma<br />#<br />########################################################################################<br /># Define<br />TARGET=GraphicsMagick-LATEST.tar.gz<br />SOURCE=ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/GraphicsMagick-LATEST.tar.gz<br /><br /># Create a build directory<br />mkdir -p /opt/install/graphicsmagick &amp;&amp; cd /opt/install/graphicsmagick<br /><br /># Prepare for compilation source<br />curl -o $TARGET $SOURCE<br />mkdir -p tmp &amp;&amp; tar -zxvf $TARGET -C tmp<br /><br /># Install build dependencies<br />yum install -y gcc gcc-c++ make cmake autoconf automake<br />yum install -y libpng-devel libjpeg-devel libtiff-devel jasper-devel freetype-devel<br /><br /># Create a User Group<br /><br /># Compile and deploy<br />mv tmp/* source &amp;&amp; cd source<br />./configure \<br />--prefix=/opt/tools/graphicsmagick \<br />--enable-shared \<br />--enable-static \<br />--with-quantum-depth=16 \<br />--with-ttf \<br />--with-jpeg \<br />--with-jp2 \<br />--with-png \<br />--with-zlib<br /><br />make<br />make install<br /><br />cd /opt/server/cache/memcached<br />mkdir -p conf var/run var/lock logs<br />curl -o conf/memcached.conf https://raw.github.com/fly2wind/TSShellScript/master/memcached/conf/memcached.conf<br /><br /># Postinstallation setup<br />cd /opt/server/cache/memcached<br />chown -R memcache .<br />chgrp -R memcache .<br />chown -R root .<br />chown -R memcache var logs<br /><br /># Configuration<br />curl -o /etc/init.d/memcached https://raw.github.com/fly2wind/TSShellScript/master/memcached/init/memcached<br />chmod a+x /etc/init.d/memcached<br /><br /># Additional<br />chkconfig --add memcached<br />chkconfig memcached on<br /><br /><br /><img src ="http://www.blogjava.net/libin2722/aggbug/394019.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-09 14:57 <a href="http://www.blogjava.net/libin2722/articles/394019.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux centos 6.3 Ejabberd Install</title><link>http://www.blogjava.net/libin2722/articles/394017.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 09 Jan 2013 06:55:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/394017.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/394017.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/394017.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/394017.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/394017.html</trackback:ping><description><![CDATA[https://github.com/fly2wind/TSShellScript<br /><br />#!/bin/sh<br />########################################################################################<br />#<br /># Install Ejabberd Server<br /># <br /># Shawn Ma<br />#<br />########################################################################################<br /># Define<br />TARGET=v2.1.11.tar.gz<br />SOURCE=https://nodeload.github.com/processone/ejabberd/tar.gz/v2.1.11<br /><br /># Create a build directory<br />mkdir -p /opt/install/ejabberd &amp;&amp; cd /opt/install/ejabberd<br /><br /># Prepare for compilation source<br />curl -o $TARGET $SOURCE<br />mkdir -p tmp &amp;&amp; tar -zxvf $TARGET -C tmp<br /><br /># Install build dependencies<br />yum install -y gcc gcc-c++ make cmake autoconf automake<br />yum install -y expat-devel<br /><br /># Create a User Group<br />groupadd ejabberd<br />useradd -r -g ejabberd ejabberd<br /><br /># Compile and deploy<br />mv tmp/* source &amp;&amp; cd source\src<br />./configure \<br />--prefix=/opt/server/xmpp/ejabberd \<br />--enable-user=ejabberd \<br />--enable-full-xml \<br />--enable-nif<br />make<br />make install<br /><br />cd /opt/server/xmpp/ejabberd<br />curl -o etc/ejabberd/ejabberd.cfg https://raw.github.com/fly2wind/TSShellScript/master/ejabberd/conf/ejabberd.cfg<br />curl -o etc/ejabberd/ejabberdctl.cfg https://raw.github.com/fly2wind/TSShellScript/master/ejabberd/conf/ejabberdctl.cfg<br />curl -o etc/ejabberd/inetrc https://raw.github.com/fly2wind/TSShellScript/master/ejabberd/conf/inetrc<br /><br /># Postinstallation setup<br />cd /opt/server/xmpp/ejabberd<br />chown -R ejabberd .<br />chgrp -R ejabberd .<br />chown -R root .<br />chown -R ejabberd var<br /><br /># Configuration<br />sed -i "/^ERL=.*/a\PMD=\/opt\/environment\/erlang\/R15B03\/bin\/epmd" sbin/ejabberdctl<br />sed -i -e "s/epmd -names | grep -q name || epmd -kill/\$PMD -names | grep -q name || \$PMD -kill/" sbin/ejabberdctl<br />curl -o /etc/init.d/ejabberd https://raw.github.com/fly2wind/TSShellScript/master/ejabberd/init/ejabberd<br />chmod a+x /etc/init.d/ejabberd<br /><br /># Additional<br />chkconfig --add ejabberd<br />chkconfig ejabberd on<br /><br /><br /><img src ="http://www.blogjava.net/libin2722/aggbug/394017.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-09 14:55 <a href="http://www.blogjava.net/libin2722/articles/394017.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux centos 6.3 JDK Install</title><link>http://www.blogjava.net/libin2722/articles/393978.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Tue, 08 Jan 2013 09:38:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/393978.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/393978.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/393978.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/393978.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/393978.html</trackback:ping><description><![CDATA[https://github.com/fly2wind/TSShellScript<br /><br />#!/bin/sh<br />########################################################################################<br />#<br /># Install JDK Script<br /># <br /># Shawn Ma<br />#<br />########################################################################################<br /># Define<br />TARGET=jdk-7u10-linux-x64.tar.gz<br />SOURCE=http://www.ganshazi.com/jdk-7u10-linux-x64.tar.gz<br /><br /># Create a build directory<br />mkdir -p /opt/install/java &amp;&amp; cd /opt/install/java<br /><br /># Prepare for compilation source<br />curl -o $TARGET $SOURCE<br />mkdir -p tmp &amp;&amp; tar -zxvf $TARGET -C tmp<br /><br /># Install build dependencies<br /><br /># Create a User Group<br /><br /># Compile and deploy<br />mkdir -p /opt/environment/java &amp;&amp; mv tmp/* /opt/environment/java/1.7.0<br /><br /># Postinstallation setup<br />export PATH=$PATH:/opt/environment/java/1.7.0/bin<br /><br /># Configuration<br /><br /># Additional<br />sed -i '/export PATH$/a\export PATH=$PATH:\/opt\/environment\/java\/1.7\/bin' /etc/profile<br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/libin2722/aggbug/393978.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2013-01-08 17:38 <a href="http://www.blogjava.net/libin2722/articles/393978.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>flex摄像头拍照 java上传到数据库 .</title><link>http://www.blogjava.net/libin2722/articles/355899.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 05 Aug 2011 14:32:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/355899.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/355899.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/355899.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/355899.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/355899.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 前两天看了一个flex摄像头拍照的程序感觉不错不过是C#		代码的，有点遗憾，今天给他改成了java代码的。																								+ expand source								view plain								copy to clipboard								print								?												...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/355899.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/355899.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2011-08-05 22:32 <a href="http://www.blogjava.net/libin2722/articles/355899.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Nginx+Tomcat+Memcached共享session集群配置</title><link>http://www.blogjava.net/libin2722/articles/355897.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 05 Aug 2011 13:31:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/355897.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/355897.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/355897.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/355897.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/355897.html</trackback:ping><description><![CDATA[
		<span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Tahoma; font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 25px; orphans: 2; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: rgb(239, 239, 239); ">1、采用Nginx负载均衡<span class="Apple-converted-space"> </span><br />2、memcached共享session<span class="Apple-converted-space"> </span><br />3、tomcat集群配置(3台CentOS 6)<span class="Apple-converted-space"> </span><br /><br />(172.18.188.64): 操作系统CentOS 6; 安装nginx、memcached和tomcat 6<span class="Apple-converted-space"> </span><br />(172.18.188.76): 操作系统CentOS 6; 安装tomcat 6<span class="Apple-converted-space"> </span><br />(172.18.188.78): 操作系统CentOS 6; 安装tomcat 6<span class="Apple-converted-space"> </span><br /><br />nginx、memcached、tomcat 6安装省略.<span class="Apple-converted-space"> </span><br /><br />nginx配置如下:<span class="Apple-converted-space"> </span><br /><br />nginx.conf如下:<span class="Apple-converted-space"> </span><br />#运行nginx所在的用户名和用户组<span class="Apple-converted-space"> </span><br />#user  root root;<span class="Apple-converted-space"> </span><br /><br />#启动进程数<span class="Apple-converted-space"> </span><br />worker_processes 8;<span class="Apple-converted-space"> </span><br />#全局错误日志及PID文件<span class="Apple-converted-space"> </span><br />error_log /usr/local/webserver/nginx/logs/nginx_error.log crit;<span class="Apple-converted-space"> </span><br /><br />pid /usr/local/webserver/nginx/nginx.pid;<span class="Apple-converted-space"> </span><br /><br />#Specifies the value for maximum file descriptors that can be opened by this process.<span class="Apple-converted-space"> </span><br /><br />worker_rlimit_nofile 65535;<span class="Apple-converted-space"> </span><br />#工作模式及连接数上限<span class="Apple-converted-space"> </span><br />events<span class="Apple-converted-space"> </span><br />{<span class="Apple-converted-space"> </span><br />  use epoll;<span class="Apple-converted-space"> </span><br />  worker_connections 65535;<span class="Apple-converted-space"> </span><br />}<span class="Apple-converted-space"> </span><br />#设定http服务器，利用它的反向代理功能提供负载均衡支持<span class="Apple-converted-space"> </span><br />http<span class="Apple-converted-space"> </span><br />{<span class="Apple-converted-space"> </span><br />  #设定mime类型<span class="Apple-converted-space"> </span><br />  include       mime.types;<span class="Apple-converted-space"> </span><br />  default_type  application/octet-stream;<span class="Apple-converted-space"> </span><br />  include /usr/local/webserver/nginx/conf/proxy.conf;<span class="Apple-converted-space"> </span><br />  #charset  gb2312;<span class="Apple-converted-space"> </span><br />  #设定请求缓冲  <span class="Apple-converted-space"> </span><br />  server_names_hash_bucket_size 128;<span class="Apple-converted-space"> </span><br />  client_header_buffer_size 32k;<span class="Apple-converted-space"> </span><br />  large_client_header_buffers 4 32k;<span class="Apple-converted-space"> </span><br />  #client_max_body_size 8m;<span class="Apple-converted-space"> </span><br />    <span class="Apple-converted-space"> </span><br />  sendfile on;<span class="Apple-converted-space"> </span><br />  tcp_nopush     on;<span class="Apple-converted-space"> </span><br /><br />  keepalive_timeout 60;<span class="Apple-converted-space"> </span><br /><br />  tcp_nodelay on;<span class="Apple-converted-space"> </span><br /><br />#  fastcgi_connect_timeout 300;<span class="Apple-converted-space"> </span><br />#  fastcgi_send_timeout 300;<span class="Apple-converted-space"> </span><br />#  fastcgi_read_timeout 300;<span class="Apple-converted-space"> </span><br />#  fastcgi_buffer_size 64k;<span class="Apple-converted-space"> </span><br />#  fastcgi_buffers 4 64k;<span class="Apple-converted-space"> </span><br />#  fastcgi_busy_buffers_size 128k;<span class="Apple-converted-space"> </span><br />#  fastcgi_temp_file_write_size 128k;<span class="Apple-converted-space"> </span><br /><br />  gzip on;<span class="Apple-converted-space"> </span><br />  gzip_min_length  1k;<span class="Apple-converted-space"> </span><br />  gzip_buffers     4 16k;<span class="Apple-converted-space"> </span><br />  gzip_http_version 1.0;<span class="Apple-converted-space"> </span><br />  gzip_comp_level 2;<span class="Apple-converted-space"> </span><br />  gzip_types       text/plain application/x-javascript text/css application/xml;<span class="Apple-converted-space"> </span><br />  gzip_vary on;<span class="Apple-converted-space"> </span><br /><br />  #limit_zone  crawler  $binary_remote_addr  10m;<span class="Apple-converted-space"> </span><br />###禁止通过ip访问站点<span class="Apple-converted-space"> </span><br />#  server{<span class="Apple-converted-space"> </span><br />#       server_name _;<span class="Apple-converted-space"> </span><br />#       return 404;<span class="Apple-converted-space"> </span><br />#       }<span class="Apple-converted-space"> </span><br /><br />upstream tserver {<span class="Apple-converted-space"> </span><br />    server 172.18.188.64:8080 weight=1;<span class="Apple-converted-space"> </span><br />    server 172.18.188.76:8080 weight=1;<span class="Apple-converted-space"> </span><br />    server 172.18.188.78:8080 weight=1;<span class="Apple-converted-space"> </span><br />}<span class="Apple-converted-space"> </span><br /><br />  server<span class="Apple-converted-space"> </span><br />  {<span class="Apple-converted-space"> </span><br />    listen       80;<span class="Apple-converted-space"> </span><br />    server_name  vmwarehost;<span class="Apple-converted-space"> </span><br />    index index.html index.htm index.jsp;<span class="Apple-converted-space"> </span><br />    root  /home/www/web/ROOT;<span class="Apple-converted-space"> </span><br /><br />    #limit_conn   crawler  20;  <span class="Apple-converted-space"> </span><br />   <span class="Apple-converted-space"> </span><br />    location /<span class="Apple-converted-space"> </span><br />    {<span class="Apple-converted-space"> </span><br />    proxy_pass http://tserver;<span class="Apple-converted-space"> </span><br />    } <span class="Apple-converted-space"> </span><br />   <span class="Apple-converted-space"> </span><br />    location /NginxStatus<span class="Apple-converted-space"> </span><br />    {<span class="Apple-converted-space"> </span><br />      stub_status on;<span class="Apple-converted-space"> </span><br />      access_log off;<span class="Apple-converted-space"> </span><br />    }   <span class="Apple-converted-space"> </span><br />  <span class="Apple-converted-space"> </span><br />    location ~ .*\.(htm|html|gif|jpg|jpeg|png|bmp|swf|ico)$<span class="Apple-converted-space"> </span><br />    {<span class="Apple-converted-space"> </span><br />      expires      30d;<span class="Apple-converted-space"> </span><br />    }<span class="Apple-converted-space"> </span><br /><br />    location ~ .*\.(js|css)?$<span class="Apple-converted-space"> </span><br />    {<span class="Apple-converted-space"> </span><br />      expires      1h;<span class="Apple-converted-space"> </span><br />    }  <span class="Apple-converted-space"> </span><br /><br />#定义访问日志的写入格式<span class="Apple-converted-space"> </span><br />     log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '<span class="Apple-converted-space"> </span><br />              '$status $body_bytes_sent "$http_referer" '<span class="Apple-converted-space"> </span><br />              '"$http_user_agent" $http_x_forwarded_for';<span class="Apple-converted-space"> </span><br />              access_log  /usr/local/webserver/nginx/logs/localhost.log access;<span class="Apple-converted-space"> </span><br /><br />      }<span class="Apple-converted-space"> </span><br /><br />}<span class="Apple-converted-space"> </span><br /><br />proxy.confi配置如下<span class="Apple-converted-space"> </span><br />#!nginx (-)<span class="Apple-converted-space"> </span><br /># proxy.conf<span class="Apple-converted-space"> </span><br />proxy_redirect          off;<span class="Apple-converted-space"> </span><br />proxy_set_header        Host $host;<span class="Apple-converted-space"> </span><br />proxy_set_header        X-Real-IP $remote_addr;<span class="Apple-converted-space"> </span><br />proxy_set_header       X-Forwarded-For   $proxy_add_x_forwarded_for;<span class="Apple-converted-space"> </span><br />client_max_body_size    10m;<span class="Apple-converted-space"> </span><br />client_body_buffer_size 128k;<span class="Apple-converted-space"> </span><br />proxy_connect_timeout   90;<span class="Apple-converted-space"> </span><br />proxy_send_timeout      90;<span class="Apple-converted-space"> </span><br />proxy_read_timeout      90;<span class="Apple-converted-space"> </span><br />proxy_buffer_size       4k;<span class="Apple-converted-space"> </span><br />proxy_buffers           4 32k;<span class="Apple-converted-space"> </span><br />proxy_busy_buffers_size 64k;<span class="Apple-converted-space"> </span><br />proxy_temp_file_write_size 64k;<span class="Apple-converted-space"> </span><br /><br />tomcat 6 server.xml配置如下:<span class="Apple-converted-space"> </span><br />&lt;?xml version='1.0' encoding='utf-8'?&gt;<span class="Apple-converted-space"> </span><br />&lt;!--<span class="Apple-converted-space"> </span><br />  Licensed to the Apache Software Foundation (ASF) under one or more<span class="Apple-converted-space"> </span><br />  contributor license agreements.  See the NOTICE file distributed with<span class="Apple-converted-space"> </span><br />  this work for additional information regarding copyright ownership.<span class="Apple-converted-space"> </span><br />  The ASF licenses this file to You under the Apache License, Version 2.0<span class="Apple-converted-space"> </span><br />  (the "License"); you may not use this file except in compliance with<span class="Apple-converted-space"> </span><br />  the License.  You may obtain a copy of the License at<span class="Apple-converted-space"> </span><br /><br />      http://www.apache.org/licenses/LICENSE-2.0<span class="Apple-converted-space"> </span><br /><br />  Unless required by applicable law or agreed to in writing, software<span class="Apple-converted-space"> </span><br />  distributed under the License is distributed on an "AS IS" BASIS,<span class="Apple-converted-space"> </span><br />  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.<span class="Apple-converted-space"> </span><br />  See the License for the specific language governing permissions and<span class="Apple-converted-space"> </span><br />  limitations under the License.<span class="Apple-converted-space"> </span><br />--&gt;<span class="Apple-converted-space"> </span><br />&lt;!-- Note:  A "Server" is not itself a "Container", so you may not<span class="Apple-converted-space"> </span><br />     define subcomponents such as "Valves" at this level.<span class="Apple-converted-space"> </span><br />     Documentation at /docs/config/server.html<span class="Apple-converted-space"> </span><br />--&gt;<span class="Apple-converted-space"> </span><br />&lt;Server port="8005" shutdown="SHUTDOWN"&gt;<span class="Apple-converted-space"> </span><br /><br />  &lt;!--APR library loader. Documentation at /docs/apr.html --&gt;<span class="Apple-converted-space"> </span><br />  &lt;Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /&gt;<span class="Apple-converted-space"> </span><br />  &lt;!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html --&gt;<span class="Apple-converted-space"> </span><br />  &lt;Listener className="org.apache.catalina.core.JasperListener" /&gt;<span class="Apple-converted-space"> </span><br />  &lt;!-- Prevent memory leaks due to use of particular java/javax APIs--&gt;<span class="Apple-converted-space"> </span><br />  &lt;Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /&gt;<span class="Apple-converted-space"> </span><br />  &lt;!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html --&gt;<span class="Apple-converted-space"> </span><br />  &lt;Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" /&gt;<span class="Apple-converted-space"> </span><br />  &lt;Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /&gt;<span class="Apple-converted-space"> </span><br /><br />  &lt;!-- Global JNDI resources<span class="Apple-converted-space"> </span><br />       Documentation at /docs/jndi-resources-howto.html<span class="Apple-converted-space"> </span><br />  --&gt;<span class="Apple-converted-space"> </span><br />  &lt;GlobalNamingResources&gt;<span class="Apple-converted-space"> </span><br />    &lt;!-- Editable user database that can also be used by<span class="Apple-converted-space"> </span><br />         UserDatabaseRealm to authenticate users<span class="Apple-converted-space"> </span><br />    --&gt;<span class="Apple-converted-space"> </span><br />    &lt;Resource name="UserDatabase" auth="Container"<span class="Apple-converted-space"> </span><br />              type="org.apache.catalina.UserDatabase"<span class="Apple-converted-space"> </span><br />              description="User database that can be updated and saved"<span class="Apple-converted-space"> </span><br />              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"<span class="Apple-converted-space"> </span><br />              pathname="conf/tomcat-users.xml" /&gt;<span class="Apple-converted-space"> </span><br />  &lt;/GlobalNamingResources&gt;<span class="Apple-converted-space"> </span><br /><br />  &lt;!-- A "Service" is a collection of one or more "Connectors" that share<span class="Apple-converted-space"> </span><br />       a single "Container" Note:  A "Service" is not itself a "Container",<span class="Apple-converted-space"> </span><br />       so you may not define subcomponents such as "Valves" at this level.<span class="Apple-converted-space"> </span><br />       Documentation at /docs/config/service.html<span class="Apple-converted-space"> </span><br />   --&gt;<span class="Apple-converted-space"> </span><br />  &lt;Service name="Catalina"&gt;<span class="Apple-converted-space"> </span><br /> <span class="Apple-converted-space"> </span><br />    &lt;!--The connectors can use a shared executor, you can define one or more named thread pools--&gt;<span class="Apple-converted-space"> </span><br />    &lt;!--<span class="Apple-converted-space"> </span><br />    &lt;Executor name="tomcatThreadPool" namePrefix="catalina-exec-"<span class="Apple-converted-space"> </span><br />        maxThreads="150" minSpareThreads="4"/&gt;<span class="Apple-converted-space"> </span><br />    --&gt;<span class="Apple-converted-space"> </span><br />   <span class="Apple-converted-space"> </span><br />   <span class="Apple-converted-space"> </span><br />    &lt;!-- A "Connector" represents an endpoint by which requests are received<span class="Apple-converted-space"> </span><br />         and responses are returned. Documentation at :<span class="Apple-converted-space"> </span><br />         Java HTTP Connector: /docs/config/http.html (blocking &amp; non-blocking)<span class="Apple-converted-space"> </span><br />         Java AJP  Connector: /docs/config/ajp.html<span class="Apple-converted-space"> </span><br />         APR (HTTP/AJP) Connector: /docs/apr.html<span class="Apple-converted-space"> </span><br />         Define a non-SSL HTTP/1.1 Connector on port 8080<span class="Apple-converted-space"> </span><br />    --&gt;<span class="Apple-converted-space"> </span><br />    &lt;Connector port="8080" protocol="HTTP/1.1"<span class="Apple-converted-space"> </span><br />               maxHttpHeaderSize="8192" connectionTimeout="20000"<span class="Apple-converted-space"> </span><br />               disableUploadTimeout="true" enableLookups="false"<span class="Apple-converted-space"> </span><br />               redirectPort="8443" maxThreads="600"<span class="Apple-converted-space"> </span><br />               minSpareThreads="25" maxSpareThreads="75" acceptCount="100" /&gt;<span class="Apple-converted-space"> </span><br />    &lt;!-- A "Connector" using the shared thread pool--&gt;<span class="Apple-converted-space"> </span><br />    &lt;!--<span class="Apple-converted-space"> </span><br />    &lt;Connector executor="tomcatThreadPool"<span class="Apple-converted-space"> </span><br />               port="8080" protocol="HTTP/1.1"<span class="Apple-converted-space"> </span><br />               connectionTimeout="20000"<span class="Apple-converted-space"> </span><br />               redirectPort="8443" /&gt;<span class="Apple-converted-space"> </span><br />    --&gt;          <span class="Apple-converted-space"> </span><br />    &lt;!-- Define a SSL HTTP/1.1 Connector on port 8443<span class="Apple-converted-space"> </span><br />         This connector uses the JSSE configuration, when using APR, the<span class="Apple-converted-space"> </span><br />         connector should be using the OpenSSL style configuration<span class="Apple-converted-space"> </span><br />         described in the APR documentation --&gt;<span class="Apple-converted-space"> </span><br />    &lt;!--<span class="Apple-converted-space"> </span><br />    &lt;Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"<span class="Apple-converted-space"> </span><br />               maxThreads="150" scheme="https" secure="true"<span class="Apple-converted-space"> </span><br />               clientAuth="false" sslProtocol="TLS" /&gt;<span class="Apple-converted-space"> </span><br />    --&gt;<span class="Apple-converted-space"> </span><br /><br />    &lt;!-- Define an AJP 1.3 Connector on port 8009 --&gt;<span class="Apple-converted-space"> </span><br />    &lt;Connector port="8009" protocol="AJP/1.3"<span class="Apple-converted-space"> </span><br />    maxHttpHeaderSize="8192" connectionTimeout="20000"<span class="Apple-converted-space"> </span><br />                  disableUploadTimeout="true" maxThreads="600"<span class="Apple-converted-space"> </span><br />                  minSpareThreads="25" maxSpareThreads="75"<span class="Apple-converted-space"> </span><br />                  enableLookups="false" redirectPort="8443" /&gt;<span class="Apple-converted-space"> </span><br /><br /><br />    &lt;!-- An Engine represents the entry point (within Catalina) that processes<span class="Apple-converted-space"> </span><br />         every request.  The Engine implementation for Tomcat stand alone<span class="Apple-converted-space"> </span><br />         analyzes the HTTP headers included with the request, and passes them<span class="Apple-converted-space"> </span><br />         on to the appropriate Host (virtual host).<span class="Apple-converted-space"> </span><br />         Documentation at /docs/config/engine.html --&gt;<span class="Apple-converted-space"> </span><br /><br />    &lt;!-- You should set jvmRoute to support load-balancing via AJP ie :<span class="Apple-converted-space"> </span><br />    &lt;Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1"&gt;        <span class="Apple-converted-space"> </span><br />    --&gt;<span class="Apple-converted-space"> </span><br />    &lt;Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1"&gt;<span class="Apple-converted-space"> </span><br /><br />      &lt;!--For clustering, please take a look at documentation at:<span class="Apple-converted-space"> </span><br />          /docs/cluster-howto.html  (simple how to)<span class="Apple-converted-space"> </span><br />          /docs/config/cluster.html (reference documentation) --&gt;<span class="Apple-converted-space"> </span><br />     <span class="Apple-converted-space"> </span><br />         &lt;!--<span class="Apple-converted-space"> </span><br />      &lt;Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/&gt;<span class="Apple-converted-space"> </span><br />      --&gt;<span class="Apple-converted-space"> </span><br />        &lt;Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"<span class="Apple-converted-space"> </span><br />                 channelSendOptions="6"&gt;<span class="Apple-converted-space"> </span><br />&lt;!--<span class="Apple-converted-space"> </span><br />&lt;Manager className="org.apache.catalina.ha.session.BackupManager"<span class="Apple-converted-space"> </span><br />                       expireSessionsOnShutdown="false"<span class="Apple-converted-space"> </span><br />                       notifyListenersOnReplication="true"<span class="Apple-converted-space"> </span><br />                       mapSendOptions="6"/&gt;<span class="Apple-converted-space"> </span><br />           --&gt;<span class="Apple-converted-space"> </span><br />           &lt;!--           <span class="Apple-converted-space"> </span><br />          &lt;Manager className="org.apache.catalina.ha.session.DeltaManager"<span class="Apple-converted-space"> </span><br />                   expireSessionsOnShutdown="false"<span class="Apple-converted-space"> </span><br />                   notifyListenersOnReplication="true"/&gt;<span class="Apple-converted-space"> </span><br />--&gt;<span class="Apple-converted-space"> </span><br />          &lt;Channel className="org.apache.catalina.tribes.group.GroupChannel"&gt;<span class="Apple-converted-space"> </span><br />            &lt;Membership className="org.apache.catalina.tribes.membership.McastService"<span class="Apple-converted-space"> </span><br />                        address="228.0.0.4"<span class="Apple-converted-space"> </span><br />                        port="45564"<span class="Apple-converted-space"> </span><br />                        frequency="500"<span class="Apple-converted-space"> </span><br />                        dropTime="3000"/&gt;<span class="Apple-converted-space"> </span><br />            &lt;Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"<span class="Apple-converted-space"> </span><br />                      address="172.18.188.64"<span class="Apple-converted-space"> </span><br />                      port="4001"<span class="Apple-converted-space"> </span><br />                      autoBind="100"<span class="Apple-converted-space"> </span><br />                      selectorTimeout="5000"<span class="Apple-converted-space"> </span><br />                      maxThreads="6"/&gt;<span class="Apple-converted-space"> </span><br /><br />            &lt;Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"&gt;<span class="Apple-converted-space"> </span><br />              &lt;Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/&gt;<span class="Apple-converted-space"> </span><br />            &lt;/Sender&gt;        <span class="Apple-converted-space"> </span><br />            &lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/&gt;<span class="Apple-converted-space"> </span><br />            &lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/&gt;<span class="Apple-converted-space"> </span><br />            &lt;Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/&gt;         <span class="Apple-converted-space"> </span><br />          &lt;/Channel&gt;<span class="Apple-converted-space"> </span><br /><br />          &lt;Valve className="org.apache.catalina.ha.tcp.ReplicationValve"<span class="Apple-converted-space"> </span><br />          filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;" /&gt;<span class="Apple-converted-space"> </span><br /><br />          &lt;Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"<span class="Apple-converted-space"> </span><br />                        tempDir="/tmp/war-temp/"<span class="Apple-converted-space"> </span><br />                        deployDir="/tmp/war-deploy/"<span class="Apple-converted-space"> </span><br />                        watchDir="/tmp/war-listen/"<span class="Apple-converted-space"> </span><br />                        watchEnabled="false"/&gt;<span class="Apple-converted-space"> </span><br />          &lt;ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/&gt;<span class="Apple-converted-space"> </span><br />        &lt;/Cluster&gt;<span class="Apple-converted-space"> </span><br />            <span class="Apple-converted-space"> </span><br /><br />      &lt;!-- The request dumper valve dumps useful debugging information about<span class="Apple-converted-space"> </span><br />           the request and response data received and sent by Tomcat.<span class="Apple-converted-space"> </span><br />           Documentation at: /docs/config/valve.html --&gt;<span class="Apple-converted-space"> </span><br />      &lt;!--<span class="Apple-converted-space"> </span><br />      &lt;Valve className="org.apache.catalina.valves.RequestDumperValve"/&gt;<span class="Apple-converted-space"> </span><br />      --&gt;<span class="Apple-converted-space"> </span><br /><br />      &lt;!-- This Realm uses the UserDatabase configured in the global JNDI<span class="Apple-converted-space"> </span><br />           resources under the key "UserDatabase".  Any edits<span class="Apple-converted-space"> </span><br />           that are performed against this UserDatabase are immediately<span class="Apple-converted-space"> </span><br />           available for use by the Realm.  --&gt;<span class="Apple-converted-space"> </span><br />      &lt;Realm className="org.apache.catalina.realm.UserDatabaseRealm"<span class="Apple-converted-space"> </span><br />             resourceName="UserDatabase"/&gt;<span class="Apple-converted-space"> </span><br /><br />      &lt;!-- Define the default virtual host<span class="Apple-converted-space"> </span><br />           Note: XML Schema validation will not work with Xerces 2.2.<span class="Apple-converted-space"> </span><br />       --&gt;<span class="Apple-converted-space"> </span><br />      &lt;Host name="localhost"  appBase="/home/www/web"<span class="Apple-converted-space"> </span><br />            unpackWARs="true" autoDeploy="true"<span class="Apple-converted-space"> </span><br />            xmlValidation="false" xmlNamespaceAware="false"&gt;<span class="Apple-converted-space"> </span><br /><br />        &lt;!-- SingleSignOn valve, share authentication between web applications<span class="Apple-converted-space"> </span><br />             Documentation at: /docs/config/valve.html --&gt;<span class="Apple-converted-space"> </span><br />        &lt;!--<span class="Apple-converted-space"> </span><br />        &lt;Valve className="org.apache.catalina.authenticator.SingleSignOn" /&gt;<span class="Apple-converted-space"> </span><br />        --&gt;<span class="Apple-converted-space"> </span><br /><br />        &lt;!-- Access log processes all example.<span class="Apple-converted-space"> </span><br />             Documentation at: /docs/config/valve.html --&gt;<span class="Apple-converted-space"> </span><br />        &lt;!--<span class="Apple-converted-space"> </span><br />        &lt;Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" <span class="Apple-converted-space"> </span><br />               prefix="localhost_access_log." suffix=".txt" pattern="common" resolveHosts="false"/&gt;<span class="Apple-converted-space"> </span><br />        --&gt;<span class="Apple-converted-space"> </span><br />      &lt;/Host&gt;<span class="Apple-converted-space"> </span><br />    &lt;/Engine&gt;<span class="Apple-converted-space"> </span><br />  &lt;/Service&gt;<span class="Apple-converted-space"> </span><br />&lt;/Server&gt;<span class="Apple-converted-space"> </span><br /><br />content.xml配置如下<span class="Apple-converted-space"> </span><br />&lt;Context&gt;<span class="Apple-converted-space"> </span><br /><br />    &lt;!-- Default set of monitored resources --&gt;<span class="Apple-converted-space"> </span><br />    &lt;WatchedResource&gt;WEB-INF/web.xml&lt;/WatchedResource&gt;<span class="Apple-converted-space"> </span><br /><br />    &lt;!-- Uncomment this to disable session persistence across Tomcat restarts --&gt;<span class="Apple-converted-space"> </span><br />    &lt;!--<span class="Apple-converted-space"> </span><br />    &lt;Manager pathname="" /&gt;<span class="Apple-converted-space"> </span><br />    --&gt;<span class="Apple-converted-space"> </span><br /><br />    &lt;!-- Uncomment this to enable Comet connection tacking (provides events<span class="Apple-converted-space"> </span><br />         on session expiration as well as webapp lifecycle) --&gt;<span class="Apple-converted-space"> </span><br />    &lt;!--<span class="Apple-converted-space"> </span><br />    &lt;Valve className="org.apache.catalina.valves.CometConnectionManagerValve" /&gt;<span class="Apple-converted-space"> </span><br />    --&gt;<span class="Apple-converted-space"> </span><br />&lt;Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"<span class="Apple-converted-space"> </span><br />memcachedNodes="n1:172.18.188.64:11211"<span class="Apple-converted-space"> </span><br />requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"<span class="Apple-converted-space"> </span><br />sessionBackupAsync="false"<span class="Apple-converted-space"> </span><br />sessionBackupTimeout="100"<span class="Apple-converted-space"> </span><br />transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"<span class="Apple-converted-space"> </span><br />copyCollectionsForSerialization="false"/&gt;<span class="Apple-converted-space"> </span><br />&lt;/Context&gt;<span class="Apple-converted-space"> </span><br />memcached启动命令:<span class="Apple-converted-space"> </span><br />useradd -s /sbin/nologin memcached<span class="Apple-converted-space"> </span><br />memcached -d -m 2048 -l 172.18.188.64 -p 11211 -u memcached<span class="Apple-converted-space"> </span><br />ngingx启动命令<span class="Apple-converted-space"> </span><br />sbin/nginx<span class="Apple-converted-space"> </span><br />tomcat启动命令(startup.sh)<span class="Apple-converted-space"> </span><br />分别启动memcached nginx tomcat能实现session的简单共享.<span class="Apple-converted-space"> </span><br />按照上面配置Nginx Memcached Tomcat启动运行都没有问题，并且可以实现Session的共享.但是有2个问题<span class="Apple-converted-space"> </span><br />一、Session的共享是基于访问IP的，即在同一台电脑上开2个IE窗口时，获取到Session中内容是相同的，也就是sessionid除了最后面的jvmrout不一样，其他都一样，内容也一样，这样就造成如果2个用户先后在同一台电脑上登录形成session混乱，有没有可能配置成同一ip在不同的ie窗口中不共享session，一个ie窗口对应一个session，而不是一个ip共享一个session.后台的访问依然是由nginx根据weight做分发而不是固定到一台固定的tomcat机器?<span class="Apple-converted-space"> </span><br />二、Memcached 启动是用-m 512发现会有数据丢失而且丢失几率很大，在一个页面上连续不断的刷新时就会发现session中的内容会清空.</span>
<img src ="http://www.blogjava.net/libin2722/aggbug/355897.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2011-08-05 21:31 <a href="http://www.blogjava.net/libin2722/articles/355897.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于词典的正向最大匹配中文分词算法，能实现中英文数字混合分词</title><link>http://www.blogjava.net/libin2722/articles/355838.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 05 Aug 2011 00:34:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/355838.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/355838.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/355838.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/355838.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/355838.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 基于词典的正向最大匹配中文分词算法，能实现中英文数字混合分词。比如能分出这样的词：bb霜、3室、乐phone、touch4、mp3、T恤第一次写中文分词程序，欢迎拍砖。public class MM2 {    private static final Log log = LogFactory.getLog(MM2.class);        private static HashMap&lt;...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/355838.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/355838.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2011-08-05 08:34 <a href="http://www.blogjava.net/libin2722/articles/355838.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux下Nginx+tomcat整合的安装与配置</title><link>http://www.blogjava.net/libin2722/articles/355631.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 03 Aug 2011 01:08:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/355631.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/355631.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/355631.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/355631.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/355631.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 目的：搭建Nginx与tomcat整合，用Nginx代替apache						步骤：一、安装Tomcat和JDK  1、上传apache-tomcat-6.0.18.tar.gz和jdk-6u12-linux-i586.bin至/usr/local2、执行如下命令安装tomcat：1.#cd /usr/local2.#tar zxvf apache-tomcat-6.0.18.tar.gz解...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/355631.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/355631.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2011-08-03 09:08 <a href="http://www.blogjava.net/libin2722/articles/355631.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从 iBatis 到 MyBatis - MyBatis 简明学习教程</title><link>http://www.blogjava.net/libin2722/articles/354030.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Sun, 10 Jul 2011 02:40:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/354030.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/354030.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/354030.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/354030.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/354030.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 从																		 iBatis 								到																		 MyBatis								，你准备好了吗？												对于从事 Java EE 的开发人员来说，iBatis 是一个再熟悉不过的持久层框架了，在 Hibernate、JPA 这样的一站式对象 / 关系映射（O/R Mapping）解决方案盛行...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/354030.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/354030.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2011-07-10 10:40 <a href="http://www.blogjava.net/libin2722/articles/354030.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Apache Http Server与Tomcat实现负载均衡和集群</title><link>http://www.blogjava.net/libin2722/articles/352842.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 22 Jun 2011 14:18:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/352842.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/352842.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/352842.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/352842.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/352842.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: Apache Http Server与Tomcat实现负载均衡和集群																														一、分布式实现原理																																																		       																																								...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/352842.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/352842.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2011-06-22 22:18 <a href="http://www.blogjava.net/libin2722/articles/352842.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>linux+nginx+tomcat负载均衡，实现session同步</title><link>http://www.blogjava.net/libin2722/articles/352841.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Wed, 22 Jun 2011 14:15:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/352841.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/352841.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/352841.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/352841.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/352841.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 软件及环境是：虚拟机上装centos 5.5IP为：192.168.0.51 装上nginx和tomcat  6.0.32 命名为 Tomcat1一台win7上装tomcat  6.0.32  IP为：192.168.0.50  命名为 Tomcat2首先装nginx，我是参照http://blog.s135.com/nginx_php_v6/ 配了一个Nginx + PHP（FastCGI）环境...&nbsp;&nbsp;<a href='http://www.blogjava.net/libin2722/articles/352841.html'>阅读全文</a><img src ="http://www.blogjava.net/libin2722/aggbug/352841.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2011-06-22 22:15 <a href="http://www.blogjava.net/libin2722/articles/352841.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>