面试相关内容

1.Redis

1.1.场景问题

缓存穿透

方案一
方案二 布隆过滤器

又可能会产生误判,如下图:

总结:

缓存击穿

互斥锁(分布式锁)

逻辑过期
总结:

缓存雪崩

redis和mysql 如何保证数据同步(双写一致性)

延时双删:会有脏数据的风险
强一致性(性能较低)
        分布式锁解决方案(性能低)
读写锁解决方案(性能较分布式锁高一点)

最终一致性(异步通知)

mq

总结

Redis持久化

RDB
什么是RDB
RDB执行原理
AOF
什么是AOF

RDB和AOF对比

 redis的key的过期策略(惰性删除和定期删除两种策略配合使用)

惰性删除
定期删除
总结

Redis淘汰策略

分布式锁 

上图单体结构没有问题,使用synchronized,但是分布式情况下还是会有问题

上图分布式锁完美解决了这些问题

setnx
redisson
redisson实现分布式锁-可重入
rediss能实现的分布式锁-主从一致

图解:当主节点redis宕机,哨兵会选择另一个从节点作为主节点,但是两个线程都在进行获取锁的操作,并且都获取到了,所以就失去了锁互斥的作用(解决方法如下,红锁)

替代红锁:zookeeper的cp思想能保证数据的强一致性

总结

1.2.Redis集群方式(主从复制,哨兵模式,分片集群)

主从节点同步原理
主从全量同步
主从增量同步(slave重启或者后期数据变化)
总结

哨兵模式

脑裂问题

图解:

        图1,由于网络或者其他问题导致监控访问不到主节点(master),从而会指定一个从节点(slave)作为新的主节点,但是客户端(client)还在持续的向老的主节点同步数据

        图2,当老节点的网络恢复,会被强制认定为从节点,从而清空自己的数据,然后去同步新的主节点的数据。导致断开时间段客户端同步的数据丢失

解决

redis中两个参数配置

总结

分片集群

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

总结

Redis是单线程,为什么还这么快呢?

I/O多路复用模型

用户空间和内核空间

阻塞IO
非阻塞IO
IO多路复用

mysql

如何定位慢查询

方案一:开源工具

方案二:MySQL自带慢日志

总结

SQL语句执行很慢,如何分析

什么是索引

数据结构对比

总结

什么是聚簇索引什么是非聚簇索引

或者什么是聚集索引,什么是二级所以(非聚集索引)

什么是聚簇索引

什么是二级索引

回表查询

什么叫覆盖索引

MySQL超大分页怎么处理

解决

索引创建的原则有哪些

什么情况下索引会失效

SQL优化的经验

表设计优化

SQL语句的优化

主从复制、读写分离

事物的特性是什么(ACID)

ACID详解

图解:A向B转1000块钱:

原子性:A减1000,B新增1000两个操作要么同时成功,要么同时失败

一致性:A减1000,B必须增加1000

隔离性:A向B的转账过程中不受其他事物的影响

持久性:事物提交之后,要把数据持久化

并发事物带来哪些问题?怎么解决这些问题?MySQL的默认隔离级别是什么?

并发事物问题

怎么解决并发事物问题

undo log和redo log的区别

redo log  

undo log

MySQL的主从原理

分库分表

拆分策略

垂直分库

垂直分表
水平分库
水平分表

分库分表带来的问题已经解决

框架篇面试题

Spring中的Bean是单例的吗?

是的,但是可以设置多例

Spring中的单例Bean是线程安全的吗?

不是线程安全的

什么是AOP,项目中有使用到AOP吗?

Spring中事务是怎样实现的

Spring事物失效的场景又哪些

情况一:异常捕获处理 

抛出检查异常

非public方法导致事务失效

Spring Bean的生命周期

BeanDefinition

生命周期

Spring Bean的循环依赖(循环引用)

三级缓存解决循环依赖问题(都是解决set方法出现的循环依赖)

一级缓存
一级缓存配合二级缓存解决循环依赖问题

能解决大部分循环依赖的问题,但是如果A对象是一个被增强(代理)的对象,循环依赖问题依然存在

三级缓存解决循环依赖(对象工厂)
三级缓存解决不了构造方法出现的循环依赖问题

@Lazy:延迟加载,什么时候需要对象,我再去加载对象

总结

Spring MVC执行流程

视图阶段(JSP)

前后端分离(接口开发,异步请求(没有ModelAndView而是JSON串))

总结

SpringBoot自动配置原理

组合注解@SpringBootApplication

@EnableAutoConfiguration

总结

Spring框架常见的注解

Spring的常见注解有哪些

SpringMVC常见的注解有哪些

Springboot常见注解有哪些

