Avalonia+ReactiveUI跨平台路由:打造丝滑UI交互的奇幻冒险
一、引言
在当今数字化时代,跨平台应用开发已成为大势所趋。开发者们迫切需要一种高效、灵活的方式,能够让应用程序在不同操作系统上无缝运行,为用户提供一致的体验。Avalonia 和 ReactiveUI 的组合,宛如一对天作之合的舞者,在跨平台开发的舞台上翩翩起舞,为我们带来了前所未有的可能。
Avalonia 是一个开源的跨平台 UI 框架,它以其强大的跨平台能力而备受瞩目。无论是 Windows、Linux 还是 macOS,甚至是 Android、iOS 和 WebAssembly,Avalonia 都能轻松适配 ,确保应用程序在各种平台上都能呈现出一致的外观和行为。它就像是一位万能的舞者,能够在不同的舞台上自由切换,展现出同样精彩的表演。
而 ReactiveUI 则是一个基于响应式编程的 MVVM 框架,为 UI 交互带来了全新的思路。它就像是舞者的灵魂,通过响应式编程,让 UI 能够实时响应用户的操作和数据的变化,实现流畅自然的交互体验。在 ReactiveUI 的世界里,数据的流动和变化都被巧妙地管理,使得开发者可以更加专注于业务逻辑的实现,而无需过多关注繁琐的 UI 更新细节。
当 Avalonia 与 ReactiveUI 相遇,它们的结合就像是为跨平台开发注入了一股强大的活力。而跨平台路由,作为这对组合中的关键角色,更是决定了应用程序中不同页面或视图之间的切换机制,如同舞者的舞步,精准而流畅地引导用户在应用的各个界面间穿梭。
想象一下,用户在使用你的应用时,能够像观看一场精彩的舞蹈表演一样,轻松地在不同界面之间切换,享受丝滑般的体验。这就是 Avalonia+ReactiveUI 跨平台路由的魅力所在。它不仅提升了用户体验,还为开发者提供了一种高效、优雅的方式来管理应用的导航逻辑。
接下来,让我们一起深入探索 Avalonia+ReactiveUI 跨平台路由的世界,从搭建基础环境开始,一步步揭开它的神秘面纱,学习如何创建视图、配置路由,以及实现界面之间的跳转。无论你是跨平台开发的新手,还是经验丰富的开发者,相信这篇文章都能为你带来新的启发和收获,让你的 UI 开发技能更上一层楼,在跨平台开发的舞台上跳出属于自己的精彩舞步。
二、Avalonia 与 ReactiveUI 初相识
2.1 Avalonia:跨平台 UI 的魔法披风
Avalonia 是一个开源且强大的跨平台 UI 框架 ,它就像是为开发者准备的一件魔法披风,赋予应用在多个平台上自由穿梭的能力。它支持 Windows、Linux、macOS 等常见桌面操作系统,甚至在 Android、iOS 和 WebAssembly 等平台上也能一展身手。这意味着开发者只需编写一套代码,就能让应用在不同系统上运行,大大节省了开发时间和成本。
Avalonia 拥有自己独立的渲染引擎,不依赖于操作系统的原生 UI 控件,而是自行绘制整个用户界面 。这一特性为开发者带来了高度的灵活性和自定义能力。比如,开发者可以根据应用的需求,自由地定制按钮的形状、颜色和动画效果,而不受原生控件的限制。同时,Avalonia 还提供了灵活的样式系统,类似于 WPF 的强大样式机制,允许开发者使用样式来定义控件的外观 。这些样式可以根据控件的状态(如鼠标悬停、按下等)动态调整,并且能够在继承层次结构中继承。例如,通过简单的样式设置,就可以让一个按钮在鼠标悬停时改变颜色,给用户提供更直观的交互反馈。此外,Avalonia 允许开发者使用 XAML 定义用户界面,这是许多.NET 开发人员熟悉的标记语言,同时也可以直接在代码中操作用户界面,让开发者能够根据实际情况选择最适合的方式来构建界面。
2.2 ReactiveUI:响应式编程的智慧大脑
ReactiveUI 是一个基于响应式编程的 MVVM 框架,它为 UI 开发带来了全新的思路,堪称是智慧大脑。响应式编程是一种编程范式,旨在处理异步数据流,它使用数据流的推模型,能够高效地处理事件和数据的变化 。在 ReactiveUI 中,数据的变化和用户的操作都被视为事件流,开发者可以通过订阅这些事件流来做出相应的响应。
ReactiveUI 的优势在于它能够简化复杂的 UI 逻辑,提高代码的可读性和可维护性 。它提供了丰富的响应式操作符和工具,使开发者能够更轻松地处理异步操作和事件流。例如,在处理网络请求时,使用 ReactiveUI 可以很方便地实现请求的发送、响应的处理以及在请求过程中显示加载指示器等功能。在 MVVM 模式中,ReactiveUI 扮演着重要的角色。ViewModel 是 MVVM 模式中用于处理界面逻辑和数据的核心部分,ReactiveUI 通过响应式编程,使得 ViewModel 能够与 View 之间实现高效的数据绑定和交互。当 ViewModel 中的数据发生变化时,View 能够自动更新,反之亦然。比如,在一个登录界面中,当用户在 View 中输入用户名和密码后,ViewModel 可以实时接收到这些输入数据,并进行验证和处理,然后将验证结果反馈给 View,实现了数据的双向同步和交互行为的响应。这种机制大大减少了手动处理数据同步的代码量,使代码更加简洁、易于理解和维护。
2.3 两者结合:天作之合的化学反应
当 Avalonia 与 ReactiveUI 结合在一起时,就产生了奇妙的化学反应,为开发者带来了诸多便利和高效性。从开发便利性来看,Avalonia 提供的跨平台能力和灵活的 UI 构建方式,与 ReactiveUI 的响应式编程和 MVVM 模式相结合,使得开发者可以更加专注于业务逻辑的实现,而无需花费大量精力在不同平台的兼容性和 UI 更新的繁琐细节上。在一个跨平台的文件管理应用中,使用 Avalonia 可以轻松构建出在 Windows、Linux 和 macOS 上都能运行的界面,而 ReactiveUI 则负责处理文件的读取、写入、删除等操作以及界面与这些操作之间的交互逻辑。通过响应式编程,当用户在界面上进行文件操作时,界面能够实时更新显示文件的状态变化,给用户带来流畅的使用体验。
在开发效率方面,两者的结合也具有显著优势。ReactiveUI 的响应式操作符和工具可以帮助开发者更快速地处理复杂的业务逻辑,而 Avalonia 的 XAML 和代码结合的方式,使得界面的开发更加高效。同时,由于 Avalonia 的跨平台特性,一套代码可以在多个平台上运行,减少了重复开发的工作量,大大提高了开发效率。而且,它们的结合还使得代码的可维护性和可扩展性更强,方便后续的功能迭代和优化。
三、跨平台路由:应用导航的智慧地图
3.1 什么是跨平台路由
在日常生活中,当我们使用地图导航软件从一个地点前往另一个地点时,导航软件会根据我们的出发地和目的地规划出一条最佳路线,引导我们顺利到达。跨平台路由在应用程序中的作用就如同导航软件,它是决定应用程序中不同页面或视图如何相互切换的机制。在一个电商应用中,当用户点击商品列表中的某个商品时,跨平台路由会将用户导航到该商品的详情页面;当用户完成购物点击结算按钮时,又会跳转到结算页面。它就像一条无形的纽带,将应用的各个界面有机地连接起来,确保用户在不同的界面间能够流畅地切换,不会迷失方向。
从技术层面来讲,跨平台路由通过定义和管理路由规则,使得应用程序能够根据用户的操作或业务逻辑的变化,准确地加载和显示相应的页面或视图。它就像是一个智能的交通调度员,根据不同的 “路况”(用户操作和业务逻辑),合理地安排 “车辆”(页面或视图)的行驶路线,确保整个应用的导航流程顺畅无阻。
3.2 为什么需要跨平台路由
从用户体验的角度来看,跨平台路由是提升用户体验的关键因素。在如今这个快节奏的时代,用户对于应用的要求越来越高,他们希望能够在应用中快速、便捷地找到自己需要的信息,并且操作过程流畅自然。一个拥有良好跨平台路由的应用,能够让用户轻松地在各个界面之间跳转,不会因为复杂的导航流程而感到困惑或烦躁。在一个新闻资讯应用中,用户可以通过简洁的导航栏快速切换到不同的新闻分类页面,如时政、娱乐、体育等,并且在点击新闻标题后能够迅速跳转到新闻详情页面,这种流畅的导航体验能够让用户更加专注于内容本身,从而提高用户对应用的满意度和忠诚度。
从开发便利性的角度来说,跨平台路由也为开发者带来了诸多好处。它有助于实现代码的模块化和可维护性。通过将不同的页面或视图抽象为独立的模块,并通过路由进行管理,开发者可以更加清晰地组织代码结构,降低代码的耦合度。当需要修改或扩展某个页面的功能时,只需要在对应的模块中进行操作,而不会影响到其他部分的代码。同时,跨平台路由还能够方便地实现页面的复用。在不同的业务场景中,如果存在相同或相似的页面,开发者可以通过路由配置,让这些页面在不同的地方被重复使用,减少了重复开发的工作量,提高了开发效率。
四、实战:Avalonia+ReactiveUI 跨平台路由搭建
4.1 搭建舞台:准备开发环境
在开始搭建 Avalonia+ReactiveUI 跨平台路由项目之前,我们需要确保开发环境已准备就绪。首先,要安装好.NET SDK,这是运行和开发 Avalonia 应用的基础。可以从微软官方网站下载并安装最新版本的.NET SDK ,安装完成后,打开命令行工具,输入dotnet --version,如果能正确输出版本号,则说明安装成功。
接下来,在项目中添加 Avalonia 和 ReactiveUI 相关包。在项目的.csproj文件中,添加如下代码:
<ItemGroup><PackageReference Include="Avalonia" Version="latest" /><PackageReference Include="ReactiveUI.Avalonia" Version="latest" />
</ItemGroup>
这里的latest表示使用最新版本的包,你也可以指定具体的版本号。添加完成后,在命令行中进入项目目录,执行dotnet restore命令,以恢复项目的依赖包。等待命令执行完成,确保所有依赖包都已成功下载并安装。
4.2 创建视图:舞台上的演员就位
在 Avalonia+ReactiveUI 的开发中,遵循 MVVM 模式,每个视图都对应一个 ViewModel。假设我们要创建一个简单的应用,包含主视图MainView和详情视图DetailView。
首先,创建MainViewModel和DetailViewModel。在ViewModel文件夹下,创建MainViewModel.cs文件,代码如下:
using ReactiveUI;public class MainViewModel : ReactiveObject
{// 这里可以定义主视图相关的属性和命令
}
同样,在ViewModel文件夹下创建DetailViewModel.cs文件,代码如下:
using ReactiveUI;public class DetailViewModel : ReactiveObject
{// 这里可以定义详情视图相关的属性和命令
}
然后,创建MainView和DetailView。在Views文件夹下,创建MainView.axaml文件,代码如下:
<UserControl xmlns="https://github.com/avaloniaui"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"d:DesignWidth="800" d:DesignHeight="450"x:Class="YourNamespace.MainView"><Grid><!-- 主视图的布局和控件 --></Grid>
</UserControl>
在MainView.axaml.cs文件中,添加如下代码:
using Avalonia.Controls;
using Avalonia.Markup.Xaml;
using YourNamespace.ViewModels;public partial class MainView : UserControl
{public MainView(){InitializeComponent();DataContext = new MainViewModel();}private void InitializeComponent(){AvaloniaXamlLoader.Load(this);}
}
类似地,在Views文件夹下创建DetailView.axaml文件和DetailView.axaml.cs文件,分别用于定义详情视图的界面和代码逻辑。
4.3 构建导航路线:路由配置
使用 ReactiveUI 的 Routing 特性来配置路由路径。在ViewModel中,通过[RoutingStatePath]特性为视图模型指定路由路径。例如,在MainViewModel.cs文件中,修改代码如下:
using ReactiveUI;
using ReactiveUI.Routing;[RoutingStatePath("main")]
public class MainViewModel : ReactiveObject
{// 这里可以定义主视图相关的属性和命令
}
在DetailViewModel.cs文件中,修改代码如下:
using ReactiveUI;
using ReactiveUI.Routing;[RoutingStatePath("detail")]
public class DetailViewModel : ReactiveObject
{// 这里可以定义详情视图相关的属性和命令
}
这样,就为MainViewModel和DetailViewModel分别指定了路由路径main和detail。
4.4 启动导航引擎:初始化 Router
在应用程序的入口点,需要初始化 ReactiveUI 的RoutingState,它是驱动整个路由系统的引擎。在App.cs文件中,添加如下代码:
using Avalonia;
using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Markup.Xaml;
using ReactiveUI;
using YourNamespace.ViewModels;public class App : Application
{public override void Initialize(){AvaloniaXamlLoader.Load(this);}public override void OnFrameworkInitializationCompleted(){if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop){RxApp.MainThreadScheduler = AvaloniaScheduler.Instance;var routingState = new RoutingState();var router = new Router(routingState);var mainVm = new MainViewModel();router.Navigate.Execute(mainVm);desktop.MainWindow = new MainWindow{DataContext = new MainWindowViewModel(router, routingState)};}base.OnFrameworkInitializationCompleted();}
}
在上述代码中,首先创建了RoutingState和Router实例,然后通过router.Navigate.Execute(mainVm)导航到MainViewModel对应的视图。最后,将MainWindow的DataContext设置为MainWindowViewModel,并将MainWindow显示出来。
4.5 设置导航按钮:触发页面跳转
在MainView中添加一个按钮,用于触发跳转到DetailView。在MainView.axaml文件中,添加如下代码:
<Button Content="查看详情" Command="{Binding NavigateToDetail}" />
然后,在MainViewModel.cs文件中定义NavigateToDetail命令,代码如下:
using ReactiveUI;
using ReactiveUI.Routing;[RoutingStatePath("main")]
public class MainViewModel : ReactiveObject
{public ReactiveCommand<Unit, Unit> NavigateToDetail { get; }public MainViewModel(IRoutingState routingState){NavigateToDetail = ReactiveCommand.Create(() =>{routingState.Navigate.Execute(new DetailViewModel());});}
}
在上述代码中,NavigateToDetail命令在执行时,会通过routingState.Navigate.Execute(new DetailViewModel())导航到DetailViewModel对应的视图,从而实现页面的跳转。
五、实际项目中的应用与优化
5.1 案例展示:以某项目为例
为了更直观地展示 Avalonia+ReactiveUI 跨平台路由在实际项目中的应用,我们以一个跨平台的文件管理应用为例。在这个应用中,用户可以在 Windows、Linux 和 macOS 等不同操作系统上使用,实现文件的浏览、创建、删除、复制等操作 。
在该应用中,跨平台路由发挥了重要作用。应用的主界面是一个文件列表视图,展示了当前目录下的文件和文件夹。当用户点击某个文件夹时,通过跨平台路由,应用会导航到该文件夹的子目录视图,展示子目录中的内容。当用户点击某个文件时,会跳转到文件详情视图,显示文件的详细信息,如文件大小、创建时间、修改时间等 。
在实现过程中,首先定义了多个视图和对应的 ViewModel。MainViewModel负责管理主界面的逻辑,包括获取当前目录下的文件列表等。DirectoryViewModel用于处理文件夹子目录视图的逻辑,根据传入的文件夹路径获取子目录内容 。FileDetailsViewModel则用于展示文件详情。
在路由配置方面,为MainViewModel、DirectoryViewModel和FileDetailsViewModel分别指定了路由路径,如main、directory和fileDetails。在应用程序入口点,初始化了路由引擎,并通过Router.Navigate.Execute方法导航到主界面。
当用户在主界面点击文件夹时,MainViewModel中的命令会触发路由导航,将DirectoryViewModel传递给路由系统,路由系统根据配置的路径,显示对应的文件夹子目录视图 。同样,当点击文件时,会导航到文件详情视图。
通过使用 Avalonia+ReactiveUI 跨平台路由,该文件管理应用实现了在不同平台上的一致导航体验,用户可以流畅地在各个界面之间切换,提高了应用的可用性和用户满意度 。
5.2 优化技巧:提升性能与用户体验
在实际项目中,为了提升路由性能和用户体验,可以采用以下优化技巧:
视图缓存:对于一些频繁访问且内容相对稳定的视图,可以采用视图缓存机制。在 ReactiveUI 中,可以通过自定义的缓存策略来实现。当用户首次访问某个视图时,将该视图及其 ViewModel 缓存起来,当用户再次访问时,直接从缓存中获取,而不需要重新创建。这样可以减少视图创建和初始化的开销,提高页面跳转的速度。在一个新闻应用中,新闻分类页面的内容在一段时间内不会有太大变化,就可以对该页面的视图和 ViewModel 进行缓存。
延迟加载:对于一些不常用或者加载开销较大的视图,可以采用延迟加载的方式。在路由配置中,可以设置当用户真正需要访问某个视图时,才进行加载。这样可以避免在应用启动时加载过多不必要的资源,提高应用的启动速度。在一个电商应用中,商品评论页面可能只有在用户点击商品详情中的评论按钮时才需要加载,就可以对该页面进行延迟加载。
动画过渡:为了提升用户体验,可以在页面跳转时添加动画过渡效果。Avalonia 提供了丰富的动画支持,可以通过Storyboard等方式实现页面切换的动画效果,如淡入淡出、滑动等。在一个社交应用中,当用户从聊天列表页面跳转到聊天详情页面时,可以添加一个滑动的动画效果,让页面切换更加自然流畅,给用户带来更好的视觉体验。
错误处理:在路由过程中,可能会出现各种错误,如视图模型无法创建、路由路径错误等。为了保证应用的稳定性和用户体验,需要对这些错误进行妥善处理。可以在路由相关的代码中添加 try-catch 块,捕获异常并进行友好的提示。在用户点击导航按钮时,如果由于某种原因无法导航到目标页面,应用可以弹出一个提示框,告知用户发生了错误,并提供一些可能的解决方案。
六、总结与展望
在本次探索中,我们深入了解了 Avalonia 与 ReactiveUI 这对强大组合在跨平台路由开发中的应用。从搭建开发环境,到创建视图、配置路由,再到在实际项目中的应用与优化,每一步都见证了它们为跨平台开发带来的高效与便捷 。
Avalonia 凭借其卓越的跨平台能力,使应用能够在多种操作系统上运行,为开发者节省了大量的时间和精力。而 ReactiveUI 的响应式编程和 MVVM 模式,让 UI 交互更加流畅自然,同时也提升了代码的可读性和可维护性。两者的结合,让跨平台路由的实现变得更加优雅和高效 。
在实际项目中,通过合理运用视图缓存、延迟加载、动画过渡和错误处理等优化技巧,我们能够进一步提升应用的性能和用户体验。这不仅让用户在使用应用时感受到更加流畅和自然的交互,也为应用的长期发展奠定了坚实的基础 。
展望未来,随着技术的不断发展,跨平台开发的需求将持续增长。Avalonia 和 ReactiveUI 也将不断演进和完善,为开发者提供更多强大的功能和工具。我们有理由相信,在未来的跨平台开发领域,Avalonia+ReactiveUI 将继续发挥重要作用,为开发者带来更多的惊喜和可能 。无论是构建功能复杂的企业级应用,还是充满创意的小型项目,这对组合都将成为开发者的得力助手,助力他们在跨平台开发的道路上越走越远,创造出更加出色的应用程序 。
相关文章:
Avalonia+ReactiveUI跨平台路由:打造丝滑UI交互的奇幻冒险
一、引言 在当今数字化时代,跨平台应用开发已成为大势所趋。开发者们迫切需要一种高效、灵活的方式,能够让应用程序在不同操作系统上无缝运行,为用户提供一致的体验。Avalonia 和 ReactiveUI 的组合,宛如一对天作之合的舞者&…...
Ansible自动化运维实战--通过role远程部署nginx并配置(8/8)
文章目录 1、准备工作2、创建角色结构3、编写任务4、准备配置文件(金甲模板)5、编写变量6、编写处理程序7、编写剧本8、执行剧本Playbook9、验证-游览器访问每台主机的nginx页面 在 Ansible 中,使用角色(Role)来远程部…...
H264原始码流格式分析
1.H264码流结构组成 H.264裸码流(Raw Bitstream)数据主要由一系列的NALU(网络抽象层单元)组成。每个NALU包含一个NAL头和一个RBSP(原始字节序列载荷)。 1.1 H.264码流层次 H.264码流的结构可以分为两个层…...
批量解密,再也没有任何限制了
有的时候我们在网上下载了PDF文档。发现没有办法进行任何的操作,就连打印权限都没有。今天给大家介绍的这个软件可以一键帮你进行PDF解密,非常方便,完全免费。 PDF智能助手 批量解密PDF文件 这个软件不是很大,只有10MBÿ…...
认识小程序的基本组成结构
1.基本组成结构 2.页面的组成部分 3.json配置文件 4.app.json文件(全局配置文件) 5.project.config.json文件 6.sitemap.json文件 7.页面的.json配置文件 通过window节点可以控制小程序的外观...
模型I/O
文章目录 什么是模型I/O模型I/O功能之输出解析器输出解析器的功能输出解析器的使用Pydantic JSON输出解析器结构化输出解析器 什么是模型I/O 模型I/O在所有LLM应用中,核心元素无疑都是模型本身。与模型进行有效的交互是实现高效、灵活和可扩展应用的关键。LangChain…...
DeepSeek模型:开启人工智能的新篇章
DeepSeek模型:开启人工智能的新篇章 在当今快速发展的技术浪潮中,人工智能(AI)已经成为了推动社会进步和创新的核心力量之一。而DeepSeek模型,作为AI领域的一颗璀璨明珠,正以其强大的功能和灵活的用法&…...
git push到远程仓库时无法推送大文件
一、错误 remote: Error: Deny by project hooks setting ‘default’: size of the file ‘scientific_calculator’, is 164 MiB, which has exceeded the limited size (100 MiB) in commit ‘4c91b7e3a04b8034892414d649860bf12416b614’. 二、原因 本地提交过大文件&am…...
初识ExecutorService
设计目的 ExecutorService是Java并发包(java.util.concurrent)的一部分,旨在提供一种更高层次的抽象来管理线程和任务执行。它解决了手动创建和管理线程带来的复杂性和资源浪费问题,通过复用固定数量的线程池来处理大量短生命周期的任务,从而…...
初二回娘家
昨天下午在相亲相爱一家人群里聊天,今天来娘家拜年。 聊天结束后,开始准备今天的菜肴,梳理了一下,凉菜,热菜,碗菜。 上次做菜,粉丝感觉泡的不透,有的硬,这次使用开水浸泡…...
js基础(黑马程序员)
Web APIs(day6) 一、正则表达式 1.介绍 正则表达式(Regular Expression):是用于匹配字符串中字符组合的模式。在 JavaScript中,正则表达式也是对象 通常用来查找、替换那些符合正则表达式的文本&#x…...
Java---猜数字游戏
本篇文章所实现的是Java经典的猜数字游戏 , 运用简单代码来实现基本功能 目录 一.题目要求 二.游戏准备 三.代码实现 一.题目要求 随机生成一个1-100之间的整数(可以自己设置区间),提示用户猜测,猜大提示"猜大了",…...
Oracle Primavera P6 最新版 v24.12 更新 2/2
目录 一. 引言 二. P6 EPPM 更新内容 1. 用户管理改进 2. 更轻松地标准化用户设置 3. 摘要栏标签汇总数据字段 4. 将里程碑和剩余最早开始日期拖到甘特图上 5. 轻松访问审计数据 6. 粘贴数据时排除安全代码 7. 改进了状态更新卡片视图中的筛选功能 8. 直接从活动电子…...
【React】 react路由
这一篇文章的重点在于将React关于路由的问题都给搞清楚。 一个路由就是一个映射关系,key:value。key是路径,value 可能是function或者component。 安装react-router-dom包使用路由服务,我这里想要用的是6版本的包,因此后面加”6&q…...
Linux的常用指令的用法
目录 Linux下基本指令 whoami ls指令: 文件: touch clear pwd cd mkdir rmdir指令 && rm 指令 man指令 cp mv cat more less head tail 管道和重定向 1. 重定向(Redirection) 2. 管道(Pipes&a…...
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.18 逻辑运算引擎:数组条件判断的智能法则
1.18 逻辑运算引擎:数组条件判断的智能法则 1.18.1 目录 #mermaid-svg-QAFjJvNdJ5P4IVbV {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-QAFjJvNdJ5P4IVbV .error-icon{fill:#552222;}#mermaid-svg-QAF…...
C语言实现库函数strlen
size_t是 unsigned int fgets会读入\n,用strcspn函数除去 assert判读指针是否为空指针,使用前要引头文件<assert.h> #include <stdio.h> #include <assert.h> size_t mystrlen(const char* str) {assert(str);size_t count 0;while …...
18 大量数据的异步查询方案
在分布式的应用中分库分表大家都已经熟知了。如果我们的程序中需要做一个模糊查询,那就涉及到跨库搜索的情况,这个时候需要看中间件能不能支持跨库求交集的功能。比如mycat就不支持跨库查询,当然现在mycat也渐渐被摒弃了(没有处理笛卡尔交集的…...
FastExcel使用详解
文章目录 FastExcel使用详解一、引言二、环境准备与依赖引入1、Maven 依赖引入2、实体类定义 三、核心操作:读写 Excel1、读取 Excel1.1 自定义监听器1.2 读取文件 2、写入 Excel2.1 简单写入2.2 模板写入 四、Spring Boot 集成示例1、文件上传(导入&…...
深度学习python基础(第四节) 元组、字符串、集合和字典
本节主要介绍元组,字符串,集合,字典的基本语法定义,以及相关的操作. 元组的定义和操作 元组一旦定义完成就不可修改. """ # 定义元组字面量 (元素,元素,....,元素) # 元素可以不同的数据类型# 定义元组变量 变量名称 (元素,…...
QT串口通信,实现单个温湿度传感器数据的采集
1、硬件设备 RS485中继器(一进二出),usb转485模块、电源等等 => 累计115元左右。 2、核心代码 #include "MainWindow.h" #include "ui_MainWindow.h"MainWindow::...
绘制决策树尝试3
目录 代码解读AI 随机状态 种子 定义决策树回归模型 tree的decision regressor fit 还可用来预测 export 效果图 我的X只有一个特征 为何这么多分支 ??? 这是CART回归 CART回归 为什么说代码是CART回归? 不是所有的决…...
【逻辑学导论第15版】A. 推理
识别下列语段中的前提与结论。有些前提确实支持结论,有些并不支持。请注意,前提可能直接或间接地支持结论,而简单的语段也可能包含不止一个论证。 例题: 1.管理得当的民兵组织对于一个自由国家的安全是必需的,因而人民…...
qt-C++笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphicsRectItem的区别
qt-C笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphicsRectItem的区别 code review! 参考笔记 1.qt-C笔记之重写QGraphicsItem的paint方法(自定义QGraphicsItem) 文章目录 qt-C笔记之QLine、QRect、QPainterPath、和自定义QGraphicsPathItem、QGraphic…...
[Java]泛型(二)泛型方法
1.定义 在 Java 中,泛型方法是指在方法声明中使用泛型类型参数的一种方法。它使得方法能够处理不同类型的对象,而不需要为每种类型写多个方法,从而提高代码的重用性。 泛型方法与泛型类不同,泛型方法的类型参数仅仅存在于方法的…...
ProfibusDP主机与从机交互
ProfibusDP 主机SD2索要数据下发:68 08 F7 68 01 02 03 21 05 06 07 08 1C 1668:SD2 08:LE F7:LEr 68:SD2 01:目的地址 02:源地址 03:FC_CYCLIC_DATA_EXCHANGE功能码 21:数据地址 05,06,07,08&a…...
jQuery小游戏(二)
jQuery小游戏(二) 今天是新年的第二天,本人在这里祝大家,新年快乐,万事胜意💕 紧接jQuery小游戏(一)的内容,我们开始继续往下咯😜 游戏中使用到的方法 key…...
【MQ】如何保证消息队列的高可用?
RocketMQ NameServer集群部署 Broker做了集群部署 主从模式 类型:同步复制、异步复制 主节点返回消息给客户端的时候是否需要同步从节点 Dledger:要求至少消息复制到半数以上的节点之后,才给客户端返回写入成功 slave定时从master同步数据…...
简易计算器(c++ 实现)
前言 本文将用 c 实现一个终端计算器: 能进行加减乘除、取余乘方运算读取命令行输入,输出计算结果当输入表达式存在语法错误时,报告错误,但程序应能继续运行当输出 ‘q’ 时,退出计算器 【简单演示】 【源码位置】…...
AI大模型开发原理篇-4:神经概率语言模型NPLM
神经概率语言模型(NPLM)概述 神经概率语言模型(Neural Probabilistic Language Model, NPLM) 是一种基于神经网络的语言建模方法,它将传统的语言模型和神经网络结合在一起,能够更好地捕捉语言中的复杂规律…...
SpringBoot 基础特性
SpringBoot 基础特性 SpringApplication 相关特性 自定义 banner 在主配置文件写 banner.txt 的地址 #也可以不写默认路径就是 banner.txt #从类路径下找 banner #类路径就是 编译的target 目录 还有导入的第三方类路径。 spring.banner.locationclasspath:banner.txt#控制…...
网站快速收录:提高页面加载速度的重要性
本文转自:百万收录网 原文链接:https://www.baiwanshoulu.com/32.html 网站快速收录中,提高页面加载速度具有极其重要的意义。以下从多个方面详细阐述其重要性: 一、提升用户体验 减少用户等待时间:页面加载速度直接…...
如何使用formlinker,重构微软表单创建的数字生产力法则?
仅需三步:上传文件-下载文件-导入文件到微软表单 凌晨两点的格式炼狱:被浪费的300万小时人类创造力 剑桥大学的实验室曾捕捉到一组震撼数据:全球教育工作者每年花在调整试题格式上的时间,足够建造3座迪拜哈利法塔。当北京某高校的…...
从零搭建一个Vue3 + Typescript的脚手架——day3
3.项目拓展配置 (1).配置Pinia Pinia简介 Pinia 是 Vue.js 3 的状态管理库,它是一个轻量级、灵活、易于使用的状态管理库。Pinia 是 Vue.js 3 的官方状态管理库,它可以帮助开发者更好地管理应用的状态。Pinia 是一个开源项目,它有丰富的文档…...
Three.js实战项目02:vue3+three.js实现汽车展厅项目
文章目录 实战项目02项目预览项目创建初始化项目模型加载与展厅灯光加载汽车模型设置灯光材质设置完整项目下载实战项目02 项目预览 完整项目效果: 项目创建 创建项目: pnpm create vue安装包: pnpm add three@0.153.0 pnpm add gsap初始化项目 修改App.js代码&#x…...
Linux——网络(tcp)
文章目录 目录 文章目录 前言 一、TCP逻辑 1. 面向连接 三次握手(建立连接) 四次挥手(关闭连接) 2. 可靠性 3. 流量控制 4. 拥塞控制 5. 基于字节流 6. 全双工通信 7. 状态机 8. TCP头部结构 9. TCP的应用场景 二、编写tcp代码函数…...
Ubuntu Server 安装 XFCE4桌面
Ubuntu Server没有桌面环境,一些软件有桌面环境使用起来才更加方便,所以我尝试安装桌面环境。常用的桌面环境有:GNOME、KDE Plasma、XFCE4等。这里我选择安装XFCE4桌面环境,主要因为它是一个极轻量级的桌面环境,适合内…...
分享|通过Self-Instruct框架将语言模型与自生成指令对齐
结论 在大型 “指令调整” 语言模型依赖的人类编写指令数据存在数量、多样性和创造性局限, 从而阻碍模型通用性的背景下, Self - Instruct 框架, 通过 自动生成 并 筛选指令数据 微调预训练语言模型, 有效提升了其指令遵循能…...
指针空值——nullptr(C++11)——提升指针安全性的利器
C11引入的nullptr是对指针空值的正式支持,它提供了比传统NULL指针更加安全和明确的指针空值表示方式。在C语言中,指针操作是非常基础且常见的,而如何安全地处理指针空值,一直是开发者关注的重要问题。本文将详细讲解nullptr的引入…...
C++游戏开发
C 是游戏开发中广泛使用的编程语言,因其高性能、灵活性和对硬件的直接控制能力而备受青睐。以下是 C 游戏开发的一些关键点: 1. 游戏引擎 Unreal Engine:使用 C 作为主要编程语言,适合开发高质量 3D 游戏。Unity:虽然…...
【Docker】ubuntu中 Docker的使用
之前记录了 docker的安装 【环境配置】ubuntu中 Docker的安装; 本篇博客记录Dockerfile的示例,docker 的使用,包括镜像的构建、容器的启动、docker compose的使用等。 当安装好后,可查看docker的基本信息 docker info ## 查…...
Linux C openssl aes-128-cbc demo
openssl 各版本下载 https://openssl-library.org/source/old/index.html#include <stdio.h> #include <string.h> #include <openssl/aes.h> #include <openssl/rand.h> #include <openssl/evp.h>#define AES_KEY_BITS 128 #define GCM_IV_SIZ…...
【卫星通信】链路预算方法
本文介绍卫星通信中的链路预算方法,应该也适用于地面通信场景。 更多内容请关注gzh【通信Online】 文章目录 下行链路预算卫星侧参数信道参数用户侧参数 上行链路预算链路预算计算示例 下行链路预算 卫星侧参数 令卫星侧天线数为 M t M_t Mt,每根天线…...
【Elasticsearch】 索引模板 ignore_missing_component_templates
解释 ignore_missing_component_templates 配置 在Elasticsearch中,ignore_missing_component_templates 是一个配置选项,用于处理索引模板中引用的组件模板可能不存在的情况。当您创建一个索引模板时,可以指定一个或多个组件模板࿰…...
Github 2025-01-30 Go开源项目日报 Top10
根据Github Trendings的统计,今日(2025-01-30统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Go项目10Ollama: 本地大型语言模型设置与运行 创建周期:248 天开发语言:Go协议类型:MIT LicenseStar数量:42421 个Fork数量:2724 次关注人…...
Linux 下注册分析(4)
系列文章目录 Linux 设备树 Linux 下注册分析(1) Linux 下注册分析(2) Linux 下注册分析(3) Linux 下注册分析(4) 文章目录 系列文章目录1、device_create简介device_createdevice_c…...
PhotoShop中JSX编辑器安装
1.使用ExtendScript Tookit CC编辑 1.安装 打开CEP Resource链接: CEP-Resources/ExtendScript-Toolkit at master Adobe-CEP/CEP-Resources (github.com) 将文件clone到本地或者下载到本地 点击AdobeExtendScriptToolKit_4_Ls22.exe安装,根据弹出的…...
目前市场主流的AI PC对于大模型本地部署的支持情况分析-Deepseek
以下是目前市场主流AI PC对**大模型本地部署支持情况**的综合分析,结合硬件能力、软件生态及厂商动态进行总结: --- ### **一、硬件配置与算力支持** 1. **核心处理器架构** - **异构计算方案(CPUGPUNPU)**:主流…...
51单片机开发:独立键盘实验
实验目的:按下键盘1时,点亮LED灯1。 键盘原理图如下图所示,可见,由于接GND,当键盘按下时,P3相应的端口为低电平。 键盘按下时会出现抖动,时间通常为5-10ms,代码中通过延时函数delay…...
微服务网关鉴权之sa-token
目录 前言 项目描述 使用技术 项目结构 要点 实现 前期准备 依赖准备 统一依赖版本 模块依赖 配置文件准备 登录准备 网关配置token解析拦截器 网关集成sa-token 配置sa-token接口鉴权 配置satoken权限、角色获取 通用模块配置用户拦截器 api模块配置feign…...