如何学习 WPF 详细教程

news2024/11/29 12:44:12

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:WPF 案例及知识分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:如何学习 WPF 详细教程

文章目录

    • 一、WPF 技术介绍
    • 二、学习前的准备工作
    • 三、学习时的具体操作
    • 四、如何巩固学习
    • 五、WPF 知识总结
      • 1、C# 编程语言
      • 2、XAML 标记语言
      • 3、数据绑定
      • 5、动画和转换

在这里插入图片描述

  无论是初学者还是有经验的专业人士,在学习一门新的IT技术时,都需要采取一种系统性的学习方法。那么作为一名技术er,你是如何系统的学习it技术的呢。下面就以WPF的学习进行阐述。

一、WPF 技术介绍

WPF(Windows Presentation Foundation)是微软推出的一种基于.NET Framework的用户界面框架,用于创建富客户端应用程序。WPF提供了丰富的控件库、强大的数据绑定功能、灵活的布局方式、高效的渲染引擎等特性,可以帮助开发人员快速构建现代化的用户界面。

WPF的主要特点包括:

  • XAMLWPF使用XAML(eXtensible Application Markup Language)作为用户界面的标记语言,可以将界面和应用程序的行为分离,提高了开发效率和可维护性。

  • 控件库WPF提供了丰富的控件库,包括基本控件、布局控件、数据绑定控件等,可以满足各种用户界面的需求。

  • 数据绑定WPF提供了强大的数据绑定功能,可以将数据与界面元素进行绑定,实现数据的自动更新,提高了应用程序的灵活性和可扩展性。

  • 布局方式WPF提供了多种灵活的布局方式,包括栅格布局、堆栈布局、流式布局等,可以满足不同用户界面的布局需求。

  • 动画和转换WPF提供了丰富的动画和转换功能,可以实现各种炫酷的效果,提高了用户界面的交互性和视觉效果。

  • 渲染引擎WPF使用DirectX作为渲染引擎,可以实现高效的图形渲染和动画效果。

二、学习前的准备工作

学习WPF技术前,需要进行以下准备工作:

  • 学习目标和计划:明确学习WPF技术的目标和计划,制定学习计划,包括学习时间、学习内容、学习方法等。

  • 学习工具:准备好学习WPF技术所需的工具,包括开发环境、编辑器、调试器等。常用的开发环境包括Visual Studio、Expression Blend等。

  • 资料:收集相关的学习资料,包括书籍、视频教程、在线文档等。可以通过搜索引擎、在线教育平台等途径获取。

  • 实践操作:通过实践操作来巩固所学知识,可以自己编写小程序、参加开源项目等方式进行实践。

在学习WPF技术时,需要注意以下几点:

  • 系统学习:WPF技术涉及多个方面,需要系统学习,不能只学习其中的某个方面。

  • 实践操作:WPF技术需要通过实践操作来巩固所学知识,不能只停留在理论层面。

  • 多方面获取资料:可以通过多种途径获取学习资料,包括书籍、视频教程、在线文档等。

  • 不断更新知识:WPF技术在不断更新和发展,需要不断更新自己的知识,跟上技术的发展趋势。

三、学习时的具体操作

学习WPF需要建立基础知识、实际操作,并进行整理和总结。具体步骤如下:

  • 建立基础知识:学习WPF需要掌握C#编程语言、XAML标记语言、WPF控件、数据绑定、动画和转换等基础知识。可以通过阅读相关书籍、观看视频教程、参加培训班等方式进行学习。

  • 实际操作:学习WPF需要进行实际操作,通过编写小程序、参加开源项目等方式进行实践。可以利用Visual Studio等开发工具进行实际操作,加深对WPF技术的理解和掌握。

  • 整理和总结:学习WPF需要进行整理和总结,将所学知识进行归纳和总结,形成自己的知识体系。可以通过笔记、博客等方式进行整理和总结,方便日后查阅和复习。

四、如何巩固学习

