猫头虎分享: 探索软件系统架构的革新之路

博主猫头虎的技术世界

🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能!

专栏链接

🔗 精选专栏

  • 《面试题大全》 — 面试准备的宝典!
  • 《IDEA开发秘籍》 — 提升你的IDEA技能!
  • 《100天精通鸿蒙》 — 从Web/安卓到鸿蒙大师!
  • 《100天精通Golang(基础入门篇)》 — 踏入Go语言世界的第一步!
  • 《100天精通Go语言(精品VIP版)》 — 踏入Go语言世界的第二步!

领域矩阵

🌐 猫头虎技术领域矩阵
深入探索各技术领域,发现知识的交汇点。了解更多,请访问:

  • 猫头虎技术矩阵
  • 新矩阵备用链接

在这里插入图片描述

文章目录

  • 猫头虎分享🦉: 探索软件系统架构的革新之路
    • 摘要
    • 引言
    • 正文
      • 传统单体架构🏛️
      • 传统单体架构🏛️的详细分析
        • 定义与特点
          • 主要特点包括:
        • 优点
        • 缺点
        • 适用场景
        • 小结
      • 微服务架构🔍
      • 微服务架构🔍的详细介绍
        • 定义与特点
          • 主要特点包括:
        • 优点
        • 缺点
        • 适用场景
        • 小结
      • 容器化与Docker🐳
      • 容器化与Docker🐳的详细介绍
        • 定义与特点
          • 主要特点包括:
        • 优点
        • 缺点
        • 适用场景
        • 小结
      • 云原生架构☁️
      • 云原生架构☁️的详细介绍
        • 定义与特点
          • 主要特点包括:
        • 优点
        • 缺点
        • 适用场景
        • 小结
    • 🦉未来软件架构是否会发展成为人工通用智能(AGI)?
      • 当前的软件架构与AGI
      • 软件架构向AGI的发展
      • 结论
    • 参考资料
    • 表格:核心知识点总结
    • 总结
    • 未来展望

猫头虎分享🦉: 探索软件系统架构的革新之路

在这里插入图片描述

摘要

在这篇博客中,我们将深入探讨软件系统架构的发展与革新。从单体应用到微服务,再到云原生架构,每一步都标志着技术的进步和思维的转变。对于软件工程师、架构师以及技术爱好者而言,这篇文章将提供关键的知识点和技术细节,帮助理解和把握架构设计的脉络。涵盖了微服务、容器化、DevOps、云计算等多个关键词,本文将是你理解软件架构演变的完美指南。

引言

大家好,我是猫头虎博主,今天我们将一起探索软件系统架构的改变。从传统的单体架构到现代的云原生设计,软件架构的进步不仅提高了系统的性能和可靠性,还极大地影响了我们的开发和运维方式。

正文

在这里插入图片描述

传统单体架构🏛️

单体架构是早期软件开发的基石,它的特点是将所有功能集成在一个紧密耦合的单一程序中。这种架构简单直观,易于开发和部署,但却存在着扩展性差和维护困难的问题。

传统单体架构🏛️的详细分析

定义与特点

单体架构是一种将应用程序的所有组件集成在单个包或模块中的架构风格。这种结构通常包含用户界面、业务逻辑、数据访问层等所有组件。在这种架构下,各个部分紧密耦合,共同构成一个统一的系统。

主要特点包括:
  • 紧密耦合和集中管理:应用中的所有功能在同一个环境下开发和部署。
  • 一体化部署:作为一个单一的实体进行部署,简化了部署过程。
  • 开发简单:初期开发相对直观,无需处理多个服务之间的复杂交互。
优点
  1. 简化开发与测试:由于所有功能都在同一个平台上,开发和测试过程较为简单直接。
  2. 简单的部署流程:部署单体应用通常只需要一个文件或目录,减少了部署的复杂性。
  3. 初始成本较低:对于小型项目或初创公司,单体架构可以快速启动和推进项目。
