1月学习问题整理

1、BDD和TDD的区别

BDD是Behavior Driven Development行为驱动开发,

TDD是Test Driven Development测试驱动开发

二者都是敏捷开发中的核心技术和实践,其中TDD是以测试为导向,以抓住开发中的bug为目的,而BDD则是以贴近项目需求为导向,引导和关注行为规范。TDD的核心价值是“测试驱动整个系统的开发和进行”,BDD的核心价值则是“正确的对系统行为进行设计”。

TDD通常使用代码层级的测试工具,使用者多为开发人员和测试人员,而BDD通常使用“很有辨识力的行为测试用例格式”,项目中的各路人员包括非技术岗的都可以参与spec的编写,信奉的哲学是“Specification,not Verification”。

2、Go的反射机制

Go的反射是基于接口interface变量的,类型是concrete type,而非像int这样的static type。反射可以将“接口类型变量”和“反射类型对象”互相转换,可以修改反射类型对象的value,但是其值必须是addressable的,可以通过反射类型对象动态的调用方法。

3、leveldb的compaction过程的意义

leveldb中直接像log和memtable中写入KV记录,但是要删除一条记录的时候,不会直接在memtable中去删除它,而是再做一条删除的“记录”,写入memtable中,等稍后的memtable做compaction变成immutable memtable的时候再执行该删除操作。另,leveldb中每做一次更改操作,version都回变动一次,即leveldb的MVCC机制。

4、为什么level0的不同SSTable文件会有重叠的key?

因为memtable和immutable memtable是可能有相同的key,而从im到level0进行的minor compaction并没有删除多余的key,所以一开始堆叠的level0不同文件是会有重叠key的,在之后的major compaction中会消除这点。

posted @ 2019-02-01 10:49  Miller_S  阅读(142)  评论(0编辑  收藏  举报