Java八股文超精炼面试题资料

本文详细介绍了Java中的集合框架(如LinkedList,ArrayList,Vector,HashSet,TreeSet,HashMap,TreeMap,HashTable),线程安全数据结构的使用,多线程基础、通信机制、同步与互斥、锁的特性、乐观锁与悲观锁,以及volatile关键字。还涵盖了设计模式中的创建型、结构型和行为型模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、java

(1)集合
1.list:LinkedList、ArrayList和Vector
  • LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
  • ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
  • Vector 接口实现类 数组, 同步, 线程安全
2.set:HashSet和TreeSet
  • HashSet 使用哈希表存储元素,元素可以是null
    • LinkedHashSet 链表维护元素的插入次序
  • TreeSet 底层实现为红黑树,元素排好序,元素不可以是null

篇幅限制下面就只能给大家展示小册部分内容了。包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题

需要全套资料及答案的在【翻到文章底部,点击名片】即可免费获取 备注:“CSDN”

3.map:HashMap、TreeMap和HashTable
  • 线程安全
    • HshaMap线程不安全
    • TreeMap线程不安全
    • HashTable线程安全
  • 空值
    • HashMap一个null key,多个null value
    • TreeMap不能null key,多个null value
    • HashTable都不能有null
  • 继承和接口
    • HashMap继承AbstractMap,实现接口Map
    • TreeMap继承AbstractMap,实现接口NavigableMap(SortMap的一种)
    • HashTable继承Dictionary,实现接口Map
  • 顺序
    • HashMap中key是无序的
    • TreeMap是有序的
    • HashTable是无序的
  • 构造函数
    • HashMap有调优初始容量和负载因子
    • TreeMap没有
    • HashTable有
  • 数据结构
    • HashMap是链表+数组+红黑树
    • TreeMap是红黑树
    • HashTable是链表+数组
4.list、set和map的区别
  • list:元素按进入先后有序保存,可重复
  • set:不可重复,并做内部排序
  • map:代表具有映射关系的集合,其所有的key是一个Set集合,即key无序且不能重复。
5.HashMap扩容机制
  • 数组的初始容量为16,而容量是以2的次方扩充的,一是为了提高性能使用足够大的数组,二是为了能使用位运算代替取模预算(据说提升了5~8倍)。
  • 数组是否需要扩充是通过负载因子判断的,如果当前元素个数为数组容量的0.75时,就会扩充数组。这个0.75就是默认的负载因子,可由构造器传入。我们也可以设置大于1的负载因子,这样数组就不会扩充,牺牲性能,节省内存。
  • 为了解决碰撞,数组中的元素是单向链表类型。当链表长度到达一个阈值时(7或8),会将链表转换成红黑树提高性能。而当链表长度缩小到另一个阈值时(6),又会将红黑树转换回单向链表提高性能。
  • 对于第三点补充说明,检查链表长度转换成红黑树之前,还会先检测当前数组数组是否到达一个阈值(64),如果没有到达这个容量,会放弃转换,先去扩充数组。所以上面也说了链表长度的阈值是7或8,因为会有一次放弃转换的操作。
6.HashMap中的循环链表是如何产生的(jdk1.7)
  • 由于jdk1.7中采用头插法,在多线程中,存在两个线程同时对链表进行扩容的情况,执行transfer函数(链表数据转移)会导致链表数据倒置,当两个线程同时此操作,就导致链表死循环
7.B树和B+树的区别
  • B树是二叉排序树进化而来;B+树是分块查找进化而来
  • B+树叶节点包含所有数据,非叶节点仅起到索引作用;B树终端节点及以上都包含数据且不重复(叶节点只是一个概念,并不存在)
  • B+树叶节点包含了全部关键字
  • B+树支持顺序查找和多路查找,B树只支持多路查找
8. HashMap为什么用红黑树而不是AVL树或者B+树
  • AVL树更加严格平衡,因此可以提供更快的査找效果。因此,对于查找密集型任务使用AVL树没毛病。 但是
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值