第33周JavaSpringCloud微服务 面试题

一、项目面试

面试中介绍项目的方法

在面试过程中,若被问及相关项目,为提升通过几率,应着重介绍项目的功能点和架构升级内容。确保将项目的亮点讲透讲精彩,这对获取 offer 至关重要。

1. 项目架构

项目整体架构概述

项目整体架构由多个层次构成:

  • 系统入口层 :分为 C 端(前台)供顾客使用和 B 端(后台)供管理员使用。
  • 接入层 :包括网关以及 user filter 和 admin filter 进行权限校验。对于完全开放的内容(如商品详情),可能无需经过过滤器。
  • 业务层 :涵盖订单、商品、目录、购物车、用户、广告等功能模块。这些功能可通过框图方式清晰表达。
  • 基础设施层 :包括所使用的组件和存储设备,如 MySQL、Redis、MQ 以及文件存储等。
  • 通用能力和通用功能 :通用能力包括日志记录、异常处理、定时任务、权限整体校验、参数校验以及文件上传等。通用功能则涵盖图片处理、Excel 处理以及二维码生成等。

重点亮点 :整个项目架构图展示了丰富的功能、通用能力和通用功能,以及清晰的基础设施和业务层划分。在面试中展示此架构图,可体现开发经验和整体理解能力,是项目面试中的一大亮点。建议考生截图并尝试自行绘制,以确保熟悉并掌握架构图的各个部分。

2. 架构演进

项目面试中的架构演进亮点

  • 单体变微服务

    • 最初采用 spring boot 单体项目。
    • 为实现模块间解耦,升级为 spring cloud 微服务架构,并学习 spring cloud 各模块间的通信机制。
  • 用户权限校验升级

    • 初始使用传统的 session 和 cookie 模式进行用户权限校验。
    • 后续升级为 jwt 验证方式。需了解 jwt 的定义、组成部分、优点及缺点。
  • 网关升级

    • 最初使用旧网关。
    • 现已迭代至 spring cloud gateway 网关。升级过程中解决了过滤器定义、新网关下身份验证、筛选排除及原网关升级等问题。

3. 项目亮点

本项目技术亮点包括:

  • 线程池的使用

    • 线程池是面试中的必考点,适用于初级至高级工程师。
    • 在发送邮件时,为提高初始发送速度,采用线程池进行异步发送。需掌握线程池各参数的含义。
  • 分布式锁的应用

    • 在执行定时任务时,为防止多个实例同时执行,使用分布式锁。
    • 本项目采用 Redis 实现分布式锁,需理解其背后原理。
  • 分布式事务的引入

    • 单体事务相对简单,但分布式环境中问题增多。
    • 由于架构升级和微服务拆解,原单机事务无法满足需求,因此引入分布式事务。

以上三点是项目面试中的加分项,涵盖了整体架构、架构演进过程及独立亮点。

二、常见问题解答

1. 文件路径映射

有学生提出关于文件路径映射的疑问,即不理解为何在网页中输入地址即可打开图片。其映射机制是在 mvc config 类中配置了 URL 的映射规则。具体为,若 URL 中包含 image 路径,则将其映射至指定的 file 路径。该 file 路径为文件夹地址,需根据个人实际情况进行配置。

2. 远程调用校验管理员身份方法

我们之前会有一个 check admin row 这样的方法。有同学提出,这个时候是否需要用到远程调用?远程调用是否成本较高?是否可以直接引入 user service,然后直接使用 service 进行校验?

实际上,如果直接使用 service,会导致耦合性过强。因为与用户相关的功能,应尽量交由用户模块处理。例如,校验管理员身份这一功能,发生在 cut order 购物车订单模块中。最好的办法不是直接引入 user service,否则可能又回到单体架构上。最佳实践是,需要用到用户模块的功能时,通过接口调用其提供的服务。这样,后续无需关心其具体实现,即使用户模块逻辑发生改动,也仅是该模块内部的事务,与其他模块无关。因此,最优方案并非直接引入相关 service。

