2024面试题(总结2023年4次面试,三年工作经验外包)

2024面试题(总结2023年4次面试,三年工作经验外包)


在这里插入图片描述

1. springboot读取配置的方式

@Value注解, @ConfigurationProperties注解, @Environment类

2.springboot核心配置文件有哪些

application.properties和yml

3.redis有哪些好处

1,支持缓存
2,支持持久化
3,支持分布式锁

4.redis持久化机制

redis的持久化机制分为rdbaof混合持久化
1.rdb是以快照方式存储,通过配置文件的save(M,N),设置在M秒内进行N次改动,就会以快照形式存储在dump.rdb文件当中,同时rdb在写入时用到了linux的写时复制技术,redis会分出一个线程去做写操作;
缺点:rdb在每次写入数据时会将所有内存数据生成一份文件然后替换掉原来的文件,这在数据量很大的时候频繁生成会消耗很大
如果把生成快照的策略设置的不合理的话,在宕机的时候会造成数据丢失
优点:dump文件是二进制文件,在进行数据恢复的时候速度会很快
2. aof是将写入的命令存储,在存储的时候会先写入缓存中,然后通过刷盘去把新的命令存储到appendonly.aof当中,通过策略可以设置每次执行进行刷盘或者每一秒进行刷盘,如果文件大小超过设置值或者手动重写后,会将文件添加到缓冲区中,然后再将缓冲区的内容同步到磁盘当中。
优点:数据安全性高
缺点:恢复速度满,占用存储空间大
3. redis4.0混合持久化,会在aof写入这一刻之前的内存做rdb快照处理,然后把快照和aof命令存储在同一个文件当中,这样在恢复数据的时候可以先执行rdb快照,然后再把增量的aof命令执行

5.负载均衡

学习路径
ribbonnginx
ribbon从注册中心获取服务列表,默认轮询调用,用于客户端间调用时的负载均衡;
nginx反向代理,接收所有请求并分发
1.分摊服务器压力,增强性能
2.单个或多个链路故障也不会导致业务中断
分发方式有:轮询、随机访问、加权轮询等

6.雪崩

大量缓存在同一时间同时失效,导致请求直接访问数据库

7.网关架构有哪些

gateway、nginx等

8.zookeeper了解过吗

ZooKeeper 的作用就是提供无单点问题的分布式协调服务
节点以树结构存储,watch监听机制。
集群管理:通过临时节点和watch监听机制,管理节点的运行状态,节点服务器在宕机后,节点因为是临时节点也会删除。
发布/订阅:watcher机制实现发布订阅功能,例如将配置发到配置节点中,其他机器可以通过监听节点变化去实现配置更新。
分布式锁:排他锁,会创建名为lock的节点;共享锁,回创建节点,只允许其他进行读操作,读写操作都会存在一个节点下,读是R,写是W来区分

9.openfeign

学习路径
openfeign是一个HTTP请求的轻量级框架,封装了ribbon,在feign的基础上支持springMvc注解,识别并加载有@RequestMapping注解的方法,默认实现负载均衡效果,使代码更简洁

10.RestTemplate

学习路径
spring提供的访问rest客户端工具,简化与Http服务的通信过程,基于JDK的HttpUrlConnect,可以通过方法设置其他通信协议;

11.fengn是怎么实现的

框架会扫描所有加了@FeignClient的接口,每个接口会生成一个动态代理对象,由对象调用服务;

12.springBoot自动配置原理

学习路径
@SpringBootApplication
包括
  @SpringBootConfiguration 重新封装的配置类内有
  @Configuration
   @EnableAutoConfiguration
   开启自动配置注解内有
    @Import(AutoConfigurationImportSelector.class) 扫描所有jar下的META-INF/spring.factories,包装成对象,加载到容器
    @AutoConfigurationPackage
    包括
     @Import(registrar.class) 扫描springBootApplication包下的所有组件,例如@Entity(ComponentScan扫描@Controller等)
  @ComponentScan 扫描注册类

13.spring用到了哪几个设计模式

工厂模式、单例模式、代理模式等

14.redis有几种数据类型

string、hash、set、zset、list

15.redis键过期了还会占用内存吗

redis同时使用了定期删除惰性删除两种策略,过期后不会立即删除,会定期删除,或者会在访问后删除

16.redis三重策略

rdb、aof、混合

17.redis雪崩、缓存穿透

雪崩:key同时大面积失效,导致访问直接落在数据库上 解决办法:过期时间设置随机
穿透:内存和数据库都没有数据,导致访问直接请求数据库 解决办法:在数据库查不到数据的时候缓存存默认值

18.mysql失效情况

1.varchar类型字段作为索引字段,查询条件没有加引号,int类型字段可以,在传参时会进行隐式转换
2.like关键字查询时%在前时
3.用or关键字时,前后有字段不加索引时
4.in的查询结果大于数据库百分之50时会失效
5.order by 没有加limit或者where时

19.mysql在like什么情况不会失效

%在右边时

20.spring事务有哪些

事务的传播方式
事务的隔离规则
事务的回滚规则

21.spring事务传播行为

1.如果当前存在事务,就加入,如果没有就创建事务
2.如果当前存在事务,就加入,如果没有就以非事务方式运行
3.不管当前有没有事务,都创建一个新事务
4.如果当前有事务,就把当前事务挂起,以非事务方式运行

