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放在弹窗中,并且可以滚动,展示一些…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
TCP/IP 网络编程 | 服务端 客户端的封装
设计模式 文章目录 设计模式一、socket.h 接口(interface)二、socket.cpp 实现(implementation)三、server.cpp 使用封装(main 函数)四、client.cpp 使用封装(main 函数)五、退出方法…...
MCP和Function Calling
MCP MCP(Model Context Protocol,模型上下文协议) ,2024年11月底,由 Anthropic 推出的一种开放标准,旨在统一大模型与外部数据源和工具之间的通信协议。MCP 的主要目的在于解决当前 AI 模型因数据孤岛限制而…...
【前端实战】如何让用户回到上次阅读的位置?
目录 【前端实战】如何让用户回到上次阅读的位置? 一、总体思路 1、核心目标 2、涉及到的技术 二、实现方案详解 1、基础方法:监听滚动,记录 scrollTop(不推荐) 2、Intersection Observer 插入探针元素 3、基…...
