Java面试题搜罗

   对于跳槽经验不足的人而言,跳往互联网级别公司最怵怕的就是面试时被问一些内核理论级别的题目,防不胜防遭尴尬。特此小弟在此跳槽季搜罗一手常见的面试题,方便自己同时也希望帮助到各种路人甲。

一.Java基础类

1.String类为什么是final的?

String基本的约定中最重要的一条是immutable(不可变)。
StringChild就有可能是被复写为mutable的,违背基本共识。

例子:一个方法可能本来接收String 类型并返回其大写方式
public static String uppperString(String s){
     return s.toUpperCase();
}  
   你传入String的s="test",他不会修改字符串池中"test",而是直接建立一个实例"TEST"返回。但是如果你的StringChild的toUpperCase()被你重写(override)为mutable方式,然后你调用这个方法的时候传入的是StringChild实例,那么(依赖于(过)方法upperString的所有类)的行为就有可能出现错乱。
   String是基本每个类都会使用的,特别是作为HashMap之类的集合的Key的时候,mutable的String有非常打的风险。


 2.HashMap的源码,实现原理,底层结构

  HashMap的数据结构是链表实现对数据的存储。但是这两者是两个极端。

  数组:数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;

  链表:链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。

  哈希表:那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表。哈希表((Hash table)既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。

  哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法—— 拉链法,我们可以理解为“链表的数组” ,如图:

  ![这里写图片描述](https://img-blog.csdn.net/20160307215511264)

  ![这里写图片描述](https://img-blog.csdn.net/20160307215645530)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值