Yebangyu's Blog

Fond of Concurrency Programming , Distributed System and Machine Learning

再谈C++中的static const

废话不多说了,开始这次的讨论吧。

提出问题

同事颜廷帅(微博:@颜挺帅)拿了一段代码让我分析。以下代码,能编译链接通过吗?

空指针(NULL)不能用吗?

我们常常被告知,使用指针前需要判断是否为NULL;如果是NULL而你去使用它就会出问题。真相果真是这样吗?

同事颜廷帅(微博:@颜挺帅)给我看以下一个程序,问我,这段程序执行后,有问题吗?

编写高质量代码(上)

我们知道,intdouble能表示的数值的范围不同。其中,64位有符号整数的范围是[-9223372036854775808,9223372036854775807],而64位无符号整数的范围是[0,18446744073709551615]。这两个区间有一定的overlap,而double可以表示的范围更大。

现在,需要编写两个函数:给定一个double型的value,判断这个value是否是一个合法的int64_t或者uint64_t。本文说的“合法”,是指数值上落在了范围内。

bool is_valid_uint64(const Double &value);

bool is_valid_int64(const Double &value);

这里我们用Double而不是double,原因是我们的double不是基础数据类型,而是通过一定方法实现的ADT,这个ADT的成员函数有:

Linux环境多线程编程基础设施

本文介绍多线程环境下并行编程的基础设施。主要包括:

  • volatile
  • __thread
  • Memory Barrier
  • __sync_synchronize

volatile

编译器有时候为了优化性能,会将一些变量的值缓存到寄存器中,因此如果编译器发现该变量的值没有改变的话,将从寄存器里读出该值,这样可以避免内存访问。

但是这种做法有时候会有问题。如果该变量确实(以某种很难检测的方式)被修改呢?那岂不是读到错的值?是的。在多线程情况下,问题更为突出:当某个线程对一个内存单元进行修改后,其他线程如果从寄存器里读取该变量可能读到老值,未更新的值,错误的值,不新鲜的值。

Tools of the trade

本篇是对《Is parallel programming hard》第四章《Tools of the trade》的总结,不是单纯的翻译,算是读书笔记,并且略有补充。

本章介绍了并行编程的工具和途径,具体包括

  • Shell Script Languages
  • POSIX 多进程
  • POSIX 多线程
  • 原子操作

Shell Script Language

C++中逗号表达式的一个应用

假设我们的程序需要调用三个函数fgh。其中fh可能失败,可能成功,而g一定成功。fh有返回值,g没有返回值。我们可能得写这样的代码:

if (f()!=SUCCESS) {
  //abort
} else {
  g();
  if (h()!=SUCCESS) {
  }
}

由于g没有返回值,因此这么写似乎是天经地义的。能不能优雅点?

计算机应届生简历撰写指南

最近帮很多朋友review他们的简历,总结起来存在以下问题:

  • 简历太多页

请尽量不超过两页。一般地,每个hr阅读简历的时间大概在20s甚至更少,写那么多页不仅毫无必要,而且有害。 而且我怀疑一般的应届毕业生不大可能说写三页的履历。有些人说,你写不了三页是你水平不行,经历不丰富。按我说,写三四页不是履历丰富,而是根本不会写作。

  • 大量无用信息

Hardware and its habit

最近在阅读《Is parallel programming hard》这本书,本篇就是整理其中第三章《Hardware and its habit》,不是单纯的翻译,只是一个总结,略有补充。

这章介绍了影响CPU执行效率的几个因素。具体包括:

  • 流水线被打断
  • 内存访问
  • 原子操作
  • Memory Barrier
  • Cache Misses
  • IO 操作

深谈读研如何提高技术

你想进什么公司,和你读什么计算机方向,关系不是很大。只要是理工科的学生,面对技术岗位,其实机会是差不多的。

至于你想什么职位,那显然和你的专业/方向关系较大,比如说很多大数据职位,就明确表示要求你DM/ML/NLP/IR背景,但是这也只是说这些 学生可能更有优势些,事实上,数学和统计学出身的,很多搞这个非常牛逼的。

所以,不要问选什么导师,选什么方向;也不要问我的实验室很水老板很菜我还能找到好工作吗?你要问的是:我想毕业去互联 网公司,我读研的这几年是应该打酱油呢,还是打地沟油?

想找一个好的互联网技术类、研发类工作,无非就是以下4点,你任选一点,做好了,都是有利的,哪4点?

  • 语言层面
  • 算法层面
  • 项目层面
  • 专业层面