软引用 VS 弱引用
软引用 在内存不足时回收
弱引用 在垃圾回收时不管内存是否充足都回收
进程和线程的区别
- 一个程序至少一个进程,一个进程最少一个线程
- 进程间相互独立,同一个进程的各线程共享内存,某个进程内的线程在其他进程中不可见
- 操作系统中,一般把进程作为分配资源的基本单位,把线程作为独立运行和独立调度的基本单位
java 中 关键字 final 的理解
- 变量: 一旦初始化,变量值就不能修改
- 方法: 该方法不能被子类重写 ( override )
- 类: 该类不能派生子类
比如public final class String extends Object
java 中 finally 关键字
finally 常于 trt/catch 语句块配对使用,即使有异常抛出,也能确保某段代码一定能执行。
finally 常用于关闭流资源或者数据库连接等。
overload 和 override 的区别
overload 重载,是指两个方法的名称相同,但参数类型或者个数不同,即方法的签名不同。注意:方法的返回值不能作为其签名
override 重写,是指某个方法与父类的方法拥有相同的名称和函数签名。比如实现某个接口,需要进行 override 其中的抽象方法
equal() 和 hashCode() 理解
- equal() 相等,hashCode() 必定相同
原因:
java按照hashCode来访问小内存块,所以hashCode必须相等。HashMap获取一个对象是比较key的hashCode相等和equal为true。HashMap比较对象时先通过hashcode缩小范围,然后再使用equal方法比较是否相等
- 但是 hashCode() 相同,未必 equal() 相等
原因:
比如对象 A 和 对象 B 有 id 和 name,hashCode 按照name 来计算,但是 equal 按照 id来进行比较. 可能出现 name 相同,id 不同的情况. (公司员工同名同姓的情况). 这时候 hashCode 相同,equal 不同
java interface 接口 成员函数 可以是 private 吗
成员函数只有声明,没有方法体,自动都是 public 修饰的 (我们 code 时候 可以省去),成员变量默认都是静态变量 static final。
interface 和 抽象类
抽象类更相当于 is-a (是不是) 的关系 。接口是 has-a (有没有)的关系
比如抽象类 Bird 和 Plane 表示鸟、飞机,可以继承它们实现更具体的鸟(老鹰、麻雀等),更具体的飞机(直升机、战斗机)。
用 Fly 表示接口,一组抽象的飞行行为,不能设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。此时可以将 飞行 设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。
Collection和Collections的区别
java.util.Collection 和 java.util.Collections
Collection 是接口
The root interface in the collection hierarchy. A collection represents a group of objects,
Collections 里面包含了一些 处理 集合的静态方法
This class consists exclusively of static methods that operate on or return collections.
HashSet,TreeSet 和 LinkedHashSet 的区别
HashSet无序
LinkedHashSet 按照 插入顺序 排序,使用链表维护元素的次序。
- TreeSet是SortedSet接口的唯一实现类,有序,TreeSet支持两种排序方式,自然排序 或者 定制排序
Comparable Comparator 区别
java.lang.Comparable 和 java.util.Comparator
从英文名字也可以看出,Comparable是一种 able,表示该对象可以比较,是 对象自身的属性,其中要Override的方法 compareTo,compareTo 是 同种对象 之间 比较。
Comparator是一个名词,如果一个对象没有实现 Comparable 时,就要外部实现 一个 单独的 Comparator 接口,传递给 sort 方法,其中要Override的方法 是 compare,compare 像是 外部 对两个对象比较。
sort(Object[]),所有对象都必须实现Comparable接口,它用来确定对象之间的大小关系 。
sort(Object[],Comparator) 对象不必实现Comparable接口,各个对象根据 Comparator 确定大小关系。