Random Posts
Tags
Categories
Recent Comments
- yilufeiyang on 游戏服务端架构发展史(下)
- 小肥 on GDB 从裸奔到穿戴整齐
- flandre on 异步事件模型的 Self-pipe trick
- inv on 异步事件模型的 Self-pipe trick
- skywind on 异步事件模型的 Self-pipe trick
Links
Meta
Monthly Archives: December 2017
程序员总会遇到一个瓶颈期,该怎么解决?
是不是程序员总会遇到一个瓶颈期,觉得自己没有进步了,该怎么解决? 这问题不光你碰到,很多知名大公司早就面对过了,看看华为怎么解决的, 人家是站在企业文化的高度上来解决,不管内训还是办公室的墙上都有句反复提及的格言,叫做: 简单的事情重复做,你就是专家。 重复的事情用心做,你就是赢家。 整个公司/部门层面上,把这种观念贯(hu)彻(you)下去,你的问题将迎刃而解。 为啥呢?公司目标和个人目标的差异性问题,公司不是学校,最大的目标是挣钱,这是对所有人负责的大目标。再此基础上,最好的时候,两者是重合的,但不是一直都能重合,更不能 100%的重合,二者本质上是矛盾的。主管当然需要协调让两个目标重叠部分增多,然而根本上来讲,你不可能彻底解决这个问题。 二者重叠度下降难以统一时,员工会选择离职,或者能动性下降。公司目标不能随意改变,作为主管能做只有鼓励员工自学加深岗位相关知识的理解,帮员工调岗,更换工作内容让他从事更重要或者新的工作;然而缺乏锻炼机会的自学是有限的,调岗换工作内容并非容易操作之事,所以对于这些大公司而言,最有效的就是通过文化和思想工作改(xi)变(nao)员工的认识。 所以,主管碰到这类问题再原地死磕通常是没辙的,平时看看励志书也不是绝对没用的。 什么工匠精神,什么拥抱变化,什么专注之类的流行词汇,平时也要及时掌握,深入理解 出门请右转,仔细阅读:成功法则(一):简单的事情重复做、重复的事情用心做 还有该说法的姐妹篇《机会总是留给有准备的人》,搭配始用效果最佳,后者我再一篇文章里展开过: 做主程序员是怎样的体验? 只能帮你到这里了。
基础优化-最不坏的哈希表
哈希表性能优化的方法有很多,比如: 使用双 hash 检索冲突 使用开放+封闭混合寻址法组织哈希表 使用跳表快速定位冲突 使用 LRU 缓存最近访问过的键值,不管表内数据多大,短时内访问的总是那么几个 使用更好的分配器来管理 key_value_pair 这个节点对象 上面只要随便选两条你都能得到一个比 unordered_map 快不少的哈希表,类似的方法还有很多,比如使用除以质数来归一化哈希值(x86下性能最好,整数除法非常快,但非x86就不行了,arm还没有整数除法指令,要靠软件模拟,代价很大)。 哈希表最大的问题就是过分依赖哈希函数得到一个正态分布的哈希值,特别是开放寻址法(内存更小,速度更快,但是更怕哈希冲突),一旦冲突多了,或者 load factor 上去了,性能就急剧下降。 Python 的哈希表就是开放寻址的,速度是快了,但是面对哈希碰撞攻击时,挂的也是最惨的,早先爆出的哈希碰撞漏洞,攻击者可以通过哈希碰撞来计算成千上万的键值,导致 Python / Php / Java / V8 等一大批语言写成的服务完全瘫痪。 后续 Python 推出了修正版本,解决方案是增加一个哈希种子,用随机数来初始化它,这都不彻底,开放寻址法对hash函数的好坏仍然高度敏感,碰到特殊的数据,性能下降很厉害。 经过最近几年的各种事件,让人们不得不把目光从“如何实现个更快的哈希表”转移到 “如何实现一个最不坏的哈希表”来,以这个新思路重新思考 hash 表的设计。 哈希表定位主要靠下面一个操作: index_pos = hash(key) … Continue reading
AVL/RBTREE 实际比较
网上对 AVL被批的很惨,认为性能不如 rbtree,这里给 AVL 树平反昭雪。最近优化了一下我之前的 AVL 树,总体跑的和 linux 的 rbtree 一样快了: 他们都比 std::map 快很多(即便使用动态内存分配,为每个新插入节点临时分配个新内存)。 项目代码在:skywind3000/avlmini 其他 AVL/RBTREE 评测也有类似的结论,见:STL AVL Map 谣言1:RBTREE的平均统计性能比 AVL 好 统计下来一千万个节点插入 AVL 共旋转 7053316 次(先左后右算两次),RBTREE共旋转 5887217 次,RBTREE看起来少是吧?应该很快?但是别忘了 RBTREE 再平衡的操作除了旋转外还有再着色,每次再平衡噼里啪啦的改一片颜色,父亲节点,叔叔,祖父,兄弟节点都要访问一圈,这些都是代价,再者平均树高比 AVL 高也成为各项操作的成本。 谣言2:RBTREE 一般情况只比 AVL 高一两层,这个代价忽略不计 纯粹谣言,随便随机一下,一百万个节点的 RBTREE … Continue reading