当前位置: 首页 > news >正文

CommunityToolkit.Mvvm详解

属性可视化

给一个属性添加ObservableProperty就可以可视化了

[ObservableProperty]
private string currentNameInfo;[ObservableProperty]
private string currentClassInfo;[ObservableProperty]
private string currentPhoneInfo;

xaml中只需要绑定大写的属性就可以了

<StackPanel Orientation="Horizontal"Grid.ColumnSpan="2"Grid.Row="1"><TextBlock Width="200"Height="40"FontSize="30"Text="{Binding CurrentNameInfo,TargetNullValue=null}"HorizontalAlignment="Center" /><TextBlock Width="200"Height="40"FontSize="30"Text="{Binding CurrentClassInfo,TargetNullValue=null}"HorizontalAlignment="Center" /><TextBlock Grid.Row="1"Width="200"Height="40"FontSize="30"Text="{Binding CurrentPhoneInfo,TargetNullValue=null}"HorizontalAlignment="Center" />
</StackPanel>

命令

可以用RelayCommand来简便的指定命令

[RelayCommand]
void AddButtonClick()
{Student student = new Student(NameProperty, ClassProperty, PhoneProperty);WeakReferenceMessenger.Default.Send(new ValueChangedMessage<Student>(student));
}

xaml中只需要绑定方法名加Command就可以了

<Button Grid.Row="3"Content="存入列表"Height="40"IsEnabled="{Binding CanAllow}"Command="{Binding AddButtonClickCommand}"Width="100" />

Message

传递自定义类

两个ViewModel之间传递自定义类

1.定义一个自定义的类

public record StringMessage(string message);

2.注册自定义类

通过WeakReferenceMessenger来注册StringMessage

public partial class ReciverUCViewModel:ObservableObject
{[ObservableProperty]private string? recivetxt;public ReciverUCViewModel(){WeakReferenceMessenger.Default.Register<StringMessage>(this, Receive);}private void Receive(object recipient, StringMessage message){Recivetxt = message.message;}
}

3.发送消息

public partial class SenderUCViewModel : ObservableObject
{//[ObservableProperty]//private string? sendertxt="null";private string? sendertxt;public string Sendertxt{get { return sendertxt; }set{if (SetProperty(ref sendertxt, value)){WeakReferenceMessenger.Default.Send(new StringMessage(value));}}}
}

传递PropertyChangedMessage

接收

public partial class ReciverUCViewModel:ObservableObject
{[ObservableProperty]private string? recivetxt;public ReciverUCViewModel(){WeakReferenceMessenger.Default.Register<PropertyChangedMessage<string>>(this,Receive);}private void Receive(object recipient, PropertyChangedMessage<string> message){Recivetxt = message.NewValue;}
}

可以用IRecipient来优化简便代码

public partial class ReciverUCViewModel : ObservableObject, IRecipient<PropertyChangedMessage<string>>
{[ObservableProperty]private string? recivetxt;public ReciverUCViewModel(){WeakReferenceMessenger.Default.Register(this);}public void Receive(PropertyChangedMessage<string> message){Recivetxt = message.NewValue;}
}

发送

public partial class SenderUCViewModel : ObservableObject
{//[ObservableProperty]//private string? sendertxt="null";private string? sendertxt;public string Sendertxt{get { return sendertxt; }set{if (SetProperty(ref sendertxt, value)){WeakReferenceMessenger.Default.Send(new PropertyChangedMessage<string>(this,nameof(Sendertxt),default,value));}}}
}

传递RequestMessage

发送

public partial class SenderUCViewModel : ObservableObject
{//[ObservableProperty]//private string? sendertxt="null";private string? sendertxt;public string Sendertxt{get { return sendertxt; }set{if (SetProperty(ref sendertxt, value)){var res=WeakReferenceMessenger.Default.Send(new RequestMessage<string>());sendertxt = res.Response;}}}
}

接收

