微服务面试题之套路一

news/2024/7/4 7:46:56 标签: 微服务, 架构, 云原生, java, 面试题

面试题

一、你的项目是从SpringBoot演进到微服务架构的,你在此过程中有调研过哪些技术,怎么调研落地的?

微服务通信框架:

需要选择适合项目的微服务通信框架,如Dubbo、Spring Cloud或gRPC Feign RestTemplate 等。调研方式可以是通过官方文档、技术交流社区和开源项目等途径了解各个框架的优缺点,并根据项目需求进行选型。

容器化技术:

为了更好地管理微服务,需要将每个服务打包成容器镜像,如Docker等。调研方式可以是通过官方文档、技术交流社区和实践案例等途径了解Docker的使用方法和最佳实践,并学习如何将Spring Boot应用打包成Docker镜像。

服务注册与发现:

微服务架构中的服务数量众多,需要通过服务注册与发现来定位和调用其他服务。调研方式可以是通过官方文档、技术交流社区和开源项目等途径了解ZooKeeper、Eureka或Nacos 等服务注册与发现框架的原理和使用方法。

分布式事务:

微服务架构中,需要保证事务的一致性和可靠性。调研方式可以是通过官方文档、技术交流社区和开源项目等途径了解Seata、Atomikos或Spring Cloud Transaction等分布式事务框架的原理和使用方法。

监控和日志管理:

微服务架构中的系统复杂度较高,需要对各个服务的性能和异常情况进行监控和日志管理。调研方式可以是通过官方文档、技术交流社区和开源项目等途径了解Prometheus、Grafana、Logstash或Kibana等监控和日志管理工具的原理和使用方法。

Api网关

Api网关是微服务架构中的重要组件 Zuul \ Gateway 等 我会部署一个Api网关 所有的外部请求都会先经过API 网关 再由Api 网关路由到相应的服务器. 以上是将SpringBoot项目演进到微服务架构过程中需要调研和落地的一些技术,调研方式包括官方文档、技术交流社区和实践案例等途径。在调研过程中需要根据项目需求和项目人员进行选型,并结合实际情况进行实践和调整。

二、 如何通过啥工具来查看分析一个接口中每个部分的耗时

分布式追踪系统:

像Zipkin、Jaeger、SkyWalking等分布式追踪系统可以帮助你追踪一个请求在系统中流转的情况,包括每个部分的耗时。这些系统通常需要你在代码中集成相关的库,然后它们就可以自动收集和上报追踪数据。

APM工具:

应用性能管理(APM)工具,如New Relic、Dynatrace、AppDynamics等,可以提供全面的性能监控和分析,包括接口耗时、数据库查询耗时、外部服务调用耗时等。

Profiler工具:

像JProfiler、YourKit等Profiler工具可以帮助你分析Java应用的性能,包括方法调用的耗时。这些工具通常需要你在启动Java应用时加入相关的参数,然后它们就可以收集和展示性能数据。

Spring Boot Actuator:

如果你的应用是Spring Boot应用,那么你可以使用Spring Boot Actuator的/metrics端点来查看一些基本的性能数据,包括接口的请求次数、平均耗时等。

日志分析工具:

如果你的应用将详细的日志(包括接口调用的开始时间和结束时间)输出到文件或者发送到日志服务,那么你可以使用日志分析工具,如ELK(Elasticsearch、Logstash、Kibana)堆栈,来分析日志,从而得到接口的耗时

三、 如果一个接口性能比较差,你该如何进行优化,请说明思路以及实施路径

排查接口执行慢,可以从以下角度考虑:

  1. 看是否有慢sql,如果有慢sql ,可以根据情况选择合适的索引。如果已经有索引,看索引是否失效
  2. 看是否有使用缓存
  3. 看是否可以使用异步,异步的方式可以根据具体情况选择多线程或者消息队列
  4. 看是否有用到大事务,如果有,需要将事务进行拆分
  5. 看代码业务逻辑,是否可以进行预处理,比如某个数据在多个地方用到了,可以先提前算出来
  6. 串行改并行,比如有a,b,c三个子接口,c接口需要依赖a的结果,b接口完全独立。那么可以将a,c和b分为两组,并行执行
  7. 看设计是否合理,比如某个接口,数据可以直接查出来,产品却搞了一堆配置。这种情况可以和产品沟通,是否有必要改需求。

