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

windows C#-定义和读取自定义特性

使用特性,可以声明的方式将信息与代码相关联。 特性还可以提供能够应用于各种目标的可重用元素。 考虑 ObsoleteAttribute。 它可以应用于类、结构、方法、构造函数等。 用于声明元素已过时。 然后,由 C# 编译器负责查找此特性,并执行某响应操作。

此教程介绍如何将特性添加到代码中、如何创建和使用你自己的特性,以及如何使用一些内置到 .NET 中的特性。

创建应用

安装所有工具后,创建一个新的 .NET 控制台应用。 若要使用命令行生成器,请在常用的命令行管理程序中执行以下命令:

dotnet new console

此命令将创建最基本的 .NET 项目文件。 运行 dotnet restore 以还原编译此项目所需的依赖项。

无需运行 dotnet restore,因为它由所有需要还原的命令隐式运行,如 dotnet new、dotnet build、dotnet run、dotnet test、dotnet publish 和 dotnet pack。 若要禁用隐式还原,请使用 --no-restore 选项。

在执行显式还原有意义的某些情况下,例如 dotnet restore中,或在需要显式控制还原发生时间的生成系统中,dotnet restore 命令仍然有用。

若要运行程序,请使用 dotnet run。 此时,应该可以在控制台中看到“Hello, World”输出。

将特性添加到代码中

在 C# 中,特性是继承自 Attribute 基类的类。 所有继承自 Attribute 的类都可以用作其他代码块的一种“标记”。 例如,有一个名为 ObsoleteAttribute 的特性。 此特性示意代码已过时,不得再使用。 将此特性应用于类(比如说,使用方括号)。

[Obsolete]
public class MyClass
{
}

虽然此类的名称为 ObsoleteAttribute,但只需在代码中使用 [Obsolete]。 大多数 C# 代码都遵循此约定。 如果愿意,也可以使用全名 [ObsoleteAttribute]。

如果将类标记为已过时,最好说明已过时的原因和/或改用的类。 在“已过时”特性中包含字符串参数以提供此说明。

[Obsolete("ThisClass is obsolete. Use ThisClass2 instead.")]
public class ThisClass
{
}

此字符串会作为参数传递给 ObsoleteAttribute 构造函数,就像在编写 var attr = new ObsoleteAttribute("some string") 一样。

只能向特性构造函数传递以下简单类型/文本类型参数:bool, int, double, string, Type, enums, etc和这些类型的数组。 不能使用表达式或变量。 可以使用任何位置参数或已命名参数。

创建你自己的特性

通过定义继承自 Attribute 基类的新类来创建特性。

public class MySpecialAttribute : Attribute
{
}

通过上述代码,可在基本代码中的其他位置将 [MySpecial](或 [MySpecialAttribute])用作特性。

[MySpecial]
public class SomeOtherClass
{
}

.NET 基类库中的特性(如 ObsoleteAttribute)会在编译器中触发某些行为。 不过,你创建的任何特性只作元数据之用,并不会在执行的特性类中生成任何代码。 是否在代码的其他位置使用此元数据由你自行决定。

这里要注意的是“gotcha”。 如前所述,使用特性时,只可将某些类型作为参数传递。 不过,在创建特性类型时,C# 编译器不会阻止你创建这些参数。 在以下示例中,你使用可正常编译的构造函数创建了一个特性。

public class GotchaAttribute : Attribute
{public GotchaAttribute(Foo myClass, string str){}
}

不过,无法将此构造函数与特性语法结合使用。

[Gotcha(new Foo(), "test")] // does not compile
public class AttributeFail
{
}

上述代码导致一个编译器错误,例如 Attribute constructor parameter 'myClass' has type 'Foo', which is not a valid attribute parameter type。

如何限制特性使用

特性可用于以下“目标”。 前面的示例展示了特性在类上的使用情况,而特性还可用于:

  • 程序集
  • 构造函数
  • 委托
  • 枚举
  • 事件
  • 字段
  • 泛型参数
  • 接口
  • 方法
  • 模块
  • 参数
  • properties
  • 返回值
  • 结构