public partial class ReciverUCViewModel : ObservableObject,IRecipient<RequestMessage<string>>
{[ObservableProperty]private string? recivetxt;public ReciverUCViewModel(){WeakReferenceMessenger.Default.Register(this);}public void Receive(RequestMessage<string> message){recivetxt = message.ToString();message.Reply("hello");}}

简化

ObservableRecipient

可以替代ObservableObject,还能简化注册功能,设置属性IsActive=true就可以免注册

IRecipient

可以直接指明,要接收的类型

public partial class ReciverUCViewModel : ObservableRecipient,IRecipient<PropertyChangedMessage<string>>
{[ObservableProperty]private string? recivetxt;public ReciverUCViewModel(){//WeakReferenceMessenger.Default.Register(this);this.IsActive = true;}public void Receive(PropertyChangedMessage<string> message){Recivetxt = message.NewValue;}
}

心得

对于发送的相同类型的message,可以通过属性的名称来区分,分别处理

发送

public partial class FormUCViewModel:ObservableRecipient
{private string nameProperty;public string NameProperty{get { return nameProperty; }set {if (SetProperty(ref nameProperty, value)){WeakReferenceMessenger.Default.Send(new PropertyChangedMessage<string>(this, nameof(NameProperty), default, value));}}}private string classProperty;public string ClassProperty{get { return classProperty; }set {if (SetProperty(ref classProperty, value)){WeakReferenceMessenger.Default.Send(new PropertyChangedMessage<string>(this, nameof(ClassProperty), default, value));}}}private string phoneProperty;public string PhoneProperty{get { return phoneProperty; }set {if (SetProperty(ref phoneProperty, value)){WeakReferenceMessenger.Default.Send(new PropertyChangedMessage<string>(this, nameof(PhoneProperty), default, value));}}}}

接收

public partial class MainWindowViewModel:ObservableRecipient,IRecipient<PropertyChangedMessage<string>>
{[ObservableProperty]private string currentNameInfo;[ObservableProperty]private string currentClassInfo;[ObservableProperty]private string currentPhoneInfo;public MainWindowViewModel(){this.IsActive = true;}public void Receive(PropertyChangedMessage<string> message){// 根据消息的属性名称更新相应的属性switch (message.PropertyName){case nameof(FormUCViewModel.NameProperty):CurrentNameInfo = message.NewValue;break;case nameof(FormUCViewModel.ClassProperty):CurrentClassInfo = message.NewValue;break;case nameof(FormUCViewModel.PhoneProperty):CurrentPhoneInfo = message.NewValue;break;}}
}

功能展示

传递变化的属性

输入框代码

属性变化,底下的TextBlock也会跟着变化

ObservableProperty可以添加可视化属性,让前端绑定

NotifyPropertyChangedRecipients可以通知订阅了的类,属性变化

public partial class FormUCViewModel:ObservableRecipient
{//现代化写法[ObservableProperty][NotifyPropertyChangedRecipients]private string nameProperty;//现代化写法[ObservableProperty][NotifyPropertyChangedRecipients]private string classProperty;//老式写法private string phoneProperty;public string PhoneProperty{get { return phoneProperty; }set {if (SetProperty(ref phoneProperty, value)){WeakReferenceMessenger.Default.Send(new PropertyChangedMessage<string>(this, nameof(PhoneProperty), default, value));}}}}

显示的TextBlock代码

属性变化接收到不同的message,可以用message.PropertyName来区分接收的属性

public partial class MainWindowViewModel:ObservableRecipient,IRecipient<PropertyChangedMessage<string>>
{[ObservableProperty]private string currentNameInfo;[ObservableProperty]private string currentClassInfo;[ObservableProperty]private string currentPhoneInfo;public MainWindowViewModel(){this.IsActive = true;}public void Receive(PropertyChangedMessage<string> message){// 根据消息的属性名称更新相应的属性switch (message.PropertyName){case nameof(FormUCViewModel.NameProperty):CurrentNameInfo = message.NewValue;break;case nameof(FormUCViewModel.ClassProperty):CurrentClassInfo = message.NewValue;break;case nameof(FormUCViewModel.PhoneProperty):CurrentPhoneInfo = message.NewValue;break;}}
}

image-20250509213207417

ToggleButton用NotifyPropertyChangedRecipients来通知订阅方属性变化了

[ObservableProperty]
[NotifyPropertyChangedRecipients]
private bool isAdd;

xaml

<ToggleButton IsChecked="{Binding IsAdd}"Grid.Row="1"Margin="5,8"HorizontalAlignment="Center"Style="{StaticResource ToggleButtonSwitch}"hc:VisualElement.HighlightBrush="{DynamicResource DangerBrush}" />

Receive接收到了数据要用(message.PropertyName来判断一下,以防接收到别的乱七八糟的数据(必须要弄,这个报错搞死我了

public partial class FormUCViewModel:ObservableRecipient,IRecipient<PropertyChangedMessage<bool>>
{public FormUCViewModel(){IsActive = true;}[ObservableProperty]private bool canAllow;public void Receive(PropertyChangedMessage<bool> message){if (message.PropertyName == nameof(ListUCViewModel.IsAdd)){CanAllow = message.NewValue;}   }}

xaml

<Button Grid.Row="3"Content="存入列表"Height="40"IsEnabled="{Binding CanAllow}"Command="{Binding AddButtonClickCommand}"Width="100" />

image-20250509154736779

传递普通的值

点击按钮,把信息传入listbox

表单代码

public partial class FormUCViewModel:ObservableRecipient
{[ObservableProperty][NotifyPropertyChangedRecipients]private string nameProperty;[ObservableProperty][NotifyPropertyChangedRecipients]private string classProperty;private string phoneProperty;public string PhoneProperty{get { return phoneProperty; }set {if (SetProperty(ref phoneProperty, value)){WeakReferenceMessenger.Default.Send(new PropertyChangedMessage<string>(this, nameof(PhoneProperty), default, value));}}}[RelayCommand]void AddButtonClick(){Student student = new Student(NameProperty, ClassProperty, PhoneProperty);WeakReferenceMessenger.Default.Send(new ValueChangedMessage<Student>(student));}}

列表代码

public class ListUCViewModel: ObservableRecipient,IRecipient<ValueChangedMessage<Student>>
{public ListUCViewModel(){lists.Add(new Student("张三", "三班", "123123123"));lists.Add(new Student("李四", "四班", "534343434"));lists.Add(new Student("王五", "六班", "876453534"));lists.Add(new Student("赵六", "二班", "123645634"));IsActive = true;}public ObservableCollection<Student> lists { get; set; } = new ObservableCollection<Student>();public void Receive(ValueChangedMessage<Student> message){lists.Add(message.Value);}
}

依赖注入

安装包

Install-Package Microsoft.Extensions.Hosting
Install-Package Microsoft.Extensions.DependencyInjection

编写App.xaml.cs

public partial class App : Application
{public IHost _host;public App(){_host = Host.CreateDefaultBuilder().ConfigureServices((context, services) =>{services.AddTransient<FormUCViewModel>();services.AddTransient<ListUCViewModel>();services.AddTransient<MainWindowViewModel>();services.AddTransient<ReciverUCViewModel>();services.AddTransient<SenderUCViewModel>();services.AddTransient<HelloServe>();}).Build();}protected override void OnStartup(StartupEventArgs e){base.OnStartup(e);var mainWindow = new MainWindow();var mainViewModel = _host.Services.GetRequiredService<MainWindowViewModel>();mainWindow.DataContext = mainViewModel;mainWindow.Show();}protected override void OnExit(ExitEventArgs e){base.OnExit(e);_host.Dispose();}
}

veiw界面更改数据上下文的引用方式

public partial class ListUC : UserControl
{public ListUC(){InitializeComponent();//this.DataContext=new ListUCViewModel();//修改为依赖注入的方式var app = Application.Current as App;if (app != null){var viewModel = app._host.Services.GetRequiredService<ListUCViewModel>();this.DataContext = viewModel;}}
}

相关文章:

CommunityToolkit.Mvvm详解

属性可视化 给一个属性添加ObservableProperty就可以可视化了 [ObservableProperty] private string currentNameInfo;[ObservableProperty] private string currentClassInfo;[ObservableProperty] private string currentPhoneInfo;xaml中只需要绑定大写的属性就可以了 &l…...

密码学--AES

一、实验目的 1、完成AES算法中1轮加密和解密操作 2、掌握AES的4个基本处理步骤 3、理解对称加密算法的“对称”思想 二、实验内容 1、题目内容描述 &#xff08;1&#xff09;利用C语言实现字节代换和逆向字节代换&#xff0c;字节查S盒代换 &#xff08;2&#xff09;利…...

操作系统的初步了解

目录 引言&#xff1a;什么是操作系统&#xff1f; 一、设计操作系统的目的 二、操作系统是做什么的&#xff1a; 操作系统主要有四大核心任务&#xff1a; 1. 管理硬件 2. 运行软件 3. 存储数据 4. 提供用户界面 如何理解操作系统的管理呢&#xff1f; 1. 什么是操作…...

边缘计算:技术概念与应用详解

引言 随着物联网&#xff08;IoT&#xff09;、5G 和人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;传统的云计算架构在处理海量数据和实时计算需求时逐渐显现出瓶颈。边缘计算&#xff08;Edge Computing&#xff09;作为一种新兴的计算范式&#xff0c;通过将计…...

C++进阶--红黑树的实现

文章目录 红黑树的实现红黑树的概念红黑树的规则红黑树的效率 红黑树的实现红黑树的结构红黑树的插入变色单旋&#xff08;变色&#xff09;双旋&#xff08;变色&#xff09; 红黑树的查找红黑树的验证 总结&#xff1a;结语 很高兴和大家见面&#xff0c;给生活加点impetus&a…...

[C++类和对象]类和对象的引入

面向过程和面向对象 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用来逐步解决问题 C是基于面向对象的,关注的是对象,将一件事情分成不同的对象,靠对象之间完成交互 类的引入 C语言结构体中只能定义变量,在C中,结构体不仅仅可以定义变量,而且可以定义函…...

YOLOv12云端GPU谷歌免费版训练模型

1.效果 2.打开 https://colab.research.google.com/?utm_sourcescs-index 3.上传代码 4.解压 !unzip /content/yolov12-main.zip -d /content/yolov12-main 5.进入yolov12-main目录 %cd /content/yolov12-main/yolov12-main 6.安装依赖库 !pip install -r requirements.…...

课程审核流程揭秘:确保内容合规与用户体验

业务流程 为什么课程审核通过才可以发布呢&#xff1f; 这样做为了防止课程信息有违规情况&#xff0c;课程信息不完善对网站用户体验也不好&#xff0c;课程审核不仅起到监督作用&#xff0c;也是 帮助教学机构规范使用平台的手段。 如果流程复杂用工作流 说明如下&#xff…...

【LangChain高级系列】LangGraph第一课

前言 我们今天直接通过一个langgraph的基础案例&#xff0c;来深入探索langgraph的核心概念和工作原理。 基本认识 LangGraph是一个用于构建具有LLMs的有状态、多角色应用程序的库&#xff0c;用于创建代理和多代理工作流。与其他LLM框架相比&#xff0c;它提供了以下核心优…...

ATH12K 驱动框架

ATH12K 驱动框架 ath12k驱动框架及模块交互逻辑详解1. 总体架构2. 关键数据结构2.1 核心数据结构2.2 虚拟接口数据结构3. 硬件抽象层(HAL)4. 无线管理接口(WMI)5. 主机目标通信(HTC)6. 数据路径(DP)6.1 发送路径(TX)6.2 接收路径(RX)7. 多链路操作(MLO)8. 初始化和工作流程8.1 …...

CMA认证对象?CMA评审依据,CMA认证好处

CMA认证对象 CMA&#xff08;中国计量认证&#xff0c;China Metrology Accreditation&#xff09;的认证对象主要是第三方检测机构和实验室&#xff0c;包括&#xff1a; 独立检测机构&#xff1a;如环境监测站、产品质量检验所、食品药品检测机构等。 企业内部实验室&#…...

依赖关系-根据依赖关系求候选码

关系模式R&#xff08;U, F&#xff09;, U{}&#xff0c;F是R的函数依赖集&#xff0c;可以将属性分为4类&#xff1a; L: 仅出现在依赖集F左侧的属性 R: 仅出现在依赖集F右侧的属性 LR: 在依赖集F左右侧都出现的属性 NLR: 在依赖集F左右侧都未出现的属性 结论1: 若X是L类…...

解决应用程序在JAR包中运行时无法读取类路径下文件的问题

问题情景 java应用程序在IDE运行正常&#xff0c;打成jar包后执行却发生异常&#xff1a; java.io.FileNotFoundException: class path resource [cert/sync_signer_pri_test.key] cannot be resolved to absolute file path because it does not reside in the file system:…...

第十六届蓝桥杯B组第二题

当时在考场的时候这一道题目 无论我是使用JAVA的大数&#xff08;BIGTHGER&#xff09;还是赛后 使用PY 都是没有运行出来 今天也是突发奇想在B站上面搜一搜 看了才知道这也是需要一定的数学思维 通过转换 设X来把运算式精简化 避免运行超时 下面则是代码 public class lanba…...

龙虎榜——20250509

上证指数今天缩量&#xff0c;整体跌多涨少&#xff0c;走势处于日线短期的高位~ 深证指数今天缩量小级别震荡&#xff0c;大盘股表现更好~ 2025年5月9日龙虎榜行业方向分析 一、核心行业方向 军工航天 • 代表个股&#xff1a;航天南湖、天箭科技、襄阳轴承。 • 驱动逻辑…...

node提示node:events:495 throw er解决方法

前言 之前开发的时候喜欢使用高版本&#xff0c;追求新的东西&#xff0c;然后回头运行一下之前的项目提示如下 项目技术栈&#xff1a;node egg 报错 node:events:495 throw er; // Unhandled error event ^ Error: ENOENT: no such file or directory, scandir F:\my\gi…...

OrangePi Zero 3学习笔记(Android篇)4 - eudev编译(获取libudev.so)

目录 1. Ubuntu中编译 2. NDK环境配置 3. 编译 4. 安装 这部分主要是为了得到libudev&#xff08;因为原来的libudev已经不更新了&#xff09;&#xff0c;eudev的下载地址如下&#xff1a; https://github.com/gentoo/eudev 相应的代码最好是在Ubuntu中先编译通过&#…...

[AI ][Dify] Dify Tool 插件调试流程详解

在使用 Dify 进行插件开发时,调试是必不可少的环节。Dify 提供了远程服务调试的能力,让开发者可以快速验证插件功能和交互逻辑。本文将详细介绍如何配置环境变量进行插件调试,并成功在插件市场中加载调试状态的插件。 一、调试环境配置 在 Dify 的插件调试过程中,我们需要…...

learning ray之ray强化学习/超参调优和数据处理

之前我们掌握了Ray Core的基本编程&#xff0c;我们已经学会了如何使用Ray API。现在&#xff0c;让我们将这些知识应用到一个更实际的场景中——构建一个强化学习项目&#xff0c;并且利用Ray来加速它。 我们的目标是&#xff0c;通过Ray的任务和Actor&#xff0c;将一个简单…...

gpu硬件,gpu驱动,cuda,CUDA Toolkit,cudatoolkit,cudnn,nvcc概念解析

组件角色依赖关系GPU硬件无CUDA编程模型/平台需NVIDIA GPU和驱动CUDA Toolkit开发工具包&#xff08;含NVCC、库等&#xff09;需匹配GPU驱动和CUDA版本cuDNN深度学习加速库需CUDA ToolkitNVCCCUDA代码编译器包含在CUDA Toolkit中 GPU硬件&#xff1a; 硬件层面的图形处理器&…...

【C/C++】范围for循环

&#x1f4d8; C 范围 for 循环详解&#xff08;Range-based for loop&#xff09; 一、什么是范围 for 循环&#xff1f; 范围 for 循环&#xff08;Range-based for loop&#xff09; 是 C11 引入的一种简化容器/数组遍历的方式。它通过自动调用容器的 begin() 和 end() 方法…...

嵌入式开发学习(第二阶段 C语言基础)

C语言&#xff1a;第4天笔记 内容提要 流程控制 C语句数据的输入与输出 流程控制 C语句 定义 C程序是以函数为基础单位的。一个函数的执行部分是由若干条语句构成的。C语言都是用来完成一定操作的任务。C语句必须依赖于函数存在。 C程序结构 C语句分类 1.控制语句 作…...

大物重修之浅显知识点

第一章 质点运动学 例1 知识点公式如下&#xff1a; 例2 例3 例4 例5 例6 第四章 刚体的转动 例1 例2 例3 例4 例5 例6 第五章 简谐振动 例1 例2 例3 第六章 机械波 第八章 热力学基础 第九章 静电场 第十一章 恒定磁场…...

随笔-近况

好久没写了&#xff0c;手都生了。 我写的东西可以分为两类&#xff1a;技术和随笔。当然技术没有我自己创新的&#xff0c;都是些在解决问题过程中查询了很多资料&#xff0c;经过验证后&#xff0c;可以在项目上使用的。但是自从 deepseek 出现后&#xff0c;问题一下子简单…...

赤色世界 陈默传 第一章 另一个陈默

赤色世界 陈默传 第一章 另一个陈默 陈默在一片纯白的空间中缓缓睁开眼睛。没有声音&#xff0c;没有光影的变化&#xff0c;只有无尽的空白包围着他&#xff0c;仿佛整个世界被擦去了所有的色彩和形状。他站在那里&#xff0c;赤脚踩在这片空无一物的地面上&#xff0c;却能感…...

isp流程介绍(yuv格式阶段)

一、前言介绍 前面两章里面&#xff0c;已经分别讲解了在Raw和Rgb域里面&#xff0c;ISP的相关算法流程&#xff0c;从前面文章里面可以看到&#xff0c;在Raw和Rgb域里面&#xff0c;很多ISP算法操作&#xff0c;更像是属于sensor矫正或者说sensor标定操作。本质上来说&#x…...

关于大数据的基础知识(一)——定义特征结构要素

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///计算机爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于大数据的基础知识&#xff08;一&a…...

C++(1):整数常量

目录 一、进制表示 二、后缀指定类型 三、示例与注意 四、总结表 一、进制表示 十进制&#xff08;Decimal&#xff09; 格式&#xff1a;无前缀&#xff0c;由数字 0-9 组成。 示例&#xff1a;123、42。 注意&#xff1a;不能以 0 开头&#xff08;否则会被视为八进制&a…...

C# NX二次开发:宏录制实战讲解(第一讲)

今天要讲的是关于NX软件录制宏操作的一些案例。 下面讲如何在NX软件中复制Part体的录制宏。 NXOpen.Session theSession NXOpen.Session.GetSession(); NXOpen.Part workPart theSession.Parts.Work; NXOpen.Part displayPart theSession.Parts.Display; NXOpe…...

C++:书架

【描述】 John最近买了一个书架用来存放奶牛养殖书籍&#xff0c;但书架很快被存满了&#xff0c;只剩最顶层有空余。 John共有N头奶牛(1 ≤ N ≤ 20,000)&#xff0c;每头奶牛有自己的高度Hi(1 ≤ Hi ≤ 10,000)&#xff0c;N头奶牛的总高度为S。书架高度为B(1 ≤ B ≤ S <…...

34.笔记1

今天&#xff0c;我们回顾回顾曾经的知识。 1.二分 还记得当初的二分吗&#xff1f; 1.一开始的二分 就像下面这个故事&#xff1a; 有一只老鼠&#xff0c;躲在10个大瓷瓶后面。你的任务就是抓住这只老鼠&#xff0c;但在抓的过程会导致你选择的大瓷瓶成为分子碎片。 如…...

智慧工会服务平台建设方案Word(23页)

1. 引言 随着信息技术的快速发展&#xff0c;传统工会服务模式面临挑战&#xff0c;智慧工会服务平台应运而生。该平台旨在通过数字化手段&#xff0c;整合工会资源&#xff0c;优化服务流程&#xff0c;提高工作效率&#xff0c;为会员提供更加便捷、高效、个性化的服务体验。…...

常见降维算法分析

一、常见的降维算法 LDA线性判别PCA主成分分析t-sne降维 二、降维算法原理 2.1 LDA 线性判别 原理 &#xff1a;LDA&#xff08;Linear Discriminant Analysis&#xff09;线性判别分析是一种有监督的降维方法。它的目标是找到一个投影方向&#xff0c;使得不同类别的数据在…...

洛谷 P1179【NOIP 2010 普及组】数字统计 —— 逐位计算

题面:P1179 [NOIP 2010 普及组] 数字统计 - 洛谷 一&#xff1a;题目解释&#xff1a; 需要求一区间内数字 2 的出现次数。注意22则记为 2 次&#xff0c;其它没别的... 二&#xff1a;思路、 思想可以考虑动态规划需要计算在每一位上数字 2 的出现次数&#xff0c;然后将这些…...

互联网大厂Java求职面试:基于RAG的智能问答系统设计与实现-1

互联网大厂Java求职面试&#xff1a;基于RAG的智能问答系统设计与实现-1 场景背景 在某互联网大厂的技术面试中&#xff0c;技术总监张总正在面试一位名为郑薪苦的求职者。郑薪苦虽然对技术充满热情&#xff0c;但回答问题时总是带着幽默感&#xff0c;有时甚至让人哭笑不得。…...

学习黑客5 分钟读懂什么是 CVE?

5 分钟读懂什么是 CVE&#xff1f; ⏱️&#x1f510; 目标读者&#xff1a; 安全小白 风格&#xff1a; ***式清晰、循序渐进 篇幅&#xff1a; 5 分钟速读 &#x1f4d6; 目录 &#x1f680; 什么是 CVE&#xff1f;&#x1f914; 为什么要关注 CVE&#xff1f;&#x1f50d…...

SAM详解3.1(关于2和3的习题)

SAM SAMluogu5341SP8222SAM 推销一波前面的文章: SAM详解1 SAM详解2(初级应用) SAM详解3(SAM与AC自动机的相似性,SAM处理字符串匹配) luogu5341 题目链接 精简题意:给你一个字符串和 k k k,求 出现了 k k k 次的子串的长度 的出现次数 的最大值。 我们可以用 S…...

Java中医门诊系统源码 中医诊所系统源码

Java中医门诊系统源码 中医诊所系统源码 一、患者信息录入在中医问诊系统中&#xff0c;患者信息录入是第一步。系统会要求患者填写一些基本信息&#xff0c;如姓名、年龄、性别、职业等&#xff0c;以及一些关于健康状况的详细描述。这些信息将被系统自动保存&#xff0c;并用…...

Edwards爱德华STP泵软件用于操作和监控涡轮分子泵

Edwards爱德华STP泵软件用于操作和监控涡轮分子泵...

RabittMQ-高级特性2-应用问题

文章目录 前言延迟队列介绍ttl死信队列存在问题延迟队列插件安装延迟插件使用事务消息分发概念介绍限流非公平分发&#xff08;负载均衡&#xff09; 限流负载均衡RabbitMQ应用问题-幂等性保障顺序性保障介绍1顺序性保障介绍2消息积压总结 前言 延迟队列介绍 延迟队列(Delaye…...

deep seek简介和解析

deepseek大合集&#xff0c;百度链接:https://pan.baidu.com/s/10EqPTg0dTat1UT6I-OlFtg?pwdw896 提取码:w896 一篇文章带你全面了解deep seek 目录 一、deep seek是什么 DeepSeek-R1开源推理模型&#xff0c;具有以下特点&#xff1a; 技术优势&#xff1a; 市场定位&…...

Webug4.0靶场通关笔记24- 第29关Webshell爆破

目录 一、Webshell爆破原理分析 二、第29关webshell爆破渗透实战 1.环境搭建 2.打开靶场 3.暴力破解 &#xff08;1&#xff09;bp开启抓包模式 &#xff08;2&#xff09;输入密码12并抓包 &#xff08;3&#xff09;配置position &#xff08;4&#xff09;配置payl…...

Linux系统入门第十一章 --Shell编程之函数与数组

一、Shell函数 1、函数的用法 Shell函数可用于存放一系列的指令。在Shell脚本执行的过程中&#xff0c;函数被置于内存中&#xff0c;每次调用函数时不需要从硬盘读取&#xff0c;因此运行的速度比较快。在Shell编程中函数并非是必须的元素&#xff0c;但使用函数可以对程序进…...

【文件系统—散列结构文件】

文章目录 一、实验目的实验内容设计思路 三、实验代码实现四、总结 一、实验目的 理解linux文件系统的内部技术&#xff0c;掌握linux与文件有关的系统调用命令&#xff0c;并在此基础上建立面向随机检索的散列结构文件&#xff1b;## 二、实验内容与设计思想 实验内容 1.设…...

软件系统中功能模型 vs 数据模型 对比解析

功能模型 vs 数据模型 对比解析 一、功能模型&#xff08;Functional Model&#xff09; 定义&#xff1a;描述系统 做什么&#xff08;业务逻辑与操作流程&#xff09; 核心关注&#xff1a;行为、交互、业务流程 建模工具&#xff1a; 用例图&#xff08;UML Use Case Dia…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(17):「 」と言いました

日语学习-日语知识点小记-构建基础-JLPT-N4阶段&#xff08;17&#xff09;&#xff1a;「 」と言いました 1、前言&#xff08;1&#xff09;情况说明&#xff08;2&#xff09;工程师的信仰 2、知识点&#xff08;1&#xff09;复习&#xff08;&#xff12;&#xff09;「…...

qiankun微前端任意位置子应用

qiankun微前端任意位置子应用 主项目1、安装qiankun2、引入注册3、路由创建4、路由守卫 二、子项目1、安装sh-winter/vite-plugin-qiankun2、main.js配置3、vite.config.js配置 三、问题解决 主项目 1、安装qiankun npm i qiankun -S2、引入注册 创建存放子应用页面 //whpv…...

普通IT的股票交易成长史--20250509晚复盘

声明&#xff1a; 本文章的内容只是自己学习的总结&#xff0c;不构成投资建议。价格行为理论学习可参考简介中的几位&#xff0c;感谢他们的无私奉献。 送给自己的话&#xff1a; 仓位就是生命&#xff0c;绝对不能满仓&#xff01;&#xff01;&#xff01;&#xff01;&…...

切比雪夫不等式专题习题

切比雪夫不等式专题习题 前言 本文为概率论习题集专栏的切比雪夫不等式专题习题&#xff0c;共设计10道由浅入深的习题&#xff0c;涵盖基本概念、计算应用、理论证明与实际场景应用。建议先独立完成后再参考解析篇。 一、基础概念题 习题1&#xff1a; 判断题&#xff08;…...

JAVA包装类

一、基本数据类型 1.整型类型&#xff1a; 用于表示整数数值&#xff0c;不包含小数部分。 类型位数取值范围默认值示例byte8-128 至 1270byte num 100;short16-32,768 至 32,7670short num 5000;int32-2,147,483,648 至 2,147,483,6470int num 100000;long64-2^63 至 2^…...