学习WPF时,可以通过以下方式形成更系统和清晰的知识体系并进行回顾:

  • 制定学习计划:在学习WPF之前,可以制定一个详细的学习计划,包括学习的内容、时间、方式等。这样可以帮助自己更好地掌握知识,形成更系统和清晰的知识体系。

  • 学习笔记:在学习WPF的过程中,可以记录下自己的学习笔记,包括重点、难点、解决方法等。这样可以帮助自己更好地理解和掌握知识,形成更系统和清晰的知识体系。

  • 实践操作:在学习WPF的过程中,可以进行实践操作,通过编写小程序、参加开源项目等方式进行实践。这样可以帮助自己更好地掌握知识,形成更系统和清晰的知识体系。

  • 总结归纳:在学习WPF的过程中,可以不断地总结和归纳所学知识,形成自己的知识体系。可以通过笔记、博客等方式进行总结和归纳,方便日后查阅和复习。

  • 回顾复习:在学习WPF之后,可以不断地回顾和复习所学知识,巩固自己的知识体系。可以通过阅读笔记、重新编写小程序等方式进行回顾和复习。

五、WPF 知识总结

1、C# 编程语言

  WPF是基于C#编程语言的,C#是一种面向对象的编程语言,由微软公司开发。它的语法类似于C++和Java,但也有一些独特的特性。以下是C#的基础知识:

  • 语法:C#的语法与C++和Java类似,使用分号作为语句结束符,使用花括号表示代码块。C#中的注释可以使用//或/* */。

  • 数据类型:C#支持多种数据类型,包括整数、浮点数、布尔值、字符和字符串等。其中,整数类型包括byte、short、int、long等,浮点数类型包括float和double,布尔值类型为bool,字符类型为char,字符串类型为string。

  • 变量:在C#中,变量必须先声明后使用。变量的声明格式为:数据类型 变量名;变量的赋值格式为:变量名 = 值;

  • 控制流:C#支持if语句、switch语句、while循环、for循环等控制流结构。其中,if语句用于条件判断,switch语句用于多条件判断,while循环和for循环用于循环执行代码块。

代码示例:

声明和赋值变量:

int age;
age = 18;

使用if语句进行条件判断:

int score = 80;
if (score >= 60)
{
    Console.WriteLine("及格了");
}
else
{
    Console.WriteLine("不及格");
}

使用switch语句进行多条件判断:

int day = 3;
switch (day)
{
    case 1:
        Console.WriteLine("星期一");
        break;
    case 2:
        Console.WriteLine("星期二");
        break;
    case 3:
        Console.WriteLine("星期三");
        break;
    default:
        Console.WriteLine("未知");
        break;
}

使用while循环进行循环执行代码块:

int i = 1;
while (i <= 10)
{
    Console.WriteLine(i);
    i++;
}

使用for循环进行循环执行代码块:

int sum = 0;
for (int i = 1; i <= 10; i++)
{
    sum += i;
}
Console.WriteLine("1到10的和为:" + sum);

2、XAML 标记语言

  XAML是WPF的标记语言,用于定义用户界面和应用程序的行为。XAML是一种用于创建用户界面的标记语言,它是Microsoft的WPF、Silverlight和UWP应用程序的核心技术之一。需要学习XAML的基础语法、布局、控件等。

& 基础语法

  XAML的基础语法类似于HTML和XML,它使用标签和属性来描述用户界面元素。以下是一个简单的XAML示例:

<Grid>
    <TextBlock Text="Hello, World!" />
</Grid>

  在这个示例中,和是XAML标签,Text是标签的属性,它的值是"Hello, World!"。

& 布局

  XAML中的布局类似于HTML和CSS中的布局,它使用容器元素来组织和排列其他元素。以下是一些常用的XAML容器元素:

Grid(网格):用于将控件放置在一个网格中。
StackPanel(堆栈面板):用于将控件按照水平或垂直方向堆叠。
WrapPanel(换行面板):用于将控件按照水平或垂直方向排列,并在需要时换行。
DockPanel(停靠面板):用于将控件停靠在容器的边缘或中心。
Canvas(画布):用于在一个自由布局的区域内放置控件。

  以下是一个使用布局的XAML示例:

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <TextBlock Text="Header" />
    <TextBlock Grid.Row="1" Text="Content" />
</Grid>

  在这个示例中,有两个行,第一行的高度是自适应的,第二行的高度是剩余空间的百分比。元素分别放置在第一行和第二行。

