99% 必问必考大厂面试题
-
什么是Redis持久化、Redis持久化机制,以及各自的优缺点
参考答案 一、Redis持久化 持久化就是把内存的数据写到磁盘中去,防止服务宕机了内存数据丢失。 二、Redis 的持久化机制、以及其优缺点 Redis 提供两种持久化机制: RDB(默认) 和 AOF 机制。 1. RDB:是Redis DataBase缩写快照 RDB是Redis默认的持久化方式。按照一定的时间将内存的数据以快照的形式保存到硬盘中,对应产生的数据文件为dump.rdb。通过配…... -
Redis如何实现分布式锁
参考答案 Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。 Redis中可以使用SETNX命令实现分布式锁: 当且仅当 key 不存在,将 key 的值设为 value。 若给定的 key 已经存在,则 SETNX 不做任何动作。 SETNX (SET if Not eXists)如果不存在,则 SET。 返回值:设置成功,返回1;设…... -
Mybatis 的一级缓存、二级缓存是什么,以及工作模式
参考答案 1. 一级缓存的概念、工作模式 1.1 一级缓存的概念 基于 PerpetualCache 的 HashMap 本地缓存。 其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空,默认打开一级缓存。 1.2 一级缓存的工作模式 Mybatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存,…... -
Executors创建线程池有哪几种方式
参考答案 1. 关于Executors类 Executors 类是从 JDK 1.5 开始就新增的线程池创建的静态工厂类,用来创建线程池的。 但是,现在很多大厂已经不建议使用该类去创建线程池。原因在于,该类创建的很多线程池的内部使用了无界任务队列,在并发量很大的情况下会导致 JVM 抛出 OutOfMemoryError,直接让 JVM 崩溃,影响严重。 2. Executors 类的使用方法…... -
MyBatis 实现一对多有几种方式,具体怎么操作
参考答案 MyBatis实现一对多有两种方式: 联合查询 嵌套查询 MyBatis实现一对多的操作: 联合查询是几个表联合查询,只查询一次,通过在resultMap里面配置collection节点配置一对多的类就可以完成。 嵌套查询是先查一个表,根据这个表里面的结果的外键id,去再另外一个表里面查询数据,也是通过配置collection,但另外一个表的查询通过select节点配置。 …... -
CAS的底层原理是什么
参考答案 1. CAS(compareAndSwap)的概念 前往查看:什么是CAS 2. CAS的优点、缺点 前往查看:CAS有什么优点、缺点 3. CAS的底层原理 CAS的实现主要在JUC中的atomic包,我们以AtomicInteger类为例: 通过代码追溯,可见: Java中的CAS操作,都是通过sun包下Unsafe类实现。 而Unsafe类中的方法都是native方法,由JV…... -
Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别
参考答案 Kafka、ActiveMQ、RabbitMQ、RocketMQ 的区别: 1. kafka 开发语言: Scala开发。 性能、吞吐量: 吞吐量所有MQ里最优秀,QPS十万级、性能毫秒级、支持集群部署。 功能: 功能单一。 缺点: 丢数据, 因为数据先写入磁盘缓冲区,未直接落盘。机器故障会造成数据丢失。 应用场景: 适当丢失数据没有关系、吞吐量要求高、不需要太多的高级功能的场景,比如…... -
Mybatis 的 Xml 映射文件中,不同的 Xml 映射文件,id是否可以重复
参考答案 不同的Xml映射文件: 如果配置了namespace,id可以重复。 如果没有配置namespace,id不能重复。 原因: namespace+id是作为Map的key使用的,如果没有namespace,就剩下id,那么,id重复会导致数据互相覆盖。 有了namespace,自然id就可以重复,namespace不同,namespace+id自然也就不同。 备注: 在旧版本的Mybat…...