java基础相关

1.HashMap常见面试题

  1. HashMap的底层数据结构
    HashMap底层是数组+链表

  2. HashMap的存取原理
    通过对key进行hash得到index值,根据index索引值找到对应的数据

  3. java7和java8的区别
    在hashmap put插入的时候,java7采用的是头插法,头插法会导致新来的值替换原来的值,会将hash的存储结构进行打乱,
    在java8采用的是尾插法,不会打乱原hashmap存储结构

  4. 为啥hashmap线程不安全
    以为hashmap的get/set方法没有同步锁,在多线程环境下,可能会出现get.set的不是同一个值,

  5. hashmap默认初始化大小
    16

  6. hashmap的扩容方式,负载因子是多少,
    hashmap扩容有两个因素,一个是hashmap当前长度,另一个是hashmap的负载因子,
    假如当前hashmap的长度是100 ,默认负载因子是0.75,当插入第76个元素的时候会出现扩容,
    扩容分为两步,第一创建一个新的entry数组,长度是原数组的两倍,
    第二遍历原数组,将原数组从新hash到新数组

消息队列MQ面试题

  1. 消息队列的作用和使用场景
    异步:批量处理数据 例如:批量上传文件等
    削峰:高负载任务负载均衡 例如:电商秒杀抢购
    解耦:串行任务并行化 例如:退货流程解耦
    广播:基于发布/订阅模式实现一对多通信

  2. 多个消费者监听一个队列时,消息如何分发
    1.轮询,轮流给每一个消费者发送一条消息
    2.公平分发,使用basicQos来指定消费消息数量,当消费者没有给服务端返回ack确认时,则代表消费者正在忙碌,则不会给该消费者发送消息

  3. 无法被路由的消息,去了哪里
    被丢弃!
    解决方案:使用mandatory=true实现消息的回发
    或者声明交换机的时候指定备份交换机

  4. 消息在什么时候变成死信消息
    当消息进入死信交换机才会变成死信消息
    1.消息被消费者拒绝,会进入死信交换机
    2.消息过期,可以设置消息过期时间
    3.队列发生消息堆积,超过最大长度,则最先入队的消息会进入死信交换机

  5. 如何实现延时队列
    创建死信队列的时候绑定死信交换机,所有到达死信交换机的消息都会进入到死信队列,然后再将对列指定过期时间,由于没有消费者,所以所有达到队列的消息都会进入到死信交换机从而进入死信队列,被消费者消费

  6. 如何保证消息的可靠性投递
    1.保证消息从生产者发送至mq的服务器,
    1.开启事务模式,
    事务模式的话会出现阻塞,影响性能
    2.开启确认模式
    2.保证消息从交换价正确路由到正确的队列
    不能路由的消息,最终保存下来,单独分析和处理
    3.队列正确存储,
    将消息进行持久化处理
    4.消息从队列发送到消费者
    开启消费者的手工应答,只有收到消费者的ack返回才代表该消息被正常消费

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值