HIT软件构造复习 题目与知识点篇

挑点不会的写写

		Integer a = 3;
		int b = 3;
		System.out.println(a == b); // true. why?

因为基本类型的==是比较值,所以此时a会变成一个int再和b比较,就是true。
关于Integer,还有一个生成的不一样。比如第一行,实际调用的是Integer.valueOf(3),这个是个静态工厂生成,它对于IntegerCache.low<=i<=IntegerCache.high时返回IntegerCache.cache中已有的元素,而对其余情况是一个新的对象。详见李耕的blog

  1. 软件三维视图
    HIT软件构造复习 题目与知识点篇_第1张图片

Git 中在本地机器上的.git 目录对应于 SCM 中的配置管理数据库 CMDB
Git 中的 SCI 是“文件”,它有三种形态:已修改(modified)、已暂存(staged)、已提交(committed)
Git 中两次相邻提交 v1 和 v2,若后者提交时间晚于前者,那么 Git 仓库中只记录 v2 中的文件相对于 v1中的文件发生变化的代码行(增加和删除的代码行)。

snapshot图中,不可变对象用双线椭圆,final引用用双线箭头,其余用单线。比如
HIT软件构造复习 题目与知识点篇_第2张图片
HIT软件构造复习 题目与知识点篇_第3张图片

前置条件:requires声明,表示对客户的要求
后置条件:effects声明,表示实现者要做的事情

如果没有说,则参数默认不能修改

一个spec比另一个强,意为前置条件更弱或等于,后置条件更强或等于。即给客户端较松的限制,给代码实现较严格的限制。

Creators(构造器):给定参数构造当前类型的对象
Producers(生产器):给定若干当前类型的旧对象生产当前类型的对象
Observers(观察器):返回一个不同于当前种类的对象
Mutators(变值器):改变对象属性,通常是void
表示独立性:client使用ADT时无需考虑其内部如何实现,ADT内部表示的变化不应影响外部spec和客户端

表示空间到抽象空间一定是满射,不一定是单射

行为等价性:调用方法展示出同样的结果
观察等价性:是否看起来一致

mutable判相等一般可以直接用equals,但还是要看需求(比如StringBuild和List的equals不一样)

如果在HashSet里放一个mutable的对象,然后改变它的值,此时就找不到他了,但TreeSet还可以,不过还是要保证能在平衡树上找到它

java的静态类性检查:
子类型可以增加方法,但不可删
子类型需要实现抽象类型中的所有未实现方法
子类型中重写的方法必须有相同或子类型的返回值
子类型中重写的方法必须使用同样类型的参数
子类型中重写的方法不能抛出额外的异常

Liskov Substitution Principle (LSP)
前置条件不能强化
后置条件不能弱化
不变量要保持
子类型方法参数:逆变 // 前置条件更弱
子类型方法的返回值:协变 // 与下面均为后置条件变强
异常类型:协变

关于List、List、List的区别:
https://segmentfault.com/a/1190000018189575

委托和继承:https://blog.csdn.net/Seriousplus/article/details/80462722
白盒框架、黑盒框架:https://blog.csdn.net/Seriousplus/article/details/80525876

面向复用的设计模式:
结构型模式:
Adapter适配器模式:客户端想面对一个接口编程,不是你预设的。所以你要提供一个接口。
Decorator装饰器模式:为对象增加不同侧面的特性。对每一个特性构造子类,通过委派机制增加到对象上
Facade外观模式:把多个方法整合到一起
行为型模式:
Strategy模式:有多种方法来实现任务,客户端根据需要来切换
Template method模板模式:做事情的步骤一样,但具体方法不同。共性的步骤在抽象类内公共实现,差异化的步骤在各个子类中实现
Iterator迭代器模式:用来遍历。hasNext,next

三种内存管理机制:
静态管理模式:在静态内存分配模式 下,无需进行内存回收:所有都是已确定的
在栈上进行内存空间回收:按block(某个方法)整体进行
在heap上进行内存空间回收,最复杂 ,接下来对这个问题进行详细的讨论。

你可能感兴趣的:(====其它===)