Home

总结Oceanbase编码中需要注意的一些细节

所有指针使用之前都需要判断是否为NULL,尤其是如果有IF分支的情况下,如: if (it != NULL) { xxx } else { it不能再使用了 } 不要使用strcpy而应该使用strncpy。 所有成员函数都应该考虑是否为const函数. 所有函数都需要判断传入值是否有效。 有返回值的函数,需要先定义返回值的默认值,不能直接返回中间结果。比如: //这样是很容易造成问题的 int * xxx(xxx) { int* it = NULL; for(int * it =xxx;it != xxx; it ++...

Read more

用树莓派和DS18B20监控温度变化

基本的教程在这里: 引脚定义 传感器教程1 传感器教程2 鉴于我的硬件水平只限于插板子焊板子和对针脚,其他的都还给数电模电老师了,我还是老老实实买了模块,省的自己焊电阻。 芯片,模块都是淘宝买的,随便搜一家就行,几块钱的东西一般不会有假的。 整个过程可以按照教程1,2 对应针脚完成,如果顺利基本一次成功。别人的知识产权我就不好摘录了。但是代码我优化了一下,硬件工程师的代码果然是写的异常粗犷。修改后的代码如下: #!/usr/bin/python #coding=utf-8 #Filename:temperature.py import os,datetime,time def calc_temperature(filename): ...

Read more

OB的Offset和Limit

数据库的实现里面很重要的两个功能就是Limit和Offset,在web里面,这是分页的基本功能依赖。对于用户来说,一屏不可能显示全部的数据,所以数据请求可以拆散成多个,每次从上次的offset开始读取下一个limit的数据。有些情况下, 我们不需要知道一共有多少数据,只需要循环获取并统计期望的数据和得到的数据,直到两个不匹配。在实际web使用中,这种策略一般不使用,因为预先知道分页数。当然我也真见过这么用的,这nm简直就是无底洞。不知道点到什么时候是个头。 相应的,正常的策略我们是需要知道数据有多少页的。也就有如下几种策略: 最烂的实现当然是直接刷出所有数据分页显示其他隐藏。其实数据量如果确实很小的情况下,这样也合理。提高响应速度。 发一条count()先统计所有数据,然...

Read more

用来把一个线程的日志输出到单独文件的脚本

很多开源项目的日志都是把多个线程的日志打印到一个文件的,有时候我们需要查看一个线程号下的所有日志,vim选中高亮线程号固然是一种方法,但是看起来不直观,以下脚本完成输出一个线程所有日志到一个文件的功能。 "plugin-写一个线程的log到单独文件 function! ThreadLog() let file = readfile(expand("%:p")) let pattern = expand('<cword>') let matches = [] for line in file let match = matchstr(line, pattern) if(!empty(match)) ...

Read more

转载王垠的一段话

王垠虽然挺扯,这段话还是有道理的: 我对清华,还有 Princeton,Harvard,MIT,Stanford,Berkeley,CMU 等学校的学生都有了解。这些所谓的“世界一流大学”或者“世界一流大学 wannabee”差不多都是类似的气氛。你冲着它们的名气和“关系网”挤破了头皮进去,然后就每天有人在你耳边对其它人感叹:哇,他好牛啊!发了好多 paper,还得了XX奖。跟参加传销大会似的,让你怀疑这些人还有没有自尊。然后就是填鸭式的教育,无止境的作业和考试,让你感觉他们不是在“教育”你,而是在“筛选”你。这种筛选总是筛掉最差的,但也筛掉最好的。因为最好的学生能意识到你在干什么,他们不给你筛选他们的机会。一旦发现其实没学到东西,中途就辍学出去创业了。所以剩下来的就是最一般的,循规...

Read more

Thinking In Java读书笔记

静态成员只有被引用(首次生成所在类的对象或者被首次访问,即使从为生成过那个类的对象)的时候才会初始化。 一般情况下Java成员变量初始化顺序是,静态成员/静态快->直接初始化的类成员->构造函数 一个简单的例子如下: Cup.java public class Cup { public Cup(int i) { System.out.println("constructor" + i); } } TestJava.java public class TestJava { public Cup cup; public Cup cup3 = new Cup(3); public static Cup cup1 = new Cup(1); ...

Read more

Effective C++ 读书笔记

Effective前面有几节是说构造析构赋值过程中基类和派生类的调用关系的,做了一个综合一点的例子,来验证一下这个问题。代码如下,话说贴代码是在是很没溜的做法,尤其是如果在出版的书中看到的话,这种行为基本属于骗稿费的… object.h #ifndef OCEANBASE_OBJECT_H_ #define OCEANBASE_OBJECT_H_ #include "base_object.h" class Object: public BaseObject { public: Object (); Object (int magic); Object (const Object & obj); virtual ~Object ()...

Read more

分布式调试系列之行为模拟

最近调试分布式系统,感觉实际上什么看日志的方式都不如带集群调试,当然有些行为是比较难以模拟的,可能的情况下,要么重现环境,要么对部分模块做mock。单测带来的便利性是远超过不做mock省下的时间的,比如与sql相关的逻辑完全可以启动一个完整的sql环境,然后把请求发过去,看回来的响应。至于其他的部分,基本的原则是减少变量。比如两个server之间的通信,同时检测两个server只能看日志,所以最好能mock一个server的行为,这样减少调试的不确定性。

Read more