Git 的结构、工作原理、基本指令:
一个git仓库有以下三部分结构:
本地的CMDB(存储所有版本的数据);工作目录;暂存区(隔离工作目录和git仓库)
文件的三种形态:modified(已修改);Staged(已暂存);committed(已提交)。
Object Graph:版本之间的演化关系图,一条边A->B表征了“在版本 B 的基础上作出变化,形成了版本A”。
git init :创建仓库
git status:显示状态
git add *.*:加入缓冲区
git commit -m “xxxx”:提交
git log:日志
git remote add origin xxxxxxxx:创建一个叫origin的东西与xxx连接
git push origin master:master
git clone xxxx:克隆xxx下的仓库
每一个commit指向一个父亲。
多个commit指向同一个父亲:分支
一个commit指向两个父亲:合并
HEAD永远指向当前提交文件。
Git采用树形结构存储文件。
Git和传统的VCS有什么不同:Git存储发生变化的文件(而非代码行),不变化的文件不重复存储;传统VCS存储 版本之间的变化(代码行):
Git中的生成与合并分支:
主动合并的合并,被动合并的不改变。
基本数据类型、对象数据类型:
数据类型:一群值并且伴随一组操作。
变量:特定数据类型定义,可存储满足类型约束的值。
java基本数据类型:int,long,boolean,double,char
对象数据类型:String, BigInteger。
静态/动态类型检查:
Java是静态类型语言,因此会在编译阶段进行类型检查。
Python是动态类型语言,因此会在运行阶段进行类型检查。
静态检查:在运行之前bug就被自动发现了。
动态检查:执行时bug被自动发现了。
注意静态检查和动态检查针对bug,并不是说针对类型检查。
静态检查:语法错误;类名/函数名错误;参数数目错误;参数类型错误;返回值类型错误。
动态检查:非法的参数值(/0);非法的返回值;越界;空指针。
静态检查:关于“类型”的检查,不考虑值
动态检查:关于“值”的检查
Mutable/Immutable:
改变一个变量:将该变量指向另一个值的存储空间。
改变一个变量的值:将该变量当前指向的值的存储空间中写入一个新的值。
不变数据类型:一旦被创建,其值不能改变
Final类型:第一次赋值之后就不能改变
final类无法派生出子类
Final变量无法改变值/引用
Final方法无法被子类重写
不变对象:一旦被创建,始终指向同一个值/引用
可变对象:拥有方法可以修改自己的值/引用
可变的引用就是不加final的,不可变的引用就是加final的。
??String str1 = “ABCD”;
String str2 = new String(“ABCD”);
Snapshot 怎么画
不可变类型:产生大量的临时拷贝(垃圾回收)
可变类型:最少化拷贝提高效率;可以获得更好的性能;诗和在多个模块之间共享数据。
可变类型安全性措施:
防御式拷贝,但是大部分时候拷贝不会被客户端修改,造成内存浪费。
安全使用可变类型:局部变量(不涉及共享)。
Snapshot diagram:
Running time :描述程序运行时的内部状态(堆和栈)。
基本类型的值:
对象类型的值:
不可变对象:双线椭圆
可变对象:直接改变里面的值
不可改变的引用:用双线箭头
引用式不可改变的,但是指向的值是可以改变的(final StringBuilder sb)
可变的引用也可以指向不可变值(String s)
An example:
注意:使用迭代器的时候需要:
如果采取上一种写法,会使得index++同时元素减少而出错。因此需要remove迭代器,这样迭代器会自动调整。
Collections是List,Set和Map的父类。
这样声明的是无法被改变的类型。