Home

java/c++变量作用域的一点小区别

偶然遇到一个问题,java里面这么写是有问题的 int x = 1; { int x = 2; } 作为一个写了多年C++的人,不能忍啊。java子域里的变量看样子不会覆盖父域。但是这样是没问题的,可见子域的生命周期还是局限于子域里面。 { int x = 2; } int x = 1; C++里面这样是没问题的 int x = 1 ; { int x = 2; } 相对于脚本语言,这种限制似乎就宽多了。这样都可以。 for i in range(1,10): pass print i

Read more

Ich war noch niemals in New York

</embed> 我从来没有去过纽约 从没有到过夏威夷 从未穿过牛仔衣淋着旧金山的雨 我从来没有去过纽约 我要感受那远方的空气 我想要挣脱过去释放我自己

Read more

命名空间和友元冲突

今天遇到一个问题,需要跨namespace定义友元,这种情况比较常见的是测试类需要访问源码类,gtest据说有个FRIEND_TEST宏,以前用过好像有问题。这里我们直接用友元: namespace oceanbase { namespace election { class ObElectionServer : public ObSingleServer { friend class ObElectionTester; ... } } } namespace oceanbase { namespace tests { namespace election { c...

Read more

两阶段提交协议的异常处理

两阶段提交的协议大家都比较熟悉了,解释一下每个阶段的异常处理。首先,我们需要持久化协议过程中的状态,这样如果server宕机,那么恢复的时候还能通过日志知道宕机前处于那个阶段。同时,所有对数据的修改都会先写write ahead log,保证宕机重启的之后数据也不会丢失。写日志的顺序假定为:写write ahead log-修改缓冲区-写commit/abort log。 在这个前提下,我们根据如下的时序图来讨论异常情况和处理方法。 过程a没有成功,即协调者没有收到部分参与者的回应。超时后,协调者发送abort消息给参与者取消事务。参与者存在两种情况: - 过程1失败,网络问题导致参与者没有收到vote request消息或者此时参与者宕机。参与者重启恢复后无需...

Read more

undo 日志和redo 日志

具体的可以看这里,解释几个作者没解释清楚的问题: 只用REDO日志为什么数据修改要每次修改刷盘 如果不刷盘,不会导致数据不一致,但是数据修改过程相当于写redo日志-修改内存-写commit日志(修改内存的顺序也无所谓了),这个过程结束已经应答用户了,但是修改没有刷下去断电恢复的话也无法通过redolog恢复到当前状态,所以会丢失修改。 修改数据和写redo/undo log/commit log之间的关系是什么 任何对磁盘的数据修改落实之前都需要先写log,无论是redo还是undo。undo保证了一旦数据写了一半(脏数据)能够回滚,redo保证了写了日志的事务能够回放出来。 只使用undo的时候commit日志要等...

Read more

发两张静物

发两张静物,镜头宾得 SMC FA 50mm F1.4 转一张网上的图,我觉得拍的极好(当然模特漂亮是主要的):

Read more