您的位置:首页 > 其它

离职前的工作经验总结

2016-07-29 15:26 225 查看
            转眼间, 毕业到现在也8年了, 一直以来都很懒, 没有留下什么技术方面的总结或者分享什么的。因为最近要换工作, 觉得很有必要总结一下,方便自己和他人。

       由于我一直待在一家专业领域(非互联网)的软件公司,接触的知识面相对比较有限, 主要集中在算法, 性能优化, 内存管理, 多线程等, 几乎没有接触过现在比较流行的开源框架, 所有的一切也没有开源的东西可以参考, 大概是相关的领域比较狭窄的缘故, 全球也就3家公司在做这个领域, 每一家都宝贝似的把代码捂得紧紧的, 谁有舍得拿来开源那?下面就针对这几个方面, 记录下自己的一些心得:

1、算法/数据结构

      在数据库领域, 不管是关系型的, 还是NoSql, 还是各种其自定义的, 都需要 B-树, B+-树, AVL树等理解的比较清楚, 另外的LRU的实现,动态规划算法也要清楚,  其他排序啦、链表啦更加基础, 不用多说啦;

2、内存管理

     在一些性能要求比较高的领域, 都会实现自己的内存池来优化和管理内存的使用, 我们也有一套这样的内存管理,他会把内存的使用分为固定大小和变长内存, 我们都知道内存直接从系统来分配和释放效率是不高的, 为了提高性能, 基本的思路就是从内存一次分配一块比较大的内存, 然后把它分成等长的内存块, 需要的时候从未分配的内存块链表内得到, 释放的时候, 将暂时不用的内存块用一个链表串起来。

     另外, 使用自己的内存管理, 可以非常方便的统计内存的使用, 以及问题的排查;

3、 多线程

     在我们的程序, 使用pthread 来实现多线程, 当然若是C++, 也可以用C++自带的线程管理函数, 具体的实现不难, 就不多说,给一些建议: (1)尽可能把并行的部分的逻辑简化; (2)尽可能少加锁, 锁对性能的消耗还是很严重的, 尽量考虑用 lock
free编程方式;

4、 性能优化

      因为我自己一直负责一个数据库的缘故, 并且这个数据库是对性能要就非常高的, 需要几乎实时的响应前台的写入和查询要求, 所以随着工作年限的增长, 越来越多的时间都放在了性能优化上面。 通常, 我们可以通过如下的方式来优化我们的程序:

      定位bottleneck:常用的工具IBM rational quantify, callgrind, Oracle 的collect, 我只用过这几个, 应该还有其他的, 而且我一直用C/C++开发, 其他语言的测试性能工具没有研究过;

     优化代码: 这是工作量最小, 也是最容易达到目标的方式, 在数据库里面2-8理论尤其成立, 在关键的地方, 有时候一个优化, 效果是非常明显的。 尤其是你负责的代码还没有经历过非常多次的性能优化;

     架构调整:如果代码优化没有提高的空间, 就要考虑架构的调整, 这里涉及的就比较广了, 例如, 添加缓存, 添加索引, 修改算法, Load on demand(类似copy on write )等, 其实也没有什么固定的模式, 根据问题的特征, 找到相应的解决方式, 这里比较推荐多参考一些优秀的开源项目, 例如LINUX内核, 看看人家高手遇到这样的问题是如何解决的。

    并行化: 对于很多传统的项目, 最开始的实现是串行的, 随着业务逻辑的发展, 发现单线程无论怎么优化都无法满足要求的时候, 就开始考虑多线程, 这里的建议是: (1)如果有其他办法, 不要考虑把你的系统改为多线程, 尤其是你用的开发语言是C/C++这样的对并行没有支持的; (2)将并行化的部分集中在一个小的performance sensitive的部分; 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: