行走自由的扫地机器人
|
在基于git的工作流中,master一般是做持续集成的,开发人员在特性分支开发,经过测试后,就会merge到master做集成测试,测试通过就表示master可部署了。 可现实情况下,特性分支自测没问题,不代表就真的没问题,测试人员还没测试呢,所以此时的master分支其实是没准备好的(从master特定commit id到生成分支其实是有一定难度的) 我们目前的做法,在master分支之前还有一个SIT系统集成分支,也就是说这个分支是专门给QA人员测试的,测试没问题后,将特性分支的代码合并到pre分支,仿真环境如果没问题,再将特性分支合并到master分支,然后进行发布。 SIT分支相当于做集成测试了,保证了master的代码是相对可靠的。 那什么代码合并到SIT分支呢?不管几个项目,也不管这些项目具体的上线时间,特性分支都可以合并到SIT分支,然后统一给QA人员测试(相当于提前测试多个项目了),正因为这样,上线的时候无法从SIT分支merge到master分支。 这种工作流多了一个步骤,必然会有副作用,首先merge到SIT分支的时候,如果有冲突,SIT分支不应该解决冲突,因为SIT分支只是为了测试,不会上线的,所以不应该解决冲突;其次很多人说为了避免有冲突,那么我就经常性的将SIT分支上的代码merge(也就是pull)到特性分支,这也非常不好,因为这个特性分支就不隔离了。所以正确的做法,如果merge到SIT分支产生冲突,应该自己去解决冲突,可如何找到和那个分支冲突呢?
还有SIT分支和master分支因为时间点和作用不一样,没有必要保持代码是同步,可pre分支和master分支理论上应该保持同步,上线的时候没有选择merge SIT分支到master分支的原因是cherry-pick还是有一定复杂度的,merge特定commit id也是有复杂度的,所以我们选择从特性分支合并到master,那必然要思考一个问题,pre分支测试通过代表master分支测试通过吗?如果pre到master是一个fast forward,理论上不用再重复测试。 什么是内部类? 我们将一个类A定义在另外一个类B中,那么这个类A就叫内部类。 为什么需要内部类呢? 有三点原因: 内部类方法可以访问该类定义的所在的作用域中的数据,包括私有的数据。 内部类可以对同一个包中的其他类隐藏起来。 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较方便。 内部类有什么特性? 内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立。 在单个外围类中,可以让多个内部类以不同的方式实现同一个接口,或者继承同一个类。 创建内部类对象的时刻并不依赖于外围类对象的创建。 内部类并没有令人迷惑的“is-a”关系,他就是一个独立的实体。 内部类提供了更好的封装,除了该外围类,其他类都不能访问。 来自《Think in java》 内部类有哪些种类? 成员内部类:和成员变量一个级别 局部内部类:在方法里的内部类 匿名内部类:基本上属于接口的实现类,一次性使用的场景。 静态内部类:static修饰的成员内部类 如何使用内部类? 创建静态内部类对象的一般形式为: 外部类类名.内部类类名 xxx = new 外部类类名.内部类类名() 创建成员内部类对象的一般形式为: 外部类类名.内部类类名 xxx = 外部类对象名.new 内部类类名() 上面就是做一个简单的回答,如果面试还可能会继续问,那就得继续往下看。 这是一个黄金分割点,以上这部分是初级面试题。
面试回答: (编辑:怀化站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
