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

从单体架构到微服务:微服务架构演进与实践

一、单体架构的困境与演进

(一)单体应用的初始优势与演进路径

在系统发展的初期,单体架构凭借其简单性和开发效率成为首选。单体应用将整个系统的所有功能模块整合在一个项目中,以单一进程的方式运行,特别适合小型系统快速迭代。然而,随着业务规模扩大和功能复杂度提升,单体架构逐渐暴露出不可忽视的问题,推动着系统向微服务架构演进。

(二)单体架构的核心痛点分析

1. 代码管理复杂性激增
  • 整个系统作为单一 Git 仓库管理,主分支直接关联生产部署,新功能开发、bug 修复等需求导致多分支并行开发。
  • 分支合并时频繁出现代码冲突,每次合并都需要进行全面的回归测试,测试成本随代码规模呈指数级增长。
  • 典型场景如电商系统中,订单模块与商品模块的代码耦合,一个模块的修改可能意外影响其他模块功能。
2. 扩展性瓶颈显著
  • 单体应用难以实现细粒度的水平扩展,只能对整个应用进行集群部署,资源利用率低下。
  • 技术栈升级风险极高,更换某个库或语言版本需要重新测试整个系统,例如将 MySQL 从 5.5 升级到 8.0 可能引发全局兼容性问题。
  • 测试环境资源竞争激烈,开发团队需排队等待测试服务器资源,严重影响迭代效率。
3. 性能优化的连锁反应
  • 数据分析功能与核心业务逻辑共享数据库,导致 OLTP(在线事务处理)性能被 OLAP(在线分析处理)拖累。
  • 数据库结构调整(如添加索引或分区表)可能影响所有依赖该表的功能,例如商品搜索模块的索引优化可能降低订单下单速度。
  • 服务间通过数据库表直接通信(如以中间表作为数据交换中介),导致数据库成为系统瓶颈,某接口的低效查询可能拖垮整个数据库。

(三)单体应用演变的典型场景

