java面试

一、Redis篇

1、缓存穿透

查询一个不存在的数据,mysql查询不到数据也不会直接写入缓存,就会导致每次请求

都查询数据库

解决方案一:缓存空数据,查询返回的数据为空,仍把这个空结果进行缓存

解决方案二:布隆过滤器

2、缓存击穿

给某个key设置了过期时间,某个时间段过期,恰好这时间点对这个key有大量的并发请求,

这样会压垮DB

方案一:互斥锁

方案二:逻辑过期

3、缓存雪崩

缓存雪崩是指在同一时段大量的缓存 key同时 失效或者 Redis 服 务 宕机 , 导致大量请求

到达数据库,造成雪崩

4、redis做缓存,保证双写一致性

当修改了数据库的数据也要同时更新缓存的数据, 缓存和数据库的数据要保持一致

(mysql跟redis缓存数据一样)

5、redis做持久化

RDB,AOF

RDB:redis数据快照,把内存的所有数据都记录到磁盘,当redis实例故障重启后,从磁盘

读取快照文件,恢复数据

RDB执行原理

AOF:追加文件,redis每次处理一次写操作都会记录在AOF文件

一般使用everysec配置项

6、redis数据删除策略

(1)、惰性删除

设置的过期时间,当需要该key时,如果过期了就删除掉它。

(2)、定期删除

每隔一段时间,对key进行检查,删除里面过期的key(从一定数量的数据库中取出来进行检查)

Redis的过期删除策略惰性删除+定期删除两种策略进行配合使用

8、数据淘汰策略

数据淘汰策略 - 使用 建议

1. 优 先 使用 allkeys-lru 策略。 充 分 利 用 LRU 算 法 的优 势 , 把最近最 常访 问的数据 留 在缓存中。 如果业务有 明显 的 冷 热数据 区 分, 建 议 使用。

2. 如果业务中数据 访 问 频 率 差 别 不大, 没有 明显冷 热数据 区 分, 建 议 使用 allkeys-random , 随机选择 淘汰。

3 . 如果业务中有置 顶 的 需 求, 可以使用 volatile-lru 策略, 同时置 顶 数据不设置过期时间, 这些数据就一直不 被删 除 , 会淘汰其他设置过期时间的数据。

4 . 如果业务中有 短 时高 频访 问的数据, 可以使用 allkeys-lfu 或 volatile-lfu 策略。

9、redis分布式锁

redisson实现的分布式锁——可重入

就是能够获取多次

redisson实现的分布式锁——主从一致性

10、redis集群高可用,高并发面试

(1)、主从复制

单 节 点 Redis 的并发能 力 是有上 限 的, 要 进一步 提 高 Redis 的并发能 力 , 就 需要 搭 建 主从集群, 实现读写分离

主从数据同步原理:

Replication Id:简称replid,是数据集得标记,id一致则说明是同一数据集,每一个master

都有唯一的replid,slave则会继承master节点的replid

offset:偏移量,随着记录在repl_baklog中的数据增多而逐渐增大。slave完成同步时会记录当前

同步的offset。如果slave的offset小于master的offset,说明slave落后于master

主从全量同步:

主从增量同步(slave重启或后期数据变化)

(2)、哨兵模式

redis集群(哨兵模式)脑裂

解决方案:

(3)、分片集群结构

主从和哨兵可以解决高可用、 高并发读的问题。但是 依 然 有 两 个问题没有解决:

海量数据存储问题 、高并发写的问题

分片集群结构——数据读写

11、redis其他面试

(1)、用户空间和内核空间

(2)、阻塞IO

(3)、非阻塞IO

(4)、IO多路复用

IO多路复用:是利用单个线程来同时监听多个Socket,并在某个Socket可读,可写时得到通知,

从而避免无效的等待,充分利用CPU资源。

(5)、redis网络模型

二、数据库篇

1、如何定位慢查询

MySQL 自带慢日志

2、SQL执行计划(找到慢的原因)

可以采用 EXPLAIN 或者 DESC 命令获取 MySQL 如何执行 SELECT 语句的信息

type 这条 sql 的连接的类型, 性能由好到差为 NULL、 system、const、eq_ref、ref、

range、index、all

system:查询系统中的表

const:根据主键查询

eq_ref:主键索引查询或唯一索引查询

ref:索引查询

range:范围查询

index:索引树扫描

all:全盘扫描

3、mysql支持的存储引擎

存储引擎就是存储数据、 建 立 索引、 更 新 / 查询数据 等技术 的实现方 式 。

存储引擎是 基于 表的, 而 不是 基于 库 的, 所以存储引擎 也 可 被称 为表类型

(1)、MySQL 体系结构

(2)、存储引擎特点

4、什么是索引

索引是帮助mysql高效获取数据的数据结构(有序),数据库系统还维护着满足特定查找算法

的数据结构(B+树)。这些数据结构以某种方式引用数据,这样就可以在这些数据结构上实现高级查询算法,这种数据结构就是索引

mysql默认是使用索引底层数据结构是B+树

(1)、聚簇索引

回表查询

(2)、覆盖索引

覆盖索引是指查询使用了索引, 并且需要返回的列, 在该索引中已经全部能够找到

5、Mysql超大分页处理

优化思路 : 一 般 分页查询时, 通过创建 覆盖索引 能 够比较 好 地提高 性能,

可以通过 覆盖索引加子查询 形式 进行优化

6、索引创建原则

7、什么时候索引失效

1)、违反 最 左 前 缀 法则

如果索引了多列, 要 遵守 最 左 前 缀 法则。 指的是查询从索引的最 左 前列开 始 , 并且 不 跳 过索引中的列。 匹 配最 左 前 缀 法则, 走 索引:

