1.JDK和JRE有什么区别?JDK:java Development Kit的简称,JAVA开发工具包,提供了java的开发环境和运行环境
JRE:java Runtime Environment的简称,java运行环境,java运行环境,为java的运行提供了所需环境
具体来说JDK其实包含了JRE,同时还包含了编译JAVA源码的编译器JAVAC,还包含了很多java程序调试和分析的工具。
Java语言经过编译,生成一种与平台无关的字节码(*.class文件)。必须使用Java解释器来解释执行(特定平台的机器码)。因此Java语言既是编译型语言,也是解释型语言。Java程序的执行过程必须经过先编译、后解释两个步骤。
2.==和equals的区别是什么?
(1)== 对于基本类型和引用数据类型==的作用效果是不同的,如下所示:基本类型:比较的是值是否相同
引用类型:比较的是引用是否相同
(2)equals,本质上就是==,但是String和Integer等重写了equals方法,把它变成了值比较、
3.两个对象的hashCode()相同,则equals也一定为true对吗不对,两个对象的hashCode()相同,equals不一定为true。hashcode()相等即两个键值对的哈希值相等,然而哈希值相等,并不一定能得出键值对相等
4.final在JAVA中有什么作用?final修饰的类叫最终类,该类不能被继承
final修饰的方法不能被重写
final修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改
5.String不属于基本数据类型
6.Java中操作字符串都有哪些类?它们之间有什么区别?
操作字符串的类有:String、StringBuffer、StringBuilderString声明的是不可变的对象,每次操作都会生成新的String对象,然后将指针指向新的String对象,而StringBuffer和StringBuilder可以在原有的对象基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用String
StringBuffer和StringBuilder最大的区别在于,StringBuffer是线程安全的,而StringBuilder是非线程安全,但StringBuilder的性能却高于StringBuffer,所以在电线程的情况下推荐使用StringBuilder,多线程情况下推荐使用StringBuffer
7.String str="i"与String str=new String("i")一样吗?不一样,因为内存分配方式不一样.String str="i"的方式,Java虚拟机会将其分配到常量池中;而Stringstr=new String("i")则会分到堆内存中.
8.如何将字符串反转?StringBuilder或者StringBuffer的reverse()方法
9.普通类和抽象类有哪些区别?普通类不能包含抽象方法,抽象类可以包含抽象方法
抽象类不能直接实例化,普通类可以直接实例化
10.抽象类不能被final修饰
11.Java中Io分为几种?按照功能来分:输入流(input)和输出流(output)
按类型来分:字节流和字符流
字节流和字符流的区别是:字节流按8位传输以字节为单位输入输出数据,字符流按16位传输以字符单位输入输出数据
12.接口和抽象类什么区别?抽象类的子类使用extends来继承;接口必须使用implements来实现接口
构造函数:抽象类可以有构造函数;接口不能有
类可以实现多个接口 但是单继承
访问修饰符:接口中的方法默认使用public修饰;抽象类中的方法可以是任意访问字符
抽象类中可以有普通的成员变量;接口中的变量必须是static final类型的,必须被初始化,接口中只有常量,没有变量
Java8中接口会有default方法,即方法可以被实现
13.BIO、NIO、AIO有什么区别?BIO:Block IO同步阻塞式IO,就是我们平常使用的传统IO,他的特点是模式简单使用方便,并发处理能力低
NIO:Non IO同步非阻塞IO,是传统IO的升级,客户端和服务器端通过Channel(通道)通讯,实现多路复用
AIO:Asynchronous IO是NIO的升级,也叫NIO2,实现了异步非阻塞IO,异步IO的操作基于事件和回调机制
集合
1.Collection和Collections有什么区别?Collection是一个结合接口,它提供了对集合对象进行基本操作的通用接口方法,所有集合都是它的子类,比如List,Set等
Collections是一个包装类,包含了很多静态方法,不能被实例化,就像一个工具类,比如提供的排序方法:Collections.sort(list)
2.List\set\map之间的区别:list 元素有序 允许元素重复
set元素无序 TreeSet 有序 不允许元素重复
Map元素无序 TreeMap 是 key值必须唯一,value可以重复
3.HashMap和Hashtable有什么区别?存储:hashmap运行key和value为null,而Hashtable不允许
线程安全:Hashtable是线程安全的,而Hashtable是非线程安全的
推荐使用:在Hashtable的类的注释可以看到,Hashtable是保留类不建议使用,推荐在单线程环境下使用HashMap替代,如果需要多线程使用ConcurrentHashMap替代
4.如何决定使用HashMap还是TreeMap?
对于在Map中插入、删除、定位一个元素这类操作,HashMap是最好的选择,因为相对而言HashMap的插入更快,但如果你要对一个key集合进行有序的遍历,那TreeMap是更好的选择。
5.说一下HashMap的实现原理:
hashMap基于Hash算法是实现的,我们通过put(key,value)存储,get(key)来获取。当传入key时,HashMap会根据key.hashcode()计算出hash值,根据hash值将value保存在bucket里。当计算出的hash值相同时,我们称之为Hash冲突,HashMap解决Hash冲突的办法是链表加红黑树。当节点数量超过8时链表转换成红黑树
6.说一下HashSet的实现原理?
HashSet是基于HashMap实现的,HashSet底层使用HashMap来保存所有元素,是通过组合基础类,通过调用基础类的方法,来复用基础类的能力。add方法的入参对应是put方法的key value是自定义的一个静态对象
7.ArrayList和Linked的区别是什么?ArrayList是动态数据的数据结构结构实现,而LinkedList是双向链表的数据结构实现。
随机访问速率:ArrayList比LinkedList在随机访问的时候效率要高
增加和删除效率:在非首尾的增加和删除操作,LinkedList要比ArrayList要高,因为Arraylist增加删除要影响数据内的其他数据的下标
8.ArrayList和Vertor区别:线程安全:Vector使用了Synchronized来实现线程同步,是线程安全的,而ArrayList是非线程安全的
性能:ArrayList在性能方面要优于Vector
扩容:ArrayList和Vector都会根据实际的需要动态的调整容量,只不过在Vector扩容每次会增加一倍,而ArrayList之后增加百分之50
9.Array和ArrayList有什么区别:Array可以存储基本数据类型和对象,ArrayList只能存储对象。
Array是指定固定大小的,而ArrayList大小是自动扩展的
Array内置方法没有ArrayList多,比如addAll、removeAll、。。。
10.在Queue中的Poll和remove有什么区别?相同点:都是返回第一个元素,并且在队列中删除返回的对象
不同点:如果没有元素poll会返回null,而remove会直接抛出NoSuchElementException异常
11.哪些集合类是线程安全的?Vector、Hashtable、Stack都是线程安全的,而像HashMap则是非线程安全的,不过JDK1.5之后随着Java.util.concurrent并发包的出现,他们也有了自己对应的线程安全类,比如Hashmap对应的线程安全类就是ConcurrentHashMap
12.迭代器Iterator是什么?
iterator接口提供遍历任何Collection的接口。
13. Iterator 和 ListIterator 有什么区别?
Iterator 可以遍历 Set 和 List 集合,而 ListIterator 只能遍历 List。
Iterator 只能单向遍历,而 ListIterator 可以双向遍历(向前/后遍历)。
ListIterator 从 Iterator 接口继承,然后添加了一些额外的功能,比如添 加一个元素、替换一个元素、获取前面或后面元素的索引位置。