1.说一下面向对象。
面向对象有三大特征,五大基本原则。三大特征是封装、继承、多态;五大原则是单一职责原则、开发封闭原则、依赖倒置原则、里氏替换原则、接口封闭原则。
封装:把对象的属性和具体实现都隐藏起来,对数据的访问只能通过已定义的接口。
继承:从已有类中派生出新的类,新的类能吸收已有的的数据属性和方法,并能派生出新的能力。
多态:同一个对象的相同方法在不同的情形下具有不同的表现形式。
单一职责原则:一个类的功能要单一,不能包罗万象。
开发封闭原则:一个模块对外的扩展性方面是开放的而更改性方面是关闭的。
依赖倒置原则:高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
里氏替换原则:子类可以替换父类并出现在父类能够出现的任何地方。
接口隔离原则:不应该强迫客户端实现一个它用不上的接口。使用多个专门的接口比使用单个接口要好。

2.说一下Object类?
Object类是所有类的父类,所有对象中都实现了Object中所有的方法。Object含有以下方法:
getClass()、hashCode()、equals()、clone()、toString()、notify()、notifyAll()、wait()、finalize()。
getClass()返回对象的类;
hashCode()返回对象的哈希码值;
equals()在引用对象时比较两个对象的引用地址是否相同;在基本数据类型时比较的是两个对象的值是否相等;
clone()创建并返回对象的一个副本;
toStirng()返回对象的字符串类型;
notify()唤醒在此对象监视器上等待的一个单个线程;
notifyAll()唤醒在此监视器上等待的所有线程;
wait()导致当前的线程等待,直到其他线程调用此对象的notify()或notifyAll(),或者超过指定的时间量;
finalize()当垃圾回收器确定已经不存在有对该对象的引用时,有对象的垃圾回收器调用此方法。

3.抽象类和接口的区别?
抽象类可以有构造方法,接口不能有构造方法;
抽象类可以有普通成员变量,接口不能有普通成员变量;
抽象类可以有静态方法,接口没有;
抽象类中可以包含非抽象的方法,接口必须都是抽象方法;
抽象类的抽象方法的访问类型可以是public,producted,默认,接口只能是public;
一个类只能继承一个抽象类但可以实现多个接口;

4.==和equals的区别?
== 属于关系运算符,比较的是两个基本数据类型的值是否相等;
在引用数据类型中,==比较的是引用的对象地址是否相等;
equals方法比较的是字符串中内容是否相等,即每个字符是否相等。
例如:
String s1 = "chance";
String s2 = "chance";
System.out.println(s1 == s2); //true
System.out.println(s1.equals(s2)); //true

String s3 = new String("chance");
String s4 = new String("chance");
System.out.println(s3 == s4); //false
System.out.println(s3.equals(s4)); //true

5.String 和 StringBuffer,StringBuilder的区别?
可以从可变性和安全性分析:
可变性:
String是用final关键字修饰的字符数组来保存字符串,private final char value[],所以Stirng对象是不可变的;
StringBuffer,StringBuilder继承AbstractStringBuilder,在AbstractStringBuilder中也是使用字符数组保存字符串,char value[],没有final关键字修饰,所以这两种对象是可变的;
安全性:
Stirng的对象是不可变的,是一个常量,可以理解为它是安全的;
StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的;
StringBuilder并没有对方法加同步锁,所以是非线程安全的。

6.final,finally,finalize的区别?
final是关键字,用来修饰变量,方法,类,分别表示变量不可被改变,方法不能被重写,类不能被继承;
finally是关键字,是异常处理语句的一部分,无论是否有异常,都将执行该代码行;
finallize是方法,用于在对象被垃圾回收之前执行清理处理。

7.说一下Sysnchronized?
sysnchronized是java的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。

8.请解释hashCode()和equals()方法有什么联系?
两个对象相同时(equals方法返回true)必须具有相等的哈希码(hashCode()值);
两个对象的哈希码相同时,它们不一定相同。

9.说一下构造函数?
构造函数主要用来在创建对象时初始化对象,即为对象成员变量赋初始值,总是与new运算符一起使用在创建语句中。

10.说一下java中方法重载(overloading)和方法覆盖(overriding)是什么意思?
java中的方法重载发生在同一个类里面;两个或者是多个方法的方法名相同但是参数不同的情况,返回类型可以相同,也可以不相同。
方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。

11.List,Set,Map的区别?
List、Set都是继承自Collection接口,Map不是;
List特点:元素可以重复,元素有放入顺序,可以插入多个null元素;常用的实现类有ArrayList,LinkedList和Vector;
Set特点:元素不可以重复,元素无放入顺序,重复元素会被覆盖掉,只允许一个null元素;最流行的实现类有HashSet、LinkedHashSet以及TreeSet,最流行的是基于HashMap实现的HashSet。
Map特点:以键值对的形式进行数据存储;可以有多个null值,但最多只能有一个null键,最流行的实现类有HashMap、LinkedHashMap、HashTable和TreeMap。

12.异常处理的5个关键字try、catch、throw、throws、finally分别代表什么意义?
try用于监听;将要被监听的代码放在try语句块之内,当try语句块内发生异常时,异常就会被抛出;
catch用于捕获异常;用来捕获try语句中发生的异常;
finally异常处理语句块中表示总是会被执行;
throw用于抛出异常;
throws用于声明该方法可能抛出的异常。