具体为什么跑去外包,只能说自己太水了,或者太懒了,都不好好投简历,也没入这个坑过,如果有想去外包的,除非钱给到市场价的1.5倍以上,否则别考虑了。

项目是国内第一做通信公司的,从具体的需求说起比较好,不,还是要从一个坑货项目经理说起,说起这个项目经理,不得不服他,测试出身,来带我们这个开发团队,开发团队里很多大牛的,HW的工作5年+三星工作3年的,HW工作10+的,ZX工作8+的,ZX工作10+的,HW工作到退休的,具体就不一一说了,反正团队的能力毋庸置疑,但是这个项目经理完全不懂开发,不知道什么就需求分析,设计,code,自测,转测等,就连code review都不知道,然后还在那瞎指挥我们,导致我们一直在瞎转,赢了同事一句话--一将无能,累死三军。虽然我不该说领导不好,可是还是忍不住吐槽。说正题,从项目需求开始说,11月底的时候告诉我,12月有个小需求让我来做,问我敢不敢接,我的性格你们不知道,有毛我不敢接的。然后问了下大概做什么,大概11月30号左右拿了他们的模块的设计文档来看,因为没完全没接触过通信这块,再加上对他们的系统不是很熟,导致下面的2周很苦逼。12月1号(周4)起,就开始细看他们的文档,大概看了2~3遍,然后周5过去HW去让他们补习下,听了他们讲的,和我理解的差不多,业务部难,应该说业务很简单,应该不会出什么事,也没怎么上心,然后就开始细看他们的代码,在哪里准备加代码,表示心里有数,大概发了5天左右(上午还要给HW的人打杂,做日志分析工作)编码完成,心虚,因为是一个完整的新的模块,自己周末又过来code review了2~3遍,感觉基本没什么问题了,开始找HW的人review,然后就开始一坑接一坑了。

忘记说了,编码阶段,有些不确定的地方,主要是逻辑这块,新的业务逻辑该是什么样的,我写好了代码,发过去给HW的人看,就是为了确定业务逻辑有问题没,然后他们说没问题。然后codereview完了,发现原本的一个RBTREE支持不了现在的业务,必须新加一颗静态树来作为副本存原来的静态树结构(只是key不一样),这里要记录下,原有的树胶Tree1,副本树胶Tree2,没问题,以为改也不是很多,我大概发了一个下午把树的逻辑给加上去,然后自己review,感觉差不多了,没什么问题,找他们做第2次review,他们细看了下,发现业务逻辑还是有问题,说树2的节点不能这么玩,你这树2的节点对应树1节点可能是多对1,必须要在树的节点上在加个头链表,听到这话首先是不开心,但是没表现出来,因为树当时写我是按1-1来处理的,他们是DE,这么重要的信息在我编码完成后才说,这是坑我。如果是1对1,基本没什么问题了,但是1对多,这个逻辑肯定要大改,我就说这么重要的信息,你让我一个刚接触这个模块的人想,反正是大家都不开心,如果没有这个问题,我写的代码,基本就4个小问题(注释没删,笔误一个数组的下标全写出0,一个字节序对齐,还有个什么不太记得了),但是不开心归不开心,心里不爽,这个坑不该我来背,代码还是要写的,其实我还是喜欢写代码的。

大概又花了1个下午加晚上,代码完了,review的时候也没什么大问题,刚开始,后来到新改的逻辑的时候开始巨坑出现了,HW的人说你这个时间复杂度和空间复杂度高了,说我不是跟你说怎么怎么写了吗,我当时直接蒙了。。。

先说空间这块吧,因为节点上挂链表,我就直接在tree2Node上挂一个链表指针,然后又不同的value就直接申请内存往这个list上加,他们说你这么加的不是我说的那样啊,这样加有问题,你自己申请的内存虽然很小,但是平台管理内存的模块会加系统的头,你这个链表如果有1000个节点,那么你这内存就是1000*(你申请的内存+系统头40多个字节),这个内存浪费太厉害(我心里不开心,这我刚来这个外包公司做第一个项目,身边都没人做过你们的东西,都是新来的同事,才组建的团队);另外,我记得和你说过,如果是遍历,觉得不能用list(这话他确实说过),时间复杂度太高,我心里开始心虚了,这话是说过,我这么写性能确实不好,我说是的,这块代码这么写被我玩坏了,是自己的问题就勇于去承认,这个不是什么丢人的事情。反而我觉得前面关系一对多,这个坑我觉得下次你们写设计的时候希望也多想想,别什么都指望一个刚入职不久,刚了解你们的框架,看都没看过你们模块的代码和一点都不了解你们业务的人来考虑,好了吐槽结束,最后的解决,他们一个大牛帮我整改了下,解决。

说点心得吧,数据结构被他们玩的厉害,这个是真心的,树和链表,循环链表写的确实好,思想很厉害,被坑了这么长时间,联调还没开始,原计划13号联调的,我脱了你们的后腿,心里还是很抱歉的,虽然双方都有责任,但是答应你们的事情没搞好,心里很不开心,真心的。

说点技术在最后把,他们的树节点封的特别有意思。