缺点
  1. 可扩展性差:随着应用规模的增长,单体架构的应用变得越来越难以扩展。
  2. 维护困难:当代码库变大后,理解和修改代码变得更加困难,可能导致开发速度放缓。
  3. 技术债务风险:随着时间的推移,技术债务会逐渐累积,导致系统更新和维护成本增加。
  4. 故障影响范围大:一个小故障可能会影响整个应用的稳定性和可用性。
适用场景
  • 小型或中等规模的项目:对于小型团队或有限的资源,单体架构提供了足够的简单性和可管理性。
  • 快速原型开发:当需要快速验证一个想法或概念时,单体架构可以加速开发过程。
  • 非复杂业务逻辑应用:对于业务逻辑不是特别复杂的应用,单体架构可能是一个有效的选择。
小结

虽然单体架构在现代软件开发中逐渐被微服务和云原生等更灵活、可扩展的架构所取代,但它在特定情况下仍然是一个有效且合理的选择。对于小型项目和快速原型开发,单体架构提供了简单、直接的解决方案。然而,随着项目规模的增长,它的缺点—如维护困难、扩展性差—变得越发明显,这时就可能需要考虑向更现代的架构模式过渡。

微服务架构🔍

微服务架构通过将应用程序划分为一组小的、松散耦合的服务来克服单体架构的限制。每个服务都围绕特定的业务功能构建,并且可以独立部署和扩展。

微服务架构🔍的详细介绍

定义与特点

微服务架构是一种将应用程序设计为一系列小型服务的架构方法,每个服务都执行特定的业务功能,运行在自己的进程中,并通过轻量级通信机制(通常是HTTP RESTful API)进行通信。这些服务围绕业务能力构建,可以独立部署、扩展和更新。

主要特点包括:
  • 服务分离和独立性:每个微服务负责应用的特定部分,彼此之间松耦合。
  • 独立部署:每个服务可以独立于其他服务部署,不会相互影响。
  • 技术多样性:不同的微服务可以使用不同的编程语言和数据存储技术。
  • 聚焦单一业务功能:每个微服务通常只关注一个特定的业务功能或领域。
优点
  1. 灵活性和可扩展性:可以独立地扩展最需要扩展的服务,而不是整个应用。
  2. 容错性:一个服务的失败不会导致整个应用的崩溃。
  3. 易于理解和维护:每个微服务都相对较小,更容易理解和维护。
  4. 技术和团队自治:团队可以选择最适合其服务的技术栈。
  5. 持续交付和部署:更容易实现自动化部署和持续集成。
缺点
  1. 分布式系统的复杂性:微服务之间的通信增加了网络负载和延迟。
  2. 数据一致性:保持不同服务之间数据的一致性可能是一个挑战。
  3. 运维复杂性:需要更多的运维工作来管理多个服务。
  4. 开发和测试复杂性:微服务的独立性可能增加集成和端到端测试的难度。
适用场景
  • 大型、复杂的应用:在大型应用中,微服务架构可以有效地隔离服务,使得开发和维护更加可管理。
  • 需要高度可扩展的系统:对于需要在不同维度上扩展的系统,微服务提供了更好的灵活性。
  • 快速迭代和频繁部署的环境:微服务允许独立服务的快速迭代和部署,而不影响系统的其他部分。
小结

微服务架构提供了比传统单体架构更高的灵活性和可扩展性,使得大型和复杂的应用能够更加高效地开发和维护。然而,它也带来了分布式系统固有的复杂性,要求团队具备相应的技术能力和工程实践来克服这些挑战。正确地实施微服务架构需要综合考虑组织的规模、团队结构、业务需求和技术背景。

容器化与Docker🐳

容器化技术,尤其是Docker,为微服务架构提供了理想的运行环境。容器可以封装微服务的运行环境,确保一致性,同时提供轻量级的隔离。

# 示例:使用Docker构建和运行一个微服务
docker build -t my-microservice .
docker run -p 5000:5000 my-microservice

容器化与Docker🐳的详细介绍

定义与特点

容器化是一种轻量级、可移植的软件分发方法,它封装软件的代码及其所有依赖,以便在任何环境中快速且一致地运行。Docker,作为容器化技术的代表,为开发、分发和运行应用程序提供了一个标准化的平台。