四、你有没有进行过架构设计,架构设计需要考虑哪些方面,你是如何去实施的?

  1. 需要考虑;从承接的需求开始,分析项目。
  2. 系统分解:将整个系统分解为可管理的部分,通常是服务或模块,以便于理解、开发和测试。
  3. 组件选择:选择合适的软件和硬件组件,包括数据库、中间件、服务框架、前端框架等。
  4. 技术栈选择:根据项目需求和团队技能选择合适的技术栈。
  5. 可扩展性:设计时要考虑系统未来的扩展,包括水平扩展(增加更多的节点)和垂直扩展(增强单个节点的能力)。 性能:确保系统设计能够满足性能要求,包括处理速度、响应时间、吞吐量等。
  6. 可靠性和容错性:系统应该能够处理各种错误情况,并且在出现部分故障时仍能保持运行。
  7. 安全性:保护系统免受未授权访问和攻击,确保数据的安全和隐私。
  8. 可维护性和可测试性:设计应该便于未来的维护和升级,同时也要便于测试。

五、 如果一个程序的内存占用过高你该如何去分析呢?

可以基于监控工具进行全链路排查,查看QPS、TPS、瞬时峰值,用户规模等。之后在针对性的分析具体的系统流程。之后结合工具 JProfiler(一般全链路监控工具是有集成的)之后就可以看到具体的内存高的代码片段,在做分析和验证处理

六、nacos 注册中心怎么判断服务端已经崩溃了?

Nacos作为注册中心,通过心跳机制来检测服务实例是否存活。每一个注册到Nacos的服务实例,都会定期向Nacos发送心跳包,表明它们的存在。默认情况下,这个心跳间隔是5秒,也就是说每5秒,服务实例就会向Nacos发送一次心跳。

如果Nacos在15秒(默认配置,也就是3个心跳周期)内没有收到某个服务实例的心跳,那么Nacos会认为这个服务实例已经下线或者崩溃,然后从服务列表中移除这个服务实例。

这个心跳间隔和超时时间都可以在Nacos的配置中修改。如果你的服务实例在高负载下运行,或者网络状况不稳定,可能需要增大这些值以避免误判。

需要注意的是,这个机制只能检测服务实例是否能够正常响应心跳,不能判断服务实例是否能够正常提供服务。如果一个服务实例虽然能够发送心跳,但是由于某种原因无法正常处理请求,那么这个服务实例仍然会被Nacos认为是存活的。在这种情况下,可能需要额外的健康检查机制来判断服务实例的状态。


http://www.niftyadmin.cn/n/5403409.html

相关文章

计算机网络知多少-第1篇

一、 从输入URL到页面展示到底发生了什么? 1. 首先浏览器会查看电脑本地缓存,如果有直接返回,否则需要进行下一步的网络请求。 2. 在网络请求之前,需要先进行DNS解析,来找到请求域名的ip地址。如果是HTTPS请求&#…

面试——Java垃圾回收算法和垃圾回收器

Java垃圾回收算法: Java垃圾回收算法是Java虚拟机的关键组成部分,它负责自动管理内存并回收不再使用的对象。 标记-清除算法: 标记-清除算法分为两个主要阶段。首先,它会遍历整个堆,标记所有被活动对象引用的对象&…

【MCAL】TC397+EB-tresos之CAN配置实战 - (CAN/CANFD)

本篇文章介绍了在TC397平台使用EB-tresos对CAN驱动模块进行配置的实战过程,不仅介绍了标准CAN的发送与接收,还介绍了CANFD的实现与调试以及扩展帧的使用。M_CAN是德国博世公司开发的IP,因为英飞凌的芯片完整的集成了这个IP,所以整体的配置都比…

EchoServer回显服务器简单测试

目录 工具介绍 工具使用 测试结果 工具介绍 github的一个开源项目,是一个测压工具 EZLippi/WebBench: Webbench是Radim Kolar在1997年写的一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的…

2、云原生安全之可视化界面rancher的部署

文章目录 1、rancher的部署1.1、安装rancher1.2、配置k8s2、部署helm3、容器安全工具neuvector此时已经部署好了k8s,使用rancher来管理 rancher简化了使用k8s的流程,可以图形化管理k8s。 参考: https://blog.51cto.com/u_15343792/5000311https://docs.rancher.cn/docs/ra…

机器学习---迁移学习方法

1. 问题形式化 迁移学习的问题形式化,是进行一切研究的前提。在迁移学习中,有两个基本的概念:领域 (Domain) 和任务 (Task)。它们是最基础的概念。 1.1 领域 领域 (Domain): 是进行学习的主体。领域主要由两部分构成:数据和生…

Vue+ElementUi实现菜单循环

1. 在Sider.vue中调用组件&#xff0c;并将在vuex中获取到的菜单数据以传值的方式传入封装组件中 <template><el-menu:default-active"$route.path"class"el-menu-vertical-demo"routerbackground-color"#011528"text-color"#fff…

Django后端开发——中间件

文章目录 参考资料中间件注册中间件settings.pymiddleware/mymiddleware.pymysite3/views.pymysite3/urls.py 练习 参考资料 B站网课&#xff1a;点击蓝色字体跳转 或复制链接至浏览器&#xff1a;https://www.bilibili.com/video/BV1vK4y1o7jH?p39&vd_source597e21cf34f…