2017华为编程大赛总结

      华为研发部门,每一年都会在部门内部举办一届编程大赛。旨在让开发人员在工做之余,经过游戏编程的切磋,提升技术和协做能力在入职华为的第四个年头,我终于如愿拿到了部门编程大赛的冠军。以前的每年也都会参加,其中两次抱大腿拿到了亚军,一次由于太忙弃权了。这一届终于带队拿到了冠军,了却了一桩心事。在此,对以前的参赛经验和感悟总结一下,作一个记念。至于下一届?应该不会再参加了。算法

一、比赛报名阶段编程

      首先说说本身的感觉,因为报名时是要确认队友的。而这里的队友不要求技术多精湛,可是必定要有责任心,也就是把这个比赛当回事。你忙的时候,他能帮你分担事情。你不忙的时候,你们能够一块儿讨论比赛算法和思路,互相勉励。有时候即便忙到很晚,可是做为一个团队,你们都没什么怨言。因此我的认为挑选队友是最最重要的事情。根据这几年的比赛经验来看,一个队伍要想拿到好成绩,真的不是一个高手带着一堆酱油就能够完成的。框架

二、参赛事宜jvm

    通常组织者会把比赛队伍的队长拉到一个群里。群里每每会第一时间发出框架bug,赛程变动,比赛规则安排等等事宜。因此在群里的队长必定要第一时间把群里获取到的消息,通知给组内的成员。先不说队友能作什么,至少作起事情来能够胸中有成竹。不少人只管问下本身想要知道的事情,对于其余人交流的话题每每不太关心,这是个很大的失误。。(防盗链接:本文首发自http://www.cnblogs.com/jilodream/ )好比比赛开发进度有人快,有人慢,每每能够经过群里的交流信息获得一些思路或者是提早知道比赛bug信息等。因此就算是在群里打酱油的人,也请把酱油打满。这或许就是所谓的情报工做吧。测试

三、代码编程优化

    其实代码的算法并非须要使用多么高效多么复杂的算法。可是必定要对整个的算法过程,在心中有一个思路。知道第一步作什么,第二步算什么,第三步解决什么,后续还须要作什么。比赛给的信息有什么,什么东西咱们不能直接拿到,须要本身进行数据的生成。(如比赛地图的信息)。不少人每每在这一步就畏难而止步,其实大可没必要。只要你写下第一行代码,后续的代码就能够渐渐的隐现出来,你须要作的就是一层层的拂去尘埃,看到潜意识中的算法思路。spa

四、算法思路的补齐blog

    这个阶段主要是核心算法已经大概完成。可是细节处理起来每每不尽如人意。大部分时间,参赛选手的基本算法其实都差很少,真正分出排名高低的缘由就是这一步。而这一步又是最考验人耐心的阶段。须要队员主要是反复的测试model,也就是比赛官方提供的默认AI,不断的进行比赛,翻出查看录像解决问题。如:游戏

(1)为何会死,死以前有没有出现重大失误。若是有的话迅速找出问题缘由而且修复。若是没有重大失误是否是最初的基本算法思路就是有问题的。该怎么避免这种问题。重写仍是优化。内存

(2)为何会死的这么早,虽说已经进入死胡同了,能不能用贪心思路多坚持一下,或许再坚持一下,往前边走就是柳暗花明了呢?千万不要这么早就放弃。

(3)为何没有死,可是却输了比赛。是否是对分数的获取不够敏感。如何调整权重,如何能使优点最大化,甚至动态的调整策略权重。这些都对实战有重大的影响。当时咱们在小组赛的时候输了一场。赛后反思缘由,其中的一个重要缘由是在下半场分数领先的状况下(并且是必胜的状况下)没有考虑上半场的分数落后了多少,从而出现了,明明能够赢,却输了的结果。

     其它的思路还有不少,好比如何使代码跑的更快一点,虚拟机可否再优化下,内存会不会溢出,jvm会不会挂,若是抛出异常怎么办,若是处理异常时又有异常怎么办。若是本身的“棋子”两败俱伤,如何止损,达到伤害最小化,利益最大化。若是必死,如何同归于尽,使对手的伤害最大化。(oh my god 越想越多,想一想本身当初的思路也是够疯狂的)总之这一步是整个比赛阶段拉开排名的重要环节。也就是查漏补缺阶段。

五、关于参赛事宜

       本身的感受是队伍内部最好有屡次参加比赛经验的队友。每每某些忽略的比赛细节,以及赛前须要注意的事情,均可能最终会影响到比赛的走势。还有编程大赛中可能会有一些灰度的事情,这些该如何应对。因此不要彻底忽略掉代码之外的事情。

六、比赛状况安排

      在这届比赛中,我被项目组安排为其余小组的比赛裁判。因此一边在主持比赛,一边还要观察本身队伍的比赛状况(时间、地点、赛况等)。这里其实也是有重大失误的。虽然我赛前已经安排了队友去跟着观看比赛,以避免有任何环境脚本等意外事故,可是比赛当时事情太多,彻底无暇顾及。而我又是队长,队友彻底不知道比赛的实际状况,致使很晚了,队友才给我打电话咨询比赛状况。幸亏当时咱们队伍所在组的裁判由于工做上的事情,开始比赛较晚,影响并不大,可是不管怎么样,这个错误很严重。关于这件事请看下文。

七、比赛临场工做

      咱们队伍所在的小组是H组,可是H组的环境有问题,应该是使用jre较老,致使虚拟机始终拉不起咱们编的jar包。当时我已经主持完其余小组的比赛,急匆匆的赶来。我一方面让队友排查脚本问题,一方面跟H组的裁判解释,由于根据比赛规程,若是比赛时初选相似问题,只能够修改启动脚本,不能够再修复代码包括编包。最终在咱们的要求下换了一台电脑,咱们提交的jar包终于能够正常运行了。当时真的是十万火急,若是不是对赛制的了解,再加上以前的比赛经验,极可能直接就弃权了。由于当时的比赛已经只剩下和咱们队伍相关的比赛了。其余队伍都在等比赛结果,而H组的裁判又在死命的催,这种时候来自外界的声音每每比日常会更大。

八、注意心态

    在小组循环赛中,咱们队伍的程序是最后运行起来的。而H组是公认的死亡之组,观看其余队伍的比赛,感受他们的算法很完善,而咱们的程序却死活不能启动。在和队友陆续尝试各类方法未果,猜想多是环境问题,要求换电脑,最终看到程序正常启动时,真的是欲哭无泪。在和裁判的解释过程当中,双发也发生了矛盾,我反复解释咱们的要求是知足赛制规则的。这一点赛后我以为很是重要,正是由于站在知足比赛规则的基础上,你的所做所为才能被称之为合理。。(防盗链接:本文首发自http://www.cnblogs.com/jilodream/ )弃权和冠军真的是一念之差,若是当时就放弃比赛了,以为是生成的jar的问题,以为是代码的问题,若是当时没派人跟队冷静的分析缘由,可能结果彻底不同。

     另一个让人哭笑不得的事情是,程序正常启动后,咱们第一场比赛就输了。就是我在前文算法思路补齐阶段所说的问题。当时没有想到是分数计算的缘由,只以为本身的程序指令出现了“死循环”了。操做的“棋子”在绕一个很大的圈,一圈圈的走。当时心想这还比个毛线啊。还好后续的比赛地图不会再出现一些“特殊”的地形,致使咱们的算法在临界点的判断上可能互相影响,综合起来形成一些很奇怪的现象。最终在16强中,咱们队伍与H组的第一再次相遇,凭借对手算法一次重大失误(也有人说是算法超时)最终赢得了比赛,剑指总冠军。

比赛所能想到的事情就是这些了,谢谢你,2017;

谢谢你,个人队友们;

也谢谢你,个人对手们。

相关文章
相关标签/搜索