1. == 和 equals方法的异同 ???
相同点:==和equals都是对数据进行比较的一种方式
不同点:
(1)比较内容的不同:
① ==可以比较基本数据类型和引用数据类型
② equals只能比较引用数据类型
(2)比较规则的不同:
① ==在比较基本数据类型时,比较的是内容,在比较引用数据类型时,比较的是地址值
②equals在重写之前比较的是引用数据类型的地址值,在重写之后比较的是内容
2.String,StringBuffer,StringBuilder三者的异同 ???
String:不可变的字符序列,效率最低,底层使用char[]数组存储。
StringBuffer:可变的字符序列,效率较低,底层使用char[]数组存储。
StringBuilder:可变的字符序列,效率高,线程不安全,底层使用char[]数组存储。(JDK5.0新增)
3.HashMap和Hashtable的异同 ???
HashMap作为Map的主要实现类,存储数据无序,效率高,线程不安全。能存储null的Key值和Value值。
Hashtable作为Map的古老实现类,存储数据无序,效率低,线程安全,不能存储null的Key值和Value值。
HashMap的底层:
数组+链表(JDK7.0及以前)
数组+链表+红黑树(JDK8.0)
Map中的Key:无序的,不可重复的,使用Set存储所有Key值。
Map中的Value:无序的,可重复的,使用Collection存储所有Value值。->(value所在的类需要重写equals())
List接口:存储有序的,可重复的数据。 -> “动态”数组替换原有的数组。
ArrayList:作为List接口的主要实现类,线程不安全的,查询效率高,底层使用Object[]数组存储。
LinkedList:对于频繁的插入和删除的操作,效率要比ArrayList高,底层使用双向链表存储。
Set接口:存储无序的,不可重复的数据 -> 高中讲的“集合”
HashSet: 作为Set接口的主要实现类,线程不安全,可以存储null值。
LinkedHashSet:作为HashSet的子类,仍然是无序的,但在遍历其内部数据时,可以按照添加的顺序遍历。
对于比较频繁的遍历操作,LinkedHashSet要高于HashSet
TreeSet:可以按照对象添加的指定属性,进行排序。
4.并发和并行的区别???
并发:一个处理器可以同时处理多个任务,这是逻辑上的同时发生。
并行:多个处理器可以处理多个任务,这是物理上的同时发生。
比如:一个人吃三个苹果和三个人吃三个苹果。
5.进程和线程的区别???
进程:是执行中一段程序,即一旦进入程序,就被载入到内存中准备执行,它就是一个进程。
线程:单个进程中执行每个任务就是一个线程,线程是进程中执行运算的最小单位。
6.说一下Runnable和Callable的区别???
Callable规定的方法是call(),Runnable规定的方法是run()。
Callable任务执行后可返回值,而Runnable任务不能有返回值。
call方法可以抛出异常,而run方法不行。
7.说一下线程的生命周期
新建状态 -> 就绪状态 -> 运行状态 -> 可以在运行时提供方法来阻塞线程的运行 -> 死亡状态
8.sleep方法和wait方法的异同???
相同点:一旦执行方法,都可以使得当前线程进入阻塞状态。
不同点:
1)两个方法声明的位置不同:
Thread类中声明sleep(),Object类中声明wait()。
2)两个方法的调用范围不一样:
sleep可以在任何场景下使用,而wait只能在同步代码块或同步方法中使用。
3)关于是否会释放同步监视器的问题:如果两个方法都在同步代码块或同步方法中:
sleep方法不会释放同步监视器,而wait方法会释放同步监视器。
9.什么是Java序列化?什么情况下需要序列化???
①Java对象转换成字节流对象的过程叫序列化。
②当 Java 对象需要在网络上传输 或者 持久化存储到文件中时,就需要对 Java 对象进行序列化处理。
序列化的实现:
1.需要实现Serializable接口
2.需要实现当前类提供的常量:serialVersionUID
3.除了当前的Person类需要实现Serializable接口之外,还必须保证其内部所有的属性也必须是可实例化的。(默认情况下,基本数据类型可序列化)
4.ObjectOutputStream和ObjectInputStream不能序列化static和transient修饰的成员变量。
10.什么是反射???
在Java中,反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。
11.synchronized和Lock的异同???
相同点:二者都可以解决线程的安全问题
不同点:synchronized在执行完同步代码后,会自动释放同步监视器。
Lock需要手动的启动同步(lock()),同时结束也要手动12结束同步(unlock())。
12.try-catch-finally中,如果在catch中return了,finally中的代码还会执行么???
会执行,在return前执行。
13.throw和throws的区别???
throw:表示方法内抛出某种异常对象
如果异常对象是非 RuntimeException 则需要在方法申明时加上该异常的抛出 即需要加上 throws 语句 或者 在方法体内 try catch 处理该异常,否则编译 错误执行到 throw 语句则后面的语句块不再执行。
throws:方法的定义上使用 throws 表示这个方法可能抛出某种异常需要由方法的调用者进行异常处理(异常的声明)