前言

这里讲解的都是一些框架流程、工具以及源码分析篇的面试题,具体如下:

  1. spring boot 篇
  2. spring 篇
  3. redis 篇
    ...

一、spring boot 篇

1、对spring boot有什么理解

1、一站式单机开发
2、约定大于配置
3、从繁琐的xml中解脱
4、内置tomcat容器
5、打包成jar部署更简单

2、spring boot分析启动流程

1、创建SpringApplication对象初始化SpringBoot容器
2、获得应用启动类型。(原理:判断classPath是否有加载servlet类,返回启动方式)
3、setlnitializers读取sb包下spring.factories获取ApplicationContentlnitializer装配集合
4、setListeners读取spring.factories获取ApplicationListener装配集合
5、MainApplication 获取当前运行主函数
6、调用run启动方式
7、StopWatch stopWatch = new StopWatch()记录项目启动时间
8、getRunListeners类型存入集合
9、listeners.Starting 循环监听starting 方法
10、prepareEnvironment 读取配置文件SpringBoot 容器
11、打印Banner日志
12、创建SpringBoot上下文 对象
13、refreshContext 刷新我们山下文
14、创建tomcat容器
15、创建SpringMvc
16、afterRefresh定义
17、listeners.started 广播和回调机制通知监听器启动成功
18、listeners.runing 广播和回调机制通知监听器以及运行

3、WebApplicationType 三种状态

NONE	 不会嵌入web服务器,通过外部tomcat服务器启动
SERVLET  servlet服务器运行
REAVTIVE 响应式启动

二、spring 篇

1、spring启动流程(简述)

1、执行web.xml中的ContextLoaderListener监听器
2、初始化 contextInitialized方法
3、调用父类(ContextLoader)的initWebApplicationContext方法
4、创建WebApplicationContext容器
5、加载context-param中配置的spring配置文件
6、初始化java bean

停止时候会执行ContextLoaderListener的contextDestroyed方法销毁context容器

三、redis篇

1、redis和ehcache区别
答:1.ehcache直接在jvm虚拟机中缓存,速度快,效率高;但是缓存共享麻烦,集群分布式应用不方便。2.redis可缓存共享、分布式部署,可持久化

2、redis应用场景
答:1.热点数据。2.计数器。3.排行榜。4.分布式锁。5.队列。6.点赞。7.token令牌。8.延时操作

3、为啥效率那么高
答::1.完全基于内存,持久化。
    2.单线程。
    3.redis使用多路复用技术。
    4.基于跳跃表数据增删改,效率高

4、redis线程安全吗?为啥效率那么高?
答:采用NIO多路复用,一个线程处理多个请求,线程安全类似无锁机制

5、redis分为多少个库,为啥有这么多个
答:16个库,没个库不准许出现相同key,不同业务连接同一个redis,所以区分

6、redis五种类型:
答:1.String(常规key-value缓存应用,最大512M。常规计数: 微博数, 粉丝数。)
   2.List(双向链表,字符串列表。最新消息排行,消息队列)
   3.Hash(键值(key => value)对集合。场景:存储部分变更数据,如用户信息、存储、读取、修改用户属性等。)
   4.set(string类型的无序集合。场景:共同好友、交集)
   5.zset(sorted set:有序集合。场景:1.排行榜 2.带权重的消息队列)

7、redis如何存放数据
答:1.基于json序列化。2.基于String二进制存放对象

8、mysql和redis保证数据唯一性
答:1.手动清除缓存。2.订阅mysql的binlog日志通过MQ推送

9、全量和增量区别
答:1.全量:每天定时对所有数据数据同步。2.增量:发生操作同步数据,效率低,低延迟

10、内存满了如何处理?
答:1.扩展内存,治标不治本。2.采用redis淘汰机制。3.设置过期key

11、redis宕机会丢失?
答:不会,因为会持久化

12、redis持久化有哪些方案?
答:RDB增量同步。存放文件格式,恢复速度快。AOF增量同步,日志存放

13、redis支持回滚吗?
答:没有回滚。mysql开启事务,其他线程不能做写操作,回滚相当于对该行锁释放。redis开启对key的事务,其他线程还是可以对key做操作

14、redis主从复制
答:单台redis情况下,如果redis宕机会导致数据丢失,故使用复制备份数据
多台分为主从关系,请求会转发主节点。在同步到每子字节点负责读,哨兵会重启节点,单机要手动

15、redis主从实现
答:1.数据备份。2.集群。3.读写分离

16、redis分布式锁思路
答:采用setn。2.redis框架

17、redis的set和setnx区别
setnx可以返回key是否存在。存在返回0,不能修改,不存在返回1

18、分布式锁超时如何处理
答:1.续时。2.回滚当前事务,同时释放锁

19、redis缓存穿透,缓存穿击、缓存雪崩原因及解决方案
答:缓存穿透
   缓存穿击
   缓存雪崩