青少年编程与数学 02-019 Rust 编程基础 20课题、面向对象
青少年编程与数学 02-019 Rust 编程基础 20课题、面向对象
- 一、面向对象的编程特性
- (一)封装(Encapsulation)
- (二)多态(Polymorphism)
- (三)继承(Inheritance)
- (四)小结
- 二、使用trait对象存储不同类型的值
- (一)定义一个 trait
- (二)使用 trait 对象存储不同类型的值
- 示例:使用 `Box<dyn Trait>` 存储不同类型的值
- (三)动态调度(Dynamic Dispatch)
- (四)自动类型转换
- (五)、使用 trait 对象的优势
- 注意事项
- 三、实现面向对象的设计模式
- (一)背景
- (二)示例:实现一个简单的文本编辑器
- 1. 定义状态接口
- 2. 实现具体状态
- 3. 定义上下文(Context)
- 4. 测试代码
- (三)输出结果
- (四)小结
- 总结
课题摘要:
Rust 是一种多范式编程语言,虽然它没有传统面向对象编程语言(如 Java 或 C++)中的类(class)概念,但它通过结构体(struct)、枚举(enum)、特征(trait)等语言特性,实现了面向对象编程的三大核心特性:封装、多态和继承(通过替代方式实现)。
关键词:面向对象、封装、继承、多态
一、面向对象的编程特性
(一)封装(Encapsulation)
封装是指将数据和操作这些数据的方法绑定在一起,并隐藏内部实现细节,只通过公共接口(API)与外部交互。
-
结构体(Struct)和方法(Method):Rust 中的结构体可以包含数据字段,并通过
impl
块为其定义方法。例如:struct Rectangle {width: u32,height: u32, }impl Rectangle {fn area(&self) -> u32 {self.width * self.height} }
在这个例子中,
Rectangle
结构体封装了宽度和高度的数据,并提供了计算面积的方法。 -
控制可见性:Rust 使用
pub
关键字来控制字段和方法的可见性。未标记为pub
的字段和方法默认为私有,只能在定义它们的模块内部访问。例如:pub struct AveragedCollection {list: Vec<i32>,average: f64, }impl AveragedCollection {pub fn add(&mut self, value: i32) {self.list.push(value);self.update_average();}fn update_average(&mut self) {let total: i32 = self.list.iter().sum();self.average = total as f64 / self.list.len() as f64;} }
在这个例子中,
list
和average
字段是私有的,外部代码只能通过add
等公有方法与AveragedCollection
交互。
(二)多态(Polymorphism)
多态是指不同类型的对象可以共享相同的接口或行为。
-
泛型(Generics):Rust 的泛型允许编写适用于多种类型的代码。例如:
fn print_item<T: Summary>(item: &T) {println!("{}", item.summarize()); }
这里,
T
是一个泛型参数,它必须实现了Summary
特征。 -
特征对象(Trait Objects):特征对象允许在运行时进行多态调度。例如:
fn notify(item: &dyn Summary) {println!("Breaking news! {}", item.summarize()); }
&dyn Summary
表示可以传递任何实现了Summary
特征的类型。
(三)继承(Inheritance)
传统面向对象语言中的继承允许一个类继承另一个类的属性和方法。Rust 没有直接的继承机制,但提供了替代方案:
-
特征(Trait):特征类似于其他语言中的接口或抽象基类,定义了一组方法的签名。结构体或枚举可以通过实现特征来获得这些方法。例如:
trait Drawable {fn draw(&self); }struct Circle;impl Drawable for Circle {fn draw(&self) {// Draw circle implementation} }
在这个例子中,
Circle
结构体实现了Drawable
特征,从而获得了draw
方法。 -
默认实现:特征可以为方法提供默认实现,这类似于接口中的默认方法。例如:
trait Summary {fn summarize(&self) -> String {String::from("(Read more...)")} }
任何实现了
Summary
特征的类型都可以直接使用这个默认实现,或者提供自己的实现。 -
组合(Composition):Rust 更倾向于使用组合来实现代码复用。例如,可以通过将多个结构体组合在一起,而不是通过继承来共享行为。
(四)小结
Rust 通过结构体、枚举、特征等语言特性,实现了面向对象编程的核心概念。虽然它没有传统面向对象语言中的类和继承,但通过封装、多态和特征等机制,Rust 提供了一种灵活且安全的方式来构建复杂的系统。
二、使用trait对象存储不同类型的值
在 Rust 中,trait 对象(Trait Objects)允许我们在运行时存储和操作不同类型的值,只要这些值实现了某个特定的 trait。以下是使用 trait 对象存储不同类型的值的方法:
(一)定义一个 trait
首先,定义一个 trait,其中包含需要实现的方法。例如:
pub trait Draw {fn draw(&self);
}
这个 Draw
trait 定义了一个 draw
方法。
(二)使用 trait 对象存储不同类型的值
可以使用 Box<dyn Trait>
或 &dyn Trait
来存储实现了该 trait 的不同类型的值。Box<dyn Trait>
是一个智能指针,用于堆分配,而 &dyn Trait
是一个引用。
示例:使用 Box<dyn Trait>
存储不同类型的值
struct Button {width: u32,height: u32,label: String,
}impl Draw for Button {fn draw(&self) {println!("Drawing a button with label: {}", self.label);}
}struct SelectBox {width: u32,height: u32,options: Vec<String>,
}impl Draw for SelectBox {fn draw(&self) {println!("Drawing a select box with options: {:?}", self.options);}
}fn main() {let screen = Screen {components: vec![Box::new(Button {width: 50,height: 10,label: String::from("OK"),}),Box::new(SelectBox {width: 100,height: 50,options: vec![String::from("Yes"),String::from("No"),String::from("Maybe"),],}),],};screen.run();
}
在这个例子中,Screen
结构体包含一个 components
字段,其类型为 Vec<Box<dyn Draw>>
。这允许 components
向量存储实现了 Draw
trait 的不同类型的值。
(三)动态调度(Dynamic Dispatch)
当使用 trait 对象时,Rust 会在运行时动态确定调用的方法。这意味着可以在运行时将不同类型的值存储在同一个集合中,并通过 trait 对象调用它们的方法。
(四)自动类型转换
Rust 会自动将具体类型的引用或智能指针转换为 trait 对象。例如:
fn do_something(x: &dyn Draw) {x.draw();
}fn main() {let button = Button {width: 50,height: 10,label: String::from("OK"),};do_something(&button); // 自动将 &Button 转换为 &dyn Draw
}
在这个例子中,do_something
函数接受一个 &dyn Draw
参数,而 &button
会被自动转换为 &dyn Draw
。
(五)、使用 trait 对象的优势
- 灵活性:可以在运行时动态处理不同类型的值,而不需要在编译时知道所有可能的类型。
- 代码复用:通过 trait 对象,可以编写通用的代码来处理实现了特定 trait 的所有类型。
注意事项
- Trait 对象使用动态调度,可能会比静态调度(使用泛型)稍慢,因为它需要在运行时查找方法。
- Trait 对象必须使用指针(如
Box<dyn Trait>
或&dyn Trait
),因为 Rust 的类型系统要求 trait 对象的大小是已知的。
通过这些方法,Rust 的 trait 对象为动态类型处理和多态提供了强大的支持。
三、实现面向对象的设计模式
在 Rust 中实现面向对象的设计模式可以通过其强大的类型系统和特性(traits)来完成。虽然 Rust 不是传统意义上的面向对象语言(例如没有类和继承),但它提供了足够的工具来实现类似的功能。以下是用 Rust 实现一种常见面向对象设计模式的示例:状态模式(State Pattern)。
(一)背景
状态模式是一种行为设计模式,它允许对象在其内部状态改变时改变其行为。这种模式通常用于管理复杂的状态转换逻辑。
(二)示例:实现一个简单的文本编辑器
假设我们有一个文本编辑器,它的状态可以在“普通模式”和“只读模式”之间切换。不同状态下,用户对文本的操作行为不同。
1. 定义状态接口
使用 trait
来定义状态的行为:
trait EditorState {fn handle_input(&self, editor: &mut Editor, input: &str);fn change_state(&self, editor: &mut Editor);
}
handle_input
: 处理用户的输入。change_state
: 切换到另一个状态。
2. 实现具体状态
定义两个具体状态:“普通模式”和“只读模式”。
struct NormalMode;impl EditorState for NormalMode {fn handle_input(&self, editor: &mut Editor, input: &str) {println!("Normal mode: Appending text '{}'", input);editor.text.push_str(input);}fn change_state(&self, editor: &mut Editor) {println!("Switching to Read-only mode.");editor.state = Box::new(ReadOnlyMode);}
}struct ReadOnlyMode;impl EditorState for ReadOnlyMode {fn handle_input(&self, editor: &mut Editor, _input: &str) {println!("Read-only mode: Cannot modify text.");}fn change_state(&self, editor: &mut Editor) {println!("Switching to Normal mode.");editor.state = Box::new(NormalMode);}
}
- 在“普通模式”下,可以添加文本并切换到“只读模式”。
- 在“只读模式”下,不能修改文本,但可以切换回“普通模式”。
3. 定义上下文(Context)
上下文是持有当前状态的对象。
struct Editor {state: Box<dyn EditorState>,text: String,
}impl Editor {fn new() -> Self {Editor {state: Box::new(NormalMode),text: String::new(),}}fn handle_input(&mut self, input: &str) {self.state.handle_input(self, input);}fn change_state(&mut self) {self.state.change_state(self);}fn get_text(&self) -> &str {&self.text}
}
state
是一个动态分发的 trait 对象(Box<dyn EditorState>
),用于存储当前状态。handle_input
和change_state
委托给当前状态。
4. 测试代码
编写测试代码来验证功能:
fn main() {let mut editor = Editor::new();editor.handle_input("Hello, ");editor.handle_input("world!");println!("Editor content: {}", editor.get_text());editor.change_state(); // Switch to read-only modeeditor.handle_input("This will not be added.");println!("Editor content: {}", editor.get_text());editor.change_state(); // Switch back to normal modeeditor.handle_input(" Welcome back!");println!("Editor content: {}", editor.get_text());
}
(三)输出结果
运行上述代码后,输出如下:
Normal mode: Appending text 'Hello, '
Normal mode: Appending text 'world!'
Editor content: Hello, world!
Switching to Read-only mode.
Read-only mode: Cannot modify text.
Editor content: Hello, world!
Switching to Normal mode.
Normal mode: Appending text ' Welcome back!'
Editor content: Hello, world! Welcome back!
(四)小结
通过使用 Rust 的 trait
和动态分发,我们可以优雅地实现状态模式。这种方法充分利用了 Rust 的类型系统和所有权机制,同时避免了传统面向对象语言中的继承问题。
总结
Rust 的面向对象编程通过结构体、特征和泛型等特性实现。结构体用于封装数据和方法,提供封装机制;特征定义了方法签名,类似于接口,用于实现多态和代码复用;泛型则提供了类型参数,增强了代码的通用性。虽然 Rust 没有传统面向对象语言中的类和继承,但通过组合和 trait 对象,它能够实现类似的功能。例如,trait 对象允许在运行时动态处理不同类型的值,而组合则通过将多个结构体组合在一起实现代码复用。Rust 的设计注重安全性和性能,其面向对象特性在保持灵活性的同时,也避免了传统面向对象编程中常见的问题,如继承层次过深或接口滥用。通过合理使用这些特性,Rust 开发者可以构建出既安全又高效的面向对象程序。
相关文章:
青少年编程与数学 02-019 Rust 编程基础 20课题、面向对象
青少年编程与数学 02-019 Rust 编程基础 20课题、面向对象 一、面向对象的编程特性(一)封装(Encapsulation)(二)多态(Polymorphism)(三)继承(Inhe…...
<uniapp><vuex><状态管理>在uniapp中,如何使用vuex实现数据共享与传递?
前言 本专栏是基于uniapp实现手机端各种小功能的程序,并且基于各种通讯协议如http、websocekt等,实现手机端作为客户端(或者是手持机、PDA等),与服务端进行数据通讯的实例开发。 发文平台 CSDN 环境配置 系统&…...
如何使用通义灵码辅助开发鸿蒙OS - AI编程助手提升效率
一、引言 鸿蒙 OS 是华为推出的一款面向全场景的分布式操作系统,其开发应用主要使用华为基于 IntelliJ IDEA 定制的 DevEco Studio。然而,DevEco Studio 的插件生态相对有限,为了提升开发效率和代码质量,我们可以借助通义灵码这一…...
解决git中断显示中文为八进制编码问题
git config --global core.quotepath false 命令用于配置 Git 如何处理非 ASCII 字符(如中文、日文、韩文等)的文件名显示 core.quotepath Git 的一个核心配置项,控制是否对非 ASCII 文件名进行转义(quote)处理。 f…...
宿州金博学校开展防震演练:夯实安全根基,守护校园平安
5月13日上午9点30分,金博学校原本宁静的校园被一阵急促的警报声打破,一场精心筹备、紧张有序的防震演练正式开启。本次演练意义重大,旨在强化全体师生的防震减灾意识,提高大家在地震突发时的应急反应与自我保护能力。 紧急避险&am…...
【鸿蒙开发】安全
应用隐私保护最佳实践 使用隐私声明获取用户同意 初次访问使用隐私声明弹窗,只有用户同意后才能开始正常使用。 减少应用的位置访问权限 使用模糊定位获取位置信息 位置权限申请方式 target API level申请位置权限申请结果位置的精确度小于9ohos.permission.L…...
企业级网络安全护盾:剖析高防IP原理与防护策略
在当今数字化时代,网络安全已成为企业不可忽视的关键课题。高防IP作为网络安全防护的重要手段之一,正因其出色的防御能力和应用灵活性受到广泛关注。本文将深入解析高防IP的原理,包括流量清洗、防御策略、节点分布等技术要点,并通…...
智能事件分析边缘服务器:交通管理与安全监测的利器
在当今交通管理和安全监测的领域中,智能化、高效化的设备需求日益增长。智能事件分析边缘服务器凭借其卓越的性能和丰富的功能,成为了该领域的佼佼者。 一、产品概述 智能事件分析边缘服务器是一款采用嵌入式 Linux 操作系统的边缘事件分析终端。它具有…...
Gin--Blog项目-flags文件解析
flags/enter.go文件解析 package flagsimport ("flag""os" )type Options struct {File stringDB boolVersion bool }var FlagOptions new(Options)func Parse() {flag.StringVar(&FlagOptions.File, "f", "settings.yaml&qu…...
JVM的面试相关问题
面试中的相关问题主要是三块 1.JVM 内存区域划分 2.JVM 的类加载机制 3.JVM 的垃圾回收机制 JVM Java虚拟机 VM Virtual Machine 虚拟机,用 软件 来 模拟 硬件 传统意义上的"虚拟机" 更多指的是 VMWare, Virtual Box, Hyper-V, KVM(构造出虚拟的电脑,甚至可以…...
Linux(3)——基础开发工具
一、软件包管理器——yum 1.Linux下安装程序的方式 在Linux环境下安装软件的方式有以下几个方式: 1)源码安装,直接下载源代码,让它自行编译运行形成可执行程序。 2)软件包安装,下载rpm安装包࿰…...
HarmonyOS5云服务技术分享--ArkTS调用函数
✨【HarmonyOS实战指南】手把手教你用ArkTS玩转云函数文件获取✨ 大家好呀今天我们来聊聊如何通过HarmonyOS的ArkTS语言实现云函数文件获取功能。整个过程就像搭积木一样有趣,保证小白也能轻松上手!(文末有完整代码模板哦) &…...
2025年AI搜索引擎发展洞察:技术革新与市场变革
引言:AI搜索的崛起与市场格局重塑 2024-2025年,AI搜索市场迎来了前所未有的变革期。随着DeepSeek-R1等先进大语言模型的推出,传统搜索引擎、AI原生搜索平台以及各类内容平台纷纷加速智能化转型,推动搜索技术从基础信息检索向深度…...
基于开源链动2+1模式AI智能名片S2B2C商城小程序的社群构建与新型消费迎合策略研究
摘要:随着个性化与小众化消费的崛起,消费者消费心理和模式发生巨大变化,社群构建对商家迎合新型消费特点、融入市场经济发展至关重要。开源链动21模式AI智能名片S2B2C商城小程序的出现,为社群构建提供了创新工具。本文探讨该小程序…...
leetcode 旋转数组 java
本来想用栈或者队列来解决,发现一直报k>nums.length的错。 将原数组下标为 i 的元素放至新数组下标为 (ik)modn 的位置,最后将新数组拷贝至原数组即可。 class Solution {public void rotate(int[] nums, int k) {// Stack<Integer> stack n…...
Ansible模块——通过 URL 下载文件
通过 URL 下载文件 ansible.builtin.get_url 可以通过 URL 下载文件。 选项名 类型 默认值 描述 attributesstrnull 设置文件系统对象的属性,格式参考 lsattr;支持 , -, 操作符。别名:attr。 backupboolfalse 创建目标文件的备份副本&am…...
2025年高考考务人员培训监考员学习项目试题
考务人员培训系统 学员端(高考) 第1部分:单选题 1. 对违背考试公平、公正原则,在考试中存在违规行为的考生,采用何种处理办法?(A ) [2分] A. 根据《国家教育考试违规处理办法》等…...
谈谈jvm的调优思路
目录 1、G1回收器 2、常用的回收器分类 1、cms 2、G1、Hotspot 3、ZGC 4、设置 3、常见的调优策略 3.1、设定大小 1、堆的大小 2、Region的大小 3、年轻代大小调整 3.2、设置最大停顿时间 3.3、设置标记和回收线程 3.4、并发周期触发阈值 背景 正常情况下&#x…...
通过自签名ssl证书进行js注入的技术,适合注入electron开发的app
由于很多软件都是electron或者pyqt做的安装包,没法像浏览器那样可以直接通过浏览器插件注入js,或者很多网站都有csp限制,无法直接注入js,这种使用自签名代理的方式,完美绕过了所有限制,直接将js注入到外链js中。 步骤:1,局域网准备两台电脑,一个windows,一台Linux,…...
异步复位,同步释放
参考链接:数字电路复位信号设计(异步复位、同步释放)笔记详解_异步复位同步释放的高有效原理-CSDN博客 一、异步复位(Asynchronous Reset) 含义:当复位信号 reset 为低(或高,视具体…...
Vortex GPGPU的github流程跑通与功能模块波形探索(三)
文章目录 前言一、./build/ci下的文件结构二、基于驱动进行仿真过程牵扯的文件2.1 blackbox.sh文件2.2 demo文件2.3 额外牵扯到的ramulator2.3.1 ramulator简单介绍2.3.2 ramulator使用方法2.3.3 ramulator的输出2.3.4 ramulator的复现2.3.4.1 调试与验证(第 4.1 节…...
Ubuntu 安装 Node.js 指定版本指南
Ubuntu 安装 Node.js 指定版本指南(适用于生产与开发环境) 在没有安装 NVM 的服务器环境中(如 Docker、CI/CD、虚拟机等),建议使用 Node.js 官方的二进制包源(PPA)来快速安装特定版本的 Node.j…...
使用 Java 开发 Android 应用:Kotlin 与 Java 的混合编程
使用 Java 开发 Android 应用:Kotlin 与 Java 的混合编程 在开发 Android 应用程序时,我们通常可以选择使用 Java 或 Kotlin 作为主要的编程语言。然而,有些开发者可能会想要在同一个项目中同时使用这两种语言,这就是所谓的混合编…...
安防监控网络摄像机画面异常问题与视频监控管理平台EasyCVR应用
一、方案背景 在安防监控领域,画面卡顿、时有时无等问题犹如隐藏的潜在风险点,不仅严重干扰监控系统的正常运行,更可能在安全防护的关键时刻出现故障,让潜在的风险与隐患有机可乘。想要彻底攻克这些顽疾,就需要我们抽…...
MATLAB中进行语音信号分析
在MATLAB中进行语音信号分析是一个涉及多个步骤的过程,包括时域和频域分析、加窗、降噪滤波、端点检测以及特征提取等。 1. 加载和预览语音信号 首先,你需要加载一个语音信号文件。MATLAB支持多种音频文件格式,如.wav。 [y, fs] audiorea…...
Kotlin 协程 (三)
协程通信是协程之间进行数据交换和同步的关键机制。Kotlin 协程提供了多种通信方式,使得协程能够高效、安全地进行交互。以下是对协程通信的详细讲解,包括常见的通信原语、使用场景和示例代码。 1.1 Channel 定义:Channel 是一个消息队列&a…...
AI 商业化部署中,ollama 和 vllm 的选型对比
介绍 ollama Ollama是指一个开源的大模型服务工具,旨在简化大型语言模型(LLM)的本地部署、运行和管理。它让用户能够在本地设备上轻松运行和管理各种大语言模型,无需依赖云端服务。 vllm 在深度学习推理领域,vLLM框…...
mysql的乐观锁与悲观锁
1.悲观锁 含义:假设会发生冲突,因此在操作数据之前对数据加锁,确保其他事务无法访问该数据。 应用场景:适用于并发冲突多,写多读少的场景,通过加锁的方式确保数据的安全性。 实现方式:使用行…...
进程——概念及状态
目录 概念 介绍 举例 进程状态 概念 解释 实例 R S T t Z 孤儿进程 概念 介绍 大多数初学者会认为进程就是从硬盘加载到内存的可执行文件(当可执行文件被加载到内存里称为程序),实际上并不是这样的,进程其实是操作系…...
服务器数据恢复—Linux系统服务器崩溃且重装系统的数据恢复案例
服务器数据恢复环境: linux操作系统服务器中有一组由4块SAS接口硬盘组建的raid5阵列。 服务器故障: 服务器工作过程中突然崩溃。管理员将服务器操作系统进行了重装。 用户方需要恢复服务器中的数据库、办公文档、代码文件等。 服务器数据恢复过程&#…...
【git】git commit模板
【git】git commit模板 目录 【git】git commit模板1.使用git commit 模板操作步骤:使用示例: 2. gitlab merge 模板 1.使用git commit 模板 操作步骤: 设置模板路径,其中path就是commit模板路径 git config --global commit.template path设…...
IGBT选型时需关注的参数,适用场景(高压大电流低频)以及驱动电路设计注意事项
概述 IGBT(绝缘栅双极型晶体管)是电力控制和电力转换的核心器件,是由BJT(双极型晶体管)和MOS(绝缘栅型场效应管)组成的复合全控型电压驱动式功率半导体器件。有高输入阻抗(MOSFET优点…...
hghac集群服务器时间同步(chrony同步)
文章目录 环境文档用途详细信息 环境 系统平台:银河麒麟(龙芯)svs,银河麒麟 (X86_64),银河麒麟 (飞腾),银河麒麟 (鲲鹏),银河麒麟 (海光),银河麒…...
Linux 特权管理与安全——从启用 Root、Sudo 提权到禁用与防护的全景解析
一、前言 为什么关注特权? Root(超级用户)拥有系统所有权限,一旦被滥用或入侵,后果不堪设想。运维与安全的平衡 既需要日常运维中快速提权执行管理任务,又要避免过度开放特权带来的风险。攻防同源理念 了解…...
初识Linux · 数据链路层
目录 前言: 以太网帧协议 ARP协议 ARP协议理解 ARP协议字段 交换机 前言: 前文我们通过OSI模型,一直到TCP/IP四层模型,经过了三篇文章左右的功夫,我们把网络层介绍完毕,主要还是介绍的IP协议的iphdr…...
Linux探秘:驾驭开源,解锁高效能——基础指令
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...
【Linux】第二十二章 访问网络附加内存
1. NFS的主要功能是什么? NFS是由Linux、UNIX及类似操作系统使用的互联网标准协议,主要功能就是提供网络文件共享,允许不同的计算机系统之间通过网络共享文件,它使得网络上的计算机能够像访问本地文件系统一样访问远程计算机上的…...
Revit BIM 模型批量转换为 Datasmith 格式教程
Revit BIM 模型批量转换为 Datasmith 格式教程 一、背景与痛点 在建筑信息模型(BIM)与游戏开发的协同工作中,常需将 Revit 模型导入虚幻引擎(UE)。虽然 Revit 的 Datasmith 插件可实现单文件转换,但面对成百上千个模型时,手动操作效率极低。本文将分享如何开发一个自动…...
Linux 磁盘扩容实战案例:从问题发现到完美解决
Linux 磁盘扩容实战案例:从问题发现到完美解决 案例背景 某企业服务器根目录 (/) 空间不足,运维人员通过 df -h 发现 /dev/vda1 分区已 100% 占满(99G 已用)。检查发现物理磁盘 /dev/vda 已扩展至 200G,但分区和文件…...
Linux 系统不终止进程的情况下关闭长连接
使用 tcpkill 中断指定 TCP 连接 适用场景:需主动中断已知源IP或目标端口的连接,无需进程重启。 安装 dsniff 工具(包含 tcpkill): yum -y install dsniff 捕获并杀死特定连接(例如目标IP 192.168.1.10…...
从零开始创建React项目及制作页面
一、React 介绍 React 是一个由 Meta(原Facebook) 开发和维护的 开源JavaScript库,主要用于构建用户界面(User Interface, UI)。它是前端开发中最流行的工具之一,广泛应用于单页应用程序(SPA&a…...
Unity-编辑器扩展
之前我们关于Unity的讨论都是针对于Unity底层的内容或者是代码层面的东西,这一次我们来专门研究Unity可视化的编辑器,在已有的基础上做一些扩展。 基本功能 首先我们来认识三个文件夹: Editor,Gizmos,Editor Defaul…...
系分论文《论遗产系统演化》
系统分析师论文范文系列 摘要 2022年6月,某金融机构启动核心业务系统的技术升级项目,旨在对其运行超过十年的遗留系统进行演化改造。该系统承担着账户管理、支付结算等关键业务功能,但其技术架构陈旧、扩展性不足,难以适应数字化转型与业务快速增长的需求。作为系统分析师,…...
Django基础(二)Django 项目基础操作
一、实验目标 熟悉 Django 基本命令 理解 Django 项目和应用的目录结构 掌握项目初始化、应用创建与注册、项目启动、视图函数编写、路由配置、数据库配置等基础操作 二、Django 项目初始化 进入虚拟环境 source venv/bin/activate创建 Django 项目 django-admin startproje…...
【图像大模型】Stable Video Diffusion:基于时空扩散模型的视频生成技术深度解析
Stable Video Diffusion:基于时空扩散模型的视频生成技术深度解析 一、架构设计与技术演进1.1 核心模型架构1.2 技术创新点1.2.1 运动预测网络1.2.2 层级式训练策略 二、系统架构解析2.1 完整生成流程2.2 性能指标对比 三、实战部署指南3.1 环境配置3.2 基础推理代码…...
【免杀】C2免杀技术(七)远程线程注入
远程线程注入(Remote Thread Injection)是一种常见的进程注入技术,经常用于红队渗透、恶意软件加载、持久化控制等场景中,尤其在免杀(AV/EDR bypass)应用领域中,是一种历史悠久但依然有效的手段…...
二、【环境搭建篇】:Django 和 Vue3 开发环境准备
【环境搭建篇】:Django 和 Vue3 开发环境准备 前言为什么我们需要特定的开发环境?准备工作第一步:搭建后端开发环境 (Python, Django, DRF)1. 安装 Python2. 创建和激活 Python 虚拟环境3. 在虚拟环境中安装 Django 和 DRF 第二步:…...
【神经网络与深度学习】激活函数的可微可导
引言: 在深度学习领域,激活函数扮演着至关重要的角色。它不仅影响神经网络的非线性建模能力,还直接关系到梯度计算的稳定性。在优化过程中,我们通常要求激活函数具有良好的数学性质,其中可微性是一个关键条件。相比简单…...
【Tauri2】046—— tauri_plugin_clipboard_manager(一)
目录 前言 正文 安装 Rust中的使用 对文字的操作 看看write_text的函数签名 看看read_text的函数签名 对图像的操作 对html的操作 总结 前言 这篇就来看看clipboard这个插件。 参考如下 Clipboard | Taurihttps://tauri.app/plugin/clipboard/ 正文 安装 执行下…...
高效选课系统:一键管理你的课程表
选课流程 数据模型 我的课程表Controller Api(value "我的课程表接口", tags "我的课程表接口") Slf4j RestController public class MyCourseTablesController {Autowiredprivate MyCourseTablesService myCourseTablesService;ApiOperation("添加…...