﻿<?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-磨刀不误砍柴工-文章分类-Others</title><link>http://www.blogjava.net/weiwei/category/53457.html</link><description>合抱之木，生于毫末；九层之台，起于累土；千里之行，始于足下。</description><language>zh-cn</language><lastBuildDate>Sun, 22 Dec 2013 02:04:49 GMT</lastBuildDate><pubDate>Sun, 22 Dec 2013 02:04:49 GMT</pubDate><ttl>60</ttl><item><title>足球规则-视频</title><link>http://www.blogjava.net/weiwei/articles/407865.html</link><dc:creator>liwei5891</dc:creator><author>liwei5891</author><pubDate>Sat, 21 Dec 2013 15:41:00 GMT</pubDate><guid>http://www.blogjava.net/weiwei/articles/407865.html</guid><wfw:comment>http://www.blogjava.net/weiwei/comments/407865.html</wfw:comment><comments>http://www.blogjava.net/weiwei/articles/407865.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weiwei/comments/commentRss/407865.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiwei/services/trackbacks/407865.html</trackback:ping><description><![CDATA[<div>足球规则第一章 比赛场地</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=1322621_1279208024_OErhTyU4XjbK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYd8F5ivXFokbpWFMR5o9c/wn/s.swf</div><div></div><div>足球规则第二章 球</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939506_1279208024_akzmTCo6BmfK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6SzWBtkEqDhARZg2dvcj1xs/s.swf</div><div></div><div>足球规则第三章 队员人数</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939528_1279208024_a0u1GnZuDGHK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6SzUCNkEqDhARZg2dvcj1RU/s.swf</div><div></div><div>足球规则第四章 队员装备</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939735_1279208024_OEjjSyA/XmDK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6S7VBdkEqDhARZg2dvch1Bg/s.swf</div><div></div><div>足球规则第五章 裁判员</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939594_1279208024_aEmyGHZuB2TK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6SzfBNkEqDhARZg2dvcj3hk/s.swf</div><div></div><div>足球规则第六章 助理裁判员</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939656_1279208024_aBm8SHNrDWXK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6S/TBtkEqDhARZg2dvcg0hs/s.swf</div><div></div><div>足球规则第七章 比赛时间</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939865_1279208024_bkO8GiE8XmHK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6SHQBdkEqDhARZg2dvcu0Rg/s.swf</div><div></div><div>足球规则第八章 比赛开始及重新开始</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939728_1279208024_aB3gRyQ6Xm7K+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6S7UCNkEqDhARZg2dvch1RU/s.swf</div><div></div><div>足球规则第九章 比赛进行及死球</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939750_1279208024_bhm0SyNpXWfK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6S7TANkEqDhARZg2dvch0h0/s.swf</div><div></div><div>足球规则第十章 记胜方法</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10939969_1279208024_Zx7kSCo+XW/K+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQE6SDQCdkEqDhARZg2dvcv0RQ/s.swf</div><div></div><div>足球规则第十一章 越位</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10940141_1279208024_O0mxHXFqCm7K+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQD4CjSAdkEqDhARZg2cf4n0xw/s.swf</div><div></div><div>足球规则第十二章 犯规与不正当行为</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=10940156_1279208024_bh/nTSNuDG7K+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GYYtQD4CjTBtkEqDhARZg2cf4n0hs/s.swf</div><div></div><div>足球规则第十三章 任意球</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=25544688_1279208024_O0m0TCo4XmPK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GbZ9gD5C/eCNkEqDhARp06cfog3xU/s.swf</div><div></div><div>足球规则第十四章 罚球点球</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=25544796_1279208024_bUvmTCMxBmXK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GbZ9gD5C7fBtkEqDhARp06cfoh3hs/s.swf</div><div></div><div>足球规则第十五章 掷界外球</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=25544834_1279208024_a028GiI4CjXK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GbZ9gD5CHVBNkEqDhARp06cfou1Bk/s.swf</div><div></div><div>足球规则第十六章 球门球</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=25536623_1279208024_P021SSQxC2bK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GbZ9gE5i/UA9kEqDhARp06dvgg1R4/s.swf</div><div></div><div>足球规则第十七章 角球</div><div>http://you.video.sina.com.cn/api/sinawebApi/outplayrefer.php/vid=25544954_1279208024_bErmTis6CzPK+l1lHz2stqkP7KQNt6nki229uVKsJQxdQ0/XM5GbZ9gD5CDTBNkEqDhARp06cfov0hk/s.swf</div><img src ="http://www.blogjava.net/weiwei/aggbug/407865.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiwei/" target="_blank">liwei5891</a> 2013-12-21 23:41 <a href="http://www.blogjava.net/weiwei/articles/407865.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>海量用户积分排名算法探讨(转)</title><link>http://www.blogjava.net/weiwei/articles/406768.html</link><dc:creator>liwei5891</dc:creator><author>liwei5891</author><pubDate>Mon, 25 Nov 2013 00:37:00 GMT</pubDate><guid>http://www.blogjava.net/weiwei/articles/406768.html</guid><wfw:comment>http://www.blogjava.net/weiwei/comments/406768.html</wfw:comment><comments>http://www.blogjava.net/weiwei/articles/406768.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weiwei/comments/commentRss/406768.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiwei/services/trackbacks/406768.html</trackback:ping><description><![CDATA[<h3><span style="font-weight: normal;">转至：</span><a href="http://www.cnblogs.com/weidagang2046/archive/2012/03/01/massive-user-ranking.html"><span style="font-weight: normal;">http://www.cnblogs.com/weidagang2046/archive/2012/03/01/massive-user-ranking.html<br /></span></a><br />问题</h3><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">某海量用户网站，用户拥有积分，积分可能会在使用过程中随时更新。现在要为该网站设计一种算法，在每次用户登录时显示其当前积分排名。用户最大规模为2亿；积分为非负整数，且小于100万。</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">PS: 据说这是迅雷的一道面试题，不过问题本身具有很强的真实性，所以本文打算按照真实场景来考虑，而不局限于面试题的理想环境。</p><h3>存储结构</h3><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">首先，我们用一张用户积分表user_score来保存用户的积分信息。</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">表结构：</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;"><img src="http://images.cnblogs.com/cnblogs_com/weidagang2046/359580/r_user_score_schema.png" alt="user&lt;em /&gt;score&lt;/em&gt;schema" title="" style="border: 0px;" /></p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">示例数据：</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;"><img src="http://images.cnblogs.com/cnblogs_com/weidagang2046/359580/r_user_score_sample.png" alt="user&lt;em /&gt;score&lt;/em&gt;sample" title="" style="border: 0px;" /></p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">下面的算法会基于这个基本的表结构来进行。</p><h3>算法1：简单SQL查询</h3><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">首先，我们很容易想到用一条简单的SQL语句查询出积分大于该用户积分的用户数量：</p><pre style="margin-top: 10px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; color: #535353; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;"><code style="padding-top: 5px; color: #800040;">select 1 + count(t2.uid) as rank from user_score t1, user_score t2 where t1.uid = @uid and t2.score &gt; t1.score </code></pre><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">对于4号用户我们可以得到下面的结果：</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;"><img src="http://images.cnblogs.com/cnblogs_com/weidagang2046/359580/o_sql.png" alt="sql_1" title="" style="border: 0px;" /></p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">算法特点</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">优点：简单，利用了SQL的功能，不需要复杂的查询逻辑，也不引入额外的存储结构，对小规模或性能要求不高的应用不失为一种良好的解决方案。</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">缺点：需要对user_score表进行全表扫描，还需要考虑到查询的同时若有积分更新会对表造成锁定，在海量数据规模和高并发的应用中，性能是无法接受的。</p><h3>算法2：均匀分区设计</h3><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">在许多应用中缓存是解决性能问题的重要途径，我们自然会想能不能把用户排名用Memcached缓存下来呢？不过再一想发现缓存似乎帮不上什么忙，因为用户排名是一个全局性的统计性指标，而并非用户的私有属性，其他用户的积分变化可能会马上影响到本用户的排名。然而，真实的应用中积分的变化其实也是有一定规律的，通常一个用户的积分不会突然暴增暴减，一般用户总是要在低分区混迹很长一段时间才会慢慢升入高分区，也就是说用户积分的分布总体说来是有区段的，我们进一步注意到高分区用户积分的细微变化其实对低分段用户的排名影响不大。于是，我们可以想到按积分区段进行统计的方法，引入一张分区积分表score_range：</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">表结构：</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;"><img src="http://images.cnblogs.com/cnblogs_com/weidagang2046/359580/r_score_range_schema.png" alt="score&lt;em /&gt;range&lt;/em&gt;schema" title="" style="border: 0px;" /></p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">数据示例：</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;"><img src="http://images.cnblogs.com/cnblogs_com/weidagang2046/359580/r_score_range_sample.png" alt="score&lt;em /&gt;range&lt;/em&gt;sample" title="" style="border: 0px;" /></p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">表示[from_score, to_score)区间有count个用户。若我们按每1000分划分一个区间则有[0, 1000), [1000, 2000), &#8230;, [999000, 1000000)这1000个区间，以后对用户积分的更新要相应地更新score_range表的区间值。在分区积分表的辅助下查询积分为s的用户的排名，可以首先确定其所属区间，把高于s的积分区间的count值累加，然后再查询出该用户在本区间内的排名，二者相加即可获得用户的排名。</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">乍一看，这个方法貌似通过区间聚合减少了查询计算量，实则不然。最大的问题在于如何查询用户在本区间内的排名呢？如果是在算法1中的SQL中加上积分条件：</p><pre style="margin-top: 10px; margin-bottom: 0px; white-space: pre-wrap; word-wrap: break-word; color: #535353; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;"><code style="padding-top: 5px; color: #800040;">select 1 + count(t2.uid) as rank from user_score t1, user_score t2 where t1.uid = @uid and t2.score &gt; t1.score and t2.score &lt; @to_score </code></pre><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">在理想情况下，由于把t2.score的范围限制在了1000以内，如果对score字段建立索引，我们期望本条SQL语句将通过索引大大减少扫描的user_score表的行数。不过真实情况并非如此，t2.score的范围在1000以内并不意味着该区间内的用户数也是1000，因为这里有积分相同的情况存在！二八定律告诉我们，前20%的低分区往往集中了80%的用户，这就是说对于大量低分区用户进行区间内排名查询的性能远不及对少数的高分区用户，所以在一般情况下这种分区方法不会带来实质性的性能提升。</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">算法特点</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">优点：注意到了积分区间的存在，并通过预先聚合消除查询的全表扫描。</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">缺点：积分非均匀分布的特点使得性能提升并不理想。</p><h3>算法3：树形分区设计</h3><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">均匀分区查询算法的失败是由于积分分布的非均匀性，那么我们自然就会想，能不能按二八定律，把score_range表设计为非均匀区间呢？比如，把低分区划密集一点，10分一个区间，然后逐渐变成100分，1000分，10000分 &#8230; 当然，这不失为一种方法，不过这种分法有一定的随意性，不容易把握好，而且整个系统的积分分布会随着使用而逐渐发生变化，最初的较好的分区方法可能会变得不适应未来的情况了。我们希望找到一种分区方法，既可以适应积分非均匀性，又可以适应系统积分分布的变化，这就是树形分区。</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">我们可以把[0, 1,000,000)作为一级区间；再把一级区间分为两个2级区间[0, 500,000), [500,000, 1,000,000)，然后把二级区间二分为4个3级区间[0, 250,000), [250,000, 500,000), [500,000, 750,000), [750,000, 1,000,000)，依此类推，最终我们会得到1,000,000个21级区间[0,1), [1,2) &#8230; [999,999, 1,000,000)。这实际上是把区间组织成了一种平衡二叉树结构，根结点代表一级区间，每个非叶子结点有两个子结点，左子结点代表低分区间，右子结点代表高分区间。树形分区结构需要在更新时保持一种不变量(Invariant)：非叶子结点的count值总是等于其左右子结点的count值之和。</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;"><img src="http://images.cnblogs.com/cnblogs_com/weidagang2046/359580/r_ranking_tree.png" alt="range_tree" title="" style="border: 0px;" /></p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">以后，每次用户积分有变化所需要更新的区间数量和积分变化量有关系，积分变化越小更新的区间层次越低。总体上，每次所需要更新的区间数量是用户积分变量的log(n)级别的，也就是说如果用户积分一次变化在百万级，更新区间的数量在二十这个级别。在这种树形分区积分表的辅助下查询积分为s的用户排名，实际上是一个在区间树上由上至下、由粗到细一步步明确s所在位置的过程。比如，对于积分499,000，我们用一个初值为0的排名变量来做累加；首先，它属于1级区间的左子树[0, 500,000)，那么该用户排名应该在右子树[500,000, 1,000,000)的用户数count之后，我们把该count值累加到该用户排名变量，进入下一级区间；其次，它属于3级区间的[250,000, 500,000)，这是2级区间的右子树，所以不用累加count到排名变量，直接进入下一级区间；再次，它属于4级区间的&#8230;；直到最后我们把用户积分精确定位在21级区间[499,000, 499,001)，整个累加过程完成，得出排名！</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">虽然，本算法的更新和查询都涉及到若干个操作，但如果我们为区间的from_score和to_score建立索引，这些操作都是基于键的查询和更新，不会产生表扫描，因此效率更高。另外，本算法并不依赖于关系数据模型和SQL运算，可以轻易地改造为NoSQL等其他存储方式，而基于键的操作也很容易引入缓存机制进一步优化性能。进一步，我们可以估算一下树形区间的数目大约为2,000,000，考虑每个结点的大小，整个结构只占用几十M空间。所以，我们完全可以在内存建立区间树结构，并通过user_score表在O(n)的时间内初始化区间树，然后排名的查询和更新操作都可以在内存进行。一般来讲，同样的算法，从数据库到内存算法的性能提升常常可以达到10^5以上；因此，本算法可以达到非常高的性能。</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">算法特点</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">优点：结构稳定，不受积分分布影响；每次查询或更新的复杂度为积分最大值的O(log(n))级别，且与用户规模无关，可以应对海量规模；不依赖于SQL，容易改造为NoSQL或内存数据结构。</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">缺点：算法相对更复杂。</p><h3>算法4：积分排名数组</h3><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">算法3虽然性能较高，达到了积分变化的O(log(n))的复杂度，但是实现上比较复杂。另外，O(log(n))的复杂度只在n特别大的时候才显出它的优势，而实际应用中积分的变化情况往往不会太大，这时和O(n)的算法相比往往没有明显的优势，甚至可能更慢。</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">考虑到这一情况，仔细观察一下积分变化对排名的具体影响，可以发现某用户的积分从s变为s+n，积分小于s或者大于等于s+n的其他用户排名实际上并不会受到影响，只有积分在[s,s+n)区间内的用户排名会下降1位。我们可以用于一个大小为1,000,000的数组表示积分和排名的对应关系，其中rank[s]表示积分s所对应的排名。初始化时，rank数组可以由user_score表在O(n)的复杂度内计算而来。用户排名的查询和更新基于这个数组来进行。查询积分s所对应的排名直接返回rank[s]即可，复杂度为O(1)；当用户积分从s变为s+n，只需要把rank[s]到rank[s+n-1]这n个元素的值增加1即可，复杂度为O(n)。</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">算法特点</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">优点：积分排名数组比区间树更简单，易于实现；排名查询复杂度为O(1)；排名更新复杂度O(n)，在积分变化不大的情况下非常高效。</p><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">缺点：当n比较大时，需要更新大量元素，效率不如算法3。</p><h3>总结</h3><p style="-webkit-margin-before: 0px; -webkit-margin-after: 0px; margin-top: 10px; margin-bottom: 10px; color: #535353; font-family: Quicksand, 'Helvetica Neue', sans-serif; font-size: 15.555556297302246px; line-height: 23.99305534362793px; background-color: #ffffff;">上面介绍了用户积分排名的几种算法，算法1简单易于理解和实现，适用于小规模和低并发应用；算法3引入了更复杂的树形分区结构，但是O(log(n))的复杂度性能优越，可以应用于海量规模和高并发；算法4采用简单的排名数组，易于实现，在积分变化不大的情况下性能不亚于算法3。本问题是一个开放性的问题，相信一定还有其他优秀的算法和解决方案，欢迎探讨！</p><img src ="http://www.blogjava.net/weiwei/aggbug/406768.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiwei/" target="_blank">liwei5891</a> 2013-11-25 08:37 <a href="http://www.blogjava.net/weiwei/articles/406768.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>双系统unbuntu访问windows磁盘</title><link>http://www.blogjava.net/weiwei/articles/399762.html</link><dc:creator>liwei5891</dc:creator><author>liwei5891</author><pubDate>Sat, 25 May 2013 14:52:00 GMT</pubDate><guid>http://www.blogjava.net/weiwei/articles/399762.html</guid><wfw:comment>http://www.blogjava.net/weiwei/comments/399762.html</wfw:comment><comments>http://www.blogjava.net/weiwei/articles/399762.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weiwei/comments/commentRss/399762.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiwei/services/trackbacks/399762.html</trackback:ping><description><![CDATA[1.使用fdisk命令查看windows磁盘分区在linux下的设备名<br /><br /><div>root@will-ThinkPad-X201:/# fdisk -l</div><div></div><div>Disk /dev/sda: 320.1 GB, 320072933376 bytes</div><div>255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors</div><div>Units = sectors of 1 * 512 = 512 bytes</div><div>Sector size (logical/physical): 512 bytes / 512 bytes</div><div>I/O size (minimum/optimal): 512 bytes / 512 bytes</div><div>Disk identifier: 0xf0b1ebb0</div><div></div><div>&nbsp; &nbsp;Device Boot &nbsp; &nbsp; &nbsp;Start &nbsp; &nbsp; &nbsp; &nbsp; End &nbsp; &nbsp; &nbsp;Blocks &nbsp; Id &nbsp;System</div><div>/dev/sda1 &nbsp; * &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;63 &nbsp; 104872319 &nbsp; &nbsp;52436128+ &nbsp; 7 &nbsp;HPFS/NTFS/exFAT</div><div>/dev/sda2 &nbsp; &nbsp; &nbsp; 104872381 &nbsp; 324587519 &nbsp; 109857569+ &nbsp; f &nbsp;W95 Ext'd (LBA)</div><div>/dev/sda3 &nbsp; &nbsp; &nbsp; 324587520 &nbsp; 625141759 &nbsp; 150277120 &nbsp; 83 &nbsp;Linux</div><div>/dev/sda5 &nbsp; &nbsp; &nbsp; 104872383 &nbsp; 314586719 &nbsp; 104857168+ &nbsp; 7 &nbsp;HPFS/NTFS/exFAT</div><div>/dev/sda6 &nbsp; &nbsp; &nbsp; 314587136 &nbsp; 324587519 &nbsp; &nbsp; 5000192 &nbsp; 82 &nbsp;Linux swap / Solaris</div><div><br />heads 代表磁盘面数；sectors代表扇区数，每个扇区大小是0.5KB;cylinders代表柱面数。因此磁盘空间大小为：<br />&nbsp; &nbsp; 磁面个数 ＊ （扇区个数 ＊ 512） ＊ 柱面个数<br />第一列&nbsp;Device 表示磁盘分区对应的设备名<br />第二列&nbsp;Boot 表示是否为引导分区，上面的 。/dev/sda1就是引导分区<br />第三列&nbsp;Start 表示每个磁盘分区的起始位置，以柱面为计数单位<br />第四列&nbsp;End 表示每个磁盘分区的终止位置，以柱面为计数单位<br />第五列&nbsp;Blocks 表示磁盘分区的容量，以KB为单位<br />第六列 ID 表示磁盘分区对应的ID，根据分区的不同，对应的ID号也不同。LINUX下 83代表主分区和逻辑分区，5代表扩展分区，82代表交换分区，7代表NTFS分区<br />第七列&nbsp;System 与第6列基本相同<br /><br />因此，/dev/sda3 为主分区，/dev/sda6为交换分区，/dev/sda1，/dev/sda5为NTFS分区，也就是WINDOWS下的盘符。对应到本机则是C盘与D盘</div><br /><br />2.使用mount命令挂载磁盘设备<br /><div>&nbsp;挂载/dev/sda1至 /mnt/c ：<br />&nbsp;&nbsp;&nbsp;&nbsp;mount -t ntfs -o codepage=936 /dev/sda1 /mnt/c</div>&nbsp;挂载/dev/sda5至 /mnt/d ：<br />&nbsp;&nbsp;&nbsp;&nbsp;mount -t ntfs -o codepage=936 /dev/sda5 /mnt/d<br /><br />&nbsp;挂载完成可通过 df命令查看：<br />&nbsp;root@will-ThinkPad-X201:/# df<div>文件系统 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1K-块 &nbsp; &nbsp; 已用 &nbsp; &nbsp; &nbsp;可用 已用% 挂载点</div><div>/dev/sda3 &nbsp; &nbsp; &nbsp;147918288 &nbsp;9957992 130446440 &nbsp; &nbsp;8% /</div><div>udev &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1949864 &nbsp; &nbsp; &nbsp; &nbsp;4 &nbsp; 1949860 &nbsp; &nbsp;1% /dev</div><div>tmpfs &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 782872 &nbsp; &nbsp; &nbsp;860 &nbsp; &nbsp;782012 &nbsp; &nbsp;1% /run</div><div>none &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5120 &nbsp; &nbsp; &nbsp; &nbsp;0 &nbsp; &nbsp; &nbsp;5120 &nbsp; &nbsp;0% /run/lock</div><div>none &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1957172 &nbsp; &nbsp; &nbsp;696 &nbsp; 1956476 &nbsp; &nbsp;1% /run/shm</div><div>/dev/sda5 &nbsp; &nbsp; &nbsp;104857168 65301364 &nbsp;39555804 &nbsp; 63% /mnt/d</div><div>/dev/sda1 &nbsp; &nbsp; &nbsp; 52436128 21754476 &nbsp;30681652 &nbsp; 42% /mnt/c<br /><br />如此，就可以通过 /mnt/d访问 D盘，通过 /mnt/c 访问 C盘了</div><div></div><br />相关概念：<br />磁盘设备在linux上的表示方法：<br />&nbsp; &nbsp; 常见的磁盘类型有 IDE并口磁盘，STAT串口磁盘和SCSI磁盘。<br />&nbsp; &nbsp; 表示方案有两种，<br />&nbsp;&nbsp;&nbsp;&nbsp;方案一：<br />&nbsp; &nbsp; 主设备号＋次设备号＋磁盘分区编号<br />&nbsp; &nbsp; 对于IDE磁盘：hd[a-z]x<br />&nbsp; &nbsp; 对于SCSI磁盘：sd[a-z]x<br />&nbsp; &nbsp; &#8220;a-z&#8221;表示设备的序号，如 /dev/hda表示第一块IDE磁盘，/dev/hdb表示第二块IDE磁盘<br />&nbsp; &nbsp; "x"表示每块磁盘上划分的磁盘分区编号。比如 /dev/sdax 表示第一块IDE磁盘上的第"x"个分区。注意 x从 1 开始<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp; &nbsp; 方案二：<br />&nbsp; &nbsp; 主设备号＋[0-n],y<br />&nbsp; &nbsp;&nbsp;对于IDE磁盘：hd[0-n],y<br />&nbsp; &nbsp; 对于SCSI磁盘：sd[0-n],y<br />&nbsp;&nbsp;&nbsp;&nbsp;&#8220;0-n&#8221;表示设备的序号，如 /dev/hd0表示第一块IDE磁盘，/dev/hd1表示第二块IDE磁盘<br />&nbsp; &nbsp; "y"表示每块磁盘上划分的磁盘分区编号。比如 /dev/sd0,1 表示第一块IDE磁盘上的第1个分区<br /><br />&nbsp; &nbsp;&nbsp;<br /><br />挂载点：<br />&nbsp;&nbsp;&nbsp;&nbsp;就是在linux上建一目录，通过这个目录建立了操作系统和磁盘存取的入口。也就是说，将设备挂载到这个目录后，对于这个目录的任何操作就相当于对设备的操作。linux默认的挂载点目录为：/mnt 或者 /media<br /><br /><br />mount/umount命令<br /><div>mount [-t vfstype] [-o options] device dir</div><div></div><div>　　其中：</div><div></div><div>　　1.-t vfstype 指定文件系统的类型，通常不必指定。mount 会自动选择正确的类型。常用类型有：</div><div></div><div>　　光盘或光盘镜像：iso9660</div><div></div><div>　　DOS fat16文件系统：msdos</div><div></div><div>　　Windows 9x fat32文件系统：vfat</div><div></div><div>　　Windows NT ntfs文件系统：ntfs</div><div></div><div>　　Mount Windows文件网络共享：smbfs</div><div></div><div>　　UNIX(LINUX) 文件网络共享：nfs</div><div></div><div>　　2.-o options 主要用来描述设备或档案的挂接方式。常用的参数有：</div><div></div><div>　　loop：用来把一个文件当成硬盘分区挂接上系统</div><div></div><div>　　ro：采用只读方式挂接设备</div><div></div><div>　　rw：采用读写方式挂接设备</div><div></div><div>　　iocharset：指定访问文件系统所用字符集</div><div></div><div>　　3.device 要挂接(mount)的设备。</div><div></div><div>　　4.dir设备在系统上的挂接点(mount point)。<br /><br /><br />umount dir<br />&nbsp;&nbsp;&nbsp;&nbsp;dir设备在系统上的挂接点(mount point)。</div><img src ="http://www.blogjava.net/weiwei/aggbug/399762.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiwei/" target="_blank">liwei5891</a> 2013-05-25 22:52 <a href="http://www.blogjava.net/weiwei/articles/399762.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>UML精粹：标准对象建模语言简明指南第三版 下载地址</title><link>http://www.blogjava.net/weiwei/articles/371841.html</link><dc:creator>liwei5891</dc:creator><author>liwei5891</author><pubDate>Wed, 14 Mar 2012 02:40:00 GMT</pubDate><guid>http://www.blogjava.net/weiwei/articles/371841.html</guid><wfw:comment>http://www.blogjava.net/weiwei/comments/371841.html</wfw:comment><comments>http://www.blogjava.net/weiwei/articles/371841.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/weiwei/comments/commentRss/371841.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiwei/services/trackbacks/371841.html</trackback:ping><description><![CDATA[书籍UML精粹下载<br />英文版本 UML Distilled 3rd<br />中文版本 <a href="http://dxdown.2cto.com//ebook/bc/822UMLjcjmzn.rar">UML精粹：标准对象建模语言简明指南 第三版</a><img src ="http://www.blogjava.net/weiwei/aggbug/371841.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiwei/" target="_blank">liwei5891</a> 2012-03-14 10:40 <a href="http://www.blogjava.net/weiwei/articles/371841.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JRockit Mission Control建立到Tomcat的连接(windows)</title><link>http://www.blogjava.net/weiwei/articles/329470.html</link><dc:creator>liwei5891</dc:creator><author>liwei5891</author><pubDate>Fri, 20 Aug 2010 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/weiwei/articles/329470.html</guid><wfw:comment>http://www.blogjava.net/weiwei/comments/329470.html</wfw:comment><comments>http://www.blogjava.net/weiwei/articles/329470.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/weiwei/comments/commentRss/329470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiwei/services/trackbacks/329470.html</trackback:ping><description><![CDATA[软件版本：<br />Jrokit: jrockit-R27.5.0-jdk1.5.0_14-windows-ia32.exe<br />JMC: Oracle JRockit Mission Control 3.1.2<br />Tomcat: apache-tomcat-6.0.26<br /><br />安装好Jrokit后， 设置JAVA_HOME指向Jrokit安装目录，在cmd下输入：<br />java -version显示：<br /><br /><small><font color="#663366">java version "1.5.0_14"<br />Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_14-b03)<br />BEA JRockit(R) (build R27.5.0-110_o-99226-1.5.0_14-20080528-1505-windows-ia32, compiled mode)</font></small><br /><br />然后配置打开Tomcat的bin目录下catalina.bat文件<br /><br />找到：<br />set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER%<br />并在其后添加：<br />-Xmanagement -Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false<br /><br />修改完成后，如下：<br /><br /><small>set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER% -Xmanagement -Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false</small><br /><br />接着，运行startup.bat启动Tomcat<br />可以看到下面的语句:<br /><small>[JRockit] Management server started on port 7091, ssl=false, authenticate=false.<br />2010-8-20 10:32:15 org.apache.catalina.core.AprLifecycleListener init<br /><br /><big>打开</big></small>Oracle JRockit Mission Control 3.1.2:<br /><img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/weiwei/image001.png"  alt="" /><br />右击连接器，选择 新建连接，打开新建界面：<br /><img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/weiwei/image003.png"  alt="" /><br /><small><br /></small>选中JDK1.5+,输入正确的主机及端口，这里默认值与我们的设置一致<br /><br />测试连接：点击测试连接，可以看到状态由"未经测试"变成了"确定"<br /><br />单击Finish，在浏览器中可以看到新添加的连接：<br /><img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/weiwei/image005.png"  alt="" /><br /><br /><br />方式二：<br />JDP<br />除在catanina.bat文件添加部分再加上-Xmanagement:autodiscovery=true就OK了，<br />修改后如下：<br />set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER% -Xmanagement:autodiscovery=true -Dcom.sun.management.jmxremote.port=7091 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false<br /><br />tomcat启动好，启动Jrockit Mission Control<br /><img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/weiwei/%E6%9C%AA%E5%91%BD%E5%90%8D.PNG"  alt="" /><br />可以看到 JDP下已经自动连接好了。<br /><br />当然，如果是本地的tomcat，则在本地目录下，会自动发现tomcat（不管tomcat的catanina.bat有没有进行修改，前提是tomcat运行在jrokit之上）<br /><br /><br /><br /><br /><br /><div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=126cfaeb-511d-809d-9e91-830eac15745e" /></div><img src ="http://www.blogjava.net/weiwei/aggbug/329470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiwei/" target="_blank">liwei5891</a> 2010-08-20 15:19 <a href="http://www.blogjava.net/weiwei/articles/329470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse调试JBOSS</title><link>http://www.blogjava.net/weiwei/articles/311843.html</link><dc:creator>liwei5891</dc:creator><author>liwei5891</author><pubDate>Wed, 03 Feb 2010 13:31:00 GMT</pubDate><guid>http://www.blogjava.net/weiwei/articles/311843.html</guid><wfw:comment>http://www.blogjava.net/weiwei/comments/311843.html</wfw:comment><comments>http://www.blogjava.net/weiwei/articles/311843.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weiwei/comments/commentRss/311843.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiwei/services/trackbacks/311843.html</trackback:ping><description><![CDATA[<p>
				<em>先解释bat文件中的两个命令：</em>
		</p>
		<p>
				<em>rem 注释命令，表示rem所在行的语句为注释</em>
		</p>
		<p>
				<em>echo 命令，回显到命令行窗口的语句</em>
		</p>
		<p>&nbsp;</p>
		<p>打开%JBOSS_HOME%/bin路径下找到文件run.bat</p>
		<p>找到行：</p>
		<p>rem set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y %JAVA_OPTS%</p>
		<p>这一行语句注释的就是要调试JBOSS而需要配置的语句。可以直接去掉注释命令rem即可。</p>
		<p>set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y %JAVA_OPTS%<br /></p>
		<p>我的配置是，保留了注释，并加了一条打印语句。</p>
		<p>
				<a href="/images/blogjava_net/weiwei/WindowsLiveWriter/eclipseJBOSS_8F1D/image_4.png">
						<img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="43" alt="image" src="http://www.blogjava.net/images/blogjava_net/weiwei/WindowsLiveWriter/eclipseJBOSS_8F1D/image_thumb_1.png" width="549" border="0" />
				</a>
		</p>echo set the application debug port 8787<br />rem set JAVA_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y %JAVA_OPTS%<br />set JAVA_OPTS= %JAVA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y  <p>启动jboss时，控制台打印如下：</p><p>&nbsp; </p><p><a href="/images/blogjava_net/weiwei/WindowsLiveWriter/eclipseJBOSS_8F1D/image_2.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="275" alt="image" src="http://www.blogjava.net/images/blogjava_net/weiwei/WindowsLiveWriter/eclipseJBOSS_8F1D/image_thumb.png" width="520" border="0" /></a></p><p>&nbsp;</p><p>&nbsp;</p><p>&nbsp;</p><p>之后，就可以在eclipse中配置远程调试了：</p><p>[Run]&#8212;&gt;[Debug Configration&#8230;]打开调试配置窗口，</p><p><a href="/images/blogjava_net/weiwei/WindowsLiveWriter/eclipseJBOSS_8F1D/image_8.png"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="454" alt="image" src="http://www.blogjava.net/images/blogjava_net/weiwei/WindowsLiveWriter/eclipseJBOSS_8F1D/image_thumb_3.png" width="568" border="0" /></a></p><p>如图，选中Remote Java Application，右击，选择新增</p><p>打开图右侧画面。</p><p>然后写上Name，并选择Project(源代码项目文件)，填写连接属性。</p><p>我的配置是：</p><p>Name:haim</p><p>项目Project:hame</p><p>连接属性：Host localhost,Port 8787</p><p>&nbsp;</p><p>接下来，调试就与本地调试一致了。</p><div class="wlWriterEditableSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:f145bf3a-d61d-43c1-9cc1-a1edae30136e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px">Technorati 标签: <a href="http://technorati.com/tags/jboss+%e8%bf%9c%e7%a8%8b%e8%b0%83%e8%af%95" rel="tag">jboss 远程调试</a></div><img src ="http://www.blogjava.net/weiwei/aggbug/311843.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiwei/" target="_blank">liwei5891</a> 2010-02-03 21:31 <a href="http://www.blogjava.net/weiwei/articles/311843.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>IE7安全限制问题</title><link>http://www.blogjava.net/weiwei/articles/230420.html</link><dc:creator>liwei5891</dc:creator><author>liwei5891</author><pubDate>Mon, 22 Sep 2008 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/weiwei/articles/230420.html</guid><wfw:comment>http://www.blogjava.net/weiwei/comments/230420.html</wfw:comment><comments>http://www.blogjava.net/weiwei/articles/230420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weiwei/comments/commentRss/230420.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiwei/services/trackbacks/230420.html</trackback:ping><description><![CDATA[
		<p>在项目中，有上传本地图片先预览的功能。原先在本机IE6，IE7浏览器中可正常预览的功能，但在将项目布暑到远程服务器的时候，在IE7中不能预览了。此问题，在之前同事的IE7访问我机子预览时也出现过，当时没在意，认为系统不会有问题。</p>
		<p>今天，上网找了许久，终于知道了，这原来是IE7中加强了安全限制。通过http访问的页面默认是没有访问用户本机图片文件的权限的，所以通过javascript获取不了本机的图片路径等相关信息。网上也有几种解决方案，一种是通过利用style的"DXImageTransform.Microsoft.AlphaImageLoader" 滤镜来实现，而另一种，则是设置当前站点为安全站点即可。</p>
		<p>由于，预览还涉及到图片旋转等，利用"DXImageTransform.Microsoft.AlphaImageLoader"方式，确不知道该如何旋转此滤镜中的图片，故暂时决定采用设置安全性方式，有劳用户了。</p>
		<p>一些莫名其妙的错误都是有源头的。</p>
		<p>收集的资料贴出来：</p>
		<table width="350">
				<tbody>
						<tr>
								<td>
										<p>在IE6.0中，用户可以在javascript中或许最终用户本地图片的长宽： <span><font style="BACKGROUND-COLOR: #f8f8f8" color="#000000"><br /></font></span></p>
										<ol class="highlighter-c">
												<li>
														<span>
																<font style="BACKGROUND-COLOR: #f8f8f8" color="#000000">
																		<span>&lt;Script language=Javascript&gt;</span>
																</font>
														</span>
												</li>
												<li class="alt">
														<span>
																<span class="keyword">function</span>
																<span>getLocalImageInfo( imgUrl )</span>
														</span>
												</li>
												<li>
														<span>{</span>
												</li>
												<li class="alt">
														<span class="keyword">var</span>
														<span>objImg =</span>
														<span class="keyword">new</span>
														<span>Image();</span>
												</li>
												<li>
														<span>objImg.src = imgUrl;</span>
												</li>
												<li class="alt">
														<span>alert( objImg.width )</span>
														<span class="comment">//the width of the local image</span>
												</li>
												<li>
														<span>alert( objImg.height )</span>
														<span class="comment">//the height of the local image</span>
												</li>
												<li class="alt">
														<span>}</span>
												</li>
												<li class="alt">
														<span class="comment">//调用如下</span>
												</li>
												<li>
														<span>getLocalImageInfo(</span>
														<span class="string">"file://c:\1.jpg"</span>
														<span>);</span>
												</li>
												<li class="alt">
														<span>&lt;/Script&gt;</span>
												</li>
										</ol>
										<p>并且，在IE6.0中，在客户端本地上传图片前可以通过Javascript/html预览要上传的图片，并获取图片的文件大小：</p>
										<br />
										<ol class="highlighter-xml">
												<li>
														<span class="tag">&lt;</span>
														<span class="tag-name">html</span>
														<span class="tag">&gt;</span>
												</li>
												<li class="alt">
														<span class="tag">&lt;</span>
														<span class="tag-name">head</span>
														<span class="tag">&gt;</span>
												</li>
												<li>
														<span class="tag">&lt;</span>
														<span class="tag-name">title</span>
														<span class="tag">&gt;</span>
														<span>Upload file</span>
														<span class="tag">&lt;/</span>
														<span class="tag-name">title</span>
														<span class="tag">&gt;</span>
												</li>
												<li class="alt">
														<span class="tag">&lt;/</span>
														<span class="tag-name">head</span>
														<span class="tag">&gt;</span>
												</li>
												<li class="alt">
														<span class="tag">&lt;</span>
														<span class="tag-name">body</span>
														<span class="tag">&gt;</span>
												</li>
												<li>
														<span class="tag">&lt;</span>
														<span class="tag-name">input</span>
														<span class="attribute">type</span>
														<span>=</span>
														<span class="attribute-value">"file"</span>
														<span class="attribute">onchange</span>
														<span>=</span>
														<span class="attribute-value">"javascript:previewImage(this.value)"</span>
														<span class="tag">&gt;</span>
												</li>
												<li>
														<span class="tag">&lt;</span>
														<span class="tag-name">img</span>
														<span class="attribute">id</span>
														<span>=</span>
														<span class="attribute-value">"img"</span>
														<span class="tag">/&gt;</span>
												</li>
												<li>
														<span class="tag">&lt;</span>
														<span class="tag-name">script</span>
														<span class="attribute">language</span>
														<span>=</span>
														<span class="attribute-value">"javascrtip"</span>
														<span class="tag">&gt;</span>
												</li>
												<li class="alt">
														<span>function previewImage( imgUrl )</span>
												</li>
												<li>
														<span>{</span>
												</li>
												<li class="alt">
														<span>var</span>
														<span class="attribute">objImg</span>
														<span>=</span>
														<span class="attribute-value">document</span>
														<span>.getElementById("img");</span>
												</li>
												<li>
														<span class="attribute">objImg.src</span>
														<span>=</span>
														<span class="attribute-value">imgUrl</span>
														<span>;</span>
												</li>
												<li class="alt">
														<span>alert( "the size of the image file:" + objImg.fileSize )</span>
												</li>
												<li>
														<span>}</span>
												</li>
												<li class="alt">
														<span class="tag">&lt;/</span>
														<span class="tag-name">script</span>
														<span class="tag">&gt;</span>
												</li>
												<li>
														<span class="tag">&lt;/</span>
														<span class="tag-name">body</span>
														<span class="tag">&gt;</span>
												</li>
												<li class="alt">
														<span class="tag">&lt;/</span>
														<span class="tag-name">html</span>
														<span class="tag">&gt;</span>
												</li>
										</ol>
										<p class="alt">
												<span>Note: 上面的代码最好在img图片加载完毕后再取图片的大小，例如：objImg.onreadystatechange()=function{ if(objImg.readystate=="complete")............}</span>
										</p>
										<p class="alt">
										</p>
										<p class="alt">
												<span>
														<clk>当在IE7中，如果上述代码放在客户机本机（以html的形式放在客户机器上，而不是放在IIS中通过http访问）以文件方式打开时仍然能实现IE6中的<nobr oncontextmenu="return false" onmousemove="kwM(1)" id="clickeyekey1" onmouseover="kwE(event,1, this)" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="kwC(event,1)" onmouseout="kwL(event,this)">功能</nobr>，但如果上述代码放在IIS中，用IE7 通过HTTP协议访问则不能正常工作。</clk>
												</span>
										</p>
										<p class="alt">
										</p>
										<p class="alt">
												<span>经过查找资料才发现IE7在安全性方面做了提升，通过http访问的页面默认是没有访问用户本机图片文件的权限的，所以通过javascript获取不了本机的图片长宽，也不能将本机图片地址赋值给&lt;img&gt;对象。如果将所访问的站点放入"可信站点"列表中（IE7-&gt;工具-&gt;Internet选项-&gt;安全-&gt;可信站点），则可以如IE6一样正常工作。</span>
										</p>
										<p class="alt">
										</p>
										<p class="alt">
												<span>如果不想通过客户将本站点设置为"可信"站点的方式来实现上传图片的预览及获取图片长宽信息，则可以利用style的"DXImageTransform.Microsoft.AlphaImageLoader" 滤镜来实现：</span>
										</p>
										<br />
										<ol class="highlighter-xml">
												<li>
														<span class="tag">&lt;</span>
														<span class="tag-name">html</span>
														<span class="tag">&gt;</span>
												</li>
												<li class="alt">
														<span class="tag">&lt;</span>
														<span class="tag-name">head</span>
														<span class="attribute">id</span>
														<span>=</span>
														<span class="attribute-value">"Head1"</span>
														<span class="attribute">runat</span>
														<span>=</span>
														<span class="attribute-value">"server"</span>
														<span class="tag">&gt;</span>
												</li>
												<li>
														<span class="tag">&lt;</span>
														<span class="tag-name">title</span>
														<span class="tag">&gt;</span>
														<span>Untitled Page</span>
														<span class="tag">&lt;/</span>
														<span class="tag-name">title</span>
														<span class="tag">&gt;</span>
												</li>
												<li class="alt">
														<span class="tag">&lt;</span>
														<span class="tag-name">script</span>
														<span class="attribute">language</span>
														<span>=</span>
														<span class="attribute-value">javascript</span>
														<span class="tag">&gt;</span>
												</li>
												<li>
														<span>function setImagePreview( fileUrl )</span>
												</li>
												<li class="alt">
														<span>{</span>
												</li>
												<li>
														<span>var</span>
														<span class="attribute">objDivFilter</span>
														<span>=</span>
														<span class="attribute-value">document</span>
														<span>.getElementById("divFilter")</span>
												</li>
												<li>
														<span>if( fileUrl )</span>
												</li>
												<li class="alt">
														<span>{</span>
												</li>
												<li>
														<span class="attribute">objDivFilter.style.width</span>
														<span>=</span>
														<span class="attribute-value">"400px"</span>
														<span>;</span>
												</li>
												<li class="alt">
														<span class="attribute">objDivFilter.style.height</span>
														<span>=</span>
														<span class="attribute-value">"400px"</span>
														<span>; //这个设置初始大小是必须的</span>
												</li>
												<li class="alt">
														<span class="attribute">objDivFilter.style.filter</span>
														<span>=</span>
														<span class="attribute-value">"progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod = image)"</span>
														<span>;</span>
												</li>
												<li>
														<span>objDivFilter.filters.item("DXImageTransform.Microsoft.AlphaImageLoader")</span>
														<span class="attribute">.src</span>
														<span>=</span>
														<span class="attribute-value">fileUrl</span>
														<span>;</span>
												</li>
												<li>
														<span>// get width and height</span>
												</li>
												<li class="alt">
														<span>alert( objDivFilter.offsetWidth)</span>
												</li>
												<li class="alt">alert( objDivFilter.offsetHeight) 
</li>
												<li class="alt">
														<span>}</span>
												</li>
												<li>
														<span>}</span>
												</li>
												<li class="alt">
														<span class="tag">&lt;/</span>
														<span class="tag-name">script</span>
														<span class="tag">&gt;</span>
												</li>
												<li>
														<span class="tag">&lt;/</span>
														<span class="tag-name">head</span>
														<span class="tag">&gt;</span>
												</li>
												<li class="alt">
														<span class="tag">&lt;</span>
														<span class="tag-name">body</span>
														<span class="tag">&gt;</span>
												</li>
												<li>
														<span class="tag">&lt;</span>
														<span class="tag-name">form</span>
														<span class="attribute">id</span>
														<span>=</span>
														<span class="attribute-value">"form1"</span>
														<span class="attribute">runat</span>
														<span>=</span>
														<span class="attribute-value">"server"</span>
														<span class="tag">&gt;</span>
												</li>
												<li class="alt">
														<span class="tag">&lt;</span>
														<span class="tag-name">div</span>
														<span class="tag">&gt;</span>
												</li>
												<li>
														<span class="tag">&lt;</span>
														<span class="tag-name">asp:FileUpload</span>
														<span class="attribute">ID</span>
														<span>=</span>
														<span class="attribute-value">"txtFile"</span>
														<span class="attribute">runat</span>
														<span>=</span>
														<span class="attribute-value">"server"</span>
														<span class="attribute">Width</span>
														<span>=</span>
														<span class="attribute-value">"508px"</span>
														<span class="attribute">onchange</span>
														<span>=</span>
														<span class="attribute-value">"javascript:setImagePreview( this.value );"</span>
														<span class="tag">/&gt;</span>
												</li>
												<li>
														<span class="tag">&lt;</span>
														<span class="tag-name">br</span>
														<span class="tag">/&gt;</span>
												</li>
												<li class="alt">
														<span class="tag">&lt;</span>
														<span class="tag-name">div</span>
														<span class="attribute">id</span>
														<span>=</span>
														<span class="attribute-value">"divFilter"</span>
														<span class="tag">/&gt;</span>
												</li>
												<li class="alt">
														<span class="tag">&lt;/</span>
														<span class="tag-name">div</span>
														<span class="tag">&gt;</span>
												</li>
												<li>
														<span class="tag">&lt;/</span>
														<span class="tag-name">form</span>
														<span class="tag">&gt;</span>
												</li>
												<li class="alt">
														<span class="tag">&lt;/</span>
														<span class="tag-name">body</span>
														<span class="tag">&gt;</span>
														<p>
																<strong>但上述办法还不能在客户端获取图片文件的大小，我也没有找到很好的解决方案</strong>。</p>
														<p>
																<clk>另外：在.net中，可以在C#后台代码中获取图片的相应信息，只不过这种方式增加了一些不必要的<nobr oncontextmenu="return false" onmousemove="kwM(0)" id="clickeyekey0" onmouseover="kwE(event,0, this)" style="COLOR: #6600ff; BORDER-BOTTOM: #6600ff 1px dotted; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline" onclick="kwC(event,0)" onmouseout="kwL(event,this)">网络</nobr>传输过程，有一定的性能代价。</clk>
														</p>
												</li>
												<li class="alt">
														<p>资料二：</p>
												</li>
												<li class="alt">
														<div id="articleTitle">本地图片预览代码（支持 IE6、IE7）</div>
														<div id="articleTool">[<a href="javascript:AddFavorite();">加入收藏</a>] [<a href="javascript:window.print();">友好打印</a><a href="http://www.cftea.com/c/2008/03/BKQ0O02A9ALYRG4B.asp" target="_blank">?</a>]</div>
														<div class="ads">
																<div>
																		<script type="text/javascript"><![CDATA[/
&lt;!--
google_ad_client = "pub-7567763396997479";
google_ad_slot = "5381641380";
google_ad_width = 336;
google_ad_height = 50;
//]]&gt;</script>
																		<script src="show_ads.js" type="text/javascript">
																		</script>
																</div>
														</div>
														<div id="articleBody">
																<p>在 IE6 中，可以很方便地利用 img 的 src 属性，实现本地图片预览，然而在 IE7 中，这种办法却行不通。需要用 <strong>AlphaImageLoader</strong>。</p>
																<hr align="center" width="100%" noshade="" size="1" />
																<p>
																		<strong>AlphaImageLoader</strong>
																</p>
																<p>
																		<strong>说明：</strong>
																</p>
																<p>在对象容器边界内，在对象的背景和内容之间显示一张图片。并提供对此图片的剪切和改变尺寸的操作。如果载入的是PNG(Portable Network Graphics)格式，则0%-100%的透明度也被提供。</p>
																<p>
																		<strong>语法：</strong>
																</p>
																<p>filter : progid:DXImageTransform.Microsoft.AlphaImageLoader ( enabled=bEnabled , sizingMethod=sSize , src=sURL )</p>
																<p>
																		<strong>enabled：</strong>可选项。布尔值(Boolean)。设置或检索滤镜是否激活。 <br />true：默认值。滤镜激活。 <br />false：滤镜被禁止。</p>
																<p>
																		<strong>sizingMethod：</strong>可选项。字符串(String)。设置或检索滤镜作用的对象的图片在对象容器边界内的显示方式。 <br />crop：剪切图片以适应对象尺寸。 <br />image：默认值。增大或减小对象的尺寸边界以适应图片的尺寸。 <br />scale：缩放图片以适应对象的尺寸边界。</p>
																<p>
																		<strong>src：</strong>必选项。字符串(String)。使用绝对或相对 url 地址指定背景图像。假如忽略此参数，滤镜将不会作用。</p>
																<hr align="center" width="100%" noshade="" size="1" />
																<p>
																		<strong>具体操作：</strong>
																</p>
																<ol>
																		<li>为预览区域（比如要在某个 div 中预览）添加样式：filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);。 
</li>
																		<li>为 AlphaImageLoader 设置 src 属性。 </li>
																</ol>
																<hr align="center" width="100%" noshade="" size="1" />
																<p>
																		<strong>示例代码：</strong>
																</p>
																<div>
																		<textarea class="code_run" rows="10" cols="60">&lt;?xml version="1.0" encoding="gb2312"?&gt;
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;

&lt;head&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;
&lt;title&gt;本地图片预览代码（支持 IE6、IE7）&lt;/title&gt;
&lt;style type="text/css"&gt;
#newPreview
{
    filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale);
}
&lt;/style&gt;
&lt;script type="text/javascript" language="javascript"&gt;
&lt;!--
function PreviewImg(imgFile)
{
    //原来的预览代码，不支持 IE7。
    var oldPreview = document.getElementById("oldPreview");
    oldPreview.innerHTML = "&lt;img src=\"file:\\\\" + imgFile.value + "\" width=\"80\" height=\"60\" /&gt;";
    
    //新的预览代码，支持 IE6、IE7。
    var newPreview = document.getElementById("newPreview");
    newPreview.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgFile.value;
    newPreview.style.width = "80px";
    newPreview.style.height = "60px";
}
--&gt;
&lt;/script&gt;
&lt;/head&gt;

