Java程序员的基本语法知识面试题

软引用 VS 弱引用

  • 软引用 在内存不足时回收

  • 弱引用 在垃圾回收时不管内存是否充足都回收

进程和线程的区别

  1. 一个程序至少一个进程,一个进程最少一个线程
  2. 进程间相互独立,同一个进程的各线程共享内存,某个进程内的线程在其他进程中不可见
  3. 操作系统中,一般把进程作为分配资源的基本单位,把线程作为独立运行和独立调度的基本单位

java 中 关键字 final 的理解

  1. 变量: 一旦初始化,变量值就不能修改
  2. 方法: 该方法不能被子类重写 ( override )
  3. : 该类不能派生子类
    比如 public final class String extends Object

java 中 finally 关键字

finally 常于 trt/catch 语句块配对使用,即使有异常抛出,也能确保某段代码一定能执行。

finally 常用于关闭流资源或者数据库连接等。

overload 和 override 的区别

  1. overload 重载,是指两个方法的名称相同,但参数类型或者个数不同,即方法的签名不同。注意:方法的返回值不能作为其签名

  2. 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 确定大小关系。