C#基础简述
C#基础详解
一、C#语言概述
C#(读作"C Sharp")是微软开发的面向对象的编程语言,运行在.NET平台上。它结合了C++的强大功能和Visual Basic的简单性,具有以下特点:
- 面向对象:支持封装、继承和多态
- 类型安全:编译时类型检查
- 自动内存管理:通过垃圾回收器(GC)管理内存
- 跨平台:通过.NET Core/.NET 5+支持多平台
- 丰富的标准库:提供大量内置类和功能
二、基本语法
1. 变量与数据类型
// 声明变量
int age = 25;
double price = 19.99;
char grade = 'A';
bool isActive = true;
string name = "张三";// 变量类型
byte b = 255; // 0-255
sbyte sb = -128; // -128到127
short s = 32767; // -32,768到32,767
ushort us = 65535; // 0到65,535
int i = 2147483647; // -2^31到2^31-1
uint ui = 4294967295; // 0到2^32-1
long l = 9223372036854775807; // -2^63到2^63-1
ulong ul = 18446744073709551615; // 0到2^64-1
float f = 3.14f; // 单精度浮点数
decimal d = 123.45m; // 高精度十进制数
2. 运算符
// 算术运算符
int sum = 5 + 3; // 8
int diff = 5 - 3; // 2
int prod = 5 * 3; // 15
int quot = 5 / 2; // 2 (整数除法)
int rem = 5 % 2; // 1 (余数)// 关系运算符
bool isEqual = 5 == 5; // true
bool isNotEqual = 5 != 3; // true
bool isGreater = 5 > 3; // true// 逻辑运算符
bool result = (5 > 3) && (2 < 4); // true
bool result2 = (5 > 3) || (2 > 4); // true
bool notResult = !(5 > 3); // false
3. 控制结构
// 条件语句
if (age >= 18)
{Console.WriteLine("成年人");
}
else if (age >= 13)
{Console.WriteLine("青少年");
}
else
{Console.WriteLine("儿童");
}// switch语句
switch (grade)
{case 'A':Console.WriteLine("优秀");break;case 'B':Console.WriteLine("良好");break;default:Console.WriteLine("其他");break;
}// 循环
for (int i = 0; i < 5; i++)
{Console.WriteLine(i);
}int j = 0;
while (j < 5)
{Console.WriteLine(j);j++;
}int k = 0;
do
{Console.WriteLine(k);k++;
} while (k < 5);// foreach循环
string[] fruits = { "苹果", "香蕉", "橙子" };
foreach (string fruit in fruits)
{Console.WriteLine(fruit);
}
三、面向对象编程
1. 类与对象
// 定义类
public class Person
{// 字段private string name;private int age;// 属性public string Name{get { return name; }set { name = value; }}public int Age{get { return age; }set {if (value >= 0)age = value;}}// 构造函数public Person(string name, int age){this.name = name;this.age = age;}// 方法public void Introduce(){Console.WriteLine($"我叫{this.name},今年{this.age}岁。");}
}// 使用类
Person person = new Person("张三", 25);
person.Introduce();
2. 继承与多态
// 基类
public class Animal
{public virtual void MakeSound(){Console.WriteLine("动物发出声音");}
}// 派生类
public class Dog : Animal
{public override void MakeSound(){Console.WriteLine("汪汪叫");}// 新增方法public void Fetch(){Console.WriteLine("接球");}
}// 使用继承
Animal myAnimal = new Dog();
myAnimal.MakeSound(); // 输出"汪汪叫" (多态)// 类型检查与转换
if (myAnimal is Dog)
{Dog myDog = (Dog)myAnimal;myDog.Fetch();
}
3. 接口
// 定义接口
public interface IShape
{double GetArea();double GetPerimeter();
}// 实现接口
public class Circle : IShape
{public double Radius { get; set; }public Circle(double radius){Radius = radius;}public double GetArea(){return Math.PI * Radius * Radius;}public double GetPerimeter(){return 2 * Math.PI * Radius;}
}// 使用接口
IShape shape = new Circle(5);
Console.WriteLine($"面积: {shape.GetArea()}");
四、集合与泛型
1. 内置集合
// 数组
int[] numbers = { 1, 2, 3, 4, 5 };
Console.WriteLine(numbers[0]); // 输出1// List
List<string> fruits = new List<string>();
fruits.Add("苹果");
fruits.Add("香蕉");
Console.WriteLine(fruits.Count); // 输出2// Dictionary
Dictionary<string, int> ageDict = new Dictionary<string, int>();
ageDict.Add("张三", 25);
ageDict["李四"] = 30;
Console.WriteLine(ageDict["张三"]); // 输出25// Queue
Queue<int> queue = new Queue<int>();
queue.Enqueue(1);
queue.Enqueue(2);
Console.WriteLine(queue.Dequeue()); // 输出1// Stack
Stack<int> stack = new Stack<int>();
stack.Push(1);
stack.Push(2);
Console.WriteLine(stack.Pop()); // 输出2
2. 泛型集合
// 泛型List
List<int> intList = new List<int> { 1, 2, 3 };
intList.Add(4);
foreach (int num in intList)
{Console.WriteLine(num);
}// 泛型Dictionary
Dictionary<string, Person> people = new Dictionary<string, Person>();
people.Add("P1", new Person("张三", 25));
Person p = people["P1"];
Console.WriteLine(p.Name);// 泛型约束
public class Box<T> where T : IComparable
{public T Value { get; set; }public bool IsGreaterThan(Box<T> other){return Value.CompareTo(other.Value) > 0;}
}
五、委托与事件
1. 委托
// 定义委托
public delegate void PrintDelegate(string message);// 使用委托
public class Printer
{public static void PrintToConsole(string message){Console.WriteLine(message);}
}PrintDelegate print = new PrintDelegate(Printer.PrintToConsole);
print("Hello, World!");// 多播委托
PrintDelegate multiPrint = print;
multiPrint += (msg) => Console.WriteLine($"日志: {msg}");
multiPrint("测试多播");
2. 事件
// 定义事件参数
public class TemperatureChangedEventArgs : EventArgs
{public double OldTemperature { get; }public double NewTemperature { get; }public TemperatureChangedEventArgs(double oldTemp, double newTemp){OldTemperature = oldTemp;NewTemperature = newTemp;}
}// 定义事件发布者
public class TemperatureSensor
{// 定义事件public event EventHandler<TemperatureChangedEventArgs> TemperatureChanged;private double currentTemperature;public double CurrentTemperature{get => currentTemperature;set{if (currentTemperature != value){double oldTemp = currentTemperature;currentTemperature = value;// 触发事件TemperatureChanged?.Invoke(this, new TemperatureChangedEventArgs(oldTemp, currentTemperature));}}}
}// 使用事件
public class TemperatureMonitor
{public TemperatureMonitor(TemperatureSensor sensor){sensor.TemperatureChanged += OnTemperatureChanged;}private void OnTemperatureChanged(object sender, TemperatureChangedEventArgs e){Console.WriteLine($"温度从 {e.OldTemperature}°C 变为 {e.NewTemperature}°C");}
}
六、异常处理
try
{// 可能抛出异常的代码int result = 10 / int.Parse("0");
}
catch (DivideByZeroException ex)
{// 处理特定异常Console.WriteLine($"除零错误: {ex.Message}");
}
catch (FormatException ex)
{// 处理格式错误Console.WriteLine($"格式错误: {ex.Message}");
}
catch (Exception ex) // 基类异常
{// 处理其他所有异常Console.WriteLine($"发生错误: {ex.Message}");
}
finally
{// 无论是否发生异常都会执行的代码Console.WriteLine("执行完毕");
}// 抛出异常
throw new InvalidOperationException("无效操作");
七、LINQ查询
// 数据源
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };// 查询表达式
var evenNumbers = from num in numberswhere num % 2 == 0select num;// 方法语法
var oddNumbers = numbers.Where(n => n % 2 != 0).OrderByDescending(n => n).Take(3);// 查询结果
foreach (int num in evenNumbers)
{Console.WriteLine(num);
}// 延迟执行示例
var query = numbers.Where(n => n > 5); // 不立即执行
numbers.Add(11); // 修改数据源
foreach (int num in query) // 此时才执行查询
{Console.WriteLine(num); // 会包含11
}
八、异步编程
// 异步方法
public async Task<string> DownloadDataAsync(string url)
{using (HttpClient client = new HttpClient()){// 异步等待string data = await client.GetStringAsync(url);return data;}
}// 使用异步方法
public async Task ProcessDataAsync()
{try{Console.WriteLine("开始下载...");string result = await DownloadDataAsync("https://example.com");Console.WriteLine($"下载完成: {result.Length} 字符");}catch (Exception ex){Console.WriteLine($"发生错误: {ex.Message}");}
}// 并行处理
public void ProcessInParallel()
{List<int> numbers = Enumerable.Range(1, 1000).ToList();// 并行处理Parallel.ForEach(numbers, num =>{// 处理每个数字int square = num * num;Console.WriteLine($"计算 {num} 的平方: {square}");});
}
九、文件与流操作
// 写入文件
string filePath = "test.txt";
File.WriteAllText(filePath, "Hello, World!");// 读取文件
string content = File.ReadAllText(filePath);
Console.WriteLine(content);// 逐行读取
foreach (string line in File.ReadLines(filePath))
{Console.WriteLine(line);
}// 使用流
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{byte[] data = Encoding.UTF8.GetBytes("二进制数据");fs.Write(data, 0, data.Length);
}// 读写JSON
var person = new { Name = "张三", Age = 25 };
string json = JsonConvert.SerializeObject(person);
File.WriteAllText("person.json", json);string jsonContent = File.ReadAllText("person.json");
var deserializedPerson = JsonConvert.DeserializeObject(jsonContent);
十、常用设计模式
1. 单例模式
public sealed class Singleton
{private static Singleton instance = null;private static readonly object padlock = new object();Singleton() { }public static Singleton Instance{get{if (instance == null){lock (padlock){if (instance == null){instance = new Singleton();}}}return instance;}}
}
2. 工厂模式
// 产品接口
public interface IProduct
{void Operation();
}// 具体产品
public class ConcreteProductA : IProduct
{public void Operation() => Console.WriteLine("产品A操作");
}public class ConcreteProductB : IProduct
{public void Operation() => Console.WriteLine("产品B操作");
}// 工厂接口
public interface IFactory
{IProduct CreateProduct();
}// 具体工厂
public class ConcreteFactoryA : IFactory
{public IProduct CreateProduct() => new ConcreteProductA();
}public class ConcreteFactoryB : IFactory
{public IProduct CreateProduct() => new ConcreteProductB();
}
3. 观察者模式
// 主题接口
public interface ISubject
{void RegisterObserver(IObserver o);void RemoveObserver(IObserver o);void NotifyObservers();
}// 观察者接口
public interface IObserver
{void Update(string message);
}// 具体主题
public class ConcreteSubject : ISubject
{private List<IObserver> observers = new List<IObserver>();private string message;public void RegisterObserver(IObserver o) => observers.Add(o);public void RemoveObserver(IObserver o) => observers.Remove(o);public void NotifyObservers(){foreach (var observer in observers){observer.Update(message);}}public void SetMessage(string msg){message = msg;NotifyObservers();}
}// 具体观察者
public class ConcreteObserver : IObserver
{private string name;public ConcreteObserver(string name) => this.name = name;public void Update(string message){Console.WriteLine($"{name} 收到消息: {message}");}
}
十一、性能优化技巧
-
字符串处理:
// 避免频繁创建字符串 StringBuilder sb = new StringBuilder(); for (int i = 0; i < 1000; i++) {sb.Append(i); } string result = sb.ToString();// 字符串比较 string a = "hello"; string b = "HELLO"; bool equal = string.Equals(a, b, StringComparison.OrdinalIgnoreCase);
-
集合操作:
// 使用泛型集合 List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };// 避免装箱/拆箱 HashSet<int> intSet = new HashSet<int>();// 使用LINQ时考虑性能 var query = numbers.Where(n => n > 2).ToList(); // 立即执行
-
内存管理:
// 及时释放资源 using (var stream = new FileStream("file.txt", FileMode.Open)) {// 使用stream } // 自动调用Dispose()// 对于实现了IDisposable的对象 var disposableObj = new SomeDisposableObject(); try {// 使用对象 } finally {disposableObj.Dispose(); }
-
异步编程:
// 避免async void方法(除了事件处理) public async Task ProcessAsync() {await Task.Delay(1000); }// 并行处理大数据集 Parallel.For(0, 1000, i => {// 处理每个元素 });
十二、调试与诊断
-
断点调试:
- 在代码行号左侧点击设置断点
- 使用F5启动调试
- 使用F10单步执行,F11进入方法
-
监视窗口:
- 添加变量到监视窗口
- 查看表达式值
- 条件断点设置
-
性能分析:
// 使用Stopwatch测量代码执行时间 var stopwatch = System.Diagnostics.Stopwatch.StartNew(); // 要测量的代码 stopwatch.Stop(); Console.WriteLine($"耗时: {stopwatch.ElapsedMilliseconds} 毫秒");// 内存分析 long memoryBefore = GC.GetTotalMemory(false); // 分配内存的代码 long memoryAfter = GC.GetTotalMemory(false); Console.WriteLine($"内存使用: {(memoryAfter - memoryBefore)/1024} KB");
-
日志记录:
// 使用内置日志记录 System.Diagnostics.Trace.WriteLine("调试信息"); System.Diagnostics.Debug.WriteLine("调试信息(仅在Debug模式下)");// 使用NLog或Serilog等日志框架 // 需要先安装NuGet包 // logger.Info("应用程序启动");
十三、进阶主题
-
反射:
// 获取类型信息 Type type = typeof(string); Console.WriteLine($"类型名: {type.Name}");// 创建实例 object instance = Activator.CreateInstance(type);// 调用方法 MethodInfo method = type.GetMethod("Substring", new[] { typeof(int), typeof(int) }); string result = (string)method.Invoke("Hello, World!", new object[] { 0, 5 }); Console.WriteLine(result); // 输出"Hello"
-
动态编程:
// 使用dynamic dynamic obj = new ExpandoObject(); obj.Name = "张三"; obj.Age = 25; Console.WriteLine($"{obj.Name}今年{obj.Age}岁");// 动态方法调用 var calculator = new ExpandoObject() as IDictionary<string, object>; calculator["Add"] = new Func<int, int, int>((a, b) => a + b); int sum = (int)calculator["Add"](3, 5); Console.WriteLine(sum); // 输出8
-
并行编程:
// 使用Parallel类 Parallel.For(0, 100, i => {// 并行处理每个i });// 使用Task并行 Task t1 = Task.Run(() => ProcessData1()); Task t2 = Task.Run(() => ProcessData2()); await Task.WhenAll(t1, t2);// 数据并行 var numbers = Enumerable.Range(1, 1000).ToList(); var parallelResult = numbers.AsParallel().Where(n => n % 2 == 0).OrderBy(n => n).Take(10).ToList();
-
异步流(.NET Core 3.0+):
// 异步生成器 public async IAsyncEnumerable<int> GenerateNumbersAsync() {for (int i = 0; i < 10; i++){await Task.Delay(100);yield return i;} }// 使用异步流 await foreach (var number in GenerateNumbersAsync()) {Console.WriteLine(number); }
十四、最佳实践
-
命名规范:
- 类名使用PascalCase(如
CustomerService
) - 方法名使用PascalCase(如
GetCustomerData
) - 变量名使用camelCase(如
customerName
) - 常量使用PASCAL_CASE(如
MAX_RETRIES
)
- 类名使用PascalCase(如
-
代码组织:
- 按功能而非类型组织代码文件
- 使用区域(Regions)组织大型类
- 保持方法简短(建议不超过20行)
-
异常处理:
- 捕获特定异常而非通用Exception
- 不要捕获不处理的异常
- 在适当位置记录异常
-
性能考虑:
- 避免在循环中分配内存
- 使用StringBuilder处理大量字符串操作
- 考虑对象池重用对象
-
安全性:
- 验证所有输入数据
- 使用参数化查询防止SQL注入
- 对敏感数据进行加密
-
测试:
- 编写单元测试覆盖核心逻辑
- 使用Mock对象隔离依赖
- 定期进行代码审查
通过掌握这些C#基础知识和进阶技术,您可以构建高效、可维护的.NET应用程序。记住,良好的编码习惯和持续学习是成为优秀开发者的关键。
相关文章:
C#基础简述
C#基础详解 一、C#语言概述 C#(读作"C Sharp")是微软开发的面向对象的编程语言,运行在.NET平台上。它结合了C的强大功能和Visual Basic的简单性,具有以下特点: 面向对象:支持封装、继…...
AI赋能烟草工艺革命:虫情监测步入智能化时代
在当今竞争激烈且品质至上的烟草行业中,生产流程的每一个细微环节都关乎着企业的生死存亡与品牌的兴衰荣辱。烟草工艺部门与制丝、卷包车间作为生产链条的核心驱动,犹如精密仪器中的关键齿轮,彼此紧密咬合、协同运转,任何一处的小…...
小刚说C语言刷题—1462小明的游泳时间
1.题目描述 伦敦奥运会要到了,小明在拼命练习游泳准备参加游泳比赛。 这一天,小明给自己的游泳时间做了精确的计时(本题中的计时都按 24 小时制计算),它发现自己从 a 时 b 分一直游泳到当天的 c 时 d 分。 请你帮小…...
StarRocks Lakehouse 如何重构大数据架构?
随着数据分析需求的不断演进,企业对数据处理架构的期望也在不断提升。在这一背景下,StarRocks 凭借其高性能的实时分析能力,正引领数据分析进入湖仓一体的新时代。 4 月 18 日,镜舟科技高级技术专家单菁茹做客开源中国直播栏目《…...
用TCP实现服务器与客户端的交互
引言: 这篇文章主要是用TCP构造的回显服务器,也就是客户端发什么,就返回什么。用实现这个过程方式来学会TCP套接字的使用。 一、TCP的特点 TCP是可靠的:这个需要去了解TCP的机制,这是一个大工程,博主后面写…...
用于实时辐射场渲染的3D高斯溅射——3D Gaussian Splatting for Real-Time Radiance Field Rendering
用于实时辐射场渲染的3D高斯溅射——3D Gaussian Splatting for Real-Time Radiance Field Rendering 文章目录 用于实时辐射场渲染的3D高斯溅射——3D Gaussian Splatting for Real-Time Radiance Field Rendering摘要Abstract1. 预备知识1.1 三维的几何表示1.2 计算机中的集合…...
Vue3 Echarts 3D立方体柱状图实现教程
文章目录 前言一、实现原理二、series ——type: "pictorialBar" 简介2.1 常用属性 三、代码实战3.1 封装一个echarts通用组件 echarts.vue3.2 实现一个立方体柱状图(1)首先实现一个基础柱状图(2)添加立方体棱线&#x…...
Soildworks怎样在装配体中建立局部剖视图
1思路:建立拉伸切除 2步骤 1-打开点线面显示按钮 2-在装配体中依据某个基准面(例如前视基准面)建立一个待切除的草图 3-点击顶部工具栏的装配体--->装嫩配体特征---->拉伸切除---Ok 3具体图示 1-点击,使其变成灰色 即…...
基于C++的IOT网关和平台5:github项目ctGateway开发指南
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。 源码指引:github源码指引_初级代码游戏的博客-CSDN博客 …...
虚拟机centos7安装docker
虚拟机CentOS 7上安装 Docker流程 1. 更新系统软件包 需要确保系统软件包是最新的 sudo yum -y update sudo:以超级用户权限执行命令。 yum:CentOS的包管理器工具。 -y:自动确认所有提示,直接执行。 2. 安装 Docker 依赖 在安装 …...
11.Spring Boot 3.1.5 中使用 SpringDoc OpenAPI(替代 Swagger)生成 API 文档
Spring Boot 3.1.5 中使用 SpringDoc OpenAPI(替代 Swagger)生成 API 文档 1. 项目结构 假设项目名为 springboot-openapi-demo,以下是项目的基本结构: springboot-openapi-demo/ ├── src/ │ ├── main/ │ │ ├─…...
pytorch对应gpu版本是否可用判断逻辑
# gpu_is_ok.py import torchdef check_torch_gpu():# 打印PyTorch版本print(f"PyTorch version: {torch.__version__}")# 检查CUDA是否可用cuda_available torch.cuda.is_available()print(f"CUDA available: {cuda_available}")if cuda_available:# 打印…...
Kubernetes 集群概念详解
Kubernetes 集群概念详解 Kubernetes 集群是由多个计算节点组成的容器编排系统,用于自动化部署、扩展和管理容器化应用。以下是 Kubernetes 集群的核心概念和架构解析: 一、集群基础架构 1. 集群组成要素 graph TBMaster[控制平面] --> Node1[工作…...
BT137-ASEMI机器人功率器件专用BT137
编辑:LL BT137-ASEMI机器人功率器件专用BT137 型号:BT137 品牌:ASEMI 封装:TO-220F 批号:最新 引脚数量:3 封装尺寸:如图 特性:双向可控硅 工作结温:-40℃~150℃…...
ArcGIS+GPT:多领域地理分析与决策新方案
技术点目录 AI大模型应用ArcGIS工作流程及功能prompt的使用技巧AI助力工作流程AI助力数据读取AI助力数据编辑与处理AI助力空间分析AI助力遥感分析AI助力二次开发AI助力科研绘图ArcGISAI综合应用了解更多 ——————————————————————————————————…...
鸿蒙文件上传-从前端到后端详解,对比jq请求和鸿蒙arkts请求区别,对比new FormData()和鸿蒙arktsrequest.uploadFile
需要权限:ohos.permission.INTERNET 1.nodejs自定义书写上传后端接口 传输过来的数据放在files?.image下 router.post(/upload,(req, res) > {var form new multiparty.Form();form.uploadDirpublic/images/uploads; //上传图片保存的地址(目录必须存在)fo…...
【DBeaver】如何连接MongoDB
MongoDB驱动 在 DBeaver 社区版是没有的,得自己下载 一、下载mongo-jdbc-standalone.jar 二、在工具栏找到数据库,选择驱动管理器 三、在驱动管理器点击新建 四、选择库,添加mongo-jdbc-standalone.jar;然后点击找到类 五、选择设置&#x…...
Unity 粒子同步,FishNet
Github的工程 同步画面 使用FishNet插件同步,可使用这个选项来克隆第二个项目进行测试...
自然语言处理之命名实体识别:Bi-LSTM-CRF模型的评估与性能分析
命名实体识别(Named Entity Recognition, NER)是自然语言处理(NLP)的核心任务之一,旨在从文本中识别出具有特定意义的实体(如人名、地名、机构名等),并为其分类。随着深度学习的发展,**Bi-LSTM-CRF**(双向长短期记忆网络结合条件随机场)模型因其强大的序列建模能力成…...
【SpringBoot】基于mybatisPlus的博客系统
1.实现用户登录 在之前的项目登录中,我使用的是Session传递用户信息实现校验登录 现在学习了Jwt令牌技术后我尝试用Jwt来完成校验工作 Jwt令牌 令牌一词在网络编程一节我就有所耳闻,现在又拾了起来。 这里讲应用:令牌也就用于身份标识&a…...
[Android]任务列表中有两个相机图标
现象: 修改AndroidManifest.xml <activityandroid:name"com.android.camera.PermissionsActivity"android:label"string/app_name"android:launchMode"singleTop"android:configChanges"orientation|screenSize|keyboardH…...
VINS-FUSION:配置参数说明与配置自己的参数
文章目录 📚简介📍配置文件说明📷相机配置参数🔧设备参数🎯配置自己的参数📷相机参数🔧设备参数📚简介 VINS-Fusion 是一个基于优化的多传感器状态估计器,实现了视觉惯性里程计(VIO)和视觉惯性全球导航卫星系统(VI-GNSS)融合。 📍配置文件说明 VINS-Fus…...
Polars: 新一代高性能数据处理库
<------最重要的是订阅“鲁班模锤”------> 在数据科学和数据分析领域,性能和效率一直是从业者关注的焦点。随着数据量的爆炸式增长,传统的数据处理工具如pandas在处理大规模数据时逐渐显露出其局限性。在这样的背景下,一个名为Polars…...
大屏/门户页面兼容各种分辨率或电脑缩放
需求要求: 需要支持缩放功能(缩放后 页面各元素模块正常展示)、 需要适配各种分辨率(初始加载不应出现横向滚动条) 选择的实现方案 利用 zoom 或者 transform 来缩放兼容页面样式,不动业务模块代码 const isMobile /iPhone|iPad|iPod|Android|Harmony/i.test(navi…...
自定义项目中导入文件import顺序
项目中import 顺序 分类顺序 可以根据模块或文件的功能、类型等进行分类,比如将所有的组件放在一起、工具函数放在一起等。这样的组织方式更有利于对项目结构和代码逻辑的理解,当需要查找某一类功能的代码时,可以快速定位到相应的 import 区…...
Git 本地提交撤销
引言 在 Git 版本控制系统中,偶尔会遇到需要撤销本地提交的情况。本文将详细介绍如何优雅地处理这种情况,帮助您在不慌乱的情况下恢复错误提交。 撤销本地提交的主要方法 当您意外提交了错误文件到 Git 仓库,但尚未推送到远程服务器时&…...
k8s术语之Replication Controller
Replication Controller 在kubernetes中简称RC,它其实是定义了一个期望的场景,即声明某种Pod的副本数量在任意时刻都符合某个预期值,包括一下几个值: 1.Pod期待的副本数(replicas) 2.用于筛选目标Pod的Lable Selector 3.当…...
AI驱动视频批量智能混剪软件生产技术实践
一、引言:短视频工业化生产的技术革新 在电商带货、知识分享等领域,高效产出差异化视频内容成为核心竞争力。本文结合AI技术与工程实践,解析如何通过智能素材处理、参数化合成引擎、多维度质量控制构建全自动视频生产流水线,实现…...
SPL 量化 回测
回测是一种评估交易策略的通用方法。它通过计算策略在历史数据上的表现来评估交易策略的可行性。如果回测结果良好,交易者和分析师可能会有信心在未来继续使用该策略。 1. 回测脚本 首先要编写回测脚本,将回测脚本保存为 backtest.splx。 脚本代码如下…...
2025年“深圳杯”数学建模挑战赛A题-芯片热弹性物理参数估计
芯片热弹性物理参数估计 小驴数模 当今时代,芯片无疑是现代社会发展的 “核心引擎”。它深度嵌入智能手机,实现全球即时通讯;助力汽车智能驾驶,精准导航、自动操控;赋能工业自动化生产线,高效运转。但随着…...
前端笔记-Element-Plus
结束了vue的基础学习,现在进一步学习组件 Element-Plus部分学习目标: Element Plus1、查阅官方文档指南2、学习常用组件的使用方法3、Table、Pagination、Form4、Input、Input Number、Switch、Select、Date Picker、Button5、Message、MessageBox、N…...
vue3封装全局方法
场景:各个模块详情中存在附件列表数据,需要再每个中添加一个预览附件的方法,是后期提出的需求,所以要在每个模块中进行添加,就去将预览方法封装一下。 将公共方法封装在utils下 utils/filePreview.ts import router…...
Django 学习指南:从入门到精通(大体流程)
想要快速掌握 Django 开发技能吗?按照以下学习流程,带你从零基础成长为独立开发 Web 应用的高手。 一、准备工作:打下坚实基础 在开启 Django 之旅前,先确保你已掌握以下 Python 基础知识: 数据类型:熟悉数…...
Java对集合进行操作,赋值新字段
1、方法一:增强for循环 List<Refund> list refundService.selectRefundList(queryParam); for (Refund refund : list) {refund.setPayWay(refund.getPaymentMethod()); // 将支付方式赋值给付款方式 }在 Java 中,当你使用 for 循环遍历 List<…...
【网工第6版】第6章 网络安全③
目录 ■ 虚拟专用网VPN ◆虚拟专用网基础 ◆VPN分类 ▲根据应用场景不同分类 ▲根据VPN技术实现的网络层次分类 ◎ 二层隧道协议:L2TP和PPTP ◎ 网络层隧道协议:IPSec和GRE ※ IPSec IPSec基础 IPSec原理 IPSec两种封装模式 ※ GRE ■ 应用…...
20250430在ubuntu14.04.6系统上查看系统实时网速
rootrootubuntu:~$ sudo apt-get install iftop 【不需要root权限】 rootrootubuntu:~$ sudo apt-get install nload rootrootubuntu:~$ sudo apt-get install vnstat 【失败】 rootrootubuntu:~$ sudo apt-get install speedtest-cli rootrootubuntu:~$ sudo apt-get install …...
远程 Debugger 多用户环境下的用户隔离实践
远程 Debugger 多用户环境下的用户隔离实践 在现代分布式开发和云原生环境下,远程 Debugger 的应用愈发普遍。然而,随着多人协作和多租户场景的出现,**远程 Debugger 的“用户隔离”**变得至关重要。只有实现了良好的用户隔离,才…...
Neo4j多关系或多路径
目录 一、双向关系 1.创建2个节点间的双向关系 2.创建多个路径的节点,双向关系 3.查询带有方向性的关系 4.查询路径上的多个关系 5.查询出a到b的最短距离 6.查询特定长度的路径 二、将之前的关系清空下,如图所示,在操作一次 1.查询出…...
Locate 3D:Meta出品自监督学习3D定位方法
标题: Locate 3D: Real-World Object Localization via Self-Supervised Learning in 3D 摘要: 我们提出了 Locate 3D,这是一种可根据指代表达(如“沙发和灯之间的小咖啡桌”)在三维场景中定位物体的模型。Locate 3…...
Copilot for Excel 一键词云分析与情绪分析
在Excel中使用copilot对数据进行高级分析,我们已经领略过copilot的强悍能力: 零代码、超越DeepSeek:Excel高级数据分析,copilot加持、Python助力 Python in Excel高级分析:一键RFM分析 然而,很多时候我们…...
【Linux 网络】网络工具ifconfig和iproute/iproute2工具详解
【Linux 网络】网络工具ifconfig和iproute/iproute2工具详解 前言1、安装2、常用命令3、命令使用详解 前言 本篇文章主要介绍Linux下网络工具ifconfig/iproute(iproute2)的安装、使用示例和场景。操作系统Ubuntu 18.04。 1、安装 使用apt-get install 命令安装ifconfig和ipr…...
硬盘分区丢失≠末日!3步逻辑恢复法+物理修复全流程图解
引言:硬盘分区丢失——数据安全的“隐形杀手” 在数字化时代,硬盘作为数据存储的核心载体,承载着个人、企业乃至社会的关键信息。然而,硬盘分区丢失这一突发状况,往往让用户措手不及:文件系统突然报错、盘…...
数据接收全流程图(物理网卡 → 应用层)
以下是 DPDK VPP 在 Linux 系统中从网卡收包到应用层的完整数据流程图及分步解析,结合了内核旁路和用户态协议栈的协同工作: 数据接收全流程图(物理网卡 → 应用层) plaintext 复制 下载 ----------------------------------…...
【AI】DeepSeek 流程图 / 时序图制作,Word 排版错乱问题,文字转直观图形
一:动态流程图 / 时序图制作(DeepSeek Draw.IO) 工具准备 DeepSeek(AI 生成代码):官网(免费)Draw.IO(可视化渲染):官网(免费&#…...
C++继承(上)
目录 一、继承的概念及定义 1. 继承的概念 2. 继承的定义 2.1 定义格式 2.2 继承关系和访问限定符 2.3 继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 四、派生类的默认成员函数 一、继承的概念及定义 1. 继承的概念 继承是面向对象编…...
分布式-redisson
分布式锁redisson 加锁流程缓存相关问题 加锁流程 redisson底层通过lua脚本实现加锁的原子性lock动作包含:加锁、设置超时时间、锁续命未获取到锁的线程通过获取信号量许可等待,所释放后释放信号量通知等待线程 缓存相关问题 缓存失效(击穿…...
Java学习手册:Spring MVC 架构与实现
一、Spring MVC 概述 Spring MVC 是 Spring 框架的一个模块,它提供了一套 Web 应用开发的解决方案,实现了 MVC(Model-View-Controller)设计模式。Spring MVC 提供了清晰的分离逻辑层、视图层和控制器层的结构,便于开发…...
第四部分:实用应用开发
本部分将涵盖以下关键主题: 视频处理基础 视频读取与保存视频帧处理实战:视频中运动目标追踪 条形码与二维码识别 条形码检测原理(概念)QR 码识别实战:制作二维码扫描器 文本识别入门 (OCR) 图像预处理使用 Tesseract…...
目标检测YOLO实战应用案例100讲-基于多级特征融合的小目标深度检测网络
目录 知识储备 基于多级特征融合的小目标深度检测网络实现 一、环境配置 二、核心代码实现 1. 多级特征融合模块(models/fpn.py ) 2. 主干网络(models/backbone.py ) 3. 检测头(models/detector.py ) 三、完整网络架构(models/net.py ) 四、训练代码(train.p…...
单片机-89C51部分:11、IIC 、传感器温湿度
飞书文档https://x509p6c8to.feishu.cn/wiki/Cczpw4oBeiyK71kFhKfcXkQmnad 一、简介 IIC协议,又称I2C协议,是由PHILP公司在80年代开发的两线式串行总线,用于连接微控制器及其外围设备,IIC属于半双工同步通信方式。 C IIC是一种同…...