UML 类图基础和类关系辨析
UML 类图
目录
-
1 概述
-
2 类图MerMaid基本表示法
-
3 类关系详解
- 3.1 实现和继承
- 3.1.1 实现(Realization)
- 3.1.2 继承/泛化(Inheritance/Generalization)
- 3.2 聚合和组合
- 3.2.1 组合(Composition)
- 3.2.2 聚合(Aggregation)
- 3.3 关联和依赖
- 3.3.1 关联(Association)
- 重数性(Multiplicity)
- 导航性 (navigability)
- 3.3.1.1 关联关系的分类
- 3.3.1.1.1 双向关联(无箭头或双箭头)
- 3.3.1.1.2 单向关联(单箭头)
- 3.3.1.1.3 限制关联
- 3.3.1.1.4 自关联和递归关联
- 依赖关系 (Dependency)
- 3.3.1 关联(Association)
- 3.4 类关系的深度解析
- 3.4.1 基础关系矩阵
- 3.4.2 关系判定三维度
- 3.4.3 特殊关系辨析
- 3.4.4 建模实践原则
- 3.4.5 关系速查口诀
- 3.1 实现和继承
-
4 注意事项
-
5 应用建议
-
参考资料
类图 | Mermaid 中文网
1 概述
在软件工程中,统一建模语言 (UML) 中的类图Class Diagram是一种静态结构图,它通过显示系统的类、它们的属性、操作 (或方法) 以及对象之间的关系来描述系统的结构。
- 定义 :UML(Unified Modeling Language统一建模语言)类图是用来描述系统中类的静态结构和它们之间的关系的一种图。
- 类的静态结构
- 类的属性与方法
- 类之间的关系,例如:依赖、关联、继承等关系。
- 系统组成部分的协作关系
- 作用 :
- 系统分析和设计:帮助理解系统的结构和功能。
- 代码可视化:将代码结构映射到类图上,便于理解和维护。
- 团队沟通:作为统一的建模语言,促进团队成员之间的交流和协作。
- 类图的基本元素
- 类(Class):表示系统中的实体或概念,通常用矩形表示。
- 接口(Interface):用圆角矩形表示,包含接口名和方法。
- 对象(Object):类的实例,用矩形框带有下划线表示。
- 属性(Attribute):类的特性或数据成员,用带有属性名和类型的矩形表示。
- 操作(Operation):类的行为或方法,用带有操作名和参数的椭圆表示。
- 关系(Relationship):表示类之间的联系,如继承、关联、聚合、组合等。
- 我常用的UML工具
- MerMaid
- 如果类图复杂,使用Draw.io将MerMaid代码导入并调整布局和扩展
2 类图MerMaid基本表示法
请参考Class diagrams | Mermaid
3 类关系详解
3.1 实现和继承
3.1.1 实现(Realization)
-
定义::表示类与接口之间的关系
-
特点:
- 类实现接口定义的方法
- 支持多接口实现
-
UML表示:空心三角形箭头 + 虚线 (<|…) ,箭头指向接口
-
代码示例
interface Flyable {void fly(); } class Bird : Flyable {public void fly() { /*...*/ } }
3.1.2 继承/泛化(Inheritance/Generalization)
-
定义:父子类之间的"is-a"关系
-
特点:
- 子类继承父类属性和方法
- 支持多态性
- 父类更通用,子类更具体
-
UML表示:空心三角箭头 + 实线 (<| --) ,从子类指向父类。
-
代码示例:
class Animal {} class Dog : Animal {}
3.2 聚合和组合
3.2.1 组合(Composition)
-
定义:强聚合关系,部分不能脱离整体存在
-
特点:
- 强生命周期绑定
- 整体负责部分的创建与销毁
-
UML表示:实心菱形(整体端)+ 实线 (
*--
),整体 *-- 部分 -
示例:
- 在线学习平台的课程与课程章节:一个在线学习平台的课程通常由多个章节组成。课程作为一个整体,课程章节作为部分,章节的存在和使用完全依赖于所属的课程。例如,当一个编程语言课程创建后,课程中添加的各个章节(如基础语法章节、面向对象编程章节等)才会被学生学习,只有在课程被访问时,其章节才会被展示和学习,如果该课程从平台上下架删除,那么相应章节也会被删除,无法脱离课程单独存在或被其他课程使用。
-
代码实现:
using System; using System.Collections.Generic;// 课程章节类 public class CourseChapter {private string chapterName;private string chapterContent;public CourseChapter(string chapterName, string chapterContent){this.chapterName = chapterName;this.chapterContent = chapterContent;}public void DisplayChapterInfo(){Console.WriteLine($"章节名称:{chapterName},章节内容:{chapterContent}");} }// 课程类 public class OnlineCourse {private string courseName;private List<CourseChapter> chapters = new List<CourseChapter>();public OnlineCourse(string courseName){this.courseName = courseName;}public void AddChapter(string chapterName, string chapterContent){CourseChapter chapter = new CourseChapter(chapterName, chapterContent);chapters.Add(chapter);}public void DisplayCourseInfo(){Console.WriteLine($"课程名称:{courseName}");Console.WriteLine("课程包含的章节:");foreach (CourseChapter chapter in chapters){chapter.DisplayChapterInfo();}} }// 测试类 public class Program {public static void Main(){OnlineCourse javaCourse = new OnlineCourse("C# 编程教程");javaCourse.AddChapter("基础语法", "介绍了的变量、数据类型、运算符等基础语法知识");javaCourse.AddChapter("面向对象编程", "讲解了 中的类、对象、继承、多态等面向对象编程概念");javaCourse.DisplayCourseInfo();} }
3.2.2 聚合(Aggregation)
-
定义:"has-a"关系,整体与部分可独立存在
-
特点:
- 弱包含关系
- 生命周期不绑定
-
UML表示:空心菱形(整体端)+ 实线箭头,整体o-- 部分
-
示例:
- 订单(Order)与订单项(OrderItem)是聚合关系,订单 “包含” 订单项,但订单项可以独立于订单存在(例如可以在库存管理中单独处理订单项)。
- 生命周期不绑定:即使订单被删除,订单项对象本身仍然可以存在,它们只是不再被该订单关联而已。
- 订单类通过维护一个订单项列表来管理多个订单项,这体现了整体(订单)与部分(订单项)之间的弱包含关系。
-
代码实现:
using System; using System.Collections.Generic;// 订单项类 public class OrderItem {public int ProductId { get; set; }public string ProductName { get; set; }public decimal Price { get; set; }public int Quantity { get; set; }public OrderItem(int productId, string productName, decimal price, int quantity){ProductId = productId;ProductName = productName;Price = price;Quantity = quantity;} }// 订单类 public class Order {public int OrderId { get; set; }public DateTime OrderDate { get; set; }public List<OrderItem> OrderItems { get; set; }public Order(int orderId, DateTime orderDate){OrderId = orderId;OrderDate = orderDate;OrderItems = new List<OrderItem>();}// 添加订单项public void AddOrderItem(OrderItem item){OrderItems.Add(item);} }public class Program {public static void Main(){// 创建订单Order order = new Order(1001, DateTime.Now);// 创建订单项OrderItem item1 = new OrderItem(201, "Laptop", 800.00m, 1);OrderItem item2 = new OrderItem(202, "Mouse", 20.00m, 2);// 将订单项添加到订单order.AddOrderItem(item1);order.AddOrderItem(item2);// 输出订单信息Console.WriteLine($"Order ID: {order.OrderId}");Console.WriteLine($"Order Date: {order.OrderDate}");Console.WriteLine("Order Items:");foreach (var item in order.OrderItems){Console.WriteLine($"Product ID: {item.ProductId}, Product Name: {item.ProductName}, Price: {item.Price}, Quantity: {item.Quantity}");}} }
3.3 关联和依赖
3.3.1 关联(Association)
-
定义:类之间的结构型关系,表示对象间的持久连接,可能有多重性和导航性
重数性(Multiplicity)
重数表示类之间的实例数量关系,可以用一个整数范围表示,如
0..1
、1..*
等。例如,如果一个客户可以在商店中购买至少0个、最多1个产品,则可以将关联关系的重数设置为
0..1
。导航性 (navigability)
可以通过一个类的实例访问与之关联的另一个类的实例。
导航性可以通过在关联关系线上添加箭头表示。例如,如果
ClassA
可以导航到ClassB
,则可以在关联关系线上添加一个从ClassA
指向ClassB
的箭头。 -
UML表示:实线+箭头(- - >),可标注角色名和多重性
3.3.1.1 关联关系的分类
3.3.1.1.1 双向关联(无箭头或双箭头)
默认是双向的。
示例:在电商公司中,每个客户可以有多个订单,而每个订单都属于一个特定的客户。当客户创建新订单时,系统会自动将客户与订单关联起来。
-
代码
public class Customer {public Guid Id { get; } = Guid.NewGuid();public string Name { get; set; }public List<Order> Orders { get; } = new List<Order>(); // 导航到订单 }public class Order {public string OrderNumber { get; }public DateTime CreateTime { get; } = DateTime.Now;public Customer Owner { get; } // 导航到客户public Order(Customer owner){OrderNumber = $"ORD-{DateTime.Now:yyyyMMddHHmmss}";Owner = owner;owner.Orders.Add(this); // 双向关联建立} }// 使用示例 var customer = new Customer { Name = "科技公司" }; var order1 = new Order(customer); var order2 = new Order(customer); Console.WriteLine($"{customer.Name}的订单数:{customer.Orders.Count}");
-
MerMiad示例
3.3.1.1.2 单向关联(单箭头)
类的关联关系也可以是单向的,单向关联用带箭头的实线表示。
在物流配送系统中,每个包裹可以有多个运输标签,用于指示包裹的目的地。
-
代码
public class Package {public string TrackingNumber { get; } = Guid.NewGuid().ToString("N");public List<TransportLabel> Labels { get; } = new(); // 单向导航到运输标签 }public class TransportLabel {public string Barcode { get; } = Guid.NewGuid().ToString("N").Substring(0, 12);public string Destination { get; set; } }// 使用示例 var package = new Package(); package.Labels.Add(new TransportLabel { Destination = "上海仓库" }); package.Labels.Add(new TransportLabel { Destination = "北京分拨中心" }); Console.WriteLine($"包裹跟踪号:{package.TrackingNumber}");
-
MerMaid
3.3.1.1.3 限制关联
限定关联具有限定符
限定符的作用类似HashMap中的键(key),用于从一个集合中选择一个或多个对象。
例如,在一个企业资源规划(ERP)系统中,每个用户可以在不同的业务场景下具有不同的角色。
public class User {private Map<String, Role> roles;public Role getRole(String scenario){return roles.get(scenario);}
}
public class Role {
}
3.3.1.1.4 自关联和递归关联
-
自关联(Self-association):表示一个类与自身相关联。
例如,一个公司可以拥有多个子公司,而子公司也可以有自己的子公司。
public class Node {private Node subNode; }
-
递归关联(Recursive association):与自关联类似,但更强调关系的传递性。
例如,一个文件夹可以包含多个子文件夹,子文件夹也可以包含其他子文件夹。
依赖关系 (Dependency)
-
概念:依赖则表示一个类在某种程度上依赖于另一个类的定义。
-
特点:
- 是一种使用关系,通常是短暂的,例如一个类的方法内部使用到另一个类。
- 侧重于描述一个类对另一个类的功能或服务的使用,而不涉及持有对方的实例或对象。
- 依赖关系通常是临时性的、相对不稳定的,并且依赖的方向是从依赖者指向被依赖者。
-
UML表示:虚线箭头(… >),可标注角色名和多重
-
示例:
using System;namespace DependencyExample {// EmailService 类,用于发送邮件public class EmailService{public void SendEmail(string to, string subject, string body){Console.WriteLine($"Sending email to {to}: {subject} - {body}");}}// Customer 类,依赖 EmailService 类来发送邮件public class Customer{public string Email { get; set; }// 在方法内部使用 EmailService 类,表现出依赖关系public void NotifyByEmail(string subject, string message){EmailService emailService = new EmailService();emailService.SendEmail(Email, subject, message);}}class Program{static void Main(string[] args){Customer customer = new Customer();customer.Email = "customer@example.com";// 调用 Customer 类的方法,触发对 EmailService 类的依赖customer.NotifyByEmail("Order Confirmation", "Your order has been confirmed.");}} }
- MerMaid类图
- MerMaid类图
3.4 类关系的深度解析
3.4.1 基础关系矩阵
关系类型 | 强度 | 生命周期 | UML表示 | 代码特征 | 典型示例 |
---|---|---|---|---|---|
依赖 | ★ | 临时 | `…>` 虚线 | 方法参数/局部变量 | `Order …> Payment` |
关联 | ★★ | 独立 | `- ->` 实线 | 成员变量持有引用 | `Teacher --> Student` |
聚合 | ★★★ | 部分独立 | `- -` 空心菱形 | 外部传入部分对象 | `Library o– Book` |
组合 | ★★★★ | 依赖整体 | `- -` 实心菱形 | 内部创建部分对象 | `School *– Classroom` |
3.4.2 关系判定三维度
-
生命周期耦合度
-
对象控制权
- 强控制:组合(整体创建/销毁部分)
- 弱控制:聚合(外部管理部分对象)
- 无控制:关联(平等协作关系)
-
业务语义表现
// 组合关系示例 class Human {Heart heart = new Heart(); // 内部创建不可替换 }// 聚合关系示例 class Car {Tire[] tires; // 外部装配可更换 }// 关联关系示例 class Professor {List<Student> advisees; // 平等协作 }
3.4.3 特殊关系辨析
-
聚合 vs 关联的灰度边界
- 共性特征:均通过成员变量持有引用
- 核心差异:
1. [聚合] 隐含整体-部分语义(汽车-轮胎) 2. [关联] 强调平等协作关系(学生-课程)
-
记忆决策树
是否整体-部分关系? ├─ 是 → 部分能否独立存在? │ ├─ 能 → 聚合(空心菱形) │ └─ 否 → 组合(实心菱形) └─ 否 → 是否持久持有?├─ 是 → 关联(箭头实线)└─ 否 → 依赖(箭头虚线)
3.4.4 建模实践原则
- 语义优先原则
- 避免仅通过代码结构判断关系类型
- 示例:即使同样使用成员变量,
Professor-Student
是关联,Car-Tire
是聚合
- 生命周期驱动设计
- 组合关系应严格满足:
整体.create(部分) && 整体.delete(部分)
- 反例:使用组合表示可更换的汽车发动机将导致设计僵化
- 组合关系应严格满足:
- 模式适配策略
- 聚合关系常对应:对象池模式、共享组件模式
- 组合关系常对应:建造者模式、工厂方法模式
3.4.5 关系速查口诀
👐 依赖弱,参数传,工具用完不再看
🤝 关联弱,成员留,合作长久不停休
🚗 聚合中,外部传,轮胎汽车换自由
❤️ 组合强,内部有,人心同命共腐朽
4 注意事项
- 保持简洁和清晰,避免过多的细节,不要过度设计关系
- 正确表达关系和多重性。避免循环依赖,
- 保持合理抽象层次,控制类关系的层级深度
- 及时更新类图以反映系统的变化。
- 保持类图与代码实现的一致性
5 应用建议
- 优先使用组合/聚合代替继承(设计原则)
- 接口实现增强系统扩展性
- 合理控制关联关系的复杂度
- 依赖关系常用于模块解耦
相关文章:
UML 类图基础和类关系辨析
UML 类图 目录 1 概述 2 类图MerMaid基本表示法 3 类关系详解 3.1 实现和继承 3.1.1 实现(Realization)3.1.2 继承/泛化(Inheritance/Generalization) 3.2 聚合和组合 3.2.1 组合(Composition)3.2.2 聚…...
STM32F103C8T6信息
STM32F103C8T6 完整参数列表 一、核心参数 内核架构 ARM Cortex-M3 32位RISC处理器 最大主频:72 MHz(基于APB总线时钟) 运算性能:1.25 DMIPS/MHz(Dhrystone 2.1基准) 总线与存储 总线宽度ÿ…...
unity 读取csv
1.读取代码 string filePath Application.streamingAssetsPath "\\data.csv"; public List<MovieData> movieData new List<MovieData>(); private void ReadCSV(string filePath) { List<List<string>> data new List<…...
那些年踩过的坑之Arrays.asList
一、前言 熟悉开发的兄弟都知道,在写新增和删除功能的时候,大多数时候会写成批量的,原因也很简单,批量既支持单个也支持多个对象的操作,事情也是发生在这个批量方法的调用上,下面我简单说一下这个事情。 二…...
ASP.NET Core 自动识别 appsettings.json的机制解析
ASP.NET Core 自动识别 appsettings.json 的机制解析 在 ASP.NET Core 中,IConfiguration 能自动识别 appsettings.json 并直接读取值的机制,是通过框架的 “约定优于配置” 设计和 依赖注入系统 共同实现的。以下是详细原理: 默认配置源的自…...
深入解析Mlivus Cloud核心架构:rootcoord组件的最佳实践与调优指南
作为大禹智库的向量数据库高级研究员,同时也是《向量数据库指南》的作者,我在过去30年的向量数据库和AI应用实战中见证了这项技术的演进与革新。今天,我将以专业视角为您深入剖析Mlivus Cloud的核心组件之一——rootcoord,这个组件在系统架构中扮演着至关重要的角色。如果您…...
ApplicationEventPublisher用法-笔记
1.ApplicationEventPublisher简介 org.springframework.context.ApplicationEventPublisher 是 Spring 框架中用于发布自定义事件的核心接口。它允许你在 Spring 应用上下文中触发事件,并由其他组件(监听器)进行响应。 ApplicationEventPub…...
数字孪生:从概念到实践,重构未来产业的“虚拟镜像”
一、开篇:为什么数字孪生是下一个技术风口? 现象级案例引入: “特斯拉用数字孪生技术将电池故障预测准确率提升40%;西门子通过虚拟工厂模型缩短30%产品研发周期;波音777X飞机设计全程零实物原型……” 数据支撑&#…...
Python笔记:VS2013编译Python-3.5.10
注:本文是编译老版本,有点麻烦,测试了编译新版,基本上是傻瓜是操作即可 1. python官网下载源码 https://www.python.org/ftp/python/3.5.10/Python-3.5.10.tgz 2. 编译前查看目录中相关文档 源码目录结构 看README文档 经过查…...
STM32八股【6】-----CortexM3的双堆栈(MSP、PSP)设计
STM32的线程模式(Thread Mode)和内核模式(Handler Mode)以及其对应的权级和堆栈指针 线程模式: 正常代码执行时的模式(如 main 函数、FreeRTOS任务) 可以是特权级(使用MSPÿ…...
MySQL触法器
1. 什么是触发器及其特点 MySQL数据库中触发器是一个特殊的存储过程,不同的是执行存储过程要使用 CALL 语句来调用,而触发器的执行不需要使用 CALL 语句来调用,也不需要手工启动,只要一个预定义的事件发生就会被 MySQL自动调用。…...
金仓数据库征文-政务领域国产化数据库更替:金仓 KingbaseES 应用实践
目录 一.金仓数据库介绍 二.政务领域数据库替换的时代需求 三.金仓数据库 KingbaseES 在政务领域的替换优势 1.强大的兼容性与迁移能力 2.高安全性与稳定性保障 3.良好的国产化适配性 四.金仓数据库 KingbaseES 在政务领域的典型应用实践 1.电子政务办公系…...
微服务架构在云原生后端的深度融合与实践路径
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:后端架构的演变,走向云原生与微服务融合 过去十余年,后端架构经历了从单体应用(Monolithic)、垂直切分(Modularization)、到微服务(Microservices)的演进,每一次变化都是为了解决…...
北斗导航 | 北斗卫星导航单点定位与深度学习结合提升精度
以下是北斗卫星导航单点定位(SPP)与深度学习结合提升精度的关键方法总结,综合了误差建模、信号识别、动态环境适应等技术方向: 一、非直射信号(NLOS)抑制与权重修正 1. 双自注意力网络(Dual Self-Attention Network) 原理:通过同时建模卫星信号的空间环境特征(如天空…...
AlarmClock4.8.4(官方版)桌面时钟工具软件下载安装教程
1.软件名称:AlarmClock 2.软件版本:4.8.4 3.软件大小:187 MB 4.安装环境:win7/win10/win11(64位) 5.下载地址: https://www.kdocs.cn/l/cdZMwizD2ZL1?RL1MvMTM%3D 提示:先转存后下载,防止资…...
精益数据分析(23/126):把握创业阶段与第一关键指标
精益数据分析(23/126):把握创业阶段与第一关键指标 在创业和数据分析的学习过程中,每一次深入探索都可能为我们打开新的大门。今天,我依旧带着和大家共同进步的想法,来解读《精益数据分析》中的重要内容—…...
【华为HCIP | 华为数通工程师】821—多选解析—第十六页
多选814、关于OSPF AS-External-LSA说法正确的是: A、Net mask被设置全0 B、Link State ID被设置为目的网段地址 C、Advertising Router被设置为ASBR的Router ID D、使用Link State ID和Advertising Router可以唯一标识一条AS-External-LSA 解析:Net mask代表的是掩码…...
Linux:进程间通信->匿名管道实现内存池
1. 进程间通信 (1) 概念 进程间通信(IPC) 就是不同进程间交换数据的方法,进程间是独立的所以不能访问彼此的内存,需要某种机制来通信(管道、消息队列,共享内存等) (2) 目的 数据传输:一个进程需要他的数据发送给另一个进程 资源…...
Linux服务器离线安装ollama及大模型
Linux服务器离线安装ollama及大模型 核心思路:使用一台可以联网的电脑将需要的ollama安装包和大模型下载到本地,之后传输到Linux服务器上安装并配置 环境说明 联网机:macOS M1Pro Linux服务器:x86_64 安装ollama版本:…...
C++ 类及函数原型详解
一、引言 在C 编程中,类(Class)是面向对象编程的核心概念之一,它是一种用户自定义的数据类型,封装了数据和操作数据的函数(成员函数)。函数原型则为函数的声明提供了必要的信息,让编…...
大内存生产环境tomcat-jvm配置实践
话不多讲,奉上代码,分享经验,交流提高! 64G物理内存,8核CPU生产环境tomcat-jvm配置如下: JAVA_OPTS-server -XX:MaxMetaspaceSize4G -XX:ReservedCodeCacheSize2G -XX:UseG1GC -Xms48G -Xmx48G -XX:MaxGCPauseMilli…...
各类前端开发的框架比较及其核心特性、开发体验、生态系统以及在不同项目中的适用性
前端开发框架多种多样,每种框架都有其独特的优势和局限性。以下是几种流行的前端框架及其特点、优缺点和适合的项目类型介绍:包括它们的核心特性、开发体验、生态系统以及在不同项目中的适用性。 1. React.js 核心特性: 虚拟DOM:…...
Git基本使用(很详细)
一:Git 概述 1.1 定义:分布式版本控制系统 1.2 版本控制 (1)定义: 版本控制时一种记录文件内容变化,以便将来查阅特定版本修订情况的系统 (2)举例 多副本 优化: 不使用多…...
mybatis-plus里的com.baomidou.mybatisplus.core.override.MybatisMapperProxy 类的详细解析
以下是 com.baomidou.mybatisplus.core.override.MybatisMapperProxy 类的详细解析: 1. 类的作用 MybatisMapperProxy 是 MyBatis-Plus 框架中用于实现 Mapper 接口动态代理的核心类。它继承自 MyBatis 的 MapperProxy,并扩展了以下功能: …...
[密码学实战]商用密码产品密钥体系架构:从服务器密码机到动态口令系统
[密码学实战]商用密码产品密钥体系架构:从服务器密码机到动态口令系统 关键词:商用密码、密钥体系、服务器密码机、金融数据密码机、动态口令、智能密码钥匙 摘要:本文深度解读商用密码产品的核心密钥体系架构,涵盖服务器密码机、…...
BongoCat - 跨平台键盘猫动画工具
本文翻译整理自:https://github.com/ayangweb/BongoCat 文章目录 一、关于 BongoCat相关链接资源关键功能特性 二、下载安装系统要求下载方式macOSWindowsLinux (X11) 三、灵感来源四、效果演示 一、关于 BongoCat BongoCat 是一款跨平台的键盘猫动画工具…...
跨Linux发行版CPU指令集兼容性深度解析与实践指南
一、指令集差异全景透视 1.1 Ubuntu与Debian指令集差异对比 # 查询语句: lscpu | grep Flags # 结果 # Ubuntu 22.04 LTS Flags: fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma dcpop asimddp asimdfhm ssbs# De…...
docker的安装和简单使用(ubuntu环境)
环境准备 这里用的是linux的环境,如果没有云服务器的话,就是用虚拟环境吧。 虚拟环境的安装参考:vmware17的安装 linux镜像的安装 docker安装 我使用的是ubuntu,使用以下命令: 更新本地软件包索引 sudo apt u…...
Flutter 环境搭建 (Android)
目标 上一篇Flutter应用已经能在iOS,macOS和,chrome环境下正常运行了,这次把Android跑通。 环境 macOS 15.4.1 Visual Studio Code 1.99.3 Flutter 3.29.3 • channel stable • https://github.com/flutter/flutter.git Framework • revision ea121f8859 (11 da…...
数字化技术的五个环节:大数据、云计算、人工智能、区块链、移动互联网
在21世纪的科技浪潮中,数字化技术以其强大的生命力和无限的潜力,正逐步重塑着我们的世界。大数据、云计算、人工智能、区块链、移动互联网,这五大数字化技术的环节,如同构建智慧未来的基石,每一方面都承载着推动社会进…...
PWNOS:2.0(vulnhub靶机)
文章目录 靶机地址主机发现、端口扫描web渗透目录探测漏洞利用权限提升 解密工具地址总结 靶机地址 https://download.vulnhub.com/pwnos/pWnOS_v2.0.7z 这里如果是windows系统直接使用vmware或者virtubox打开可以使用,如果是mac系统需再去做一个配置,比较麻烦 这里…...
ubuntu22.04部署Snipe-IT
文章目录 参考链接一、写在前二、安装操作系统三、安装 PHP四、下载 Snipe-IT五、安装依赖六、安装数据库并创建用户七、安装 Snipe-IT八、安装 Nginx九、Web 继续安装 Snipe-IT补充: 最后 参考链接 How to Install Snipe-IT on Ubuntu 22.04 https://www.rosehost…...
【EDA】EDA中聚类(Clustering)和划分(Partitioning)
在VLSI物理设计自动化中,聚类(Clustering)和划分(Partitioning)是两个不同的关键步骤,主要区别如下: 1. 目标与核心任务 聚类(Clustering) 目标:将电路中的…...
Java 安全:如何实现用户认证与授权?
Java 安全:如何实现用户认证与授权? 在当今数字化的世界中,用户认证与授权是 Java 应用程序安全的关键环节。它们确保只有经过授权的用户才能访问特定资源,保护系统免受未授权访问的威胁。本文将深入探讨如何在 Java 中实现用户认…...
六个能够白嫖学习资料的网站
一、咖喱君的资源库 地址:https://flowus.cn/galijun/share/de0f6d2f-df17-4075-86ed-ebead0394a77 这是一个学习资料/学习网站分享平台,包含了英语、法语、德语、韩语、日语、泰语等几十种外国语言的学习资料及平台,这个网站的优势就是外语…...
AWS Glue ETL设计与调度最佳实践
一、引言 在AWS Glue中设计和调度ETL过程时,需结合其无服务器架构和托管服务特性,采用系统化方法和最佳实践,以提高效率、可靠性和可维护性。本文将从调度策略和设计方法两大维度详细论述,并辅以实际案例说明。 二、调度策略的最…...
《深入理解 AOP》
一、AOP 是什么 AOP(Aspect Oriented Programming),即面向切面编程,是软件开发中一种重要的编程范式。它通过横向抽取机制,将那些与业务逻辑本身无关、却为业务模块所共同调用的逻辑或责任(如事务处理、日…...
2022李宏毅老师机器学习课程笔记
机器学习笔记目录 1.绪论(内容概述)2.机器学习和深度学习的基本概念transformer 1.绪论(内容概述) 机器学习:让机器找一个函数,通过函数输出想要的结果。应用举例:语音识别,图像识别…...
时序数据库IoTDB在航空航天领域的解决方案
在快速发展的航空航天领域,高效、安全的数据管理成为了技术创新和持续发展的关键支撑。时序数据库IoTDB,凭借其国产自研、高效低流量数据同步、丰富的部署选择等优势,为航空航天产业提供了强有力的数据基础,助力产业加速转型升级。…...
洛谷 B3647:【模板】Floyd 算法
【题目来源】 https://www.luogu.com.cn/problem/B3647 【题目描述】 给出一张由 n 个点 m 条边组成的无向图。 求出所有点对 (i,j) 之间的最短路径。 【输入格式】 第一行为两个整数 n,m,分别代表点的个数和边的条数。 接下来 m 行,每行三…...
【25软考网工】第三章(4)生成树协议、广播风暴和MAC地址表震荡
目录 一、生成树协议1. 生成树技术背景1)单链路上行存在单点故障2)二层环路问题3)二层环路问题——广播风暴实验验证 广播风暴例题1:二层环路故障现象4)二层环路问题—— MAC地址表震荡实验验证 MAC地址表震荡的现象 2…...
解释器体系结构风格-笔记
解释器(Interpreter)是一种软件设计模式或体系结构风格,主要用于为语言(或表达式)定义其语法、语义,并通过解释器来解析和执行语言中的表达式。解释器体系结构风格广泛应用于编程语言、脚本语言、规则引擎、…...
删除新安装IBM Guardium Data Protection 12.1的baltimorecybertrustroot证书
登录web console,会显示 baltimorecybertrustroot证书过期警告。 采用下面的命令删除过期证书就可消除警告。 collector02.cpd.com> delete certificate keystore Select an alias from the list below to delete the corresponding certificate. Alias List:…...
反序列化漏洞1
一、PHP类与对象 1. 类 概念理解: 类是共享相同结构和行为的对象的集合,可以理解为特征的提取。例如将耳朵长、尾巴短、红眼睛、吃胡萝卜、蹦跳行走的动物特征抽象为"兔子"类。代码结构: 使用class关键字定义类类名遵循大驼峰命名法包含成员变量(属性)和…...
正则表达式三剑客之——awk命令
目录 一.什么是awk 二.awk的语法格式 1.选项 2. 模式(Pattern) 3. 操作(Action) 4. 输入文件(file) 5.总结 三.awk的工作原理 1. 逐行扫描输入 2. 匹配模式 1.正则表达式: 2.逻辑表…...
施磊老师基于muduo网络库的集群聊天服务器(七)
文章目录 数据表字符集问题支持中文和英文**为什么使用 utf8mb4?** 推荐 查看整个表, 再单独修改 客户端群组功能创建群组添加群组群组聊天接收在线群组消息接收离线群组消息补充服务器事件处理器补充服务器查询群组列表问题解决测试 目前报错总结目前为止最恶心的错…...
多模态(3):实战 GPT-4o 视频理解
最近,OpenAI 团队的 GPT-4o 模型,在多模态方面的能力有了大幅提升,这次我们就使用 GPT-4o 完成一个视频理解的实战。 1. 环境搭建 1.1 安装 FFmpeg 做视频处理,我们需要用到 FFmpeg 这款功能强大的开源多媒体处理工具。FFmpeg…...
基于python实现一个二维图片的路径规划问题
一、场景 基于如下的一个楼层平面图,假设有几个预置的点(实际项目中可能是动态的点,比如找车位,找工位),做路径规划,并画在平面图上 二、方案 1.准备平面室内图 可以自己用QGIS/cad等其他方式…...
云服务器centos 安装hadoop集群
百度 搜索 云服务器centos 安装hadoop 创建Hadoop用户 sudo useradd hadoop -m -s /bin/bash sudo passwd hadoop 123456 下载Hadoop wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz 解压并移动Hadoop到指定目录 tar …...
【k8s】sidecar边车容器
一、Sidecar 模式简介 Sidecar 模式是一种常见的微服务架构设计模式。它通过将附加功能或服务与主应用程序部署在同一容器或主机上,从而实现对主应用程序的增强和扩展。Sidecar 的名称来源于摩托车的边车,它与摩托车紧密相连,为主车提供额外…...