上海回合肥年初面试第二天😐

60 阅读7分钟

哎呀呀 不喜欢视频面试 感觉线下面容易点

岗位职责:
1.负责Java平台的开发工作,包括但不限于设计、编码、测试、维护;
2.参与系统架构设计,优化系统性能,保证系统稳定运行;
3.根据项目需求,协同团队完成软件项目的开发与实施。
任职要求:
1.具备扎实的Java编程技能,熟悉Java相关框架;
2.具有良好的分析和问题解决能力,能独立完成模块的设计和开发;
3.良好的团队合作精神和沟通能力,能够高效配合团队完成开发任务;
4.具有持续学习的意愿,能够跟踪和学习新技术。

笔试题目

1.请说说用过springcloud哪些组件,这些组件分别有什么作用

gateway、zuul 网关
eureka 注册中心
nacos 注册中心、配置中心
Ribbon 负载均衡
Hystrix 服务容错
springcloudSecurity 安全机制
openfeign 服务间调用

2.springboot中自动装备机制的原理

SpringBoot项目中 @SpringBootApplication组合注解,这个注解是对三个注解进行了封装: @SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan

@EnableAutoConfiguration 主要负责自动装配功能

1.这个注解引入了@Import
2.项目启动加载IOC容器时,会解析@Import注解
3.@Import导入了一个deferredImportSelector导入器
4.然后读取所有的 META-INF/spring.factories文件
5.过滤出所有AutoConfigurtionClass类型(符合自动装配条件)的类
6.通过@Condition排除无效自动配置类
7.最后将过滤出的类导入spring容器中

@ComponentScan这个注解在Spring中很重要,它对应XML配置中的元素,@ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义,最终将这些加载到IoC容器中。

3.请说一下Netty中Reactor模式的理解

Netty 是基于 Java NIO 的异步事件驱动的网络应用框架

在Netty中,Reactor模式是高并发、高效能的网络通信模型的基础,它通过事件循环的方式,将I/O事件的监听和处理解耦,提高了系统的并发处理能力和响应性能。Netty通过灵活的 EventLoop、ChannelPipeline 和 ChannelHandler 等机制,使得Reactor模式在实际应用中更加高效、灵活和可定制化。

4.nacos是怎么推送配置到本地的?新增和修改有区别吗?

Nacos 通过 ​​长轮询(Long Polling) + 事件监听​​ 实现配置实时推送,核心流程如下:

  1. ​客户端注册监听​
    启动时,客户端向 Nacos 服务端订阅特定配置(通过 Data ID + Group 标识),服务端记录监听关系。

    • ​新增配置​​:服务端插入新配置记录,触发监听器推送。
    • ​修改配置​​:更新配置内容后,立即通知所有订阅该配置的客户端。
  2. ​长轮询推送​
    客户端发起长轮询请求,服务端保持连接直至配置变更或超时(默认 30 秒)。一旦有变更,服务端返回新配置数据。 收到推送后,客户端校验配置完整性(如 MD5 哈希值),若一致则更新本地缓存,并触发业务监听回调。

  • ​一致性​​:客户端校验配置哈希,避免脏更新。
  • ​高效性​​:仅传输增量内容,减少网络开销。

通过这一机制,Nacos 确保配置变更快速、可靠地同步到客户端。

新增配置:如果是新增配置项,客户端会接收到一个全新的配置,不会与任何旧的配置进行对比。
修改配置:如果是修改配置项,客户端会收到配置内容的更新,通常会比对新旧配置,如果是值的更新,客户端会更新本地的值。

5.如何提升RocketMQ顺序消费性能?

6.线上问题排查MQ消息队列消息堆积问题排查和解决思路?

消息堆积问题的解决需从 ​​生产端、消费端、MQ服务端​​ 三方面综合排查,重点关注 ​​速率匹配、资源瓶颈、异常处理​​。
核心原则:
​​快速止损​​:通过扩容、限流、隔离恢复业务。
​​根因分析​​:结合监控与日志定位性能或逻辑缺陷。
​​架构优化​​:通过异步化、批处理、弹性设计预防复发。

生产者
生产者限流:通过令牌桶算法控制发送速率。

MQ
设置消息过期时间(TTL),防止无效消息长期堆积。
清除不重要消息

消费者
扩容消费者

7.分布式锁的几种实现方式

数据库唯一索引(悲观锁\乐观锁)
redis setnx
Redisson

8.ribbon和feign的区别

特性RibbonFeign
主要功能客户端负载均衡声明式 HTTP 客户端,简化服务间通信
核心作用选择合适的服务实例进行请求简化服务调用,自动发起 HTTP 请求并返回响应
是否需要手动处理请求需要手动处理 HTTP 请求和响应,负载均衡仅仅是功能之一不需要手动处理 HTTP 请求和响应,自动封装请求过程
负载均衡需要与其他工具(如 RestTemplate)配合使用负载均衡自动集成 Ribbon,提供负载均衡功能
使用复杂度较高,需要手动编写和管理请求较低,通过接口和注解来声明服务调用
与 Ribbon 的集成需要手动集成负载均衡策略自动集成 Ribbon,简化了负载均衡配置
适用场景自定义服务调用,负载均衡处理复杂的业务逻辑简化的服务调用,适用于微服务间的 HTTP 请求

9.线上的API接口响应比较慢,该如何快速排查和定位问题?

1.监控工具和日志分析
2. 网络性能
3. 数据库性能
4. 缓存使用
5. 代码层面分析
6. 负载均衡和高可用
等等

10.如何设计一个高效的缓存系统?

设计一个高效的缓存系统需要综合考虑 ​​命中率、延迟、容量、一致性、扩展性​​ 和 ​​容灾能力

面试题目

1.kafka消息是有序的吗

分区内有序
跨分区无序

2.如何保证有序

确保顺序性时,通常的做法是确保同类型的消息发送到同一个分区。

3.乐观锁及其原理

CAS操作有三个参数:

  1. 内存地址(V) :表示要操作的内存位置或变量。
  2. 旧值(A) :预期当前内存位置的值。
  3. 新值(B) :如果当前值等于旧值A,则将内存位置的值更新为B。

CAS的工作步骤如下:

  1. 比较:将当前内存地址的值(V)与旧值A进行比较。
  2. 交换:如果V与A相等,则将V更新为新值B;如果V与A不相等,则不进行更新,返回操作失败。

CAS的操作流程

  1. 获取当前内存地址的值V。
  2. 如果V等于预期的旧值A,就将内存地址的值V更新为新值B。
  3. 如果V不等于A,表示有其他线程已经修改了该值,操作失败,返回一个失败的状态。
  4. 需要重新尝试进行CAS操作,直到成功为止。
CAS是实现高效并发控制的基础机制,利用硬件支持的原子操作来替代传统的锁机制,从而提高并发性能。尽管CAS在许多场景中表现出色,但也存在一些问题,如ABA问题和自旋锁的性能问题,使用时需要根据具体的应用场景来考虑如何解决这些问题。

4.秒杀怎么设计

其他不记得了