2)、范围查询 右边 的列, 不能使用索引

3)、 不要在索引列上进行运 算操作 , 索引 将 失效。

4)、字 符串 不加单引 号 , 造成 索引失效。

5)、以 % 开 头 的 Like 模糊 查询, 索引失效。 如果 仅仅 是 尾部模糊匹 配, 索引不会失效。 如果是 头部模糊匹 配, 索引失效。

8、sql的优化

9、Mysql其他面试题

(1)、事务特性 ACID

(2)、并发事务问题

1、脏读:一个事务读到另外一个事务还没有提交的数据

2、不可重复读:一个事务先后读取同一条记录,但两次读取的数据不同

3、幻读:一个事务 按照 条件查询数据时, 没 有 对 应的数据行, 但是在 插 入 数据时, 又 发 现这行数据 已 经存在, 好 像 出现 了 ” 幻 影 ”

解决方案:对事务进行隔离

(3)、undo log 和 redo log的区别

1、redo log

2、undo log

(4)、MVCC 多版本并发控制

(5)、Mysql主从同步原理

MySQL 主从复 制 的 核心 就是二进 制 日志

(6)、分库分表

条件:

拆分策略:

垂直拆分:垂直分库垂直分表

水平拆分:水平分库水平分表

垂直分库

垂直分表

水平分库

水平分表

三、框架篇

1、Spring

(1)、Spring框架中的单例bean是线程安全的吗

(2)、什么是AOP

记录操作日志思路

Spring中的事务是如何实现的

其本质是通过 AOP 功能, 对方法前后进行拦截, 在执行方法之前开 启 事务, 在执行完目标方法之后根据执行情况提 交或者回滚事务。

(3)、Spring中事务失效的场景有哪些

情况一: 异 常 捕 获处理

情况二: 抛出检查异 常

情况 三 : 非 public 方法 导致 的事务失效

(4)、Spring的bean的生命周期

BeanDefinition

Spring 容器在进行实例 化 时, 会 将 xml 配置的 <bean> 的 信息 封装成一个 BeanDefinition 对象, Spring 根据 BeanDefinition 来 创 建 Bean 对象, 里 面有很多的 属 性用来 描述 Bean

(5)、Spring 中的循环引用

2、SpringMVC

(1)、SpringMVC的执行流程

视图阶 段( JSP )

前后端分离阶段( 接口开发 ,异步请求)

3、SpringBoot

(1)、SpringBoot自动配置原理

4、Spring 的常见注解有哪些?

5、SpringMVC 常见的注解有哪些?

6、Springboot 常见注解有哪些?

7、Mybatis

(1)、mybatis的执行流程

(2)、Mybatis 是否支持延迟加载?

在 Mybatis 配置 文件 中, 可以配置是 否启 用延迟加载 lazyLoadingEnabled=true|false , 默认是关 闭 的

延迟加载的原理

(3)、Mybatis的一级、二级缓存

四、微服务篇

1、SpringCloud

1、SpringCloud的五大组件

2、服务注册和发现什么意思?SpringCloud如何实现服务注册发现?

3、负载均衡如何实现的

Ribbon 负载均衡策略有哪些 ?

自定义负载均衡策略如何实现 ?

4、什么是服务雪崩,怎么解决这个问题?

雪崩:一个服务失败,导致整条链路服务都失败的情形

(1)、服务降级

在远程调用中设置好兜底方法

(2)、服务熔断

5、微服务监控

2、业务相关

1、限流的实现

Nginx限流

控制速率 ( 突发流量 )漏桶算法

网关限流

yml配置文件中,微服务由设置添加全局过滤器RequestRateLimiter 令牌桶算法

2、CAP和BASE

CA CP AP

Consistency (一 致性 ) : 用户 访 问分布式系 统 中的任意 节 点, 得 到的 数据 必须一致

Availability ( 可 用 性 ) : 用户 访 问集群中的任意健康 节 点, 必须能 得 到 响应 , 而 不是 超 时 或拒绝

Partition (分区) : 因为网 络故障或其它 原因 导致 分布式系 统 中的 部 分 节 点与 其它节 点 失去连 接, 形成独 立 分区 。

Tolerance (容错) : 在集群 出 现分区时, 整 个系 统 也要持续 对外 提供服务

3、分布式事务

seata架构

TC相当于班主任,TM相当于团支书,RM相当于同学

seata的XA模式原理

seata的AT模式原理

seata的TCC模式原理

MQ分布式事务

4、分布式服务的接口幂等性如何设计?

幂等 : 多次调用方法者接口不会改变业务状态, 可以保证重复调用的结果和单次调用的结果一 致

5、分布式任务调度

如果有大 数据量 的任务同时都需要 执 行 , 怎 么解决?

五、java集合篇

1、时间复杂度分析

时间复杂度分析: 来评估代码的执行耗时的

只要代码的执行时间不随着 n 的增大而增大, 这样的代码复杂度都是 O(1)

2、List 相关面试题

数组( Array ) 是一种用连续的内存空间存储相同数据类型数据的线性数据结构。

为什么数组索引从 0 开始呢?假如从 1 开始不行吗?

(1)、ArrayList 底层的实现原理是什么

(2)、ArrayList list=new ArrayList(10) 中的 list 扩容几 次

该语句 只是 声明 和实 例 了一个 ArrayList , 指 定 了容量为 10 , 未 扩容

(3)、如何实现数组和 List 之间的转 换

(4)、ArrayList 和 LinkedList 的区别是什么?

(5)、ArrayList 和 LinkedList 的区别是什么?

3、HashMap 相关面试题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值