Backend - C# 基础知识
目录
一、程序结构
(一)内容
1. 命名空间声明 Namespace
2. 一个 class 类
3. class 方法(类方法)
4. class 属性
5. 一个 main 方法(程序入口)
6. 语句&表达式
7. 注释
(二)举例
二、编写规范
1. 区分大小写
2. 所有语句和表达式必须用分号“;”结尾
3. 用tab键可获取提示的语句
4. 注意在打印字串时,若想展示变量数据,记得用{下标}站位符
举例:
5. 调用方法时,不能直接用类.方法(),而是要先实例化类
6. 注释方法
三、定义
(一)执行程序
1. 程序执行是从Main方法开始的
2. Main方法的定义是用static,而不是public
举例:
(二)定义方法&变量、传递数据、数据处理
1. 不回传值
2. 回传值
3. Console.WriteLine( )拼接字串和变量值
(1)用("XXX{下标}XXX", 变量名)
(2)用$("XXX{变量名}XXX")
4. 处理字符串
(1)字符串是否包含某值
(2)截取字符串的某部分
5. 传递参数
(1)按值传参
(2)按引用传参
6. 可回传多个值(按输出传递参数)
7. 数组
(1)初始化数组
(2)传值时
(3)访问数组(取值时)
8. 多态性
(1)理解
(2)函数重载
9. C#不能多重继承,但可用接口实现多重继承
10. 重载运算符
(1)含义
(2)注意
(3)举例
11. 异常捕捉
12. 多线程
13. 静态 static
(1)静态结构
(2)静态方法被调用时
(3)静态类的设定前提
(4)静态类的特点
(5)注意
(6)举例
14. 访问修饰符
(1)private
(2)protected
(3)internal
(4)public
① protected的使用
② internal的使用
15. 扩展方法
(1)作用
(2)特点
(3)举例
16. 命名空间
17. 自定义列表、字典内容
(1)定义列表List类型
(2)定义列表包字典
三、基础使用
(一)当赋值为空时
1. 可空类型(?)
2. null合并符(??)
(二)关闭“程序自动退出”
(三)ReadKey()和ReadLine()区别
1. ReadKey()
2. ReadLine()
(四)Convert转换类型
(五)获取用户输入
(六)遇到问题:错误 (作用中) CS8370 在 C# 7.3 中无法使用 '集合运算式' 功能。请使用语言版本 12.0 或更高的版本。
(七)处理日期
(八)当前时间
1. 默认格式
2. 常用格式
3. 时间戳格式
(1)真实时间戳
(2)字符串的时间戳
一、程序结构
.NET 是软件框架,可开发程序。 C# 是基于.NET框架的编程语言。
(一)内容
1. 命名空间声明 Namespace
2. 一个 class 类
3. class 方法(类方法)
4. class 属性
5. 一个 main 方法(程序入口)
6. 语句&表达式
7. 注释
(二)举例
using System;
/* 命名空间 HelloWorldApplication */
namespace HelloWorldApplication
{/* 类名为 HelloWorld */class HelloWorld{/* main函数(程序入口) */static void Main(string[] args){/* 我的第一个 C# 程序 */Console.WriteLine("Hello World!");Console.ReadKey();}}
}
二、编写规范
1. 区分大小写
2. 所有语句和表达式必须用分号“;”结尾
3. 用tab键可获取提示的语句
4. 注意在打印字串时,若想展示变量数据,记得用{下标}站位符
举例:
Console.WriteLine("sum1={0}", 330);// 而不是Console.WriteLine("sum1=", 330);
5. 调用方法时,不能直接用类.方法(),而是要先实例化类
若出现问题:
需要有物件参考,才可使用非静态栏位、方法或属性。
解决:
先初始化类对象,然后再使用类里的方法。
6. 注释方法
/// <summary>
/// <para> 这是一个注释内容 </para>
/// </summary>
三、定义
(一)执行程序
1. 程序执行是从Main方法开始的
2. Main方法的定义是用static,而不是public
举例:
static void Main(string[] args){ }
// 而不是public void Main(string[] args){ }
(二)定义方法&变量、传递数据、数据处理
1. 不回传值
设置方法名前的回传类型为void
public void Acceptdata(string args)
{bookname = args;
}
2. 回传值
设置方法名前的回传类型为回传值的类型
public int Acceptdata()
{int bookprice = 10;return bookprice;
}
3. Console.WriteLine( )拼接字串和变量值
(1)用("XXX{下标}XXX", 变量名)
string[] bookinfo = new string[] { "数据结构", "¥20" };Console.WriteLine("这本书的名字是:{0},价格是{1}", bookinfo[0], bookinfo[1]);
// 这本书的名字是:数据结构,价格是¥20
Console.WriteLine("这本书的价格是:{1},名字是{0}", bookinfo[0], bookinfo[1]);
// 这本书的价格是:¥20,名字是数据结构
(2)用$("XXX{变量名}XXX")
Console.WriteLine($"这本书的价格是:{bookinfo[1]},名字是{bookinfo[0]}");
// 这本书的价格是:¥20,名字是数据结构
4. 处理字符串
(1)字符串是否包含某值
string str1 = "this is a text!";
string str2 = "text";
Console.WriteLine(str1.Contains(str2));
(2)截取字符串的某部分
string str1 = "this is a text!";
string child_str = str1.Substring(3);
Console.WriteLine(child_str);
5. 传递参数
(1)按值传参
实参和形参互不影响。形参发生改变时,不会影响到实参。
举例:
using System;
namespace testapplication
{class ClsA{public void Swapdata(int a, int b){int c = a;a = b;b = c;Console.WriteLine("換值方法內:a={0},b={1}", a, b); // 換值方法內:a=3,b=2}static void Main(string[] args){int x = 2;int y = 3;ClsA c = new ClsA();c.Swapdata(x, y);Console.WriteLine("Main方法內:a={0},b={1}", x, y); // Main方法內:a=2,b=3Console.ReadKey();}}
}
(2)按引用传参
ref关键字声明引用参数。
举例:
using System;
namespace testapplication
{class ClsA{public void Swapdata(ref int a, ref int b){int c = a;a = b;b = c;Console.WriteLine("換值方法內:a={0},b={1}", a, b); // 換值方法內:a=3,b=2}static void Main(string[] args){int x = 2;int y = 3;ClsA c = new ClsA();c.Swapdata(ref x, ref y);Console.WriteLine("Main方法內:a={0},b={1}", x, y); // Main方法內:a=3,b=2Console.ReadKey();}}
}
6. 可回传多个值(按输出传递参数)
因为return只能回传一个值,用out属性可以回传多个。
using System;
namespace testapplication
{class ClsA{public void Rtndata(int m, int n, out int x, out int y){x = m * m;y = n * n;}static void Main(){int a = 2;int b = 3;ClsA c = new ClsA();c.Rtndata(a, b, out a, out b);Console.WriteLine("a={0}, b={1}", a, b);Console.ReadLine();}}
}
7. 数组
(1)初始化数组
举例:(定义+赋值)
// int类型的数组
int[] num_arr = new int[3];
int[] num_arr2 = new int[] {10, 20};// 字符串类型的数组
string[] bookname = new string[] { "aa", "bb" };
(2)传值时
class ClsA
{string[] bookname;public void Bookdata(string[] args){bookname = args;}public string[] Rtndata() {return bookname;}
}
ClsA c = new ClsA();
c.Bookdata(new string[] {"数据结构", "计算机组成原理" });
(3)访问数组(取值时)
// 第1种:遍历并打印数组中的每个元素
foreach (var item in res)
{Console.WriteLine(item);
}
// 第2种:用逗号连接数组的每个元素
Console.WriteLine(string.Join(", ", res));
8. 多态性
(1)理解
一个Switch开关按钮,它既可以开,也可以关,在不同的情况下不同的功能作用。
同理,多态性在C#中的实际应用有函数重载。
(2)函数重载
要求函数的定义必须不同。即,传入的参数类型不同or参数个数不同。
举例:
using System;
namespace testapplication
{class ClsA{public int AddData(int a, int b){return a + b;}public int AddData(int a, int b, int c){return a + b + c;}public int AddData(){return 666;}}class ClsB {static void Main(){ClsA a = new ClsA();int sum1 = a.AddData(1,2);int sum2 = a.AddData(1, 2,3);int sum3 = a.AddData();Console.WriteLine("sum1={0}", sum1);Console.WriteLine("sum2={0}", sum2);Console.WriteLine("sum3={0}", sum3);Console.ReadKey();}}
}
9. C#不能多重继承,但可用接口实现多重继承
比如,错误写法:
class ClsA{ }class ClsB{ }class ClsC{ }class ClsAll: ClsA, ClsB, ClsC{ }
正确写法:只能继承一个类,其余的类改成接口
class ClsA { }interface IClsB{ }interface IClsC{ }class ClsAll: ClsA, IClsB, IClsC{ }
完整的正确写法:
using System;
namespace testapplication
{class ClsA {protected int aa;protected int bb;public void ChangeVar(int a, int b){aa = a+10;bb = b+100;}}interface IclsB{// 接口int SubtData();}class ClsAll: ClsA, IclsB // 继承最多一个类,可多个接口{public void AddCount(){Console.WriteLine("add res={0}", aa + bb); // 使用的是基类的aa和bb}public int SubtData() // 重写了接口的方法{Console.WriteLine("subtract res={0}", bb - aa);return bb -aa;}}class ClsTest {static void Main(){ClsAll a = new ClsAll();a.ChangeVar(20,300); // 继承基类的方法a.AddCount(); // 派生类的方法a.SubtData(); // 继承接口的方法Console.ReadKey();}}
}
10. 重载运算符
(1)含义
(2)注意
不能用ref和out等参数,只能使用值参数。
有>=操作符,就必须有对称的<=操作符。
(3)举例
using System;
namespace testapplication
{class clsA{private int num1;private int num2;public int rtnNum1(){return num1;}public int rtnNum2(){return num2;}public void setNum(int a, int b){num1 = a;num2 = b;}public int addFunc(){return num1 + num2;}public int subtFunc(){return num2 - num1;}public static clsA operator+ (clsA cls1, clsA cls2){clsA clsa = new clsA ();clsa.num1 = cls1.num1 + cls1.num1;clsa.num2 = cls1.num2 + cls1.num2;return clsa;}public static clsA operator- (clsA cls1, clsA cls2){clsA clsa = new clsA ();clsa.num1 = cls1.num1 - cls2.num1;clsa.num2 = cls1.num2 - cls2.num2;return clsa;}public static bool operator <=(clsA cls1, clsA cls2){clsA clsa = new clsA();if (cls1.num1 <= cls2.num1 && cls1.num2 <= cls2.num2){return true;}return false;}public static bool operator >=(clsA cls1, clsA cls2){clsA clsa = new clsA();if (cls1.num1 >= cls2.num1 && cls1.num2 >= cls2.num2){return true;}return false;}}class clsB{static void Main(){clsA clsA_1 = new clsA ();clsA clsA_2 = new clsA ();clsA clsA_3 = new clsA ();clsA_1.setNum(2, 20);clsA_2.setNum(3, 30);// 测试 一般方法Console.WriteLine("clsA_1的和: {0}", clsA_1.addFunc()); // 2+20Console.WriteLine("clsA_2的和: {0}", clsA_2.addFunc()); // 3+30// 测试 operator重载操作符"-" clsA_3 = clsA_2 - clsA_1;Console.WriteLine("clsA_3的和: {0}", clsA_3.addFunc()); // (3-2) + (30-20)// 测试 operator重载操作符">="if (clsA_1 <= clsA_2){Console.WriteLine("clsA_1的值1【{0}】小于clsA_2的值1【{1}】,clsA_1的值2【{2}】小于clsA_2的值2【{3}】", clsA_1.rtnNum1(), clsA_2.rtnNum1(), clsA_1.rtnNum2(), clsA_2.rtnNum2()); }Console.ReadKey();}}
}
11. 异常捕捉
其中,throw ex;表示抛出异常
举例:
using System;
public class Example
{class Test{public void exc(int a, int b){try{int test_res = a / b;Console.WriteLine("this is the code that need to be executed");}catch (Exception ex){Console.WriteLine("occur Exception: {0}", ex);throw ex;}finally{Console.WriteLine("this is the final code");}}}public static void Main(){Test t = new Test();t.exc(3, 0);Console.ReadKey();}
}
12. 多线程
写法:main函数和线程函数必须写在同一个类中
举例:
using System;
using System.Threading;
public class Example
{class Test{public static void threadFunc(){Console.WriteLine("this is a child thread");}static void Main(){ThreadStart ths = new ThreadStart(threadFunc);Thread th = new Thread(ths);Console.WriteLine("this is the main thread");th.Start();Console.ReadKey();}}
}
13. 静态 static
(1)静态结构
理解:相当于缓存
包括:静态变量、静态方法、静态类
识别:加上static修饰符
(2)静态方法被调用时
只能由类访问(实例方法只能由实例化后的对象访问)
一般适用于该方法被反复调用多次。
(3)静态类的设定前提
一般适用于被经常使用的类型。即,不用每次使用类方法时都先实例化一次。
但很少用的类型,就无需定义为静态类,因为一直占内存,只有等到程序停止或被卸载时才释放内存(如果用实例化的话,可以即时释放内存)。
(4)静态类的特点
不能被实例化;不能被继承;包含的都是静态成员(静态变量、静态方法)。
(5)注意
无论是否是静态,在多次调用同个类(或实例对象)时,变量只会在第一次调用时被初始化,后几次都会沿用上一次最新变量的值。
(6)举例
using System;namespace testApp
{static class StaticCls{static int booknum = 0;public static int staticFunc(){booknum++;return booknum;}}class NoStaCls{int booknum = 0;public int nostaFunc(){booknum++;return booknum;}}class MainCls{static void Main(){int bookA = StaticCls.staticFunc();int bookB = StaticCls.staticFunc();Console.WriteLine($"《static》:this is a number of 【A】books: {bookA}");Console.WriteLine($"《static》:this is a number of 【B】books: {bookB}");NoStaCls nos1 = new NoStaCls();int bookANo = nos1.nostaFunc();int bookBNo = nos1.nostaFunc();Console.WriteLine($"《no static》:this is a number of 【A】books: {bookANo}");Console.WriteLine($"《no static》:this is a number of 【B】books: {bookBNo}");Console.ReadKey();}}
}
14. 访问修饰符
(1)private
存取只能是类自己内部。
(2)protected
存取只能是自己本类、自己的子类。
(3)internal
存取只能是同个命名空间中的类(namespace 定义的类自己内部)。
(4)public
存取没有限制。
举例:
① protected的使用
using System;class BaseTest // 基类
{public int a = 10;protected int b = 2;
}class ChildTest : BaseTest // 派生类继承基类
{int c;int d;static void Main(string[] args){BaseTest basetest = new BaseTest();ChildTest childtest = new ChildTest();childtest.c = basetest.a; //a属于public 可直接从 基类 实例化后获取childtest.d = childtest.b; // b属于protected 限制只能从 派生类 实例化后获取Console.WriteLine($"c={childtest.c}");Console.WriteLine($"d={childtest.d}");Console.ReadKey();}
}
② internal的使用
using Common;
using System;namespace Common // 命名空间1
{internal class CommonCls // 设定 internal {public void Saysomething(){Console.WriteLine("running success!");}}
}namespace TestWeb // 命名空间2
{internal class TestA : Common.CommonCls // 继承其他命名空间的internal类,子类也要internal(权限范围不能大于基类){public void TestFunc(){CommonCls c = new CommonCls(); // 实例化其他命名空间的基类c.Saysomething(); // 调用方法Console.ReadKey();}public static void Main(string[] args){TestA t = new TestA();t.TestFunc();}}
}
15. 扩展方法
(1)作用
在现有类中添加方法。
(2)特点
所在类必须声明为 static 。
该方法本身必须声明为 public static 。
该方法的第一个参数必须包含 this ,并且指定该参数类型。
扩展方法的优先级低于同名的类方法。
除非必要,不要滥用扩展方法。
(3)举例
using System;
static class Program // 静态类
{static void Main(string[] args){int bookdays = 123;string res1 = bookdays.ToString(); // 默认的方法string res2 = bookdays.ToString(" valid", " days"); // 扩展方法,必须用对象来调用Console.WriteLine("default res is 【{0}】, add new res is 【{1}】", res1, res2);Console.ReadKey();}public static string ToString(this int num1, string str1, string str2) // 声明扩展方法{// 扩展方法以及所在类,必须是静态的 // 扩展方法的第一个参数必须有this,以及该参数的类型return num1 + str1 + str2;}
}
16. 命名空间
调用代码时,若不在同一个命名空间,则使用using 导入需要调用代码所在的命名空间名。
17. 自定义列表、字典内容
(1)定义列表List类型
var datalist = new List<object> { 123, "abcd"};
// 内容是datalist=[123, "abcd"]
(2)定义列表包字典
namespace StartExeSpace
{class StartExe{public void PrtRes(List<Dictionary<string, object>> dt){foreach(var d in dt){Console.WriteLine($"key:【{d["key"]}】, value:【{d["val"]}】");}Console.ReadKey();}static void Main(){// 如果类型不一致,就用objectvar datalist = new List<Dictionary<string, object>> //定义列表包字典{new Dictionary<string, object> { { "key", "教育" }, { "val", "家" } },new Dictionary<string, object> { { "key", "科幻" }, { "val", "三体" } },new Dictionary<string, object> { { "key", "教育" }, { "val", 123 } },}; // 类似于python的[{"key": "教育", "val": "家" }, {"key": "科幻", "val": "三体" }, {"key": "教育", "val": "数据结构" }]var se = new StartExe();se.PrtRes(datalist); //打印展示数据}}
}
三、基础使用
(一)当赋值为空时
1. 可空类型(?)
2. null合并符(??)
举例:
using System;
namespace testapplication
{class ClsA{static void Main(){// 避免赋值的值类型“null 空”,与定义的类型“int”不同,而导致的错误(2种方法)// 第一种(当a的值赋予null空时,可在int类型后加一个?问号)int? a = null; // 第二种(当a的值赋予null空时,可在空值后加2个问号)int b = a??0; Console.WriteLine("a={0},b={1}", a,b); // a=null, b=0Console.ReadKey();}}
}
(二)关闭“程序自动退出”
Console.ReadKey();
// 程序会在有任意按键动作后退出。
(三)ReadKey()和ReadLine()区别
1. ReadKey()
是等待按任意键,才执行下一步。
2. ReadLine()
是等待输入内容后 ,需要按回车键,才执行下一步。
(四)Convert转换类型
string str = "123";
int number = Convert.ToInt32(str);
// 转换成功,number为123
(五)获取用户输入
默认用户输入的值是字串,若想输入的值是自定义类型,则需要强制转换。
举例:
string read_str = Console.ReadLine();
int read_int = Convert.ToInt32(Console.ReadLine());
(六)遇到问题:错误 (作用中) CS8370 在 C# 7.3 中无法使用 '集合运算式' 功能。请使用语言版本 12.0 或更高的版本。
解决:先检查是否为语法错误。若不是个人因素,则修改系统设定。即,找到项目下的.csproj格式的文件,然后在<PropertyGroup>中插入<LangVersion>。
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">. . . <LangVersion>latest</LangVersion>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">. . . <LangVersion>latest</LangVersion>
</PropertyGroup>
(七)处理日期
DateTime dt = new DateTime(2024, 05, 29, 17, 30, 01, 02);
string dt_str1 = dt.ToString("y yy yyy yyyy"); // 24 24 2024 2024
string dt_str2 = dt.ToString("M MM MMM MMMM"); // 5 05 五月 五月
string dt_str3 = dt.ToString("yyyy/MM/dd HH:mm:ss.fff"); // 2024/05/29 17:30:01.002
string dt_str4 = dt.ToString("yyyy/MM/dd tt hh:mm dddd"); // 2024/05/29 下午 05:30 星期三
Console.WriteLine("年的格式:{0}", dt_str1);
Console.WriteLine("月的格式:{0}", dt_str2);
Console.WriteLine("年月日 時間 的格式:{0}", dt_str3);
Console.WriteLine("年月日 時間 周 的格式:{0}", dt_str4);
Console.ReadKey();
(八)当前时间
1. 默认格式
DateTime now = DateTime.Now;
Console.WriteLine($"default:【{now}】");
//default:【2024 / 6 / 11 下午 01:55:31】
2. 常用格式
DateTime now = DateTime.Now;
string nowtime = now.ToString("yyyy-MM-dd HH:mm:ss.fff zzz"); // ss代表两位数的秒钟;fff代表毫秒的三位数;zzz表示时区偏移量
Console.WriteLine($"nowtime:【{nowtime}】");
//nowtime:【2024 - 06 - 11 13:55:31.531 + 08:00】
3. 时间戳格式
(1)真实时间戳
DateTime utcnow =DateTime.UtcNow;
Console.WriteLine($"utcnow:【{utcnow}】");
(2)字符串的时间戳
DateTime now = DateTime.Now;
string tmkey = now.ToString("yyyyMMddHHmmssffff");
Console.WriteLine($"timekey:【{tmkey}】");
//timekey:【202406111355315318】
相关文章:

Backend - C# 基础知识
目录 一、程序结构 (一)内容 1. 命名空间声明 Namespace 2. 一个 class 类 3. class 方法(类方法) 4. class 属性 5. 一个 main 方法(程序入口) 6. 语句&表达式 7. 注释 (二)举例…...

HTML5新增的input元素类型:number、range、email、color、date等
HTML5 大幅度地增加与改良了 input 元素的种类,可以简单地使用这些元素来实现 HTML5 之前需要使用 JavaScript 才能实现的许多功能。 到目前为止,大部分浏览器都支持 input 元素的种类。对于不支持新增 input 元素的浏览器,input 元素被统一…...

00 Debian字符界面如何支持中文
作者:网络傅老师 特别提示:未经作者允许,不得转载任何内容。违者必究! Debian字符界面如何支持中文 《傅老师Debian知识库系列之00》——原创 前言 傅老师Debian知识库特点: 1、拆解Debian实用技能; 2、…...

以太网中的各种帧结构
帧结构(Ethernet Frame Structure)介绍 以太网信号帧结构(Ethernet Signal Frame Structure),有被称为以太网帧结构,一般可以分为两类 —— 数据帧和管理帧。 按照 IEEE 802.3,ISO/IEC8803-3 …...

C++入门基础题:数组元素逆序(C++版互换方式)
1.题目: 数组元素逆置案例描述: 请声明一个5个元素的数组,并且将元素逆置. (如原数组元素为:1,3,2,5,4;逆置后输出结果为:4,5,2,3,1) 2.图解思路: 3.代码演示: #include<iostream>using namespace std;int main(){int a…...

3款自己电脑就可以运行AI LLM的项目
AnythingLLM、LocalGPT和PrivateGPT都是与大语言模型(LLM)相关的项目,它们允许用户在本地环境中与文档进行交互,但它们在实现方式和特点上存在一些差异。AnythingLLM使用Pinecone和ChromaDB来处理矢量嵌入,并使用OpenA…...

各云厂商取消免费一年期SSL证书
目录 第一次削减SSL证书有效期: SSL证书单次签发有效期可能再次削减: 目前市场趋势显现: 各类削减政策意味着什么: 上有政策、下有对策—怎么实现超长SSL证书有效期: 如何申请全自动化部署的SSL证书:…...

自动化测试高级控件交互方法:TouchAction、触屏操作、点按,双击,滑动,手势解锁!
在自动化测试领域中,TouchAction 是一种非常强大的工具,它允许我们模拟用户在设备屏幕上的各种触摸事件。这种模拟不仅限于简单的点击操作,还包括滑动、长按、多点触控等复杂的手势。 点按与双击 点按和双击是触屏设备上最基本的操作之一。…...

leetcode165.解密数字
题目表述: 这道题目和斐波那契数列以及跳台阶问题十分相似。 斐波那契数列:0、1、1、2、3、5, 8、13、21、34 …… leetcode跳台阶问题:1、1、2、3、5, 8、13、21、34....... 这类题目的特点都是第N项的结果等于前两项的和。 但是解密数…...

对为什么react需要时间分片,vue3不需要的浅学习
1、时间分片 时间分片指在让应用在cpu进行大量计算时也能与用户交互,但时间分片只能对大量cpu计算进行优化,无法优化复杂DOM操作,因为要确保用户正在操作的界面是最新。 web卡顿的场景: 1、cpu计算量不大,但dom操作…...

电脑干货分享 · 删除资源管理器导航栏 OneDrive 及 3D 对象
Win10资源管理器的左侧导航栏默认有一个OneDrive的项,但由于微软龟速的原因,OneDrive在国内基本很少有人使用,我们动手给它KO了! 网上有很多这类的教程,但都是要手动修改注册表,对于小白来说,有…...

无人机之穿越机注意事项篇
一、检查设备 每次飞行前都要仔细检查穿越机的每个部件,确保所有功能正常,特别是电池和电机。 二、遵守法律 了解并遵循你所在地区关于无人机的飞行规定,避免非法飞行。 三、评估环境 在飞行前检查周围环境,确保没有障碍物和…...

防御课第一次作业第一天笔记整理
网络安全概述 网络安全(Cyber Security)是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连续可靠正常地运行,网络服务不中断 中国网络安全市场近年来只增不…...

Git协作
文章目录 Git协作冲突冲突的发生情况解决冲突如何处理冲突 1 分支1.1 什么是Git分支1.2 创建分支 2 切换分支2.1 指向分支2.2 暂存分支切换分支与未提交更改的处理使用 Stash 临时保存更改Stash 的工作原理:场景设定使用 Git Stash 3 远程分支3.1 快进合并快进合并的…...

Three.js机器人与星系动态场景(四):封装Threejs业务组件
实际在写业务的时候不会在每个组件里都写几十行的threejs的初始化工作。我们可以 将通用的threejs的场景、相机、render、轨道控制器等进行统一初始化。同时将非主体的函数提到组件外部,通过import导入进组件。将业务逻辑主体更清晰一些。下面的代码是基于reactthre…...

亚马逊云科技 Amazon Bedrock 构建 AI 应用体验
前言 大模型应用发展迅速,部署一套AI应用的需求也越来越多,从头部署花费时间太长,然而亚马逊科技全托管式生成式 AI 服务 Amazon Bedrock,Amazon Bedrock 简化了从基础模型到生成式AI应用构建的复杂流程,为客户铺设了…...

程序员标准简历模板
链接: https://pan.baidu.com/s/1yMXGSSNba15b9hMXjA39aA?pwdb4ev 提取码: b4ev 3年工作经验简历 链接: https://pan.baidu.com/s/1OO7n1lRL6AkhejxYC9IyDA?pwdfmvv 提取码: fmvv 优秀学员简历 链接: https://pan.baidu.com/s/106Vkw_ulOInI47_5mDySSg?pwduudc 提取码: uu...

物联网设计竞赛_10_Jetson Nano中文转汉语语音
在windows中pyttsx3可以让汉字文本输出中文语音,但是在jetson上只能用英文说话 import pyttsx3def hanyu(test):engine pyttsx3.init()rate engine.getProperty(rate)engine.setProperty(rate,125)engine.say(test)engine.runAndWait() hanyu(你好) #engine.save…...

XML Schema 指示器
XML Schema 指示器 1. 引言 XML Schema 是一种用于定义 XML 文档结构和内容的语言。它提供了一种强大的方式来描述 XML 文档中允许的元素、属性和数据类型。XML Schema 指示器是在 XML Schema 定义中使用的一些特殊元素和属性,它们用于指示 XML 处理器如何解析和验证 XML 文…...

iOS UITableView自带滑动手势和父视图添加滑动手势冲突响应机制探索
场景 我们有时候会遇到这样的一个交互场景:我们有一个UITableView 放在一个弹窗中,这个弹窗可以通过滑动进行展示和消失(跟手滑动的方式),然后这个UITableView放在弹窗中,并且可以滚动,展示一些…...

RAG实践:ES混合搜索BM25+kNN(cosine)
1 缘起 最近在研究与应用混合搜索, 存储介质为ES,ES作为大佬牌数据库, 非常友好地支持关键词检索和向量检索, 当然,支持混合检索(关键词检索向量检索), 是提升LLM响应质量RAG(Retri…...

论文去AIGC痕迹:避免AI写作被检测的技巧
在数字化时代,AI正以其卓越的能力重塑学术写作的面貌。AI论文工具的兴起,为研究者们提供了前所未有的便利,但同时也引发了关于学术诚信和原创性的热烈讨论。当AI辅助写作成为常态,如何确保论文的独创性和个人思想的体现࿰…...

C#使用异步方式调用同步方法的实现方法
使用异步方式调用同步方法,在此我们使用异步编程模型(APM)实现 1、定义异步委托和测试方法 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Task…...

【Go系列】 Go语言的入门
为什么要学习Go 从今天起,我们将一同启程探索 Go 语言的奥秘。我会用简单明了的方式,逐一讲解 Go 语言的各个知识点,帮助你从基础做起,一步步深化理解。不论你之前是否有过 Go 语言的接触经验,这个系列文章都将助你收获…...

Dify 与 Xinference 最佳组合 GPU 环境部署全流程
背景介绍 在前一篇文章 RAG 项目对比 之后,确定 Dify 目前最合适的 RAG 框架。本次就尝试在本地 GPU 设备上部署 Dify 服务。 Dify 是将模型的加载独立出去的,因此需要选择合适的模型加载框架。调研一番之后选择了 Xinference,理由如下&…...

MICCAI 2024Centerline Boundary Dice Loss for Vascular Segmentation
MICCAI 2024 Centerline Boundary Dice Loss for Vascular Segmentation MICCAI 2024Centerline Boundary Dice Loss for Vascular Segmentation中心线边界Dice损失用于血管分割**摘要**:1. 引言相关工作: 2. 方法预备知识Dice的变化 3 实验3.1 数据集3.2 设置3.3 结…...

golang验证Etherscan上的智能合约
文章目录 golang验证Etherscan上的智能合约为什么要验证智能合约如何使用golang去验证合约获取EtherscanAPI密钥Verify Source Code接口Check Source Code Verification Status接口演示示例及注意事项网络问题无法调用Etherscan接口(最重要的步骤) golan…...

Visual Studio编译优化选项
目录 /O1 和 /O2 /Ox 内联函数 虚函数优化 代码重排 循环优化 链接时间优化 代码分割 数学优化 其他优化选项 在Visual Studio中,编译优化选项是用于提高程序性能的重要工具。编译器提供了多种优化级别和选项,可以根据不同的需要进行选择。 在…...

sql业务场景分析思路参考
1、时间可以进行排序,也可以用聚合函数对时间求最大值max(时间) 例如下面的例子:取最晚入职的人,那就是将入职时间倒序排序,然后limit 1 表: 场景:查找最晚入职员工的所有信息 se…...

Django权限系统如何使用?
Django的权限系统是一个强大而灵活的特性,允许你控制不同用户对应用程序中资源的访问。以下是使用Django权限系统的几个基本步骤: 1. 定义模型权限 在你的models.py文件中,你可以为每个模型定义自定义权限。这通过在模型的Meta类里设置perm…...