typedef struct node_common
{
struct common_node *pParent;
struct common_node *pLSon;
struct common_node *pRSon;
COLOR color;
}TreeNodeCommon; typedef struct person_node
{
    int iAge;
char sName[60];
char sTelNum[20];
TreeNodeCommon* pCommon; } Person;

比如这样的一个人节点,定义一个实体Person xx,他们把xx.pCommon的这个地址提出来作为key值插到树上或者其他的数据结构上,这样遍历树去找这个xx的时候,要先找到这个xx.pCommon的地址,很显然在内存中偏移下,就可以得到xx的地址了,还是很厉害的,真心的。

成长日记--记录在WB的第一个项目。的更多相关文章

  1. 菜鸟成长日记之新手备忘录-IOS开发第一个项目总结

    2013年5月3号,开始找IOS开发工作(自学了大半年,做了一个功能不全的Demo,该出去见见世面了!),5月4号面试了第一家公司(是家刚成立一段时间的外包公司),5月5号第一家公司已二轮电话面试,5 ...

  2. DevOps 工程师成长日记系列二:配置

    原文地址:https://medium.com/@devfire/how-to-become-a-devops-engineer-in-six-months-or-less-part-2-config ...

  3. scrapy爬虫成长日记之将抓取内容写入mysql数据库

    前面小试了一下scrapy抓取博客园的博客(您可在此查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据),但是前面抓取的数据时保存为json格式的文本文件中的.这很显然不满足我 ...

  4. C++添加简单的日记记录

    #include<fstream>#include<iostream> using namespace std;//这是一种日记记录 b 种void LOG(char *tx, ...

  5. DevOps 工程师成长日记系列一:必备知识与技能组合

    原文地址:https://medium.com/@devfire/how-to-become-a-devops-engineer-in-six-months-or-less-366097df7737 ...

  6. 第一个项目:Python pygame——外星人大战(心得)

    2018年12月,作为一个大学专业是物联网工程,毕业后在一家石油行业国企干了近三年,但内心依然有着一颗技术之心的我,通过一次偶然的机会(也许并不偶然),接触到了python.当时抱着玩一玩的心态开始通 ...

  7. .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块

    .Net Core ORM选择之路,哪个才适合你   因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...

  8. VB的第一个项目

     前言-----本人也是刚刚接触VB,企业的VB代码基本能看的懂,但是自己开发,只能呵呵.一般在刚学习一门新的语言时,很容易发生一些自己相当然的认识错误,so,记下并分享开发学习的过程,望指正.--- ...

  9. 【02】Jenkins:第一个项目

    写在前面的话 通过上一节我们成功的搭建起来 Jenkins,那么接下来就是体验如何构建我们的第一个项目了.当然在这之前我们得专门针对 Java 环境就行简单的配置. 全局工具配置 其实这次配置的主要还 ...

随机推荐

  1. AIM Tech Round 5 1028cf(A-E)

    AIM Tech Round 5 (codeforces上题目编号是1028)(A-E) ---完全被这次比赛打击,自己真的很渣--- 战况 依旧3题选手 被构造题坑得好惨 稍稍涨了rating,希望 ...

  2. HDU 5288 OO’s Sequence [数学]

     HDU 5288 OO’s Sequence http://acm.hdu.edu.cn/showproblem.php?pid=5288 OO has got a array A of size ...

  3. js(Mandango:壮汉专用,电影院划位工具)

    Mandango:壮汉专用,电影院划位工具 <body onload="initSeats();"> <div style="margin-top:75 ...

  4. POJ 2187 Beauty Contest( 凸包求最远点对 )

    链接:传送门 题意:给出 n 个点,求出这 n 个点中最远的两个点距离的平方 思路:最远点对一定会在凸包的顶点上,然后直接暴力找一下凸包顶点中距离最远的两个点 /******************* ...

  5. [Codeforces 626F]Group Projects

    题目大意: 给定\(n\)个数\(a[1]\sim a[n]\),让你把它分为若干个集合,使每个集合内最大值与最小值的差的总和不超过\(K\).问总方案数. 解题思路: 一道很神的dp题. 首先将数进 ...

  6. Jquery JS 全局变量

    window["a1"]="abc";window["b1"]=5;

  7. 基于S5PC100的FIMC控制器解析

    作者:邹南,华清远见嵌入式学院讲师. http://www.cnblogs.com/gooogleman/archive/2012/07/26/2610449.html CAMERA SENSOR O ...

  8. POJ——T1789 Truck History

    http://poj.org/problem?id=1789 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 27597   ...

  9. jquery简直是太酷炫强大了

    链接地址:http://www.yyyweb.com/350.html Web 开发中很实用的10个效果[源码下载] 小鱼 发布于 3年前 (2014-07-15) 分类:前端开发 阅读(303741 ...

  10. 【POJ 1850】 Code

    [POJ 1850] Code 还是非常想说 数位dp真的非常方便! !. 数位dp真的非常方便!.! 数位dp真的非常方便! !! 重要的事说三遍 该题转换规则跟进制差点儿相同 到z时进一位 如az ...