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

一、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 面试专题

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

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树没毛病。 但是对于插入密集型任务,红黑树要好一些。
  • B/B+树的节点可以存储多个数据,当数
建议阅读本文档的方式 本文档提供详细的目录,建议大家使用电脑阅读。如果大家用手机阅读的话,可以下载一个不错的PDF阅读器,比如 很多人常用的福昕PDF阅读器。 本文档提供详细的目录,大家可以根据自己的实际需要选择自己薄弱的知识章节阅读。 前言 不论是校招还是社招都避免不了各种面试、笔试,如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有 章可循的,我这个“有章可循”说的意思只是说应对技术面试是可以提前准备。 运筹帷幄之后,决胜千里之外!不打毫无准备的仗,我觉得大家可以先从下面几个方面来准备面试: 1. 自我介绍。(你可千万这样介绍:“我叫某某,性别,来自哪里,学校是那个,自己爱干什么”,记住:多说点简 历上没有的,多说点自己哪里比别人强!) 2. 自己面试中可能涉及哪些知识点、那些知识点是重点。 3. 面试中哪些问题会被经常问到、面试中自己改如何回答。(强烈不推荐背题,第一:通过背这种方式你能记住多 少?能记住多久?第二:背题的方式的学习很难坚持下去!) 4. 自己的简历该如何写。 “80%的offer掌握在20%的人手中” 这句话也不是不无道理的。决定你面试能否成功的因素中实力固然占有很大一部 分比例,但是如果你的心态或者说运气不好的话,依然无法拿到满意的 offer。运气暂且不谈,就拿心态来说,千万 不要因为面试失败而气馁或者说怀疑自己的能力,面试失败之后多总结一下失败的原因,后面你就会发现自己会越来 越强大。 另外,大家要明确的很重要的几点是: 1. 写在简历上的东西一定要慎重,这可能是面试官大量提问的地方; 2. 大部分应届生找工作的硬伤是没有工作经验或实习经历; 3. 将自己的项目经历完美的展示出来非常重要。 笔主能力有限,如果有不对的地方或者和你想法不同的地方,敬请雅正、不舍赐教。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值