& 控件

  XAML中的控件类似于HTML中的表单元素,它们用于接收用户输入或显示信息。以下是一些常用的XAML控件:

Button(按钮):用于触发操作或执行命令。
TextBox(文本框):用于输入和显示文本。
Label(标签):用于显示文本或图像。
ComboBox(组合框):用于从下拉列表中选择一个选项。
ListBox(列表框):用于显示一个列表,并允许用户选择一个或多个项。
RadioButton(单选按钮):用于从一组选项中选择一个。
CheckBox(复选框):用于从一组选项中选择多个。
DatePicker(日期选择器):用于选择日期。
Slider(滑块):用于选择一个值在一个范围内。
ProgressBar(进度条):用于显示操作的进度。

  以下是一个使用和控件的XAML示例:

<StackPanel>
    <TextBox x:Name="InputBox" />
    <Button Content="Submit" Click="SubmitButton_Click" />
</StackPanel>

  在这个示例中,用于接收用户输入,用于触发操作。当用户点击时,会触发SubmitButton_Click事件处理程序。

3、数据绑定

  WPF提供了强大的数据绑定功能,可以将数据与界面元素进行绑定,实现数据的自动更新。需要学习数据绑定的基本概念、绑定方式、数据源等。

Binding(绑定):用于将控件与数据源绑定。

  在 XAML 中,我们可以使用 Binding 标记来指定数据源和属性:

<TextBlock Text="{Binding Name}" />

  这个 TextBlock 控件的 Text 属性被绑定到了数据源的 Name 属性。当数据源的 Name 属性发生变化时,TextBlock 的 Text 属性也会自动更新。

  在代码中,我们需要将数据源对象设置为控件的 DataContext 属性:

Person person = new Person { Name = "John" };
this.DataContext = person;

  这样,我们就可以在 XAML 中使用 Binding 来绑定数据源和控件了。

  除了简单的属性绑定,Binding 还支持复杂的数据转换、格式化和验证。例如,我们可以使用 Converter 属性来指定一个转换器,将数据源的值转换为控件需要的格式:

<TextBlock Text="{Binding Age, Converter={StaticResource AgeConverter}}" />

  这个 TextBlock 控件的 Text 属性被绑定到了数据源的 Age 属性,并使用了一个名为 AgeConverter 的转换器,将 Age 属性的值转换为一个字符串。

DataContext(数据上下文):用于指定数据源。

  在 XAML 中,我们可以使用 DataContext 属性来指定数据源:

<Grid DataContext="{Binding Person}">
	<TextBlock Text="{Binding Name}" />
	<TextBlock Text="{Binding Age}" />
</Grid>

  这个 Grid 控件的 DataContext 属性被绑定到了一个名为 Person 的数据源。在 Grid 内部,我们可以使用 Binding 来绑定 TextBlock 的 Text 属性到数据源的 Name 和 Age 属性。

  在代码中,我们需要创建一个 Person 对象,并将其设置为 Grid 的 DataContext 属性:

Person person = new Person { Name = "John", Age = 30 };
this.DataContext = person;

  这样,我们就可以在 XAML 中使用 Binding 来绑定数据源和控件了。

  除了在控件内部使用 DataContext,我们还可以在整个窗口或应用程序中设置一个全局的 DataContext。例如,在窗口的构造函数中,我们可以设置窗口的 DataContext 属性:

public MainWindow()
{
	InitializeComponent();
	this.DataContext = new ViewModel();
}

  这个 ViewModel 对象将成为整个窗口的数据源,我们可以在窗口内部的任何控件中使用 Binding 来绑定数据源和控件。

ItemsSource(项源):用于指定数据源中的项。

  以下是一个简单的WPF代码示例,演示如何使用ItemsSource属性绑定数据到ListBox控件:

XAML代码:

<ListBox ItemsSource="{Binding MyItems}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding}" />
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

C#代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new MyViewModel();
    }
}

public class MyViewModel
{
    public ObservableCollection<string> MyItems { get; set; }

