1.重载和重写的区别?
1.重载发生在一个类中,同名的方法如果有不同的参数列表(类型不同、个数不同、顺序不同)则视为重载.
2.重写发生在子类与父类之间,重写要求子类重写之后的方法和父类被重写的方法有相同的返回类型,比父类更好访问,不能比父类被重写的方法声明更多的异常。
2.string和stringBuffer和StringBuilder的区别是什么?
1.可变性:
String类中使用final关键字来修饰字符数组来保存字符串,所以String对象是不可以改变的。而StringBuider和StringBuffer都继承自AbstractStringBuider类,AbstractStringBuider中也是使用字符数组来保存字符串的,但是没用final关键字来修饰,所以这两个对象是可以改变的。
2.线程安全性
由于String对象是不可以改变的,可以理解为常量,线程安全。
StringBuffier对方法加了同步锁或者对调用的方法加了同步锁,所以线程是安全的。
StringBuider并没有对方法加同步锁,所以是非线程安全的。
3.性能
每次对String类型进行改变的时候,都会生成一个新的string对象.然后将指针指向新的String对象,而StringButter每次都会对本身进行操作,而不是生成新的对象并引用,相同情况下StringBulider相比使用StringBuffer仅能获得10~15%的性能提升,但却要冒多线程不安全的风险。
3.==与equals的区别
1.对于基本类型和引用类型==作用效果是不同的,
基本类型:比较的是值是否相同。
引用类型:比较的是引用是否相同。
equals本质上就是==,只不过String和Integer等重写了equals方法,把它当作值比较.
4.说说自己是怎么使用synchronized 关键字的,在项目中用到了吗?
1.修饰实例的方法:作用于当前对象实例枷锁,进入同步代码前要获得当前对象实例的锁。
2.修饰静态方法: 作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁。
3.修饰代码块,指定枷锁对象,在进入同步代码块前要获得给定对象的锁。
4.双重校验实现对象单例(线程安全)
5.抽象类和接口的区别是什么?
1.实现:抽象类的子类使用extends来继承:接口必须使用implements来实现接口。
2.构造函数:抽象类可以有多个构造函数,接口不能有。
3.实现数量:类可以实现很多的接口:但只能继承一个抽象类【java只支持单继承】
4.访问修饰符:接口中的方法默认使用,public修饰:抽象类中的抽象方法可以使用public和protected修饰,如果抽象方法修饰符为private,则报错
5.设计层面:抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范.
6.Collection和Collections有什么区别?
1.Collection是一个集合接口,他提供了对集合对象进行基本操作的通用接口的方法,所有集合都是他的子类,比如List.Set等。Collections是一个包装类,包含了很多静态的方法,不能被实例化,就像是一个工具类,比如提供的排序方法:Collections.sort(list)
7.List、Set、Map之间有什么区别?
List、Set、Map的区别主要体现在两个方面:元素是否有序、是否元素重复。
三者之间的区别如下表:
8.HashMap和Hashtable有什么区别?
1.存储:HashMap运行key和value为null,而Hashtable不允许。
2.线程安全:Hashtable是线程安全的,而HashMap则是非线程安全的。
3.推荐使用:在Hashtable的类注释上可以看到,Hashtable是一个保留类不建议使用,推荐在单线程的环境下使用HashMap代替,如果需要多线程则用ConcurrentHashMap代替。
9.说一下HashMap的实现原理?
HashMap基于Hash算法实现的,我们通过put(key,value)存储,get(key)来获取。当传入key时,HashMap会根据key.hashCode()计算出hash值,根据hash值将value保存在bucket里,当计算出的hash值相同时,我们称之为hash冲突,HashMap的做法是用链表和红黑树来存储相同的hash值的value。当hash冲突个数比较少时,使用链表否则使用红黑树。
10.说一下HashSet的实现原理?
HashSet基于HashMap实现的,HashSet底层使用HashMap来保存所有的元素,因此HashSet的实现比较简单,相关于HashSet的操作,基本上都是直接调用底层的HashMap的相关方法来完成的,HashSet不允许重复的值。
11.ArrayList和LinkedList的区别?
ArryList: