JAVA开发面试题

1、为什么要用MQ?
流量削峰:
异步:
解耦:
2、MQ的优点和缺点?
3、怎么选型?
考虑几个因素:
性能
高可用
吞入量
社区活跃度
基本功能
团队对这门技术的掌控力

4、怎么做高可用?
rabbitMQ:部署方式有单机部署、集群部署、镜像部署。
rocketMQ:
kafaka:kafaka采用集群部署的方式,每一台机器上面,部署一个节点,多个节点组成集群。每一条消息都分布在节点上的broker上对应的partition上面,每个partition在集群中都有对应的多个副本,每条消息都会从leader同步到follewer。partition都有一个leader的,副本为follower,当leader宕机之后,集群会从follower中选择一个leader,继续提供服务。这时候通过配置可以做到消息0丢失。
通过partion的副本机制保证消息的
5、怎么防止消息丢失

rocketMQ
kafaka

6、MQ重复消费和顺序消费?
先说说怎么保障顺序消费:
rabbitMQ:部署方式有单机部署、集群部署、镜像部署。
rocketMQ:发送消息的时候,可以把需要顺序消费的消息根据业务key,做hash,然后发送到固定的队列。接收消息的时候,如果是多线程消费,可以针对多个线程,将消息key,做一下位运算,然后发送到指定的队列,每个线程对应一个队列。
kafaka:调整每个分区可写入的连接数,把重试设置为0,这样保证消息是有顺序的进入到partition的,发送消息的时候,设置key来指定分区。

重复消费的处理方式是业务本身,主要是做一下幂等,或者是消息过来之后,如果重复了做一下拦截,比如,在redis里面插入一个标识符,如果消息消费过了,就不再处理;如果是订单,做一下订单的状态判断,如果处理过了,就返回成功,不在处理了。主要的原则是,消息不管消费多少次,业务处理结果都是一致的。

— MQ的可靠性、MQ怎么保证不丢消息。
rabbitMq:消息生产者有两种发送方式,一种是事务型的,begin、rollback、commit。异步事件通知的方式,如果发送失败,然后再进行重试。broker,对消息进行持久化存储。消费者,消费者拿到消息之后,对消息进行ACK确认,rabbitMQ默认是,autoACK的,也就是拿到消息之后,马上确认,我们在写代码的时候,采用拿到消息之后,先进性业务处理,处理完成之后,在进行提交。
kafka:
kafka需要做一下配置
1、每个partition的副本必须大于1,至少配置为2
2、
3、ack=all,也就是说消费者发的消息,必须所有的消息都同步到replica,才算成功。才会通知消息的生产者,消息已经发送成功。
4、生产者的消息重试retries=max,一个比较大的值来保障,消息失败之后,可以一直重试。

rocketMq:

Redis的问题
1、缓存一致性的,如何保证缓存和数据库的一致性

分库分表
DRDS
ShardingJDBC

权限认证?

数据库的问题

sql优化相关
1、查看sql的执行计划,尽可能的减少扫描的行数,并且命中索引
2、

全局锁
读锁
写锁
使用场景
使用方法

表锁
读锁
写锁
使用场景
使用方法

行锁
读锁(排他锁):
写锁(共享锁):
使用场景:锁的粒度比较细,在行上面,
使用方法:开启事务之后,行锁开启,begin、commit、rollback。事务结束之后,行锁释放。
存储引擎:MyIsan不支持行锁,InnoDb支持行锁
优点:高并发的场景,只锁一行数据,效率高
缺点:消耗CPU资源、内存资源。

乐观锁:
悲观锁:

1、事务隔离级别?默认是啥?

在关系型数据库中,隔离级别是指多个事务并发执行时,彼此之间的隔离程度。数据库的四种隔离级别如下:

1.读未提交(Read Uncommitted):
最低级别的隔离级别,一个事务可以读取到另一个事务未提交的数据,可能会出现脏读、不可重复读和幻读等问题。

2.读已提交(Read Committed):
一个事务只能读取到另一个事务已经提交的数据,避免了脏读问题,但仍可能出现不可重复读和幻读问题。

3.可重复读(Repeatable Read):数据库默认的隔离级别
一个事务在执行期间读取到的数据始终保持一致,不受其他事务的影响,避免了不可重复读问题,但仍可能出现幻读问题。

4.串行化(Serializable):
最高级别的隔离级别,所有事务必须按顺序依次执行,避免了所有并发问题,但也牺牲了系统的并发性能。

隔离级别越高,数据的一致性和隔离性就越好,但也会带来更多的性能开销和系统负担。在实际应用中,需要根据具体的业务需求和系统性能要求,选择合适的隔离级别。

MVCC并发版本控制技术

rocketMQ:
kafaka:保证所有的消息发送到partion中,
rabbitMQ:

垃圾收集算法
分代收集理论
复制算法
标记整理
标记清除

垃圾收集器
parnew+cms组合
CMS(并发标记、低停顿):
初始标记(STW)、
并发标记、
重新标记(STW),
并发清除
并发重置

缺点:
cpu敏感,会与用户线程争抢Cpu资源。
无法处理浮动垃圾,垃圾清理不彻底,并发标记和并发清理阶段产生的垃圾会在下一次gc的时候清理。
回收过程的不确定性。

g1组合
初始标记(STW)
并发标记
最终标记(STW)
筛选回收(STW)

分布式事务
TCC
AT

缓存一致性
延迟双删,极端情况下,会增加数据库的风险,所以看场景使用。可以使用延迟队列,进行延迟删除,或者延迟更新

缓存雪崩、缓存击穿、缓存穿透。

大数据架构

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值