22.分布式事务怎么做的

学习路径
seata
AT模式
基于支持ACID的关系型数据库
一阶段-准备:在执行sql语句前,会通过查询语句查出需要修改数据的前镜像,再执行sql语句,查询一个后镜像,最后会把前后镜像,以及执行的sql语句组成一个回滚语句,存在undolog表里。最后在提交事务前,会获取修改数据行的全局锁。获取成功的话,会将数据执行结果和undolog一起提交给TC;
二阶段-回滚:收到回滚请求,根据ID查出对应的UNDO LOG,将数据与UNDO LOG表中的后镜像做对比,如果不一样的话会回滚。
二阶段-提交:收到提交请求,将请求放在一个异步队列里,马上返回一个提交成功的结果给TC;在异步提交请求时,也会删除数据对应的UNDO LOG文件
TCC
不依赖底层数据源,自定义准备、回滚、提交操作
Saga模式
用于长事务场景,通过状态图定义服务调用流程,并生成对应的json文件,json文件由状态机引擎执行,当流程出现需要回滚的情况时,会依次反向执行节点对应的补偿节点进行回滚。

23.sql优化做过吗

学习路径
execute explain

24.spring boot中有很多starter是做什么的

1.starter就是springboot自动装配的具体实现
2.整合了组件的相关依赖,直接引入starter依赖
3.注册了sqlsession等,减少了配置项
4.自动扫描注册了mapper

25.分页怎么实现的

pageutil或mybatis框架Ipage或pagehelper,这些都是物理分页,用拦截器在在sql做处理
mybatis四大对象,Excutor执行器,statmenthandler执行语集,parameterHandler参数处理器,resultsetHandler结果处理器
Excutor是mybatis处理器,调度中心
StatementHandler 封装了JDBC Statement,负责收集sql并且执行
ParameterHandler 负责把用户传递的参数转换成JDBC Statement需要的参数
TypeHandler 负责java数据类型和JDBC Statement数据类型之间的转换

26.pageinfo怎么屏蔽不同数据库差异的

mybatis通过拦截器执行,遇到不同语法时也是按相同方法拦截并执行

27.springmvc的处理过程

1.用户发送请求到前端处理器
2.前端处理器收到请求后调用处理器映射器
3.处理器映射器根据url找到对应的处理器,生成处理器对象,并返回给处理器映射器
4.前端控制器通过处理器适配器,调用处理器,返回modle和view给前端控制器
6.前端控制器将modleandview传给视图解析器,解析后返回具体视图

28.在过程中有哪些扩展点可供程序员扩展

springMVC拦截器HandlerIntercepter,实现这个接口,可以在处理器处理请求前、后,或者前端控制器渲染视图后进行拦截处理。

29.sql是在什么地方封装的

在最开始时封装的,Excutor把一个个select封装进MappedStatement里
1.mybatis基于xml文件生成configuration和一个个MappentStatement
2.SqlSessionaFactory根据configuration生成sqlsession
3.sqlsession在mybatis生成的Configuration中找到对应的MappedStatement对象执行操作
4.之后生成一个StatementHandler,通过调用ParemeterHandler的方法设置参数,调用ResultsetHandler转换结果

30.多线程开发都会用到哪些工具类

TheadPoolExecutor,Thead,Runable,Callable(可以返回执行结果)### 怎么去创建一个线程池

31.多线程里面是如何保证线程安全

构建线程安全的类,或者扩展一个线程安全的类,使用并发容器,或者同步容器,对于非线程安全的类,可以考虑使用锁和监视器模式

32.TherdLocal有用过吗

线程间隔离,线程内共享

33.zookeeper用于那些场景其他场景

1.配置中心
2.分布式锁
3.命名服务
4.集群管理

34.zookeeper怎么去保证一致性

通过主节点来处理客户端的请求,然后通过算法将数据变更传给其他节点
1.全局串行化所有的写操作
2.保证同意客户端的指令被FIFO执行

35.mysql主从同步

1.可以保证主节点故障后,可以使用从节点,保证服务可以立即使用。
2.可以读写分离提高效率,让主库负责写,从库负责读。
3.可以多保存一份数据,数据不丢失。

36.解释什么是回表查询

在用普通索引进行查询时,会在普通索引这张表,通过索引值查到对应主键,然后通过查出的主键,在聚簇索引表里查出对应数据。

37.什么场景会使用redis

用户登录信息、短信、码值的翻译

38.这种缓存需要持久化吗

用户登录信息需要持久化

39.为什么要持久化(

码值不需要持久化,用户登录需要持久化,重启后登陆状态能够保留)

40.传输协议有了解过吗

41.jdbc访问数据库底层有了解过吗

在规范中主要包括 Connect,Statment,Resultset 三种接口
分为 加载阶段 建立连接阶段 数据访问阶段
加载阶段:将驱动实例加载到DriverMannage里
建立连接阶段:DriverMannage根据接收到的url地址选择合适的数据库驱动,最终由数据库驱动程序实例链接数据库。
数据访问阶段:进行真正的数据库操作,通过创建statement和resultset对象以及调用这些对象的方法来实现

42.查日志需要哪些命令

通过grep命令查关键字查出日志的tid
vi命令进入文件,通过tid找到文件所在位置

43.HSF

分布式RPC框架,结构上分为:提供者、消费者、注册中心、配置中心、HSF控制台

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值