使用AI整理知识点--WPF动画核心知识
一、WPF动画基础
1、动画本质
通过随时间改变依赖属性值实现视觉效果(如位置、透明度、颜色等)。
依赖属性必须支持 DependencyProperty,且需是可动画的(如 Double, Color, Point 等)。
2、动画三要素
- 起始值 (From)
- 结束值 (To)
- 持续时间 (Duration)
3、基本动画类型
类型 | 描述 | 示例属性 | 对应动画类 |
线性动画 | 线性插值变化 |
|
|
颜色动画 | 颜色渐变 |
|
|
点/路径动画 | 沿路径或坐标点移动 |
|
|
旋转/缩放动画 | 变换效果 |
|
|
二、WPF动画基础类型
1、线性插值动画
- 原理:通过起始值和结束值的线性过渡实现平滑动画(如DoubleAnimation控制宽度变化)
- 适用场景:简单属性变化(如透明度渐变、位置移动)
- 关键属性:
<DoubleAnimation Storyboard.TargetProperty="Opacity" From="0" To="1" Duration="0:0:1"/>
2、关键帧动画
- 原理:定义多个关键时间点的属性值,支持多种插值方式(线性、离散、样条)
- 示例:实现中间停顿的移动效果
<DoubleAnimationUsingKeyFrames><LinearDoubleKeyFrame Value="0" KeyTime="0:0:0"/><EasingDoubleKeyFrame Value="42.5" KeyTime="0:0:1" EasingFunction="{StaticResource CubicEase}"/><DiscreteDoubleKeyFrame Value="42.5" KeyTime="0:0:2"/><EasingDoubleKeyFrame Value="85" KeyTime="0:0:3"/></DoubleAnimationUsingKeyFrames>
3.关键帧类型:
<LinearDoubleKeyFrame Value="100" KeyTime="0:0:1" /> <!-- 线性过渡 --><DiscreteDoubleKeyFrame Value="200" KeyTime="0:0:2" /> <!-- 直接跳变 --><SplineDoubleKeyFrame Value="300" KeyTime="0:0:3"KeySpline="0.5,0 0.5,1" /> <!-- 贝塞尔曲线控制速率 -->
3、路径动画
- 原理:元素沿 PathGeometry定义的路径运动(如 DoubleAnimationUsingPath)
- 适用场景:复杂轨迹运动(如曲线飞行)
<PathGeometry x:Key="MotionPath" Figures="M0,0 L100,100 C200,50 300,150 400,0"/><DoubleAnimationUsingPath Storyboard.TargetProperty="X"PathGeometry="{StaticResource MotionPath}"/>
三、动画核心元素
1、动画类
- 继承自 Timeline,如ColorAnimation(颜色渐变)、ThicknessAnimation(边距动画)
- 命名规则:DataTypeAnimation(如DoubleAnimation)
2、故事板 (Storyboard)
- 作用:管理多个动画的播放顺序和同步
- 常用方法
Storyboard.Begin(); // 开始动画Storyboard.Stop(); // 停止Storyboard.Pause(); // 暂停Storyboard.Seek(TimeSpan); // 跳转到指定时间
3.代码控制:
Storyboard sb = new Storyboard();sb.Children.Add(animation1);sb.Begin(element);
4.事件触发器 (EventTrigger)
<Button Content="Click"><Button.Triggers><EventTrigger RoutedEvent="Button.Click"><BeginStoryboard><Storyboard>...</Storyboard></BeginStoryboard></EventTrigger></Button.Triggers></Button>
5.数据触发器 (DataTrigger) / 属性触发器 (Trigger)
<Style TargetType="Rectangle"><Style.Triggers><Trigger Property="IsMouseOver" Value="True"><Trigger.EnterActions><BeginStoryboard>...</BeginStoryboard></Trigger.EnterActions></Trigger></Style.Triggers></Style>
3、依赖属性与接口
动画仅作用于依赖属性,且目标对象需实现 IAnimatable 接口(所有 UI 元素均支持)
四、缓动函数 (Easing Functions)
1、作用
改变动画速度曲线,实现自然过渡(如加速、弹跳)
2、常见类型
- 线性:LinearEase
- 物理模拟:BounceEase(弹跳)、ElasticEase(弹性)
- 自定义曲线:CubicEase(三次方缓动)
<DoubleAnimation From="0" To="300" Duration="0:0:2"><DoubleAnimation.EasingFunction><BounceEase Bounces="2" EasingMode="EaseOut"/></DoubleAnimation.EasingFunction></DoubleAnimation>
五、动画实现方式
1、XAML 声明式
- 优点:直观易维护,适合简单动画
- 示例:按钮点击缩放
<Button.Triggers><EventTrigger RoutedEvent="Button.Click"><BeginStoryboard><Storyboard><DoubleAnimation Storyboard.TargetProperty="Width" To="200" Duration="0:0:0.5"/></Storyboard></BeginStoryboard></EventTrigger></Button.Triggers>
2、C# 动态生成
- 适用场景:复杂逻辑控制(如根据用户输入生成动画)
- 代码示例:
var animation = new DoubleAnimation{From = 0,To = 100,Duration = TimeSpan.FromSeconds(1),EasingFunction = new CubicEase { EasingMode = EasingMode.EaseInOut }};element.BeginAnimation(WidthProperty, animation);
六、高级动画技巧
1、动画组 (Animation Groups)
同时运行多个动画(如旋转 + 缩放)
<Storyboard><DoubleAnimation TargetProperty="Width" To="150"/><DoubleAnimation TargetProperty="Height" To="150"/></Storyboard>
2、动画复用 (Resource + x:Key)
定义动画资源,全局复用:
<Window.Resources><Storyboard x:Key="FadeInAnimation"><DoubleAnimation Storyboard.TargetProperty="Opacity"From="0" To="1" Duration="0:0:1"/></Storyboard></Window.Resources>
3、组合动画 (Parallel vs Sequence)
- ParallelTimeline:并行执行多个动画。
- SequenceTimeline:按顺序执行动画。
4、路径动画优化
使用 PathGeometry的Simplify() 方法减少路径节点,提升性能
5、性能优化
1)启用硬件加速
- 设置 RenderOptions.BitmapScalingMode="HighQuality"
- 对复杂动画使用 CacheMode="BitmapCache"
2)减少实时渲染开销
- 优先使用 Opacity 替代 Visibility 做淡入淡出
- 避免频繁触发布局计算(如动画中修改 Width/Height)
- 避免高指数缓动函数(如 PowerEase 的 Power >5)
3)合理使用 FillBehavior
- FillBehavior="HoldEnd":动画结束后保持最终值(默认)
- FillBehavior="Stop":动画结束后恢复初始值
七、调试与常见问题
1. 动画不生效的排查步骤
- 确认目标属性是依赖属性(Dependency Property)
- 检查Storyboard.TargetName和TargetProperty是否正确
- 确保动画的 From/To 值在合理范围内
- 验证触发器是否被正确触发(如事件名称是否拼写错误)
2、其它
- 调试工具:WPF Performance Suite 分析动画帧率
- 设计工具:Blend for Visual Studio 可视化编辑动画路径
- 学习资源:微软官方动画指南.
八、示例
让圆点从左至右的动画效果 中间停顿 即先从左至中间 再从中间至右 的动画效果
<Grid><Grid.Resources><Style x:Key="ellipse" TargetType="Ellipse"><Setter Property="Width" Value="10" /><Setter Property="Height" Value="10" /><Setter Property="Canvas.Left" Value="0" /><Setter Property="Fill" Value="Gray" /><!--<Setter Property="RenderTransformOrigin" Value="0.5,3.33" />--></Style><PowerEasex:Key="MidPauseEase"EasingMode="EaseInOut"Power="5" /></Grid.Resources><Canvas Height="100"><Canvas.Triggers><EventTrigger RoutedEvent="Loaded"><BeginStoryboard><Storyboard RepeatBehavior="Forever" Storyboard.TargetProperty="(Canvas.Left)"><!-- e1 动画 --><DoubleAnimationUsingKeyFrames Storyboard.TargetName="e1"><EasingDoubleKeyFrameEasingFunction="{StaticResource MidPauseEase}"KeyTime="0:0:1.5"Value="400" /><EasingDoubleKeyFrameEasingFunction="{StaticResource MidPauseEase}"KeyTime="0:0:3"Value="780" /></DoubleAnimationUsingKeyFrames><!-- e2 动画 --><DoubleAnimationUsingKeyFrames Storyboard.TargetName="e2"><EasingDoubleKeyFrameEasingFunction="{StaticResource MidPauseEase}"KeyTime="0:0:1.7"Value="388" /><EasingDoubleKeyFrameEasingFunction="{StaticResource MidPauseEase}"KeyTime="0:0:3.2"Value="780" /></DoubleAnimationUsingKeyFrames><!-- e3 动画 --><DoubleAnimationUsingKeyFrames Storyboard.TargetName="e3"><EasingDoubleKeyFrameEasingFunction="{StaticResource MidPauseEase}"KeyTime="0:0:1.9"Value="376" /><EasingDoubleKeyFrameEasingFunction="{StaticResource MidPauseEase}"KeyTime="0:0:3.4"Value="780" /></DoubleAnimationUsingKeyFrames><!-- e4 动画 --><DoubleAnimationUsingKeyFrames Storyboard.TargetName="e4"><EasingDoubleKeyFrameEasingFunction="{StaticResource MidPauseEase}"KeyTime="0:0:2.1"Value="364" /><EasingDoubleKeyFrameEasingFunction="{StaticResource MidPauseEase}"KeyTime="0:0:3.6"Value="780" /></DoubleAnimationUsingKeyFrames><!-- e5动画 --><DoubleAnimationUsingKeyFrames Storyboard.TargetName="e5"><EasingDoubleKeyFrameEasingFunction="{StaticResource MidPauseEase}"KeyTime="0:0:2.3"Value="352" /><EasingDoubleKeyFrameEasingFunction="{StaticResource MidPauseEase}"KeyTime="0:0:3.8"Value="780" /></DoubleAnimationUsingKeyFrames></Storyboard></BeginStoryboard></EventTrigger></Canvas.Triggers><!-- 背景 --><Ellipse Width="100" Height="100" /><LabelWidth="100"Height="100"HorizontalContentAlignment="Center"VerticalContentAlignment="Center"Content="Loading"FontFamily="Times New Roman"FontSize="16"FontWeight="Bold"Foreground="#6b48ff" /><Ellipse Name="e1" Style="{StaticResource ellipse}" /><Ellipse Name="e2" Style="{StaticResource ellipse}" /><Ellipse Name="e3" Style="{StaticResource ellipse}" /><Ellipse Name="e4" Style="{StaticResource ellipse}" /><Ellipse Name="e5" Style="{StaticResource ellipse}" /></Canvas></Grid>
相关文章:
使用AI整理知识点--WPF动画核心知识
一、WPF动画基础 1、动画本质 通过随时间改变依赖属性值实现视觉效果(如位置、透明度、颜色等)。 依赖属性必须支持 DependencyProperty,且需是可动画的(如 Double, Color, Point 等)。 2、动画三要素 起始值 (Fr…...
计算光学成像与光学计算概论
计算光学成像所涉及研究的内容非常广泛,虽然计算光学成像的研究内容是发散的,但目的都是一致的:如何让相机记录到客观实物更丰富的信息,延伸并扩展人眼的视觉感知。总的来说,计算光学成像现阶段已经取得了很多令人振奋…...
100天精通Python(爬虫篇)——第115天:爬虫在线小工具_Curl转python爬虫代码工具(快速构建初始爬虫代码)
文章目录 一、curl是什么?二、爬虫在线小工具(牛逼puls)三、实战操作 一、curl是什么? 基本概念:curl 支持多种协议,如 HTTP、HTTPS、FTP、SFTP 等,可用于从服务器获取数据或向服务器发送数据&a…...
点云软件VeloView开发环境搭建与编译
官方编译说明 LidarView / LidarView-Superbuild GitLab 我的编译过程: 安装vs2019,windows sdk,qt5.14.2(没安装到5.15.7),git,cmake3.31,python3.7.9,ninja下载放到…...
PHP配置虚拟主机
虚拟主机: 不是真实存在的主机, 因为一台电脑理论上讲只能作为一个网站: 事实上,一个网站是一个文件夹. 在本地开发中,通过虚拟主机配置可以实现多域名独立访问不同项目目录(如 www.project1.test 和 www.project2.test),以 ”XAM…...
笔记四:C语言中的文件和文件操作
Faye:只要有正确的伴奏,什么都能变成好旋律。 ---------《寻找天堂》 目录 一、文件介绍 1.1程序文件 1.2 数据文件 1.3 文件名 二、文件的打开和关闭 2.1 文件指针 2.2.文件的打开和关闭 2.3 文件读取结束的判定 三、 文件的顺序读写 3.1 顺序读写…...
PyTorch中的线性变换:nn.Parameter VS nn.Linear
self.weight nn.Parameter(torch.randn(in_channels, out_channels)) 和 self.linear nn.Linear(in_channels, out_channels) 并不完全一致,尽管它们都可以用于实现线性变换(即全连接层),但它们的使用方式和内部实现有所不同。 …...
计算机网络(1) 网络通信基础,协议介绍,通信框架
网络结构模式 C/S-----客户端和服务器 B/S -----浏览器服务器 MAC地址 每一个网卡都拥有独一无二的48位串行号,也即MAC地址,也叫做物理地址、硬件地址或者是局域网地址 MAC地址表示为12个16进制数 如00-16-EA-AE-3C-40 (每一个数可以用四个…...
PHP之常量
在你有别的编程语言的基础下,你想学习PHP,可能要了解的一些关于常量的信息。 PHP中的常量不用指定数据类型,可以使用两次方法定义。 使用const //定义常量 const B 2; echo B . PHP_EOL;使用define define("A", 1); echo A . P…...
苦瓜书盘官网,免费pdf/mobi电子书下载网站
苦瓜书盘(kgbook)是一个专注于提供6英寸PDF和MOBI格式电子书的免费下载平台,专为电子阅读器用户设计。该平台为用户提供了丰富的电子书资源,涵盖文学、历史、科学、技术等多个领域,旨在打造一个全面的电子书资源库。用…...
通过 Docker openssl 容器生成生成Nginx证书文件
使用 alpine/openssl 镜像生成证书 1. 拉取容器 [rootlocalhost ~]# docker run --rm alpine/openssl version OpenSSL 3.3.3 11 Feb 2025 (Library: OpenSSL 3.3.3 11 Feb 2025)2. 运行 alpine/openssl 生成证书(Nginx) # 生成1个.key私钥文件&#…...
第四十一:Axios 模型的 get ,post请求
Axios 的 get 请求方式 9.双向数据绑定 v-model - 邓瑞编程 Axios 的 post 请求方式:...
从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(十) 收发消息
1.聊天框 首先我们完善前端的消息输入框 components下面新建MessageInput组件 import { useState,useRef } from "react" import {X,Image,Send} from "lucide-react"import { useChatStore } from "../store/useChatStore" import toast from…...
Spring Boot面试问答
1. Spring Boot 基础知识 问题 1:什么是Spring Boot?它与Spring框架有何不同? 回答: Spring Boot是基于Spring框架的一个开源框架,旨在简化新Spring应用的初始化和开发过程。与传统的Spring框架相比,Spring Boot提供了以下优势: 自动配置:根据项目依赖自动配置Spring…...
win11编译llama_cpp_python cuda128 RTX30/40/50版本
Geforce 50xx系显卡最低支持cuda128,llama_cpp_python官方源只有cpu版本,没有cuda版本,所以自己基于0.3.5版本源码编译一个RTX 30xx/40xx/50xx版本。 1. 前置条件 1. 访问https://developer.download.nvidia.cn/compute/cuda/12.8.0/local_…...
2025-03-07 学习记录--C/C++-C语言 截取字符串的三种方法
C语言 截取字符串 ⭐️ 方法 1:使用 strncpy 函数 🍭 strncpy 是C标准库中的一个函数,用于从源字符串中复制指定长度的字符到目标字符串中。【详情请查看我的另一篇文章】 示例代码:🌰 #include <stdio.h> #in…...
doris: Oracle
Apache Doris JDBC Catalog 支持通过标准 JDBC 接口连接 Oracle 数据库。本文档介绍如何配置 Oracle 数据库连接。 使用须知 要连接到 Oracle 数据库,您需要 Oracle 19c, 18c, 12c, 11g 或 10g。 Oracle 数据库的 JDBC 驱动程序,您可以从 Maven 仓库…...
【神经网络】python实现神经网络(一)——数据集获取
一.概述 在文章【机器学习】一个例子带你了解神经网络是什么中,我们大致了解神经网络的正向信息传导、反向传导以及学习过程的大致流程,现在我们正式开始进行代码的实现,首先我们来实现第一步的运算过程模拟讲解:正向传导。本次代…...
自学嵌入式第27天------TCP和UDP,URL爬虫
1. TCP和UDP区别 **TCP(传输控制协议)和UDP(用户数据报协议)**是两种主要的传输层协议,它们在数据传输方式上有显著区别: 连接性: TCP是面向连接的协议,通信前需通过三次握手建立连…...
【虚拟化】Docker Desktop 架构简介
在阅读前您需要了解 docker 架构:Docker architecture WSL 技术:什么是 WSL 2 1.Hyper-V backend 我们知道,Docker Desktop 最开始的架构的后端是采用的 Hyper-V。 Docker daemon (dockerd) 运行在一个 Linux distro (LinuxKit build) 中&…...
C#程序加密与解密Demo程序示例
目录 一、加密程序功能介绍 1、加密用途 2、功能 3、程序说明 4、加密过程 5、授权的注册文件保存方式 二、加密程序使用步骤 1、步骤一 编辑2、步骤二 3、步骤三 4、步骤四 三、核心代码说明 1、获取电脑CPU 信息 2、获取硬盘卷标号 3、机器码生成 3、 生成…...
200W数据需要去重,如何优化?
优化去重逻辑的时间取决于多个因素,包括数据量、数据结构、硬件性能(CPU、内存)、去重算法的实现方式等。以下是对优化去重逻辑的详细分析和预期优化效果: 1. 去重逻辑的性能瓶颈 时间复杂度:使用HashSet去重的时间复…...
理解 UDP 协议与实战:Android 使用 UDP 发送和接收消息
一、UDP 协议概述 UDP(User Datagram Protocol,用户数据报协议)是一个无连接的网络通信协议。与 TCP 不同,UDP 不建立连接,不保证数据的顺序和完整性。它的特点是简单、高效,适用于实时性要求较高、对数据…...
7V 至 30V 的超宽 VIN 输入范围,转换效率高达 96%的WD5030
WD5030 具备 7V 至 30V 的超宽 VIN 输入范围,这一特性使其能够适应多种不同电压等级的供电环境,无论是在工业设备中常见的较高电压输入,还是在一些便携式设备经过初步升压后的电压,WD5030 都能轻松应对,极大地拓展了应…...
基于 LeNet 网络的 MNIST 数据集图像分类
1.LeNet的原始实验数据集MNIST 名称:MNIST手写数字数据集 数据类型:灰度图 (一通道) 图像大小:28*28 类别数:10类(数字0-9) 1.通过torchvision.datasets.MNIST下载并保存到本地…...
智能体开发:推理-行动(ReAct)思维链提示
人类在处理一个需要多个步骤才能完成任务时,显著特点是能够将言语推理(内心独白)和实际行动融合在一起,在面对陌生或不确定的情况时通过这种方法学习新知识,做出决策,并执行,从而应对复杂的任务…...
Android Native 之 文件系统挂载
一、文件系统挂载流程概述 二、文件系统挂载流程细节 1、Init启动阶段 众所周知,init进程为android系统的第一个进程,也是native世界的开端,要想让整个android世界能够稳定的运行,文件系统的创建和初始化是必不可少的ÿ…...
DirectX12(D3D12)基础教程四 入门指南
本章主要讲了些D3D12概念和理论,对第一、二章相关概念的补充和纠正,要的理解D3D12概念和理论基础,结合代码加深理解。 命令队列和命令列表 为了实现渲染工作的重用和多线程缩放, 在 D3D12 中,做了三个重要方面不同于 …...
android13打基础: timepicker控件
public class Ch4_TimePickerActivity extends AppCompatActivity implements TimePickerDialog.OnTimeSetListener {private TextView tv_time; // 声明一个文本视图对象private TimePicker tp_time; // 声明一个时间选择器对象Overrideprotected void onCreate(Nullable Bund…...
国产化板卡设计原理图:2330-基于FMC接口的JFM7K325T PCIeX4 3U PXIe接口卡
基于FMC接口的JFM7K325T PCIeX4 3U PXIe接口卡 一、板卡概述 本板卡基于 FPGAJFM7K325T 芯片,pin_to_pin兼容FPGAXC7K410T-2FFG900 ,支持PCIeX8、64bit DDR3容量2GByte,HPC的FMC连接器,板卡支持PXIE标准协议,其中XJ3…...
Oracle SQL优化①——查看SQL执行计划的几种方法
前言 在日常的运维工作中,SQL优化是DBA的进阶技能,SQL优化的前提是要看SQL的执行计划是否正确,下面分享几种查看执行计划的方法,每一种方法都各有各的好处,可以根据特定场景选择某种方法。 一.使用AUTOTRACE查看执行…...
MySQL主从架构配合ShardingJdbc实现读写分离
文章目录 目录架构搭建读写分离pom.xmlfdy-live-user-provider 模块application.ymlfdy-db-sharding.yamlShardingJdbcDatasourceAutoInitConnectionConfig.java 目录 架构搭建 基于Docker去创建MySQL的主从架构 读写分离 pom.xml <dependency><groupId>mysql…...
MyBatis @Param 注解详解:多参数传递与正确使用方式
Param 注解主要用于 MyBatis 进行参数传递时给 SQL 语句中的参数 起别名,通常用于 多参数 方法,使参数在 XML Mapper 文件或注解 SQL 语句中更清晰易用。 1. 基本用法 在 Mapper 接口中使用 Param 来为参数命名,避免 MyBatis 解析时出现参数…...
【JAVA架构师成长之路】【Redis】第14集:Redis缓存穿透原理、规避、解决方案
30分钟自学教程:Redis缓存穿透原理与解决方案 目标 理解缓存穿透的成因及危害。掌握布隆过滤器、空值缓存等核心防御技术。能够通过代码实现请求拦截与缓存保护。学会限流降级、异步加载等应急方案。 教程内容 0~2分钟:缓存穿透的定义与核心原因 定义…...
mybatis报错org/apache/commons/lang3/tuple/Pair] with root cause
mybatis一对多查询配置resultMap映射报错org/apache/commons/lang3/tuple/Pair] with root cause 原因是mybatis依赖common-lang3这个包, 只需要添加common-lang3的依赖坐标即可: <dependency><groupId>org.apache.commons</groupId><artifactId>comm…...
supervisord管理Gunicorn进程,使用Nginx作为反向代理运行flask web项目
1. 安装 Gunicorn 在项目虚拟环境中安装 Gunicorn:2. 基本用法 配置文件 创建一个 Gunicorn 配置文件(如 gunicorn_config.py),方便管理复杂配置。 示例 gunicorn_config.py: bind "0.0.0.0:8000" #…...
STM32之软件SPI
SPI传输更快,最大可达80MHz,而I2C最大只有3.4MHz。输入输出是分开的,可以同时输出输入。是同步全双工。仅支持一主多从。SS是从机选择线。每个从机一根。SPI无应答机制的设计。 注意:所有设备需要共地,时钟线主机输出&…...
fastjson漏洞
fastjson漏洞 fastjson工作原理攻击原理补充 例子 fastjson工作原理 fastjson的作用是将JAVA对象转换成对应的json表示形式,也可以反过来将json转化为对应的Java对象。fastjson使用AutoType功能进行反序列化,AutoType使用type标记字符的原始类型&#x…...
【YOLOv12改进trick】医学图像分割网络CMUNeXt引入YOLOv12中,增强全局上下文信息实现涨点,含创新点Python代码,方便发论文
🍋改进模块🍋:医学全卷积U型网络(CMUNeXtBlock) 🍋解决问题🍋:CMUNeXtBlock模块解决了在医学图像分割任务中,传统的卷积操作由于其局部性限制,难以有效提取全局上下文信息的问题。 🍋改进优势🍋:利用大卷积核和倒置瓶颈结构,提取全局上下文信息,同时保持卷…...
机器学习的半监督学习,弱监督学习,自监督学习
半监督学习、弱监督学习和自监督学习是机器学习中利用不同形式监督信号的三种方法,它们的核心区别在于标注数据的数量、质量以及监督信号的来源。以下是它们的详细对比: 1. 半监督学习(Semi-Supervised Learning) 核心特点&#x…...
K8S学习之基础十七:k8s的蓝绿部署
蓝绿部署概述 蓝绿部署中,一共有两套系统,一套是正在提供服务的系统,一套是准备发布的系统。两套系统都是功能完善、正在运行的系统,只是版本和对外服务情况不同。 开发新版本,要用新版本替换线上的旧版本&…...
【计算机网络】计算机网络的性能指标——时延、时延带宽积、往返时延、信道利用率
计算机网络的性能指标 导读 大家好,很高兴又和大家见面啦!!! 在上一篇内容中我们介绍了计算机网络的三个性能指标——速率、带宽和吞吐量。用大白话来说就是:网速、最高网速和实时网速。 相信大家看到这三个词应该就…...
单片机如何用C语言重写vfprintf
在单片机中,标准库函数 vfprintf 可能不可用或占用过多资源(如内存或代码空间),因此我们可以通过自定义实现一个轻量级的 vfprintf 函数,专门用于单片机的串口输出。以下是一个用 C 语言重写 vfprintf 的示例ÿ…...
1.4 单元测试与热部署
本次实战实现Spring Boot的单元测试与热部署功能。单元测试方面,通过JUnit和Mockito等工具,结合SpringBootTest注解,可以模拟真实环境对应用组件进行独立测试,验证逻辑正确性,提升代码质量。具体演示了HelloWorld01和H…...
使用免费IP数据库离线查询IP归属地
一、准备工作 1.下载免费IP数据库 首先,访问 MaxMind官网(https://www.maxmind.com/en/home)如果你还没有MaxMind账号,可以通过此链接地址(https://www.maxmind.com/en/geolite2/signup)进行账号注册&…...
go语言数据类型
一.Go 语言有四大显著特点:高效性:编译与运行效率高。并发性:原生支持并发编程。简洁性:编程风格简洁直接,代码可读性与可维护性高。跨平台性:程序能在 Windows、Linux、Mac OS 等多系统运行。二.go的包:pa…...
操作系统 1.3-开机页面的产生
问题引入 从打开电源开始.. 这神秘的黑色背后发生着什么?... 设计思路 伟大的数学家图灵,设计了这样的一个模型: 首先我们计算机有一个控制器,他可以处理一系列提供给他的动作。我们将控制器动作,控制器状态,数据…...
单例模式:确保一个类只有一个实例
目录 引言 1. 单例模式的核心思想 2. 单例模式的实现方式 2.1 饿汉式单例 2.2 懒汉式单例 2.3 线程安全的懒汉式单例 2.4 双重检查锁定(Double-Checked Locking) 2.5 静态内部类实现单例 2.6 枚举实现单例 3. 单例模式的使用场景 4. 单例模式…...
Ubuntu 下 nginx-1.24.0 源码分析 - ngx_modules
定义在 objs\ngx_modules.c #include <ngx_config.h> #include <ngx_core.h>extern ngx_module_t ngx_core_module; extern ngx_module_t ngx_errlog_module; extern ngx_module_t ngx_conf_module; extern ngx_module_t ngx_openssl_module; extern ngx_modul…...
vue3中 组合式~测试深入组件:事件 与 $emit()—setup() 上下文对象ctx.emit
一、语法(props) 第一步:在组件模板表达式中,可以直接用$emit()方法触发自定义事件, <!-- MyComponent --> <button click"$emit(someEvent)">Click Me</button> 第二步父组件可以通过 v-on (缩写为 ) 来监听…...