主要特点包括:
  • 环境一致性:确保开发、测试和生产环境间的一致性。
  • 隔离性:每个容器作为一个隔离的环境运行,避免了软件间的冲突。
  • 轻量级:相比于传统虚拟化技术,容器更加轻量,提高了资源利用率。
  • 可移植性:容器可以在任何支持Docker的主机上运行,无需担心依赖问题。
优点
  1. 快速部署和启动:容器化应用程序可以在几秒内启动,加快了部署速度。
  2. 提高开发效率:开发者可以使用与生产环境一致的容器,减少了“在我机器上能运行”的问题。
  3. 简化配置管理:所有环境的配置可以预先定义在容器中,降低了配置管理的复杂性。
  4. 资源高效使用:容器共享主机的系统内核,不需要额外的操作系统,更有效地使用硬件资源。
缺点
  1. 安全性问题:容器与主机系统共享内核,如果配置不当,可能会存在安全风险。
  2. 存储和网络复杂性:容器的持久化存储和网络配置可能比传统部署更复杂。
  3. 监控和管理挑战:大规模容器化部署需要复杂的监控和管理工具。
适用场景
  • 微服务架构:容器非常适合部署微服务,因为它们可以独立地封装每个服务。
  • 持续集成和持续部署(CI/CD):容器化支持自动化的测试和部署流程。
  • 多环境部署:容器可以保证应用在不同环境(开发、测试、生产)中的一致性。
  • 弹性伸缩和自动化运维:容器化应用更容易在云环境中进行自动伸缩和管理。
小结

容器化技术,特别是Docker,已成为现代软件开发的关键组成部分。它为微服务架构提供了理想的运行环境,通过确保跨环境的一致性和提供轻量级的隔离,大幅提升了开发和运维效率。然而,成功实施容器化还需要考虑安全性、数据持久性和管理监控等方面的挑战。

云原生架构☁️

云原生是指在云环境中构建和运行应用程序的方法。它利用了云计算的优势,比如自动扩展、微服务和容器。

云原生架构☁️的详细介绍

定义与特点

云原生架构是指在云环境中构建、部署和运行应用程序的一种方法。它利用云计算的强大功能,如服务的自动扩展、弹性管理、故障容忍等,以提高效率、弹性和可扩展性。云原生通常涉及微服务架构、容器化技术(如Docker)、持续集成和持续部署(CI/CD)、以及动态管理和自动化(如Kubernetes)。

主要特点包括:
  • 服务的微分化:应用分解为独立的微服务,使得管理和扩展更加灵活。
  • 容器化部署:应用和其依赖被打包在容器中,提高了可移植性和环境一致性。
  • 动态管理:通过自动化工具(如Kubernetes)进行服务部署、扩展和监控。
  • DevOps文化:强调开发和运维团队的协作,快速迭代和持续改进。
优点
  1. 弹性和可伸缩性:能够根据负载自动扩展和缩减资源。
  2. 快速迭代:云原生架构支持快速开发和部署,加快了产品迭代速度。
  3. 故障容忍:即使个别组件失败,整个系统仍然可以正常运行。
  4. 资源优化:通过容器和微服务使得资源使用更加高效。
  5. 全球部署:利用云平台,可以轻松地在全球范围内部署和管理应用。
缺点
  1. 复杂性增加:管理一个分布式系统比传统架构复杂,需要更多的技术投入。
  2. 安全挑战:云环境的安全策略和传统环境不同,需要特别关注。
  3. 成本管理:虽然云原生可以节省资源,但不当的管理可能导致成本增加。
  4. 技术门槛:需要团队掌握更多新技术和工具。
适用场景
  • 高动态扩展需求的应用:对于需要根据用户访问量动态调整资源的应用来说,云原生架构提供了理想的解决方案。
  • 全球化服务:对于需要在全球多个地区部署的服务,云原生架构能够提供高效的全球部署和管理。
  • 持续创新的企业:云原生架构支持快速迭代和部署,适合追求持续创新的企业。
小结

云原生架构通过结合微服务、容器化、CI/CD等先进的软件工程实践,充分利用了云计算环境的优势,为现代企业提供了一种灵活、高效、可扩展的软件开发和运维方式。它不仅是一种技术上的转变,更代表了组织文化和流程的变革,要求企业进行全面的技术和流程升级。