    public MyViewModel()
    {
        MyItems = new ObservableCollection<string>();
        MyItems.Add("Item 1");
        MyItems.Add("Item 2");
        MyItems.Add("Item 3");
    }
}

  这个示例中,我们创建了一个名为MyViewModel的类,其中包含一个名为MyItems的ObservableCollection属性。在MainWindow的构造函数中,我们将DataContext设置为一个新的MyViewModel实例。在XAML中,我们使用ItemsSource属性将ListBox绑定到MyItems属性,并使用DataTemplate定义每个列表项的外观。

DataTemplate(数据模板):用于定义数据项的显示方式。

  以下是一个简单的WPF代码示例,演示如何使用DataTemplate定义ListBox控件中每个列表项的外观:

XAML代码:

<ListBox ItemsSource="{Binding MyItems}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <Image Source="{Binding ImageUrl}" Width="50" Height="50" />
                <TextBlock Text="{Binding Title}" Margin="10,0,0,0" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

C#代码:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new MyViewModel();
    }
}

public class MyViewModel
{
    public ObservableCollection<MyItem> MyItems { get; set; }

    public MyViewModel()
    {
        MyItems = new ObservableCollection<MyItem>();
        MyItems.Add(new MyItem { ImageUrl = "image1.png", Title = "Item 1" });
        MyItems.Add(new MyItem { ImageUrl = "image2.png", Title = "Item 2" });
        MyItems.Add(new MyItem { ImageUrl = "image3.png", Title = "Item 3" });
    }
}

public class MyItem
{
    public string ImageUrl { get; set; }
    public string Title { get; set; }
}

  这个示例中,我们创建了一个名为MyViewModel的类,其中包含一个名为MyItems的ObservableCollection属性,其中包含三个MyItem对象。在MainWindow的构造函数中,我们将DataContext设置为一个新的MyViewModel实例。在XAML中,我们使用DataTemplate定义每个列表项的外观,包括一个Image和一个TextBlock。我们使用Binding将Image的Source属性和TextBlock的Text属性绑定到MyItem对象的ImageUrl和Title属性。

5、动画和转换

  WPF动画和转换是WPF中非常重要的概念,可以用来改变控件的外观和行为。动画可以让控件在一段时间内平滑地改变属性值,而转换可以对控件进行变形、旋转、缩放等操作。

  在WPF中,动画和转换都是通过Storyboard来实现的。Storyboard是一个包含多个动画和转换的集合,可以通过BeginStoryboard来启动它。动画和转换都可以通过Storyboard.TargetProperty来指定目标属性,从而改变控件的外观和行为。

  WPF中提供了多种类型的动画和转换,包括ColorAnimation、DoubleAnimation、EasingFunction、RotateTransform等。每种动画和转换都有不同的属性和方法,可以根据需要进行选择和使用。

在使用动画和转换时,需要注意以下几点:

  • 控件必须支持动画和转换,例如支持依赖属性的控件。

  • 动画和转换的目标属性必须是依赖属性,否则无法进行动画和转换。

  • 动画和转换的时间、速度、缓动函数等属性需要根据实际情况进行调整,以达到最佳效果。

  • 动画和转换可以通过代码或XAML来实现,具体选择取决于个人喜好和项目需求。

以下是一个简单的WPF代码示例,演示如何使用动画和转换来改变控件的外观:

XAML代码:

<Button Content="Click Me">
    <Button.Style>
        <Style TargetType="Button">
            <Setter Property="Background" Value="Red" />
            <Style.Triggers>
                <EventTrigger RoutedEvent="Button.Click">
                    <BeginStoryboard>
                        <Storyboard>
                            <ColorAnimation Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)"
                                            To="Green" Duration="0:0:1" />
                            <DoubleAnimation Storyboard.TargetProperty="(Button.Width)"
                                             To="200" Duration="0:0:1">
                                <DoubleAnimation.EasingFunction>
                                    <ElasticEase EasingMode="EaseOut" Oscillations="2" Springiness="10" />
                                </DoubleAnimation.EasingFunction>
                            </DoubleAnimation>
                        </Storyboard>
                    </BeginStoryboard>
                </EventTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

  这个示例中,我们创建了一个Button控件,并定义了一个Style来设置其初始背景颜色为红色。在Style的Triggers中,我们定义了一个EventTrigger,当Button被点击时触发。在EventTrigger中,我们使用BeginStoryboard来启动一个Storyboard,其中包含两个动画:一个ColorAnimation来改变Button的背景颜色,一个DoubleAnimation来改变Button的宽度。在DoubleAnimation中,我们使用ElasticEase来定义一个弹性效果,使动画更加生动。


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597400.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SPI通信以及与W2Q564(ROM)交换(读写)数据