通过 ProcessOn 流程图可清晰看到单体应用的退化过程:

  1. 初始阶段:代码复用支撑后台管理与前端网站
  2. 功能膨胀:系统间相互调用增多,登录注册模块需同时支撑后台、网站和小程序
  3. 接口过载:接口既要对外提供服务,又要满足内部模块调用需求
  4. 数据库危机:数据分析功能引发数据库性能问题,商品查询与秒杀服务相互影响
  5. 架构僵化:数据库被多服务依赖,无法独立拆分升级,只能通过表中介通信
  6. 单点风险:某接口的低效 CRUD 操作导致整个数据库性能崩溃

    二、微服务架构的核心设计与实践

    (一)微服务的拆分原则与独立性

    微服务架构的典型结构图示如下:

    1. 服务拆分的核心思想

    将大型单体服务拆解为多个小型独立服务,每个服务专注于单一业务领域(如订单服务、商品服务),遵循 “高内聚、低耦合” 原则。例如电商系统可拆分为:

    • 用户服务:负责用户注册、登录、资料管理
    • 商品服务:管理商品信息、库存、分类
    • 订单服务:处理订单创建、支付、状态流转
    2. 服务独立性的三层体现
    • 代码独立:每个服务拥有独立代码库,可由不同团队并行开发维护
    • 数据库独立:服务使用独立数据库,避免数据耦合(如订单服务与用户服务分别使用独立数据库)
    • 部署独立:每个服务可独立打包、部署、扩缩容,端口独立暴露(如用户服务监听 8081,订单服务监听 8082)
    3. 服务间调用的复杂性管理

    微服务架构下服务调用关系呈网状结构,例如用户下单时需调用商品服务查询库存、订单服务创建订单、支付服务处理付款,需通过服务注册与发现(如 Consul、Nacos)、API 网关(如 Kong、APISIX)等组件管理调用链路。

    (二)数据库瓶颈的解决方案

    1. 数据库隔离策略

    打破单体架构中 “一个数据库支撑所有服务” 的模式,实施服务与数据库的一一对应:

    • 每个服务拥有专属数据库,如订单服务使用订单库,商品服务使用商品库
    • 数据库类型可根据服务需求灵活选择(SQL、NoSQL、时序数据库等),例如用户行为分析服务可采用 MongoDB 存储非结构化数据
    2. 高并发优化组合拳
    • 缓存层引入:在服务与数据库间添加 Redis 缓存,热点数据(如热门商品信息)直接从缓存读取,降低数据库压力
    • 读写分离:对读多写少的服务(如商品浏览)实施主从数据库架构,主库负责写操作,从库处理读请求
    • 分库分表:当单一数据库容量或性能不足时,按业务维度(如订单按用户 ID 哈希分库)或时间维度(如历史订单归档)拆分

    (三)消息队列实现服务解耦

    1. 异步通信的核心价值

    引入 RabbitMQ、RocketMQ 等消息队列,将服务间的同步调用转为异步消息传递:

    • 典型场景:用户下单后,订单服务只需发送 “订单创建” 消息到队列,无需等待库存服务扣减库存、积分服务发放积分的同步响应,提升用户体验
    • 削峰填谷:在秒杀场景中,消息队列可缓存大量瞬时请求,避免直接冲击后端服务
    2. 消息驱动的系统设计
    • 事件通知:商品价格变更时,商品服务发布 “价格变更” 事件,订阅该事件的搜索服务、推荐服务可自动更新相关数据
    • 最终一致性:通过消息重试、死信队列等机制保证分布式事务的最终一致性,例如支付成功后确保订单状态更新

    三、分层微服务架构的进阶设计

    (一)微服务架构的性能优化痛点

    当微服务规模扩大后,内部服务间的通信效率成为新瓶颈:

    • HTTP 协议用于内部调用时开销较大(如 JSON 序列化 / 反序列化、HTTP 头信息冗余)
    • 服务间调用链路变长,例如一个前端请求可能需要经过 5-10 个微服务接力处理,HTTP 调用延迟累加显著

    (二)RPC 协议的内部通信优化

    1. RPC 的性能优势

    采用 gRPC、Thrift 等 RPC 框架替代 HTTP 进行内部服务通信:

    • 基于二进制协议传输,数据体积更小(相比 JSON 可减少 50% 以上传输量)
    • 支持流式调用和双向通信,适合实时数据传输(如聊天服务)
    • 接口定义清晰(通过 IDL 文件),服务端与客户端代码可自动生成
    2. 本地调用般的开发体验

    RPC 调用语法接近本地函数调用,例如使用 gRPC 调用商品服务获取商品详情:

    // 客户端代码
    response, err := productClient.GetProduct(ctx, &GetProductRequest{Id: "123"})
    if err != nil {// 错误处理
    }
    fmt.Println(response.Name)
    

    (三)分层架构的设计与实现

    分层微服务架构的层次关系图示:

    1. 双层服务架构划分
    • 底层服务:专注于基础业务能力提供,仅暴露 RPC 接口(如商品服务、库存服务)
    • 上层服务:整合底层服务能力,对外暴露 HTTP 接口(如网关服务、前端聚合服务)
    2. 分层架构的技术灵活性
    • 底层服务可根据性能需求选择语言(如 Go 用于高并发场景,Java 用于复杂业务逻辑)
    • 上层服务可根据前端需求灵活调整(如 Node.js 处理 I/O 密集型请求)
    • 典型案例:某电商平台底层商品服务使用 Go 开发以支撑高并发查询,上层用户界面服务使用 Python 快速迭代前端功能
    3. 分层架构的核心优势
    • 服务边界清晰:底层服务专注业务逻辑,上层服务专注接口适配,降低模块间耦合
    • 独立演进能力:底层服务升级不影响上层接口,上层服务可按需调整调用策略
    • 资源优化配置:底层服务可部署在高性能服务器,上层服务可部署在性价比服务器,降低整体成本
    4. 微服务网关的分层集成

    在分层架构中,网关承担更复杂的角色:

    • 上层服务的 HTTP 入口:直接对接前端请求,将 RESTful 接口转换为对底层服务的 RPC 调用
    • 跨层协议转换枢纽:处理上层服务的 HTTP 请求与底层服务的 gRPC/Thrift 调用间的协议转换
    • 分层安全边界:在网关层实现统一的安全策略,底层服务无需关注外部安全威胁

    (四)微服务架构面临的核心挑战与解决方案

    1. 服务调用复杂性与服务发现机制

    服务注册与发现的流程图示:

    随着微服务规模扩展至成百上千个服务节点,服务间调用面临两大核心问题:

    • 网络地址管理困境:传统硬编码 IP + 端口的方式在动态扩缩容场景下完全失效,例如电商大促时订单服务可能从 10 个实例扩展至 100 个,手动维护地址列表不现实
    • 健康状态监测缺失:单体架构中进程内调用天然可靠,而微服务中需实时感知服务实例的存活状态,避免将请求发送至故障节点

    注册中心的核心解决方案

    • 自动化服务注册:服务启动时自动向注册中心(如 Consul、Etcd)上报 IP、端口及健康检查端点
    • 动态服务发现:调用方通过注册中心查询目标服务的可用实例列表,典型流程如下:

    • 健康检查机制:注册中心定期向服务发送心跳包,超时未响应则标记为不健康并从列表中剔除
    2. 动态配置管理与配置中心

    微服务架构下配置管理面临三大痛点:

    • 多环境配置碎片化:开发、测试、生产环境的数据库连接、缓存地址等配置差异大,传统本地配置文件难以维护
    • 配置更新成本高:修改一个端口号可能需要重启数十个服务实例
    • 配置一致性风险:手动修改配置易出现遗漏,导致部分实例使用旧配置

    配置中心的核心能力

    • 集中配置存储:将所有服务配置统一存储在配置中心(如 Apollo、Nacos),支持按环境、按服务分组管理
    • 动态配置推送:配置变更时主动推送给相关服务,无需重启即可生效,典型场景:
      // 使用Apollo配置中心示例
      func init() {// 监听配置变更apollo.Start()apollo.Watch(func(newVal string) {// 动态更新数据库连接池db.Reconnect(newVal)}, "database.url")
      }
      
    • 配置版本管理:支持配置回滚,当新配置引发问题时可快速恢复至历史版本
    3. 分布式链路追踪与性能优化

    微服务调用链的复杂性带来两大观测难题:

    • 调用耗时定位困难:一个前端请求可能经过 10 + 服务节点,难以确定具体是哪个服务导致延迟
    • 故障根源追溯模糊:用户投诉的订单失败问题,可能涉及用户服务、支付服务、库存服务等多个节点

    链路追踪系统的核心价值

    • 全链路时间戳记录:通过分布式唯一 ID(如 TraceID)串联整个调用链,记录每个服务的处理耗时,例如:

      plaintext

      [TraceID: abc123]
      ├─ UserService: 20ms
      ├─ OrderService: 85ms  ← 瓶颈节点
      └─ PaymentService: 30ms
      
    • 性能瓶颈可视化:通过火焰图、调用拓扑图等可视化工具,直观呈现系统性能瓶颈
    • 故障快速定位:当请求失败时,可通过链路追踪日志快速定位到出错的服务节点及具体错误信息
    4. 微服务网关与 API 统一入口

    微服务直接对外暴露面临三大问题:

    • 域名管理混乱:数百个服务各自暴露端口,外部调用需维护大量域名 / IP 映射
    • 安全边界缺失:每个服务独立处理认证授权,易出现安全漏洞
    • 跨域请求复杂:前端需处理与多个服务的跨域配置,开发维护成本高

    API 网关的核心功能

    • 统一入口代理:将所有服务接口聚合到单一域名下(如api.example.com),外部调用无需关心后端服务细节
    • 请求路由分发:根据 URL 路径将请求转发至对应服务,例如:
      location /api/users/ {proxy_pass http://user-service:8081/;
      }
      location /api/orders/ {proxy_pass http://order-service:8082/;
      }
      
    • 增值功能集成
      • 认证授权:统一处理 JWT、OAuth2 等认证流程
      • 流量控制:基于令牌桶、漏桶算法实现服务限流
      • 响应缓存:对高频请求结果进行缓存,降低后端压力
      • 协议转换:将前端的 HTTP 请求转换为内部的 gRPC 调用

    四、从单体到微服务的演进策略

    1. 渐进式拆分:先将非核心功能(如数据分析)拆分为独立服务,再逐步拆分核心模块
    2. 接口先行:在拆分前定义清晰的服务接口,确保拆分后服务间通信顺畅
    3. 自动化测试:构建完善的自动化测试体系,避免拆分过程中引入功能缺陷
    4. 监控先行:提前部署分布式监控系统(如 Prometheus+Grafana),实时追踪微服务运行状态

    通过从单体架构到微服务架构的演进,系统将获得更高的可扩展性、可维护性和故障隔离能力,而分层微服务架构则进一步优化了服务间通信效率,使复杂系统能够以更灵活的方式应对业务快速变化。在 Go 语言生态中,结合 Gin 框架、gRPC、Consul 等组件,可高效构建高性能微服务架构,为企业级应用提供坚实的技术支撑。

    相关文章:

    从单体架构到微服务:微服务架构演进与实践

    一、单体架构的困境与演进 (一)单体应用的初始优势与演进路径 在系统发展的初期,单体架构凭借其简单性和开发效率成为首选。单体应用将整个系统的所有功能模块整合在一个项目中,以单一进程的方式运行,特别适合小型系…...

    Infineon AURIX TriCore TC3xx芯片内存专题报告

    作者: DBGAUTOMAN 日期: 2025-06-28 摘要 本报告旨在深入分析Infineon AURIX TriCore TC3xx系列微控制器的内存架构。通过对官方技术文档的系统性研究,报告详细阐述了TC3xx的内存配置、架构设计、存储器技术特性、系统级内存管理以及性能优化策略,为相关技术开发和系统设计…...

    WPF中获取主窗体

    在WPF的MVVM模式中,通常不直接引用主窗体(MainWindow),而是通过依赖注入、事件聚合器或命令参数传递等方式实现逻辑解耦。以下是几种推荐方法: 方法1:依赖注入(推荐) 在ViewModel中…...

    【龙泽科技】新能源汽车故障诊断仿真教学软件【吉利几何G6】

    产品简介 新能源汽车故障诊断仿真教学软件是依托《全国职业院校技能大赛》“新能源汽车维修”赛项中“新能源汽车简单故障诊断与排除” 竞赛模块,自主开发的一款仿真教学软件。软件采用仿真技术模拟实际的新能源汽车故障诊断过程,主要通过对新能源汽车常…...

    SpringBoot -- 以 jar 包运行(以及常见错误分析)

    7.SpringBoot 以 jar 包运行 打包 在打包之前先要导入一个maven项目的打包插件&#xff0c;使用 springInitializr 创建的 maven 项目&#xff0c;已经自动导入了。如果没有需要手动导入。将下面代码&#xff0c;放进 Pom.xml 里面即可。 <build><plugins><p…...

    求职招聘小程序源码招聘小程序搭建招聘小程序定制开发

    身份&#xff1a;求职者、企业 求职者&#xff1a;完善简历&#xff0c;简历投递 企业&#xff1a;企业入驻&#xff0c;查看简历 企业会员&#xff1a;半年 、年度 权益&#xff1a;每日发布条数、刷新条数&#xff0c;简历下载数量 聊天&#xff1a;求职者可以和企业聊…...

    Day44 预训练模型

    目录 一、预训练的概念 二、常见的分类预训练模型 2.1 CNN架构预训练模型 2.2 Transformer类预训练模型 2.3 自监督预训练模型 三、图像预训练模型的发展史 四、预训练的策略 五、预训练代码实战&#xff1a;resnet18 六、尝试在cifar10对比alexnet 七、尝试通过ctrl进…...

    【菜狗的记录】模糊聚类最大树、图神经网络、大模型量化——20250627

    每日学习过程中记录的笔记&#xff0c;从各个网站整理下来&#xff0c;用于当日复盘。 如果其中的知识点能帮到你&#xff0c;也很荣幸呀。 -------------------------------------------------------20250622------------------------------------------------------------- …...

    【Linux 设备模型框架 kobject 和 kset】

    Linux 设备模型框架 kobject 和 kset 一、Linux 设备模型概述二、kobject 与 kset 的核心概念1. kobject2. kset3. 关键数据结构 三、kobject 与 kset 的实现源码四、源码解析与使用说明1. kset 的创建与初始化2. kobject 的创建与属性3. sysfs 属性操作4. 用户空间访问示例 五…...

    leetcode.2014 重复k次的最长子序列

    题目描述 解题思路 这一题本来在想怎么样做才能获得通用解&#xff0c;因为乍一看总感觉遍历的时间代价会非常高。直到后面看到提示&#xff1a; 提示里面专门包含了一个n < k * 8&#xff0c;这太反常了。后面仔细一想&#xff0c;有道理&#xff0c;最后答案的字符个数一定…...

    机器学习3——参数估计之极大似然估计

    参数估计 问题背景&#xff1a; P ( ω i ∣ x ) p ( x ∣ ω i ) P ( ω i ) p ( x ) p ( x ) ∑ j 1 c p ( x ∣ ω j ) P ( ω j ) \begin{aligned} & P\left(\omega_i \mid \mathbf{x}\right)\frac{p\left(\mathbf{x} \mid \omega_i\right) P\left(\omega_i\right)…...

    利用python实现NBA数据可视化

    大家好&#xff0c;今天我们利用python爬取NBA球星每年的比赛数据并进行可视化展示。主要用到三个模块&#xff1a;xpath、matplotlib。其中xpth负责爬取网站上的信息。Matplotlib是Python开发人员常用的Python绘图库&#xff0c;可以用来绘制各种2D图形&#xff0c;具有绘图质…...

    杭州西湖断桥不断:3D扫描还原‘残雪‘视觉骗局

    “断桥残雪”是西湖十景之一&#xff0c;所谓“视觉骗局”指的是在特定条件下&#xff0c;从远处看断桥仿佛断开的奇妙视觉效果。利用3D扫描技术还原这一效果可按以下步骤进行&#xff1a; 数据采集 3D扫描断桥&#xff1a;使用高精度的3D激光扫描仪对断桥及其周边环境进行全面…...

    Dubbo服务调用超时问题解决方案

    Dubbo服务调用超时问题解决方案 Dubbo服务调用超时通常由网络延迟、服务端性能瓶颈、配置不当或资源竞争引发。以下解决方案基于根本原因分类&#xff0c;优先采用高可信度实践&#xff1a; &#x1f50d; 一、排查问题根源 网络诊断 使用 ping、telnet 检查服务提供者网络连…...

    视觉疲劳检测如何优化智能驾驶的险情管理

    视觉分析疲劳检测在智能驾驶中的应用研究 一、背景与需求 近年来&#xff0c;智能驾驶领域因疲劳驾驶引发的交通事故频发&#xff0c;如2025年某品牌智能汽车因驾驶员疲劳导致高速追尾事件&#xff0c;暴露了现有技术对复杂场景的适应不足。传统疲劳检测依赖单一生理信号或车…...

    C++ 第三阶段 并发与异步 - 第二节:异步任务(std::async)

    目录 一、std::async 概述 1. std::async 的定义 二、std::async 的基本用法 1. 基本语法 (1) 函数调用 (2) Lambda 表达式 三、执行策略详解 1. std::launch::async 2. std::launch::deferred 3. 默认策略&#xff08;std::launch::any&#xff09; 四、std::futur…...

    OpenCV图像添加水印

    一、前言 在数字图像处理中&#xff0c;为图片添加水印是一项常见且重要的技术。无论是版权保护、品牌宣传还是防止未经授权的使用&#xff0c;水印都能发挥重要作用。OpenCV作为一款强大的计算机视觉库&#xff0c;提供了丰富的功能来实现各种水印效果。本教程将详细介绍如何…...

    Linux信号机制:从入门到精通

    嘿&#xff0c;小伙伴们&#xff01;今天我要和大家聊一个Linux系统中非常有趣又重要的话题——信号机制。别担心&#xff0c;虽然信号听起来有点高深&#xff0c;但我会用最通俗易懂的语言&#xff0c;配合清晰的图表&#xff0c;带你彻底搞懂这个概念&#xff01; 什么是信号…...

    EXCEL数据报表

    客单价成交金额*成交客户数 —— 提取年份 YEAR() 视图-窗口-新建窗口&#xff0c;就能将excel的一个子表格单拎出来成为独立窗口&#xff0c;方便对比查看 数据报表的单元格尽量都用公式来填补&#xff0c;链接到源表上去。这样当源表有新数据更新进来后&#xff0c;报表也…...

    openGL学习(VAO和VBO)

    理论 VBO void prepare() {//创建一个VBO,但是还没有分配显存GLuint vbo 0;GL_CALL( glGenBuffers(1, &vbo));cout << "vbo " << vbo << endl;//销毁一个VBOGL_CALL(glDeleteBuffers(1, &vbo));cout << "delete vbo "…...

    【请关注】制造企业机械加工数据脱敏解决方案

    制造企业机械加工数据脱敏解决方案 一、方案概述 在制造企业尤其是机械加工领域,数字化转型带来了生产效率的大幅提升,大量生产数据、设备运行数据、供应链数据以及客户订单数据等成为企业发展的关键驱动力。然而,这些数据中包含众多敏感信息,如客户定制产品的设计图纸(…...

    2025.6.27总结

    最近工作又开始内耗了&#xff0c;一位同事的转岗直接让我破防了&#xff0c;明明他工作干得很不错&#xff0c;会得又多&#xff0c;性格又好&#xff0c;我还经常请教他业务上的问题。我和他的关系并不算太好&#xff0c;但他加入其他部门&#xff0c;竟然让我有些不舍&#…...

    Python打卡:Day38

    知识点回顾&#xff1a; Dataset类的__getitem__和__len__方法&#xff08;本质是python的特殊方法&#xff09;Dataloader类minist手写数据集的了解 浙大疏锦行...

    Ubuntu18.04/Mysql 5.7 建立主备模式Mysql集群

    一、数据库的安装 详见https://www.jianshu.com/p/5073177eedf2 本文实验环境为阿里云的两台ubuntu18.04服务器&#xff1a; master ip: 172.26.138.7 slave ip: 172.26.0.209 二、修改Master的配置(# 的行是我后增加的部分)&#xff1a; 编辑 /etc/mysql/mysql.conf.d/mysqld.…...

    Linux journal 日志大小限制与管理详解

    文章目录 Linux journal 日志大小限制与管理详解journal 日志的默认存储位置journal 日志大小限制配置查看当前日志占用情况手动清理日志文件按大小清理日志按时间清理日志按文件数清理日志 journald 日志机制原理简析&#xff08;适当加点原理&#xff09;日志筛选与导出技巧&…...

    Linux基本指令篇 —— tac指令

    tac 是 Linux 系统中一个非常实用的文本处理命令&#xff0c;它是 cat 命令的反向操作&#xff08;名称也是 "cat" 的反写&#xff09;。tac 是一个简单但功能强大的工具&#xff0c;特别适合需要反向处理文本数据的场景&#xff1a; 目录 一、基本功能 二、基本语法…...

    【Yonghong 企业日常问题08 】永洪BI的Apache Tomcat版本升级指南

    文章目录 前言操作步骤登录验证 前言 某公司业务永洪BI系统使用tomcat 9.0.97版本&#xff0c;接到总公司漏洞扫描整改要求需要将tomcat版本升级到9.0.97以上。 目标&#xff1a;tomcat 9.0.97》 9.0.98 1、下载tomcat所需要的版本 地址:https://tomcat.apache.org/download-…...

    动手学Python:从零开始构建一个“文字冒险游戏”

    动手学Python&#xff1a;从零开始构建一个“文字冒险游戏” 大家好&#xff0c;我是你的技术向导。今天&#xff0c;我们不聊高深的框架&#xff0c;也不谈复杂的算法&#xff0c;我们来做一点“复古”又极具趣味性的事情——用Python亲手打造一个属于自己的文字冒险游戏&…...

    【C/C++】C++26新特性前瞻:全面解析未来编程

    展望未来&#xff1a;C26 新特性全面解析 随着 C 标准每三年一次的迭代节奏&#xff0c;C26&#xff08;预计于 2026 年底正式发布&#xff09;正在逐步成型。相比 C20 的革命性更新和 C23 的“修补增强”&#xff0c;C26 继续推进现代 C 的理念——更安全、更高效、更模块化&…...

    Linux系统日志与守护进程开发实战指南

    Linux系统日志与守护进程开发实战指南 系统日志与守护进程 ├── 系统日志syslog │ ├── 日志路径: /var/log/syslog │ └── 核心API │ ├── openlog │ ├── syslog │ └── closelog └── 守护进程daemon└── 创建步骤├── um…...

    兰洋科技上合组织论坛发表专题分享,全球液冷布局引领绿色算力未来

    2025年6月17-19日&#xff0c;中国—上海合作组织数字技术合作发展论坛在新疆克拉玛依市举办。作为第四次上海合作组织成员国信息通信技术发展部门负责人会议的配套会议&#xff0c;论坛以“数字化转型助力可持续发展&#xff0c;数字包容促进上合共同繁荣”为主题&#xff0c;…...

    桌面小屏幕实战课程:DesktopScreen 11 SPI 水墨屏

    飞书文档https://x509p6c8to.feishu.cn/docx/doxcnlzpIgj3gosCZufBTCZxlMb SPI说明 SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上占用…...

    小知识点五、无刷电机闭环控制(电流)

    0 前言 该部分只用于自学使用&#xff0c;作为笔记方便后续自查。 资料参考&#xff1a;http://dengfoc.com 硬件&#xff1a;2208云台电机MT6701磁编码器 1 电流控制理论 1.1 待解决的问题 简单回顾一下在之前的学习中&#xff0c;我们通过 U q U_q Uq​和电角度 θ \the…...

    Java 编程之备忘录模式

    前言 有时候&#xff0c;我们真希望人生能有“CtrlZ”。在日常生活中&#xff0c;我们经常使用“撤销”功能&#xff0c;例如在写 Word、画图、写代码时一不小心操作失误&#xff0c;就希望能回到之前的状态。这种**“状态快照 恢复”**机制&#xff0c;在设计模式中就叫做&a…...

    SQL SERVER存储过程

    什么是存储过程 SQL 存储过程&#xff08;Stored Procedure&#xff09;是一个在数据库中预编译并存储的一组 SQL 语句。它们可以包含查询、插入、更新、删除等数据库操作&#xff0c;甚至包括控制流语句&#xff08;如条件判断、循环等&#xff09;。存储过程可以通过调用来执…...

    Vue样式绑定与条件渲染详

    一、Vue样式绑定 在Vue中&#xff0c;我们可以通过多种方式动态地绑定样式&#xff0c;让界面根据数据状态变化而自动更新样式。 1. class样式绑定 (1) 字符串写法 适用场景&#xff1a;样式的类名不确定&#xff0c;需要动态指定 <template><div><!-- 绑定…...

    python基于协同过滤的动漫推荐系统

    目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…...

    光场操控新突破!3D 光学信息处理迎来通用 PSF 工程时代--《自然》子刊:无需复杂算法,这一技术让 3D 光学成像实现 “即拍即得”念日

    导语 在光学成像领域&#xff0c;如何突破分辨率与成像速度的瓶颈&#xff0c;一直是科研人员探索的焦点。近日&#xff0c;加州大学洛杉矶分校&#xff08;UCLA&#xff09;的研究团队在《Light: Science & Applications》发表论文&#xff0c;提出了一种通用点扩散函数&a…...

    ubuntu20.04如何给appImage创建快捷方式

    ubuntu20.04如何给appImage创建快捷方式 1. 确保AppImage是可执行的 chmod x /path/to/your/appimage2. 创建.desktop文件 在~/.local/share/applications/目录下创建一个新的 .desktop 文件&#xff1a; vi ~/.local/share/applications/your-appname.desktop添加以下内容…...

    网络安全之SQL RCE漏洞

    引言 堡垒机&#xff08;Bastion Host&#xff09;&#xff0c;也称为跳板机或运维安全审计系统&#xff0c;是一种用于管理和控制对内部网络资源访问的安全设备。它的主要作用是作为运维人员访问内部服务器和网络设备的唯一入口&#xff0c;通过集中化的身份认证、权限管理和…...

    DeepSeek网页版随机点名器

    用DeepSeek帮我们生成了一个基于html5的随机点名器&#xff0c;效果非常棒&#xff0c;如果需要加入名字&#xff0c;请在代码中按照对应的格式添加即可。 提示词prompt 帮我生成一个随机点名的HTML5页面 生成真实一点的名字数据 点击随机按钮开始随机选择 要有闪动的效果 &…...

    Elasticsearch索引字段的类型

    在 Elasticsearch 中&#xff0c;索引字段的类型&#xff08;即 Mapping 中的字段类型&#xff09;对搜索和存储性能影响很大。下面是各种常用数据类型的用途及推荐使用场景总结&#xff1a; 1. keyword 类型&#xff08;精确匹配&#xff09; 适合数据&#xff1a; 不需要分词…...

    大模型在慢性病毒性肝炎预测及诊疗方案制定中的应用研究

    目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、慢性病毒性肝炎概述 2.1 疾病定义与分类 2.2 发病机制与病理特征 2.3 流行病学现状 三、数据收集与预处理 3.1 数据来源 3.2 数据清洗 3.3 特征工程 四、大模型选择与构建 4.1 模型选择依据 4.2 模型…...

    DAY 43 复习日

    浙大疏锦行https://blog.csdn.net/weixin_45655710 第一步&#xff1a;寻找并准备图像数据集 在Kaggle等平台上&#xff0c;你可以找到大量用于图像分类任务的数据集&#xff0c;例如英特尔图像分类数据集 (Intel Image Classification) 或手写数字识别数据集 (Digit Recogni…...

    SQL学习笔记3

    SQL常用函数 1、字符串函数 函数调用的语法&#xff1a;select 函数&#xff08;参数); 常用的字符串函数有&#xff1a; 拼接字符串&#xff0c;将几个字符串拼到一起&#xff1a;concat (s1,s2,……); select concat(你好,hello); update mytable set wherefo concat(中…...

    JVM调优实战 Day 7:JVM线程分析与死锁排查

    【JVM调优实战 Day 7】JVM线程分析与死锁排查 文章标签 jvm调优, 线程分析, 死锁排查, JVM监控, Java性能优化, JVM参数配置 文章简述 在Java应用的高并发场景中&#xff0c;线程管理与死锁问题往往是性能瓶颈的根源。本文作为“JVM调优实战”系列的第7天&#xff0c;深入解析…...

    Android-Layout Inspector使用手册

    Layout Inspector Android Layout Inspector 是 Android Studio 中用于调试应用布局的工具 启动方法&#xff1a; 通过下载Layout Inspector插件&#xff0c;在 “View - Tool Windows - Layout Inspector” 或 “Tools - Layout Inspector” 启动。 主要界面区域&#xff1a…...

    【51单片机5毫秒定时器】2022-6-1

    缘由单片机的代码&#xff0c;求大家来帮帮我-编程语言-CSDN问答 #include "REG52.h" unsigned char code smgduan[]{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0,64}; //共阴0~F消隐减号 unsigned char Js0, miao0;//中断…...

    Flutter 多平台项目开发指南

    Flutter 多平台项目开发指南 本指南将帮助你从 0 到 1 创建并适配一个支持 Android / iOS / Web / Windows / macOS / Linux 的 Flutter 多平台项目。 ✅ 一、创建支持多平台的 Flutter 项目 flutter create my_multi_platform_app cd my_multi_platform_app默认会生成支持以…...

    Mac电脑如何搭建基于java后端的开发的各种工具服务

    1. 确认Mac的CPU架构 首先&#xff0c;确认您的Mac是使用Intel还是Apple Silicon&#xff08;如M1芯片&#xff09;架构&#xff1a; uname -m如果返回x86_64&#xff0c;表示是Intel架构。如果返回arm64&#xff0c;表示是Apple Silicon架构。 2.安装IDEA Download Intelli…...