在这里插入图片描述

🦉未来软件架构是否会发展成为人工通用智能(AGI)?

目前,AGI(Artificial General Intelligence)是指具有广泛认知能力的人工智能,能够像人类一样在各种任务和环境中展示智能。这与专门针对特定任务设计的人工智能(如聊天机器人、图像识别系统)有很大区别。

当前的软件架构与AGI

当前的软件架构,即使是最先进的云原生架构、微服务或AI集成系统,都远未接近AGI。它们通常设计用于处理特定的、定义良好的任务,而非展示类似人类的普遍智能。

软件架构向AGI的发展

  1. 技术难度:开发AGI是一个巨大的技术挑战,目前尚无明确的路径或时间表。软件架构在这方面的发展,尽管迅速,但主要集中在提高效率、可靠性和可扩展性上,而不是通用智能。

  2. 设计目的:大多数软件架构是为了解决特定的商业问题或需求,而AGI的设计目的是模仿人类智能的广泛能力,两者的目标和范围有显著差异。

  3. 资源和投资:AGI的研究需要巨大的资源和长期的投资。虽然许多公司和研究机构对AGI感兴趣,但它仍然是一个长期的研究领域。

  4. 伦理和安全考量:AGI的发展涉及许多伦理和安全问题,例如控制问题、责任归属和社会影响等。这些问题的复杂性可能会延缓AGI的研究和应用。

结论

综上所述,虽然未来软件架构将继续集成更多的AI元素,提高自动化和智能化水平,但成为AGI是一个跨度极大的转变,不仅涉及技术层面的突破,还需要克服伦理、安全和社会接受等多方面的挑战。因此,短期内软件架构发展成为AGI的可能性不大,这是一个更长远的愿景。

参考资料

  1. “微服务架构设计模式”
  2. “Docker容器化实践”
  3. “云原生应用架构探索”

表格:核心知识点总结

架构类型特点优点缺点
单体架构整合式设计开发部署简单扩展性维护困难
微服务架构服务分离可维护性、可扩展性好设计管理复杂
容器化应用隔离和打包环境一致性、轻量级隔离需要容器管理技术支持
云原生架构利用云计算特性自动扩展、灵活性高对云平台有依赖

总结

在探索软件系统架构的演变过程中,我们见证了从单体架构到微服务架构,再到云原生架构的转变。这一变迁不仅是技术的升级,更是对高效、灵活和可持续发展的不懈追求。单体架构以其简洁性和直接性满足了早期软件开发的需求,而微服务架构应运而生,解决了单体架构在处理大型、复杂应用时的局限性。容器化技术,特别是Docker,为微服务提供了理想的运行和部署环境,同时带来了环境一致性和高效的资源利用。最后,云原生架构的出现,利用云计算的优势,进一步推动了软件开发和运维的现代化,提高了系统的可靠性、弹性和可扩展性。

这一演变过程不仅仅是技术层面的变革,还伴随着组织结构和文化的转变。团队必须适应更加敏捷和协作的工作方式,以及持续学习和适应新技术的能力。总的来说,软件系统架构的发展既是对过去技术的优化,也是对未来需求和挑战的预见。

未来展望

未来的软件系统架构预计将进一步朝着自动化、智能化的方向发展。以下几个方面可能会成为主要趋势:

  1. 人工智能和机器学习的整合:随着AI技术的发展,将AI和ML模型更加深入地整合到软件架构中,可以实现更智能的数据处理和业务决策。

  2. 无服务器架构(Serverless)的兴起:无服务器计算将进一步简化云原生应用的开发和部署,使开发者更加专注于代码本身而不是底层基础设施。

  3. 边缘计算的发展:随着物联网(IoT)和移动设备的普及,边缘计算将变得越来越重要,以降低延迟和提高数据处理速度。

  4. 持续集成和持续部署(CI/CD)的进一步优化:自动化的测试和部署流程将变得更加成熟,提高软件交付的速度和质量。

  5. 更强调安全和合规性:随着数据安全和隐私的日益重要,软件架构将需要更加重视安全性和遵守相关法规。

