菜单
本页目录

基础面试题

HashMap 是如何解决 hash 冲突的?

这个问题我需要从几个方面来回答。

1. 首先,HashMap 底层采用了数组的结构来存储数据元素,数组的默认长度是 16, 当我们通过 put 方法添加数据的时候,HashMap 根据 Key 的 hash 值进行取模运算。 最终保存到数组的指定位置。

2. 但是这种设计会存在 hash 冲突问题,也就是两个不同 hash 值的 key,最终取模后会落到同一个数组 下标。
   (如图)所以 HashMap 引入了链式寻址法来解决 hash 冲突问题, 对于存在冲突的 key,HashMap 把这些 key 组成一个单向链表。

然后采用尾插法把这个 key 保存到链表的尾部。

另外,为了避免链表过长的问题,当链表长度大于 8 并且数组长度大于等于 64 的时候, HashMap 会把链表转化为红黑树(如图)。 从而减少链表数据查询的时间复杂度问题,提升查询性能。

hashMap的容量怎么扩充

  • table 数组大小是由 capacity 这个参数确定的,默认是16,也可以构造 时传入,最大限制是1<<30;并且必须是2的幂次方
  • loadFactor 是装载因子,主要目的是用来确认table 数组是否需要动态 扩展,默认值是0.75,比如table 数组大小为 16,装载因子为 0.75 时,threshold 就是12,当 table 的实际大小超过 12时,table就需要 动态扩容;
  • 扩容时,调用 resize() 方法,将 table 长度变为原来的两倍,并且根据 新的容量,计算新的数据索引值

hashMap为什么在单链表达到8后要用红黑树,不用二叉查找树,为什么 节点小于6的时候又要转变为链表

  • 二叉查找树有斜树的情况,相当于链表!而红黑树会有旋转、变色保证平 衡!查找快,但是插入修改会相对较慢! 所以,当节点小的时候,为什么要转为链表!

hashMap与chm的区别

  • 加锁跟没加锁的区别,也就是一个是线程安全,一个线程不安全。chm不 允许null的key跟value!hashMap允许。

HashMap 的数据结构

  • 在1.7之前,数组+单链表 1.8,数组+链表 +红黑树,链表超过8并且数组长度大于64,转红黑树,如果 树节点小于6,转为链表

Redis面试题

1.Redis支持哪些数据类型?简单描述每种类型的使用场景

​ redis

2.Redis是如何实现持久化的?请比较下redis持久化方式的优缺点 3.描述一下Redis发布/订阅模型的工作原理及其应用场

4.Redis的事务是如何工作的?Redis事务与传统数据库事务有何不同? 5.在高并发环境下,如何避免Redis的热点问题? 6.请描述一种使用Redis实现分布式锁的方法。 7.如何使用Redis构建一个高效的排行榜系统? 8.Redis适合做全文搜索吗?请说明理由 9.在Java应用中,如何管理Redis的连接? 10.什么是Redis管道(pipelining)?如何通过管道提高性能? 11.Redis的内存管理机制是什么?介绍几种常用的内存淘汰策略。 12.Redission锁有哪些优点? 防止死锁,保证业务没有执行完锁不会释放会续期 13.Redis有哪些常用的数据结构?除了使用Redis锁还有哪些 14.缓存穿透,缓存雪崩是什么? 15.redis的服务器端是单线程还是多线程?为什么? 16.redis同步到数据库,为什么用延迟双删,怎么保证一致性 说一下Redis的锁 面试官:除了setnx呢,要是加锁失败了呢,你还知道哪些? 你知道tryLock()底层的Lua脚本是怎么样实现的吗? 知道Redis有哪些淘汰策略吗? 了解它支持哪些数据类型吗? 了解缓存穿透和击穿吗?说一下怎么解决。

并发编程面试题

  1. 有哪几种线程池?说明不同线程池类型的使用场景及其优缺点?

  2. synchronized和ReentrantLock有什么区别?在实际项目中,您如何选择使用它们?

  3. 如何处理数据库锁和Java内部锁之间的协调,以避免性能瓶颈?

  4. 什么是死锁?如何预防和解决死锁?

  5. 阻塞队列有哪些?分别介绍一下

  6. 在并发编程中,CountDownLatch、CyclicBarrier和Semaphore有何异同?请举例说明它们各自的使用场景。

  7. 如何通过使用volatile关键字解决Java中的可见性问题?volatile与原子操作有什么关系?

  8. ConcurrentHashMap在Java 8中相比之前的版本有哪些重要改进?如何将ConcurrentHashMap用作本地缓存,并处理过期时间或驱逐策略?

  9. ConcurrentHashMap 是线程安全的吗?在哪种情况下可能会出现数据一致性问题?您会如何防止这种情况发生?

  10. 在处理并发数据访问时,您是如何考虑选择乐观锁还是悲观锁的?为什么?

Mysql面试题

1.MySQL的四种事务隔离级别是什么?

  1. 现在有一个百万级数据量的表,查询过程用了索引但是查询速度还是慢,条件字段中也用了索引,该怎么查找问题并做出优化?

3.索引的数据结构是什么?为什么使用B+树?B树和红黑树不行吗? 4.你说你了解InnoDB的ACID特性,简单说一下。 5.为什么树的层数不能超过3层。 6.sql性能优化问题,一般到达那个索引级别会比较好 7.有什么情况会索引失效 8.什么是回表 回表发生在什么索引中 9.在银行中一般存储金额会用到什么数据类型 为什么要用BigDecimal,它的原理是什么,为什么能做到精确 10.索引设计有怎么考虑的 11.聚簇索引和非聚簇索引的区别 12.请描述下数据库的锁

jvm面试题

1.描述JVM的内存模型,包括各个区域的作用及其重要性 2.堆和栈有什么区别?对象分配在堆还是栈上? 3.JVM中的垃圾回收机制是如何工作的?解释下不同的垃圾收集器(如Serial GC, Parallel GC, CMS, G1 GC)及其适用场景 4.如何判断对象是否存活?请解释强引用、软引用、弱引用和虚引用。 5.在进行JVM性能调优时,您通常关注哪些指标?请分享一个您曾经优化过的案例 6.如何解决内存泄露问题?描述一下您的诊断和解决流程 7.您使用过哪些JVM调试和监控工具?请举例说明如何使用这些工具进行系统监控或故障诊断 8.请描述JVM的类加载过程。类加载器有哪些,它们之间是如何工作的? 9.双亲委派模型是什么?为什么要使用双亲委派模型? 10.静态变量是否会导致内存泄漏?为什么?