常见Java基础篇(一)

List相关面试题

ArrayList底层的实现原理

  1. ArrayList底层是用动态的数组实现的
  2. ArrayList初始容量为0.当第一次添加数据的时候才会初始化容量为10
  3. ArrayList在进行扩容的时候是原来容量的1.5倍,每次扩容都需要拷贝数组
  4. ArrayList在添加数据的时候
  • 确保数组已使用长度(size)加一之后足够存下一个数据
  • 确保新增的数据有地方存储之后,则将新元素添加到位于size的位置上
  • 返回添加成功布尔值
  • 计算数组的容量,如果当前数组已使用长度+1后大于当前的数组长度,则调用grow方法扩容

String 、StringBuffer 、StringBuilder的区别

  1. String是不可变的,如果尝试改变,会生成一个字符串对象,StringBuffer和StringBuilder是可变的
  2. StringBuffer是线程安全的,StringBuilder是线程不安全的,所以单线程环境下StringBuilder效率更高

==和equals的区别

  1. ==:如果是基本数据类型,比较的是值,如果是引用数据类型,比较的是引用地址
  2. equals:具体看各个类重写equals方法之后的比较逻辑,比如String类。虽然是引用类型,但是String类重写了equals方法,方法内部比较的是字符串中的各个字符是否全部相等。重写equals方法必须重写hashcode方法。

泛型中extends和super的区别

  1. <? extends T>表示包括T在内的任何T的子类
  2. <? super T>表示包括T在内的任何T的父类

ApplicationContext和BeanFactory有什么区别

  1. Beanfactory是spring的核心组件,表示Bean工厂,可以生成Bean
  2. ApplicationContext继承了Beanfactory,所以拥有Beanfactory的所有特点,并且它还继承了其他接口,从而还获取了系统环境变量、国际化、事件分布等功能,这个是Beanfactory不具备的。

ArrayList和LinkedList区别

  1. 底层数据不同,ArrayList底层基于数组,LinkedList底层基于链表
  2. 基于底层数据的不同,所以使用场景也不同,ArrayList适合随机查找,LinkedList更适合删除和添加
  3. 两个都实现了list接口,但是LinkedList还额外实现了Deque接口,所以它还可以当作队列使用。
  4. 两个都线程不安全,如果想要保证线程安全:
  • 在方法内使用,局部变量则是线程安全的
  • 使用Collections调用一个synchronizedList来包装它们两其中的一个

八大基本数据类型有哪些?

int,short,double,long,布尔,float,char,byte

问题一:String为什么不是基本数据类型,它是什么类型?

答:string是引用数据类型

问题二:int和integer的区别,介绍一下integer

答:int是基本数据类型,而integer是int的封装类,是引用类型。int默认值是0、integer的默认值是null

问题三:float和double有什么区别

答:float和double都是浮点数类型,但是它们的精度和存储空间不同,double类型的精度更高,但是占用的存储空间也更大,float类型存储空间占用少,节省存储空间。

问题四:基本数据类型和引用数据类型有什么区别

  1. 基本数据类型保存在栈内存当中,保存的是一个具体的值
  2. 引用数据类型保存在堆内存当中,保存的是引用类型数据的值

Java的特性和优势

简单性、面向对象、可移植性、高性能、分布式、动态性、多线程、安全性、健壮性

数据结构(标红的)

什么是二叉树

  1. 每个节点最多有两个叉,分别是左子节点和右子节点
  2. 不要求每个节点都有两个子节点,有的节点只有左节点、有的只有右节点

什么是二叉搜索树?

  1. 没有键值相等的节点
  2. 二叉搜索树的时间复杂度为O(logn)
  3. 树中的任意一个节点,左子树的每一个节点的值,都要小于这个节点的值,右子树节点的值都要大于这个节点的值

什么是红黑树

  1. 是一种自平衡的二叉搜索树
  2. 所有的红黑规则都是希望红黑树能够保证平衡
  3. 红黑树的时间复杂度:查找、添加、删除都是O(logn)

什么是散列表

  1. 散列表又名哈希表
  2. 根据键直接访问在内存存储位置值的数据结构
  3. 由数组演化而来,利用数组支持按照下标进行随机访问数据

什么是散列冲突

  1. 又名哈希冲突
  2. 指多个key映射到同一个数组下标位置

散列冲突-链表法

  1. 数组的每一个下标位置称之为桶或者槽
  2. 每个桶会对应一条链表
  3. hash冲突后的元素都放到相同槽位对应的链表中或红黑树中

HashMap的底层实现原理

  1. 底层是hash表数据结构,数组+(链表 | 红黑树)
  2. 添加数据时,计算key的值确定元素在数组中的下标
  • key相同则替换
  • 不同则存入链表或红黑树中
  1. 获取数据通过key的hash计算数组下标获取元素

HashMap的jdk1.7和1.8有什么区别

  1. jdk1.8之前采用的是拉链法,数组+链表
  2. 1.8之后采用的是数组+链表+红黑树,链表长度大于8并且数组长度大于64则会从链表转化为红黑树

HashMap的put方法具体流程

 HashMap的扩容机制

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值