Skip to content

Java 热门面试题 200道

tasks
not done
path includes Java面试题

第一天

在10道面试题中,有两个面试题你没有任何思路,他们是:

  • Java中ConcurrentHashMap1.7和1.8之间有哪些区别?
  • JDK1.8对HashMap除了红黑树的改动还进行了哪些改动?

AI的评价:

说说Java中HashMap的原理

HashMap是对数据结构Hash表的实现,存储的元素是键值对的形式,大致的过程是这样的,当我们添加一个元素到HashMap中的时候,会先计算key的hashCode,然后利用hashCode找到对应的数组下标,如果这个下标上没有元素的话就直接存储,如果有就会利用链表法来解决Hash冲突。从HashMap中取出元素的过程大致相同。核心就是通过key的hashCode找到对应的数组下标。

更多内容:说说 Java 中 HashMap 的原理? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

  • 读一读HashMap的源码,先问问AIHashMap的重点有哪些,然后带着目标去读,去验证

Java中ConcurrentHashMap1.7和1.8之间有哪些区别?

答:不知道 答案:Java 中 ConcurrentHashMap 1.7 和 1.8 之间有哪些区别? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

为什么JDK1.8对HashMap进行了红黑树的改动

我认为是优化极端情况下,HashMap的存取性能。 为什么 JDK 1.8 对 HashMap 进行了红黑树的改动? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

JDK1.8对HashMap除了红黑树的改动还进行了哪些改动?

答:不知道 答案:JDK 1.8 对 HashMap 除了红黑树还进行了哪些改动? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

Java中有哪些集合类?请简单介绍

Java中的集合类大致分为三类,一类是List,一类是Set,一类是Map。List可以存储重复的数据,而Set不能存储重复的数据,Map存储的是键值对类型的数据。 List中最常用的有ArrayList,LinkedList,并发安全的有CopyOnWriteArrayList Set最常用的有HashSet,LinkedHashSet,TreeSet。 Map最常用的有HashMap,LinkedHashMap,TreeMap。并发安全的容器有ConcurrentHashMap 更多内容:Java 中有哪些集合类?请简单介绍 - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

MySQL索引的最左匹配原则是什么?

这个原则主要是用在复合索引上面的,比如我们有一个复合索引 (a,b) 当我们根据条件a查询的时候,因为字段a与复合索引(a,b)符合前缀匹配,所以这次的条件查询就可以使用这个复合索引进行快速查询。 更多内容:MySQL 索引的最左前缀匹配原则是什么? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

  • 要理解为什么可以使用这个联合索引 提示:B+树的排序特性

数据库的脏读,不可重复读和幻读分别是什么?

脏读:有两个并发的事务,事务A修改了某条数据的内容,并没有完成提交,事务B就可以看见修改后的内容 不可重复读:在并发的事务中,事务B查看了某条数据的内容,事务A将这条数据进行更新并提交了,事务B再次执行同样的查询时,看见的是修改后的数据内容 幻读:在并发的事务中,事务B查询了某个范围内的数据,长度为10,事务A插入了一条数据在这个范围并提交。事务B再次执行相同的范围查询时,会得到这个新的数据。 更多内容:数据库的脏读、不可重复读和幻读分别是什么? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

  • 理解MySQL中不同隔离级别是如何实现的?

MySQL的存储引擎有哪些?他们之间有什么区别?

我知道的有三个,一个是InnoDB,一个是MyISAM,一个是Memory。 InnoDB支持行锁,支持事务 MyISAM不支持行锁,不支持事务 Memory的数据存储在内存中 MySQL 的存储引擎有哪些?它们之间有什么区别? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

MySQL的覆盖索引是什么?

覆盖索引指的是,这一次查询的字段数据在索引上都有,比如要查询(name,age)这两列的数据,而恰好有一个索引 (name,age),在这个索引上就有这两列的内容了,就不需要额外的回表。