一.SPI协议简介 SPI 协议是由摩托罗拉公司提出的通讯协议(Serial Peripheral Interface)&#xff0c;即串行外围设备接口&#xff0c;允许芯片与外部设备以全双工、同步、串行方式通信。此接口可以被配置成主模式&#xff0c;并为外部从设备提供通信时钟(SCK)。接口还能以多主配…

uniapp(一) 之 小程序与uniapp 基础

uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;开发者编写一套代码&#xff0c;可发布到 i OS 、 Android 、 Web &#xff08; 响应式&#xff09;、 以及各种小程序&#xff08;微信 / 支付宝 / 百度 / 头条 / 飞书 /QQ/ 快手 / 钉 钉 / 淘宝&#xff09;、 …

工程测量仪器:工程安全的保障者

工程仪器是现代工程建设中必不可少的工具&#xff0c;它们可以帮助企业对工程进行监控和管理&#xff0c;从而提高工程运行效率和安全性。在当前的工程建设领域&#xff0c;安全运营已成为企业的首要任务&#xff0c;而工程仪器正是实现这个目标的重要保障之一。 渗压计广泛应用…

数据(浮点数)在内存中的存储(2)

目录 浮点数家族 浮点数类型在内存中的存储 一.为什么说整型和浮点数在内存中存储方式不同&#xff08;证明&#xff09; 二.浮点数的存储规则 浮点数在计算机内部的表示方法 1.对于M的存储和取出规则 2.对于E的存储和取出时的规则 对前面代码结果进行解释&#xff1a; …

tinkerCAD基础操作

放大尺寸&#xff01; 让我们通过调整大小来更改基本框形状&#xff01; 说明 继续执行下一步。 扩展每个块 每个“框”形状的大小都与提示匹配。 说明 通过左键单击形状来选择一个框。 这将启用形状控点。 使用每个形状底部边缘的黑色手柄在单个方向上调整形状的大小。 使…

nginx+keepalive高可用搭建方案

一、什么是nginx有什么作用 nginx是一款使用非常广泛的Web服务器&#xff0c;它可以提供高性能和可扩展性。它是由Google开发的&#xff0c;并且是Apache HTTP Server的替代品。 以下是一些nginx的主要特点&#xff1a; 轻量级&#xff1a;nginx比Apache轻量级&#xff0c;它…

ChatGPT与软件架构(1) - 快速原型

通过ChatGPT生成设计和原型代码&#xff0c;可以帮助团队快速启动项目&#xff0c;验证想法&#xff0c;提高效率。原文: ChatGPT and Software Architecture Surfing Croyde Bay Unsplash OpenAI的ChatGPT现在越来越火&#xff0c;出现了各种有趣用例。 从许多方面来看&#x…

为何溃坝事故频发,大坝安全如何保障?

随着水利水电工程的重要性日益突显&#xff0c;水库大坝安全越来越受到相关部门的重视。因为大坝的安全直接影响水利工程的功能与作用&#xff0c;因此对大坝安全的监测显得十分必要。大坝安全监测的作用是能够及时掌握大坝的运行状态&#xff0c;及时发现大坝的变形、渗漏等异…

DB-GPT数据库GPT,支持本地部署,可以在私有环境中运行!!

DB-GPT 是什么&#xff1f; 随着大模型的发布迭代&#xff0c;大模型变得越来越智能&#xff0c;在使用大模型的过程当中&#xff0c;遇到极大的数据安全与隐私挑战。在利用大模型能力的过程中我们的私密数据跟环境需要掌握自己的手里&#xff0c;完全可控&#xff0c;避免任何…

PCB钥匙串 diy