3. 连接本地端口问题

六三七九端口连接报错问题:

  • 报错原因 :六三七九是 Redis 的默认端口,若遇到无法连接到此端口的错误,很大概率是本机未启动 Redis 服务。
  • 项目运行依赖 :项目运行不仅依赖于 Redis,还包括其他服务如 MQ 等,这些服务均需正确下载、安装、配置并启动。
  • 数据库配置 :若不进行数据库配置,项目将无法启动,因为数据库是项目运行的必要依赖。
  • 微服务环境依赖 :在微服务环境下,若未启动 Eureka 作为注册中心,服务虽然可以启动,但会不断报错,提示找不到注册中心。

总结 :项目运行不仅依赖于 JAVA 代码,还需确保所有相关服务和依赖均正确配置并启动。

4. 日志查看问题

  • 配置基础设施 :是必需的准备工作。
  • 学会查看日志 :是提高问题排查能力的关键。
  • 错误日志的重要性 :错误日志是查找问题原因的重要依据。在大多数情况下,错误都会在日志中清晰记录,无论是六三七九错误还是无法找到相应数据库的问题。错误日志会提供关键信息。
  • 自我尝试解决问题 :有助于能力提升和获得成就感。如果日志难以理解,可以将相关日志复制到网站进行搜索,通常能找到其他遇到相同问题并分享解决思路的用户。建议学习者在遇到问题时,首先尝试自行解决,通过查看日志或搜索日志内容来找到解决方案。

三、总结

Spring Cloud 电商进阶开发总结

  • 定时任务的学习与应用 :掌握了 cron 表达式的写法,并在 Spring 中实现了定时任务。实现了定时捞取超时订单并批量关闭的功能。为定时任务添加了分布式锁以增强稳定性。
  • 线程池与 ThreadLocal 的使用 :在项目中应用了线程池来实现异步发送邮件。增强了路由的安全性,排除了不希望用户访问的接口。对异常进行了统一处理,提升了项目的健壮性。
  • Spring Cloud Gateway 的学习与思考 :重点不仅在于如何使用 Spring Cloud Gateway,更在于项目开发中的思考。当切换网关或验证方式从 session 升级到 jwt 时,需要编写 gateway 相关配置。在微服务代码中,需调整以解除 session 依赖,并调整相关费用逻辑为 user free local。
  • 项目面试相关内容 :介绍了项目架构、演进过程及项目亮点。助力面试者提升面试表现,争取更高分数。
  • 课程问题解答 :对 Spring Cloud 课程中常见问题进行了解答,帮助学习者巩固知识点。
相关推荐
abin在路上40 分钟前
Golang 版本导致的容器运行时问题
云原生·golang·containerd
sinat_2622921143 分钟前
Java面试实战:谢飞机的求职记 - Spring Boot、Redis与微服务技术问答解析
java·spring boot·redis·微服务·分布式事务
爱的叹息3 小时前
基于 DeepSeek大模型 开发AI应用的理论和实战书籍推荐,涵盖基础理论、模型架构、实战技巧及对比分析,并附表格总结
人工智能·架构
喝拿铁写前端3 小时前
从列表页到规则引擎:一个组件封装过程中的前端认知进阶
前端·vue.js·架构
元气满满的热码式3 小时前
K8S节点出现Evicted状态“被驱逐”
云原生·容器·kubernetes
张力尹4 小时前
「架构篇 1」认识 MVC / MVP / MVVM / MVI
android·面试·架构
张力尹4 小时前
「架构篇 2」认识 MVC / MVP / MVVM / MVI
android·面试·架构
天天扭码4 小时前
RESTful API 接口设计小白入门:从概念到实战全解析
面试·架构·restful
老马95275 小时前
8.snail-job的重试任务
后端·架构