??xml version="1.0" encoding="utf-8" standalone="yes"?>久久精品这里热有精品,性欧美大战久久久久久久久 ,久久久精品国产Sm最大网站http://www.shnenglu.com/converse/category/12068.html感兴领?高性能服务器编E?存储,法,Linux内核zh-cnThu, 08 Jul 2010 00:52:16 GMTThu, 08 Jul 2010 00:52:16 GMT60谈目前项目组的代码提交制?/title><link>http://www.shnenglu.com/converse/archive/2010/07/08/119660.html</link><dc:creator>那谁</dc:creator><author>那谁</author><pubDate>Wed, 07 Jul 2010 17:53:00 GMT</pubDate><guid>http://www.shnenglu.com/converse/archive/2010/07/08/119660.html</guid><wfw:comment>http://www.shnenglu.com/converse/comments/119660.html</wfw:comment><comments>http://www.shnenglu.com/converse/archive/2010/07/08/119660.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/converse/comments/commentRss/119660.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/converse/services/trackbacks/119660.html</trackback:ping><description><![CDATA[(转蝲h明出?http://www.shnenglu.com/converse 那谁)<br><br>一直以来想找机?x)谈谈目前这个项目组内采用的代码提交制?今天整理一?<br><br>分如下几个流E?<br>1) 在tracpȝ上徏立ticket,写好q个d的目?q且acceptq个ticket.<br>2) 修改代码,把相关的修改q的代码(一般还应包括相关的试用例的代?后面?x)加以说?提交到review board?<br>3) 在review board上填写如下几个必要的信息:<br>a)W?)步徏立的ticket的号?可以有好几个,也就是一ơ修改可以针对好几个d),以明这ơ提交针对的是哪个Q?<br>b)写下试了哪几个试用例,对这ơ的提交写一D|q?<br>c)写下l哪些h做review.reviewer的角色分ZU?一U是负责?另一U就是普通的l员.每一ơ提?必须保证reviewer中有臛_一个负责h,q且需要所有的reviewer都通过了这ơ修?才能向代码库提交代码.reviewer?x)针?gu)交的代码q行Ҏ(gu)回复.<br>4)一般情况下,代码不会(x)在第一ơ提交就能通过review,大多数情况会(x)被打回修?于是2)-4)三个步骤@环进行下ȝC码通过review为止.<br>5) 提交了代码之?1)中徏立的ticket?x)被自动关?q且在ticket的回复自动写上本ơ提交修改的文g以及(qing)svn revision?q样以后再看hq道是哪次提交q且修改了哪些文仉对的又是哪个功能?<br>6) 有一台服务器专门作ؓ(f)buildbot机器, q台机器在每ơ提交了代码之后, 自动清I原来的代码目录,更新最新的代码,重新~译,然后把里面的试用例全部跑一?我们的项目用的tcmalloc,?x)检查内存泄?所以在试用例试p|,以及(qing)有内存泄漏的时?buildbot都会(x)p|.需要补充一点的?除了每次提交代码?x)导致buildbot重新~译新的代码,在每晚的一个固定时?即没有更新代码,也会(x)做相同的动作.buildbot的存?是Z不断的清I编译文仉新编译再跑测试用?以大量的试消除随机性保证正?<br><br>以上是整个代码提交机制的大体程说明,下面谈里面的l节.<br><br>1)上面的第1)步中,建立trac的ticket?需要指定一个milestone,一般我们对必须做的事情是每周以日期命名建立一个milestone,q样,你做的Q务就?x)自然的变成每周可以去跟q的d.<br>2)W?)步中,写测试用例针对的是每个类或者每个头文g对外暴露的API接口,比如对外的API c使用内部的函数B,那么是没有办法对函数B~写试用例?我们的要求是, M的一个新增的API都需要写针对它进行测试的试用例,不一定只有一?因ؓ(f)需要考虑的情况可能很?总而言?可能的考虑齐全.假如本次修改修改了内部函数B,那么依赖于函数B的API c它的试用例也就需要再试?q些试用的代码也会(x)一q提交到代码库中,因ؓ(f)q样才能保证buildbot更新之后也按照最新的试用例q行试.<br>3) 代码提交到reviewboard之前,q需要过lintq一?对基本的代码风格q行(g)?我们使用的是google c++ code style.<br>4) reviewer中的负责色很重要, L(fng)看门人的作用,M的一ơ修Ҏ(gu)?都必至经q一个负责h的review, 所以对他的要求q寚w些了,除了要完成自q工作?q需要认真review他h的代?而要review他h的代码ƈ且给出好的意见来,又要求他本h除了~码能力?q要在业务层面对别h的工作有大体的了?不然没法r(sh)eview?<br>5) 从前文可以看?review实在是一个繁杂的工作,很有可能在review阶段被打回修改代?我的经验而言,提交review的h要将提交的Q务尽量的划分的细一些就来的很重要了.在提交review的时?我一直坚持DOTDIW原则(Do One Thing,Do It Well).相反的例?我们l有个同?做了一个很大的功能,光是完成q个大的功能,p费好几周的时?提交review的时候代码量?有个几千行的,q样别hreviewh也慢,而且一旦不通过需要修?又是一个苦力活?q样一折腾,一个月旉q去?如果当时能对整体的功能有个把?懂得划分模块层次,逐个提交,也许?x)好?当然,大规模的代码提交有时q不能完全的避免,比如一个比较大的重?牵一发而动全n?我只是说如果可能,应尽量避免大规模代码的提?q且最重要的是:每次提交最好仅针对一个功能点.<br><br>以上是对程从整体到l节的描q?现在谈谈我的看法.<br>先来谈优?<br>1) 通过codereview制度,保证了项目组成员之间能够在代码层面上直接的进行交?我想q一Ҏ(gu)最重要?没有之一.<br>如果你是一个水q_一些的E序?那么有比你牛叉的人帮你review,相当于是M的时候有老师帮你阅卷修改作业,可以指正你的问题所?我在被hreview的过E中听C别hҎ(gu)很多的意?而如果是一个水q高的?是不是对水^差的行codereview是费他的旉了呢?我个?q个事情分怎么?从团队的角度?按照木桶理论,最短的短板往往军_了能辑ֈ的水q?M能指望所有的事情都由老鸟完成,所以老h在帮Chreview代码的时候间接的帮助了新人的成长,同时作ؓ(f)目l中资历比较q?也应该对目多费一些时间进行把?我觉得这一Ҏ(gu)可厚?同时,即是新?通过阅读他h的代码ƈ且交?也可以学?fn)到别h的思想.<br>codereview制度从上面的角度上保证了目成员可以直接通过代码q行交流,单的?谁写的代码质量如?一Creview,一目了?写的好的通过的快,写的不好被打回修改多了自׃?x)长记?q可以多看别人的代码q行学习(fn).q样,在一定层面上可以佉K目组成员的能力尽可能的接q?我能力长了一U?相应的也?x)拉动项目组中的人升U?<br><br>2) 试用例.我之前提到的试驱动开?x来自于目l中~写试用例+buildbot执行试用例的做?如何证明一个API是确定无误的?我觉得这个问题似乎非帔R.除了一些可以通过数学上逻辑上证明的情况?q需要考虑很多其他的随机情?比如U程的切换是随机?某个文gҎ(gu)好存在是随机?{等.q些随机出现的问?很多时候不能在某一ơ测试中昄出来.但是如果有了buildbot,不停的更?~译,执行,M(x)有暴露问题的一?另外,之前我也提到q?脑中如果有了试用例的概念存?每写一个API旉?x)考虑到针对它的用例应该是怎样?从另一个角?也帮助你的设?-你需要考虑q个API的输?输出,异常情况都有哪些,如何试?试用例的存?保证目量的做C"可控?.<br><br>~点:<br>1) 从上面的程可以看出,走完一个代码提交的程需要花费大量的_֊/旉(有一些还是他人的_֊/旉),所?也许q个制度q不适合于那U时间压力比较大的项?<br><br>2) 有几个地方很隑֝?比如codereview?有些reviewer?x)走q场,也没怎么看代码就直接通过?q样׃(x)于形式?q有~写试用例,也是一件很耗时间的事情.<br><br>3) ׃codereview制度的存?lreview中的负责人带ȝ压力很大,因ؓ(f)本n他有自己的工?又要量对他人的业务/代码q行了解,像那种负蝲很大的服务器一?有时候会(x)不堪重负.q一点上,我的x?目l内的其他成?如果能积极主动一?多花旉了解别h的代?量分担review的Q?或者试着成长责hU别(降低单点故障?),也许是一个好办法.不过,q还得看Z.<br><br>整个代码提交程上的软g,目前我所知的都是使用的开源Y?SVN, google c++ code style lint,review board,buildbot,trac,试用例的编写上使用的是google的测试用例框架gtest.不过,整合赯些Y件搭建好q个程׃是那么容易了,用了一?半年左右的时?才让q个程基本E_下来.<br><br>M,q套机制?既有Zؓ(f)的干?也有机器层面上的q涉,也许q不是最完美?但是了最大的力量M证项目的正确性和可控?<br><br>以正的方式正确的制度做?是将事情做好的一个关?<br><br> <img src ="http://www.shnenglu.com/converse/aggbug/119660.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/converse/" target="_blank">那谁</a> 2010-07-08 01:53 <a href="http://www.shnenglu.com/converse/archive/2010/07/08/119660.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>试驱动开?/title><link>http://www.shnenglu.com/converse/archive/2010/06/10/117596.html</link><dc:creator>那谁</dc:creator><author>那谁</author><pubDate>Thu, 10 Jun 2010 15:19:00 GMT</pubDate><guid>http://www.shnenglu.com/converse/archive/2010/06/10/117596.html</guid><wfw:comment>http://www.shnenglu.com/converse/comments/117596.html</wfw:comment><comments>http://www.shnenglu.com/converse/archive/2010/06/10/117596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/converse/comments/commentRss/117596.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/converse/services/trackbacks/117596.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt;">有一本书叫<a ><<试驱动开?gt;></a> , 我没有看q?q里仅谈论我所理解?试驱动开?.<br><br>我对q句话的理解? <br>1) M一ơ提交新的代码都需要添加针对这些新功能的测试用?<br>2) 无论设计函数q是c? 对外暴露的接口都应该做到明确, 清晰, 不会(x)lh模棱两可的感?提供的功能点可能的单一, do one thing, do it well.<br><br>而言? 我所理解?试驱动开?, 十分Ҏ(gu)口的设计, 以及(qing)针对q个接口所需要考虑的异常和试用例.接口是对外的保证, 而测试用例是验收? 每次的修? 都需要保证之前和现在的用例能利通过.<br><br>所? 对开发h员来? 如果有这?试驱动开?的观? 那么在设计编写代码的时候会(x)很容易的形成几个好习(fn)? 比如他会(x)反问自己以下几个问题:<br>1) 新增的代码提供的是什么功? 功能Ҏ(gu)否够的单一, 明确, 比如本次试的代码仅针对功能A, 下一ơ的仅针对功能B, 假如B功能q依赖于A功能, 那么首先要保证A功能Ҏ(gu)提?切忌万不得已的情况下不可以将多个功能Ҏ(gu)在一ơ提交中, q样, 以后回溯问题时会(x)加大隑ֺ, 也会(x)lcodereview{带来困?<br>2) 新增的功? 对外暴露的接口是哪些?有没有冗? 不明的接口设计?q些接口是不是刚刚好不多不少_?<br>3) Ҏ(gu)增的功能, 明确了对外应该提供什么接口之? q需要反问自?可能在哪些情况下出错, 每种出错的情况应该如何处? 如何通知调用? 代码的注释是不是对一些情况作了说?<br>4) 最? Ҏ(gu)增的功能, 考虑了哪些测试用? 试是否充分, 是否考虑了很多异常的情况?<br><br>所? 每次的代码提交都是一件很严肃的事? q意味着, 你对pȝ现有的代码做Z一些修? 可能是接口的修改, 可能是实现的修改.如何能保证你的修Ҏ(gu)有问? codereview是一? 好的codereview是一件很耗时的事? q需要reviewer负责?同时最好还要多对q部分代码有了解.如果reviewer能力较强, 又比较负? 那么一ơreview相当于是一个老师在阅M? 他会(x)l出你一些徏?反之, 如果你作为reviewer去review一个高水^的h的代? 又可以从阅读中学?fn)对方的思\.总而言? 我觉得做好codereview是一件能够迅速提?l验?的捷? 早前我阅读过许多开源项? 学习(fn)了很多别人的技巧思\, codereview比之更近了一?-因ؓ(f)我还有机?x)与作者面寚w的一起交?另外, 除了codereview之外, 每次提交都有试用例, 也是保证代码质量的方式之一, 如果把代码比做一个球? 那么试用例是站在q个球场门口q行安检工作的保? 不论做了什么修? 只要保证试用例写的? 那么基本上都跑不q这个保安的掌心.有了试用例, 目的修Ҏ(gu)有了保证, 它所提供的功? 都是可控?有保证的.<br><br>另外, 每次提交的修改功能点量的单一也是很重要的一? 因ؓ(f)假设你想做的事情很多, 比如做了A又想做B,发现做B功能需要实现C功能,实现C功能首先要做D功能....子子孙孙,无穷也.q样?x)导致你的代码提交codereview时被通过的时间慢(原因有很? 比如你需要提交测试用例多? 比如别h的codereview旉多了).q有一? 假如别h赶在你之前提交了代码, 而你的修攚w要依赖别人的代码, q样D了你需要合q别人的改动, q又是一件很ȝ(ch)的事?<br><br>所? 当接手一个Q务时, 如何按照层次序划分d, 每次提交都保证尽可能提交的功能? 而且又能保证每次的提交都有严格的试用例, 也是对开发h员的一个考验.当然,q些也许在动手的时候不能百分百的考虑清楚, 但是如果完全的没有考虑q? 上手做, q早都要q的.<br><br>另外, 有了同新增代码一h交测试用例的要求之后, "看上?每次提交的速度慢了, 因ؓ(f)q需要撰写测试用? 所以对d旉点的估计可能也需要改? 我个人的估计是写代码旉 : 试旉(包括写测试用?改bug) : Ҏ(gu)codereview修改代码的三者之间比例大概ؓ(f)4:3:3, 所以如果一个Q务给我五个工作日的时间完? 也许以前我到了第四天才编码完? 而现在就要尽量做到第三天之内能完成编码了.不过q个比例q不定, 依个人的素质而定, 有的人写代码质量很高, 自己已经把很多情况在写的时候考虑q去? 所以后期测试和codereview时出现问题的Z(x)? 反之, 有的人的代码质量较差? 可能l常在codereview的时候被打回去重?甚至于重?? 后面的比例就要增加了.以我而言, 如果能在保证代码质量的同? 减少后面两项的时间比? 那应该是说明了我的代码质量有了提高了.<br><br>总而言? 接口的设? d层次序的划? 都是很考验人经验的z? 语言的表达L苍白? 需要实实在在的d践体?<br><br>K.I.S.S<br> </span> <img src ="http://www.shnenglu.com/converse/aggbug/117596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/converse/" target="_blank">那谁</a> 2010-06-10 23:19 <a href="http://www.shnenglu.com/converse/archive/2010/06/10/117596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ҏ(gu)与工?/title><link>http://www.shnenglu.com/converse/archive/2010/04/15/112605.html</link><dc:creator>那谁</dc:creator><author>那谁</author><pubDate>Wed, 14 Apr 2010 16:57:00 GMT</pubDate><guid>http://www.shnenglu.com/converse/archive/2010/04/15/112605.html</guid><wfw:comment>http://www.shnenglu.com/converse/comments/112605.html</wfw:comment><comments>http://www.shnenglu.com/converse/archive/2010/04/15/112605.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.shnenglu.com/converse/comments/commentRss/112605.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/converse/services/trackbacks/112605.html</trackback:ping><description><![CDATA[ 从最q遇到的几个故事说v.<br><br>故事一:<br>某天晚上和室友聊?谈到使用Vim阅读代码,室友也是使用Vim的h,他说用类似ctags的查扑֮位功能不?更多的时?他阅MD代?要定位一个功能点,首先是从阅读代码文g的组l?了解目的功能等入手,{这些都基本清楚?定位h׃(x)快很?我虽然认?ctags实在是Vim里面一个很不错的功?不用q个实在可惜,但是他说的那套定位思\其实也是不错的方?其实我自q惯了ctagscȝ功能之后,阅读代码的时候也?x)用惰?更多的时候是要靠q些工具来帮我定?而不是通过自己d的思考和分析.<br><br>故事?<br>我的l验里面,写完一D代码之后的W一ơ编?如果~译器报错越?那么可以认ؓ(f)q段代码来可能出现bug的几率越?而言?我认Z码的质量与第一ơ编译的报错数量成反??不用拿helloworldcȝE序跟我ȝ角尖?).有些人写的代?哗哗的写了一大段,写之前不考虑?只想着到时候写的不对了可以在编译由~译器的报错来帮忙找问题,q个思\是不对的.~译报错少的代?说明了作者写的时候思\更清C?考虑的更周全一?所有的q些程上的步骤走的都不错了,所以才有最后编译报错少的结?~译报错应该是写代码的结果之一,而不应当当成了找代码问题的手D?q样的思\,本末倒置?<br><br>故事?<br>q入新项目组?l内对代码编码的程有比较严格的要求,包括写一个API之后需要写一个针对这个API的各U情늚试用例,提交代码的时?需要走codereview程,需要用cpplint(g)验代码风?需要将对应的测试用例也提交上去.q一套流E走下来,提交代码的频率比之以?降低了很?但是不可否认的是,也确实提高了代码的质?假设一个功?由N个API构成,如果能对qN个API都做q详l的试,保证它们的输入和输出在各U情况下都能W合要求,那么很显然的,最后这个功能也应该是正的.反之,是C试阶段需要用类似gdbq样的调试器来定位问题的,?x)越让h不放?--因ؓ(f)没有制度和流E的保证,谁也不能说将来可能在哪个点会(x)出问?它可以帮你定位问?但是没有办法告诉你已l没有问题了,最后这一?最l还是要通过严格的单元测试等程来保证的.与第二个故事相同,我认?在测试阶D用gdb定位问题的次C与代码的质量成反?)<br><br>q几个故事综合v?惌表达的是,做一件事?需要有程,制度的保?当然也需要工?比如q几个故事里面提到的Vim,gcc,gdb),但是工具是工具,它只是一U手D?没有办法替代正确的思\,程和制度等,仅能在整个过E中起到辅助的作?而且,q分依赖工具,也会(x)lh以惰?比如前面提到的用编译器~译代码来找?比如使用gdb来保证功能正性等).<br><br>所?更应该提倡的是正的程,制度,有了q些,目的质量才能有所保证.比如,在写一个功能点?需要具体分解ؓ(f)哪几?每一步有哪几个API,针对它们的测试用例有哪些,试时的输入和输出有哪些,需要考虑的异常情冉|哪些,{等?q些都考虑清楚?再动手写,久而久?我想q方面的能力?x)慢慢的提?<br><br><br><br><img src ="http://www.shnenglu.com/converse/aggbug/112605.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/converse/" target="_blank">那谁</a> 2010-04-15 00:57 <a href="http://www.shnenglu.com/converse/archive/2010/04/15/112605.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[l验教训ȝ]协议包头l构体定义不严}造成的错?/title><link>http://www.shnenglu.com/converse/archive/2009/10/15/98714.html</link><dc:creator>那谁</dc:creator><author>那谁</author><pubDate>Thu, 15 Oct 2009 12:32:00 GMT</pubDate><guid>http://www.shnenglu.com/converse/archive/2009/10/15/98714.html</guid><wfw:comment>http://www.shnenglu.com/converse/comments/98714.html</wfw:comment><comments>http://www.shnenglu.com/converse/archive/2009/10/15/98714.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.shnenglu.com/converse/comments/commentRss/98714.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/converse/services/trackbacks/98714.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.shnenglu.com/converse/archive/2009/10/15/98714.html'>阅读全文</a><img src ="http://www.shnenglu.com/converse/aggbug/98714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/converse/" target="_blank">那谁</a> 2009-10-15 20:32 <a href="http://www.shnenglu.com/converse/archive/2009/10/15/98714.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.shanwengqing.com.cn" target="_blank">ɫþþ99Ʒ91 </a>| <a href="http://www.baby-photo.com.cn" target="_blank">99þҹɫƷվ</a>| <a href="http://www.businesscube.cn" target="_blank">ƷþþӰ</a>| <a href="http://www.netcacd.cn" target="_blank">þۺһ</a>| <a href="http://www.uuribao.com.cn" target="_blank">97ȾþƵƷ99</a>| <a href="http://www.26zf.cn" target="_blank">þݹֻƬ</a>| <a href="http://www.projector8.cn" target="_blank">þۺɫݺ</a>| <a href="http://www.ovnk.cn" target="_blank">Ʒþþþþҹҹ </a>| <a href="http://www.excelbbs.cn" target="_blank">˾þþƷӰԺ</a>| <a href="http://www.yzx777.cn" target="_blank">Ʒһþ</a>| <a href="http://www.hcpyr.cn" target="_blank">˾þۺϾƷAVר</a>| <a href="http://www.mabcrea.cn" target="_blank">þۺϾɫۺϾ99</a>| <a href="http://www.pyspiderking.cn" target="_blank">˾þô߽</a>| <a href="http://www.5uatm.cn" target="_blank">91ɫۺϾþѷ</a>| <a href="http://www.damangdao.cn" target="_blank">ɫþþۺľþһ</a>| <a href="http://www.zmlxs.cn" target="_blank">Ʒ99Ʒþ</a>| <a href="http://www.macroshot.cn" target="_blank">þAV˳׽ </a>| <a href="http://www.bjhswt.com.cn" target="_blank">þˮav뾫Ʒ鶹</a>| <a href="http://www.ksszzyy.cn" target="_blank">þùһ</a>| <a href="http://www.pudlv.cn" target="_blank">պ뾫Ʒþһ</a>| <a href="http://www.jjcxxx.cn" target="_blank">þۺϾɫۺϾ99</a>| <a href="http://www.dowee.com.cn" target="_blank">91Ʒ91þۺ</a>| <a href="http://www.hygame8888.cn" target="_blank">þþþAVۿ</a>| <a href="http://www.ode.net.cn" target="_blank">ѾƷþ</a>| <a href="http://www.jsrst-gov.cn" target="_blank">þ߳ˮ</a>| <a href="http://www.sohucn.com.cn" target="_blank">Ʒݾþþþø99</a>| <a href="http://www.drqv.cn" target="_blank">ŷ˾þƬ</a>| <a href="http://www.iido.org.cn" target="_blank">˾þþƷӰԺ</a>| <a href="http://www.awhahzm.cn" target="_blank">޹һɾþþƷۺ</a>| <a href="http://www.gmmk.net.cn" target="_blank">þ99ƷۺϹҳ</a>| <a href="http://www.dgltjsh.cn" target="_blank">þAv뾫Ʒϵ</a>| <a href="http://www.bainiu168.cn" target="_blank">ŷƷþþ</a>| <a href="http://www.baaag.cn" target="_blank">ҹҹݺݾþö</a>| <a href="http://www.diylady.cn" target="_blank">ۺϾþһ</a>| <a href="http://www.elishe.cn" target="_blank">޹˾Ʒþþþþۺ</a>| <a href="http://www.ciidc.org.cn" target="_blank">99reþþƷҳ2020</a>| <a href="http://www.pophyh.cn" target="_blank">þþþþùƷ </a>| <a href="http://www.xjyjd.cn" target="_blank">999þþƷ</a>| <a href="http://www.wangyanl3.com.cn" target="_blank">츾þþ</a>| <a href="http://www.dyzwar.cn" target="_blank">㽶þavһ</a>| <a href="http://www.010tk.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>