www.nginx.cnsitemap

存档

2016年5月 的存档

一致性哈希算法的实现

2016年5月29日 1 条评论

一致性哈希算法能够减少增减节点带来的memcache缓存失效带来的冲击。

下面是一个简单的java版实现算法,其中的哈希值算法没有实现,用HashFunction作为一个接口来提供自定义的hash值函数,大多数情况下我们可以使用md5。

circle代表有一个有序整型map,表示要缓存的对象所对应hash值。
创建ConsistentHash对象时会同时创建虚拟节点。每个复制节点都是实用对象名和后缀结合的hash值。
缓存对象分布在每一个map中的节点上。

分类: 架构 标签:

mac生成core文件和生成位置

2016年5月24日 1 条评论

mac环境的配置方法和linux一样。

通过ulimit来设置是否生成core文件。

ulimit -c unlimited 生成core文件

ulimit -c 0 不生成core文件

core 文件存储位置 /core/core.pid

分类: iOS/Mac 标签:

enumeration value not handled in switch

2016年5月17日 没有评论

这是一个 warnning 错误,没有处理switch中的枚举值。

在switch中添加default 和 break; 可以解决这个问题。

分类: c++ 标签:

mac下面brew的权限问题

2016年5月2日 没有评论

想写一个爬虫去爬一些图片,发现python3的request封装的比较。遂决定要装一个python3。
mac下的神器就是brew,分分种完成各种软件包的安装。执行完之后报错了。
brew install python3
结果如下,从最后几行的输出判断是由于权限不足导致的。

brew遇到问题排错步骤是:

brew linkapps python3

分类: python 标签:

mac下c++单元测试覆盖率工具gcov

2016年5月1日 没有评论

gcov 是 GNU 的代码覆盖率检查工具。它利用编译时的 -fprofile-arcs -ftest-coverage 和链接时的 -lgcov 选项参数生成 .gcno 文件进而通过这些文件统计覆盖率。不过高版本的 mac 使用 clang 编译器,不支持 -lgcov 选项生成 .gcno 文件。为了解决这个问题,我们可以使用-coverage参数来生成 .gcno 文件。例如:

我的g++ --version信息如下
Apple LLVM version 7.3.0 (clang-703.0.29)
Target: x86_64-apple-darwin15.4.0
Thread model: posix
使用-lgcov会报错
ld: library not found for -lgcov

可以使用-coverage选项替换-lgcov

在C/C++中产生代码覆盖率的步骤包括如下几步:
一、设置编译参数
如下来设置Makefile中的编译参数以使之支持覆盖率产生:
ifeq ($(coverage), yes)
CXXFLAGS += -coverage
endif
这样,可以使用 make coverage=yes 来引入这些编译选项而不会影响到正常的编译,比如:
#make coverage=yes
这时候会产生.gcno文件。

二、运行测试程序
#./exe
运行测试程序,会针对所有cpp源代码产生相应的.gcda文件。

三、获取覆盖率数据
获取覆盖率数据的方法很多种,这里介绍两种,分别产生txt和html数据:
1、使用gcov获取文本形式的覆盖率数据
使用gcc自带的覆盖率结果产生工具gcov能产生文本格式(.gcov)的覆盖率结果。
#gcov xxx.cpp
2、使用lcov获取html形式的覆盖率数据
使用IBM的lcov来产生html结果数据,具体如下:
#lcov -c -d ./ -o app.info
#genhtml app.info -o cc_result

四、展示数据
将步骤三中产生的覆盖率数据文件放到Apached的htdocs目录下,就能通过浏览器来查看覆盖率结果了。

五、基本术语
1、行覆盖率(line coverage)
即源代码有效行数与被执行的代码行的比率。
2、分支覆盖率(branch coverage)
即有判定语句的地方都会出现2个分支,整个程序经过的分支与所有分支的比率是分支覆盖率。
3、增量覆盖率(incremental coverage)
即被执行的新增和修改的代码行数与新增和修改的代码总行数的比率。

gcov实际例子,通过运行gtest中的sample1.cc单元测试。

makefile文件的写法

编译程序

编译完成后直接执行gcov命令,会报未执行,需要先执行可执行文件

执行可执行文件

使用gcov查看sample1.cc文件的覆盖率

表示:sample1.cc一共有13行(可执行代码),全部被执行,测试覆盖率100%。
具体哪些代码被测还可以看sample1.cc.gcov文件:

-表示该行不可执行,数字1或其他表示该行被执行了多少次,#####表示代码没被执行。

分类: c++ 标签: