当前位置: 首页 > article >正文

微服务面试资料1

在当今快速发展的技术领域,微服务架构已经成为构建复杂系统的重要方式之一。本文将围绕微服务的核心概念、技术栈、分布式事务处理、微服务拆分与设计,以及敏捷开发实践等关键问题展开深入探讨,旨在为准备面试的
Java 开发者提供一份全面的复习指南。

一、微服务架构:理解与权衡

微服务架构是由 Martin Fowler 提出的一种架构风格,它通过将大型单体应用划分为多个小型服务单元,从而降低系统的整体复杂度。每个微服务都可以独立部署和扩展,且可以使用不同的技术栈来实现。这种架构风格在近年来得到了广泛的应用,尤其是在大型互联网企业中。

微服务的优点

  1. 灵活的部署方式:每个微服务都是一个独立的项目,可以独立部署,无需依赖其他服务,大大降低了耦合性。
  2. 技术栈的灵活性:在大型单体应用中,技术更新往往非常困难,而微服务可以根据业务特点灵活选择合适的技术栈。
  3. 性能提升:大型单体应用启动时常常面临性能瓶颈,而微服务架构通过将系统拆分为多个小型服务,能够有效提高系统的性能。
  4. 团队协作的便利性:在单体应用中,团队成员需要对系统的各个部分都有深入的了解,而微服务架构允许组建专门的团队负责特定的服务,降低了团队协作的门槛。
  5. 代码复用性:许多底层服务可以通过 REST API 的方式对外提供统一的服务,这些基础服务可以在整个微服务系统中通用,提高了代码的复用性。

微服务的缺点

尽管微服务架构带来了诸多好处,但它也并非没有缺点。首先,服务调用的复杂性显著提高,网络问题、容错问题、负载问题以及高并发问题都需要特别关注。其次,分布式事务的处理变得更加复杂,尽量避免使用微服务事务。此外,测试难度也有所提升,因为需要测试多个独立服务之间的交互。最后,运维难度大幅增加,单体架构只需要维护一个环境,而微服务架构需要维护多个环境,且每个环境的运维方式可能都不相同。

二、Spring Cloud 与 Spring Cloud Alibaba:微服务的技术基石

Spring Cloud 是一个强大的微服务框架,它提供了一组通用的开发模式和工具,用于构建微服务系统。Spring Cloud NetFlix 和 Spring Cloud Alibaba 是 Spring Cloud 的两个重要实现,它们分别提供了不同的组件来解决微服务架构中的各种问题。

Spring Cloud NetFlix

Spring Cloud NetFlix 是 Spring Cloud 的早期实现,它基于 Netflix 的开源组件构建。其主要组件包括 Eureka(服务注册与发现)、Ribbon(客户端负载均衡)、Hystrix(断路器)、Feign(声明式服务调用)和 Zuul(网关)。这些组件共同解决了微服务架构中的服务治理、容错、负载均衡和网关等问题。

Spring Cloud Alibaba

随着阿里巴巴在微服务领域的贡献,Spring Cloud Alibaba 应运而生。它集成了阿里巴巴开源的组件,如 Nacos(服务注册与发现、配置中心)、Sentinel(限流、熔断)、RocketMQ(消息中间件)和 Dubbo(高性能 RPC 框架)。Spring Cloud Alibaba 提供了更加丰富和强大的功能,特别是在服务注册与发现、配置管理、限流熔断等方面表现出色。

三、分布式事务处理:一致性保障

分布式事务是微服务架构中一个重要的问题,它要求在不同节点上的事务操作能够提供操作原子性保证,要么全部成功,要么全部失败。分布式事务的核心在于在原本没有直接关联的事务之间建立联系。

常见的分布式事务解决方案

  1. HTTP 连接:最大努力通知,通过事后补偿来实现事务一致性。
  2. 消息队列(MQ):通过事务消息机制来保证分布式事务的一致性。
  3. Redis:可以定制出分布式事务机制,利用 Redis 的事务特性来实现。
  4. Seata:通过 TC(事务协调器)在多个事务之间建立联系。Seata 提供了多种事务模式,如两阶段提交(AT、XA)、补偿事务(TCC)和事件驱动事务(SAGA)。

事务模式详解

  • 两阶段提交(AT、XA):通过锁定资源来保证事务的一致性,但可能会导致资源占用时间过长,影响系统性能。
  • 补偿事务(TCC):在两阶段提交的基础上增加一个准备阶段,准备阶段不锁定资源,从而提高了系统的性能。
  • 事件驱动事务(SAGA):类似于熔断机制,由业务逻辑实现正向操作和补偿操作,适用于复杂的业务场景。

四、微服务拆分与设计:高内聚、低耦合的艺术

微服务的拆分是构建微服务架构的关键步骤之一。合理的拆分可以提高系统的可维护性和可扩展性,而拆分不当则可能导致系统复杂度增加。在拆分微服务时,需要遵循以下原则:

  1. 避免业务交叉:微服务之间尽量不要有业务交叉,每个服务应该专注于一个特定的业务领域。
  2. 接口调用:微服务之间只能通过接口进行服务调用,不能直接访问对方的数据,以确保服务之间的解耦。
  3. 高内聚、低耦合:这是微服务设计的核心原则,通过同步接口调用和异步事件驱动等方式实现。

DDD 领域驱动设计

DDD(领域驱动设计)是一种面向复杂软件系统的设计方法论,由 Eric Evans 在 2004 年提出。DDD 的核心思想是将领域模型与技术实现分离,强调领域模型的重要性。DDD 可以通过限界上下文将系统拆分为多个领域,从而实现高内聚、低耦合的设计。

DDD 的架构分为战略设计和战术设计。战略设计用于指导系统的整体划分,而战术设计用于指导微服务的具体实现。DDD 的核心概念包括领域模型、限界上下文、聚合根和领域事件等。

中台与微服务的关系

中台是阿里巴巴在 2015 年提出的一种战略思想,旨在将各个业务线中可复用的功能抽取出来,形成可复用的组件。中台可以分为业务中台、数据中台和技术中台。中台与 DDD 结合,可以通过限界上下文将系统拆分为多个领域,从而实现中台之间的逻辑隔离。

DDD 在技术与资源调度方面能够为中台建设提供指导,帮助构建更加灵活和高效的系统。中台的建设可以促进微服务的拆分和复用,提高系统的整体性能和可维护性。

五、微服务敏捷开发实践

敏捷开发的核心目标是提高团队的交付效率,快速迭代和试错。在微服务架构中,敏捷开发可以通过以下几种方式实现:

  1. 开发运维一体化:开发和运维团队紧密合作,共同负责系统的开发和维护。
  2. 定期发布新版本:每月固定发布新版本,以分支的形式保存到代码仓库中。
  3. 任务面板与站立会议:通过任务面板和站立会议,快速入职新成员,确保团队成员之间的沟通顺畅。
  4. 多环境部署:构建测试环境、集成测试环境、压测环境、预投产环境和生产环境,确保系统的稳定性和可靠性。
  5. 文档优先:通过晨会、周会和需求拆分会,确保团队成员对需求有清晰的理解。

微服务的链路追踪、持续集成与 AB 发布

  1. 链路追踪:通过日志或消息队列实现链路追踪,形成全局事务 ID,以便在出现问题时能够快速定位。
  2. 持续集成:使用 Spring Boot 和 Maven 进行项目构建,结合 Jenkins 实现自动化部署。
  3. AB 发布:采用蓝绿发布、红黑发布、灰度发布或金丝雀发布等方式,逐步将新版本推向生产环境,降低发布风险。

总结

微服务架构作为一种强大的系统设计方式,已经在众多领域得到了广泛应用。通过合理拆分微服务、采用合适的技术栈、解决分布式事务问题以及实施敏捷开发实践,可以构建出高效、可扩展且易于维护的微服务系统。希望本文能够为准备面试的 Java 开发者提供有价值的参考,帮助大家更好地理解和掌握微服务架构的核心知识。

相关文章:

微服务面试资料1

在当今快速发展的技术领域,微服务架构已经成为构建复杂系统的重要方式之一。本文将围绕微服务的核心概念、技术栈、分布式事务处理、微服务拆分与设计,以及敏捷开发实践等关键问题展开深入探讨,旨在为准备面试的 Java 开发者提供一份全面的复…...

Pytest Fixture 详解

Pytest Fixture 详解 Fixture 是 pytest 最强大的功能之一,用于提供测试所需的依赖资源(如数据库连接、临时文件、模拟对象等),并支持复用、作用域控制和自动清理。以下是全面详解: 1. 基本用法 定义 Fixture 使用 …...

力扣HOT100之二分查找:74. 搜索二维矩阵

这道题直接a了,我们可以参考上一道题:35.搜索插入位置的思路,详情见我的上一篇博客。将每一行的第一个元素当作一个数组中的元素,然后对这个数组进行二分查找,如果直接找到了target,则直接返回true&#xf…...

【前端】前后端通信

前端开发主要完成的两件事: 1)界面搭建 2)数据交互 本知识页参考: https://juejin.cn/post/6925296067378429960 0. XMLHttpRequest 客户端的一个API,为浏览器和服务器通信提供了一个便携通道。现代浏览器支持XMLHttp…...

编程技能:格式化打印04,sprintf

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 (一)WIn32 专栏导航 上一篇:编程技能:格式化打印03,printf 回到目录…...

C语言基础(11)【函数1】

内容提要 函数 文章目录 内容提要函数函数的描述函数的分类相关概念函数的定义:定义:案例: 形参和实参形参(形式参数)实参(实际参数)案例: 函数的返回值案例: 函数 函数…...

R语言基础| 下载、安装

在此前的单细胞教程中,许多小伙伴都曾因为R语言基础不足而十分苦恼。R语言是一种开源的编程语言和软件环境,专门用于统计分析、图形表示和数据挖掘。它最初由Ross Ihaka和Robert Gentleman在1993年创建,旨在为统计学家和数据分析师提供一个广…...

【hive sql】窗口函数

参考 包括窗口函数在内的执行顺序 from & join --确定数据源 where --行级过滤 group by --分组 having --组级过滤 窗口函数 --计算窗口函数结果 select --选择列 distinct --去重 order by --最终排序(可对窗口函数结果进行排序) limit/offset -…...

Ubuntu24.04 交叉编译 aarch64 ffmpeg

ffmpeg 官网: https://ffmpeg.org文档: https://ffmpeg.org/documentation.html 编译参数说明: https://trac.ffmpeg.org/wiki/CompilationGuide/Generic在Linux下编译: https://trac.ffmpeg.org/wiki/CompilationGuide 下载页: https://ffmpeg.org/download.html 安装依赖 …...

《AI角色扮演反诈技术解析:原理、架构与核心挑战》

AI角色扮演反诈技术解析:原理、架构与核心挑战 研究目标 技术栈梳理: 系统总结AI角色扮演在执法场景中的实现路径,涵盖大型语言模型(LLM)、提示词工程(Prompt Engineering)、多模态交互链路等…...

微软的新系统Windows12未来有哪些新特性

在今年即将到来的重大设计升级中,苹果计划对其全线操作系统统一按年份命名,作为另一巨头微软的win12还远吗?win11和win10是微软现在正在用的主流版本,win11系统发布于2021年6月24日,win10系统发布于2015年7月29日。预计win12尝鲜版可能在2025年下半年或明年。 尽管win12还…...

树莓派超全系列教程文档--(54)如何使用rsync在计算机之间同步文件夹

如何使用rsync在计算机之间同步文件夹 使用 rsync 在计算机之间同步文件夹 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rsync 在计算机之间同步文件夹 您可以使用 rsync 在计算机之间同步文件夹。例如,您可以使用 rsync 将R…...

华为ICT和AI智能应用

在华为的业务布局中,AI智能创新则贯穿于华为多个业务领域,二者紧密相关,共同推动华为及相关行业的发展。以下是具体介绍: Techco转型 - 背景:随着5G - A、云、人工智能等技术的发展,运营商从传统连接服…...

ROS2与Unitree机器人集成指南

Tested systems and ROS2 distro systemsROS2 distroUbuntu 20.04foxyUbuntu 22.04humblesrc目录上级才可以colcon build git clone https://github.com/unitreerobotics/unitree_ros2 Install Unitree ROS2 package 1. Dependencies sudo apt install ros-humble-rmw-cyclon…...

在虚拟宇宙中低语——进程间通信,Linux命名管道的前世今生

文章目录 🌌 序章🌠 一、命名管道的宿命与哲学1.1、创建及简单使用1.2、命名管道的工作原理1.3、命名管道与匿名管道的区别 2、命名管道的特点及特殊场景2.1、特点2.2、四种特殊场景 3、命名管道实操3.1、实现文件拷贝3.2、实现进程控制 小结 &#x1f3…...

Cursor 工具项目构建指南:Java 21 环境下的 Spring Boot Prompt Rules 约束

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 Cursor 工具项目构建指南:Java 21 环境下的 Spring Boot Prompt Rules 约束前言项目简…...

各个布局的区别以及示例