标准答案:MySQL的覆盖索引(Covering Index)是指二级索引中包含了查询所需的所有字段,从使查询可以仅通过访问二级索引l而不需要访问实际的表数据(主键索引)。 MySQL 的覆盖索引是什么? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

  • 看面试题的目的,有两个一个是了解整个后端领域的重点内容,一个是学会如何更加优雅的表达

MySQL的索引类型有哪些?

第二天

01 MySQL的索引下推是什么?

答:索引下推的核心在先通过二级索引排除掉一些不符合条件的数据,减少回表次数。具体而言是在进行多个条件查询的时候,可以走某个联合索引,而我们可以根据联合索引的内容先排除一些数据,减少回表的次数。

答案:MySQL 的索引下推是什么? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

02 MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别?

答:InnoDB引擎中的聚簇索引就是主键索引,每个叶子节点存储的都是完整的数据。而非聚簇索引叶子节点存储的不是完整的数据,只有索引的字段 + 主键字段

答案:MySQL InnoDB 引擎中的聚簇索引和非聚簇索引有什么区别? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

03 MySQL 中的回表是什么?

答:在进行查询的时候,走了非主键索引的快速查询,但是要查询的列信息比二级索引中的列信息要多,所以就只能根据二级索引回到主键索引获取缺少的列信息。这个过程就是回表。

答案:MySQL 中的回表是什么? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

04 MySQL 中使用索引一定有效吗?如何排查索引效果?

答:不一定有效,比如在索引字段上使用的函数,就会导致索引失效。可以通过 explain SQL语句 来分析这条SQL语句是否使用到了索引。

答案:MySQL 中使用索引一定有效吗?如何排查索引效果? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

05 RabbitMQ 怎么实现延迟队列?

答:虽然我没有很认真的学过RabbitMQ如何实现延迟队列,但是我知道RabbitMQ的消息模型,其中核心组件是 交换机 + 队列,消息的提供者只知道交换机,消息的消费者只关系队列。如果要实现延迟队列,我认为可以自定义一个交换机,来实现延迟队列的效果。

答案:RabbitMQ 怎么实现延迟队列? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

06 MySQL 中的索引数量是否越多越好?为什么?

答:不是越多越好的,因为索引是有代价的,首先是空间代价,一个索引底层就会对应一颗B+树,如果索引的字段占用大,那么就会导致整个B+树的内存占用也会大。其次是维护代价,B+树是平衡树,当修改数据的时候,索引上的数据也需要同步修改并维持平衡。

答案:MySQL 中的索引数量是否越多越好?为什么? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

07 为什么 RocketMQ 不使用 Zookeeper 作为注册中心呢?而选择自己实现 NameServer?

答:我没有使用过RocketMQ,但是可以允许我推测一下吗?我认为之所以不用外部的组件做注册中心应该是因为RocketMQ需要实现某些特性,如果用ZookKeeper不能实现,或者实现起来很困难,所以决定自研注册中心

答案:为什么 RocketMQ 不使用 Zookeeper 作为注册中心呢?而选择自己实现 NameServer? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

08 请详细描述 MySQL 的 B+ 树中查询数据的全过程

答:举一个具体的例子,比如:select name,age from stu where name = 'lwh' ,如果name由索引,那么就会从name索引对应的B+树上开始搜索值为lwh的节点,找到这个叶子节点之后,因为name索引上没有age的数据,所以就会通过叶子节点中对应的主键,回到主键索引上同样的搜索算法获取到对应的age数据。

答案:请详细描述 MySQL 的 B+ 树中查询数据的全过程 - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

09 RabbitMQ 中消息什么时候会进入死信交换机?

答:当我们设置了消息的TTL,当超过TTL的限制后,就会进入死信队列。

答案:RabbitMQ 中消息什么时候会进入死信交换机? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器

10 为什么 MySQL 选择使用 B+ 树作为索引结构?

答:因为B+树在查找,插入,范围查找的时间复杂度都比较低,而且由于其多叉树的结构非常适合存储在硬盘中。能够减少磁盘空间的浪费。

答案:为什么 MySQL 选择使用 B+ 树作为索引结构? - Java 热门面试题 200 道 - 面试鸭 - 程序员求职面试刷题神器