总体而言,未来的软件架构将更加注重灵活性、可扩展性、自动化和智能化,同时在满足快速发展的业务需求的同时,也要确保数据安全和合规性。


如果对本文有任何疑问,欢迎点击下方名片,了解更多详细信息!

在这里插入图片描述

👉 更多信息:有任何疑问或者需要进一步探讨的内容,欢迎点击下方文末名片获取更多信息。我是猫头虎博主,期待与您的交流! 🦉💬

🚀 技术栈推荐
GoLang, Git, Docker, Kubernetes, CI/CD, Testing, SQL/NoSQL, gRPC, Cloud, Prometheus, ELK Stack

💡 联系与版权声明

📩 联系方式

  • 微信: Libin9iOak
  • 公众号: 猫头虎技术团队

⚠️ 版权声明
本文为原创文章,版权归作者所有。未经许可,禁止转载。更多内容请访问猫头虎的博客首页。

点击下方名片,加入猫头虎领域社群矩阵。一起探索科技的未来,共同成长。

🔗 猫头虎社群 | 🔗 Go语言VIP专栏| 🔗 GitHub 代码仓库 | 🔗 Go生态洞察专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/387057.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Swift Combine 网络受限时从备用 URL 请求数据 从入门到精通十四

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…

python 基础知识点(蓝桥杯python科目个人复习计划40)

今日复习内容:矩阵乘法,高斯消元 哈哈,我来干回老本行,复习点儿数学类专业学的东西 因为电脑上制作费时间,所以我直接用我的《高等代数》和《数值分析》笔记。 一.矩阵乘法 例题1:矩阵相乘 题目描述&am…

three.js 细一万倍教程 从入门到精通(三)

目录 五、详解PBR材质纹理 5.1、详解PBR物理渲染 5.2、标准网格材质与光照物理效果 5.3、置换贴图与顶点细分设置 5.4、设置粗糙度与粗糙度贴图 5.5、设置金属度与金属贴图 5.6、法线贴图应用 5.7、如何获取各种类型纹理贴图 5.8、纹理加载进度情况 单张图片加载 多…

Java学习手册——第七篇基础语法

Java学习手册——第七篇基础语法 1. 注释2. 顺序语句3. 条件语句3.1 if语句3.2 switch语句 4. 循环语句4.1 for循环4.2 while 语句4.3 do...while语句 本篇为大家快速入门Java基础语法,了解一个语言的基础语法是必要的, 因为我们后期都是需要用这些基础语…

基于CU,PO,RD,IPO矩阵图分析数据资产-自创

术语 数据资产:数据资产是具有价值的数据资源。没有价值的数据资源,通过采集,整理,汇总等加工后,也可以成为具有直接或间接价值的数据资产。传统企业逐渐数字化转型,尤其是互联网企业,都十分重视…

文献速递:肿瘤分割---- 弱监督肝肿瘤分割,使用Couinaud区段标注

文献速递:肿瘤分割---- 弱监督肝肿瘤分割,使用Couinaud区段标注 01 文献速递介绍 肝癌是世界上导致癌症死亡的主要原因之一,也是第二大常见的癌症死因。本稿件于2021年10月28日收到,2021年11月24日修订,2021年12月1…

[Linux开发工具]项目自动化构建工具-make/Makefile

📙 作者简介 :RO-BERRY 📗 学习方向:致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 📒 日后方向 : 偏向于CPP开发以及大数据方向,欢迎各位关注,谢谢各位的支持 目录 1.背景2.依赖关系和依…

【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏17(附项目源码)

本节最终效果演示 文章目录 本节最终效果演示系列目录前言制作木板UI直接复制和工具一样的即可检查背包是否有指定数量的空插槽 源码完结 系列目录 前言 欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇…

品牌之门:概率与潜力的无限延伸

在品牌的世界里,每一个成功的推广都像是打开一扇门,从未知走向已知,从潜在走向显现。这扇门,既是品牌的起点,也是品牌发展的无限可能。 品牌,就像一扇紧闭的门,它静静地矗立在那里,…