各个布局的区别以及示例 在前端开发中,常见的布局方式主要有以下几种,每种布局都有其适用场景和特点: 1. 普通文档流(Normal Flow) 特点:默认布局方式,元素按照HTML顺序依次排列。适用场景&am…...

什么是MVC?

导语: 在Java后端面试中,“MVC架构”是绕不开的基础话题。它不仅关乎项目的整体设计思路,更体现了候选人的架构理解能力与编码规范意识。本文将从面试官视角出发,结合高频问题、代码示例、答题技巧与加分项,带你全面吃…...

STM32的ADC简介

一、ADC简介 STM32的ADC是一种12位逐次逼近型模拟数字转换器。它具备18个通道,能够测量16个外部信号源以及2个内部信号源。各通道的A/D转换可以执行单次、连续、扫描或间断模式。转换结果可采用左对齐或右对齐的方式(12位)存储于16位数据寄存…...

Bash shell四则运算

文章目录 四则运算1. ‌expr 命令‌2. ‌$(( )) 表达式(推荐)‌3. ‌$[ ] 表达式(已弃用)‌4. ‌let 命令‌小数运算i 和 i 区别 四则运算 算术运算: - * / %(取模,求余数) Bash sh…...

(javaSE)Java数组进阶:数组初始化 数组访问 数组中的jvm 空指针异常

数组的基础 什么是数组呢? 数组指的是一种容器,可以用来存储同种数据类型的多个值 数组的初始化 初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程。 数组初始化的两种方式:静态初始化,动态初始化 数组的静态初始化 初始化…...

力扣刷题Day 70:在排序数组中查找元素的第一个和最后一个位置(34)

1.题目描述 2.思路 方法1(自己写的):一次二分查找找到等于target的一个元素索引axis,然后向左右延伸找边界。 方法2(灵茶山艾府佬的闭区间二分查找写法):定义一个lower_bound()函数找到第一个…...

vue 多端适配之pxtorem

在 Vue 3 Vite 项目中使用 postcss-pxtorem 自动将 px 单位转换为 rem 单位,可以按照以下步骤配置: 一、基础版本 1. 安装依赖 首先安装必要的插件: npm install postcss postcss-pxtorem autoprefixer -D # 或 yarn add postcss postcs…...

图片压缩工具 | 图片属性详解及读取解析元数据

ℹ️ 图片信息及属性 基本属性 格式类型:JPEG、PNG、GIF、WEBP、BMP、TIFF等文件大小:以KB、MB等为单位的存储空间占用创建/修改日期:文件的元数据时间戳 视觉属性 尺寸/分辨率 宽度(像素)高度(像素&…...

React---day8

9.6 不可变数据的力量 我们知道是不能够修改this.state里面的数据的 举个例子 export class App extends React.PureComponent{constructor(){super();this.state {userList:[{name : "tom" , age : 18},{name : "lily" , age : 20},{name : "tik…...

C# Onnx 动漫人物人脸检测

目录 效果 模型信息 项目 代码 下载 参考 效果 模型信息 Model Properties ------------------------- stride:32 names:{0: face} --------------------------------------------------------------- Inputs ------------------------- name&am…...

C++内存列传之RAII宇宙:智能指针

文章目录 1.为什么需要智能指针?2.智能指针原理2.1 RAll2.2 像指针一样使用 3.C11的智能指针3.1 auto_ptr3.2 unique_ptr3.3 shared_ptr3.4 weak_ptr 4.删除器希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力! 智能指针是 C 中用于自动…...

PVE 虚拟机安装 Ubuntu Server V24 系统 —— 一步一步安装配置基于 Ubuntu Server 的 NodeJS 服务器详细实录1

前言 最近在基于 NodeJS V22 写一个全栈的项目,写好了,当然需要配置服务器部署啦。这个过程对于熟手来说,还是不复杂的,但是对于很多新手来说,可能稍微有点困难。所以,我把整个过程全部记录一下。 熟悉我…...

GitHub 趋势日报 (2025年06月03日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 2404 onlook 860 system-design-primer 380 nautilus_trader 372 agent-zero 357 …...

出现dev/nvmeOnip2 contains a file system with errors, check forced 解决方法

目录 前言1. 问题所示2. 原理分析3. 解决方法4. 彩蛋前言 爬虫神器,无代码爬取,就来:bright.cn Java基本知识: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新)1. 问题所示 出现如下问题: dev/nvmeOnip2 co…...