创建特性类时,C# 默认允许对所有可能的特性目标使用此特性。 如果要将特性限制为只能用于特定目标,可以对特性类使用 AttributeUsageAttribute 来实现。 没错,就是将特性应用于特性!

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct)]
public class MyAttributeForClassAndStructOnly : Attribute
{
}

如果尝试将上述特性应用于不是类也不是结构的对象,你会得到类似 Attribute 'MyAttributeForClassAndStructOnly' is not valid on this declaration type. It is only valid on 'class, struct' declarations 的编译器错误:

public class Foo
{// if the below attribute was uncommented, it would cause a compiler error// [MyAttributeForClassAndStructOnly]public Foo(){ }
}
如何使用附加到代码元素的特性

特性只作元数据之用。 不借助一些外在力量,特性其实什么用也没有。

若要查找特性并对其进行操作,需要使用反射。 通过反射,能够以 C# 编写检查其他代码的代码。 例如,可以使用反射获取类的相关信息(在代码开始处添加 using System.Reflection;):

TypeInfo typeInfo = typeof(MyClass).GetTypeInfo();
Console.WriteLine("The assembly qualified name of MyClass is " + typeInfo.AssemblyQualifiedName);

输出如下内容:The assembly qualified name of MyClass is ConsoleApplication.MyClass, attributes, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

获取 TypeInfo 对象(或 MemberInfo、FieldInfo 或其他对象)后,就可以使用 GetCustomAttributes 方法了。 此方法返回 Attribute 对象的集合。 还可以使用 GetCustomAttribute 并指定特性类型。

下面的示例展示了对 MyClass(在上文中,它包含 [Obsolete] 特性)的 MemberInfo 实例使用 GetCustomAttributes。

var attrs = typeInfo.GetCustomAttributes();
foreach(var attr in attrs)Console.WriteLine("Attribute on MyClass: " + attr.GetType().Name);

输出到控制台:Attribute on MyClass: ObsoleteAttribute。 请尝试向 MyClass 添加其他特性。

请务必注意,这些 Attribute 对象的实例化有延迟。 也就是说,只有使用 GetCustomAttribute 或 GetCustomAttributes,它们才会实例化。 这些对象每次都会实例化。 连续两次调用 GetCustomAttributes 返回两个不同的 ObsoleteAttribute 实例。

运行时中的常见特性

许多工具和框架都会使用特性。 NUnit 和 NUnit 测试运行程序都使用 [Test] 和 [TestFixture] 之类的特性。 ASP.NET MVC 使用 [Authorize] 之类的特性,并提供可密切关注 MVC 操作的操作筛选器框架。 PostSharp 使用特性语法,支持在 C# 中进行面向特性的编程。

下面介绍了一些值得注意的 .NET Core 基类库内置特性:

[Obsolete]。 此特性已在上面的示例中使用过,位于 System 命名空间中。 可用于提供关于不断变化的基本代码的声明性文档。 可以提供字符串形式的消息,并能使用另一布尔参数将编译器警告升级为编译器错误。
[Conditional]。 此特性位于 System.Diagnostics 命名空间中。 可应用于方法(或特性类)。 必须向构造函数传递字符串。 如果该字符串与 #define 指令不匹配,则 C# 编译器将删除对该方法(而不是方法本身)的所有调用。 通常,使用此方法进行调试(诊断)目的。
[CallerMemberName]。 此特性可应用于参数,位于 System.Runtime.CompilerServices 命名空间中。 CallerMemberName 特性用于插入正在调用另一方法的方法的名称。 这是在各种 UI 框架中实现 INotifyPropertyChanged 时清除“神奇字符串”的一种方式。 示例:

public class MyUIClass : INotifyPropertyChanged
{public event PropertyChangedEventHandler? PropertyChanged;public void RaisePropertyChanged([CallerMemberName] string propertyName = default!){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}private string? _name;public string? Name{get { return _name;}set{if (value != _name){_name = value;RaisePropertyChanged();   // notice that "Name" is not needed here explicitly}}}
}

在上面的代码中,无需使用文本类型 "Name" 字符串。 使用 CallerMemberName 可防止出现与拼写错误相关的 bug,也可以让重构/重命名操作变得更加顺畅。 特性为 C# 带来了声明性能力,但它们是一种元数据形式的代码,本身并不执行操作。 

相关文章:

windows C#-定义和读取自定义特性

使用特性,可以声明的方式将信息与代码相关联。 特性还可以提供能够应用于各种目标的可重用元素。 考虑 ObsoleteAttribute。 它可以应用于类、结构、方法、构造函数等。 用于声明元素已过时。 然后,由 C# 编译器负责查找此特性,并执行某响应操…...

一个vue项目如何运行在docker

将 Vue.js 应用程序通过 Docker 发布是一个非常常见的做法,它可以帮助你轻松地部署应用到不同的环境中。下面是一个简单的指南,介绍如何为 Vue.js 项目创建 Dockerfile 并进行构建和运行。 第一步:安装 Docker 确保你的开发机器上已经安装了…...

重读《人月神话》(15)-祸起萧墙(Hatching a Catastrophe

增加更多的人手到一个已经延期的项目中往往不会加快项目的进度,反而可能使情况变得更糟。 项目进度的细微延迟往往难以察觉,但它们却能悄无声息地累积起来,最终对整个项目的完成时间造成重大影响。昨天,一位关键成员因突发疾病未…...

【大数据学习 | Spark-Core】广播变量和累加器

1. 共享变量 Spark两种共享变量:广播变量(broadcast variable)与累加器(accumulator)。 累加器用来对信息进行聚合,相当于mapreduce中的counter;而广播变量用来高效分发较大的对象&#xff0c…...

C/C++基础知识复习(30)

1) 什么是 C 中的 Lambda 表达式?它的作用是什么? Lambda 表达式: 在 C 中,Lambda 表达式是一种可以定义匿名函数的机制,可以在代码中快速创建一个内联的函数对象,而不需要显式地定义一个函数。Lambda 表…...

【Spring MVC】如何获取cookie/session以及响应@RestController的理解,Header的设置

前言 🌟🌟本期讲解关于SpringMVC的编程之参数传递~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 🎆那么废…...

Could not locate device support files.

报错信息:Failure Reason: The device may be running a version of iOS (13.6.1 17G80) that is not supported by this version of Xcode.[missing string: 869a8e318f07f3e2f42e11d435502286094f76de] 问题:xcode15升级到xcode16之后,13.…...

Kafka日志索引详解以及生产常见问题分析与总结

文章目录 一、Kafka的Log日志梳理1.1、Topic下的消息如何存储1.1.1、log文件追加记录所有消息1.1.2、index和timeindex加速读取log消息日志 1.2、文件清理机制1.2.1、如何判断哪些日志文件过期了1.2.2、过期的日志文件如何处理 1.3、Kafka的文件高效读写机制1.3.1、Kafka的文件…...

Qt中QGraphics绘图类相关解释

Item(图元)坐标系、Scene(场景)坐标系、View(视图)坐标系,三者均为:x轴正方向向右,y轴正方向向下 1、Item(图元):坐标属于局部坐标,通常以图元中心为原点(中心对称)。 场景坐标系统描述了顶层的图元,每个图…...

@Pattern (用于校验字符串是否符合特定正则表达式)

Pattern 是一个用于校验字符串是否符合特定正则表达式的注解,它在 Java 中常用于验证输入数据的格式。以下是 Pattern 注解的详解和使用方法: 含义 Pattern 注解用于在 Java 中对字段进行注解,以确保其值与指定的正则表达式匹配。这个注解可…...

线程与进程的个人理解

进程(Process): 一个程序在执行时,操作系统为其分配的资源(如内存、CPU 时间等)构成了一个进程。每个进程都有自己的独立的地址空间、堆栈和局部变量,它们之间不共享内存(除非通过特…...

移远通信携手紫光展锐,以“5G+算力”共绘万物智联新蓝图

11月26日,2024紫光展锐全球合作伙伴大会在上海举办。作为紫光展锐重要的合作伙伴,移远通信应邀参会。 在下午的物联网生态论坛上,移远通信产品总监胡勇华作题为“5G与算力双擎驱动 引领智联新未来”的演讲,深度剖析了产业发展的趋…...

【接口封装】——7、连接并使用 MySQL 数据库

头文件&#xff1a; #include <qsqlquery.h> #include <qsqldatabase.h>&#xff08;注&#xff1a;需要先适配数据库&#xff09; 函数定义&#xff1a; public:bool verifyLogin(const QString& account, const QString& password);QString getUserName(…...

vue2 中使用 Ag-grid-enterprise 企业版

文章目录 问题Vue2 引入企业版不生效npm run dev 时卡住了94% after seal 卡在这里了测试打包源 git 解决方案记录 问题 我想用企业版的树状表格 Vue2 引入企业版不生效 编译引入 // vue.config.js module.exports {transpileDependencies: ["ag-grid-enterprise"…...

计算机视觉算法:从基础到应用的全面解析

计算机视觉(Computer Vision, CV)是一门研究如何使计算机“看懂”图像和视频的学科。它结合了数学、计算机科学和人工智能的多个领域,旨在通过自动分析和理解数字图像、视频中的内容,模拟人类的视觉感知。计算机视觉算法广泛应用于图像识别、目标检测、自动驾驶、医疗影像等…...

[HCTF 2018]WarmUp

抓包什么也没看到 就是访问这个滑稽的图片 信息收集 这里说明就是他的后台代码 在这个php里面 我们访问 这样就很好看了 代码审计 [HCTF 2018]WarmUp全网最详细解释-CSDN博客 这篇博客讲得真JB好 我就复述下我对博主的理解吧~ 这里我们可以看见白名单是source.php 和h…...

解决jupyter notebook 新建或打开.ipynb 报500 : Internal Server Error(涉及jinja2兼容性问题)

报错&#xff1a; [E 10:09:52.362 NotebookApp] 500 GET /notebooks/Untitled16.ipynb?kernel_namepyt hon3 (::1) 93.000000ms refererhttp://localhost:8888/tree ...... 重点是&#xff1a; from .exporters import * File "C:\ProgramData\Anaconda3\lib\site-p…...

Android 实现悬浮球的功能

Android 实现悬浮球的功能 在 Android 中&#xff0c;实现悬浮球可以通过以下方式实现&#xff0c;常见的方法是使用 WindowManager 创建一个悬浮窗口。以下是具体的实现步骤&#xff1a; 1. 配置权限 在 AndroidManifest.xml 中添加悬浮窗权限&#xff1a; <uses-permis…...

SQL EXISTS 子句的深入解析

SQL EXISTS 子句的深入解析 引言 SQL&#xff08;Structured Query Language&#xff09;作为一种强大的数据库查询语言&#xff0c;广泛应用于各种数据库管理系统中。在SQL查询中&#xff0c;EXISTS子句是一种非常实用的工具&#xff0c;用于检查子查询中是否存在至少一行数…...

<项目代码>YOLOv8 红绿灯识别<目标检测>

YOLOv8是一种单阶段&#xff08;one-stage&#xff09;检测算法&#xff0c;它将目标检测问题转化为一个回归问题&#xff0c;能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法&#xff08;如Faster R-CNN&#xff09;&#xff0c;YOLOv8具有更高的…...

Linux笔记---进程:进程状态

1. Linux中的进程状态 上图是操作系统学科中&#xff0c;对进程状态的分类。但是这样细致的划分是在操作系统的设计层面上做的&#xff0c;其中的很多细节&#xff0c;用户其实不必关心。 在Linux操作系统中&#xff0c;面向用户层面&#xff0c;对进程状态做了如下的划分&am…...

基于Qt实现的自定义树结构容器:设计与应用

在Qt框架中&#xff0c;尽管其提供了许多强大的容器类&#xff08;如 QList, QMap, QTreeWidget 等&#xff09;&#xff0c;但缺少一个通用的、灵活的树结构容器&#xff0c;直接支持多层级数据管理。为了满足这些需求&#xff0c;本文设计并实现了一个可复用的自定义树结构容…...

Minio 客户端 mc

1、文档参阅&#xff1a; 1.1、 服务别名设置&#xff1a; https://min.io/docs/minio/linux/reference/minio-mc/mc-alias-set.html 1.2、cp 命令 https://min.io/docs/minio/linux/reference/minio-mc/mc-cp.html 2、mc 命令安装 1、wget https://dl.minio.org.cn/cl…...

python控制鼠标,键盘,adb

python控制鼠标&#xff0c;键盘&#xff0c;adb 听说某系因为奖学金互相举报&#xff0c;好像拿不到要命一样。不禁想到几天前老墨偷走丁胖子的狗&#xff0c;被丁胖子逮到。他面对警察的问询面不改色坚持自我&#xff0c;反而是怒气冲冲的丁胖子被警察认为是偷狗贼。我觉得这…...

使用 Python 剪辑视频的播放速度

要使用 Python 调整视频的播放速度&#xff0c;可以利用 moviepy 库中的 fx&#xff08;特效&#xff09;模块来实现这一功能。通过 moviepy.editor 中的 VideoFileClip 类和 fx.speedx 函数&#xff0c;可以轻松地调整视频的播放速度。 安装 moviepy 首先&#xff0c;确保已…...

Scrapy图解工作流程-cnblog

1.1 介绍部分&#xff1a; 文字提到常用的Web框架有Django和Flask&#xff0c;接下来将学习一个全球范围内流行的爬虫框架Scrapy。 1.2 内容部分&#xff1a; Scrapy的概念、作用和工作流程 Scrapy的入门使用 Scrapy构造并发送请求 Scrapy模拟登陆 Scrapy管道的使用 Scrapy中…...

mongodb

MongoDB增加身份验证 - jason47 - 博客园 db.collection.find() - MongoDB 手册 v6.0 1. 登录 rootJTVMbushu104:~# mongosh # 无账号登录 test> use admin # 切换数据库,先切换到有权限数据库再登录授权 switched to db admin admin> db.auth(username,pas…...

海量数据处理面试题

目录 一.位图应用 二.布隆过滤器 三.哈希切割 一.位图应用 1. 给定100亿个整数&#xff0c;设计算法找到只出现一次的整数&#xff1f; 对于这道题100亿个整数大概占用40G,1G2^30byte,所以直接保存是不合适的,可以使用两个位图来处理,用00表示出现0次的,01表示出现一次的,10…...

RNN模型文本预处理--数据增强方法

数据增强方法 数据增强是自然语言处理&#xff08;NLP&#xff09;中常用的一种技术&#xff0c;通过生成新的训练样本来扩充数据集&#xff0c;从而提高模型的泛化能力和性能。回译数据增强法是一种常见的数据增强方法&#xff0c;特别适用于文本数据。 回译数据增强法 定义…...

git-显示顺序与提交顺序不一致的问题

问题流程 a分支 初始记录&#xff1a;分支的提交记录是 c1 -> c2 -> c3第一次修改提交记录但并未push&#xff1a;a1&#xff08;20:18&#xff09;第二次修改提交记录&#xff1a;a2&#xff08;20:20&#xff09; b分支 初始记录&#xff1a; c1 -> c2 -> c3 …...

【软件入门】Git快速入门

Git快速入门 文章目录 Git快速入门0.前言1.安装和配置2.新建版本库2.1.本地创建2.2.云端下载 3.版本管理3.1.添加和提交文件3.2.回退版本3.2.1.soft模式3.2.2.mixed模式3.2.3.hard模式3.2.4.使用场景 3.3.查看版本差异3.4.忽略文件 4.云端配置4.1.Github4.1.1.SSH配置4.1.2.关联…...

基于Springboot的流浪宠物管理系统

基于javaweb的流浪宠物管理系统 介绍 基于javaweb的流浪宠物管理系统的设计与实现&#xff0c;后端框架使用Springbootmybatis&#xff0c;前端框架使用Vuehrml&#xff0c;数据库使用mysql&#xff0c;使用B/S架构实现前台用户系统和后台管理员系统&#xff0c;和不同权限级别…...

【踩坑日记】【教程】如何在ubuntu服务器上配置公钥登录以及bug解决

前言 在日常开发和运维中&#xff0c;为了提高服务器登录的安全性&#xff0c;我们通常会选择使用 SSH 密钥认证 来替代传统的密码登录。然而&#xff0c;在配置 SSH 公钥登录的过程中&#xff0c;可能会遇到各种坑和 Bug。本文将从零开始&#xff0c;手把手教你如何在 Ubuntu…...

使用 VLC 在本地搭建流媒体服务器 (详细版)

提示&#xff1a;详细流程 避坑指南 Hi~&#xff01;欢迎来到碧波空间&#xff0c;平时喜欢用博客记录学习的点滴&#xff0c;欢迎大家前来指正&#xff0c;欢迎欢迎~~ ✨✨ 主页&#xff1a;碧波 &#x1f4da; &#x1f4da; 专栏&#xff1a;音视频 目录 借助VLC media pl…...

常用贴片元件封装尺寸

不论你在什么时候开始&#xff0c;重要的是开始之后就不要停止。 一天过完&#xff0c;不会再来。 每一次发奋努力的背后&#xff0c;必有加倍的赏赐。【SMD贴片元件的封装尺寸】 公制&#xff1a;3216——2012——1608——1005——0603——0402 英制&#xff1a;1206——0805—…...

NVR录像机汇聚管理EasyNVR多个NVR同时管理基于B/S架构的技术特点与能力应用

EasyNVR视频融合平台基于云边端协同设计&#xff0c;能够轻松接入并管理海量的视频数据。该平台兼容性强、拓展灵活&#xff0c;提供了视频监控直播、录像存储、云存储服务、回放检索以及平台级联等一系列功能。B/S架构使得EasyNVR实现了视频监控的多元化兼容与高效管理。 其采…...

【时间之外】IT人求职和创业应知【48】-通信技术

目录 新闻一&#xff1a;腾讯科技取得数据显示相关专利 新闻二&#xff1a;中国5G网络规模全球最大&#xff0c;6G技术取得突破 新闻三&#xff1a;亚马逊启动“登月”计划&#xff0c;部署10万颗二代自研芯片 连亚马逊这样的大厂也搞登月计划&#xff0c;可见现在的业界竞争…...

如何为 XFS 文件系统的 /dev/centos/root 增加 800G 空间

如何为 XFS 文件系统的 /dev/centos/root 增加 800G 空间 一、前言二、准备工作三、扩展逻辑卷1. 检查现有 LVM 配置2. 扩展物理卷3. 扩展卷组4. 扩展逻辑卷四、调整文件系统大小1. 检查文件系统状态2. 扩展文件系统五、处理可能出现的问题1. 文件系统无法扩展2. 磁盘空间不足3…...

Linux命令操作基础

目录 一、命令格式 二、常见命令操作 2.1补齐命令与文件名 2.2历史命令 2.3联机帮助 三、常用命令 四、vim/vi文本编辑器 4.1命令模式 4.2输出模式 4.3底线命令模式 一、命令格式 $ Command [-Options] Argument1 Argument2... 其中&#xff1a; $:默认存在的提示符&a…...

Shell脚本实践练习

声明 学习视频来自 B 站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记的只是方便各位师傅学习知识&#xff0c;以下网站只涉及学习内容&#xff0c;其他的都与本人无关&#xff0c;切莫逾越法律红线&#xff0c;否则后果自负。 ✍&#x1f3fb;作者简介&#xff1a;致…...

CentOS上如何离线批量自动化部署zabbix 7.0版本客户端

CentOS上如何离线批量自动化部署zabbix 7.0版本客户端 管理的服务器大部分都是CentOS操作系统&#xff0c;版本主要是CentOS 7。因为监控服务器需要&#xff0c;要在前两天搭建的Zabbix 7.0系统上把这些CentOS 7系统都监控起来。因为服务器数量众多&#xff0c;而且有些服务器…...

DDR3与MIG IP核详解(一)

一、ddr3(全称第三代双倍速率同步动态随机存储器)&#xff1a; 1、特点&#xff1a;1&#xff1a;掉电无法保存数据&#xff0c;需要周期性的刷新。2:时钟上升沿和下降沿都会传输数据。 3&#xff1a;突发传输&#xff0c;突发长度 Burst Length一般为…...

转录组数据挖掘(生物技能树)(第11节)下游分析

转录组数据挖掘&#xff08;生物技能树&#xff09;&#xff08;第11节&#xff09; 文章目录 R语言复习转录组数据差异分析差异分析的输入数据操作过程示例一&#xff1a;示例二&#xff1a;示例三&#xff1a;此代码只适用于人的样本 R语言复习 #### 读取 ####dat read.deli…...

CTF-RE 从0到N:Chacha20逆向实战 2024 强网杯青少年专项赛 EnterGame WP (END)

只想解题的看最后就好了,前面是算法分析 Chacha20 c语言是如何利用逻辑运算符拆分变量和合并的 通过百度网盘分享的文件&#xff1a;EnterGame_9acdc7c33f85832082adc6a4e... 链接&#xff1a;https://pan.baidu.com/s/182SRj2Xemo63PCoaLNUsRQ?pwd1111 提取码&#xff1a;1…...

Spring Boot 的 WebClient 实践教程

什么是 WebClient&#xff1f; 在 Spring Boot 中&#xff0c;WebClient 是 Spring WebFlux 提供的一个非阻塞、响应式的 HTTP 客户端&#xff0c;用于与 RESTful 服务或其他 HTTP 服务交互。相比于传统的 RestTemplate&#xff0c;WebClient 更加现代化&#xff0c;具有异步和…...

STM32笔记(串口IAP升级)

一、IAP简介 IAP&#xff08;In Application Programming&#xff09;即在应用编程&#xff0c; IAP 是用户自己的程序在运行过程中对 User Flash 的部分区域进行烧写&#xff0c;目的是为了在产品发布后可以方便地通过预留的通信口对产 品中的固件程序进行更新升级。 通常实…...

Ollama - 简化使用本地大语言模型

学习完用 Transformers 和 llama.cpp 使用本地大语言模型后&#xff0c;再继续探索如何使用 Ollama 跑模型。Ollama 让运行和管理大语言模型变得更为简单&#xff0c;它构建在 llama.cpp 之上&#xff0c;并有优化&#xff0c;性能表现同样不俗。下面罗列一下它的特点 从它的 …...

圆域函数的傅里叶变换和傅里叶逆变换

空域圆域函数的傅里叶变换 空域圆域函数&#xff08;也称为空间中的圆形区域函数&#xff09;通常指的是在二维空间中&#xff0c;以原点为中心、半径为 a a a的圆内取值为1&#xff0c;圆外取值为0的函数。这种函数可以表示为&#xff1a; f ( x , y ) { 1 if x 2 y 2 ≤ …...

智能交易模型的全景探索:量化技术的进步与未来

随着金融市场日益复杂化&#xff0c;量化交易模型在投资领域扮演着愈加重要的角色。这些模型通过数据驱动和技术创新&#xff0c;赋能投资者在高度波动的市场中寻找确定性收益点。本文将从技术进步、模型构建、应用优势和未来发展四个方面&#xff0c;探讨量化交易模型的演变与…...

mysql学习

1、 数据库的三范式是什么&#xff1f; 2、特点 - 永久性&#xff1a;从本质上来说数据库中的数据以计算机文件的方式存储在磁盘上- 结构性&#xff1a;数据不是杂乱无章的存储- 大量&#xff1a;只受到磁盘空间的影响 3、 Myisam与innodb的区别 4、mysql架构 开始编程语言进…...