准备面试一
jdk1.8中红黑树的加入以及concurrentHashMap
1、什么时HashMap?
HashMap是一个用于储存Key-Value键值对的集合,每一个键值对也叫做Entry,这些个键值对(Entry)分散存储在一个数组中,这些数组就算是HashMap的主干,数组的每一个元素的初始值都是null。
2、你为什么使用HashMap?
HashMap可以接受null键值和值,而hashtable不能,hashmap储存的是键值对,以一种数据之间的对应关系。
3、HashMap的工作原理?
HashMap是基于hashing(哈希)的原理,我们使用put(key,valule)存储对象到HahMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,我们对键调用hashCode()方法,返回的hashCode,返回的hashCode用于找到bucket位置来储存Entry对象。
bucket:存储空间,bucket是用来存储对象(Object)的容器,所有的对象都必须隶属于某个存储空间。
4、HashMap的get()方法的工作原理?
根据对象的Hash值进行数组方面的寻找,然后找到这个数组之后,判断key是不是唯一的,如果key唯一,则直接返回;如果不唯一,则使用equals进行值的判断,最后返回。
5、当两个对象的hashcode相同时会发生什么?
因为hashcode相同,所以它们的存储位置(bucket)相同,因为hashmap使用链表存储对象,他们就会被存储在链表中,如果数组的坐标相同,就会进入链表这个数据结构中,然后添加到数组下标连接的地方,当链表长度达到8的时候,jdk1.8会转换为红黑树。
6、当两个键的hashcode相同,如何获取值对象?
当我们调用get()方法时,hashmap会使用键对象的hashcode找到存储(bucket)位置,然后获取值对象,如果两个值对象存储在一个同一个位置时,将会遍历链表直到找到值对象。会调用keys.equals()方法去找到链表中的正确节点。
7、Java中的异常
Exception一般分为Checked异常和Runtime异常,所有RuntimeException类及其子类(ClassCastException, DateTimeException,NullPointerException)的实例被称为Runtime异常,
Checked异常:Java程序必须显示处理Checked异常,如果没有处理异常,该程序在编译时就会发生错误无法编译。处理方式:try...catch块来处理该异常,或者当前不知道如何处理则抛出该异常。
RuntimeException异常:由系统自动检测并将它们交给异常处理程序,
8、SpringBoot和SpringMVC的区别
SpringBoot是一个配置工具,优化了Spring的配置,简化了Spring的开发。
SpringMVC是基于Servlet的一个MVC框架主要解决WEB开发的问题。
功能:
SpringMVC提供了一种轻度耦合的方式来开发web应用
SpringBoot实现了自动配置,降低了项目搭建的复杂度,集成了大量第三方库配置,是开发者能够更加专注业务逻辑。
9、Java泛型
泛型是Java1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法的创建中,引入泛型的好处就是安全简单。
泛型的好处就是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,以提高代码的重复率。
10、Java的反射机制
Java反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有方法和属性;对于任意一个对象都能够调用它的任意方法和属性;这种动态获取信息以及调用对象方法的功能称为Java语言的反射机制。
使用反射通常需要程序的运行没有安全方面的限制。