成长日记--记录在WB的第一个项目。
具体为什么跑去外包,只能说自己太水了,或者太懒了,都不好好投简历,也没入这个坑过,如果有想去外包的,除非钱给到市场价的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的第一个项目。的更多相关文章
- 菜鸟成长日记之新手备忘录-IOS开发第一个项目总结
2013年5月3号,开始找IOS开发工作(自学了大半年,做了一个功能不全的Demo,该出去见见世面了!),5月4号面试了第一家公司(是家刚成立一段时间的外包公司),5月5号第一家公司已二轮电话面试,5 ...
- DevOps 工程师成长日记系列二:配置
原文地址:https://medium.com/@devfire/how-to-become-a-devops-engineer-in-six-months-or-less-part-2-config ...
- scrapy爬虫成长日记之将抓取内容写入mysql数据库
前面小试了一下scrapy抓取博客园的博客(您可在此查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据),但是前面抓取的数据时保存为json格式的文本文件中的.这很显然不满足我 ...
- C++添加简单的日记记录
#include<fstream>#include<iostream> using namespace std;//这是一种日记记录 b 种void LOG(char *tx, ...
- DevOps 工程师成长日记系列一:必备知识与技能组合
原文地址:https://medium.com/@devfire/how-to-become-a-devops-engineer-in-six-months-or-less-366097df7737 ...
- 第一个项目:Python pygame——外星人大战(心得)
2018年12月,作为一个大学专业是物联网工程,毕业后在一家石油行业国企干了近三年,但内心依然有着一颗技术之心的我,通过一次偶然的机会(也许并不偶然),接触到了python.当时抱着玩一玩的心态开始通 ...
- .Net Core ORM选择之路,哪个才适合你 通用查询类封装之Mongodb篇 Snowflake(雪花算法)的JavaScript实现 【开发记录】如何在B/S项目中使用中国天气的实时天气功能 【开发记录】微信小游戏开发入门——俄罗斯方块
.Net Core ORM选择之路,哪个才适合你 因为老板的一句话公司项目需要迁移到.Net Core ,但是以前同事用的ORM不支持.Net Core 开发过程也遇到了各种坑,插入条数多了也特别 ...
- VB的第一个项目
前言-----本人也是刚刚接触VB,企业的VB代码基本能看的懂,但是自己开发,只能呵呵.一般在刚学习一门新的语言时,很容易发生一些自己相当然的认识错误,so,记下并分享开发学习的过程,望指正.--- ...
- 【02】Jenkins:第一个项目
写在前面的话 通过上一节我们成功的搭建起来 Jenkins,那么接下来就是体验如何构建我们的第一个项目了.当然在这之前我们得专门针对 Java 环境就行简单的配置. 全局工具配置 其实这次配置的主要还 ...
随机推荐
- DOS下格式化移动硬盘
有的时候移动硬盘出现问题,在Win下没法操作,只能到dos下格式化.以下是用Win自带的diskpart完成格式化. 1 win + r -> cmd 进入dos 2 diskpart ...
- luogu P2000 拯救世界 生成函数_麦克劳林展开_python
模板题. 将所有的多项式按等比数列求和公式将生成函数压缩,相乘后麦克劳林展开即可. Code: n=int(input()) print((n+1)*(n+2)*(n+3)*(n+4)//24)
- 字符串时间转Date格式
/** * 字符串时间格式转 Date 格式 * @param strDate * @return */ public static Date getDateTimeByStringTime(Stri ...
- 注解实战BeforeMethed和afterMethed
package com.course.testng;import org.testng.annotations.AfterMethod;import org.testng.annotations.Be ...
- FZU 1692 Key problem( 循环矩阵优化 + 矩阵快速幂)
链接:传送门 题意: n个小朋友围成一个环( 2 <= n <= 100 )然后进行m次的游戏. 一开始,第 i 个小朋友有 Ai 个苹果. 定义游戏的规则为:每一次游戏处于 i 位置的小 ...
- vivo输入法 需求分析
我使用的输入法:vivo输入法 1,用户界面:界面为白色和灰色,整体简洁大方,个人而言外观挺不错.但是不能自定义界面,更改背景图片或是主题. 2,记住用户选择:可记忆上次使用后的键盘方式(26键或是9 ...
- 【BZOJ 1266】 [AHOI2006]上学路线route
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 第一问是个最短路. 第二问. 利用第一问floyd算出来的任意两点之间的最短路. 那么枚举每一条边(x,y) 如果w[1][x]+c ...
- [Oracle] Merge语句
Merge的语法例如以下: MERGE [hint] INTO [schema .] table [t_alias] USING [schema .] { table | view | subquer ...
- [Javascript] Delegate JavaScript (ES6) generator iteration control
We can execute generators from generators, and delegate the iteration control with the yield* keywor ...
- POJ 2041 Unreliable Message
简单模拟.依照题意处理一下字符串就可以. 应该是写题号写错了,本来我在VirtualJudge是加入的POJ 并查集与生成树的题. #include<cstdio> #include< ...