C#语法基础总结
输入和输出
输入
Console.Read();
从屏幕读取一个字符,并返回该字符所对应的整型数字
Console.ReadLine();
从屏幕读取一串字符,并返回该字符串
输出
Console.WriteLine(); 输出内容,并换行
Console.Write(); 输出内容,不换行
using关键字
一般在程序开头添加 using System;
,这时System.String
就可简写为string
。
using
关键字用于在程序中包含命名空间。一个程序可以包含多个 using
语句
// using System;namespace ConsoleApp1
{class Program{static void Main(string[] args){System.String a = "Hello World!";System.Console.WriteLine(a);System.Console.ReadKey();}}
}
using System;namespace ConsoleApp1
{class Program{static void Main(string[] args){string a = "Hello World!";Console.WriteLine(a);Console.ReadKey();}}
}
C#占位符{}
- 当 WriteLine() 函数有多个参数时,输出第一个参数(双引号内的)中的内容,而第二个及后面的参数中的内容替换掉第一个参数中对应位置的占位符一起输出。
static void Main(string[] args)
{Console.WriteLine("A:{0},a:{1}",65,97);Console.ReadLine();
}
- 如果第一个参数没有留占位符,那么第二个参数内容不输出
Console.WriteLine("A:,a:",65,97);
C#数据类型
在C#中,变量分为以下几种类型:
- 值类型(Value types)
- 引用类型(Reference types)
- 指针类型(Pointer types)
引用类型
引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。
换句话说,它们指的是一个内存位置。使用多个变量时,引用类型可以指向一个内存位置。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。内置的引用类型有:object、dynamic 和 string。
对象(Object)类型
对象(Object)类型 是 C# 通用类型系统(Common Type System - CTS)中所有数据类型的终极基类。Object 是 System.Object 类的别名。所以对象(Object)类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱。
object obj;
obj = 100; // 这是装箱
动态(Dynamic)类型
您可以存储任何类型的值在动态数据类型变量中。这些变量的类型检查是在运行时发生的。
dynamic <variable_name> = value;
类型转换
类型转换从根本上说是类型铸造,或者说是把数据从一种类型转换为另一种类型。在 C# 中,类型铸造有两种形式:
隐式类型转换 - 这些转换是 C# 默认的以安全方式进行的转换, 不会导致数据丢失。例如,从小的整数类型转换为大的整数类型,从派生类转换为基类。
显式类型转换 - 显式类型转换,即强制类型转换。显式转换需要强制转换运算符,而且强制转换会造成数据丢失。
下面的实例把不同值的类型转换为字符串类型:
namespace TypeConversionApplication
{class StringConversion{static void Main(string[] args){int i = 75;float f = 53.005f;double d = 2345.7652;bool b = true;Console.WriteLine(i.ToString());Console.WriteLine(f.ToString());Console.WriteLine(d.ToString());Console.WriteLine(b.ToString());Console.ReadKey();}}
动态常量(运行时常量) readonly
在运行时确定值,只能在声明时或构造函数中初始化,只能在类中定义。定义方法如下:
class Program
{readonly int a=1; // 声明时初始化readonly int b; // 构造函数中初始化Program(){b=2;}static void Main(){}
}
?:运算符
我们已经在前面的章节中讲解了 条件运算符 ? :,可以用来替代 if...else 语句。它的一般形式如下:
Exp1 ? Exp2 : Exp3;
其中,Exp1、Exp2 和 Exp3 是表达式。请注意,冒号的使用和位置。
? 表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个 ? 表达式的值。如果 Exp1 为假,则计算 Exp3 的值,结果即为整个 ? 表达式的值。
数组
1.一维数组初始化
动态初始化:
(1)数据类型[] 数组名=new 数据类型[数组长度];
(2)数据类型[] 数组名=new 数据类型[数组长度]{元素1,元素2…};
(3)数据类型[] 数组名=new 数据类型[]{元素1,元素2…};
静态初始化 → 数据类型[] 数组名={元素1,元素2…};
2.二维数组初始化
数据类型[,] 数组名 = new 数据类型[第一维长度,第二维长度];
int[,] arr= new int[50,3];
数据类型[,] 数组名 = new 数据类型[,]{数组值};
int[,] arr= new int[,]{{1,0,1},{3,0,5}};
数据类型[,] 数组名 = {数组值};
int[,] arr= {{1,0,1},{3,0,5}};
- 二维数组的长度
- 总长度(二维数组的元素个数)
- array.Length
- 第一维的长度
- array.GetLength(0)
- 第二维的长度
- array.GetLength(1)
for (int i = 0; i < heroData.GetLength(0); i++)
{for (int j = 0; j < heroData.GetLength(1); j++){Console.Write(heroData[i,j] + "\t");}//换行Console.WriteLine();
}
函数
// <访问修饰符> <返回值类型> <函数名称> (参数列表)
<Access Specifier> <Return Type> <Method Name>(Parameter List)
{// 函数主体Method Body
}
访问权限修饰符
所有类型和类型成员都具有可访问型级别。该级别可以控制是否可以从你的程序集或其他程序集中的其他代码中使用它们。简单来说就是当前函数或属性的访问权限。
public 整个解决方案中访问。
protected internal 是protected 和 internal 的并集,符合任意一条都可以访问。
proteced 只允许在当前类内部以及该类的子类中访问。
internal 只能在当前项目中访问。在同一个项目中与 public 的权限一致。
private 只允许在本项目本类中被访问。
(1)如果没有主动使用访问修饰符,那么默认是private 私有的,外界是访问不到的。
修饰符 | 类内部 | 子类 | 其他类 |
---|---|---|---|
public | 可以 | 可以 | 可以 |
private | 可以 | 不可以 | 不可以 |
protected | 可以 | 可以 | 不可以 |
参数传递
参数可以通过三种方式传递给函数:
值传递: 值传递会复制参数的实际值并赋值给函数的形式参数,实参和形参使用的是两个不同内存位置中的值,当形参的值发生改变时,不会影响实参的值,从而保证了实参数据的安全。
引用传递: 引用传递会复制参数的内存位置并传递给形式参数,当形参的值发生改变时,同时也会改变实参的值。
输出传递: 输出传递可以一次返回多个值
1.引用传递
引用传递是对变量内存位置的引用。与值传递不同,使用引用传递的形式传递参数时,并不会为形参创建新的内存地址,而是与实参共同指向相同的内存地址。正因为如此,当修改形参的值时,实参的值也会被修改。
在 C# 中,需要使用 ref 关键字来使用引用传递:
class Demo {static void Main(string[] args) {int num = 11;Console.WriteLine("调用函数之前:{0}", num);Func(ref num);Console.WriteLine("调用函数之后:{0}", num);}public static void Func(ref int val){val += val;Console.WriteLine("函数内部的值:{0}", val);}
};
// 输出
// 调用函数之前:11
// 函数内部的值:22
// 调用函数之后:22
// 通过运行结果可以看出,当函数内部值发生更改时,因为他们共用一个内存地址所以调用函数后值发出了改变
2.输出传递
使用 return 语句可以从函数中返回一个值,但是使用输出传递则可以从函数中一次性返回多个值。输出传递与引用传递相似,不同之处在于输出传递是将数据从函数中传输出来而不是传输到函数中。
在 C# 中,需要使用 out 关键字来使用输出传递
class Demo {static void Main(string[] args) {int num = 11;Console.WriteLine("调用函数之前:{0}", num);Func(out num);Console.WriteLine("调用函数之后:{0}", num);}public static void Func(out int val){val = 22;}
};
// 输出
// 调用函数之前:11
// 调用函数之后:22
// 通过运行结果可以看出,在函数体内直接更改了nun的值
注意: 不可直接将参数进行运算,可以直接赋值。如果要进行算术运算则新建一个临时变量进行运算。
ref 不需要对实参赋值,就可以使用。out 需要对实参赋值后,才可以使用。
public static void Func(out int val){// 语法错误val += 22;// 正确int temp = 11;val = temp;val += val;
}
函数重载
(1)与返回值无关(2)与参数列表的个数有关(3)与参数列表的不同数据类型的顺序有关
C#枚举
枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。
C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承
声明枚举的一般语法:
enum <enum_name>
{ enumeration list
};
其中,
- enum_name指定枚举的类型名称
- enumeration list是一个用逗号分隔的标识符列表。
枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值,默认情况下,第一个枚举符号的值是0,后面的比前面的加一,例如:
enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat };
using System;namespace day01
{class Program{enum Day {Sun,Mon,Tue,Wed,Thu,Fri,Sat};static void Main(string[] args){int x = (int)Day.Sun;int y = (int)Day.Fri;Console.WriteLine("Sun={0}\nFri={1}",x,y);}}
}
枚举可以是任何数字数据类型,例如 byte,sbyte,short,ushort,int,uint,long 或 ulong。但是,枚举不能为字符串类型。
在 enum 名称后指定类型为:type。下面定义了字节 enum。
enum Categories: byte{Electronics = 1, Food = 5, Automotive = 6, Arts = 10, BeautyCare = 11, Fashion = 15}
C#结构体
在 C# 中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。
结构体是用来代表一个记录。假设您想跟踪图书馆中书的动态。您可能想跟踪每本书的以下属性:
Title
Author
Subject
Book ID
定义结构体
为了定义一个结构体,您必须使用 struct 语句。struct 语句为程序定义了一个带有多个成员的新的数据类型。
例如,您可以按照如下的方式声明 Book 结构:
struct Books
{public string title;public string author;public string subject;public int book_id;
};
using System;
using System.Text;
namespace day01
{struct Books{public string title;public string author;public string subject;public int book_id;};class Program{static void Main(string[] args){Books Book1;Book1.title = "C programming";Book1.author = "Nuha Ali";Book1.subject = "C programming Tutorial";Book1.book_id = 12345;Console.WriteLine("Book1 title:{0}", Book1.title);Console.WriteLine("Book1 author:{0}", Book1.author);Console.WriteLine("Book1 subject:{0}", Book1.subject);Console.WriteLine("Book1 book_id:{0}", Book1.book_id);Console.ReadKey();}}
}
结构体默认无参数构造函数,不可以显示声明,但是可以写有参数的构造函数。如果结构体存在有参数构造函数,必须在构造方法返回前,对结构体内的属性(变量)进行显示赋值。静态函数本身就是结构体属性,可以通过结构体调用,所以无需声明其修饰符。
静态(static)构造函数:(1)不允许出现访问修饰符(2)静态构造函数必须是无参的
静态构造函数执行时机:(1)只有在调用结构体方法/函数时,才会被执行
静态变量:(1)静态变量的声明,数据类型/用户自定义的类型前面,需要加关键字 static(2)静态变量不归属于某个实例(一般是类的实例或者是结构体的变量),只归属于当前自身。
struct masty
{public string strname;public masty(string name){strname = name;}public void showname(){Debug.Log(strname);}/*public*/ static masty{}}
类(class)
类的定义:一个类由两种东西组成,成员变量(对象有哪些)和成员函数(对象做什么事)。
注:一个类可以有多个对象,这些对象都会做这个类所定义的动作(函数),但各自有不同的数据
成员变量:一个类中的对象所具有的变量。每一个对象有自己的变量。
成员函数:一个类中的方法。
类 对象名词 = new 类(),类的实例化。
静态的成员函数,只能操作静态的成员,不能操作非静态的的成员常量和函数。
构造函数
C#构造函数是一种特殊的成员函数,它主要用于为对象分配存储空间,对数据成员进行初始化.
构造函数的性质:
(1)C#构造函数的名字必须与类同名;
(2)C#构造函数没有返回类型,它可以带参数,也可以不带参数;
(3)声明类对象时,系统自动调用构造函数,构造函数不能被显式调用;
(4)C#构造函数可以重载,从而提供初始化类对象的不同方法;
(5)若在声明时未定义构造函数,系统会自动生成默认的构造函数,此时构造函数的函数体为空.
(6)如果构造函数是私有的private,那么在类的外部,无法对当前类进行实例化。
声明构造函数的要求:
(1)构造函数不能有返回类型,包括void
(2)构造函数的名称必须与类名相同(所以构造函数往往使用形参)
访问修饰符 类名 (参数列表)
{
语句块;
}
析构函数
用于在对象被销毁时执行清理操作。它与构造函数相反,构造函数用于在对象创建时执行初始化操作。
虽然c#(确切说CLR) 提供了一种新的内存管理机制----自动内存管理机制,资源的释放是可以通过“垃圾回收器”自动完成的,一般不需要用户干预,但在有些特殊情况下还是需要用析构函数的,如在c#中非托管资源的释放。
- 析构函数是用于释放资源和执行清理操作的特殊方法
- 析构函数的名称与类名相同,但前面加上一个波浪线(~)作为前缀
- 析构函数在对象被销毁之前自动调用
// 析构函数
~ClassName()
{// 析构函数的代码
}// ~类名()
//{
// 语句块;
//}
面向对象
1.继承
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
- 子类继承父类,父类派生子类
- 子类又叫派生类,父类又叫基类(超类)
- 子类继承父类成员,也可以有自己独立的成员
构造函数:先执行父类的构造函数,再执行子类构造函数
析构函数:先执行子类的析构函数,再执行父类的
继承的方式
class 子类:父类
{
}
class Animal{#region public string Name { get; set; }//名字public string Color { get; set; }//颜色public string Kind { get; set; }//种类public string Favorite { get; set; }//爱好#endregion//父类构造函数public Animal() { }public Animal(string name,string color,string kind){this.Name = name;this.Color = color;this.Kind = kind;}//父类方法public void Introduce() {string info = string.Format("我的名字叫{0},身穿{2}的衣服,我是{1},我爱吃{3}!", Name, Color, Kind, Favorite);Console.WriteLine(info);}}
- this关键字
用来访问父类成员(当前类和父类的成员变量和函数)
class Dog : Animal{public Dog() { }public Dog(string name, string color, string kind, string favorite){this.Name = name;this.Color = color;this.Kind = kind;this.Favorite = favorite;}}
- base关键字
1.调用父类的构造函数
2.调用父类的属性和方法
只能是public / protected相关的
class Cat:Animal{public Cat() { }public Cat(string name,string color,string kind,string favorite):base(name,color,kind)//1.调用父类构造函数{this.Favorite = favorite;}//跳舞public void Dancing(){base.Introduce();//2.调用父类方法Console.WriteLine("下面我给大家表演《小猫迪斯科》,请大家鼓掌啊:>");}}
子类方法的覆盖
- 前提条件:父类中有一个public函数,子类中没有该函数
因为子类中并没有该函数,所以调用必是父类的
- 前提条件:子类里已经有了该函数,父类里面也有该函数
此时,子类对象调用子类的该函数,父类对象调用父类的该函数
这种子类函数,可以称之为覆盖
- 子类在书写该函数的时候,规范的写法应该是: → [访问修饰符] new 返回值类型 函数名(参数列表)
覆盖:子类也有该函数了,以后调用的时候就调用子类的该函数
public class Person
{public string name;public Person(string name){this.name = name;Console.WriteLine(name);}public void Say() //父类的函数{Console.WriteLine("你在干什么!");}
}
public class Person1:Person
{public Person1(string name):base(name){}public new void Say() //覆盖掉父类的函数{Console.WriteLine("弄啥呢!");}
}
public class Person2:Person1
{public Person2(string name) : base(name){}public new void Say() //覆盖掉父类的函数{Console.WriteLine("搞啥呢!");}
}
static void Main(string[] args)
{Person p = new Person("1");p.Say();Person1 p1 = new Person1("2");p1.Say();Person2 p2 = new Person2("3");p2.Say();PersonFun(p2);Console.ReadLine();
}
public static void PersonFun(Person person)
{person.Say();
}
子类方法的重写【表现出多态】
- 如果父类想要子类可以重写该函数
那么父类的该函数必须是一个虚函数
[访问修饰符] virtual 返回值类型 函数名(参数列表)
- 子类该怎么重写
[访问修饰符] override 返回值类型 函数名(参数列表)
- 重写:把子类和父类的该函数都重新写了一遍,有的新的内容
此时,子类的对象,无论是不是转换成了父类的类型,都会执行重写后的该函数
- 关于VS自动生成类重写函数
右键类名
点击快速修复或重构
点击生成重写
public class Person
{public string name;public Person(){}public Person(string name){this.name = name;}public virtual void Say(){Console.WriteLine("我是父类的方法");}}
public class Person1 : Person
{public Person1(string name){}public override void Say(){Console.WriteLine("我是字类的方法");}
}
static void Main(string[] args)
{Person1 p1 = new Person1("我是字类");p1.Say();Person p = new Person1("我是父类");p.Say();Console.ReadLine();
}
2.封装
把一个或多个项目封闭在一个物理的或者逻辑的包中。
在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。
抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使开发者实现所需级别的抽象。
using System;namespace RectangleApplication
{class Rectangle{//成员变量public double length;public double width;public double GetArea(){return length * width;}public void Display(){Console.WriteLine("长度: {0}", length);Console.WriteLine("宽度: {0}", width);Console.WriteLine("面积: {0}", GetArea());}}// Rectangle 结束class ExecuteRectangle{static void Main(string[] args){Rectangle r = new Rectangle();r.length = 4.5;r.width = 3.5;r.Display();Console.ReadLine();}}
}
在上面的实例中,成员变量 length 和 width 被声明为 public,所以它们可以被函数 Main() 使用 Rectangle 类的实例 r 访问。
成员函数 Display() 和 GetArea() 可以直接访问这些变量。
成员函数 Display() 也被声明为 public,所以它也能被 Main() 使用 Rectangle 类的实例 r 访问。
3.多态
多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。
多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。
静态多态性(编译时)
在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。分别为:
- 函数重载
- 运算符重载
动态多态性(运行时)
是通过 抽象类 和 虚方法 实现的。父类对象=子类实例对象 被允许的,当父类对象去调用虚函数时,会去检测子类有没有重写,若重写了,则调用子类重写后的函数。
相关文章:
C#语法基础总结
输入和输出 输入 Console.Read(); 从屏幕读取一个字符,并返回该字符所对应的整型数字 Console.ReadLine(); 从屏幕读取一串字符,并返回该字符串 输出 Console.WriteLine(); 输出内容,并换行 Console.Write(); 输出内容,不换行…...
《深度学习》—— 模型部署
文章目录 模型部署模型准备选择部署平台部署配置与服务化测试与验证优化与维护常用工具与框架Flask本地部署模型 模型部署 模型部署是将训练好的机器学习或深度学习模型投入实际生产环境,使其能够处理实时数据并提供预测或推理服务的过程。 模型准备 模型格式转换…...
E902基于bash与VCS的仿真环境建立
网上看见很多E902仿真的文章,但用到的编译器是类似于这种Xuantie-900-gcc-elf-newlib-x86_64-V3.0.1-20241120,而我按照相应的步骤与对应的编译器,仿真总会报错。后面将编译器换成riscv64-elf-x86_64-20210512,反而成功了。现在开…...
挖矿------获取以太坊测试币
文章目录 挖矿------获取以太坊测试币通过水龙头获取以太坊测试币了解Sepolia是什么?水龙头(Faucet)是什么?Gitcoin Passport是什么? 操作1.MetaMask钱包2.将MetaMask切换到Sepolia测试网络3.用MetaMask连接Gitcoin Pa…...
MySQL事务详解:从理论到实践,保障数据一致性
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、为什么需要事务?二、事务的四大特性(ACID)三、MySQL事务的使用方法1. 基本语法2. 自动提交的设置3. 保存点(…...
在家用台式机上部署 DeepSeek-R1:低成本高性能的 CPU 推理方案---不到 4 万元
近年来,随着大模型技术的飞速发展,开源模型如 DeepSeek-R1 的出现为技术爱好者提供了更多探索人工智能的机会。然而,这类模型动辄数百亿参数,传统意义上需要昂贵的 GPU 集群才能运行,让许多个人开发者望而却步。最近,腾讯玄武实验室基于 CPU 的硬件方案优化,成功将 Deep…...
神经网络量化3-全连接层实现量化
本节,我们模拟下全连接层实现量化,原理上为了方便计算,全连接矩阵采用动态量化的方法,而输入由于不断在变化,我们采用静态量化的方法,直接给出代码: import torch import numpy as np import m…...
12 File文件对象:创建、获取基本信息、遍历文件夹、查找文件;字符集的编解码 (黑马Java视频笔记)
文章目录 File >> 存储数据的方案1. 认识File2. File操作2.1 创建File对象2.2 File操作1)对文件对象的信息的操作2)文件/文件夹的创建/删除3)⭐⭐对文件夹的遍历 3. 方法递归3.1 认识递归3.2 递归算法及其执行流程1) 案例:2…...
【软件工程】03_软件需求分析
3.1 系统分析 1. 系统分析概述 系统分析是一组统称为计算机系统工程的活动。它着眼于所有的系统元素,而非仅仅局限于软件。系统分析主要探索软件项目的目标、市场预期、主要的技术指标等,其目的在于帮助决策者做出是否进行软件项目立项的决定。 2. 可行性分析(Feasibility …...
词向量+位置编码=语义+语序?Transformer如何让相加操作不丢失原意?
在Transformer模型中,词向量(Token Embedding)和位置编码(Position Encoding)通过相加的方式结合,而模型能够同时保留词本身的语义信息和位置信息,这主要得益于以下机制: 为什么相加…...
Spring(7)——MyBatis入门(1)
一、MyBatis入门 1.1 什么是MyBatis MyBatis是一款优秀的持久层框架,用于简化JDBC的开发。 1.2 如何操作MyBatis 在application.properties进行配置 #驱动类名称 spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver #数据库连接的url spring.datasou…...
C语言文件操作入门
本节重点 理解文件的形式与基本概念二进制文件与文本文件文件的打开与关闭文件读写函数、文件缓冲区 正文开始--------------------------------------------------------------------------------------------------------------------- 一、为什么使用文件 程序运行时数据存…...
Java返回多个参数的方法
背景 在写代码的过程中,因有一些复杂的业务逻辑,需要返回多个结果。比如:需要增加一个true或者false,另外在加一个真正的结果值这样的类型。可能会有人用到数组以及Map等作为结果返回,当然这样确实是可以完成这样的功…...
微软开源神器OmniParser V2.0 介绍
微软开源的OmniParser V2.0是一款基于纯视觉技术的GUI智能体解析工具,旨在将用户界面(UI)截图转换为结构化数据,从而实现对计算机屏幕上的可交互元素的高效识别和操控。这一工具通过结合先进的视觉解析技术和大型语言模型…...
Java基础关键_023_IO流(一)
目 录 一、概述 二、分类 1.根据数据流向 2.根据读写数据形式 3.根据流在 IO 操作中的作用和实现方式 三、FileInputStream 1.说明 2.常用方法 (1)read() (2)read(byte[] b) (3)read(byte[] b, …...
Lora 中 怎么 实现 矩阵压缩
Lora 中 怎么 实现 矩阵压缩 1. 导入必要的库 import torch import re from datasets import Dataset from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer, \get_cosine_schedule_with_warmup, EarlyStoppingCallback from peft...
lombok不起作用
xml <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.32</version> <scope>provided</scope> </dependency> - **作用**:引入 L…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-1-常用命令速查表-集群健康检查、索引生命周期管理、故障诊断命令
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 附录-常用命令速查表 1-Elasticsearch 运维命令速查表(集群健康检查、ILM管理、故障诊断)一、集群健康检查与监控1.1 集群健康状态核心命令1.2 节点级健康诊断…...
探讨Deveco Studio常见问题及解决方案,分享快速排障方法
以下是针对 DevEco Studio 开发工具的常见问题、解决方案及快速排障方法,覆盖环境配置、编译运行、调试等多个环节,助您高效解决开发中的“拦路虎”。 一、环境配置问题 1. 安装失败或卡顿 现象: 安装时进度条卡住,或提示“Faile…...
Spring设计模式 八股速记 高层模块底层模块 依赖倒置原则 开闭原则 接口隔离原则
目录 高层模块底层模块 一、定义与核心思想 二、实现方式 三、优点与价值 四、典型应用场景 五、与其他原则的关系 示例说明 依赖倒置原则 一、定义与核心思想 二、实现方式 三、优点与价值 四、典型应用场景 五、与其他原则的关系 示例说明 自己理解 开闭原则 …...
RISCV虚拟化环境搭建
概要 本文记搭建 RISCV 虚拟化环境的流程。 整体架构 我们使用 QEMU 来模拟 RISCV 的各种硬件扩展环境,通过 QEMU 启动 Ubuntu 作为我们的 Host 来在 Host 之中通过 KVMTOOL 来运行 Guest,学习 RISCV 的虚拟化。 目前我的 X86_64 主机使用的是 Ubunt…...
数据结构——串、数组和广义表
串、数组和广义表 1. 串 1.1 串的定义 串(string)是由零个或多个字符组成的有限序列。一般记为 S a 1 a 2 . . . a n ( n ≥ 0 ) Sa_1a_2...a_n(n\geq0) Sa1a2...an(n≥0) 其中,S是串名,单引号括起来的字符序列是串的值, a i a_i a…...
vue3 elementUi table自由渲染组件
文章目录 前言CustomTable如何使用tableColumn 属性h函数创建原生元素创建组件动态生成 前言 elementui中的table组件,表格中想要自由地渲染内容,是一种比较麻烦的事情,比如你表格中想要某一列插入一个button按钮,是不是要用插槽…...
Centos离线安装gcc
文章目录 Centos离线安装gcc1. gcc是什么?2. gcc下载地址3. gcc的安装4. 安装结果验证 Centos离线安装gcc 1. gcc是什么? GCC(GNU Compiler Collection)是 GNU 项目下的开源编译器套件,主要用于将 C、C 等编程语言的源…...
odbus TCP转Modbus RTU网关快速配置案例
Modbus TCP 转Modbus RTU网关快速配置案例 在工业自动化领域,Modbus 协议以其简洁和高效而著称,成为众多设备通信的首选。 随着技术的发展和应用场景的变化,Modbus 协议也发展出了不同的版本,其中 Modbus TCP 和 Modbus RTU 是两种…...
Unity3D开发AI桌面精灵/宠物系列 【一】 窗口透明化 背景剔除 、去边框、去Logo动画UI正常显示
Unity3D 交互式AI桌面宠物开发系列【一】 文章主要介绍怎么制作AI桌面宠物的流程,我会从项目开始创建初期到最终可以和AI宠物进行交互为止,项目已经开发完成,我会仔细梳理一下流程,分步讲解。 这篇文章主要讲初期一些设置和部署。…...
Vue 自定义指令深度解析与应用实践
文章目录 1. 自定义指令概述1.1 核心概念1.2 指令生命周期 2. 自定义指令基础2.1 指令注册2.2 指令使用 3. 指令钩子函数详解3.1 钩子函数参数3.2 钩子函数示例 4. 自定义指令应用场景4.1 表单自动聚焦4.2 权限控制4.3 图片懒加载 5. 高级应用技巧5.1 动态指令参数5.2 指令修饰…...
基于SpringBoot+Vue的幼儿园管理系统+LW示例参考
1.项目介绍 系统角色:管理员、教师、普通用户功能模块:用户管理、教师管理、班级管理、幼儿信息管理、会议记录管理、待办事项、职工考核、请假信息、缴费信息、体检管理、资源管理、原料管理、菜品信息管理等技术选型:SpringBoot࿰…...
超级课程表项目结尾
L3-17-05-main.py def __init__(self):app QApplication([])self.window QMainWindow()self.window.setWindowTitle("超级课程表")cusWidget CourseWidget()self.window.setCentralWidget(cusWidget)self.showCourse()self.showNotes()# 1. 创建菜单栏self.menuba…...
Spring Retry
1. Spring Retry 的工作原理 内部机制 Spring Retry 主要通过 AOP(面向切面编程)实现重试逻辑。以下是 Spring Retry 的内部工作流程: AOP 拦截器:当一个方法被标记为需要重试,并且该方法抛出了指定类型的异常时&am…...
16.使用读写包操作Excel文件:XlsxWriter 包
一 XlsxWriter 的介绍 XlsxWriter 只能写入 Excel 文件。 OpenPyXL 和 XlsxWriter 的区别在笔记 15 。 二 如何使用 XlsxWriter 1.导包 import datetime as dtimport xlsxwriterimport excel 2.实例化工作簿 book xlsxwriter.Workbook("xlxswriter.xlsx") book.clo…...
【最新版】智慧小区物业管理小程序源码+uniapp全开源
一.系统介绍 智慧小区物业管理小程序,包含小区物业缴费、房产管理、在线报修、业主活动报名、在线商城等功能。为物业量身打造的智慧小区运营管理系统,贴合物业工作场景,轻松提高物业费用收缴率,更有功能模块个性化组合,助力物业节约成本高效运营。 二.搭建环境 系统环…...
音视频入门基础:RTP专题(18)——FFmpeg源码中,获取RTP的音频信息的实现(上)
由于本文篇幅较长,分为上、下两篇。 一、引言 通过FFmpeg命令可以获取到SDP描述的RTP流的的音频压缩编码格式、音频压缩编码格式的profile、音频采样率、通道数信息: ffmpeg -protocol_whitelist "file,rtp,udp" -i XXX.sdp 而由《音视频入门…...
基于SpringBoot+Vue的驾校预约管理系统+LW示例参考
1.项目介绍 系统角色:管理员、普通用户、教练功能模块:用户管理、管理员管理、教练管理、教练预约管理、车辆管理、车辆预约管理、论坛管理、基础数据管理等技术选型:SpringBoot,Vue等测试环境:idea2024,j…...
基于k3s部署Nginx、MySQL、PHP和Redis的详细教程
先决条件 一台Linux服务器(或本地虚拟机),建议Ubuntu/CentOS基础命令行操作能力确保服务器有至少2GB内存和10GB磁盘空间 1. 安装k3s(极简Kubernetes) 1.1 一键安装 # 用root用户或sudo权限执行以下命令 curl -sfL h…...
21.多态
一、多态概念 多种形态。 静态多态:编译时多态。(函数重载) 动态多态:运行时多态。(继承关系下,调用父类指针或引用,对于不同的对象有不同的行为) 二、多态的定义及实现 1ÿ…...
无再暴露源站!群联AI云防护IP隐匿方案+防绕过实战
一、IP隐藏的核心原理 群联AI云防护通过三层架构实现源站IP深度隐藏: 流量入口层:用户访问域名解析至高防CNAME节点(如ai-protect.example.com)智能调度层:基于AI模型动态分配清洗节点,实时更新节点IP池回…...
新版AndroidStudio / IDEA上传项目到Gitee
目录 1.Gitee创建仓库 2.填写仓库的信息 3.创建成功后复制仓库的地址 4.检查AndroidStudio是否配置Git 5.点击测试 6.之后Create Git Repository 7.添加到本地仓库 8.提交项目 9.添加上传仓库的地址 10.上传成功 11.去Gitee上刷新检查 1.Gitee创建仓库 2.填写仓库的…...
学习threejs,使用MeshFaceMaterial面材质容器
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.MeshFaceMaterial 二…...
python微分方程求解,分别用显式欧拉方法、梯形法、改进欧拉方法、二阶龙格库塔方法、四阶龙格库塔方法求解微分方程
微分方程在自然科学、工程技术、社会科学等多个领域都有着广泛而重要的应用。而求解微分方程是数学与应用数据领域一大难题,对于一些复杂的微分方程无法通过计算推导计算其精确的方程表达式与 结果,因此,我们通过数学理论。迭代,微…...
【ubuntu】——wsl中使用windows中的adb
一、引言 在 Windows Subsystem for Linux(WSL)环境下工作时,有时需要使用 Android Debug Bridge(ADB)工具与 Android 设备进行交互。通过特定设置,能够在 WSL 中便捷地调用 Windows 系统中已安装的 ADB&a…...
Git 常用命令完全指南:从入门到高效协作
文章需要结构清晰,涵盖从入门到进阶的常用命令,结合实例和注意事项,帮助用户快速掌握Git的核心功能,并应用到实际项目中 一、仓库初始化与基础操作 1. 创建与克隆仓库 # 初始化本地仓库 git init# 克隆远程仓库(SSH方…...
学习单片机需要多长时间才能进行简单的项目开发?
之前有老铁问我,学单片机到底要多久,才能进行简单的项目开发?是三个月速成,还是三年磨一剑? 今天咱们就来聊聊这个话题,我不是什么高高在上的专家,就是个踩过无数坑、烧过几块板子的“技术老友”…...
面试系列|蚂蚁金服技术面【3】
今天继续分享一下蚂蚁金服的 Java 后端开发岗位真实社招面经,复盘面试过程中踩过的坑,整理面试过程中提到的知识点,希望能给正在准备面试的你一些参考和启发,希望对你有帮助,愿你能够获得心仪的 offer ! 第二轮面试之…...
Spring Boot项目中成功集成了JWT
JWT 原理解释 什么是 JWT? JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在网络应用环境间安全地将信息作为JSON对象传输。JWT通常用于身份验证和信息交换。 JWT 的结构 JWT由三部分组成ÿ…...
《Java SQL 操作指南:深入理解 Statement 用法与优化》
在 Java 数据库编程中,Statement 是用于执行 SQL 语句的接口,允许程序与数据库进行交互。本文将详细介绍 Statement 的基本概念、常见用法以及 PreparedStatement 和 CallableStatement 等相关接口。 1. Statement 基本介绍 Statement 接口继承了 AutoC…...
element ui设置结束时间为23:59:59
开始时间为00:00:00结束时间为23:59:59 在请求接口前,用substring取结束时间的年月日,并替换时间值即可 <el-formref"searchForm":model"searchForm":inline"true"size"mini"keyup.enter.native"getDa…...
Matlab 舰载机自动着舰控制系统研究
1、内容简介 Matlab 188-舰载机自动着舰控制系统研究 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...
数据集格式转换——json2txt、xml2txt、txt2json【复制就能用】
秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏地址:YOLO11入门 + 改进涨点——点击即可跳转 欢迎订阅 目录 json2txt脚本 xml2txt txt2json...
MySQL 横向衍生表(Lateral Derived Tables)
前面我们介绍过MySQL中的衍生表(From子句中的子查询)和它的局限性,MySQL8.0.14引入了横向衍生表,可以在子查询中引用前面出现的表,即根据外部查询的每一行动态生成数据,这个特性在衍生表非常大而最终结果集…...