软件构造知识点复习2
1. 软件配置管理:追踪和控制软件的变化
包含代码,数据,文档,程序等等。
2. 有一个版本库,所有版本存在版本库中,随时拿出使用,软件库中的版本都是稳定的
3. 版本号,从前到后,变化逐渐变小x.x.x.x
4. 版本控制工具
·回退
·比较版本差异
·备份版本
·在多个开发者之间共享和协作
·便于审计
·合并
最大优点:可以创建分支,分支相互独立
5. 涉及概念
·仓库:SCM中的CMDB(配置管理控制库)
·工作拷贝:在开发者本地机器上的一份项目拷贝
·文件:一个独立配置项
·版本:在某个特定时间点所有文件的共同状态
·HEAD:程序员正在其上工作的版本
6. 版本控制工具分类(VCS)
- 本地式的版本控制工具
版本库在本地端,更新也在本机,当前开发者使用。 - 集中式的版本控制工具
有一个服务器,存储所有版本。 - 分布式的版本控制工具
版本存在不同机器上
服务器出问题还可以从其他机器恢复。
如何保持版本一致性:在commit时判断是否有其他人更改,如果有,先fetch才能再更改提交。
7.Git(分布式)
<1>分为
·服务器(远程版本库)
·本地端的仓库(远程版本库的一个拷贝)
·工作区(程序从版本库中拷贝出进行更改的地方)
·暂存区(已更改为提交的文件)(非真实存在,机器上不存在这个文件夹)
利用标识符,一位为0代表不位于,1位于
<2>Git以对象形式存放不同版本。通过指针实现版本回溯。
Git的commit对象有两种方式产生
·commit命令创建新版本 只有一个父节点
·分支的合并 有两个父节点
<3>commit对象中包含的内容
·文件根节点的记录
·文件的作者
·提交者
·父节点
<4> 与之前commit中未发生变化的文件在新版本终不会重复存储
8. 传统VCS和git对比
传统VCS版本中存储的是变化dert
很难创造分支,获取当前版本要从最初一点点叠加
Git中存储的是文件。
很容易获取当前版本中文件,但是较难获取变化
9.基本数据类型 和 对象数据类型区别
·只有值没有ID 既有ID,也有值
·在栈中分配内存 在堆中分配内存(两个对象值一样也要分开,存储区域不同)
·Immutable 一些mutable,一些immutable
10. 静态类型检测
关于类型的检查,赋值是不是与变量类型匹配(值在不在对应集合之内),在编译阶段就报错。
·语法错误
·类名/函数名错误
·参数数目错误
·参数类型错误
·返回值类型错误
10. 动态类型检测
在程序运行阶段检测,针对某一个值是否出错(eg除数为0)
·非法参数值
·非法返回值
·越界
·空指针
11. 动态类型检测强于静态。
12. 改变一个变量,该变量指向另一个存储空间
·改变变量的值,在当前存储空间写入新值
13. immutable不变数据类型
一旦被创建,其值不能被改变。
如果要改变这个变量的值,就要新建存储空间,新的内容写到新的存储空间,再将变量指向新的存储空间。
Eg.String
14. 如果要创建immutable类
类中不包括改变任何属性的方法
属性不能为public
不能直接return属性
15. immutable更安全(多个引用时mutable一个改变都会被改变),但多次修改会产生大量临时拷贝,需要垃圾回收,而mutable可以减少拷贝提高效率,且多个模块共享数据。
16. 防御式拷贝
return new xxx()
问题:浪费内存
17. snapshot diagram
·基本类型的值:箭头加值
·对象类型的值:箭头加圈
对象的属性和对象一起放在堆里
18.对一个对象的引用存在栈中,不会存基本数据类型的引用名
·immutable对象:双线椭圆
·mutable对象:单线椭圆
19.不可改变的引用用双线箭头(Final限制引用不可改变,引用不可变,但值可以改变)