WPF基础 | 初探 WPF:理解其核心架构与开发环境搭建
WPF基础 | 初探 WPF:理解其核心架构与开发环境搭建
- 一、前言
- 二、WPF 核心架构
- 2.1 核心组件
- 2.2 布局系统
- 2.3 数据绑定机制
- 2.4 事件处理机制
- 三、WPF 开发环境搭建
- 3.1 安装 Visual Studio
- 3.2 创建第一个 WPF 应用程序
- 结束语
- 优质源码分享
WPF基础 | 初探 WPF:理解其核心架构与开发环境搭建
, 本文旨在深入探讨 Windows Presentation Foundation(WPF),首先介绍 WPF 的基本概念及其在微软技术生态中的地位,随后详细剖析其核心架构,包括核心组件、布局系统、数据绑定机制、事件处理机制等方面。接着阐述 WPF 开发环境的搭建过程,从安装必要软件到创建第一个简单的 WPF 应用程序都进行了细致说明。通过对 WPF 核心架构的理解和开发环境搭建的掌握,为进一步深入学习和应用 WPF 技术奠定坚实基础,帮助开发人员更好地利用 WPF 构建功能强大、界面美观的 Windows 应用程序。
一、前言
在数字浪潮汹涌澎湃的时代,程序开发宛如一座神秘而宏伟的魔法城堡,矗立在科技的浩瀚星空中。代码的字符,似那闪烁的星辰,按照特定的轨迹与节奏,组合、交织、碰撞,即将开启一场奇妙且充满无限可能的创造之旅。当空白的文档界面如同深邃的宇宙等待探索,程序员们则化身无畏的星辰开拓者,指尖在键盘上轻舞,准备用智慧与逻辑编织出足以改变世界运行规则的程序画卷,在 0 和 1 的二进制世界里,镌刻下属于人类创新与突破的不朽印记。
在当今的软件开发领域,用户界面(UI)设计的重要性日益凸显。Windows 应用程序需要提供丰富、交互性强且美观的界面以吸引用户并提升用户体验。传统的 Windows 开发技术在应对复杂 UI 需求时逐渐暴露出一些局限性,如界面设计与逻辑代码的高度耦合、对图形处理能力有限等。在此背景下,微软推出了 Windows Presentation Foundation(WPF)。
WPF 是微软.NET 框架下用于构建 Windows 客户端应用程序的强大技术。它将用户界面、媒体和文档整合到一个统一的编程模型中,提供了丰富的功能集,涵盖了从基本的 UI 布局到高级的图形渲染、动画效果以及数据绑定等多个方面。无论是开发企业级的业务应用程序,还是面向消费者的多媒体应用,WPF 都展现出了卓越的适应性和强大的表现力,成为 Windows 应用程序开发的重要选择之一。
WPF从入门到精通专栏,旨在为读者呈现一条从对 WPF(Windows Presentation Foundation)技术懵懂无知到精通掌握的学习路径。首先从基础入手,介绍 WPF 的核心概念,涵盖其独特的架构特点、开发环境搭建流程,详细解读布局系统、常用控件以及事件机制等基础知识,帮助初学者搭建起对 WPF 整体的初步认知框架。随着学习的深入,进阶部分聚焦于数据绑定、样式模板、动画特效等关键知识点,进一步拓展 WPF 开发的能力边界,使开发者能够打造出更为个性化、交互性强的桌面应用界面。高级阶段则涉及自定义控件开发、MVVM 设计模式应用、多线程编程等深层次内容,助力开发者应对复杂的业务需求,构建大型且可维护的应用架构。同时,通过实战项目案例解析,展示如何将所学知识综合运用到实际开发中,从需求分析到功能实现再到优化测试,全方位积累实践经验。此外,还探讨了性能优化、与其他技术集成以及安全机制等拓展性话题,让读者对 WPF 技术在不同维度有更深入理解,最终实现对 WPF 技术的精通掌握,具备独立开发高质量桌面应用的能力。
🛕 点击进入WPF从入门到精通专栏
二、WPF 核心架构
2.1 核心组件
- PresentationCore
PresentationCore
是 WPF 架构的基础组件之一。它主要负责处理 WPF 应用程序中的核心呈现相关功能,包括图形渲染、可视化树的构建与管理等。它定义了基本的视觉元素类型,如形状(Shape
)、画笔(Brush
)等,并且提供了与底层图形系统交互的接口。例如,当在 WPF 中绘制一个矩形时,PresentationCore
负责将矩形的几何形状信息传递给图形系统进行绘制,并处理诸如裁剪、透明度等视觉效果的计算与应用。
它还包含了对文本渲染的支持,确保在 WPF 应用程序中的文字能够以高质量、清晰的方式显示。这涉及到字体选择、文字排版、文本抗锯齿等多方面的处理,为创建富文本内容的用户界面提供了坚实的基础。
- PresentationFramework
PresentationFramework
构建在 PresentationCore 之上,是 WPF 应用程序开发中直接使用最多的组件。它提供了一系列高级的 UI 功能,如窗口(Window
)、页面(Page
)、控件(Control
)等的定义与实现。这些预定义的 UI 元素使得开发人员可以快速构建应用程序的界面结构。例如,通过简单地实例化一个 Window 类并设置其属性,就可以创建一个基本的应用程序主窗口。
此外,PresentationFramework
还实现了 WPF 的事件路由机制、数据绑定引擎以及命令系统等重要功能。事件路由机制允许在 WPF 应用程序中以灵活的方式处理事件,例如可以在父元素中统一处理子元素的某些事件,提高了代码的复用性和可维护性。数据绑定引擎则是 WPF 的核心特色之一,它能够方便地在 UI 元素和数据对象之间建立绑定关系,实现数据的自动更新与同步显示,大大简化了数据驱动 UI 开发的复杂性。命令系统则为处理用户交互操作提供了一种解耦的方式,将操作逻辑与具体的 UI 元素触发分离,便于代码的组织与管理。
- WindowsBase
WindowsBase
组件提供了一些基本的基础设施服务,如依赖属性系统、路由事件系统的基础实现等。依赖属性是 WPF 中一种特殊的属性类型,它支持属性值的继承、数据绑定、动画等高级特性。例如,一个控件的字体属性可以被设置为依赖属性,这样当父元素的字体属性发生变化时,子元素的字体属性可以自动继承该变化,无需额外的代码处理。
路由事件系统基于 WindowsBase
中的基础实现构建了完整的事件路由机制,使得事件能够在 WPF 元素树中进行冒泡或隧道传播,方便开发人员处理复杂的事件交互场景。同时,WindowsBase 还提供了与线程、资源管理等相关的一些基本功能,为整个 WPF 应用程序的稳定运行提供了保障。
2.2 布局系统
- 布局原理
WPF 的布局系统基于容器和子元素的概念。容器负责确定其子元素的位置和大小,而子元素则向容器提供自身的布局需求信息。布局过程是一个递归的过程,从根元素开始,依次遍历整个元素树。例如,在一个典型的 WPF 窗口中,窗口是根容器,它内部可能包含一个网格(Grid
)布局面板,网格面板又包含多个按钮、文本框等子元素。
在布局过程中,容器首先会根据自身的布局规则对子元素进行测量。测量过程中子元素会返回其期望的大小,这个大小通常是基于其内容、样式设置以及自身的布局约束等因素确定的。例如,一个文本框可能根据其文本内容的长度和字体大小确定其期望的宽度和高度。然后容器会根据自身的布局策略对这些测量结果进行整理和计算,确定每个子元素最终的位置和大小。例如,网格布局面板会根据其定义的行和列的设置,将子元素放置在相应的网格单元中,并调整其大小以适应网格单元的尺寸。
- 常见布局面板
Grid
:Grid 是 WPF 中最常用的布局面板之一。它通过定义行和列来组织子元素,可以灵活地实现复杂的布局结构。开发人员可以指定行和列的大小,可以是固定值、比例值或者自动适应内容的值。例如,在一个数据录入界面中,可以使用 Grid 将标签和文本框分别放置在不同的列中,并且可以根据需要调整列的宽度比例,使界面布局更加美观和合理。
StackPanel
:StackPanel 按照水平或垂直方向依次堆叠其子元素。当子元素添加到 StackPanel 中时,它们会按照设定的方向依次排列。例如,在一个导航菜单的实现中,可以使用垂直方向的 StackPanel 将菜单项依次堆叠,方便用户进行选择操作。
Canvas
:Canvas 提供了绝对定位的布局方式。开发人员可以精确地指定子元素在 Canvas 中的坐标位置。这种布局方式适用于需要精确控制元素位置的场景,如绘制图形、创建自定义的可视化界面等。例如,在一个简单的图形绘制应用程序中,可以使用 Canvas 来放置各种形状元素,并通过指定坐标来确定它们的位置和相互关系。
2.3 数据绑定机制
- 数据绑定基础
数据绑定是 WPF 的核心特性之一,它允许在 UI 元素和数据对象之间建立一种连接关系,使得数据的变化能够自动反映在 UI 上,同时 UI 元素的状态改变也能更新数据对象。数据绑定的基本组成部分包括绑定源、绑定目标和绑定表达式。绑定源是数据的提供者,可以是各种数据对象,如普通的.NET 对象、集合、数据库查询结果等。例如,一个包含用户信息的自定义类对象可以作为绑定源。
绑定目标则是 UI 元素的某个属性,如文本框的 Text
属性、按钮的 IsEnabled
属性等。绑定表达式则定义了绑定源和绑定目标之间的绑定关系,包括绑定的路径(即如何从绑定源获取数据)、绑定的模式(如单向绑定、双向绑定等)等信息。例如,在一个显示用户姓名的文本框中,绑定表达式可以指定将文本框的 Text
属性绑定到用户对象的 Name
属性上,并且采用单向绑定模式,即当用户对象的 Name
属性发生变化时,文本框的 Text 属性会自动更新。
- 数据转换与验证
WPF 的数据绑定机制还支持数据转换和验证功能。数据转换可以在数据从绑定源传输到绑定目标或者反之的过程中对数据进行格式转换。例如,可以定义一个数据转换器将一个日期类型的数据转换为特定格式的字符串以便在文本框中显示,或者将用户输入的字符串转换为相应的数据类型进行数据更新。
数据验证则用于确保用户输入的数据符合特定的要求。可以在绑定表达式中指定验证规则,当用户输入的数据不符合规则时,WPF 会自动提供反馈信息,如显示错误提示框或者改变 UI 元素的外观以提示用户输入错误。例如,在一个年龄输入文本框中,可以定义一个验证规则确保输入的年龄是一个有效的数值且在合理的范围内。
2.4 事件处理机制
- 路由事件概述
WPF 采用路由事件机制来处理事件。路由事件与传统的.NET 事件不同,它可以在元素树中进行传播。路由事件有两种传播方式:冒泡和隧道。冒泡事件是从事件源开始,沿着元素树向上传播,即从子元素向父元素传播。例如,当点击一个按钮时,按钮的 Click 事件会先在按钮自身触发,然后依次向上传播到按钮所在的容器、窗口等父元素。
隧道事件则是从元素树的根元素开始,沿着元素树向下传播到事件源。隧道事件通常用于预览事件,例如在一个窗口中,可以在窗口级别处理鼠标按下的隧道事件,以便在事件到达具体的子元素之前进行一些全局的处理,如判断是否满足某些条件才允许事件继续向下传播到子元素进行具体的处理。
- 事件处理的实现
在 WPF 中,事件处理可以通过在 XAML 中声明事件处理程序或者在代码后置文件中编写事件处理方法来实现。在 XAML 中声明事件处理程序时,只需指定事件名称和对应的事件处理方法名称即可。例如,对于一个按钮的 Click 事件,可以在 XAML 中这样声明:<Button Click="Button_Click">Click Me</Button>
,其中 “Button_Click”
是在代码后置文件中定义的事件处理方法。在代码后置文件中,事件处理方法需要遵循特定的签名格式,如对于按钮的 Click
事件处理方法,其签名通常为private void Button_Click(object sender, RoutedEventArgs e)
,其中“sender”
表示事件源对象,“e” 表示事件参数,包含了关于事件的详细信息,如事件发生的位置、鼠标按键状态等。
三、WPF 开发环境搭建
3.1 安装 Visual Studio
- 系统要求
在安装 Visual Studio 之前,需要确保计算机满足一定的系统要求。对于不同版本的 Visual Studio,系统要求会有所不同。一般来说,需要一定的处理器性能,如至少 1.8 GHz 或更快的处理器(对于某些高级功能可能需要更高性能的处理器)。内存方面,建议至少 2GB 的 RAM,对于大型项目开发或同时运行多个实例时,可能需要更多内存,如 4GB 或 8GB 以上。磁盘空间也有要求,Visual Studio 安装程序本身以及后续开发过程中可能会占用大量磁盘空间,一般需要几十 GB 的可用磁盘空间,具体取决于安装的组件和版本。操作系统方面,支持 Windows 7 及以上版本的 Windows 操作系统,但不同版本的 Visual Studio 对不同 Windows 版本的支持细节可能存在差异。
- 安装步骤
首先,从微软官方网站下载 Visual Studio
的安装程序。在下载页面,可以根据自己的需求选择不同的版本,如 Visual Studio Community
(免费供个人和小型团队使用)、Visual Studio Professional
或 Visual Studio Enterprise
等。下载完成后,运行安装程序。
安装程序启动后,会出现安装向导界面。在这个界面中,可以选择安装的工作负载。对于 WPF 开发,需要选择 “.NET 桌面开发”
工作负载。这个工作负载包含了开发 WPF 应用程序所需的基本组件,如 WPF 设计器、.NET 框架开发工具等。同时,还可以根据自己的需求选择其他相关的工作负载或单个组件,如版本控制系统集成(如 Git)、测试工具等。
选择完工作负载后,点击 “安装” 按钮,安装程序就会开始下载并安装所选的组件。安装过程可能需要一段时间,具体取决于计算机的性能和网络速度。安装完成后,会提示安装成功,可以启动 Visual Studio
。
3.2 创建第一个 WPF 应用程序
- 创建项目
启动 Visual Studio 后,选择 “创建新项目”。在项目模板列表中,选择 “WPF 应用程序(.NET Framework)”。然后指定项目的名称、位置等基本信息,点击 “确定” 按钮,Visual Studio 就会创建一个基本的 WPF 应用程序项目结构。
- 项目结构分析
一个典型的 WPF 应用程序项目包含多个文件和文件夹。其中,“App.xaml”
和 “App.xaml.cs”
文件用于定义应用程序的全局资源、启动窗口等信息。“MainWindow.xaml”
和 “MainWindow.xaml.cs”
文件是应用程序的主窗口相关文件,“MainWindow.xaml”
用于定义主窗口的 UI 布局,采用 XAML 语言编写,而 “MainWindow.xaml.cs”
则是主窗口的代码后置文件,用于处理主窗口的逻辑代码,如事件处理、数据初始化等。此外,项目中还可能包含 “Properties” 文件夹,其中存放着项目的属性设置文件,如程序集信息、资源文件引用等。还有 “obj” 和 “bin” 文件夹,分别用于存放编译过程中的中间文件和最终生成的可执行文件及相关依赖文件。
- 编写简单的 UI 与逻辑代码
在 “MainWindow.xaml”
文件中,可以开始设计主窗口的 UI。例如,可以添加一个按钮和一个文本框,如下所示:
<Window x:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="My First WPF App" Height="350" Width="525"><Grid><Button x:Name="MyButton" Content="Click Me" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,10,0,0"/><TextBox x:Name="MyTextBox" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,50,0,0" Width="200"/></Grid>
</Window>
然后在 “MainWindow.xaml.cs” 文件中,可以为按钮添加 Click 事件处理代码,例如:
using System;
using System.Windows;namespace WpfApp1
{public partial class MainWindow : Window{public MainWindow(){InitializeComponent();MyButton.Click += MyButton_Click;}private void MyButton_Click(object sender, RoutedEventArgs e){MyTextBox.Text = "按钮单击!";}}
}
这样,当运行应用程序并点击按钮时,文本框中就会显示 “按钮单击!”。
结束语
通过对 WPF 核心架构的深入理解,包括其核心组件、布局系统、数据绑定机制和事件处理机制等方面,以及掌握 WPF 开发环境的搭建过程,从安装 Visual Studio 到创建第一个简单的 WPF 应用程序,开发人员已经迈出了学习 WPF 技术的重要一步。WPF 凭借其强大的功能和灵活的架构,为开发高质量的 Windows 应用程序提供了广阔的空间。在后续的学习和实践中,可以进一步探索 WPF 的高级特性,如动画效果、自定义控件开发、与其他技术的集成等,从而能够更好地利用 WPF 构建出功能丰富、界面精美的 Windows 应用程序,满足不同用户和业务场景的需求,提升 Windows 应用程序在软件市场中的竞争力。无论是对于企业级应用开发还是面向消费者的软件产品开发,WPF 都具有不可忽视的价值和潜力,值得深入研究与应用。
在开发过程中,遵循 MVVM 设计模式和合理使用资源字典等最佳实践,可以使代码结构更加清晰、易于维护和扩展,提高开发团队的协作效率。同时,了解并掌握数据绑定不生效、布局异常等常见问题的解决方法,能够帮助开发人员快速排除故障,减少开发时间和成本。
无论是开发简单的工具类应用程序,还是复杂的企业级桌面软件,WPF 都能够满足各种需求,并能够与其他微软技术如 WCF、Entity Framework 等无缝集成,进一步拓展了其应用范围和功能深度。随着技术的不断发展和应用场景的不断拓展,WPF 将继续在桌面应用开发领域发挥重要作用,为用户带来更加优质的桌面应用体验。对于希望深入学习桌面应用开发的读者来说,WPF 无疑是一个值得深入探索和掌握的技术框架,它将为个人的技术成长和职业发展提供坚实的基础和广阔的空间。
亲爱的朋友,无论前路如何漫长与崎岖,都请怀揣梦想的火种,因为在生活的广袤星空中,总有一颗属于你的璀璨星辰在熠熠生辉,静候你抵达。
愿你在这纷繁世间,能时常收获微小而确定的幸福,如春日微风轻拂面庞,所有的疲惫与烦恼都能被温柔以待,内心永远充盈着安宁与慰藉。
至此,文章已至尾声,而您的故事仍在续写,不知您对文中所叙有何独特见解?期待您在心中与我对话,开启思想的新交流。
优质源码分享
-
【百篇源码模板】html5各行各业官网模板源码下载
-
【模板源码】html实现酷炫美观的可视化大屏(十种风格示例,附源码)
-
【VUE系列】VUE3实现个人网站模板源码
-
【HTML源码】HTML5小游戏源码
-
【C#实战案例】C# Winform贪吃蛇小游戏源码
💞 关注博主 带你实现畅游前后端
🏰 大屏可视化 带你体验酷炫大屏
💯 神秘个人简介 带你体验不一样得介绍
🎀 酷炫邀请函 带你体验高大上得邀请
① 🉑提供云服务部署(有自己的阿里云);
② 🉑提供前端、后端、应用程序、H5、小程序、公众号等相关业务;
如🈶合作请联系我,期待您的联系。
注:本文撰写于CSDN平台,作者:xcLeigh(所有权归作者所有) ,https://blog.csdn.net/weixin_43151418,如果相关下载没有跳转,请查看这个地址,相关链接没有跳转,皆是抄袭本文,转载请备注本文原地址。
亲,码字不易,动动小手,欢迎 点赞 ➕ 收藏,如 🈶 问题请留言(评论),博主看见后一定及时给您答复,💌💌💌
原文地址:https://blog.csdn.net/weixin_43151418/article/details/144660532(防止抄袭,原文地址不可删除)
相关文章:
WPF基础 | 初探 WPF:理解其核心架构与开发环境搭建
WPF基础 | 初探 WPF:理解其核心架构与开发环境搭建 一、前言二、WPF 核心架构2.1 核心组件2.2 布局系统2.3 数据绑定机制2.4 事件处理机制 三、WPF 开发环境搭建3.1 安装 Visual Studio3.2 创建第一个 WPF 应用程序 结束语优质源码分享 WPF基础 | 初探 WPFÿ…...
插入排序
直接插入排序 直接插⼊排序是⼀种简单的插⼊排序法,其基本思想是:把待排序的记录按其关键码值的⼤⼩逐个插 ⼊到⼀个已经排好序的有序序列中,直到所有的记录插⼊完为⽌,得到⼀个新的有序序列。 例如:我们玩扑克牌时&…...
2025最新 Docker 国内可用镜像源仓库地址(01月02日更新)
1. 添加docker镜像地址 使用编辑器打开配置文件 /etc/docker/daemon.json(如果没有该文件,可以新建一个) 2. vi daemon.json, 写入以下内容 {"builder": {"gc": {"defaultKeepStorage": "20GB",&…...
Java 反射与动态代理:实践中的应用与陷阱
Java 反射与动态代理:实践中的应用与陷阱 在现代Java应用中,反射和动态代理提供了强大的灵活性,但它们也带来了性能和复杂度上的挑战。本文将深入探讨这些技术在实际项目中的应用,分析它们可能导致的陷阱,并提供详细的…...
tp8读取mysql导出excel
环境:php8.3, thinkphp8.0, mysql8.0 use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Style\Alignment; use think\facade\Db; use think\response\Json;class Index {public function index…...
【自己动手开发Webpack插件:开启前端构建工具的个性化定制之旅】
在前端开发的世界里,Webpack无疑是构建工具中的“明星”。它强大的功能可以帮助我们高效地打包和管理前端资源。然而,有时候默认的Webpack功能可能无法完全满足我们的特定需求,这时候就需要自定义Webpack插件来大展身手啦!今天&am…...
vue2使用flv.js在浏览器打开flv格式视频
组件地址:GitHub - bilibili/flv.js: HTML5 FLV Player flv.js 仅支持 H.264 和 AAC/MP3 编码的 FLV 文件。如果视频文件使用了其他编码格式就打不开。 flv.vue <template><div><el-dialog :visible.sync"innerVisibleFlv" :close-on-pre…...
Spring中的事务管理器TransactionManager
目录 一、主要功能 二、使用场景说明 在Spring框架中,事务管理器(TransactionManager)是用于管理事务的重要接口。它提供了对事务的全面控制,包括事务的状态管理和资源管理等功能。本文将详细介绍TransactionManager的主要功能、…...
MacOS安装Docker battery-historian
文章目录 需求安装battery-historian实测配置国内源相关文章 需求 分析Android电池耗电情况、唤醒、doze状态等都要用battery-historian, 在 MacOS 上安装 battery-historian,可以使用 Docker 进行安装runcare/battery-historian:latest。装完不需要做任…...
Charles 4.6.7 浏览器网络调试指南:HTTPS抓包(三)
概述 在现代互联网应用中,网络请求和响应是服务交互的核心。对于开发者和测试人员来说,能够准确捕获并分析这些请求,是保证系统稳定性和性能的关键。Charles作为一个强大的网络调试工具,不仅可以捕获普通的HTTP请求,还…...
c++解决常见内存泄漏问题——智能指针的使用及其原理
目录 前言: 1. 智能指针的使用及其原理 1. 1 智能指针的使用场景分析 1.2 RAII和智能指针的设计思路 1.3 C标准库智能指针的使用 1.3 1 auto_ptr 1.3 2 unique_ptr 1.3 3 shared_ptr(重) 1.3 4 weak_ptr 1.3 5 模拟实现删除器 2.智能指针的原…...
算法竞赛之离散化技巧 python
目录 离散化实战演练总结 离散化 不改变数据相对大小的情况下,对数据进行相应的下标映射,即离散化。 例如:【100,200,300,400,500】,离散化后为【1,2,3,4,5】 什么时候可以离散化:当数据只与它们之间的相对大小有关&a…...
1.CSS的三大特性
css有三个非常重要的三个特性:层叠性、继承性、优先级 1.1 层叠性 想通选择器给设置想听的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要是解决样式冲突的问题。 <!DOCTYPE html> <html lang"en&…...
由于请求的竞态问题,前端仔喜提了一个bug
在平常的开发过程中,你可能会遇到这样一个bug。 测试:我在测一个输入框搜索的功能时,告诉你通过输入框输入的内容,和最终通过输入内容搜索出来的结果对不上。 前端:我是通过调用后端接口拿到的数据,这明显…...
HTML `<head>` 元素详解
在 HTML 文档中,<head> 元素是一个非常重要的部分,它包含了文档的元数据(metadata)和其他与文档相关的信息。虽然 <head> 中的内容不会直接显示在网页上,但它对网页的行为、样式和搜索引擎优化(…...
基于RAG构建Text2SQL的实战教程
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…...
GPT-4对话模型在客服中的应用与前景:开启智能客服新时代
GPT-4对话模型在客服中的应用与前景:开启智能客服新时代 随着人工智能技术的迅猛发展,基于深度学习的对话模型在各个领域中得到了广泛应用。其中,GPT-4对话模型在客服系统中的应用尤为引人注目。本文将探讨GPT-4在客服中的应用与未来发展前景,并结合具体代码示例进行说明。…...
我想通过python语言,学习数据结构和算法该如何入手?
学习数据结构和算法是编程中的重要基础,Python 是一个非常适合入门的语言。以下是学习数据结构和算法的步骤和建议: 1. 掌握 Python 基础 确保你对 Python 的基本语法、数据类型、控制结构(如循环、条件语句)、函数等有扎实的理…...
Java多线程的面试面试题及答案解析
什么是进程?什么是线程?有什么区别? 进程是系统资源分配的基本单位,拥有独立的地址空间。线程是 CPU 调度和分派的基本单位,是比进程更小的独立执行的单位,共享所在进程的内存空间等资源。一个进程可以包含…...
python flask中使用or查询和and查询,还有同时使用or、and的情况
在 Flask 中处理数据库查询时,通常会结合使用 ORM 工具,例如 SQLAlchemy。以下是 or 查询、and 查询以及两者同时使用的示例。 文章目录 基础准备1. 使用 or_ 查询2. 使用 and_ 查询3. 同时使用 or_ 和 and_4. 更加复杂的嵌套查询 基础准备 假设有一个…...
C# 解析视频流播放全解析
在多媒体技术日益发达的今天,视频流播放已经成为众多应用中不可或缺的功能。对于开发者而言,掌握如何使用编程语言来解析和播放视频流是一项重要的技能。本文将深入探讨如何使用 C# 来实现视频流的解析与播放。 一、视频流播放原理简介 视频流是将视频…...
关于为什么java中nextInt()和nextLine()不能混用 | nextInt()和nextInt()之类的可以一起用
键盘录入的区别: 第一套体系:遇到空格、制表符、回车都结束,并且都不接收 nextInt()、nextDouble()、next() 遇到空格、制表符、回车就结束,只接收其之前的数据,空格以及空格之后的数据都在缓冲区内,如果…...
计算机图形学:实验一 OpenGL基本绘制
1.OpenGL的环境配置: 集成开发环境Visual Studio Community 2019的安装: 在Windows一栏选择使用C的桌面开发;再转到“单个组件”界面,在“编译器、生成工具和运行时”一栏选择用于“Windows的C CMake工具”;然后转到…...
Node.js 到底是什么
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者使用 JavaScript 编写服务器端代码。 一、主要特点 1. 事件驱动和非阻塞 I/O 模型 Node.js 采用事件驱动架构,通过回调函数处理 I/O 操作,这使得它在处理大量并发请…...
2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题5)
目录 任务描述 任务清单 (一)基础配置 (二)有线网络配置 (三)无线网络配置 (四)出口网络配置 附录1:拓扑图 附录2:地址规划表 任务描述 随着业务的发展,现在要对海琼银行进行全网改造,为其它区域的网络提供高效的保障服务。同时,海琼银行还针对各个分支行、网点的…...
智慧脚下生根,智能井盖监测终端引领城市安全新革命
在繁忙的都市生活中,我们往往只关注地面的繁华与喧嚣,却忽略了隐藏在地面之下的基础设施——井盖。这些看似不起眼的井盖,实则承担着排水、通讯、电力等重要功能,是城市安全运转的重要一环。然而,传统的井盖管理面临着…...
ES6 简单练习笔记--变量申明
一、ES5 变量定义 1.在全局作用域中 this 其实就是window对象 <script>console.log(window this) </script>输出结果: true 2.在全局作用域中用var定义一个变量其实就相当于在window上定义了一个属性 例如: var name "孙悟空" 其实就相当于执行了 win…...
MsfVenom木马制作及使用
msfvenom基本用法 1、功能介绍 msfvenom的功能:常用于生成木马,在目标机器执行,在本地机器kali中上线,与反弹shell类似。MsfVenom可以生成两种类型的攻击载荷: (1)Payload:Payloa…...
ChromeOS 132 版本更新
ChromeOS 132 版本更新 1. 企业定制化 Chrome Web Store 管理员现在可以使用新设置定制 Chrome Web Store 以适应他们管理的用户,包括以下功能: 添加公司标志添加首页横幅和自定义公告策划扩展集合实施基于类别的控制 这些设置可以通过管理员控制台进…...
MySQL(表空间)
开始前先打开此图配合食用 MySQL表空间| ProcessOn免费在线作图,在线流程图,在线思维导图 InnoDB 空间文件中的页面管理 后面也会持续更新,学到新东西会在其中补充。 建议按顺序食用,欢迎批评或者交流! 缺什么东西欢迎评论!我都…...
智能化加速标准和协议的更新并推动验证IP(VIP)在芯片设计中的更广泛应用
作者:Karthik Gopal, SmartDV Technologies亚洲区总经理 智权半导体科技(厦门)有限公司总经理 随着AI技术向边缘和端侧设备广泛渗透,芯片设计师不仅需要考虑在其设计中引入加速器,也在考虑采用速度更快和带宽更高的总…...
Chrome远程桌面无法连接怎么解决?
Chrome远程桌面连接已停止工作 Chrome远程桌面是一款极为便捷的浏览器插件,能够帮助用户将自己的计算机连接到其他设备,无论是手机、平板电脑还是其他电脑。然而,在实际使用中,许多用户可能会面临各种各样的问题,比如…...
springcloud alibaba 五大组件
Spring Cloud Alibaba是Spring Cloud的一个子项目,致力于为构建分布式应用提供一站式解决方案。它基于阿里巴巴的底层Java开源框架,主要包含以下五大核心组件: 1. Nacos(服务注册与配置中心) 功能:Nacos提…...
es 3期 第25节-运用Rollup减少数据存储
#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性ÿ…...
理解深度学习pytorch框架中的线性层
文章目录 1. 数学角度: y W x b \displaystyle y W\,x b yWxb示例 2. 编程实现角度: y x W T b \displaystyle y x\,W^T b yxWTb3. 常见错误与易混点解析4. 小结参考链接 在神经网络或机器学习的线性层(Linear Layer / Fully Connect…...
“上门按摩” 小程序开发项目:基于 SOP 的全流程管理
在竞争激烈的生活服务市场,“上门按摩” 服务需求日益增长。为满足这一需求,我们启动了 O2O 模式的 “上门按摩” 小程序开发项目,该项目涵盖客户端、系统管理端、技师端。以下将通过各类 SOP 对项目进行全面管理,确保项目顺利推进。 一、项目启动 SOP:5W2H 分析法 What(…...
【xcode 16.2】升级xcode后mac端flutter版的sentry报错
sentry_flutter 7.11.0 报错 3 errors in SentryCrashMonitor_CPPException with the errors No type named terminate_handler in namespace std (line 60) and No member named set_terminate in namespace std 替换sentry_flutter版本为: 8.3.0 从而保证oc的…...
Unity自学之旅05
Unity自学之旅05 Unity学习之旅⑤📝 AI基础与敌人行为🥊 AI导航理论知识(基础)开始实践 🎃 敌人游戏机制追踪玩家攻击玩家子弹碰撞完善游戏失败条件 🤗 总结归纳 Unity学习之旅⑤ 📝 AI基础与敌…...
LINUX下设置分离状态(Detached State)和未设置分离状态的主要区别在于线程资源的管理方式和线程的生命周期。以下是两种状态的对比:
1. 设置分离状态(Detached State) 资源管理: 线程终止时,系统会自动释放与线程相关的所有资源(如线程栈、线程控制块)。不需要其他线程显式回收(pthread_join)。 线程生命周期&…...
软考信安26~大数据安全需求分析与安全保护工程
1、大数据安全威胁与需求分析 1.1、大数据相关概念发展 大数据是指非传统的数据处理工具的数据集,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低等特征。 大数据的种类和来源非常多,包括结构化、半结构化和非结构化数据。 1.2、大数据安全威胁分析 (…...
Alibaba Spring Cloud 一 核心组件、特性
Alibaba Spring Cloud 是 Alibaba 基于 Spring Cloud 的分布式微服务解决方案,提供了一套高性能、高可靠的微服务开发和运维工具。它扩展了 Spring Cloud 的功能,并优化了许多在生产环境中的实践场景,例如服务发现、配置管理、熔断限流等。 …...
通过脚本申请免费SSL证书(泛解析SSL证书)
参考来源 1.https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E 2.https://github.com/acmesh-official/acme.sh/wiki/dns-manual-mode 3.https://github.com/acmesh-official/acme.sh/wiki/dnsapi 安装 acme.sh 配置账号 配置默认CA 安装依赖 # Cento…...
基于相机内参推导的透视投影矩阵
基于相机内参推导透视投影矩阵(splatam): M c a m [ 2 ⋅ f x w 0.0 ( w − 2 ⋅ c x ) w 0.0 0.0 2 ⋅ f y h ( h − 2 ⋅ c y ) h 0.0 0 0 f a r n e a r n e a r − f a r 2 f a r ⋅ n e a r n e a r − f a r 0.0 0.0 − 1.0 0.0 ] M_…...
代码随想录算法训练营day34
代码随想录算法训练营 —day34 文章目录 代码随想录算法训练营前言一、62.不同路径动态规划动态规划空间优化 二、63. 不同路径 II动态规划动态规划优化空间版 三、343. 整数拆分动态规划贪心算法 96.不同的二叉搜索树总结 前言 今天是算法营的第34天,希望自己能够…...
Orgill EDI需求分析
Orgill 是一家位于美国的家族企业,主要为五金零售商、建材供应商及相关行业提供全面的分销服务和支持,覆盖范围遍及全球。 EDI需求分析 EDI全称Electronic Data Interchange,中文名称是电子数据交换,也被称为“无纸化贸易”。EDI…...
好用的js工具类
格式化相关 // 数字每三位增加一个逗号 function toThousands(num) {if (num) {return num.toString().replace(/\d/, function(n) {// 先提取整数部分return n.replace(/(\d)(?(\d{3})$)/g, function($1) {return $1 ,})})} else {return 0} }//输出10,000 toThousands(10…...
C++ —— 基于范围的 for 循环
C —— 基于范围的 for 循环 语法push_back() 与 emplace_back() 的区别**emplace_back()** 示例代码如下:**push_back()** 示例代码如下: 容器中的元素是结构体和类 语法 C11中引入了基于范围的for循环,语法如下: for (迭代的变…...
15-spring整合mybatis方式一
spring整合mybatis 方式一【重要】 步骤: 1.导入相关jar包 junit mybatis mysql数据库 spring相关的 aop织入 mybatis-spring 【new】 junit junit 4.12 mysql mysql-connector-java 8.0.23 org.mybatis mybatis 3.5.2 org.springframework spring-webmvc 5…...
数据结构:二叉树—面试题(一)
目录 1、相同的树 2、另一棵树的子树 3、翻转二叉树 4、平衡二叉树 5、对称二叉树 6、二叉树遍历 7、二叉树的分层遍历 1、相同的树 习题链接https://leetcode.cn/problems/same-tree/description/https://leetcode.cn/problems/same-tree/description/ 描述:…...
GPU算力平台|在GPU算力平台部署可图大模型Kolors的应用实战教程
文章目录 一、GPU算力服务平台GPU算力服务平台的概述 二、平台账号注册流程可图大模型Kolors的应用实战教程可图大模型的介绍可图大模型的应用场景可图大模型Kolors的部署步骤 一、GPU算力服务平台 GPU算力服务平台的概述 蓝耘GPU算力平台专为高性能计算设计,广泛…...