这篇主要总结这一年半从事游戏服务器开发的一些感想吧,虽然正式入职工作时间只有15个月多点,算上996的加班时间,差不多有一年半了。
上一份工作职位是Linux C/C++开发工程师,也是第一份工作,是从事大数据相关的开发,中途使用了半年的Java,也接触了一些开源组件如Redis,Hadoop,HBase等。当时零基础,带着很强的好奇心去学习,使用,看别人分析HBase源码的博客,因为当时数据量比较大,数据需要入HBase,怎么能快速的导入,查询等,关于HBase一些工作原理还是挺有意思的,看源码能知道,然后在数据上作分词,聚类,推荐等,可以做一些很有意思的事情,价值在这些数据之上。这些技术自己接触不到,当然是买的别人的技术,后来在网上查了下这些,感觉和搜索引擎有一定的联系,比如分词:怎么分,时间和空间复杂度如何,怎么做推荐,是基于用户或内容的还是?怎么把有相似特征的事物归类到一块等等...又是很深入的领域。后来因为个人原因辞职了,很多东西差不多也忘了。
现在的职位也是Linux C/C++后台开发,关于C/C++,用到的高级知识点并没有,比如Boost呀,C++11呀等。因为也是写业务逻辑的,并没有多少难度,在代码中还是要做到可读性,可维护性最好,多注意性能方面的点。怎么说呢,在看其他模块代码时,好几次看到这样的:vector<***> vecObj = iter->second,由于不改变iter->second,拷贝了,涉及内存分配,对象拷贝构造多次,析构,释放内存等,没有使用引用,类似的代码处真的很多,自己也在他旁边以注释的方式写了vector<***> & vecObj = iter->second。还有使用vector删除元素的不正确写法,后来让对方改过来了。还有效率问题,比如set<CObj> setObj,我需要修改某个对象的某个字段,由于set的const特性,不能直接修改,就直接查找find,删除erase,再setObj.insert(NewObj)了,这样insert是O(logn),Effective STL上有较高效率的方法是iter = setObj.find(key),CObj NewObj(*iter)//modify NewObj,setObj.erase(iter++),setObj.insert(iter, NewObj),插入就是常数时间了等。有时觉得让同事修改某些有可能会触发问题的代码或者有很简单的方法时,还是提醒一下比较好,算工作中的一种态度吧。还是要多读书,多学习,多思考。
把手头的工作完成了,文档补好,再过一段时间差不多要走了,也经常在网上看到评论说经常跳槽不好,但是自己想好了并没有不妥,想做些更有挑战性的工作,但是年轻人嘛,多做些新的尝试,才不显得单调。期望下份工作与搜索引擎或存储开发,互联网金融相关的,其次游戏。
本来计划写个网络组件的,思路是有的,但是每天九点多下班,到家十点了,洗洗看会书就十二点多了,实在没有集中的时间去写。周末需要花半天出去放松。接下来写点代码优化,网络编程相关的知识,算是总结。
不足方面,需要加强学习数据库方面的知识。