toString()、equals()、clone()用法

Java中所有类的对象都可以直接使用Object类中提供的一些方法 1. toString():返回对象的字符串表示形式,通常在类中重写,以便于返回的是对象的内容 2. equals():判断两个对象的地址是否相等,直接使用也一样,…

【蓝桥杯】灭鼠先锋

一.题目描述 二.解题思路 博弈论&#xff1a; 只能转移到必胜态的&#xff0c;均为必败态。 可以转移到必败态的&#xff0c;均为必胜肽。 最优的策略是&#xff0c;下一步一定是必败态。 #include<iostream> #include<map> using namespace std;map<string,bo…

【Linux系统学习】6.Linux系统软件安装

实战章节&#xff1a;在Linux上部署各类软件 前言 为什么学习各类软件在Linux上的部署 在前面&#xff0c;我们学习了许多的Linux命令和高级技巧&#xff0c;这些知识点比较零散&#xff0c;进行练习虽然可以基础掌握这些命令和技巧的使用&#xff0c;但是并没有一些具体的实…

C++:priority_queue模拟实现

C&#xff1a;priority_queue模拟实现 什么是priority_queue模拟实现向上调整算法向下调整算法插入与删除 仿函数 什么是priority_queue priority_queue称为优先级队列。优先级队列是一种特殊的队列&#xff0c;其中每个元素都有一个相关的优先级。元素的优先级决定了它们在队…

NSSCTF Round#18 RE GenshinWishSimulator WP

恶搞原神抽卡模拟器 看到软件的界面&#xff0c;大致有三种思路&#xff1a; 修改石头数量一直抽&#xff0c;如果概率正常肯定能抽到&#xff08;但是估计设置的概率是0&#xff09;在源码里找flag的数据把抽卡概率改成100%直接抽出来 Unity逆向&#xff0c;根据经验应该dnsp…

助眠神器小程序源码|白噪音|小睡眠|微信小程序前后端开源

安装要求和说明后端程序运行环境&#xff1a;NginxPHP7.4MySQL5.6 PHP程序扩展安装&#xff1a;sg11 网站运行目录设置为&#xff1a;public 伪静态规则选择&#xff1a;thinkphp 数据库修改文件路径&#xff1a;/config/database.php需要配置后端的小程序配置文件&#xff0c;…

力扣hot1--哈希

推荐一个博客&#xff1a; 一文看懂哈希表并学会使用C STL 中的哈希表_哈希表end函数-CSDN博客 哈希做法&#xff1a; 我们将nums[i]记为key&#xff0c;将i记为value。 判断target-nums[i]是否在哈希表中&#xff0c;如果在说明这两个值之和为target&#xff0c;那么返回这两…

【Java】零基础蓝桥杯算法学习——线性动态规划(一维dp)

线性dp——一维动态规划 1、考虑最后一步可以由哪些状态得到&#xff0c;推出转移方程 2、考虑当前状态与哪些参数有关系&#xff0c;定义几维数组来表示当前状态 3、计算时间复杂度&#xff0c;判断是否需要进行优化。 一维动态规划例题&#xff1a;最大上升子序列问题 Java参…

Linux第48步_编译正点原子的出厂Linux内核源码

编译正点原子的出厂 Linux 内核源码&#xff0c;为后面移植linux做准备。研究对象如下&#xff1a; 1)、linux内核镜像文件“uImage” 路径为“arch/arm/boot”&#xff1b; 2)、设备树文件“stm32mp157d-atk.dtb” 路径为“arch/arm/boot/dts” 3)、默认配置文件“stm32m…

第二部分阶段总结

第二部分阶段总结 1.知识补充1.1 nolocal关键字1.2 yield from1.3 深浅拷贝 2.阶段总结3.考试题 1.知识补充 1.1 nolocal关键字 在之前的课程中&#xff0c;我们学过global关键字。 name rootdef outer():name "武沛齐"def inner():global namename 123inner()…

LeetCode、739. 每日温度【中等,单调栈】

文章目录 前言LeetCode、739. 每日温度【中等&#xff0c;单调栈】题目链接及分类思路单调栈 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技…