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

C#语法基础

一、什么是.NET平台

.NET 是由 Microsoft 支持的免费开放源代码应用程序平台。

.NET

  • .NET 是一个安全、可靠且高性能的应用程序平台。
  • C# 是 .NET 的编程语言。它是强类型且类型安全的,并集成了并发和自动内存管理。

C#

  • C# 是一种新式、安全且面向对象的编程语言,既有面向数据的记录等高级功能,也有函数指针等低级功能。

跨平台

  • Android、Apple、Linux 和 Windows 操作系统均支持 .NET。它在多个 Linux 发行版(如 Red Hat Enterprise Linux 和 Ubuntu)中提供。

  • .NET 包括一组标准库和 API,涵盖集合、网络到机器学习。
  • NuGet 是 .NET 的包管理器,包含超过 300000 个包。

应用

应用

工具

  • 可以在任何操作系统上使用 .NET CLI、Visual Studio、Visual Studio Code 和其他工具生成应用。配置与GitHub Actions 等服务的持续集成并将部署推送到云的操作非常简单。

二、搭建C#开发环境

安装SDK

https://dotnet.microsoft.com/en-us/download/dotnet/thank-you/sdk-9.0.300-windows-x64-installer

安装Visual Studio2022

https://visualstudio.microsoft.com/zh-hans/vs/

三、C#基础

C#程序示例及程序结构解释


📄控制台应用程序

// 引入命名空间:System 包含基本类,如 Console、String 等
using System;// 定义一个命名空间,用于组织代码,避免类名冲突
namespace MyFirstApp
{// 定义一个类,C# 中所有代码必须写在类中class Program{// 主函数:程序入口点// args 表示命令行参数(可选)static void Main(string[] args){// 输出欢迎信息到控制台Console.WriteLine("欢迎使用 C# 示例程序!");// 调用自定义方法GreetUser();// 提示用户输入姓名Console.Write("请输入你的名字:");string name = Console.ReadLine();  // 读取用户输入// 使用字符串插值输出问候语Console.WriteLine($"你好, {name}!欢迎来到 C# 世界。");// 显示程序结束提示Console.WriteLine("程序即将结束,请按任意键退出...");Console.ReadKey();  // 阻塞程序直到用户按键}// 自定义方法:向用户打招呼static void GreetUser(){Console.WriteLine("很高兴见到你!");}}
}

🧩 模板结构说明

部分说明
using System;引入系统命名空间,提供常用类支持
namespace MyFirstApp将代码封装进一个逻辑组中,方便管理和维护
class Program定义一个类,包含程序逻辑
static void Main(string[] args)程序入口方法,程序从这里开始执行
Console.WriteLine()向控制台输出一行文本并换行
Console.Read() / ReadLine()从控制台读取用户输入
GreetUser()自定义静态方法,用于模块化代码
Console.ReadKey()防止控制台窗口一闪而过,等待用户按键

▶️ 运行效果(模拟)

欢迎使用 C# 示例程序!
很高兴见到你!
请输入你的名字:李四
你好, 李四!欢迎来到 C# 世界。
程序即将结束,请按任意键退出...

📌 小贴士

  • 可以将这个模板保存为 .cs 文件(如 Program.cs),然后使用 Visual Studio 或 .NET CLI 编译运行。
  • 若使用 .NET CLI:
    dotnet new console -n MyFirstApp
    cd MyFirstApp
    dotnet run
    

C#控制台读取值


✅示例:读取姓名和年龄,并输出信息

