2022面试题

2022面试题--答案可以自己完善

redis相关

1、redis zset底层数据结构是什么?

zipList:满足以下两个条件[score,value]键值对数量少于128个;

每个元素的长度小于64字节;

skipList:不满足以上两个条件时使用跳表、组合了hash和skipListhash用来存储value到score的映射,这样就可以在O(1)时间内找到value对应的分数;

skipList按照从小到大的顺序存储分数

skipList每个元素的值都是[socre,value]对

2、redis的部署有哪些方案

3、redis list的数据结构是什么

当列表对象同时满足以下两个条件时,列表对象使用ziplist进行存储,否则用linkedlist存储

  • 列表对象保存的所有字符串元素的长度小于64字节
  • 列表对象保存的元素数量小于512个

4、redis支持哪些数据类型

5、redis的多路复用

6、redis的主从和哨兵模式有什么优缺点

7、redis的备份方式两种

8、redis分区概念

客户单分区 代理分区 查询路由

9、微信步数的缓存实现用什么数据类型

10、redis分布式锁的实现

11、删除策略?

12、string hash 的区别?哪个占用内存更多? string的sds了解吗

13、redis cluster 一致性hash是否了解过

java

1、stringbuffer和stringbuilder 的区别

2、如何实现一个线程安全的类似余stringbuffer

3、集合都有哪些?

4、list都有哪些实现?arrayList 和linkedList的区别 ?arrayList 快速扩容的方式

5、hashMap 插入数据的过程?hashMap是否线程安全?出现了哪些问题

6、concurrentHashmap(是否使用过安全的集合类举个例子)

7、优先级队列是否了解

8、synchronize锁?锁普通方法和静态方法的区别?对象头由哪些组成?

9、IO简单说说?NIO、BIO的区别

10、ThreadLocal是否了解?

11、volatile是否了解?做了什么?

12、共享变量如何处理?多线程操作volatile修饰的关键字?变量改动 会不会更新线程工作内存的相关内容

13、乐观锁解决什么问题

14、线程有谁支配调度

15、缓存一致性

推荐采用「先更新数据库,再删除缓存」方案,并配合「消息队列」或「订阅变更日志binlog」的方式来做

线程池相关

1、线程池的创建方式

2、线程池的参数介绍

3、线程池什么时候开启全部线程?怎么保证核心线程一直运行?有几种拒绝策略

6、线程池有很多请求怎么处理?重写拒绝策略

7、线程的几种状态

8、线程池的使用场景

spring相关

1、循环依赖怎么解决的

2、springmvc的请求流程

3、spring事务的实现

4、日志怎么打印的怎么处理的

5、synchronize 和lock、reentrantLock的区别

Lock不是Java语言内置的,synchronized是Java语言的关键字,因此是内置特性。Lock是一个类(java.util.concurrent(并发的).locks包),通过这个类可以实现同步访问

Lock是一个接口 ,ReentrantLock是唯一实现了Lock接口的类

ReentrantReadWriteLock实现了ReadWriteLock接口;

6、多个读一个写的缓存怎么实现 用什么

ReentrantReadWriteLock

7、controller线程安全的问题

8、service层的dto为什么序列化

9、事务失效

10、autowired 和resource区别

11、spring的bean初始化过程 beanPostProcesser是否了解

postProcessBeforeInitialization

实例化、依赖注入完毕,

在调用显示的初始化之前完成一些定制的初始化任务

postProcessAfterInitialization

实例化、依赖注入、初始化完毕时执行

12、BeanFactory和ApplicationContext的区别

ApplicationContext是BeanFactory的子接口

applicationContext一次性自动创建所有对象

BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化

jvm

1、jvm有哪些模块

2、jvm1.7和1.8有什么区别

JDK1.8和JDK1.7的jvm内存最大的区别是, 在1.8中方法区是由元空间(元数据区)来实现的,常量池移到堆中.

1.8不存在方法区,将方法区的实现给去掉了,而是在本地内存中,新加入元数据区(元空间).

3、频繁fullgc的优化方案

4、jvm垃圾回收期 cms的回收过程?g1

5、元空间和持久代的区别

6、简述虚拟机栈?栈帧是什么?

7、oom怎么快速定位问题

8、string在哪块内存里

9、堆的分代?分别使用了什么清理算法?什么时候开始垃圾回收

springCloud

1、用了哪些组件

2、eureka的实现和服务注册、治理?怎么实现注册的?心跳机制?和nacos的区别?

3、config的用法

4、feign的实现?feign 负载均衡的方案?轮询调度是什么 挨个询问然后循环 也可使用权重轮询调度

5、hystrix的熔断和降级?

6、hystrix怎么实现限流削峰?

7、zuul都做了什么?网关怎么配置限流

8、链路追踪

针对服务器的性能差异可分配不同的负载;

当需要将某个结点剔除时,只需要将其权重设置为0即可;

9、nginx的负载均衡和feign的负载均衡有啥区别

10、nacos和eureka如何实现高并发

nacos采用内存队列的方式进行服务注册

     也就是说客户端在把自己的信息注册到Nacos Server的时候,并不是同步把信息写入到注册表中的,而且采取了先写入内存队列中,然后用独立的线程池来消费队列进行注册的。

Eureka Server 注册表多级缓存设计

1)只读缓存

2)读写缓存

3)实际注册表

首先从ReadOnlyCacheMap里面查询缓存的注册表。

若没有,就找ReadWriteCacheMap里面缓存的注册表。

如果还是没有,就从内存中获取实际的注册表数据。

在注册表发生变更的时候:

会在内存中更新变更的注册表数据,同时过期掉 ReadWriteCacheMap

此过程不会影响ReadOnlyCacheMap提供人家的查询注册表

默认每30s Eureka Server会将ReadWriteCacheMap更新到ReadOnlyCacheMap里面

默认每180s Eureka Server将ReadWriteCacheMap里面数据失效

下次有服务拉取注册表,又会从内存中获取最新的数据了,同时填充各级缓存。

springboot

1、springboot自动装备的原理

mysql

1、innodb和myisam的区别

2、索引类型?

3、mysql 使用的索引结构?为什么使用b+树?什么情况下回表什么情况下不回表

4、慢sql的优化

5、索引失效的场景

6、mysql底层的日志

7、mvcc的实现

8、gapLock?解决了什么

gapLock+行锁 == next-key lock 解决了幻读

9、插入一条数据B+树产生了什么变化

10、mysql的隔离级别

读未提交内容(read-uncommitted)

读取提交内容(read-committed)

可重复读(repeatable-read)

可串行化(serializable)

rabbitmq

1、rabbitmq和kafka的区别

2、rabbitmq消息到队列的过程

3、几种模式?常用哪几种?应用场景?topic是否了解

4、怎么保证消息不丢失

5、rabbitmq的定时任务实现

6、rabbitmq的顺序消费

7、生产端使用什么方法发送到交换机

8、消息的幂等性?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值