??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久一本毛久久久,一本大道久久东京热无码AV,久久综合色之久久综合http://www.shnenglu.com/yg2362/zh-cnTue, 06 May 2025 23:21:05 GMTTue, 06 May 2025 23:21:05 GMT60大区中分配玩家唯一ID的办?l?http://www.shnenglu.com/yg2362/archive/2012/12/06/196061.html梨树阛_梨树阛_Thu, 06 Dec 2012 15:01:00 GMThttp://www.shnenglu.com/yg2362/archive/2012/12/06/196061.htmlhttp://www.shnenglu.com/yg2362/comments/196061.htmlhttp://www.shnenglu.com/yg2362/archive/2012/12/06/196061.html#Feedback2http://www.shnenglu.com/yg2362/comments/commentRss/196061.htmlhttp://www.shnenglu.com/yg2362/services/trackbacks/196061.html      之前因ؓ旉匆忙Q大区里产生唯一ID只是单写了一个方法,今天着有时_把里面一些过E写出来Q也是个ȝ?/span>
      首先说说需求,现在游戏里数据库Z分散热点Q都采用分表方式Q以前那U一张表AUTO_INCREMENT的方式显然不行了Q那么将唯一ID攑ֈ业务q程里可行吗Q这个也不好Q因为现在后台都是多个部|Ԍ每个q程可以保证ID唯一Q但是存到数据库的时候就可能重复Q所以我们还是得在DB上做文章?/span>
      因此有了上文章的解决Ҏ(gu)Q单独一张表Q?/span>q张表的作用是专门产生唯一IDQ而且为多个业务提供唯一IDQ多q程情况下也不需要锁表,效率比较高,是不是很像设计模式里的工厂。接着我来分析下这张表。我们再来看看表l构和用?br />create table SeqTab 
   iSeqNo bigint(20) not null default 0,   //表示唯一ID
   iSeqType int(11) not null default 0,   //表示业务ID
   primary key(iSeqNo,iSeqType));
   insert into SeqTab values(0,1);        //初始化,假设一个业务编号ؓ1
   update SeqTab set iSeqNo=last_insert_id(iSeqNo+1) where iSeqType=1;
   select last_insert_id();                   //q两句是获取一个业务的唯一IDQ供业务q程使用?/span>
   其实说到q张表,关键是说LAST_INSERT_ID()q个Ҏ(gu)。它有两UŞ式LAST_INSERT_ID()QLAST_INSERT_ID(expr)?/span>
   q个东西的特Ҏ(gu)Q?.属于每个CONNECTIONQCONNECTION之间怺不会影响 2.不属于某个具体的?3.q回最后一ơINSERT AUTO_INCREMENT的?4.假如以此使用INSERT插入    多行数据Q只q回W一行数据生的?5.如果你UPDATE某个AUTO_INCREMENT的|不会影响LAST_INSERT_ID()q回?/span>
   LAST_INSERT_ID(expr)?/span>LAST_INSERT_ID()E有不同Q首先它q回expr的|其次它的q回g记录?/span>LAST_INSERT_ID()?/span>
   我们q里主要使用CW一和第二个特点Q每个进Eƈ发执?/span>update SeqTab set iSeqNo=last_insert_id(iSeqNo+1) where iSeqType=1;,p取属于进E自qiSeqNoq且记录?nbsp;LAST_INSERT_ID中,通过W二句取倹{?/span>   
    接着我们在比较下其他一些办法?/span>
    W一U是直接一张表Q里面有一个ID字段Q设|成AUTO_INCREMENT。这个的问题是每个业务ID不是q箋的,是离散的?/span>
    W二U是使用GUID或者UUIDQ但是这个问题我个h觉得是效率上的差异,字符串没有数字的效率好,另外数字ID今后也可以拼接一些区信息Q之后跨区的时候可以方便获取对象是哪个区的.

梨树阛_ 2012-12-06 23:01 发表评论
]]>
大区中分配玩家唯一ID的办?/title><link>http://www.shnenglu.com/yg2362/archive/2012/12/05/196002.html</link><dc:creator>梨树阛_</dc:creator><author>梨树阛_</author><pubDate>Wed, 05 Dec 2012 03:54:00 GMT</pubDate><guid>http://www.shnenglu.com/yg2362/archive/2012/12/05/196002.html</guid><wfw:comment>http://www.shnenglu.com/yg2362/comments/196002.html</wfw:comment><comments>http://www.shnenglu.com/yg2362/archive/2012/12/05/196002.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/yg2362/comments/commentRss/196002.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/yg2362/services/trackbacks/196002.html</trackback:ping><description><![CDATA[<div><span style="font-family: Verdana; ">Mysql中除了用auto_increment字段作ؓ自增序号以外 q有另外一U办?可以提供唯一序列号ƈ且可以由一张表完成对多个序?/span></div><div><span style="font-family: Verdana; ">要求的满?/span></div><div></div><div><span style="font-family: Verdana; ">大致如下Q?/span></div><div><span style="font-family: Verdana; ">1.创徏一个简单表 </span></div><div><span style="font-family: Verdana; ">   create table SeqTab</span></div><div><span style="font-family: Verdana; ">   ( iSeqNo int not null default 0,</span></div><div><span style="font-family: Verdana; ">     iSeqType int not null default 0);</span></div><div></div><div><span style="font-family: Verdana; ">2.插入一调记?/span></div><div><span style="font-family: Verdana; ">   insert into SeqTab values(0,13);  // 0表示SeqNo初始|13为SeqTypeQ同一张表可对多个应用提供Seq序列服务</span></div><div></div><div><span style="font-family: Verdana; ">3.不管多进E?or 单进E对SeqTab表同时进行访问,使用一下方法获取序列号</span></div><div><span style="font-family: Verdana; ">   1st->update SeqTab set iSeqNo=last_insert_id(iSeqNo+1) where iSeqType=13;</span></div><div><span style="font-family: Verdana; ">   2nd->select last_insert_id();</span></div><div></div><div><span style="font-family: Verdana; ">4.因多q程对SeqTab同时讉KQ进行update SeqTab set iSeqNo=last_insert_id(iSeqNo+1);Ӟ数据库保证了update的事?/span></div><div><span style="font-family: Verdana; ">完整性,且last_insert_id()是与当前mysqlq接相关的,所以多q程同时使用Ӟ也不会冲H?br /><br /></span></div><img src ="http://www.shnenglu.com/yg2362/aggbug/196002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/yg2362/" target="_blank">梨树阛_</a> 2012-12-05 11:54 <a href="http://www.shnenglu.com/yg2362/archive/2012/12/05/196002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>mysql中文q解析http://www.shnenglu.com/yg2362/archive/2012/11/26/195711.html梨树阛_梨树阛_Mon, 26 Nov 2012 11:56:00 GMThttp://www.shnenglu.com/yg2362/archive/2012/11/26/195711.htmlhttp://www.shnenglu.com/yg2362/comments/195711.htmlhttp://www.shnenglu.com/yg2362/archive/2012/11/26/195711.html#Feedback2http://www.shnenglu.com/yg2362/comments/commentRss/195711.htmlhttp://www.shnenglu.com/yg2362/services/trackbacks/195711.html怿大家在开发后台的q程中都遇到q中文ؕ码的问题Q今天我来讲讲其中的原因?/span>
      我这Z3张表Qtest_latin1,test_utf8,test_gbk,表结构如?/span>
      +-------+----------+------+-----+---------+-------+
      | Field | Type     | Null | Key | Default | Extra |
      +-------+----------+------+-----+---------+-------+
      | name  | char(32) | YES  |     | NULL    |       |
      +-------+----------+------+-----+---------+-------+

      我的前端是gbk的编?/span>
      执行下面的语?/span>
      set names 'latin1'
      insert into test_latin1 set name='?;('?字是GBK~码)
      select name from test_latin1;
      l果是否Zؕ码?

      执行下面的语?/span>
      set names 'gbk'
      insert into test_latin1 set name='?;('?字是GBK~码)
      select name from test_latin1;
      l果是否Zؕ码?

      执行下面的语?/span>
      set names 'latin1'
      insert into test_utf8 set name='?;('?字是GBK~码)
      select name from test_utf8 ;
      l果是否Zؕ码?

      我们举个例子Q假设一个汉字的字符~码?xFFFFQ它在屏q上能够正常昄Q如果汉字存入数据库的时候和从数据库中取出的时候,~码一_那么它肯定不是ؕ码。反q来Q如果输出的时候是qQ那么它肯定被{码了Q至于ؓ什么被转码了,我们得看看mysql里面做了什?mysqlN会把无码片变成了有码片?)
      首先mysql里面?个概念,一个叫character set,一个叫collation。我们先说说character set。字W集是数字Q英文字W,汉字{编码格式,我们常见的是utf8,gbk,gb2312。mysql里面比较复杂Q有4个东西跟它有养I分别是character_set_clientQcharacter_set_connectionQcharacter_set_databaseQcharacter_set_results。set names (latin1)其实是character_set_client=latin1Qcharacter_set_connection=latin1Qcharacter_set_results=latin1Q它的流E是character_set_client ==> character_set_connection ==> Table Character ==> character_set_results?/span>
      我们按照上面的流E,来分析第一个问题?/span>
      set names 'latin1'----执行了character_set_client=latin1Qcharacter_set_connection=latin1Qcharacter_set_results=latin1;
      insert into test_latin1 set name='?;q句话,mysql做了什么事呢?首先Qcharacter_set_client,它会把王字的~码当成latin1的编码传递给character_set_connectionQ此时不会{码)Qcharacter_set_connection会把~码传递给Table Character,因ؓ表本w是latin1Q所以此时也不需要{码,select name from test_latin1;mysql会把test_latin1中的~码传递给前端Q此时也不需要{码,所以,C程下来Q我们输入的是什么编码,输出的还是相同的~码Q因此,W一个问题的{案是不会是q。我M程图latin1==>latin1==>latin1==>latin1,没有转码的过E?/span>
      
      我们在来看第二个问题?/span>
      set names 'test_gbk'----执行了character_set_client=gbkQcharacter_set_connection=gbkQcharacter_set_results=gbk;
      insert into test_latin1 set name='?;character_set_client,它会把王字的~码当成gbk的编码传递给character_set_connectionQ此时不会{码),character_set_connection会把~码传递给Table Character,因ؓ表是lanti1的编码格式,q个q程的时候就会进行{码,但是latin1的字W集于gbk的字W集Q所以它会找不到对应字符的编码,此时会以Q代ѝselect name from test_latin1Q此时会从latin1转码成gbk,但是此时latin1已经是错误的数据了,所以得到的gbk~码也是错误的了。流Egbk==>gbk==>latin1==>gbk,其中gbk==>latin1Z问题Q我们select出来的数据也׃可能是输入时候的数据了。因此,q个问题的答案是q?/span>

      W三个?/span>
      set names 'test_latin1'
      insert into test_utf8 set name='?;character_set_client,它会把王字的~码当成latin1的编码传递给character_set_connectionQ此时不会{码),character_set_connection会把~码传递给Table Character,此时表是utf8的格式,因此会进行{码,latin1==>utf8,因ؓutf8的字W集>latin1字符集,因此Q{码正常。select name from test_utf8;会从utf8转码成latin1,此时可以转码成功Q因此我们最l得到的和输入的时候是一致的Q因此答案不是ؕ码。流Elatin1==>latin1==>utf8==>latin1,从小的字W集到大的字W集再到的字符集,转码是不会有问题的?/span>
      屁话了这么多Q无非想告诉大家一个万_aҎ(gu)Q?/span>表创建的字符集和set names都设|成同一个字W集Q就基本可以满输入数据不会在{换过E中qQ也是说输入是什么,输出是什么?/span>有中文的都设|成utf8字符集,一x逸?/strong>

梨树阛_ 2012-11-26 19:56 发表评论
]]>
转发一LOL匚w规则http://www.shnenglu.com/yg2362/archive/2012/11/09/194977.html梨树阛_梨树阛_Fri, 09 Nov 2012 06:20:00 GMThttp://www.shnenglu.com/yg2362/archive/2012/11/09/194977.htmlhttp://www.shnenglu.com/yg2362/comments/194977.htmlhttp://www.shnenglu.com/yg2362/archive/2012/11/09/194977.html#Feedback1http://www.shnenglu.com/yg2362/comments/commentRss/194977.htmlhttp://www.shnenglu.com/yg2362/services/trackbacks/194977.htmlq是Riot的Design Director Tom Cadwell专门Z国玩家写的讲解匹配系l工作原理的帖子?/p>