制作目标&#xff1a;type-c供电的可触摸调光LED钥匙链。 初步设计方案&#xff1a; 芯片采用触摸调光芯片&#xff0c;用于LED灯光亮度调节及开关控制的单通道触摸芯片。使用该芯片可以实现LED灯光的触摸开关控制和亮度调节。具有如下功能特点和优势&#xff1a;灯光亮度可根…

Redis+Caffeine两级缓存

1、前言 在高性能的服务架构设计中&#xff0c;缓存是一个不可或缺的环节。在实际的项目中&#xff0c;我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中&#xff0c;只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时&#xff0c;也能降低数据库的…

Sui生态域名服务SuiNS正式开放域名竞拍

Sui Name Service&#xff08;SuiNSSui Name Service&#xff08;是Sui推出的开放且分布式域名服务。SuiNS使用户可以竞拍以.sui结尾的专属域名&#xff0c;以建立链上身份。 在上线之际&#xff0c;SuiNS推出实时竞拍&#xff0c;为用户提供公平获取Sui生态专属域名的机会。若…

YUM在线升级功能

文章目录 YUM在线升级功能利用YUM进行查询、安装、升级与删除功能查询功能使用案例 安装/升级功能删除功能 YUM的配置文件修改软件源产生的问题与解决之道使用案例 YUM的软件群组功能使用案例 全系统自动升级 管理的抉择&#xff1a;RPM还是Tarball基础服务案例&#xff1a;以A…

E8-怎么监听表单里的日期控件被修改过

起因 业务部门每周六例会&#xff0c;业务部门请假的&#xff0c;如果包含星期六&#xff0c;需要老板审批。 我思路是当开始日期或结束日期被修改时&#xff0c;判断请假日期中是否包括周六&#xff0c;根据是束包含周六&#xff0c;去设置某个控件的值&#xff0c;后续步骤…

【Zero to One系列】springcloud微服务集成nacos,形成分布式系统

前期回顾&#xff1a; 【Zero to One系列】在WSL linux系统上&#xff0c;使用docker运行Mysql与Nacos 1、Nacos配置设置 先在nacos创建命名空间&#xff0c;如下图操作&#xff1a; 创建完成后&#xff0c;服务列表和配置列表&#xff0c;就都会出现如图的tab&#xff1a; 然…

南京邮电大学电工电子基础B实验八(译码与动态显示电路)

文章目录 一、 实验目的二、 主要仪器设备及软件三、 实验原理四、 实验任务与设计过程实验任务&#xff1a;设计过程&#xff1a; 五、 实验步骤与仿真结果1&#xff0e;用BCD七段显示译码器显示本人学号的后四位&#xff08;0709&#xff09;2&#xff0e;用BCD七段显示译码器…

API电商 ERP 数据管理

没有 API&#xff0c;应用之间的通信将会被扼杀&#xff1b;软件开发者将不断重写并执行相同功能的软件&#xff1b;创新的脚步将会放缓。 API 随处可见。大到一个软件系统&#xff0c;小到几行程序&#xff0c;只要具备了一定的特征&#xff0c;都可以被称作 API。那么&#…

产品手册是团队营销的心脏,让企业宣传更上一层楼

产品手册是企业团队营销的重要工具之一&#xff0c;能够帮助企业更好地宣传产品并提高销售业绩。在现代企业市场竞争日益激烈的情况下&#xff0c;如何制作一份优秀的产品手册成为了企业团队营销的重要课题。本文将从以下几个方面探讨产品手册对团队营销的意义以及如何制作一份…

RocksDB笔记 -- 整体架构

RocksDB是由Facebook开发的存储引擎, 它最初的目标是用于快速存储, 特别是Flash存储. 一个基于C开发keys-values存储引擎库. 整体架构 RocksDB由这三个基本结构组成: memtable, sstfile 和 logfile. 其中: memtable是一个内存数据结构, 新的写入会插入到memtable中, 同时可选…

前端加密对抗——CDP远程调用Debug断点函数python代码实现

文章目录 前端加密对抗——CDP远程调用Debug断点函数python代码实现实现请求断点处函数mitmproxy实现加解密 前端加密对抗——CDP远程调用Debug断点函数python代码实现 前几天看了看tools推送的前端加密的文章&#xff1a;前端加密对抗Part2-通过CDP远程调用Debug断点函数觉得…