广深不一样


广州和深圳,在一些人眼中甚至“傻傻分不清楚”的两个城市(深圳是广州的省会吧?),却有着非常不一样的性格和特质。

去年,深圳市的GDP第一次超过广州,坐实了中国第三城的位子。对此,广州人大多数还是在自嘲,哎呀,又要被踢出一线城市了。而许多深圳人则是带着自豪地替老大哥惋惜,广州,究竟是没落了啊。

这足以看出广州和深圳的不同。广州作为千百年来的广府政治文化中心,文化上的自信更足一些;而深圳作为后起之秀,经济上的自信更强。

使用双buffer无锁化



使用锁


面对多线程读写同一块内存的情况,书接上文读写锁的性能一定更好吗,假设我们已经选定了一种锁,那么最直接想到的做法是一般这样的:

1
2
3
4
5
6
7
8
9
10
11
// write thread
{
LockGuard guard(lock);
obj.load(); // load会对obj的属性进行重写
}

// read thread
{
LockGuard guard(lock);
useObj(obj); // useObj会读取obj的属性
}

但是这样的话,会把obj的读写全部放在锁中,临界区太大,对并发性有较大影响。

protobuf中set_allocated_xxx排雷


上周帮同事排了一个protobuf中set_allocated_xxx的雷。

L同事写的gtest单元测试总是报段错误,而且是在最后一个EXPECT_TRUE之后。由于测试的这段代码逻辑比较简单,就是把若干变量设置到protobuf格式的message中,然后再从message中取出来验证一遍。所以一开始,我们怀疑是gtest的使用姿势不对。

开工大吉

鹅厂的传统是大年初八开工,开工这天高管们会在办公室门口派发开工利是,所以每年大年初八,大厦楼下都会排起长长的队伍,据说有些人凌晨就开始排队!

跳出思维定势


前几天和几位同事一起探讨一道面试题:如何找出一个环形链表中“环”的起点。这里只考虑简单的”p”字型环形链表。

对于环形链表的问题,一般很快都能想到使用两个快慢指针来判断是否有环。但是对于如何找到”环“的起点,就需要另辟蹊径。在讨论的过程中,我发现,越是工作年限长的程序员,就越倾向于寻找”数值“解法,即类似设计快慢指针这种方式,通过程序运行寻找答案;而工作年限短,或者刚脱离学校没多久的同事,则更容易换到”解析解“的方式,用几个简单的等式变换,就能用一种优雅的方式,找到环的起点。

读写锁的性能一定更好吗


最近在写代码的时候,处理多线程间数据同步时,用到了读写锁rwlock。在多线程同步中,更常用到的是互斥量mutex,那rwlock和mutex有什么不同和优劣呢?

首先,一个常见的误区是,认为在读多写少的情况下,rwlock的性能一定要比mutex高。实际上,rwlock由于区分读锁和写锁,每次加锁时都要做额外的逻辑处理(如区分读锁和写锁、避免写锁“饥饿”等等),单纯从性能上来讲是要低于更为简单的mutex的;但是,rwlock由于读锁可重入,所以实际上是提升了并行性,在读多写少的情况下可以降低时延。

狗年快乐


又到年终了。虽然对于现在的年轻人来说,农历新年的味道越来越淡,但是几千年农耕时代影响下的定势思维,还是让人觉得,春节,而不是元旦,才是新旧年的分界点。

面向数据编程


最近一阵在做一个自动化的工具,把一些机械化的重复工作,用配置数据的形式固化下来,自动进行,配置数据尽可能简单明了,最好能让产品经理也可以操作,这样就可以大大解放生产力。

由此,我不由得感叹,数据真是程序员和非程序员之间交流通信的良好媒介——看不懂代码?数据总能看懂吧?

scala中的传名调用


scala函数调用的参数传递有两种方式:

  • 一种是传值调用,这种方式和C语言的函数参数传递方式类似,在函数调用的时刻,计算各个参数的值,然后传递进入函数内部,scala中写作function(x: Int);
  • 一种是传名调用,这种调用方式在函数调用时并不直接计算参数的具体值,而是在函数中使用到该参数时,才进行计算,scala中写作function(x: =>Int)。这里有意思的地方在于,在scala中, Int => Int表示一个函数类型,接受Int参数,返回Int返回值。那这里x的类型,就类似于一个函数,它没有参数,但是返回一个Int类型的返回值。

2017下半年书单


非技术类

  • 聪明的投资者 本杰明·格雷厄姆
    • 我从大四开始接触开放式基金,到目前为止虽然没有一夜暴富,但是收益率也保持在略超各种宝宝一点点。2017年各类白马股价值回归,“价值投资”理论又被各路媒体、自媒体大肆吹捧了一番。其实,格雷厄姆教导的价值投资,并不承诺多么高的收益率。它是一套方法论,这套方法论在多长的时间尺度内有效,在什么样的市场中有效,我现在也不知道,尤其是对于我们身边这么妖娆的A股。不过,作为一个现代人,还是应该了解了解投资理财的知识,不论是房产还是股票期权甚至比特币,总之,别轻易让自己的资产被印钞机给作践掉。