java面试题一

1,什么是过滤器

回答:

过滤器(Filter),是 Servlet 规范规定的,在 Servlet 前执行的。用于拦截和处理 HTTP 请求和响应,可用于身份认证、授权、日志记录和设置字符集(CharacterEncodingFilter)等场景。

过滤器位于整个请求处理流程的最前端,因此在请求到达 Controller 层前,都会先被过滤器处理。

过滤器可以拦截多个请求或响应,一个请求或响应也可以被多个过滤器拦截。

2,什么是拦截器

回答:
拦截器(Interceptor),和Servlet无关,由Spring框架实现。可用于身份认证、授权、日志记录、预先设置数据以及统计方法的执行效率等。
一般基于 Java 的反射机制实现,属于AOP的一种运用。

 HandlerInterceptor 拦截器
HandlerInterceptor 类似 Filter,拦截的是请求地址,但提供更精细的的控制能力,这里注意下必须过DispatcherServlet 的请求才会被拦截。

它允许你在请求处理前、处理后以及视图渲染完成前执行自定义逻辑,可以用来对请求地址做一些认证授权、预处理,也可以计算一个请求的响应时间等,还可以处理跨域(CORS)问题。

简单的执行流程描述:

请求到达 DispatcherServlet,然后发送至 Interceptor,执行 preHandler;
请求到达 Controller,请求结束后,执行 postHandler。


3.Eureka和nacos和区别,介绍Eureka,怎么介绍,架构的时候怎么在这两个直接进行选择

回答:介绍:

 Nacos 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台。
 Eureka,springcloud的组件

Nacos主要提供了服务注册、发现、配置管理、动态DNS服务等功能。
而Eureka则主要关注于服务注册与发现

Nacos支持CP(一致性)和AP(可用性)两种模式,而Eureka只支持AP模式。
Nacos使用netty,是长连接;而Eureka是短连接,定时发送。

Nacos提供了统一的配置管理平台,可用于管理和动态更新分布式系统中的配置信息,如数据库连接、参数设置等。
而Eureka主要关注于服务注册与发现。

Nacos支持动态DNS服务,允许根据服务名动态解析到具体的IP地址,为服务调用提供更灵活的选择。
而Eureka在这方面的支持相对较少。

选择:
如果你只需要一个简单的服务发现和配置管理解决方案,那么 Eureka就可以了。
而如果你需要一个更全面的平台来管理你的应用,并且希望有更多的功能和灵活性,那么Nacos 更合适,
Nacos主要提供了服务注册、发现、配置管理、动态DNS服务等功能等。

4.mq主要的场景,

回答:主要三种功能
1,异步处理:场景说明:用户注册后,需要发注册邮件和注册短信
2,应用解耦 :场景说明:用户下单后,订单系统需要通知库存系统
3,流量削峰:秒杀活动,一般会因为流量过大,导致流量暴增,应用容易挂掉。为解决这个问题,一般需要在应用前端加入消息队列


5.使用分布式锁,注意什么

回答:使用redis分布式锁:
1、锁的一致性:在Redis集群中,锁的数据会被分布在多个节点上。由于网络延迟和节点间的数据同步延迟,可能会导致锁的一致性问题。
2、节点故障:Redis集群中的节点可能会发生故障,导致锁的不可用或丢失。当一个节点故障时,可能会导致锁的无法释放或锁的状态丢失,进而影响到其他客户端的锁获取和系统的一致性。
3、锁的有效期:在Redis集群中,由于数据分布在多个节点上,可能导致锁的有效期无法得到及时更新。

                        
6.rocketmq和rabbitmq的区别,怎么挑选

回答:

区别:
RabbitMQ: 基于AMQP(高级消息队列协议)构建,支持多种消息协议,如STOMP、MQTT等。
RocketMQ: 阿里巴巴开源,满足其大规模电商交易系统的需求,主要支持其自定义的灵活的消息模型

RabbitMQ: 适合于一般的消息队列需求,但在高吞吐量和大规模分布式系统场景下可能不是最优选择。
RocketMQ: 优化了高吞吐量和大规模集群的性能,特别是在阿里巴巴的电商交易场景中得到了验证

怎么选择:
RabbitMQ: 适用于需要多种消息协议支持和复杂路由功能的场景。
RocketMQ: 更适合于需要高性能、高吞吐量和大规模分布式系统的场景。


7.mysql怎么用事务保持数据的一致性(一个事务里查多个表,一个表成功,两个表失败,怎么保持数据一致性)
回答:

1,了解事务的ACID属性:一致性、持久性、原子性、隔离性,只有当前三条性质都满足了,才能保证事务的一致性。
2,要保证一个事务内操作多个表时的数据一致性,可以使用事务控制语句如BEGIN, COMMIT, ROLLBACK。
     当任何一个表的操作失败,应该立即执行ROLLBACK来回滚整个事务中的所有更改,以恢复到开始事务时的状态。


8.代码中用的设计模式,自己在代码中用的多的设计模式,举出场景

回答:
1,单例模式;配置管理器,线程池,缓存,IO 、数据库连接、Redis 连接等
2,观察者模式 事件监听,状态更新通知
3,模板方法模式,将相同部分的代码放在抽象的父类中,而将不同的代码放入不同的子类中

9.什么时候使用异步请求异步请求

回答:
长时间运行的任务:例如文件上传、复杂计算、大量数据处理等。
I/O操作:例如数据库查询、调用外部API、文件读写等。
资源密集型任务:例如图像处理、视频编码等。


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沐之白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值