21号
1. 谈谈你对Spring的理解
spring有两个核心 IOC:控制反转 以前需要的对象是自己new的现在 需要的对象由spring创建好给我提供
AOP:面向切面编程 在不改变源代码的基础上对原方法增强 自动填充 记录用户行为日志
2. Spring的常用注解有哪些
@Componet @Controller @Service @Repository @Value @Bean @Autoweird
3. Spring创建的bean默认是线程的安全吗
不是 默认创建的是单例的,如果单例对象中有成员变量,并且有对它修改的操作
怎么办呢?1、改成多例(不建议) 2、使用ThreadLocal
4. Spring中的设计模式有哪些
单例 工厂 模版 代理 观察者
5. Spring事务传播行为有几种
有好几种、经常用的是 必须事务REQUIRED-一定要有事务 支持事务SUPPORTS-有就用 没有就不用
6. Spring是怎么解决循环依赖的
三级缓存 1、存储的是刚初始化的bean 2、完成属性赋值的bean 3、创建对象的工厂
@Lazy
7. SpringBoot自动配置原理
要说清楚项目一启动为什么就自动加载了很多的对象
8. SpringBoot配置文件类型以及加载顺序
bootstrap.yml application.properties application.yml
9. SpringCloud的常用组件有哪些
Eureka Robbin Hystrix Feign gateway Nacos seata
10. 说一说Feign的工作原理
远程调用 封装了RestTemplate
使用的步骤:1、在启动类开启对Feign的支持 @EnableFeign 2、创建一个Interface接口,接口上加一个注解 @FeignClient("微服务的名字") 3、写方法 要和即将调用的方法保持一致URL 参数 返回结果
11. 说一说Nacos的工作原理
提供者启动时,会把自己注册到Nacos上(访问地址和提供的方法)
消费者从Nacos中获取提供者的地址 开始调用 (会缓存提供者的地址)
心跳续约:消费者和提供者每隔30秒会获取最新的地址,提供最新的地址
12. 说一说Ribbon的工作原理和常用负载均衡策略
消费者从注册中心中有可能获取到多个提供者的地址,默认采用轮询的负载均衡策略
13. Hystrix的作用是什么?断路器的工作原理
做熔断的、为了保护服务之间的调用
默认5秒内发起20次请求,如果请求失败超过50%后就开启熔断(不再调用) 直接进入降级方法
14. 解释一下服务雪崩、服务熔断、服务降级
服务雪崩:一个微服务出现问题后导致使用这个微服务的其他微服务都无法使用
服务降级:就是提供准备的一个方法
15. Redis的数据类型和使用场景有哪些
value 验证码 refresh_token
List 合并后的运单
Set 运单为了保证合并运单时去重
Zset 记录快递员工作量
Hash 全局配置:各种线路的成本 运费模版
16. Redis为什么这么快
1、纯内存 2、单线程 多路复用
17. Redis的集群有哪些
主从------哨兵------分片
18. Redis的持久化方式有哪些
RDB 数据的快照
AOF 命令
19. 了解过Redis的事务吗
Redis没有事务的,但是我知道可以用几个命令组合起来可以达到事务的效果
20. Redis实现分布式锁的原理是什么
setnx 但是在项目我们用的是Redisson框架
主从的问题 超时的问题(看门狗)
21. 如何保证Redis数据与DB数据的一致性
1、同步写 2、异步
22. Redis过期删除策略和内存淘汰策略有哪些
1、定期删除 2、惰性删除
最近最少使用 随机
23. Redis常见的缓存问题和对应的解决方案
雪崩:设置随机过期或者不设置过期
击穿:数据库有,缓存过期,大量的请求进入数据库 不设置过期 使用互斥锁
穿透:缓存没有、数据库也没有 布隆过滤器 (二进制的数组和Hash函数)
24. 什么是倒排索引
保存数据时,会把原数据分词,分词后的都会有对应的文档id,查询时根据分词直接查到文档
25. ES中的查询关键字有哪些
match term matchAll bool range
26. MyBatis中#{}和${}的区别是什么
#{} 占位符 预编译 可以防止sql注入
${} 连接符 会用在表或列拼接 变量不是由前端直接传入的
27. 使用RabbitMQ如何保证消息不丢失 怎么保证消息的可靠性
发送方:开启确认机制、如果没有发送成功 提供的重试机制(Spring提供的 @Retry),到达重试次数后,直接把消息放入数据库中,后期有定时任务(xxl-job)读取消息再次发送
MQ: 持久化
消费方:开始确认机制 如果消费是报错,也设置课重试(MQ本身的重试机制),到达重试次数后 放到error队列中 后期修改完bug后人为介入
28. 如何解决消息的重复消费问题和消息堆积问题
重复消费:幂等性的判断 有的业务是直接查询数据库 有的业务是通过Redis的Set判断
消息堆积:增加消费者、扩大MQ内存、使用惰性队列
29. ES中字符串类型有几个
KeyWord Text
30. MySQL中char和varchar的区别
char:定长 name char(8) tom
varchar:固定长度 name varchar(8) tom