JDK动态代理和CGLIB动态代理的区别

1、JDK 动态代理只能对实现了接口的类生成代理,而不能针对类。

2、CGLIB 是针对类实现代理,主要是对指定的类生成一个子类,覆盖其中的方法因为是继承,所以该类或方法最好不要声明成 final。

@Autowired和@Resource的区别

​ @Autowired 是Spring提供的,@Resource 是J2EE提供的。

@Autowired只按type装配,@Resource默认是按name装配。

Mybatis

Mybatis执行流程 

Mybatis是否支持延迟加载

什么是延时加载

延迟加载的原理

MyBatis的一级缓存和二级缓存

一级缓存

二级缓存

SpringCloud

SpringCloud五大组件有哪些

注册中心

Nacos和eureka的区别

负载均衡(Ribbon)

Ribbon的工作流程

负载均衡策略有哪些

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

总结

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

解决:熔断降级 Hystix   限流(只能预防)

服务降级

服务熔断

总结

微服务是怎么监控的 

项目中限流怎么做的

Nginx限流

控制速率(突发流量)

漏桶算法
控制并发连接数

网关限流

令牌桶算法

CAP和BASE

CPA

        
结论:

BASE理论

总结

分布式事务解决方案 (MQ)

异步,性能好,保证事务的最终一致性

分布式服务接口幂等性

接口幂等

token + redis解决幂等

分布式锁解决幂等

总结

分布式任务调度(xxl-job)

RabbitMQ

RabbitMQ五种消息类型

一、基本消息模型(一对一)

基本消息模型就是:
一个生产者丶默认交换机丶一个队列丶一个消费者。

二、work消息模型

work消息模型就是:
一个生产者丶默认交换机丶一个队列丶多个消费者。

三丶fanout广播模式/发布/订阅模式

fanout消息模型就是:
多个消费者,每一个消费这都有自己的队列,每个队列都绑定到交换机
生产者发送消息到交换机-交换机发送到哪个队列

四丶Routing路由模式(direct)


Routing路由模式模型就是:
在某种场景下,我们希望不同的消息被不同的队列消费
这个时候我们就要用到direct类型的exchange
生产者向交换机发送消息—交换机根据路由key发送给队列-队列的消费者接收消息

五丶Topics(主题模型)

Routing路由模式模型就是:
Topics模式和direct路由模式类似,
区别在于Topic类型的交换机可以匹配通配符
符号(通配符):#表示匹配一个或者多个词
*表示匹配一个词

RabbitMQ如何保证消息不丢失

生产者往路由发的过程中消息丢失(生产者确认机制)

MQ内部消息丢失

消费者消息丢失

总结

RabbitMQ重复消费消息

RabbitMQ中的死信交换机(延迟队列= 死信队列+TTL)

死信交换机

TTL

总结

RabbitMQ消息堆积怎么处理

解决

惰性队列,扩大容积

RabbitMQ如何保证消息顺序消费

总结

 RabbitMQ集群

普通集群

镜像集群

缺点:数据同步过程中,节点宕机,导致数据丢失(情况很少见)

仲裁队列

总结

集合

数据结构

算法复杂度分析

评估代码总计时:

图解:

3n:i<=n,i++,sum=sum+1这三行代码。n执行多少次,这三行代码就要执行多少次

3:int sum=0,int i =1,return sum这三行固定代码

图解:O是指时间,n是指代码循环次数

常见复杂度表示形式

总结

ArrayList源码分析

ArrayList底层的实现原理是什么

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

如何实现数组和List之间的转换

链表

单向链表

双向链表

总结

ArrayList和LinkedList的区别

二叉树

二叉搜索树

红黑树

散列表

HashMap底层原理

HashMapJDK1.7和1.8有什么区别

HashMap的put方法的流程

HashMap的扩容机制 

wait和sleep有什么不同

如何停止一个运行的线程

CAS

什么是AQS

ReentrantLock实现原理

死锁产生的条件是什么

如何进行死锁的诊断

ConcurrentHashMap

导致并发程序出现问题的根本原因是什么

如何控制某个方法允许并发访问线程的数量

常见技术场景问题

单点登录是怎么实现的

JWT解决单点登录

权限认证是怎么实现的

项目中遇到哪些棘手的问题?怎么解决的

项目中怎么采集日志的

查看日志的命令

生产问题怎么排查 

怎样快速定位系统的瓶颈

JVM

什么是程序计数器

java堆

java7和java8JVM区别

什么是虚拟机栈

相关问题

方法区

什么是类加载器,有哪些?

什么是双亲委派模型

JVM为什么采用双亲委派机制

类装载的执行过程

加载

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值