再谈右值引用与移动语义


之前在总结C++11新特性的时候,写过一篇文章,专门说到了右值引用、移动语义以及从中牵扯出来的引用折叠和完美转发等概念《C++11新特性之右值引用与移动》

那篇文章例子很多,仔细阅读后也可以完全理解这几个概念。但是今天我想重新组织下语言,就像面试中被问到“你怎么看待C++中的右值引用和移动语义”,进行一次小总结。当然,如果你最近也正好需要面试,下面的文字可能能帮你梳理一遍思路。

2018年上半年书单


已读

《我这一辈子》 老舍
老舍的文笔真是细腻,每座城市,每个人在他的笔下都是那么有趣,很难让人不去热爱生活。

《最好的告别》 阿图·葛文德
探讨如何面对人生的最后一段旅程。同时,也在尽力说明什么才是家的概念,护理人员、机构如何做才能营造出家的感觉。作者提出的如下四个问题,值得每个人在身强力壮时思考:

1.如果你的心脏停搏,你希望做心脏复苏吗?
2.你愿意采取如插管和机械通气这样的积极治疗吗?
3.你愿意使用抗生素吗?
4.如果不能自行进食,你愿意采取鼻饲或者静脉营养吗?虽然很丧,但是还是非常值得一读。

机器学习中的AUC是什么?


工作中经常要和香饽饽算法工程师对接。作为一名开发狗,虽然“抽特征、做模型、玄学调参、搞策略”这四部曲都不太懂,但是为了能够正常交流,同时也不至于被忽悠,那么,算法同学嘴里是不时蹦出领域名词儿还是要了解一下的啦。

今天就说说算法同学经常挂在嘴边的一个指标——AUC。

AUC ROC简介

AUC是Area Under Curve的简写,这里的Curve其实是指ROC曲线。

关于内存泄露的一场虚惊


最近有个前段时间做好的服务要放量,所以我上监控平台看了下机器的负载,结果吓了一跳。所有机器的内存使用率都呈现类似这样的曲线:

内存曲线

内存泄露了?吓尿……

Vim中的查找替换


前两天同事在群里发了个通知,大致意思是大家做文案时不要用“最”,否则会违反广告法带来罚单。

我皮了一下,回了个“%s/最/第二/g”。
微信截图

区块链/比特币科普八问


区块链可谓是AI之后的又一大风口,尤其在2017年比特币暴涨带来的造富神话之后,上到银行高管,下到一线白领,俨然都对区块链产生了极大的兴趣。我在各种场合都被问起过区块链/比特币相关的问题,然而羞愧的是,基本上三四个问题之后,我就会发现其实对于区块链,我也没比行外人知道多少内容。

所以,我最近就找时间仔细阅读了些区块链的资料,把之前被问到而答不上来的问题,总结一下,一雪前耻哼哼。

Cardinality Estimation


在之前的文章,Cardinality Counting中,我们介绍的方法,都是可以精确统计基数的。但是,在现在动辄TB、PB级数据量的情况下,无论是BTree还是bitmap,都有很多缺陷,并且精确性这一优势也被海量数据的前提所抵消(想象一下,统计uv时,100000000和100000001有区别吗)。

相反的,我们可以采用一些基于概率的方法,在误差可控的前提下,对基数做出合理的估计。

目前,最常用的基数估计方法,是HyperLogLog(HLL)。

Cardinality Counting


Cardinality Counting,基数计数,可以理解为广义上的UV统计。当你需要计算某维度下的用户个数、商品个数等各种需要去重(unique)的统计量时,就需要用到基数计数技术。

考察一个基数计数方法的优劣,主要需要考虑插入速度、计数速度、合并速度以及空间消耗四个方面。

假设如下一个应用场景:我们希望获得年龄、性别、地域、种族等多个维度叉乘下的用户数量,并且能够自由选择维度进行聚合并得到相关的用户数量。

Spark“并行”写


spark本来已经是一个分布式的计算平台,按说不应该手工去处理并行/异步的事情。但是,最近我实现的一个spark任务,需要一次写出数十个分区的数据,虽然这些分区的数据之间完全独立,但坑爹的是,基础数据平台提供的写数据接口只支持同步的一次写一个分区的数据。这样造成的结果就是,用循环来实现时,虽然我有很多个计算节点,数据(RDD)也分布于各个节点之上,但是我只能等一个分区写完成后,再写下一个分区:因为“写分区”这个任务的下发是同步阻塞的。

1
2
partitions
.map(part => writeToDisk(data.filter(part), part))