java面经整理(3)

https://www.nowcoder.com/discuss/28072?type=2&order=3&pos=44&page=2

 

一.HashMap原理

java面经整理(3)_第1张图片

由数组组成,每一个数组为链表

HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来储存Entry对象

当两个对象的hashcode相同会发生什么:当两个对象的hashcode相同,所以它们的bucket位置相同,‘碰撞’会发生。因为HashMap使用链表存储对象,这个Entry(包含有键值对的Map.Entry对象)会存储在链表中

如果两个键的hashcode相同,你如何获取值对象:找到bucket位置之后,会调用keys.equals()方法去找到链表中正确的节点,最终找到要找的值对象

如果HashMap的大小超过了负载因子(load factor)定义的容量,怎么办:默认的负载因子大小为0.75,也就是说,当一个map填满了75%的bucket时候,和其它集合类(如ArrayList等)一样,将会创建原来HashMap大小的两倍的bucket数组,来重新调整map的大小,并将原来的对象放入新的bucket数组中。这个过程叫作rehashing

为什么String, Interger这样的wrapper类适合作为键:Java中有两种变量,一种是基本型别的变量,还有一种是类性别的变量,即对象与非对象两种。有时候我们需要把基本型别包装成对象来使用,例如int Integer,double对应Double,char对应Characteintr,

而包装类都是final不可改变的,string也是这样,key最适合这种不变的来作为建,而且

这几个已经重写了equals()和hashCode()方法了

自定义类型可以作为Key吗:只要重写了equals()和hashCode()方法,并且不容易改变的就行

 

二.Java多线程实现方式

1.继承Thread类,重写run函数 2.实现Runnable接口,重写run函数

3.实现Callable接口,重写call函数

 

 

三.知道的排序算法,重点问了快排,快排的优化

八大排序 快排:分治法(Divide-and-ConquerMethod)。

 

该方法的基本思想是:

 

1.先从数列中取出一个数作为基准数。

 

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

 

3.再对左右区间重复第二步,直到各区间只有一个数。

四。Http post和get差别
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。
五.状态码
状态码被分为五大类: 
100-199 用于指定客户端应相应的某些动作。 
200-299 用于表示请求成功。 
300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 
400-499 用于指出客户端的错误。 
500-599 用于支持服务器错误。 
类比404 error

六.抽象类可以有实例吗?String类可以继承吗?
不能有实例,不能继承,因为为final修饰

你可能感兴趣的:(java面经整理(3))