WPF 与 C# 融合开发:从基础到高级应用(一)
WPF 与 C# 融合开发:从基础到高级应用
一、C# 语言基础回顾
1.1 C# 语言概述
C# 是微软开发的一种现代、面向对象的编程语言,它融合了 C、C++ 和 Java 等语言的优点,具有简洁、安全、高效等特点。C# 广泛应用于 Windows 平台的应用开发,是开发 WPF 应用程序的首选语言。
1.2 数据类型与变量
1.2.1 值类型
值类型直接存储数据的值,在栈上分配内存。常见的值类型包括整数类型(如 sbyte
、ushort
、uint
、ulong
等)、浮点类型(decimal
常用于财务计算,具有高精度)、布尔类型和字符类型。例如:
decimal price = 123.45m;
bool isMember = false;
1.2.2 引用类型
引用类型存储的是数据的引用,在堆上分配内存。类、接口、数组、委托和字符串都是引用类型。例如:
string message = "Hello, C#!";
int[] numbers = new int[5];
1.2.3 变量声明与作用域
变量在使用前必须声明,并且具有一定的作用域。作用域决定了变量的可见性和生命周期。例如:
{int localVariable = 10; // 局部变量,作用域在大括号内
}
// 这里无法访问 localVariable
1.3 控制结构
1.3.1 条件语句
除了常见的 if - else
和 switch
语句,C# 还支持三元运算符 ?:
,用于简洁地表达简单的条件判断。例如:
int age = 20;
string status = age >= 18 ? "成年人" : "未成年人";
1.3.2 循环语句
C# 提供了 for
、while
、do - while
和 foreach
循环。foreach
循环常用于遍历数组或集合。例如:
string[] names = { "Alice", "Bob", "Charlie" };
foreach (string name in names)
{Console.WriteLine(name);
}
1.4 方法和类
1.4.1 方法定义和调用
方法是具有特定功能的代码块,可以接受参数并返回值。方法可以重载,即方法名相同但参数列表不同。例如:
class Calculator
{public int Add(int a, int b){return a + b;}public double Add(double a, double b){return a + b;}
}
1.4.2 类的封装和继承
类是对象的蓝图,封装了数据和行为。继承允许一个类继承另一个类的属性和方法,提高代码的复用性。例如:
class Animal
{public void Eat(){Console.WriteLine("动物吃东西");}
}class Cat : Animal
{public void Meow(){Console.WriteLine("猫叫");}
}
1.5 异常处理
C# 提供了 try - catch - finally
语句来处理异常。try
块中放置可能会抛出异常的代码,catch
块用于捕获和处理异常,finally
块无论是否发生异常都会执行。例如:
try
{int result = 10 / 0;
}
catch (DivideByZeroException ex)
{Console.WriteLine("除数不能为零:" + ex.Message);
}
finally
{Console.WriteLine("无论是否异常,此代码都会执行");
}
二、WPF 基础架构
2.1 WPF 概述
WPF 是微软为 Windows 平台开发的新一代用户界面框架,它引入了 DirectX 图形渲染引擎,支持硬件加速,能够创建出高质量的 2D 和 3D 图形界面。WPF 使用 XAML 来描述用户界面,实现了界面设计和代码逻辑的分离。
2.2 XAML 基础
2.2.1 XAML 语法规则
XAML 是一种基于 XML 的标记语言,遵循 XML 的语法规则。标签用于表示控件和元素,属性用于设置控件的特性。例如:
<Button Content="点击我" Width="100" Height="30"/>
2.2.2 命名空间的使用
在 XAML 中,命名空间用于引用不同的程序集和类型。常见的命名空间包括 http://schemas.microsoft.com/winfx/2006/xaml/presentation
和 http://schemas.microsoft.com/winfx/2006/xaml
。例如:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="My Window" Height="350" Width="525"><!-- 窗口内容 -->
</Window>
2.3 布局控件
2.3.1 Grid 布局
Grid
布局将界面划分为行和列的网格,控件可以放置在指定的单元格中。可以通过 RowDefinitions
和 ColumnDefinitions
来定义行和列的大小。例如:
<Grid><Grid.RowDefinitions><RowDefinition Height="Auto"/><RowDefinition Height="*"/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition Width="100"/><ColumnDefinition Width="*"/></Grid.ColumnDefinitions><Label Content="用户名:" Grid.Row="0" Grid.Column="0"/><TextBox Grid.Row="0" Grid.Column="1"/>
</Grid>
2.3.2 StackPanel 布局
StackPanel
布局按顺序排列子控件,可以是水平排列或垂直排列。通过 Orientation
属性来指定排列方向。例如:
<StackPanel Orientation="Horizontal"><Button Content="按钮1"/><Button Content="按钮2"/>
</StackPanel>
2.3.3 WrapPanel 布局
WrapPanel
布局当子控件超出其宽度或高度时,会自动换行或换列排列。例如:
<WrapPanel><Button Content="按钮1"/><Button Content="按钮2"/><Button Content="按钮3"/>
</WrapPanel>
2.4 控件基础
2.4.1 常见控件介绍
WPF 提供了丰富的控件,如 Button
、TextBox
、Label
、ListBox
、ComboBox
等。每个控件都有其特定的用途和属性。例如:
<StackPanel><Label Content="请输入文本:"/><TextBox Name="inputTextBox"/><Button Content="提交" Click="Button_Click"/>
</StackPanel>
2.4.2 控件事件处理
控件的事件可以在 XAML 中指定事件处理方法,也可以在代码中动态注册。例如,处理按钮的 Click
事件:
private void Button_Click(object sender, RoutedEventArgs e)
{string input = inputTextBox.Text;MessageBox.Show("你输入的文本是:" + input);
}
三、WPF 数据绑定深入探究
3.1 数据绑定基础
3.1.1 数据绑定概念
数据绑定是 WPF 的核心特性之一,它允许将 UI 元素的属性与数据源的属性进行关联,实现数据的自动更新。
3.1.2 简单数据绑定示例
假设有一个 Person
类:
public class Person
{public string Name { get; set; }public int Age { get; set; }
}
在 XAML 中进行数据绑定:
<StackPanel><TextBlock Text="{Binding Name}"/><TextBlock Text="{Binding Age}"/>
</StackPanel>
在代码隐藏文件中设置数据上下文:
public partial class MainWindow : Window
{public MainWindow(){InitializeComponent();Person person = new Person { Name = "David", Age = 28 };DataContext = person;}
}
3.2 数据绑定模式
3.2.1 单向绑定
单向绑定是指数据源的属性值发生变化时,UI 元素会更新,但 UI 元素的变化不会影响数据源。使用 Mode=OneWay
来指定单向绑定。例如:
<TextBlock Text="{Binding Name, Mode=OneWay}"/>
3.2.2 双向绑定
双向绑定允许数据源和 UI 元素之间的相互更新。使用 Mode=TwoWay
来指定双向绑定。例如:
<TextBox Text="{Binding Name, Mode=TwoWay}"/>
3.2.3 单向到源绑定
单向到源绑定是指 UI 元素的变化会更新数据源,但数据源的变化不会影响 UI 元素。使用 Mode=OneWayToSource
来指定单向到源绑定。
3.3 数据模板
3.3.1 数据模板概念
数据模板用于定义如何显示数据源中的数据。可以使用数据模板来定制列表框、组合框等控件中数据的显示方式。
3.3.2 数据模板示例
假设有一个 Employee
类:
public class Employee
{public string Name { get; set; }public int EmployeeId { get; set; }
}
在 XAML 中定义数据模板:
<Window.Resources><DataTemplate x:Key="EmployeeTemplate"><StackPanel Orientation="Horizontal"><TextBlock Text="{Binding Name}" Margin="5"/><TextBlock Text="{Binding EmployeeId}" Margin="5"/></StackPanel></DataTemplate>
</Window.Resources>
<ListBox ItemsSource="{Binding Employees}" ItemTemplate="{StaticResource EmployeeTemplate}"/>
在代码隐藏文件中设置数据源:
public partial class MainWindow : Window
{public ObservableCollection<Employee> Employees { get; set; }public MainWindow(){InitializeComponent();Employees = new ObservableCollection<Employee>{new Employee { Name = "Eve", EmployeeId = 3 },new Employee { Name = "Frank", EmployeeId = 4 }};DataContext = this;}
}
3.4 数据验证
3.4.1 数据验证概念
数据验证用于确保用户输入的数据符合特定的规则。WPF 提供了多种方式来实现数据验证,如自定义验证规则、使用 IDataErrorInfo
接口等。
3.4.2 自定义验证规则示例
定义一个自定义验证规则类:
public class AgeValidationRule : ValidationRule
{public override ValidationResult Validate(object value, CultureInfo cultureInfo){int age;if (!int.TryParse(value.ToString(), out age)){return new ValidationResult(false, "年龄必须是数字");}if (age < 0 || age > 120){return new ValidationResult(false, "年龄必须在 0 到 120 之间");}return ValidationResult.ValidResult;}
}
在 XAML 中使用自定义验证规则:
<TextBox><TextBox.Text><Binding Path="Age" UpdateSourceTrigger="PropertyChanged"><Binding.ValidationRules><local:AgeValidationRule/></Binding.ValidationRules></Binding></TextBox.Text>
</TextBox>
四、WPF 样式与模板高级应用
4.1 样式基础
4.1.1 样式概念
样式是一组属性值的集合,用于定义控件的外观和行为。可以使用样式来统一应用程序中相同类型控件的外观。
4.1.2 样式定义与使用
在 XAML 中定义样式:
<Window.Resources><Style TargetType="Button"><Setter Property="Background" Value="LightBlue"/><Setter Property="Foreground" Value="White"/><Setter Property="FontSize" Value="16"/></Style>
</Window.Resources>
<Button Content="Styled Button"/>
4.2 模板基础
4.2.1 模板概念
模板用于定义控件的可视化结构。可以使用模板来完全自定义控件的外观。
4.2.2 模板定义与使用
例如,自定义按钮的模板:
<Window.Resources><Style TargetType="Button"><Setter Property="Template"><Setter.Value><ControlTemplate TargetType="Button"><Border Background="{TemplateBinding Background}"BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"CornerRadius="5"><ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/></Border></ControlTemplate></Setter.Value></Setter></Style>
</Window.Resources>
<Button Content="Custom Button"/>
4.3 资源管理
4.3.1 资源概念
资源是可以在应用程序中重复使用的对象,如样式、模板、图像等。可以将资源定义在 XAML 的 Resources
部分,然后在需要的地方引用。
4.3.2 资源的使用
例如,定义一个颜色资源并在样式中使用:
<Window.Resources><SolidColorBrush x:Key="MyButtonBackground" Color="Green"/><Style TargetType="Button"><Setter Property="Background" Value="{StaticResource MyButtonBackground}"/></Style>
</Window.Resources>
<Button Content="Button with Resource"/>
4.4 主题和皮肤切换
4.4.1 主题和皮肤概念
主题和皮肤用于改变应用程序的整体外观。可以通过切换不同的资源字典来实现主题和皮肤的切换。
4.4.2 主题切换示例
创建不同的资源字典文件,如 LightTheme.xaml
和 DarkTheme.xaml
,在代码中动态加载不同的资源字典:
private void SwitchToLightTheme()
{ResourceDictionary lightTheme = new ResourceDictionary();lightTheme.Source = new Uri("LightTheme.xaml", UriKind.Relative);Application.Current.Resources.MergedDictionaries.Clear();Application.Current.Resources.MergedDictionaries.Add(lightTheme);
}private void SwitchToDarkTheme()
{ResourceDictionary darkTheme = new ResourceDictionary();darkTheme.Source = new Uri("DarkTheme.xaml", UriKind.Relative);Application.Current.Resources.MergedDictionaries.Clear();Application.Current.Resources.MergedDictionaries.Add(darkTheme);
}
相关文章:
WPF 与 C# 融合开发:从基础到高级应用(一)
WPF 与 C# 融合开发:从基础到高级应用 一、C# 语言基础回顾 1.1 C# 语言概述 C# 是微软开发的一种现代、面向对象的编程语言,它融合了 C、C 和 Java 等语言的优点,具有简洁、安全、高效等特点。C# 广泛应用于 Windows 平台的应用开发&…...
ref和reactive区别
在 Vue 3 中,ref 和 reactive 是两种创建响应式数据的主要 API,但它们的适用场景和使用方式有所不同。以下是它们的核心区别和示例: 一、核心区别 特性refreactive适用数据类型所有类型(基本类型、对象、数组)仅对象或…...
精选10个好用的WordPress免费主题
10个好用的WordPress免费主题 1. Astra Astra 是全球最受欢迎的 WordPress 主题。它功能丰富,易于使用,SEO友好,是第一个安装量突破100万的非默认主题,并获得了5000多个五星好评。 它完美集成了Elementor、Beaver,古…...
DerpNStink: 1靶场渗透
DerpNStink: 1 来自 <DerpNStink: 1 ~ VulnHub> 1,将两台虚拟机网络连接都改为NAT模式 2,攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182,靶场IP192.168.23.213 3,对靶机进行端…...
apache安装脚本使用shell建立
注意防火墙,yum,网络连接等 以下是具体的apache安装脚本 #!/bin/bash # Set Apache version to install ## author: yuan # 检查外网连接 echo "检查外网连接..." ping www.baidu.com -c 3 > /dev/null 2>&1 if [ $? -eq 0 ]; …...
Azure SDK 使用指南
Azure SDK(软件开发工具包)是一组由微软提供的工具和库,旨在帮助开发者以多种编程语言(如 .NET、Java、Python、JavaScript 等)与 Azure 服务进行交互。 通过使用 Azure SDK,开发者可以更高效地构建、部…...
DeepSeek-V3-0324 版本升级概要
DeepSeek-V3-0324 魔搭社区汇聚各领域最先进的机器学习模型,提供模型探索体验、推理、训练、部署和应用的一站式服务。https://modelscope.cn/models/deepseek-ai/DeepSeek-V3-0324 发布背景与改进 根DeepSeek-V3-0324 展示了以下关键改进: 推理性能提…...
leetcode 150. 逆波兰表达式求值
150. 逆波兰表达式求值 - 力扣(LeetCode) class Solution:def evalRPN(self, tokens: List[str]) -> int:stack[]for item in tokens:if item not in ( ,-,* , / ):stack.append(item)else:preint(stack.pop())pre_beforeint(stack.pop())sign itemi…...
LangChain4j与DashScope深度集成实战:一站式开发指南
本篇文章会通篇详细的讲清楚LangChain4j与DashScope集成的各个方面,从Springboot的集成到Ai对话、会话记忆、RAG、FunctionCalling、互联网搜索、结构化的输出、多模态等都给出相应的说明,希望通过这篇文章对于LLM不了解的同仁一样可以扩展出自己的AI应用…...
逼用户升级Win11,微软开始给Win10限速
随着Windows10的支持时间越来越短,微软也加大了对Win10用户的驱赶力度。 最近,微软官宣了将要在今年6月份降低OneNote for Windows 10的同步速度。软件也将和Windows10在今年的10月14日一同停止支持和维护。 这将影响实时协作和多设备访问。 对OneNote…...
工作流引擎Flowable介绍及SpringBoot整合使用实例
Flowable简介 Flowable 是一个轻量级的业务流程管理(BPM)和工作流引擎,基于 Activiti 项目发展而来,专注于提供高性能、可扩展的工作流解决方案。它主要用于企业级应用中的流程自动化、任务管理和审批流等场景。 Flowable 的核心…...
推荐一个可以自定义github主页的网站
一、简介 Profile Readme Generator 是一个开源工具,可以帮助你快速创建个性化的 GitHub 个人简介(README)。它支持自定义内容和样式,让你的 GitHub 个人主页更加美观和专业。 二、使用步骤 (一)访问网站…...
【R语言可视化】相关系数热图
目录 热图无显著性 结果展示01: 热图显著性 结果展示02: ggplot2绘制三角热图 结果展示03: corrplot绘制三角热图 结果展示04: 热图无显著性 # 示例数据 data(mtcars) df <- mtcars# 计算相关矩阵 cor_matrix <- round(cor(df…...
【区块链 + 文化版权】文创链 | FISCO BCOS 应用案例
“文创链”是由四川省区块链行业协会、成都音像出版社有限公司共同发起, 由成都九天星空科技有限公司等联合打造的数字文创领域联盟链。平台采用FISCO BCOS 开源底层框架, 为数字文创产业构建一个高效、透明、可信的版权管理与交易平台。 平台专注于数字…...
# 使用自定义Shell脚本hello快速配置Linux用户账户
使用自定义Shell脚本快速配置Linux用户账户 在学校实验室管理Linux服务器,或者公司小团队管理服务器时,大家需要一个能隔离自己服务,但是自己又需要对服务器的完整权限的情形。创建和配置用户账户是一项常见但繁琐的任务。特别是当你需要频繁…...
PyTorch中的Tensor
PyTorch中的Tensor 是核心数据结构,类似于 NumPy 的多维数组,但具备 GPU 加速和自动求导等深度学习特性。 一、基本概念 核心数据结构 Tensor 是存储和操作数据的基础单元,支持标量(0D)、向量(1D&am…...
16-CSS3新增选择器
知识目标 掌握属性选择器的使用掌握关系选择器的使用掌握结构化伪类选择器的使用掌握伪元素选择器的使用 如何减少文档内class属性和id属性的定义,使文档变得更加简洁? 可以通过属性选择器、关系选择器、结构化伪类选择器、伪元素选择器。 1. 属性选择…...
关于笔记本电脑突然没有wifi图标解决方案
笔记本电脑突然没有wifi图标解决方案,设置里也看不见wifi,电脑突然就连不网络了 解决方案: 我的电脑——>管理——>服务和应用程序——>服务——>找到WLAN AutoConfig——>点击启动就好了...
Pytorch学习笔记(七)Learn the Basics - Optimizing Model Parameters
这篇博客瞄准的是 pytorch 官方教程中 Learn the Basics 章节的 Optimizing Model Parameters 部分。 官网链接:https://pytorch.org/tutorials/beginner/basics/optimization_tutorial.html 完整网盘链接: https://pan.baidu.com/s/1L9PVZ-KRDGVER-AJnXOvlQ?pwd…...
数据可视化TensorboardX和tensorBoard安装及使用
tensorBoard 和TensorboardX 安装及使用指南 tensorBoard 和 TensorBoardX 是用于可视化机器学习实验和模型训练过程的工具。TensorBoard 是 TensorFlow 官方提供的可视化工具,而 TensorBoardX 是其社区驱动的替代品,支持 PyTorch 等其他框架。以下是它…...
工业4G路由器赋能智慧停车场高效管理
工业4G路由器作为智慧停车场管理系统通信核心,将停车场内的各个子系统连接起来,包括车牌识别系统、道闸控制系统、车位检测系统、收费系统以及监控系统等。通过4G网络,将这些系统采集到的数据传输到云端服务器或管理中心,实现信息…...
深度学习1—Python基础
深度学习1—python基础 你的第一个程序 print(hello world and hello deep learning!)基本数据结构 空值 (None):在 Python 中,None 是一个特殊的对象,用于表示空值或缺失的值。它不同于数字 0,因为 0 是一个有意义的数字&#…...
数据结构十三、set map
一、set 1、size / empty size:返回set中实际元素的个数 empty:判断set是否为空 2、begin / end 这是两个迭代器,因此可以使用范围for来遍历整个红黑树。其中,遍历是按照中序遍历的顺序,因此是一个有序序列。 3、in…...
【大模型基础_毛玉仁】3.5 Prompt相关应用
目录 3.5 相关应用3.5.1 基于大语言模型的Agent3.5.2 数据合成3.5.3 Text-to-SQL3.5.4 GPTs 3.5 相关应用 Prompt工程应用广泛,能提升大语言模型处理基础及复杂任务的能力,在构建Agent、数据合成、Text-to-SQL转换和设计个性化GPTs等方面不可或缺。 . …...
自动驾驶VLA模型技术解析与模型设计
1.前言 2025年被称为“VLA上车元年”,以视觉语言动作模型(Vision-Language-Action Model, VLA)为核心的技术范式正在重塑智能驾驶行业。VLA不仅融合了视觉语言模型(VLM)的感知能力和端到端模型的决策能力,…...
【AI】Orin NX+ubuntu22.04上移植YoloV11,并使用DeepStream测试成功
【AI】郭老二博文之:AI学习目录汇总 1、烧写系统 新到的开发板,已经烧写好Ubuntu系统,版本为22.04。 如果没有升级到Ubuntu22.04,可以在电脑Ubuntu系统中使用SDKManager来烧写Ubuntu系统,网络情况好的话,也可以直接将CUDA、cuDNN、TensorRT、Deepstream等也安装上。 2…...
vscode 通过Remote-ssh远程连接服务器报错 could not establish connection to ubuntu
vscode 通过Remote-ssh插件远程连接服务器报错 could not establish connection to ubuntu,并且出现下面的错误打印: [21:00:57.307] Log Level: 2 [21:00:57.350] SSH Resolver called for "ssh-remoteubuntu", attempt 1 [21:00:57.359] r…...
ESP32S3 WIFI 实现TCP服务器和静态IP
一、 TCP服务器代码 代码由station_example_main的官方例程修改 /* WiFi station ExampleThis example code is in the Public Domain (or CC0 licensed, at your option.)Unless required by applicable law or agreed to in writing, thissoftware is distributed on an &q…...
第三课:Stable Diffusion图生图入门及应用
文章目录 Part01 图生图原理Part02 图生图基本流程Part03 随机种子作用解析Part04 图生图的拓展应用 Part01 图生图原理 当提示词不能足够表达用户需求的时候,加入图片能让AI更好的理解你的想法图片上的像素信息会在加噪和去噪的过程中,作为一种特征反映…...
蓝桥与力扣刷题(蓝桥 蓝桥骑士)
题目:小明是蓝桥王国的骑士,他喜欢不断突破自我。 这天蓝桥国王给他安排了 N 个对手,他们的战力值分别为 a1,a2,...,an,且按顺序阻挡在小明的前方。对于这些对手小明可以选择挑战,也可以选择避战。 身为高傲的骑士&a…...
Photoshop怎样保存为ico格式
1. 打开图像 开启 Photoshop 软件,选择 “文件” 菜单,点击 “打开” 选项,然后找到你想要保存为 ICO 格式的图像文件并打开。 2. 调整图像大小(可选) ICO 图标通常有特定尺寸要求,你可以根据需求调整图像…...
Ubuntu xinference部署本地模型bge-large-zh-v1.5、bge-reranker-v2-m3
bge-large-zh-v1.5 下载模型到指定路径: modelscope download --model BAAI/bge-large-zh-v1.5 --local_dir ./bge-large-zh-v1.5自定义 embedding 模型,custom-bge-large-zh-v1.5.json: {"model_name": "custom-bge-large…...
python笔记之判断月份有多少天
1、通过随机数作为目标月份 import random month random.randint(1,12)2、判断对应的年份是闰年还是平年 因为2月这个特殊月份,闰年有29天,而平年是28天,所以需要判断对应的年份属于闰年还是平年,代码如下 # 判断年份是闰年还…...
Kotlin泛型: 协变|逆变|不变
引言 无论java 通配符上限还是下限,都多少存在缺陷,要么存不安全,要么取不安全。而kotlin就解决这个问题。让out 纯输出, 让in纯输入。 java这块知识: java泛型的协变、逆变和不变-CSDN博客 协变 生产者out T 协变…...
高斯数据库的空分区的查看和清理
在 高斯数据库(GaussDB) 中,分区表是一种常见的表设计方式,用于优化大数据的查询性能。 一、空分区的影响: 存储空间占用 元数据开销:即使分区中没有数据,数据库仍然需要维护分区的元数据&…...
word使用自带的公式
文章目录 Word公式中word公式快捷键:word2016公式框输入多行word 公式加入空格:word公式如何输入矩阵:公式图片转为Latex语法word 能直接输入 latex 公式么word公式中有的是斜体有的不是 word文本中将文字转为上标的快捷键 Tips几个好用的网站࿱…...
Linux系统-ls命令
一、ls命令的定义 Linux ls命令(英文全拼:list directory contents)用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。 二、ls命令的语法 ls [选项] [目录或文件名] ls [-alrtAFR] [name...] 三、参数[选项…...
数据结构:利用递推式计算next表
next 表是 KMP 算法的核心内容,下面介绍一种计算 next 表的方法:利用递推式计算 如图 6.3.1 所示,在某一趟匹配中,当对比到最后一个字符的时候,发现匹配失败(s[i] ≠ t[j])。根据 BF 算法&…...
Git操作
1 git init 项目初始化(init)成仓库 2、git add 管理文件 3、git commit -m <message> 告诉Git,把文件提交到仓库 4、git status 查看当前管理文件的状态,命令 5、git log 查看提交(commit)的…...
什么是快重传
原理: 在TCP连接中,接受方会对收到的数据包发送确认(ACK)。如果接受方收到一个乱序的数据包(即期望的下一个数据包尚未到达),它会重复发送对上一个已成功接受的数据包的确认。 当发送方连续收…...
计算机网络——物理层设备
目录 编辑 中继器 集线器(Hub) 集线器,中继器的一些特性 集线器和中继器不能“无限串联” 集线器连接的网络,物理上是星型拓扑,逻辑上是总线型拓扑 集线器连接的各网段会“共享带宽” 中继器 如果我们想要网络…...
CSS 预处理器
在面试中回答关于 CSS 预处理器的问题时,你可以从以下几个方面进行回答,展示你的知识深度和实践经验: 1. 什么是 CSS 预处理器? 你可以从定义和目的入手: “CSS 预处理器是一种扩展 CSS 功能的工具,它允许…...
解锁智能制造新体验:兰亭妙微 UE/UI 设计赋能行业变革
在智能制造时代的滚滚浪潮中,企业的数字化转型不仅是技术的革新,更是用户体验与交互界面的全面升级。然而,许多制造企业在这一转型过程中,面临着一系列 UI/UE 设计难题,严重阻碍了企业的数字化发展进程。兰亭妙微凭借专…...
计算机网络高频(三)UDP基础
计算机网络高频(三)UDP基础 1.UDP的头部格式是什么样的?⭐ UDP 头部具有以下字段: 源端口(Source Port):16 位字段,表示发送方的端口号。目标端口(Destination Port):16 位字段,表示接收方的端口号。长度(Length):16 位字段,表示 UDP 数据报(包括头部和数据部…...
Oracle数据库服务器地址变更与监听配置修改完整指南
一、前言 在企业IT运维中,Oracle数据库服务器地址变更是常见的运维操作。本文将详细介绍如何安全、高效地完成Oracle数据库服务器地址变更及相关的监听配置修改工作,确保数据库服务在迁移后能够正常运行。 二、准备工作 1. 环境检查 确认新旧服务器I…...
获取1688.item_password接口:解析淘口令真实URL
一、接口介绍 1688的item_password接口主要用于将1688平台的淘口令短链接转换为实际商品链接。它基于1688平台的后台数据和规则,对用户传入的淘口令进行解析和验证,通过相应的算法和数据匹配,找到对应的商品信息,并生成可直接访问…...
计算机网络的分类及其性能指标
一. 计算机网络的分类 1. 按分布范围分类 广域网(WAN) 也称远程网。广域网提供长距离通信,通常是几十千米到几千千米的区域,比如跨国通信。连接广域网的各结点交换机的链路一般是高速链路,具有较大的通信容量城域网&…...
Redis原理:watch命令
在前面的文章中有提到,在multi 前可以通过watch 来观察哪些key,被观察的这些key,会被redis服务器监控,涉及该key被修改时,则在exec 命令执行过程中会被识别出来,exec 就不会再执行命令。 源码分析 // 监控…...
微服务中的服务发现与注册中心
在微服务架构中,服务实例的数量可能随着流量负载自动扩展或缩减,因此服务之间如何高效地进行通信成为一个重要问题。本篇博客将介绍服务发现的概念,并结合 Consul 和 自定义注册中心 进行实践,帮助开发者在微服务架构下高效管理服…...
Flutter网络请求封装:高效、灵活、易用的Dio工具类
在Flutter开发中,网络请求是必不可少的功能。为了简化代码、提高开发效率,我们通常会封装一个网络请求工具类。本文基于Dio库,详细介绍如何封装一个高效、灵活、易用的网络请求工具类,支持以下功能: 单例模式…...