&lt;body&gt;

&lt;p&gt;说明：以下针对的是互联网情况，如果您在本地作测试，比如输入的地址是：http://127.0.0.1/...，则可以看到全部预览。&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;如果您使用的是 IE6，则可以看到以下预览；如果您使用的是 IE7，则看不到以下预览。&lt;/p&gt;
&lt;div id="oldPreview"&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;不论您使用的是 IE6 还是 IE7，均可以看到以下预览。&lt;/p&gt;
&lt;div id="newPreview"&gt;&lt;/div&gt;

&lt;hr /&gt;

&lt;p&gt;请选择一个图片进行预览：&lt;input type="file" size="20" onchange="javascript:PreviewImg(this);" /&gt;&lt;/p&gt;

&lt;/body&gt;

&lt;/html&gt;
</textarea>
																		<br />
																		<input onclick="javascript:RunCode();" type="button" value="运行代码" />[Ctrl+A 全部选择 提示：您可先修改部分代码，再按运行]</div>
																<p>
																		<span class="chapterTitle">相关阅读：<a href="http://www.cftea.com/products/">http://www.cftea.com/products/</a> 很好的学习地方</span>
																</p>
														</div>
												</li>
										</ol>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/weiwei/aggbug/230420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiwei/" target="_blank">liwei5891</a> 2008-09-22 14:23 <a href="http://www.blogjava.net/weiwei/articles/230420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>weblogic 5ip限制问题</title><link>http://www.blogjava.net/weiwei/articles/229928.html</link><dc:creator>liwei5891</dc:creator><author>liwei5891</author><pubDate>Fri, 19 Sep 2008 06:19:00 GMT</pubDate><guid>http://www.blogjava.net/weiwei/articles/229928.html</guid><wfw:comment>http://www.blogjava.net/weiwei/comments/229928.html</wfw:comment><comments>http://www.blogjava.net/weiwei/articles/229928.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weiwei/comments/commentRss/229928.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiwei/services/trackbacks/229928.html</trackback:ping><description><![CDATA[
		<p>部暑项目到unix+weblogic8.1环境下，测试人员却说，不能访问。百思不得其解，得用SecureCRT查看unix下控制台，有下面提示：</p>
		<p>
				<sep 19,="" 2008="" 2:11:32="" pm="" gmt+08:00="">
						<notice>
								<weblogicserver>
										<bea-000211>
												<connection rejected,="" the="" server="" license="" allows="" connections="" from="" only="" 5="" unique="" ip="" addresses.="">
												</connection>
										</bea-000211>
								</weblogicserver>
						</notice>
				</sep>
		</p>
		<p>按照提示，可能是weblogic限制了只能有5个不同的IP访问，估计连结服务器的机子早已达五台，这才使得后面的测试人员的机子连不上去了。</p>
		<p>上网找了资料，果真是这样的。不过目前还没有修正。</p>
		<p>
				<a href="http://www.bootad.cn/post/193.html">http://www.bootad.cn/post/193.html</a>这里有破解补丁，weblogic 8 9 10,都有。只是服务器我们动不得，看客户那边如何解决了.</p>
		<p>引用<a href="http://www.bootad.cn/post/193.html">http://www.bootad.cn/post/193.html</a>上的文章：</p>
		<h4 class="post-date">2007-12-26 1:56:11</h4>
		<h2 class="post-title">WebLogic Server 8,9,10破解补丁下载</h2>
		<div class="post-body">
				<p>
						<img src="http://www.bootad.cn/logo/weblogic.gif" alt="WebLogic Server " height="30" align="right" width="131" />
				</p>
				<p>WebLogic Server 是一个很优秀的商业中间件，但是价格昂贵！！！</p>
				<p>其实从官网下载下来WebLogic Server 是全功能版的，但是有5个IP的限制，也就是说只能有5以下的用户可以访问。</p>
				<p>今天无意中找到了破解这个限制的补丁，很全，8,9,10都有，很爽吧！！！破解的方法在压缩包中的readme.txt，参照上面的操作就可以了，我已经试验过8的的确有效，哪位兄弟有条件的可以帮我测试一下9和10是否有效。</p>
				<p>
						<a href="http://www.bootad.cn/upload/weblogic.8.1.crack.rar" target="_blank">weblogic.8.1.crack.rar</a>
				</p>
				<p>
						<a href="http://www.bootad.cn/upload/weblogic.9.2.crack.zip" target="_blank">
								<span style="COLOR: #095c83">weblogic.9.2.crack.zip</span>
						</a>
				</p>
				<p>
						<a href="http://www.bootad.cn/upload/weblogic.10.crack.zip" target="_blank">
								<span style="COLOR: #095c83">weblogic.10.crack.zip</span>
						</a>
				</p>
				<p>请参照readme.txt中的破解说明！！！</p>
		</div>
<img src ="http://www.blogjava.net/weiwei/aggbug/229928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiwei/" target="_blank">liwei5891</a> 2008-09-19 14:19 <a href="http://www.blogjava.net/weiwei/articles/229928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>