构建高效复杂系统的关键:架构与模块详解
目录
一、复杂系统组成
二、接入系统 (Access System)
三、应用系统 (Application System)
四、基础平台 (Foundation Platform)
五、中间件 (Abundant External Middleware)
六、支撑系统 (Supporting System)
七、总结
参考文章
干货分享,感谢您的阅读!
在当今的数字化世界中,复杂系统无处不在,无论是大规模的电商平台、金融系统,还是高可用的企业级软件,这些系统的高效运作都离不开精心设计的架构与各个模块的协同工作。然而,对于初学者或工程师来说,理解一个复杂系统的组成往往充满挑战。本篇文章将从系统的接入、应用、基础平台、中间件到支撑系统,逐一剖析每个模块的作用与技术实现,帮助你快速掌握复杂系统的核心设计思路与最佳实践。不论你是刚接触系统架构,还是想要深入优化现有架构,这篇文章都将为你提供宝贵的参考。
一、复杂系统组成
复杂系统是由多个相互关联、相互作用的组件组成的大型系统,通过这些组件的协同工作来完成特定的任务或提供特定的服务。在设计复杂系统时,通常会考虑以下五个关键模块,具体如下:
简单介绍如下:
模块 | 定义 | 例子 |
---|---|---|
接入系统 (Access System) | 系统与外部世界进行交互的入口,负责处理外部请求、验证身份、收集输入等。 | 用户界面、API端点、外部传感器等 |
应用系统 (Application System) | 整个系统的核心,负责处理业务逻辑、执行特定功能和任务,包括系统的主要功能和算法。 | 业务逻辑、数据处理、核心功能模块等 |
基础平台 (Foundation Platform) | 提供支持应用系统运行的底层基础设施,包括硬件、操作系统、数据库管理系统等。 | 服务器、存储系统、操作系统、数据库等 |
大量外部的中间件 (Abundant External Middleware) | 连接和协调系统不同组件的软件层,系统依赖于多种外部工具和服务,用于增强功能、提高性能或满足特定需求。 | 消息队列、缓存系统、身份验证服务、监控工具等 |
支撑系统 (Supporting System) | 包括维护和管理整个系统所需的各种支持服务,如日志记录、监控、安全性、备份等。 | 日志系统、监控系统、安全系统、备份系统等 |
二、接入系统 (Access System)
接入系统,它负责接收用户的请求,然后把用户的请求分发到某个Web服务器进行处理,接入系统主要包括DNS域名解析、负载均衡、Web服务器这些组件。
想象一个在线购物平台,用户在浏览器中输入商店的域名,触发了以下过程:
-
DNS域名解析: 用户的域名通过DNS解析得到相应的IP地址,确定了在线购物平台的服务器位置。
-
负载均衡: 用户的请求到达后,负载均衡器检测当前各个Web服务器的负载情况,并将请求分发给最空闲的服务器,确保各服务器能够均衡处理流量。
-
Web服务器: 最终,用户的请求到达Web服务器,该服务器处理并返回相应的页面,展示给用户。如果有大量用户同时访问,负载均衡器会根据负载情况动态调整分发策略,确保整个系统的稳定性和性能。
其中简单的技术点可能如下:
阶段 | 技术实现 | 实现方案 |
---|---|---|
DNS域名解析 | - 使用专业的DNS解析服务提供商或自建DNS服务器。 | - 采用Anycast技术,将DNS服务器分布在全球,提高解析速度。 |
负载均衡 | - 使用专业的负载均衡设备或软件(如Nginx、HAProxy)。 | - 采用轮询或基于权重的算法,确保每个Web服务器均衡处理流量。 |
Web服务器 | - 高性能的Web服务器(如Nginx、Apache)。 | - 使用多台Web服务器构建集群,确保高峰时期的大量用户请求。 |
- 应用服务器(如Tomcat、Node.js)处理动态内容。 | - 使用自动伸缩技术,根据实时负载动态调整服务器数量。 | |
- CDN缓存静态资源,减轻服务器压力。 | - 使用缓存技术,提高系统的响应速度。 | |
安全性和高可用性 | - SSL证书、HTTPS协议保障用户数据传输安全。 | - 使用防火墙、IDS等安全措施,确保系统的安全性。 |
- 备份和灾备系统跨可用区和跨地理区域部署。 | - 使用Web应用防火墙(WAF)进行Web应用层攻击防御。 |
三、应用系统 (Application System)
应用系统是整个系统的核心,负责处理业务逻辑、执行特定功能和任务,包括系统的主要功能和算法。
构建一个成功的应用系统需要考虑多个方面,具体要根据你的应用系统的性质和目标来调整。在整个开发过程中,与团队合作、进行测试以及定期审查进展。
出发点点上起吗应该具备:
-
明确目标和用户需求: 在开始开发之前,确保清楚你的应用系统的目标是什么,以及你的目标用户是谁。了解用户需求,确保你的应用系统解决了真实的问题或提供了有价值的服务。
-
用户体验设计(UX): 设计一个直观、易用的界面,确保用户能够轻松地理解和操作你的应用系统。注重用户体验可以提高用户留存率和满意度。鼓励用户提供反馈,并在可能的情况下积极采纳用户建议。
-
性能、稳定性可扩展性: 确保你的应用系统具有良好的性能和稳定性。优化代码、数据库查询以及其他关键流程,以确保用户在使用过程中不会遇到延迟或崩溃。考虑到应用系统的未来发展,设计具有良好可扩展性的架构。
-
安全性、合规性: 保护用户数据和隐私是至关重要的。采取适当的安全措施,包括加密通信、身份验证和授权机制,以防止潜在的攻击和数据泄露。确保你的应用系统符合法规和行业标准,特别是涉及用户数据和隐私的方面。
-
多平台兼容性: 如果可能,考虑设计一个可以在不同平台上运行的应用系统,例如Web、移动端和桌面。这有助于扩大用户基础。
-
数据管理和分析: 实施有效的数据管理和分析功能,以便了解用户行为、应用性能和其他关键指标。助于做出基于数据的决策,并不断改进你的应用系统。
在技术方面,选择合适的技术架构和实现方式,要保持灵活性,不断关注技术发展趋势,以确保应用系统始终采用最新、最适合的技术,随时适应变化的需求。比如:
-
合适的技术栈、前后端分离: 根据应用系统的需求和目标选择合适的技术栈。考虑到性能、可维护性、开发速度等因素,选择适合项目的编程语言、数据库、框架等技术。采用前后端分离的架构,例如使用RESTful API或GraphQL,可以使前端和后端独立开发、测试和维护,提高团队的灵活性。
-
微服务架构、云服务: 如果应用系统规模较大或有复杂的业务逻辑,考虑使用微服务架构可以使系统更容易扩展、部署和维护,并促使团队更好地分工合作。同样考虑使用云服务提供商,如AWS、Azure或Google Cloud等,以便更好地管理基础设施、提高可伸缩性,并受益于云服务的弹性和安全性。
-
容器化和编排: 使用容器技术,如Docker,并考虑使用容器编排工具,如Kubernetes,以简化应用部署、管理和维护。
-
自动化测试和持续集成/持续交付(CI/CD): 实施全面的自动化测试,包括单元测试、集成测试和端到端测试,以确保代码质量。采用CI/CD流程,实现自动化的构建、测试和部署,提高交付速度和可靠性。
待看的开源项目和文献,后期可以学习:
- Django: 一个用于构建Web应用的Python框架。
- Ruby on Rails: 一个用于构建Web应用的Ruby框架。
- Spring Boot: 一个用于构建Java应用的框架。
四、基础平台 (Foundation Platform)
基础平台:首先是各个语言的运行时,比如说JVM;然后是容器或虚拟机;下面还有操作系统;最底下就是硬件和网络。
-
运行时环境: 运行时环境包括各种编程语言的运行时,例如Java Virtual Machine (JVM)、Node.js、.NET Common Language Runtime (CLR)等。每个运行时环境负责解释和执行相应编程语言的代码。
-
容器或虚拟机: 容器和虚拟机提供了隔离和虚拟化的环境,使得应用程序可以在独立的容器或虚拟机中运行,而不受外部环境的影响。这有助于确保应用程序在不同环境中的一致性和可移植性。
-
操作系统: 操作系统是基础平台的核心组成部分,负责管理硬件资源,提供基本的系统服务,以及为应用程序提供一个抽象的运行环境。常见的操作系统包括Linux、Windows Server等。
-
硬件和网络: 这是基础平台的底层,包括服务器、存储设备、网络设备等。硬件提供计算、存储和网络资源,是应用系统正常运行的物理基础。
这部分的学习基本都是基础课程,一些基本学习资料可以后期在看看:
- Coursera - Operating Systems: Three Easy Pieces: 理解操作系统基本概念基础课程;
- Docker Documentation: Docker 官方文档,容器化信息学习基础;
- Kubernetes Documentation: Kubernetes 官方文档,学习容器编排基础;
- The Java™ Tutorials: Oracle 提供的 Java 官方教程,算Java基础了;
-
"Computer Organization and Design: The Hardware/Software Interface" by David A. Patterson and John L. Hennessy.
- "Computer Networking: Principles, Protocols and Practice" by Olivier Bonaventure.
五、中间件 (Abundant External Middleware)
中间件在软件架构中发挥着重要而不可忽视的作用。它们通常充当系统中不同组件之间的连接和协调层,提供了一些关键的功能,对于构建可靠、高性能、可扩展的应用系统至关重要。虽然在系统设计中增加中间件会引入一定的复杂性,但在大多数情况下,它们为系统带来的好处远远超过了引入的复杂性。主要的学习架构如下:
六、支撑系统 (Supporting System)
在大型应用系统中,这些支撑系统往往是构建和运营复杂系统不可或缺的组成部分。它们确保了系统的可靠性、安全性、可维护性和高效性。
支撑系统 | 功能 | 常见工具 |
---|---|---|
日志系统 | 收集、存储和分析系统生成的日志,用于故障排查、性能监控、安全审计等 | ELK Stack(Elasticsearch, Logstash, Kibana)、Splunk、Fluentd |
配置系统 | 管理应用程序的配置信息,支持动态配置更新,确保系统配置的一致性和可变性 | Spring Cloud Config、Consul、etcd |
运维系统 | 提供系统的运维和管理功能,包括监控、自动化部署、资源调度、性能优化等 | Kubernetes、Docker Swarm、Ansible、Chef、Puppet |
监控系统 | 实时监控系统的性能指标、日志、错误和异常,帮助及时发现和解决问题 | Prometheus、Grafana、Nagios、Datadog |
安全系统 | 确保系统的安全性,包括身份认证、访问控制、加密、漏洞扫描等 | OAuth、JWT、Firewall、WAF(Web Application Firewall) |
七、总结
复杂系统的设计和实现是一个系统性且多层次的过程,它需要将接入系统、应用系统、基础平台、中间件和支撑系统有机结合,才能确保系统的高效、稳定与可扩展性。通过合理分层和模块化设计,能够简化系统的复杂度,提高其灵活性和可维护性。与此同时,选择合适的技术栈和工具,确保不同组件之间的协同工作,也是构建成功系统的关键。希望本文对复杂系统各个组成部分的详细分析,能够为你在实际系统架构设计和开发中提供参考和启发。
参考文章
1.架构实战案例解析_架构案例_后端架构-极客时间
2.【系统】系统-CSDN博客
3.一文正确理解 分层架构系统 的接入层设计,以及接入层设计常见的问题和解决方案(雪崩、降级、限流、熔断)_业务接入层-CSDN博客
4.Middleware 入门指南:到底什么是中间件?
5.一文带你读懂中间件-腾讯云开发者社区-腾讯云
6.01|中间件生态(上):有哪些类型的中间件? - 知乎
7.中间件核心技术与实战_中间件_丁威_架构_数据库中间件_Redis_MyCat_中通_架构师_-极客时间
8.SOFA中间件包含哪些产品_金融分布式架构(SOFAStack)-阿里云帮助中心
相关文章:
构建高效复杂系统的关键:架构与模块详解
目录 一、复杂系统组成 二、接入系统 (Access System) 三、应用系统 (Application System) 四、基础平台 (Foundation Platform) 五、中间件 (Abundant External Middleware) 六、支撑系统 (Supporting System) 七、总结 参考文章 干货分享,感谢您的阅读&am…...
C++之递归
递归 递归函数是指一个函数直接或间接地调用自身。递归函数通常用于解决可以分解为相似子问题的问题,例如计算阶乘、斐波那契数列、遍历树结构等 基本结构 一个递归函数通常包含两个部分: 基准条件(Base Case):这是…...
pushgateway指标聚合问题
一 问题现象 一个job有多个实例推送指标,但是从pushgateway上看这个job的instance字段,只显示一个实例的ip,而不是多个实例。导致在grafana上无法正常根据ip查看监控。 应用的prometheus的配置 management:metrics:tags:application: ${spr…...
mini-lsm通关笔记Week2Day7
项目地址:https://github.com/skyzh/mini-lsm 个人实现地址:https://gitee.com/cnyuyang/mini-lsm 在上一章中,您已经构建了一个完整的基于LSM的存储引擎。在本周末,我们将实现存储引擎的一些简单但重要的优化。欢迎来到Mini-LSM的…...
[权限提升] Windows 提权 维持 — 系统错误配置提权 - 注册表权限配置错误提权
关注这个专栏的其他相关笔记:[内网安全] 内网渗透 - 学习手册-CSDN博客 0x01:注册表权限配置错误提权原理 通常 Windows 中的服务都是以 System 权限运行的,而 Windows 的服务程序的启动路径又是存放在注册表中的,若注册表配置不…...
产品经理的人工智能课 02 - 自然语言处理
产品经理的人工智能课 02 - 自然语言处理 1 自然语言处理是什么2 一个 NLP 算法的例子——n-gram 模型3 预处理与重要概念3.1 分词 Token3.2 词向量化表示与 Word2Vec 4 与大语言模型的交互过程参考链接 大语言模型(Large Language Models, LLMs)是自然语…...
软件工程导论三级项目报告--《软件工程》课程网站
《软件工程》课程网站 摘要 本文详细介绍了《软件工程》课程网站的设计与实现方案,包括可行性分析、需求分析、总体设计、详细设计、测试用例。首先,通过可行性分析从各方面确认了该工程的可实现性,接着需求分析明确了系统的目标用户群和功能…...
FPGA|IP核PLL调用测试:调用IP核
1、选择tools-》Megawizard plug-In manager 2、选择第一项,下一步 3、选择ATPLL,芯片系列、和输出文件类型,输出文件名称,单击next 4、出现配置PLL界面 5、选择输入时钟频率,单击next 6、生成reset、和locked信号&…...
leetcode_双指针 160.相交链表
160.相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 思路: 本题中,交点不是数值相等,而是指针相等 双指针遍历两遍后必定相遇,…...
TongSearch3.0.4.0安装和使用指引(by lqw)
文章目录 安装准备手册说明支持的数据类型安装控制台安装单节点(如需集群请跳过这一节)解压和启动开启X-Pack Security和生成p12证书(之后配置内置密码和ssl要用到)配置内置用户密码配置ssl(先配置内置用户密码再配ssl)配置控制台…...
2021.3.1的android studio版本就很好用
使用最新版的studio有个问题就是gradle版本也比较高,这样就容易出现之前项目不兼容问题,配置gradle可能会出现很多问题比较烦,所以干脆就用老版本的studio...
提示词实践总结
目录 一、要求创建SqlServer表(ChatGpt) 二、要求生成多层架构代码(Cursor) 三、要求修改方法返回值类型(Cursor) 四、要求修改方法入参(Cursor) 五、复杂的多表关联生成&#…...
【Elasticsearch】Filters聚合
Filters聚合的基本语法 Filters聚合是一种多桶聚合,用于将文档分组到多个桶中,每个桶对应一个过滤条件。以下是Filters聚合的基本语法和结构: 1.基本结构 json { "aggs": { "<aggregation_name>": { "filter…...
Java基础面试题50题
1,""空字符串的作用 package com.neuedu.nineteen;public class Test {public static void main(String[] args) {String s"";for (char i a; i < d; i) {ssi;//输出abc // sis;//输出cba}System.out.println(s);} }如题所示&…...
Django框架的全面指南:从入门到高级
Django框架的全面指南:从入门到高级 目录 引言Django简介安装与配置创建第一个Django项目Django的MVT架构模型(Model)视图(View)模板(Template)URL路由表单处理用户认证与权限Django Admin高级…...
c++继承
继承的概念和定义 继承的概念 继承 (inheritance) 机制是面向对象程序设计 使代码可以复用 的最重要的手段,它允许程序员在 保 持原有类特性的基础上进行扩展 ,增加功能,这样产生新的类,称派生类。继承 呈现了面向对象 程序设计的…...
【Linux系统】分页式存储管理
分页式存储管理 1、虚拟地址和页表的由来 思考一下,如果在没有虚拟内存和分页机制的情况下,每一个用户程序在物理内存上所对应的空间必须是连续的,如下图: 因为每一个程序的代码、数据长度都是不一样的,按照这样的映射…...
cmd执行mysql命令
安装mysql之后如果想使用cmd执行mysql命令,需要怎么操作呢,下面一起看一下。 安装mysql之后,如果直接去cmd窗口执行MySQL命令,窗口可能会提示mysql不是可执行命令。 需要配置系统的环境变量,将mysql的安装路径配置系…...
第一天:Linux内核架构、文件系统和进程管理
目录 Linux核心概念学习笔记一、Linux内核架构(一)内核的任务(二)实现策略(三)内核的组成部分(四)内核源文件目录结构二、Linux文件系统(一)文件系统架构(二)虚拟文件系统的数据结构三、Linux进程管理(一)进程相关概念(二)进程的层次结构(三)新进程创建机制(…...
QT:信号和槽
目录 1.概念 2.信号和槽的使用 2.1代码的方式使用 2.1.1.使用connect关联 2.2图形化界面的方式使用 2.2.1使用流程 2.2.2使用名字关联槽函数 3.自定义信号和槽函数 3.1自定义槽函数 3.2自定义信号 4.总结 1.概念 信号和槽是QT特有的一种机制,信号和槽都是…...
【Linux系统】线程:认识线程、线程与进程统一理解
一、更新认知 之前的认知 进程:一个执行起来的程序。进程 内核数据结构 代码和数据线程:执行流,执行粒度比进程要更细。是进程内部的一个执行分值 更新认识: a. 进程是承担分配系统资源的基本实体b. 线程是OS调度的基本单位 …...
蓝桥杯字串简写(二分)
输入 4 abababdb a b 输出 6 思路: 如果暴力,o(n**2),超时,想到可以先与处理一下,记录c1出现的位置,再根据c2的位置用二分法看前面有多少个符合条件的c1。 why二分: 代码:一些…...
【C语言】指针详细解读3
1. 数组名的理解 我们使用指针一般访问数组内容时,我们可能会这样写: int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0]; 这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址,⽽…...
Python爬虫-如何正确解决起点中文网的无限debugger
前言 本文是该专栏的第45篇,后面会持续分享python爬虫干货知识,记得关注。 本文以起点中文网为例子,针对起点中文网使用控制台调试出现无限debugger的情况,要如何解决? 针对该问题,笔者在正文将介绍详细而又轻松的解决方法。废话不多说,下面跟着笔者直接往下看正文详细…...
畅游Diffusion数字人(15):详细解读字节跳动最新论文——音频+姿态控制人类视频生成OmniHuman-1
Diffusion models代码解读:入门与实战 前言:昨晚字节跳动刚发布了一篇音频+姿态控制人类视频生成OmniHuman-1的论文,效果非常炸裂,并且是基于最新的MM-DiT架构,今天博主详细解读一下这一技术。 目录 贡献概述 方法详解 音频条件注入 Pose条件注入 参考图片条件注入 …...
Windows图形界面(GUI)-QT-C/C++ - QT Dock Widget
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 一、概述 二、使用场景 1. 工具栏 2. 侧边栏 3. 调试窗口 三、常见样式 1. 停靠位置 2. 浮动窗口 3. 可关闭 4. 可移动 四、属性设置 1. 设置内容 2. 获取内容 3. 设置标题 …...
MIT AppInventor v2.74更新的内容
MIT v2.74更新的内容如下: 新的 UI 选择器提示 向菜单、调色板和设计视图添加键盘导航 更新至 Google Blockly 版本 10 按住 Shift 并拖动以选择多个块 当值被拖近并且没有空闲插槽时,文本等块会自动合并并展开列表 将块拖到边缘时工作区会自动滚动 新的…...
使用 Ollama 在 Windows 环境部署 DeepSeek 大模型实战指南
文章目录 前言Ollama核心特性 实战步骤安装 Ollama验证安装结果部署 DeepSeek 模型拉取模型启动模型 交互体验命令行对话调用 REST API 总结个人简介 前言 近年来,大语言模型(LLM)的应用逐渐成为技术热点,而 DeepSeek 作为国产开…...
Hackmyvm whitedoor
简介 难度:简单 靶机地址: 环境 kali:192.168.194.9 靶机:192.168.194.24 扫描 nmap -sT -sV -A -T4 192.168.194.24 -p- -Pn 三个服务,ftp匿名登录、ssh连接以及web服务 ftp里面只有一个没用的README文件 访问…...
02/06 软件设计模式
目录 一.创建型模式 抽象工厂 Abstract Factory 构建器 Builder 工厂方法 Factory Method 原型 Prototype 单例模式 Singleton 二.结构型模式 适配器模式 Adapter 桥接模式 Bridge 组合模式 Composite 装饰者模式 Decorator 外观模式 Facade 享元模式 Flyw…...
Java的Integer缓存池
Java的Integer缓冲池? Integer 缓存池主要为了提升性能和节省内存。根据实践发现大部分的数据操作都集中在值比较小的范围,因此缓存这些对象可以减少内存分配和垃圾回收的负担,提升性能。 在-128到 127范围内的 Integer 对象会被缓存和复用…...
[特殊字符] ChatGPT-4与4o大比拼
🔍 ChatGPT-4与ChatGPT-4o之间有何不同?让我们一探究竟! 🚀 性能与速度方面,GPT-4-turbo以其优化设计,提供了更快的响应速度和处理性能,非常适合需要即时反馈的应用场景。相比之下,G…...
2024年12月 Scratch 图形化(二级)真题解析 中国电子学会全国青少年软件编程等级考试
202412 Scratch 图形化(二级)真题解析 中国电子学会全国青少年软件编程等级考试 一、单选题(共25题,共50分) 第 1 题 小猫初始位置和方向如下图所示,下面哪个选项能让小猫吃到老鼠?( ) A. B. …...
【2025】camunda API接口介绍以及REST接口使用(3)
前言 在前面的两篇文章我们介绍了Camunda的web端和camunda-modeler的使用。这篇文章主要介绍camunda结合springboot进行使用,以及相关api介绍。 该专栏主要为介绍camunda的学习和使用 🍅【2024】Camunda常用功能基本详细介绍和使用-下(1&…...
35.Word:公积金管理中心文员小谢【37】
目录 Word1.docx Word2.docx Word2.docx 注意本套题还是与上一套存在不同之处 Word1.docx 布局样式的应用设计页眉页脚位置在水平/垂直方向上均相对于外边距居中排列:格式→大小对话框→位置→水平/垂直 按下表所列要求将原文中的手动纯文本编号分别替换…...
关于使用numpy进行数据解析性能优化的几点认识
前言:数据解析的性能严重影响用户体验,针对需要批量处理的数据,考虑使用numpy自定义矢量化计算函数提升数据解析的性能。下面的表述都是网上查找的资料,仅供大家参考,具体情况还是需要具体分析的。 1. 使用numpy自定义…...
扣子平台的选择器节点:让智能体开发更简单,扣子免费系列教程(17)
欢迎来到涛涛聊AI。今天,我们来聊聊一个非常实用的工具——扣子平台的选择器节点。即使你不是计算机专业人员,但对计算机操作比较熟悉,这篇文章也能帮你快速上手。我们会从基础知识讲起,一步步带你了解选择器节点的使用方法和应用…...
java s7接收Byte字节,接收word转16位二进制
1图: 2.图: try {List list getNameList();//接收base64S7Connector s7Connector S7ConnectorFactory.buildTCPConnector().withHost("192.168.46.52").withPort(102).withTimeout(1000) //连接超时时间.withRack(0).withSlot(3).build()…...
学习日记250205
一.论文 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding 二、计划: 理一下微调相关的文章 三. )——( 明天认真学习了,不能再打这么久的星露谷了!!࿰…...
位置-速度双闭环PID控制详解与C语言实现
目录 概述 1 控制架构解析 1.1 级联控制结构 1.2 性能对比 2 数学模型 2.1 位置环(外环) 2.2 速度环(内环) 3 C语言完整实现 3.1 控制结构体定义 3.2 初始化函数 3.3 双环计算函数 4 参数整定指南 4.1 整定步骤 4.2 典型参数范围 5 关键优化技术 5.1 速度前馈 …...
21.2.1 基本操作
版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 Excel的基本操作步骤: 1、打开Excel:定义了一个Application对象: Microsoft.Office.Interop.E…...
Python-基于PyQt5,Pillow,pathilb,imageio,moviepy,sys的GIF(动图)制作工具
前言:在抖音,快手等社交平台上,我们常常见到各种各样的GIF动画。在各大评论区里面,GIF图片以其短小精悍、生动有趣的特点,被广泛用于分享各种有趣的场景、搞笑的瞬间、精彩的动作等,能够快速吸引我们的注意…...
c++ stl 遍历算法和查找算法
概述: 算法主要由头文件<algorithm> <functional> <numeric> 提供 <algorithm> 是所有 STL 头文件中最大的一个,提供了超过 90 个支持各种各样算法的函数,包括排序、合并、搜索、去重、分解、遍历、数值交换、拷贝和…...
Java学习进阶路线
Java基础 Java Web 前端HTML/css/js,J2EE(Servlet/jsp),数据库(Mysql/oracle) Java开发框架 Spring MVC/Mybatis/Herbernate/maven 《Java编程思想》 深入了解java基础 Java设计模式 《Effective j…...
探寻系统响应的奥秘:为何常用以 e 为底的指数组合表示
一、引言 在工程与科学领域的系统分析中,常常会发现系统响应多以 e e e 为底的指数组合来表示。从电路系统里的电流电压变化,到机械系统的振动情况,再到控制系统的动态特性,这种表示方法无处不在。那么,究竟是什么原…...
java 进阶教程_Java进阶教程 第2版
第2版前言 第1版前言 语言基础篇 第1章 Java语言概述 1.1 Java语言简介 1.1.1 Java语言的发展历程 1.1.2 Java的版本历史 1.1.3 Java语言与C/C 1.1.4 Java的特点 1.2 JDK和Java开发环境及工作原理 1.2.1 JDK 1.2.2 Java开发环境 1.2.3 Java工作原理 1.…...
Ext文件系统
文件内容属性 被打开的文件在内存中,没有被打开的文件在磁盘里文件系统的工作就是根据路径帮我们找到在磁盘上的文件 磁盘(硬件) 磁盘的存储结构 磁头在传动臂的运动下共同进退,向磁盘写入的时候是向柱面批量写入的 OS文件系统访…...
C++滑动窗口技术深度解析:核心原理、高效实现与高阶应用实践
目录 一、滑动窗口的核心原理 二、滑动窗口的两种类型 1. 固定大小的窗口 2. 可变大小的窗口 三、实现细节与关键点 1. 窗口的初始化 2. 窗口的移动策略 3. 结果的更新时机 四、经典问题与代码示例 示例 1:和 ≥ target 的最短子数组(可变窗口…...
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)
目录 1 -> List 1.1 -> 创建List组件 1.2 -> 添加滚动条 1.3 -> 添加侧边索引栏 1.4 -> 实现列表折叠和展开 1.5 -> 场景示例 2 -> dialog 2.1 -> 创建Dialog组件 2.2 -> 设置弹窗响应 2.3 -> 场景示例 3 -> form 3.1 -> 创建…...
【加餐】使⽤指针实现链表
【加餐】使⽤指针实现链表 面向过程方式和面向对象方式(把面向过程的封装一下就行了)是两种不同的编程方法论...