同时Z让大家更好的理解匚wpȝQ如果?zhn)觉得?zhn)遇C特别不公q的匚wQ请回复游戏开始时间和比赛l束截图Q我们会调查该局匚w是如何完成的Q坑爹的玩家是ؓ何加入到q一局的?/p>


很多人抱怨看不懂Q我来个_比喻版的Q?/strong>

有个球联盟Q有无数个球员和大概20个等U的联赛?/p>


所有球员都?0U联赛的成员Q他们自q合互相比赛,赢的人,升?1U联赛,输的人降?U联赛?/p>


然后每个{联赛再次开赛,又有的h升有的人降U,最l这20U的联赛都有球员参加?/p>


我们的大量的数据证明Q一个球员的水^Q会让其E_在大U?个联赛之_也就是科比是参加20U联赛的Q且当他??7U联赛的人组队,基本不会输给17U联赛的人。且Q把U比降到10U联赛,他会L的在20局之内回到20U?/p>


理想情况下,球员都是在跟自己同样l历的球员玩Q一个中{水q玩家完全不会匹配到U比Q科比也不会匚w到刚玩游戏的玩家?/p>


事实上匹配系l的分会比q个更复杂更Q采用的是国际象所采用的elopȝ?/p>


再增加个FAQQ?/strong>

QQ系lؓ了保持胜?0%Q是否会在我q胜后故意塞l我一些菜队友让我输?

AQ系l的目的不是Z保持你的胜率Q而是让水q_不多的玩家一L。当你和水^差不多的玩家一L时胜率会近50%Q所以,pȝ是不会故意坑你的?/p>


QQ我?00胜,Z么系l老匹?00胜的玩家l我Q?/p>

AQ胜场ƈ不能反应一个h的水q뀂如果把匚wpȝ比作跑步Q练习了3q才能跑q?1U的和第一ơ就跑进11U的人我们是同等看待的。匹配系l基于水q不是基于经验?/p>


QQ我胜率60%Qؓ什么匹?0%胜率的队友?0%胜率的对手给我?

AQ胜率也不能反映水^。匹配系l不但要看你是否赢了Q也要看你赢了谁。就像war3的sky在职业圈胜率其实q不高,但是虐一般的玩家胜率?00%。同hq的玩家Q会因ؓ随机匚w到对手的关系Q胜率会40%~60%不等?/p>


QQ你说水q_不多Qؓ什么我觉得他们q么菜?

AQ?strong style="word-wrap: break-word; ">匚wpȝ提供的是公^的机会,而未必是你理想的l果?/strong>我们能追求系l公正,但是无法预测玩家单局内的表现?/strong>

pȝ100%匚wD寚w皇马Q但是不能保证某一ơ曼联不?Q?֎皇马Q且在这局中,C|表现ytsQ完全就在拖后腿。或者曼联也可能q胜皇马3ơ之cȝ。但是,pȝ只会把曼联去匚w皇马而不会出现曼联对阵中深圳队。具体到某一局是皇马赢q是D赢取决于那一场的排兵布阵Q(f)场发挥,以及战术意图?br style="word-wrap: break-word; " />


如果q个坑爹玩家真的不在你的水^{Q他׃一直坑队友Q一直输Q等U一直降低,q样会让他离开你的匚w范围Q让他不再可以和你匹配到。根据我们的数据Q玩家的elo基本是稳定在较小范围内的。这也就是深圳队和皇马的差距Q也是中国国安能赢法国队,永q打不进世界杯的理由?/p>


pȝ没办法给你完队友,玩家会因为很多原因发挥不好:使用不会的英雄、打了不x的位|、玩法风格和队友不够搭配Q前期不利想挂机{等。但是你和对方玩安到这U情늚概率是相同的Q系lƈ不会偏袒M一斏V所以想要完队友,请和朋友l队Q不q那样你也会见更厉害的Ҏ(gu)?/p>


如果大家在如何鉴定玩家水q上有好的想法欢q提Q但是如果想要通过抱怨玩家游戏内表现来证明匹配系l不公^Q就是在和风车决斗了。每个h的看法都不一LQ系l判断他和你在遇到同L队友和对手时候,胜率差不多,q也是我们目前能做到最好的了?/strong>




以下是文章的正文?/p>


概述Q?/strong>

匚wpȝ的目的如下,优先U从高到低:


1?nbsp; 保护新手不被有经验的玩家虐;让高手局中没有新手?/p>

2?nbsp; 创造竞技和公q的游戏对局Q玩家的游戏乐最大化?/p>

3?nbsp; 无需{待太久p扑ֈҎ(gu)q入游戏?/p>

匚wpȝ其所能的匚w水^接近的玩Ӟ玩家的水qx来自他们在此之前赢了谁以及他们对手的水^。当你战胜对手,pȝ会认Z更强Q当你输l对手,pȝ会认Z更弱。虽然这对于某一局游戏q不是那么的公^Q但是长期来看,对于多局游戏是相当的公^Q因为好的玩家MҎ(gu)戏结果造成正面的、积极的影响。我们用了q样一个方法测试:l水q高的玩家一个新帐号Q然后看他们游戏数局后的l果。我们通过大量的测试来证明了我们的x?/p>

q且Q匹配系l知道预先组队的玩家有一些优势,如果你是预先l队Q会l你一些更强的玩家。我们用一些非常y妙的数学Ҏ(gu)来解决预先组队的玩家VS solo玩家的匹配公q问题。我甚至让两个数学博士来验证Q他们都说给力!



匚w是怎么完成的?


首先Q系l将你放q适当的匹配池?#8212;—Ҏ(gu)游戏模式Q匹配模式、排位solo/双h、排?人、其他模式等{)


然后Q系l会试匹配池里的人分到更l的匚w池里——5人组?VS 5人组队,低等U新?vs 其他一些低{新手Q如此这般?/p>

当你在匹配池中,pȝ会开始尝试找到合适的配对Q目标是撮合一个双方获胜机会都?0%的游戏?/p>

W?步:定你的实力Q?/p>

*如果你是soloQ就直接使用你的个h匚w分(也就是elo|匚w模式和排位赛有不同的匚w分)

*如果你是预先l队的,你的匚w分是你队伍的q_分,q且会根据你l队的规模稍微提高一些,q样才能保证你匹配到更强的对手来抉|你组队的优势。我和一个计机生物学的博士QComputational Biology Ph.DQ通过研究成百上千的游戏结果,计算Z预先l队到底有多大的优势。我们还在幕后做了一些其他调_比如新手和高玩组队,比如某地图上蓝队和队的玩家哪个更有优势Q诸如此cR?/p>

W?步:定你合适的Ҏ(gu)Q?/p>

*首先Q系l会Z你的elo|l你匚w跟你非常相近的玩家。最l,pȝ会放宽匹配的条gQ给你一些不是那么完的匚wQ因Z肯定也不xq匹配不Ch?/p>

*新手会得C些特D的保护Q通常新手只会匚w到其他新手(在成熟的服务器里Q这个比例达C99%+。除非这个新手和一个高U玩家朋友预先组队)



W?步:定匚wQ?/p>

*最l,pȝ会匹?0个大体上同水q뀁同{的玩Ӟ促成一个游戏?/p>

*pȝ会尝试^衡这个队伍,量使双方的莯Z都ؓ50%。在l大多数旉Q误差会?%之内——cM50/50Q?9/51Q?8/52。实际上的获胜机会会有一点点差别Q会在Q&A里面回答q个问题Q,但是我们的研I标明,在绝大多数情况下Q这实际上是一个非常精的预测?/p>

长期来讲Q我的匹配分QElo|是如何被量的?

我们使用了一个修改过的ELOpȝ。ELOpȝ的基本要炚w过使用数学比较两个人的U分Q来预测两h的比赛结?#8212;—cM“A和B比赛数局QA会赢?5%的局”?/p>

然后Q比赛结果出来了。如果你赢了Q你会加分,如果你输了,你会被扣分。如果你?#8220;Zh意料”的赢了(pȝ认ؓ你输的可能性更大)Q你会赢得更多的分数。额外的Q如果你是一个新玩家Q你会加分减分更快,以便于你可以快速的q入C的水q等U。长期来看,q意味着好的玩家会得到高的匹配分Q因Z们L过pȝ的预期,他们会不断加分直到系l可以正的预测他们的胜率?/p>

我们修改q个pȝl团队比赛用,基本概念是:Z该团队的所有玩Ӟ得到一个团队ELO倹{如果你的队伍胜利,pȝ会假设该队伍的所有玩安要比pȝ猜测?#8220;更强”Qƈ且加分。虽然有一些问题,但是M上来讲是有效的,特别是玩安先组队的时候?/p>

举例Q本人在北美的服务器上有2000的普通匹配模式elo。如果我Z个小Pq没有天赋和符文,我打?U的时候就已经?800elo了。这个系lƈ不完,但是实能够让玩家快速的接近自己水^所在的位置?/p>

当你才开始玩的时候,我们也对ELO做一些微调,让你更快的进入你水^所在的位置?/p>

*我们有大量的Q有优先U的Ҏ(gu)来鉴定一个玩Ӟ相比一个标准的新玩家是否更有技巧,更猛。如果发现是的,我们会在q后提高他的elo一个档ơ?/p>

*我们同样也会分L真的菜鸟新手?/p>

*提升{也会极大的提高你的elo倹{这个也帮助系l将30U满U的召唤师和低等U的召唤师区分开?/p>

如果你想知道ELOpȝ的理论,以及更多l节Q你可以看看q:

http://en.wikipedia.org/wiki/Elo_rating_system

http://zh.wikipedia.org/wiki/ELO



呃,{等Q你是怎么处理l队玩家 vs solo(单排)玩家的?

我们大多数情况下Q会通过?人组队的队伍匚wl另外一?人组队的队伍来避免这U情늚发生Q几乎是所有情况下Q?/p>

对于“部分”l队Q我们进行了大量的研IӞ发现优势q没有想象的那么大,所以我们也会把他们混到soloQ单排)的玩安。我们发现有大量的因素会影响到组队优势的大小Q从预先l队的规模(比如2???l队Q,到组队玩家的水^Q到高玩带菜鸟的l合Q到玩家水^不同而导致的情况不同Q以及其他的一些必考虑到的微妙因素。这个要比一些我们曾见过的点对点法-Q意的l计数据杂糅在一L分?要可靠的?nbsp;

发现q些优势Q我们就知道对于预先l队的队伍,需要提高多elo|来达成一个公q的匚wQ确定一个适当的,在数学上合理的调整。结果在有些情况下非o人惊Ӟ同时会校正统计数据)?/p>

虽然我们不会l出_的数|因ؓq是商业机密Q但是我们可以告诉?zhn)Q?/p>

*5人组队只是比5个\人稍强?/p>

*部分l队只是?个\人略强?/p>

*菜鸟5人组队ƈ不会带来太大的优势,但是高玩l队会有很大的优ѝ?/p>

*团队实力方差高的队伍Q会比方差低的队伍更强。(方差单来_是在q_值相同的情况下反应各个元素的大小差异Q方差大表示差异大,高方差的队伍cM高玩带低玩,低方差的队伍各个队员实力接近。)

*q说明了大体上,高水q玩家的Carry作用Q可以理解ؓ带领或者大腿)Q比低水q玩家的送h头作用(feederQ要强力?/p>

好吧…那ؓ什么要把预先组队的玩家和非l队玩家匚wCP

q是一些原因:


*q会帮助pȝ更快的找到适合你的匚w分,让系l更快的l你公^的匹配。这个的工作原理是,如果你组队,会减低运气所带来的成分,如果你单排,你的队友的好坏将对你输赢的媄响更大。如果你预先l队Q你会和你水q_不多的玩家组成队伍,你随机遇到猛?坑爹队友几率会更。因为游戏的l果更多来自你和水^相近的朋友的表现Q而不是随机因素,所以你的匹配分会更快的到达_的倹{?/p>

*我们希望玩家可以和自q朋友一LQ因样会让他们玩的更有乐。你也不可能?v5的游戏设|单独的2人匹配池或?人匹配池Q你需要组合他们来让系l工作。我们选择包含5人组队,因ؓq非常有乐趣。如果我们以后有_大的匚w池,我们可能会将5人组队和部分l队区分开来,但是数据告诉我们Q这基本不会提升匚w的公q程度,两者的效果基本相同?/p>

其他一些常见的问题Q?/strong>


QQ?/strong>Z么不加入一些其他的l节Q类似击杀数等{来定我的匚w分?

AQ?/strong>因ؓq是有偏差的Qƈ且因为非帔R以给L数这个数值来评分Q你使用一个gank英雄的时候(cM老鼠和易大师Q,要杀多少人才能算是好的呢Q而且q会让好的辅助玩安常吃亏,因ؓ他们的目的就不是拿h_甚至会ؓ了自qCarry挡死。最后,玩家会ؓ了刷数据Q故意拖长游戏时_然后拿大量farmҎ(gu)的h_而不是ؓ了赢得比赛。我们尽量把量玩家水^和激q家的机制攑ֈ努力取胜上面Q我们避免了一些不必要的周边行为,而这些行为既没乐,q会Cؕ匚wpȝ?/p>

QQ?/strong>我非常愤怒,因ؓ匚wpȝ老给我坑爚w友(feedersQ送h头的Q。ؓ什么不Lq种情况发生Q?/p>

AQ?/strong>我们的确有试N止这U情况发生,但是如果你被匚wC个明昑־q玩家Q这也说明匹配系l同时匹配给你了一个或者多个强力的玩家。根据我们的研究Q我们发现CarryQ大腿)寚w伍的带领作用要比feederQ送h_坑爹Q的坑爹作用更强。原因是在LOL里,多次L同一个玩家的收益是会递减的,q不像其他的同类游戏。我们的分析标明Q在q_elo相同的情况下Q提高或者降低这个队伍的某个玩家的elo?00Q其他玩家相应降?提高以保持^均分相同Q,整个队伍的实力会提高U?点elo倹{这也表明,LOL中Carry的作用要比feeder的作用更l力一些。确实,有时候你会因为匹配到feeder而输掉这一局比赛Q但是那是因Z们队的Carry不够l力?/p>

QQ?/strong>q样的话Q如果我q胜了数盘,我是不是会被匚wC些完全不可战胜的Ҏ(gu)Q?/p>

AQ?/strong>不全是。连胜导致你的匹配分会提高,你会不断遇到更强的对?#8212;—但是我们q不是故意的让你的胜率保持在50%的,我们的目的只是ؓ了系l能够正的预测游戏l果。最l,你会辑ֈ你的极限Q你会大致保持50%的胜率。比q_水^高的玩家Q往往胜率会比50%略高Q因为比他们q玩家更多Q比他们强的玩家更少。所以匹配时Q往往会略?#8220;向下匚w”。对于排位顶的高端玩家Q他们经怼?0%的胜率?/p>

QQ?/strong>你们会如何设计固定的队伍Q类似WOW的竞技场队伍?

AQ?/strong>q是一个非常好的想法,q且让我们有Z设计出更好的匚wpȝ。我们迟早会做这个,q且使用我们开发的新方法。我们需要检验ƈ且搞清楚你大体上有多强力Q例如你的个人积分)Q同时允怽创徏/解散队伍。这是个非常大的工程Q但是我们对此非常有Ȁ情~



QQ?/strong>如果匚wpȝ真的那么公^Q那Z我老遇见那U一边倒的比赛Q?/p>

AQ?/strong>有两个原因。第一QLOL有时?#8220;雪球效应”会非常明显。前期太差的表现会导致游戏让人感觉非怸边倒。特别是某些队伍Q如果他们开始很风Q就会一直很风。我们遇到过同样的队伍,W一局25-5取胜Q第2局以cM的比分输掉。第二个原因是,玩家发挥的ƈ不好Q队伍选取阵容也不好。要q行一局势均力敌的比赛,你需要^衡玩家水q_q阵容的选取。有时候玩安了一个比较渣的阵容,比如5个近战dpsQ或?坦克2法师之类的,或者没选打野英雄而对面有。这L话,管你的队伍实力也很不错Q但是情况往往惨不忍睹?/p>

QQ?/strong>Z么我作ؓ一个高{玩家Q有时候会匚wC些低{玩家Q他们看上去都是来送h头的?/p>

AQ?/strong>当一个高{玩家和一个低{玩家l队Q这是一个非o人头疼的问题。我们希望玩家可以和自己的朋友一LQƈ且希望这是一U愉快的体验。但是我们ƈ不希望将一部分人的快乐建立在另一部分人的痛苦之上Q所以我们往往这U组合评分更高,保护新玩家不会被高等U玩家虐待。非怸q的是,不管我们怎么做,我们把这Ll合匚wCQ何的游戏中,都有可能造成不愉快的体验。因此,我们计划实施一?#8220;不^衡组?#8221;的队列,cM我们量?人组队匹配给5人组队?/p>

QQ?/strong>?0U了Q然后我被匹配到了一?0U的和一?9U的Q怎么回事Q?/p>

AQ?/strong>当不同等U的玩家l队Q我们会使用他们的^均等U来作ؓ匚w的参考。等Uƈ不是匚wpȝ的主导参?#8212;—匚wpȝ通常是用实力来匚w——但是我们也会量等U相q的玩家匚wC赗在预先l队的情况下Q我们没法替玩家选择Q所以我们尽我们所能,使用q_{。我们会在这个计系l里?0U的玩家看作36U,所以我们通常能让中等U玩家的游戏没有30U玩Ӟ然而有时候呢Q?9U玩家能插进来?/p>

梨树阛_ 2012-11-09 14:20 发表评论
]]>
Linux切换用户路径昄http://www.shnenglu.com/yg2362/archive/2012/11/08/194866.html梨树阛_梨树阛_Thu, 08 Nov 2012 03:49:00 GMThttp://www.shnenglu.com/yg2362/archive/2012/11/08/194866.htmlhttp://www.shnenglu.com/yg2362/comments/194866.htmlhttp://www.shnenglu.com/yg2362/archive/2012/11/08/194866.html#Feedback0http://www.shnenglu.com/yg2362/comments/commentRss/194866.htmlhttp://www.shnenglu.com/yg2362/services/trackbacks/194866.html记录下这个小问题。root下可以显C\径但是切换到其他用户时没有\径显C,很不方便?/span>
?etc/profile中加?/span>
export PS1='\u@\h:\w>',其中\u昄当前用户账号Q\h昄当前L名,\W昄当前路径。然后source一下就搞定?/span>


梨树阛_ 2012-11-08 11:49 发表评论
]]>
两个问?/title><link>http://www.shnenglu.com/yg2362/archive/2012/10/01/192562.html</link><dc:creator>梨树阛_</dc:creator><author>梨树阛_</author><pubDate>Mon, 01 Oct 2012 07:53:00 GMT</pubDate><guid>http://www.shnenglu.com/yg2362/archive/2012/10/01/192562.html</guid><wfw:comment>http://www.shnenglu.com/yg2362/comments/192562.html</wfw:comment><comments>http://www.shnenglu.com/yg2362/archive/2012/10/01/192562.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/yg2362/comments/commentRss/192562.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/yg2362/services/trackbacks/192562.html</trackback:ping><description><![CDATA[<span style="font-family: Tahoma; ">开门见山,我先提出几个问题Q大家可以先xQ然后我再说出我的方?br /> 1.如何判断一个数M是否?的Nơ方Q?br /> </span>2.一个数NQ如何得C个数是MQM是不于N的最?的Kơ方<br /> <br /> 先说W一个问题,我有两个思\<br /> W一Q可以通过判断M的二q制?的个数。而判断M?的个数可以通过下面Ҏ(gu)获得<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"><span style="color: #0000ff; ">int</span> GetOneCnt(<span style="color: #0000ff; ">int</span> m) <br />{<br />     <span style="color: #0000FF; ">if</span> ( m == 0 )<br />         <span style="color: #0000FF; ">return</span> 0;<br />     <br />     <span style="color: #0000FF; ">int</span> cnt = 1;<br />     <span style="color: #0000FF; ">while</span>(m & (m-1))<br />     {<br />         cnt++;<br />         m--;<br />     }<br />     <br />     <span style="color: #0000FF; ">return</span> cnt;<br /> }</div>很明显M?的个Cؓ1和M?的Nơ方互ؓ冲要条g<br />W二个思\Q我们可以这Pq是利用M的二q制表示Q从最高位开始,以变量high_pos表示W一?的下标,接着从最低位开始,变量low_pos表示W一?的下标,如果high_pos=low_pos,则M?的Nơ方<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; ">int</span> HighestBitSet(<span style="color: #0000FF; ">int</span> input)<br />{<br />    register <span style="color: #0000FF; ">int</span> result;<br /><br />    <span style="color: #0000FF; ">if</span> (input == 0)<br />    {<br />        <span style="color: #0000FF; ">return</span>  -1;<br />    }<br /><br />#ifdef WIN32<br />    _asm bsr eax, input<br />    _asm mov result, eax<br /><span style="color: #0000FF; ">#else</span><br />    asm("bsr %1, %%eax;"<br />    "movl %%eax, %0"<br />    :"=r"(result)<br />    :"r"(input)<br />    :"%eax");<br /><span style="color: #0000FF; ">#endif</span><br /><br />    <span style="color: #0000FF; ">return</span> result;<br />}</div><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 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; ">int</span> LowestBitSet(<span style="color: #0000FF; ">int</span> input)<br />{<br />    register <span style="color: #0000FF; ">int</span> result;<br /><br />    <span style="color: #0000FF; ">if</span> (input == 0)<br />    {<br />        <span style="color: #0000FF; ">return</span>  -1;<br />    }<br /><br />#ifdef WIN32<br />    _asm bsf eax, input<br />    _asm mov result, eax<br /><span style="color: #0000FF; ">#else</span><br />    asm("bsf %1, %%eax;"<br />    "movl %%eax, %0"<br />    :"=r"(result)<br />    :"r"(input)<br />    :"%eax");<br /><span style="color: #0000FF; ">#endif</span><br /><br />    <span style="color: #0000FF; ">return</span> result;<br />}</div><br />再说W二个问?br />其实有了W一个问题的思\Q这个问题就更好解决了,先判断一个数是否?^NQ如果是Q直接返回,否则q回2^(N+1)<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; ">int</span> CeilingPowerOfTwo(<span style="color: #0000FF; ">int</span> iInput)<br />{<br />    <span style="color: #0000FF; ">if</span> (iInput <= 1)<br />        <span style="color: #0000FF; ">return</span>  1;<br /><br />    int32_t highestBit = HighestBitSet(iInput);<br />    int32_t mask = iInput & ((1 << highestBit) - 1); <span style="color: #008000; ">//</span><span style="color: #008000; "> 相当于input?^highestBit求余</span><span style="color: #008000; "><br /></span>    highestBit += ( mask > 0 );<br /><br />    <span style="color: #0000FF; ">return</span> (1<<highestBit);<br />}</div><img src ="http://www.shnenglu.com/yg2362/aggbug/192562.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/yg2362/" target="_blank">梨树阛_</a> 2012-10-01 15:53 <a href="http://www.shnenglu.com/yg2362/archive/2012/10/01/192562.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unicode和UTF-8的区?/title><link>http://www.shnenglu.com/yg2362/archive/2012/09/23/191746.html</link><dc:creator>梨树阛_</dc:creator><author>梨树阛_</author><pubDate>Sun, 23 Sep 2012 14:56:00 GMT</pubDate><guid>http://www.shnenglu.com/yg2362/archive/2012/09/23/191746.html</guid><wfw:comment>http://www.shnenglu.com/yg2362/comments/191746.html</wfw:comment><comments>http://www.shnenglu.com/yg2362/archive/2012/09/23/191746.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/yg2362/comments/commentRss/191746.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/yg2362/services/trackbacks/191746.html</trackback:ping><description><![CDATA[如果你对能很快回{出unicode和utf-8的关p,你可以直接蟩q这文章。下面我来说说两者的关系和{换。(本文使用W号2字代表所有的汉字Q英文,数字{)<br />首先明确一点,UTF-8是UNICODE一U实现方式?br />UNICODEQ代表一U符号集合,它规定了一U符合的二进制表C,没有指明存储方式?<a >http://www.unicode.org/</a>)<br />UTF-8:实现了UNICODEQ用多字节的存储方式?br />我们先来考虑几个问题?br />W一Q如果用单字节表示W号Q很明显Q完全不够用<br />W二Q如果用多字节表示W号Q那么,机器在读取的时候,它怎么知道3个字节表CZ个符Pq是表示3个符?br />W三Q如果?个字节表CZ个符P首先Q最多能表示65535个字W还是会不够用,q够用Q比如ASCII码这cM需1个字节就可以表示的符P?个字节表C,费I间了?br />因此QUTF-8孕育而生?br />首先UTF-8使用变长表示W号Q简单的_有的时候用1个字节表C符P有的时候用2个字节表C符Pq样解决了浪费空间的问题。那么,如何解决W二个问题的呢,我们得了解下UFT-8的编码规则?br />1.对于单字节的W号Q字节第一个ؓ0Q后?Zؓq个W号的unicode?br />2.对于N字节的符?N>1),W一个字节前N位ؓ1Q第N+1位ؓ0Q后面字节的前两位设?0,剩下可编码的位,W号的UNICODE~码?br />q里我从|上找了一副图<br />               <span style="color: #111111; font-family: 'Courier New', Courier, monospace; font-size: 16px; line-height: 28px; word-spacing: 2px; background-color: #e0dfcc; ">UnicodeW号范围 | UTF-8~码方式</span><br style="color: #111111; font-family: 'Courier New', Courier, monospace; font-size: 16px; line-height: 28px; word-spacing: 2px; background-color: #e0dfcc; " />                        <span style="color: #111111; font-family: 'Courier New', Courier, monospace; font-size: 16px; line-height: 28px; word-spacing: 2px; background-color: #e0dfcc; ">(十六q制) | Q二q制Q?/span><br style="color: #111111; font-family: 'Courier New', Courier, monospace; font-size: 16px; line-height: 28px; word-spacing: 2px; background-color: #e0dfcc; " /><span style="color: #111111; font-family: 'Courier New', Courier, monospace; font-size: 16px; line-height: 28px; word-spacing: 2px; background-color: #e0dfcc; ">0000 0000-0000 007F </span><span style="color: #111111; font-family: 'Courier New', Courier, monospace; font-size: 16px; line-height: 28px; word-spacing: 2px; background-color: #e0dfcc; ">| 0xxxxxxx</span><br style="color: #111111; font-family: 'Courier New', Courier, monospace; font-size: 16px; line-height: 28px; word-spacing: 2px; background-color: #e0dfcc; " /><span style="color: #111111; font-family: 'Courier New', Courier, monospace; font-size: 16px; line-height: 28px; word-spacing: 2px; background-color: #e0dfcc; ">0000 0080-0000 07FF | 110xxxxx 10xxxxxx</span><br style="color: #111111; font-family: 'Courier New', Courier, monospace; font-size: 16px; line-height: 28px; word-spacing: 2px; background-color: #e0dfcc; " /><span style="color: #111111; font-family: 'Courier New', Courier, monospace; font-size: 16px; line-height: 28px; word-spacing: 2px; background-color: #e0dfcc; ">0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx</span><br style="color: #111111; font-family: 'Courier New', Courier, monospace; font-size: 16px; line-height: 28px; word-spacing: 2px; background-color: #e0dfcc; " /><span style="color: #111111; font-family: 'Courier New', Courier, monospace; font-size: 16px; line-height: 28px; word-spacing: 2px; background-color: #e0dfcc; ">0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx<br /></span>下面我具体解释下q幅图?br />首先看第一行,它的意思是00000000?000007F的UNICODE~码Q对应的UTF-8的编码方式ؓ0XXXXXXX(X表示可编码位Q不的?)?br />W二行表C?0000080?00007FF的UNICODE~码Q对应的UTF-8的编码方式ؓ110XXXXX 10XXXXXX。以此类?br />那么Q问题是Q这个范围是怎么定的Q?br />很简单,我们q是从第一行说赗?07FQ实际有效位只有7位,所以,0xxxxxxxp矣。但?800开始,有效位至ؓ8位,我们得增加一个字节,按照UTF-8的规定,2字节的表C方式ؓ110XXXXX 10XXXXXXQ我们的~码位ؓ11?X的个?Q所以,我们最多可以表CUNICODE~码?1位的字符Q也是07FF?7FFq了是0800Q有效位臛_?2位,我们得用3字节来表C,按照UTF-8的规定,1110XXXX 10XXXXXX 10XXXXXXQ最大编码位?6位,也就是FFFFQ最后一行我׃再解释了?br />通过上面q个q程我们了解了,UNICODE转UTF-8的过E,当然Q逆过来就是UTF-8转换成UNICODE?br />我们通过一个例子来演示上面的过E。汉?#8220;?#8221;QUNICODE的编码位0x6768Q二q制形式?110011101101000Q根据上面的图,我们知道它属于第三行Q因此,它应该放?110XXXX 10XXXXXX 10XXXXXX的模板中Q结果是11100110 10011101 10101000Q十六进制表CZؓE69DA8?br />另外设计~码问题Q我们绕不开另一个问题,是大端端的问题,不过q个问题Q网上资料很多,也很好实践,q里我就不多啰嗦了?img src ="http://www.shnenglu.com/yg2362/aggbug/191746.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/yg2362/" target="_blank">梨树阛_</a> 2012-09-23 22:56 <a href="http://www.shnenglu.com/yg2362/archive/2012/09/23/191746.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>׃n内存(一)http://www.shnenglu.com/yg2362/archive/2012/09/06/189732.html梨树阛_梨树阛_Thu, 06 Sep 2012 11:26:00 GMThttp://www.shnenglu.com/yg2362/archive/2012/09/06/189732.htmlhttp://www.shnenglu.com/yg2362/comments/189732.htmlhttp://www.shnenglu.com/yg2362/archive/2012/09/06/189732.html#Feedback0http://www.shnenglu.com/yg2362/comments/commentRss/189732.htmlhttp://www.shnenglu.com/yg2362/services/trackbacks/189732.html
我们可以看到上面的拷贝次数是4ơ,下面则是2ơ?br />接下来我们看看用,其实|上和书上都有了很多资料QAPI是那么几个?br />int shmget(key_t key,size_t size,int shmflag)?br />keyQ可以指定IPC_PRIVATE,那么pȝ会ؓ你创Z个keyQƈ且返回一个id受也可以通过ftok函数生成一个keyQ不了解ftok的童鞋可以动手man一下)。那么ؓ什么要一个IPC既要一个key又有一个ID呢。这里我觉得是ؓ了方便其他进E访问。进EA创徏了一个共享内存,内核为其分配一个IDQ这个时候进EB惌讉KQ他怎么获取q个ID(N需要A把ID发送给BQ?)。但是我们用一个key很方便了。事先A,Bq程都知道这个keyQ那么A创徏了,B可以通过事先知道key扑ֈq块内存?br />sizeQ共享内存的大小。如果是获得一块内存,则该值应该ؓ0?br />shmflag:d权限的组合,可以与IPC_CREAT和IPC_EXCL按位或。当指定一个keyӞIPC_CREAT和IPC_EXCL配合使用可以在存在该key的共享内存时q回-1?br />当该函数调用成功后,q回一个系l分配的׃n内存Qƈ且size大小的字节被初始化ؓ0

void *shmat(int shmid, const void *shmaddr, int shmflg)
有了一块共享内存后Q进E需要映该内存到进E的地址I间。这个函数就是作用?br />shmid是之前获得IDQshmaddr如果指定了,׃配合shmflg定映射地址Q不q一般都不这么干的。返回值就是获得的地址Q你可以往里面写你或者读你需要的数据了。同时调用了该函敎ͼpȝ会修改shmid_ds数据?br />
int shmdt(const void *shmaddr)
解除l定关系Q参数就是我们之前获取的那个q回地址?其实我觉得这里参数如果ؓID貌似更统一些吧)

int shmctl(int shmid, int cmd, struct shmid_ds *buf)
q个函数主要做一些修改和查询。比如设|锁Q解锁,U除一块共享内存?br />
单介l了APIQ还要说一下一些注意的东西
1.׃n内存不会把数据写入磁盘文件中Q这个区别于mmap
2.即没有q程l定在共享内存,׃n内存也不会消q。必通过shmctl或者ipcrm删除(或者更暴力的方式关掉电(sh)?

另外我们可能会考虑Q系l最多创建多个׃n内存Q一个进E最多可以绑定多个内存Q一个共享内存创建的size最大最值是多少。其实这些设|在/proc/sys/kernel下面Q我们也可以自己写程序来d。脓(chung)一D代码用来获取上面的信息
#define MAX_SHMIDS        8196

int main(int argc,char *argv[])
{
    int i,j;
    int shmid[MAX_SHMIDS] = {0};
    void *addr[MAX_SHMIDS] = {0};
    
    //试可以创徏多少个共享内?/span>
    for ( i = 0;i < MAX_SHMIDS;++i )
    {
        shmid[i] = shmget(IPC_PRIVATE,1024,0666|IPC_CREAT);
        if ( shmid[i] == -1 )
        {
            printf("create shared memory failed,max create num[%d],%s\r\n",i,strerror(errno));
            break;
        }
    }
    
    for ( int j = 0;j < i;++j )
    {
        shmctl(shmid[j],IPC_RMID,NULL);
    }
    
    //试每个q程可以attach的最大数
    for ( i = 0;i < MAX_SHMIDS;++i )
    {
        shmid[i] = shmget(IPC_PRIVATE,1024,0666|IPC_CREAT);
        if ( shmid[i] != -1 )
        {
            addr[i] = shmat(shmid[i],0,0);
            if ( addr[i] == (void *)-1 )
            {
                printf("process attach shared memory failed,max num[%d],%s\r\n",i,strerror(errno));
                shmctl(shmid[i],IPC_RMID,NULL);
                break;
            }
        }
        else
        {
            printf("max num of process attach shared memory is[%d]\r\n",i-1);
            break;
        }
    }
    
    for ( j = 0;j < i;++j )
    {
        shmdt(addr[j]);
        shmctl(shmid[j],IPC_RMID,NULL);
    }
    
    //试一个共享内存创建最的size
    size_t size = 0;
    for ( ;;size++ )
    {
        shmid[0] = shmget(IPC_PRIVATE,size,0666|IPC_CREAT);
        if ( shmid[0] != -1 )
        {
            printf("create shared memory succeed,min size[%d]\r\n",size);
            shmctl(shmid[0],IPC_RMID,NULL);
            break;
        }
    }
    
    //试׃n内存创徏最大的size
    for ( size = 65536;;size += 1024 )
    {
        shmid[0] = shmget(IPC_PRIVATE,size,0666|IPC_CREAT);
        if ( shmid[0] == -1 )
        {
            printf("create shared memory failed,max size[%ld],%s\r\n",size,strerror(errno));
            break;
        }
        
        shmctl(shmid[0],IPC_RMID,NULL);
    }
    
    exit(0);
}
好了Q下开始介l如何控制读写?/div>

梨树阛_ 2012-09-06 19:26 发表评论
]]>C++复习W记---谈拯构造函数和赋值构造函?/title><link>http://www.shnenglu.com/yg2362/archive/2012/08/31/188919.html</link><dc:creator>梨树阛_</dc:creator><author>梨树阛_</author><pubDate>Fri, 31 Aug 2012 09:13:00 GMT</pubDate><guid>http://www.shnenglu.com/yg2362/archive/2012/08/31/188919.html</guid><wfw:comment>http://www.shnenglu.com/yg2362/comments/188919.html</wfw:comment><comments>http://www.shnenglu.com/yg2362/archive/2012/08/31/188919.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/yg2362/comments/commentRss/188919.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/yg2362/services/trackbacks/188919.html</trackback:ping><description><![CDATA[<p style="margin:0in;font-size:11.0pt"><span style="font-family:Calibri">1.</span><span style="font-family:SimSun">拯构造函数的形式</span></p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:SimSun">对于c?/span><span style="font-family:Calibri">X</span><span style="font-family:SimSun">Q如果它的函数Ş式如?/span></p> <p style="margin: 0in; font-family: Calibri; font-size: 11pt; ">a) X&</p> <p style="margin: 0in; font-family: Calibri; font-size: 11pt; ">b) const X&</p> <p style="margin: 0in; font-family: Calibri; font-size: 11pt; ">c) volatile X&</p> <p style="margin: 0in; font-family: Calibri; font-size: 11pt; ">d) const volatile X&</p> <p style="margin: 0in; font-size: 11pt; "><span style="font-family: Monaco">且没有其他参数或其他参数都有默认?/span><span style="font-family:Calibri">,</span><span style="font-family:Monaco">那么q个函数是拷贝构造函?/span></p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:Calibri">X::X(const X&);</span><span style="font-family:SimSun">是拷贝构造函?/span></p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:Calibri">X::X(const X&,int val = 10);</span><span style="font-family: SimSun">是拷贝构造函?/span></p> <p style="margin:0in;font-family:Calibri;font-size:11.0pt"> </p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:Calibri">2.</span><span style="font-family:SimSun">一个类中可以存在超q一个拷贝构造函?/span></p> <p style="margin:0in;font-family:Calibri;font-size:11.0pt">class X {      </p> <p style="margin:0in;font-family:Calibri;font-size:11.0pt">public:      </p> <p style="margin:0in;font-family:Calibri;font-size:11.0pt">  X(const X&);      </p> <p style="margin:0in;font-family:Calibri;font-size:11.0pt">  X(X&);            <span style="color:#339966">// OK</span>   </p> <p style="margin:0in;font-family:Calibri;font-size:11.0pt">}; </p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:宋体">~译器根据实际情况调?/span><span style="font-family:Calibri">const</span><span style="font-family: 宋体">拯构造函数或?/span><span style="font-family:Calibri">const</span><span style="font-family:宋体">的拷贝构造函?/span></p> <p style="margin:0in;font-family:Calibri;font-size:11.0pt"> </p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:Calibri">3.</span><span style="font-family:宋体">默认的拷贝构造函数行?/span></p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:Calibri">a)</span><span style="font-family:宋体">先调用父cȝ拯构造函?/span></p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:Calibri">b)</span><span style="font-family:宋体">如果数据成员Z个类的实例,则调用该cȝ拯构造函?/span></p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:Calibri">c)</span><span style="font-family:宋体">其他成员按位拯</span></p> <p style="margin:0in;font-family:宋体;font-size:11.0pt"> </p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:Calibri">4.</span><span style="font-family:宋体">默认的赋值构造函数行?/span></p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:Calibri">a)</span><span style="font-family:宋体">先调用父cȝ赋值构造函?/span></p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:Calibri">b)</span><span style="font-family:宋体">如果数据成员Z个类的实例,则调用该cȝ赋值构造函?/span></p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:Calibri"> c)</span><span style="font-family:宋体">其他成员按位拯</span></p> <p style="margin:0in;font-family:宋体;font-size:11.0pt"> </p> <p style="margin:0in;font-size:11.0pt"><span style="font-family:Calibri">5.</span><span style="font-family:宋体">提供昄的拷贝和赋值构造函?/span></p> <p style="margin:0in;font-family:SimSun;font-size:11.0pt">基本的原则是子类一定要调用父类的相应函敎ͼ参考方?/p> <p style="margin:0in;font-family:SimSun;font-size:10.0pt">Derive(const Derive& obj):<span style="background:yellow;">Base(obj)</span></p> <p style="margin:0in;font-family:SimSun;font-size:10.0pt">{</p> <p style="margin:0in;margin-left:.375in;font-family:Calibri;font-size:10.0pt">…...</p> <p style="margin:0in;font-family:SimSun;font-size:10.0pt">}</p> <p style="margin:0in;font-family:SimSun;font-size:10.0pt"> </p> <p style="margin:0in;font-family:SimSun;font-size:10.0pt">Derive& operator =(const Derive &obj)</p> <p style="margin:0in;font-family:SimSun;font-size:10.0pt">{</p> <p style="margin:0in;margin-left:.375in;font-family:SimSun;font-size:10.0pt">if ( this == &obj )</p> <p style="margin:0in;margin-left:.75in;font-family:SimSun;font-size:10.0pt">return *this;</p> <p style="margin:0in;font-family:SimSun;font-size:10.0pt"> </p> <p style="margin:0in;margin-left:.375in;font-size:10.0pt"><span style="font-family:Calibri">//</span><span style="font-family:SimSun">方式一</span></p> <p style="margin:0in;margin-left:.375in;font-family:SimSun;font-size:10.0pt"><span style="background:yellow;">Base::operator =(obj);</span></p> <p style="margin:0in;margin-left:.375in;font-family:SimSun;font-size:10.0pt"> </p> <p style="margin:0in;margin-left:.375in;font-size:10.0pt"><span style="font-family:Calibri">//</span><span style="font-family:SimSun">方式?/span></p> <p style="margin:0in;margin-left:.375in;font-size:10.0pt"><span style="font-family:SimSun;background:yellow;">static_cast<Base</span><span style="font-family:Calibri;background:yellow;">&</span><span style="font-family:SimSun;background:yellow;">>(*this) = obj;</span></p> <p style="margin:0in;margin-left:.375in;font-family:SimSun;font-size:10.0pt">return *this;</p> <p style="margin:0in;font-family:SimSun;font-size:10.0pt">}<br /><br />另外当你的成员变量有const或者引用,pȝ无法Z提供默认的拷贝和赋值构造函敎ͼ我们必须自己处理q些Ҏ(gu)的情?br /><br /></p><img src ="http://www.shnenglu.com/yg2362/aggbug/188919.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/yg2362/" target="_blank">梨树阛_</a> 2012-08-31 17:13 <a href="http://www.shnenglu.com/yg2362/archive/2012/08/31/188919.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>C++复习W记---cȝ函数指针和普通函数指?/title><link>http://www.shnenglu.com/yg2362/archive/2012/08/14/187183.html</link><dc:creator>梨树阛_</dc:creator><author>梨树阛_</author><pubDate>Tue, 14 Aug 2012 09:17:00 GMT</pubDate><guid>http://www.shnenglu.com/yg2362/archive/2012/08/14/187183.html</guid><wfw:comment>http://www.shnenglu.com/yg2362/comments/187183.html</wfw:comment><comments>http://www.shnenglu.com/yg2362/archive/2012/08/14/187183.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/yg2362/comments/commentRss/187183.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/yg2362/services/trackbacks/187183.html</trackback:ping><description><![CDATA[我们在类里面会定义成员函敎ͼ同时我们也希望定义成员函数指针。因此需要解?个问题,W一怎么定义cȝ函数指针Q第二赋|W三使用?br /> 我定义一个类Q?br /> <div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">class</span><span style="color: #000000; "> A<br /> {<br /> </span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br />     </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> add(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br />     </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> mul(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br />     </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> div(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br /> };<br /> <br /> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> A::add(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> a,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> b)<br /> {<br />     </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> a </span><span style="color: #000000; ">+</span><span style="color: #000000; "> b;<br /> }<br /> <br /> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> A::mul(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> a,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> b)<br /> {<br />     </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> a </span><span style="color: #000000; ">*</span><span style="color: #000000; "> b;<br /> }<br /> <br /> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> A::div(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> a,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> b)<br /> {<br />     </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> (b </span><span style="color: #000000; ">!=</span><span style="color: #000000; ">0</span><span style="color: #000000; "> </span><span style="color: #000000; ">?</span><span style="color: #000000; "> a</span><span style="color: #000000; ">/</span><span style="color: #000000; ">b : a);<br /> }</span></div> 我现在想要定义一个指针,指向Acd中返回gؓintQ参Cؓ两个int的函数指针。熟(zhn)C的同学马上会写出typedef int (*oper)(int,int)。但是这个用到C++里就有问题了Q?br /> 因ؓ我们知道Q类的非static成员Ҏ(gu)实际上还有this指针的参数。比如addҎ(gu)Q它实际的定义可能会q样int add(A* this,int a,int b);因此Q我们不能简单把C语言里的那套东西搬过来,我们需要重新定义这U类型的指针。正做法是加上cdQtypedef int (A::*Action)(int,int)<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: #000000; ">typedef </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> (A::</span><span style="color: #000000; ">*</span><span style="color: #000000; "> Action)(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000ff; ">int</span><span style="color: #000000; ">);<br /> <br /> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br /> {<br />     A a;<br />     Action p </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">&</span><span style="color: #000000; ">A::add;<br />     cout </span><span style="color: #000000; "><<</span><span style="color: #000000; "> (a.</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p)(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">) </span><span style="color: #000000; "><<</span><span style="color: #000000; "> endl;<br />     </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /> }</span></div> <div><span style="font-size: 13px; "><span style="color: #000000; ">Action p </span><span style="color: #000000; ">=</span> <span style="color: #000000; ">&</span><span style="color: #000000; ">A::add;q个是赋D?br /> 调用的时候注意,直接q样(*p)(1,2)是不行的Q它必须l定C个对象上</span></span><span style="color: #000000; ">(a.</span><span style="color: #000000; ">*</span><span style="color: #000000; ">p)(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">);我们也可以把cȝ函数指针定义在类的声明里?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; ">class</span><span style="color: #000000; "> A<br /> {<br /> </span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br />     </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> add(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br />     </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> mul(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br />     </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> div(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br /> <br />     </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> (A::</span><span style="color: #000000; ">*</span><span style="color: #000000; ">oper)(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br /> };</span></div> </span></div> 上面q种方式是针寚wstatic成员函数的,那么static成员函数的函数指针应该怎么定义呢,q能用上面这U方式吗Q我们知道static成员函数是没有this指针的,所以不会加上的cȝ限定Q它的函数指针定义方式和C里面的函数指针定义方式一L?br /> <div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">class</span><span style="color: #000000; "> A<br /> {<br /> </span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br />     </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> add(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br />     </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> mul(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br />     </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> div(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br /> <br />     </span><span style="color: #0000FF; ">static</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> sub(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br /> };<br /> <br /> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> A::sub(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> a,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> b)<br /> {<br />     </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> a </span><span style="color: #000000; ">-</span><span style="color: #000000; "> b;<br /> }<br /> <br /> </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br /> {<br />     </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> (</span><span style="color: #000000; ">*</span><span style="color: #000000; ">pp)(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</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; ">A::sub;<br />     cout </span><span style="color: #000000; "><<</span><span style="color: #000000; "> (</span><span style="color: #000000; ">*</span><span style="color: #000000; ">pp)(</span><span style="color: #000000; ">10</span><span style="color: #000000; ">,</span><span style="color: #000000; ">5</span><span style="color: #000000; ">) </span><span style="color: #000000; "><<</span><span style="color: #000000; "> endl;<br />     <br />     </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br /> }</span></div>ȝhQ非static成员函数的函数指针需要加上类名,而static的成员函数的函数指针和普通的函数指针一P没有什么区别?br />另外注意一点的?br />如果函数指针定义在类中,调用的时候有点区别?br /><div style="font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; background-color: #eeeeee; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">class</span><span style="color: #000000; "> A<br />{<br /></span><span style="color: #0000FF; ">public</span><span style="color: #000000; ">:<br /><br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> add(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> mul(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> div(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br /><br />    </span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> (A::</span><span style="color: #000000; ">*</span><span style="color: #000000; ">pfunc)(</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">,</span><span style="color: #0000FF; ">int</span><span style="color: #000000; ">);<br />};<br /><br /></span><span style="color: #0000FF; ">int</span><span style="color: #000000; "> main()<br />{<br />    A a;<br />    a.pfunc </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">&</span><span style="color: #000000; ">A::add;<br />    cout </span><span style="color: #000000; "><<</span><span style="color: #000000; "> (a.</span><span style="color: #000000; ">*</span><span style="color: #000000; ">(a.pfunc))(</span><span style="color: #000000; ">1</span><span style="color: #000000; ">,</span><span style="color: #000000; ">2</span><span style="color: #000000; ">) </span><span style="color: #000000; "><<</span><span style="color: #000000; "> endl;<br />    </span><span style="color: #0000FF; ">return</span><span style="color: #000000; "> </span><span style="color: #000000; ">0</span><span style="color: #000000; ">;<br />}</span></div><img src ="http://www.shnenglu.com/yg2362/aggbug/187183.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/yg2362/" target="_blank">梨树阛_</a> 2012-08-14 17:17 <a href="http://www.shnenglu.com/yg2362/archive/2012/08/14/187183.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.uzhp.cn" target="_blank">Ʒþ99</a>| <a href="http://www.wps2009.cn" target="_blank">þþƷ޸</a>| <a href="http://www.dgvs.cn" target="_blank">ҹþþþüŮӰԺ</a>| <a href="http://www.jxjiahegs.cn" target="_blank">޾þˬ˾Ʒ</a>| <a href="http://www.hhyskj.com.cn" target="_blank">þ</a>| <a href="http://www.panxl.cn" target="_blank">þþþAV</a>| <a href="http://www.huazhangjjm.cn" target="_blank">þ96Ʒþþ</a>| <a href="http://www.qvella.cn" target="_blank">޾Ʒþ</a>| <a href="http://www.haosenmy.cn" target="_blank">˾ھƷþþþ</a>| <a href="http://www.gangniao.cn" target="_blank">ŷƷרþ</a>| <a href="http://www.kangle.net.cn" target="_blank">þþþþ˸߳ӰԺ</a>| <a href="http://www.mydata.org.cn" target="_blank">þСƵ</a>| <a href="http://www.huangjiguang.cn" target="_blank">ձƷþþþӰԺձ</a>| <a href="http://www.trademan.cn" target="_blank">Ʒþþ</a>| <a href="http://www.hnwjzd.com.cn" target="_blank">Ƭѹۿþ</a>| <a href="http://www.yueyuju.cn" target="_blank">97Ʒ91þþþþ</a>| <a href="http://www.kunow.cn" target="_blank">һþƵ</a>| <a href="http://www.4008881898.com.cn" target="_blank">޹Ʒþ</a>| <a href="http://www.qequ.cn" target="_blank">þþþ뾫Ʒ</a>| <a href="http://www.6dou.net.cn" target="_blank">þù㽶Ƶ</a>| <a href="http://www.lq03.cn" target="_blank">þþþĻ</a>| <a href="http://www.longfee.cn" target="_blank">þҹӰԺѹۿ</a>| <a href="http://www.dntjj.cn" target="_blank">޹˾þþƷ99</a>| <a href="http://www.vhxz.cn" target="_blank">ĻƷѾþ5151</a>| <a href="http://www.3hong.cn" target="_blank">þþƷ޾Ʒ2020</a>| <a href="http://www.xyp020.cn" target="_blank">޹һɾþþƷۺ</a>| <a href="http://www.kydxx.cn" target="_blank">97Ʒþ찴Ħ</a>| <a href="http://www.ipingpong.cn" target="_blank">ŷ˾þþƷ</a>| <a href="http://www.x6844.cn" target="_blank">ŷҹAŴƬþ</a>| <a href="http://www.153u.cn" target="_blank">ۺϾþúݺɫ99h</a>| <a href="http://www.qnzj.org.cn" target="_blank">99þ뾫Ʒϵ</a>| <a href="http://www.macwolf.cn" target="_blank">ƷëٸAVѾþ </a>| <a href="http://www.newdalu.cn" target="_blank">AVҰ¾þ</a>| <a href="http://www.iqyyh.cn" target="_blank">ԾþþӰԺ</a>| <a href="http://www.yadangxiawa.cn" target="_blank">ʵҶ԰׾ʾþ</a>| <a href="http://www.wtx123.cn" target="_blank">ŷ㽶þۺվ</a>| <a href="http://www.ycjtjedu.cn" target="_blank">99þ99þþƷѿ</a>| <a href="http://www.lyfulinmen.com.cn" target="_blank">˾þô߽</a>| <a href="http://www.hvnm.cn" target="_blank">ɫۺϾžþ</a>| <a href="http://www.51peini.cn" target="_blank">þþƷAɫ</a>| <a href="http://www.pjov.cn" target="_blank">99þһ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>