using System;class Program
{static void Main(){// 读取姓名Console.Write("请输入你的名字:");string name = Console.ReadLine();// 读取年龄并转换为整数Console.Write("请输入你的年龄:");int age = int.Parse(Console.ReadLine());// 输出结果Console.WriteLine($"你好,{name}!你今年 {age} 岁。");// 等待按键退出Console.WriteLine("按任意键退出...");Console.ReadKey();}
}

📝 注释说明(逐行解释)

代码注释
using System;引入系统命名空间,使用基础类库
class Program定义一个类,C# 所有代码都写在类中
static void Main()程序入口点
Console.Write(...); string name = ...提示并读取用户输入的名字
Console.Write(...); int age = ...提示并读取年龄,使用 int.Parse 转换为整数
Console.WriteLine(...)使用字符串插值输出信息
Console.ReadKey()防止控制台窗口关闭,等待用户按键

⚠️ 注意事项(补充)

  • int.Parse():如果输入不是合法整数,程序会崩溃。
  • 推荐使用 int.TryParse() 来进行安全转换(适用于更健壮的程序)。

C#命令行参数


🧩什么是命令行参数?

当你运行一个控制台程序时,可以在启动命令后面加上一些额外的信息(称为参数),例如:

MyApp.exe 参数1 参数2 参数3

这些参数可以通过 Main 方法的参数 string[] args 来获取和处理。


✅ 代码示例

using System;class Program
{static void Main(string[] args){// 检查是否有参数传入if (args.Length == 0){Console.WriteLine("未提供任何命令行参数。");return;}// 输出所有参数Console.WriteLine("你输入的命令行参数为:");for (int i = 0; i < args.Length; i++){Console.WriteLine($"参数 {i}{args[i]}");}}
}

📝 注释说明

行号代码注释
1using System;引入系统命名空间,用于控制台输入输出
3class Program定义一个类
5static void Main(string[] args)程序入口,args 是命令行参数数组
7-9if (args.Length == 0)如果没有参数,提示用户并退出
12for (int i = 0; i < args.Length; i++)遍历参数数组
13Console.WriteLine(...)输出每个参数

▶️运行方式及效果

1. 使用命令行运行(假设编译后的程序名为 MyApp.exe):
MyApp.exe Hello 123 true
2. 输出结果:
你输入的命令行参数为:
参数 0:Hello
参数 1:123
参数 2:true

var关键字


🔍 什么是 var

在 C# 中,var 是一个 隐式类型局部变量声明关键字。它告诉编译器根据你赋值的内容自动推断变量的类型。

注意: var 并不是“无类型”或“动态类型”,而是静态类型,只是类型由编译器自动推断。


✅代码示例

using System;class Program
{static void Main(){// 使用 var 声明变量并赋值var name = "Tom";          // 推断为 stringvar age = 25;              // 推断为 intvar price = 9.99;          // 推断为 doublevar isActive = true;       // 推断为 boolvar numbers = new int[] { 1, 2, 3 };  // 推断为 int[]// 输出变量类型和值Console.WriteLine($"name 类型: {name.GetType()}, 值: {name}");Console.WriteLine($"age 类型: {age.GetType()}, 值: {age}");Console.WriteLine($"price 类型: {price.GetType()}, 值: {price}");Console.WriteLine($"isActive 类型: {isActive.GetType()}, 值: {isActive}");Console.WriteLine($"numbers 类型: {numbers.GetType()}, 值: {string.Join(",", numbers)}");}
}

📝 注释说明

行号代码片段注释
8var name = "Tom";编译器推断 namestring 类型
9var age = 25;推断为 int
10var price = 9.99;推断为 double(默认浮点数是 double)
11var isActive = true;推断为 bool
12var numbers = new int[] { 1, 2, 3 };推断为 int[] 数组
14-18Console.WriteLine(...)输出变量的类型和值

⚠️ 三、使用限制

  • var 只能用于局部变量(不能用于类字段、属性等)。
  • 必须在声明时就赋值,否则无法推断类型:
var x;     // ❌ 错误:必须有初始化表达式
x = 100;   // 依然报错

C# List集合


🧩什么是 List<T>

List<T> 是 C# 中一个非常常用的泛型集合类,位于 System.Collections.Generic 命名空间中。它类似于数组,但具有动态扩容能力,可以根据需要自动增加容量。

T 表示集合中元素的类型,如 intstring、自定义类等。


✅代码示例

using System;
using System.Collections.Generic;class Program
{static void Main(){// 创建一个字符串类型的 List 集合List<string> names = new List<string>();// 添加元素names.Add("张三");names.Add("李四");names.Add("王五");// 插入元素到指定位置names.Insert(1, "赵六");// 访问元素(通过索引)Console.WriteLine("第一个名字是:" + names[0]);// 遍历集合Console.WriteLine("所有名字:");foreach (string name in names){Console.WriteLine(name);}// 删除某个元素names.Remove("李四");// 检查是否存在某个元素if (names.Contains("张三")){Console.WriteLine("张三在列表中");}// 获取集合长度Console.WriteLine("当前列表中有 " + names.Count + " 个元素");}
}

📝 注释说明

行号代码片段注释
5using System.Collections.Generic;引入泛型集合命名空间
8List<string> names = new List<string>();创建一个空的字符串列表
10-13Add() 方法添加元素到列表末尾
16Insert(1, "赵六")在索引 1 处插入元素
19names[0]使用索引访问元素
22-26foreach 循环遍历列表中的每个元素
29Remove("李四")移除指定元素
32Contains("张三")判断是否包含某个元素
36Count 属性获取当前集合中元素的数量

🧱常用方法和属性一览

方法/属性功能说明
Add(item)添加一个元素到末尾
Insert(index, item)在指定索引插入元素
Remove(item)移除第一个匹配的元素
RemoveAt(index)根据索引移除元素
Clear()清空整个列表
Contains(item)判断是否包含某个元素
Find(Predicate<T>)查找符合条件的第一个元素
Sort()对列表进行排序
Count获取当前元素数量

C#丢弃


🧩什么是“丢弃”?

你可以把它理解为一个“垃圾桶”,你不关心的数据就扔进去,不会占用内存变量名,也不会引发警告。

语法:_


✅ 代码示例

1. 忽略 out 参数
string input = "123";
if (int.TryParse(input, out int number))
{Console.WriteLine("转换成功:" + number);
}
else
{Console.WriteLine("转换失败");
}

如果你只关心是否转换成功,而不关心具体值,可以这样写:

if (int.TryParse(input, out _))
{Console.WriteLine("输入是一个有效的整数!");
}
else
{Console.WriteLine("输入无效!");
}

🔍 此处我们只关心是否解析成功,所以用 _ 丢弃实际解析结果。


2. 忽略元组(tuple)中的某些值
(string name, int age, string city) GetUserInfo()
{return ("Tom", 25, "Shanghai");
}var (_, _, city) = GetUserInfo(); // 只取 city,忽略 name 和 age
Console.WriteLine("所在城市:" + city);

3. 在 foreach 或 LINQ 查询中忽略不需要的变量
List<string> names = new List<string> { "Alice", "Bob", "Charlie" };foreach (var _ in names)
{Console.WriteLine("这是一个用户");
}

这样可以明确表达:我只关心循环次数,不关心每个元素本身。


4. 使用 _ 多次是合法的
var (x, y) = (10, 20);
_ = x;
_ = y;// 不会报错,因为多个丢弃变量都叫 `_` 是允许的

⚠️ 三、注意事项

内容说明
_ 不是一个变量不能给它赋值或读取它的值
不可变它只是一个占位符,不代表真实数据
只能用于 C# 7.0 及以上版本.NET Core 2.0 / .NET Framework 4.7+ 支持

C#的Range()方法

🧩什么是 Range() 方法?

虽然没有单独的 Range() 方法,但 C# 引入了 范围运算符 ..Range 结构,用于表示一个范围,并结合索引器来提取数据的一部分。

✅ 关键词:^ 表示倒数索引,.. 表示范围


✅代码示例

示例代码:

using System;class Program
{static void Main(){int[] numbers = { 10, 20, 30, 40, 50, 60 };// 使用 Range 提取索引 [1, 4) 的元素(即索引 1 到 3)var range1 = numbers[1..4];Console.WriteLine("range1: " + string.Join(", ", range1));  // 输出:20, 30, 40// 提取从索引 2 开始到末尾的所有元素var range2 = numbers[2..];Console.WriteLine("range2: " + string.Join(", ", range2));  // 输出:30, 40, 50, 60// 提取从开头到索引 3 的元素(不包含索引 3)var range3 = numbers[..3];Console.WriteLine("range3: " + string.Join(", ", range3));  // 输出:10, 20, 30// 使用 ^ 表示倒数索引:提取倒数第 3 个到倒数第 1 个(即索引 3 到 4)var range4 = numbers[^3..^1];Console.WriteLine("range4: " + string.Join(", ", range4));  // 输出:40, 50}
}

📝 注释说明

行号代码片段注释
7int[] numbers = { ... }定义一个整型数组
10numbers[1..4]提取从索引 1(含)到 4(不含)之间的元素
13numbers[2..]从索引 2 到末尾
16numbers[..3]从开始到索引 3(不含)
19numbers[^3..^1]使用 ^ 表示倒数索引:从倒数第 3 到倒数第 1(不含)

🔢关键概念:IndexRange

C# 8.0 引入两个新结构体:

类型用途
System.Index表示一个位置(支持正向和反向索引)
System.Range表示一个范围 [start..end]

你可以这样使用它们:

Index start = ^3;   // 倒数第三个
Index end = ^1;     // 倒数第一个(不包含)
Range range = start..end;var result = numbers[range];
Console.WriteLine(string.Join(", ", result));

C#常数

🧩什么是 const 常数?

使用 const 关键字声明的变量,在编译时就被确定,并且其值在整个程序中不可更改

语法:public const 数据类型 常量名 = 值;


✅示例代码

using System;class Program
{// 定义常数public const double PI = 3.14159;public const string APP_NAME = "MyApp";public const int MaxUsers = 100;static void Main(){Console.WriteLine("圆周率 π = " + PI);Console.WriteLine("应用程序名称:" + APP_NAME);Console.WriteLine("最大用户数:" + MaxUsers);// 尝试修改常数? ❌ 编译错误!// PI = 3.14; // 报错:无法对静态只读字段赋值}
}

📝 注释说明

行号代码片段注释
7public const double PI = 3.14159;定义一个表示圆周率的常量
8public const string APP_NAME = "MyApp";字符串常量
9public const int MaxUsers = 100;整型常量
12-16Console.WriteLine(...)输出常量值
18-19PI = 3.14;❌ 编译错误:常量不可修改

🔤支持的数据类型

C# 中 const 支持以下常用数据类型:

类型示例
intconst int Count = 10;
double / floatconst double Pi = 3.14;
stringconst string Title = "Hello";
boolconst bool IsReady = true;
charconst char Delimiter = ',';

⚠️ 注意:const 只能用于 基本数据类型 和某些特殊引用类型(如 string)。


🧱 四、常量与静态只读字段的区别(const vs static readonly

特性conststatic readonly
编译时常量✅ 是❌ 否
运行时初始化❌ 不可✅ 可以
修改能力❌ 不可变❌ 初始化后不可变
适用类型基本类型、字符串所有类型
跨程序集更新影响会保留旧值会同步新值
示例对比:
public class Settings
{public const string NameConst = "Tom";           // 编译时常量public static readonly string NameReadonly = "Jerry"; // 运行时常量
}

C#字符串格式

🧩C# 中字符串格式化的方法有哪些?

方法特点
string.Format()最基础的格式化方式
插值字符串($"..."C# 6.0 引入,推荐使用
Console.WriteLine() 内置支持可直接格式化输出
ToString("格式字符串")对数字、日期等进行格式化
StringBuilder.AppendFormat()高效拼接时使用

✅1. 使用插值字符串(推荐)

这是目前最常用、也最直观的方式,使用 $"" 定义插值字符串。

示例:
string name = "Tom";
int age = 25;
double height = 178.5;// 使用插值字符串
string info = $"姓名:{name},年龄:{age},身高:{height:F1}cm";Console.WriteLine(info);
输出:
姓名:Tom,年龄:25,身高:178.5cm

🔍 {height:F1} 表示保留一位小数


✅2. 使用 string.Format()

适合需要延迟格式化或动态构造字符串的场景。

示例:
string message = string.Format("姓名:{0},年龄:{1},身高:{2:F1}cm", name, age, height);
Console.WriteLine(message);
输出同上:
姓名:Tom,年龄:25,身高:178.5cm

✅3. 格式化数字和日期

数字格式化(常见格式说明):
格式示例含义
F2{value:F2}保留两位小数
N0{value:N0}千分位整数
P1{value:P1}百分比,保留一位小数
C{value:C}货币符号(根据区域自动)
示例:
double price = 99.5;
double rate = 0.1234;Console.WriteLine($"价格:{price:C}");         // ¥99.50 或 $99.50
Console.WriteLine($"折扣率:{rate:P1}");       // 12.3%

日期时间格式化:
DateTime now = DateTime.Now;Console.WriteLine($"完整日期时间:{now:yyyy-MM-dd HH:mm:ss}");
Console.WriteLine($"简写日期:{now:yyyy/MM/dd}");

✅4. 使用 ToString() 格式化

适用于单个变量格式化为字符串:

double value = 1234.5678;string formattedValue = value.ToString("N2");   // 输出:1,234.57
string percent = (0.876).ToString("P1");        // 输出:87.6%

C#字符串插值

🧩什么是字符串插值?

C# 6.0 引入了 字符串插值(Interpolated Strings),使用 $"" 语法,允许你在字符串中直接嵌入变量或表达式,使代码更清晰易读。

语法:$"..."


✅ 二、基本使用示例

using System;class Program
{static void Main(){string name = "Tom";int age = 25;double height = 178.5;// 使用插值字符串输出信息Console.WriteLine($"姓名:{name},年龄:{age},身高:{height:F1}cm");}
}

输出:

姓名:Tom,年龄:25,身高:178.5cm

📝逐行注释解释

行号代码片段注释
1using System;引入基础命名空间
3class Program定义主类
5static void Main()程序入口
7-9string name = "..."; int age = ...;声明变量
12Console.WriteLine($"...")插值字符串,内嵌变量和格式化

相关文章:

C#语法基础

一、什么是.NET平台 .NET 是由 Microsoft 支持的免费开放源代码应用程序平台。 .NET .NET 是一个安全、可靠且高性能的应用程序平台。C# 是 .NET 的编程语言。它是强类型且类型安全的&#xff0c;并集成了并发和自动内存管理。 C# C# 是一种新式、安全且面向对象的编程语言&…...

深度学习框架对比---Pytorch和TensorFlow

一、计算图与执行模式 1. 图的本质&#xff1a;动态图 vs 静态图 PyTorch&#xff08;动态图&#xff0c;Eager Execution&#xff09; 运行机制&#xff1a;代码逐行执行&#xff0c;张量操作立即生效&#xff0c;计算图在运行时动态构建。x torch.tensor(1.0, requires_gra…...

antdv3 Tabs.TabPane 右上角增加一个角标Badge

1、Tabs官方说明 Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.js 2、Badge角标官方效果图 Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.js 3、Tabs.TabPane要实现的效果 4、代码 <Tabs v-m…...

Python-88:英雄升级奖励

问题描述 在一个游戏中&#xff0c;小W拥有 n 个英雄&#xff0c;每个英雄的初始能力值均为 1。她可以通过升级操作来提升英雄的能力值&#xff0c;最多可以进行 k 次升级。 每次升级操作包含以下步骤&#xff1a; 选择一个英雄选择一个正整数 x将该英雄的能力值 aiai​ 更新…...

使用uv创建python项目

uv创建项目 uv init -p 3.12 qwen3env # -p 指定python版本 # qwen3env是项目名称 # 可以使用下面的步骤 mkdir qwen3env cd qwen3env uv venv -p3.12 .venv # 基于 Python 3.12 创建名为 .venv 的虚拟环境 uv init第一种方式 第二种方式 内容如下 执行python脚本 uv ru…...

window 显示驱动开发-命令和 DMA 缓冲区简介

命令和 DMA 缓冲区非常相似。 但是&#xff0c;命令缓冲区由用户模式显示驱动程序使用&#xff0c;DMA 缓冲区由显示微型端口驱动程序使用。 命令缓冲区具有以下特征&#xff1a; 它永远不会由 GPU 直接访问。 硬件供应商控制格式。 它从呈现应用程序的专用地址空间中的常规…...

深光-谷歌TV TADA/奈飞Netflix/亚马逊Prime Video/YouTube等测试外包服务

一、谷歌TV TADA测试服务 1.CTS CTS测试是一系列旨在确保设备与Android操作系统兼容性的自动化测试&#xff0c;CTS是所有测试项中测试量最大的一项测试。 2.GTS GTS测试是确保Android设备能够正确集成和运行Google Mobile Services&#xff08;GMS&#xff09;的关键步骤&am…...

《教育退费那些事儿:从困境到破局》

《教育退费那些事儿&#xff1a;从困境到破局》 教育退费&#xff1a;不容忽视的热点问题 在当今社会&#xff0c;教育消费已成为家庭支出的重要组成部分。无论是 K12 阶段的学科辅导、艺术特长培训&#xff0c;还是成人的职业技能提升、学历继续教育&#xff0c;家长和学生们…...

AtCoder 第405场初级竞赛 A~E题解

A Is it rated? 【题目链接】 原题链接:A - Is it rated? 【考点】 嵌套判断 【题目大意】 有两个分区,有不同的评分区间,给一个评分 r 和分区 x,判断是否在评分区间中。 【解析】 先判断在属于哪个分区,再判断是否在该分区评分区间中。 【难度】 GESP一级 【…...

登录接口中图片验证码Tesseract-OCR识别Java脚本

项目上移植了研发部的产品&#xff0c;文档不全&#xff0c;项目上验证码功能无法关闭&#xff0c;又要做接口/性能测试&#xff0c;开发不配合&#xff08;作为测试多么无奈&#xff09;&#xff0c;此方法识别命中率不高&#xff0c;仅作借鉴。 版本JDK11 import io.restass…...

专项智能练习(定义判断)_DA_02

2. 单选题 虚假同感偏差也叫虚假一致性偏差&#xff0c;是指人们常常会高估或夸大自己的信念、判断及行为的普遍性。在认知他人时总喜欢把自己的特性赋予他人身上&#xff0c;假定他人与自己是相同的&#xff0c;而当遇到与此相冲突的信息时&#xff0c;会坚信自己信念和判断的…...

安卓A15系统实现修改锁屏界面默认壁纸功能

最近遇到一个A15系统项目&#xff0c;客户要求修改锁屏界面的默认壁纸&#xff0c;客户提供了一张壁纸图片&#xff0c;但是从A15系统的源代码查看时才知道谷歌已经去掉了相关的代码&#xff0c;已经不支持了&#xff0c;A13和A14系统好像是支持的&#xff0c;A15系统的Wallpap…...

Linux之Yum源与Nginx服务篇

1.Yum源知识理论总结概括 Yum源概述 Yum 源 即软件仓库的标识&#xff0c;里面承载着软件包集合 Yum源组成 包含模块 【OS】、【everything】、【EPOL】、【debuginfo】、【source】、【update-source】 【os】:简称operator system 它内部包含操作系统的核心组件&#x…...

帧差法识别

定义&#xff1a; 视频通过闪过x帧画面来实现&#xff0c;帧差法就是利用两帧之间的差异找出。也就是移动目标识别 帧差法识别步骤&#xff1a; 1、灰度处理&#xff1a;将多通道变成双通道压缩图像数据。 cvtColor(before_frame,before_gray,CV_RGB2GRAY);cvtColor(after_f…...

游戏引擎学习第282天:Z轴移动与摄像机运动

运行游戏&#xff0c;展示目前进展 我们目前正在进行一个游戏开发项目。昨天&#xff0c;我们实现了基于房间的角色移动系统&#xff0c;并且加入了摄像机的跟随滚动功能。这是我们首次进入“游戏逻辑设计”阶段&#xff0c;也就是说&#xff0c;我们开始构建游戏本身的行为和…...

解决:npm install报错,reason: certificate has expired

目录 1. 问题分析2. 问题解决2.1 查看配置的镜像2.2 修改镜像源 种一棵树最好的时间是10年前&#xff0c;其次就是现在&#xff0c;加油&#xff01; --by蜡笔小柯南 1. 问题分析 启动前…...

C++ 基础知识点

1、指针和引用的区别 指针&#xff1a;是一个变量&#xff0c;存储的是另一个变量的内存地址&#xff0c;可以被重新赋值指向不同的对象&#xff0c;允许为 nullptr。 指针的特性&#xff1a; 独立变量&#xff0c;存储内存地址 可重新赋值指向其他对象 支持空值&#xff08;n…...

线代第二章矩阵第九、十节:初等变换、矩阵的标准形、阶梯形与行最简阶梯形、初等矩阵

文章目录 初等变换初等行变换初等列变换 矩阵的标准型阶梯形与行最简阶梯形阶梯型矩阵行简化阶梯形 初等矩阵定义性质初等矩阵和初等变换的联系 本节非常重要 初等变换 初等变换使用"→"&#xff0c;而不是"" 初等行变换 ① 交换两行 ② 非0数乘以某一…...

新能源汽车制动系统建模全解析——从理论到工程应用

《纯电动轻卡制动系统建模全解析&#xff1a;车速-阻力拟合、刹车力模型与旋转质量转换系数优化》 摘要 本文以纯电动轻卡为研究对象&#xff0c;系统解析制动系统建模核心参数优化方法&#xff0c;涵盖&#xff1a; 车速-阻力曲线拟合&#xff08;MATLAB实现与模型验证&…...

初始化一个Springboot项目

初始化一个Springboot项目 文章目录 初始化一个Springboot项目1、新建项目2、配置yml3、自定义异常4、通用相应类5、全局跨域配置6、总结 1、新建项目 首先&#xff0c;我们需要创建一个新的 Spring Boot 项目。这里我们使用 IntelliJ IDEA 作为开发工具&#xff0c;它提供了方…...

Springboot考研信息平台

Springboot考研信息平台 文章目录 Springboot考研信息平台1、技术栈2、项目说明3、项目截图4、核心代码4.1、前端核心代码4.2、后端核心代码 1、技术栈 前端 Vue 是一套用于构建用户界面的渐进式 JavaScript 框架。 Vue 作为前端核心框架&#xff0c;提供了响应式的数据绑定和高…...

Spring 框架 JDBC 模板技术详解

一、JDBC 模板技术概述 在传统 JDBC 开发中&#xff0c;开发人员需要手动处理数据库连接&#xff08;Connection&#xff09;、事务管理、语句执行&#xff08;Statement&#xff09;和结果集&#xff08;ResultSet&#xff09;等繁琐操作&#xff0c;不仅代码冗余度高&#x…...

Console Importer浏览器插件的编译 及 制作成.crx浏览器插件的步骤

近日由于下载Console Importer浏览器插件(一个前端调试窗口方便引下第三方库便于学习测试的插件)找不到资源&#xff0c;于是找到该插件的源码&#xff0c;地址&#xff1a;https://github.com/pd4d10/console-importer&#xff09;&#xff0c;发现该插件基于一款名为“Plasmo…...

ArcGIS切片方案记录bundle文件

文章目录 前言一、导入底图二、生成切片方案三、导出切片方案总结 前言 切片的作用是让前端可以访问地图的Mapsever来加载底图。arcgis切片是测绘人员或者WebGIs人员需要认识到的操作。 一、导入底图 首先10.8的ArcGis&#xff0c;这里没有Pro&#xff0c;Pro其实也是一样的操…...

山东大学计算机图形学期末复习6——CG10下

##CG10下 将世界坐标中的任意点 P P P 变换到以相机为中心的“观察坐标系”下&#xff08;右手坐标系&#xff09; n \mathbf{n} n&#xff1a;从相机眼睛朝向观察点的反方向&#xff0c;代表“前方”&#xff1b; u \mathbf{u} u&#xff1a;观察坐标系的 x 轴&#xff0c;向…...

【Spring Cloud Gateway】Nacos整合遇坑记:503 Service Unavailable

一、场景重现 最近在公司进行微服务架构升级&#xff0c;将原有的 Spring Cloud Hoxton 版本升级到最新的 2021.x 版本&#xff0c;同时使用 Nacos 作为服务注册中心和配置中心。在完成基础框架搭建后&#xff0c;我使用 Spring Cloud Gateway 作为API 网关&#xff0c;通过 N…...

[Linux]从零开始的STM32MP157 Busybox根文件系统测试及打包

一、前言 在上一篇教程中&#xff0c;我们成功编译了Busybox根文件系统并且能够正常使用&#xff0c;但是大家应该也发现了我们构建的根文件系统存在许多问题&#xff0c;比如一些找不到文件的报错。并且在实际的产品中一般都是将根文件系统烧录到EMMC中&#xff0c;并不是像我…...

【Pandas】pandas DataFrame eval

Pandas2.2 DataFrame Computations descriptive stats 方法描述DataFrame.abs()用于返回 DataFrame 中每个元素的绝对值DataFrame.all([axis, bool_only, skipna])用于判断 DataFrame 中是否所有元素在指定轴上都为 TrueDataFrame.any(*[, axis, bool_only, skipna])用于判断…...

考研408《计算机组成原理》复习笔记,第二章(2)数值数据的表示和运算(浮点数篇)

一、回顾定点数知识点 ——定点小数机器码表示 ——定点整数机器码表示 ——【原码】和【移码】的作用 二、浮点数表示 1、概念引入 我们生活中有很多 “带小数”&#xff0c;也就是浮点数&#xff0c;也就是【整数部分】和【纯小数部分】都不为0&#xff0c;那么这样的小数…...

【虚幻引擎】UE5独立游戏开发全流程(商业级架构)

本套课程我将会讲解一下知识 1.虚幻引擎的常用功能节点、模块包含但不限于动画模块、UI模块、AI模块、碰撞模块、伤害模块、背包模块、准心模块、武器模块、可拾取物品模块、死亡等模块。 2.整个游戏的设计思路&#xff08;游戏架构&#xff09;&#xff0c;本套教程讲解了如…...

大语言模型 08 - 从0开始训练GPT 0.25B参数量 - MiniMind 单机多卡 torchrun deepspeed

写在前面 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是目前最广泛应用的大语言模型架构之一&#xff0c;其强大的自然语言理解与生成能力背后&#xff0c;是一个庞大而精细的训练流程。本文将从宏观到微观&#xff0c;系统讲解GPT的训练过程&#xff0c;…...

使用gitbook 工具编写接口文档或博客

步骤一&#xff1a;在项目目录中初始化一个 GitBook 项目 mkdir mybook && cd mybook git init npm init -y步骤二&#xff1a;添加书籍结构&#xff08;如 book.json, README.md&#xff09; echo "# 我的书" > README.md echo "{}" > bo…...

Mysql视图详解

文章目录 1、视图简介 && 前置准备2、基本crud语法3、检查选项&#xff08;with check option&#xff09;CASCADEDLOCAL总结 4、视图更新限定条件 1、视图简介 && 前置准备 视图 (View) 是一种虚拟存在的表。视图中的数据并不在数据库中实际存在&#xff0c;…...

leetcode 56. 合并区间

题目描述 代码&#xff1a; class Solution {struct Interval{int left;int right;Interval(int l0,int r0):left(l),right(r){}bool operator<(const Interval& rhs) const{return left<rhs.left;}};public:vector<vector<int>> merge(vector<vecto…...

Mac 环境下 JDK 版本切换全指南

概要 在 macOS 上安装了多个 JDK 后&#xff0c;可以通过系统自带的 /usr/libexec/java_home 工具来查询并切换不同版本的 Java。只需在终端中执行 /usr/libexec/java_home -V 列出所有已安装的 JDK&#xff0c;然后将你想使用的版本路径赋值给环境变量 JAVA_HOME&#xff0c;…...

【生活相关-日语-日本-东京-搬家后-引越(ひっこし)(3)-踩坑点:国民健康保险】

【生活相关-日语-日本-东京-搬家后-引越&#xff08;ひっこし&#xff09;&#xff08;3&#xff09;-注意点&#xff1a;国民健康保险】 1、前言2、情况说明&#xff08;1&#xff09;问题说明&#xff08;2&#xff09;情况说明&#xff08;1&#xff09;收到情况&#xff08…...

C++ asio网络编程(6)利用C11模拟伪闭包实现连接的安全回收

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、智能指针管理Session二、用智能指针来实现Server的函数1.start_accept()1.引用计数注意点2.std::bind 与异步回调函数的执行顺序分析 2.handle_accept1.异步…...

【视频】解决FFmpeg将RTSP转RTMP流时,出现的卡死、出错等问题

1、简述 如果不修改图像内容,可以使用FFmpeg命令来将RTSP转RTMP流。 SRS视频服务器就是这么干的,它没有使用FFmpeg接口,而是直接使用FFmpeg命令来转流。 但是在使用中,约到了一些问题,比如转流时卡死、转流出错等等,下面描述怎么解决这些问题 2、出错重启 在shell脚本…...

飞牛NAS本地部署开源TTS文本转语音工具EasyVoice与远程使用流程

文章目录 前言1. 环境准备2. Docker部署与运行3. 简单使用测试4. 安装内网穿透4.1 开启ssh连接安装cpolar4.2 创建公网地址 5. 配置固定公网地址总结 前言 本文主要介绍如何在fnOS飞牛云NAS使用Docker本地部署一款非常好用的开源TTS文本转语音工具EasyVoice&#xff0c;并结合…...

​​STC51系列单片机引脚分类与功能速查表(以STC89C52为例)​

​​1. 基本I/O端口​​ ​​端口​​​​引脚范围​​​​类型​​​​主要功能​​​​特殊说明​​​​P0​​P0.0~P0.7​​开漏双向I/O​​1. 通用I/O&#xff08;需外接上拉电阻&#xff09; 2. 数据总线&#xff08;D0-D7&#xff09; 3. 低8位地址总线&#xff08;A0-A…...

recvfrom和sendto函数中地址参数的作用

在 UDP 通信中&#xff0c;recvfrom 和 sendto 函数中的地址参数起着至关重要的作用。 以下是对这两个函数中地址参数的作用、所属方以及缺失地址时的后果的详细解释。 recvfrom 函数 int recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_add…...

运维职业发展思维导图

主要内容如下: 一、 初级入行阶段 这是职业生涯的起点,主要涉及基础技能的学习和实践。 Linux初学: 重点是学习Linux系统的基础命令和操作。IDC机房运维: 负责数据中心机房内设备的管理和日常维护工作。Helpdesk桌面运维: 提供桌面技术支持,帮助用户解决遇到的计算机软硬…...

【数据处理】Python对CMIP6数据进行插值——详细解析实现(附源码)

目录 Python对CMIP6数据进行插值一、引言代码概览思维导图 二、数据预处理三、数据区域裁剪四、插值&#xff08;一&#xff09; 垂直插值&#xff08;二&#xff09; 水平插值 五、保存插值好的文件六、文件合并与气候态计算七、代码优化技巧八、多线程处理九、全部代码 Pytho…...

worldquant rank函数

https://support.worldquantbrain.com/hc/en-us/community/posts/13869304934935-%E6%80%8E%E6%A0%B7%E7%90%86%E8%A7%A3rank%E5%87%BD%E6%95%B0 链接。进的话可以填我的邀请码JS34795我可以带你 现在学习rank函数 我们所说的做多和做空 首先&#xff0c;当我们讨论Long和S…...

工业4.0神经嫁接术:ethernet ip转profinet协议通信步骤图解

在现代工业自动化领域&#xff0c;不同品牌的设备和协议之间的兼容性问题一直是个挑战。我们的包装线项目就遇到了这样的难题&#xff1a;需要将Rockwell Allen-Bradley的EtherNet/IP伺服系统与西门子PLC的PROFINET主站进行无缝对接。为了解决这一问题&#xff0c;我们采用了et…...

数据库——数据操作语言DML

&#xff08;2&#xff09;数据操作语言DML 简称DML——Data Manipulation Language用来对数据库中表的记录进行更新关键字&#xff1a;insert,delete,update A、 插入表记录 向表中插入数据 格式&#xff1a;insert into 表名(字段1,字段2,字段3……) values(值1,值2,值3);…...

文件防泄密的措施有哪些?

文件防泄密措施需要从技术、管理和物理三个层面综合施策&#xff0c;以下为常见措施分类整理&#xff1a; 一、技术防护措施 华途加密技术 文件加密&#xff1a;使用AES、RSA等算法对敏感文件加密。 传输加密&#xff1a;通过SSL/TLS、VPN保障传输安全&#xff0c;禁止明文传…...

C++ Mac 打包运行方案(cmake)

文章目录 背景动态库梳理打包方案静态库处理动态库处理(PCL库)编译链接动态库后处理逻辑 批量信任 背景 使用C编写的一个小项目&#xff0c;需要打包成mac下的可执行文件&#xff08;免安装版本&#xff09;&#xff0c;方便分发给其他mac执行&#xff0c;需要把项目的动态库都…...

数学复习笔记 10

前言 我觉得数学的高分乃至满分属于那些&#xff0c;聪明&#xff0c;坚韧&#xff0c;勇敢&#xff0c;细致的人。我非常惭愧自己不是这样的人&#xff0c;我在生活中发现了这样的同学&#xff0c;和他们交流的时候我常常感到汗流浃背&#xff0c;因为他们非常扎实的基础知识…...

Oracle-相关笔记

Oracle Database Online Documentation 11g 连接 WinR sqlplus username/passwordhostname:port/service_namesqlplus user02/123456192.xxx:1521/orclsqlplus / as sysdba #SQL*Plus 終端编码使用UTF-8 chcp 65001#打开SQL*Plus程序 sqlplus /nolog#使用dba角色登录(用 1.…...