Java面试一般,共1轮面试
Q:1.简单自我介绍下以及项目
Q:2.项目中遇到的问题,以及解决方案
Q:3.RocketMQ RocketMQ的消息模式,讲下有什么特点(集群消费模式,和广播模式) 如何保证消息不被重复消费?或者说,如何保证消息消费的幂等性? RocketMQ的延迟消息1条回答
Q:4.ES 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片? es怎么实现的?
Q:5.redis 为什么那么快。
缓存穿透,缓存击穿,缓存雪崩 缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存没读到数据,又同时去数据库去取数据,引起数据库压力瞬间增大,造成过大压力 设置热点数据永远不过期。
加互斥锁 缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求,如发起为id为“-1”的数据或id为特别大不存在的数据。这时的用户很可能是攻击者,攻击会导致数据库压力过大。
解决方案: 接口层增加校验,如用户鉴权校验,id做基础校验,id<=0的直接拦截; 从缓存取不到的数据,在数据库中也没有取到,这时也可以将key-value对写为key-null,缓存有效时间可以设置短点,如30秒(设置太长会导致正常情况也没法使用)。
这样可以防止攻击用户反复用同一个id暴力攻击缓存雪崩是指缓存中数据大批量到过期时间,而查询数据量巨大,引起数据库压力过大甚至down机。和缓存击穿不同的是, 缓存击穿指并发查同一条数据,缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。
解决方案:缓存数据的过期时间设置随机,防止同一时间大量数据过期现象发生。如果缓存数据库是分布式部署,将热点数据均匀分布在不同搞得缓存数据库中。设置热点数据永远不过期。
Q:6.分布式锁有过了解么?让你设计一个分布式锁该考虑哪些?还知道什么锁?1条回答
Q:7.分布式事物?
Q:8.mysql 数据库事物隔离级别?sql 优化? 一个接口很慢,你怎么优化这个接口?1条回答
Q:9.spring(DI,AOP,IOC) mybatis(几个核心类) springBoot(启动过程,starter的原理)
Q:10.多线程,线程池的参数,和线程池的状态1条回答
缓存