我的面试题

集合

说说hashmap put方法内部细节,
HashMap的线程不安全主要体现在什么地方

  • resize时的死循环
  • 使用迭代器时的fast-fail上

ConcurrentHashMap 如何保证线程安全

JDK8 ConcurrentHashMap变化

取消了 Segment 分段锁,采用 CAS 和 synchronized

synchronized和Lock的区别是什么?

jdk线程池核心参数,提交任务内部是怎么处理


jvm

类的生命周期
类加载机制

说一下对象的创建过程
(1) 虚拟机接收到一条new指令时,先去虚拟机中检查这个指令的参数是否能在常量池中定位到一个类的符号引用,即类有没有被加载到方法区;
(2) 若类未被加载到方法区,则先进行类加载,若类已被加载,则继续;
(3) 获取被加载的类的对象长度;
(4) 确认是否在TLAB中分配内存,若是,则在TLAB中分配内存,否则在EDEN中分配内存;
(5) 将分配到的内存空间设置为零值;
(6) 设置对象的头信息;
(7) 将对象的引用入虚拟机栈;

内存分配方式,如何保证划分内存是线程安全的


spring

生命周期

spring bean的生命周期流程如下:

Spring 容器根据配置中的bean 定义中实例化bean。
Spring 使用依赖注入填充所有属性,如bean 中所定义的配置。
如果bean 实现BeanNameAware 接口,则工厂通过传递bean 的ID 来调用setBeanName()。
如果bean 实现BeanFactoryAware 接口,工厂通过传递自身的实例来调用setBeanFactory()。
如果存在与bean 关联的任何BeanPostProcessors,则调用preProcessBeforeInitialization() 方法。
如果为bean 指定了init 方法( 的init-method 属性),那么将调用它。
最后,如果存在与bean 关联的任何BeanPostProcessors,则将调用postProcessAfterInitialization() 方法。
如果bean 实现DisposableBean 接口,当spring 容器关闭时,会调用destory()。
如果为bean 指定了destroy 方法( 的destroy-method 属性),那么将调用它。

怎么解决循环依赖,三级缓存
说说spring aop

spring boot 自动装配

(@EnableAutoConfiguration,META-INF/spring.factories中自动配置类,xxxProperties) 清楚


mysql

说说mysql索引

主键索引和普通索引,以及它们之间的区别
最左前缀匹配原则

事务隔离级别的实现原理


redis

Redis 内存淘汰机制了解么?
过期的数据的删除策略了解么?

Redis 持久化机制
什么是缓存穿透?
什么是缓存雪崩?
Redis 集群模式的工作原理能说一下么?在集群模式下,Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?


单例的几种实现方式

zk

ZooKeeper 是什么,有哪些功能

ZooKeeper 是一个开源的分布式协调服务。它是一个为分布式应用提供一致性服务的软件,分布式应用程序可以基于 Zookeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。

Zookeeper 怎么保证主从节点的状态同步?

Zookeeper 的核心是原子广播机制,这个机制保证了各个 server 之间的同步。实现这个机制的协议叫做 Zab 协议。Zab 协议有两种模式,它们分别是恢复模式和广播模式。
恢复模式

当服务启动或者在领导者崩溃后,Zab就进入了恢复模式,当领导者被选举出来,且大多数 server 完成了和 leader 的状态同步以后,恢复模式就结束了。状态同步保证了 leader 和 server 具有相同的系统状态。
广播模式
一旦 leader 已经和多数的 follower 进行了状态同步后,它就可以开始广播消息了,即进入广播状态。这时候当一个 server 加入 ZooKeeper 服务中,它会在恢复模式下启动,发现 leader,并和 leader 进行状态同步。待到同步结束,它也参与消息广播。ZooKeeper 服务一直维持在 Broadcast 状态,直到 leader 崩溃了或者 leader 失去了大部分的 followers 支持。

分布式锁如何实现

mq

消息的顺序性
如何处理消息丢失的问题

高可用

kafka rebalance 重平衡流程


mybatis 一次查询过程


dubbo

Dubbo 核心组件有哪些
Dubbo 服务器注册与发现的流程
Dubbo 的注册中心集群挂掉,服务提供者和服务消费者之间还能通信么
当一个服务接口有多种实现时怎么做?
当一个接口有多种实现时,可以用 group 属性来分组,服务提供方和消费方都指定同一个 group 即可