C#初级教程(6)——函数:从基础到实践
一、函数的核心价值:简化与复用代码
以游戏开发项目为例,在游戏中,角色的移动、攻击等行为并非只在单一场景中出现。设想一下,若每次需要角色执行这些行为时,都要重新编写对应的代码,那将是何等繁琐且易错的工作。通过将这些行为封装成函数,我们只需编写一次,然后在不同场景中按需调用即可。这不仅避免了代码的重复编写,还显著提升了开发效率,让代码结构更加简洁明了,易于维护和扩展。
二、函数的基础构建:定义与调用
(一)函数定义的基础结构
在 C# 的控制台应用程序中,函数的定义遵循特定的形式:
static <returnType> <FunctionName>(<parameterList>)
{// 函数体代码return <returnValue>;
}
在这里,<returnType> 明确了函数返回值的类型。若函数无需返回值,可将其指定为 void。<FunctionName> 则是函数的名称,在命名时需严格遵循 C# 的命名规范,以确保代码的可读性和规范性。<parameterList> 为参数列表,它可以为空,也可以包含一个或多个参数。而 <returnValue> 必须与 <returnType> 的类型保持一致,用于将函数的计算结果返回给调用者。
下面是一个简单的无参数、无返回值的函数定义示例:
static void PrintMessage()
{Console.WriteLine("欢迎来到C#函数的世界!");
}
在这个例子中,PrintMessage 函数没有接收任何参数,也不返回任何值,其功能仅仅是在控制台输出一条欢迎信息。
(二)函数的调用
一旦函数定义完成,就可以在其他函数中进行调用。通常,我们会在 Main 函数中调用其他函数,以启动程序的执行流程。以下是在 Main 函数中调用 PrintMessage 函数的示例:
static void Main()
{PrintMessage();
}
当程序执行到 PrintMessage(); 这一行时,会跳转到 PrintMessage 函数的定义处,执行函数体中的代码,即输出欢迎信息,然后再返回 Main 函数继续执行后续代码。
(三)带参数和返回值的函数
函数的强大之处在于它能够通过参数接收外部传递的数据,并通过返回值将处理结果反馈回去。例如,下面是一个用于计算两个整数之和的函数:
static int AddNumbers(int num1, int num2)
{return num1 + num2;
}
在这个函数中,num1 和 num2 是两个整数类型的参数,函数体将这两个参数相加,并通过 return 语句返回计算结果。
在 Main 函数中调用该函数的示例如下:
static void Main()
{int result = AddNumbers(3, 5);Console.WriteLine("两数之和为:" + result);
}
在上述代码中,首先调用 AddNumbers 函数,将 3 和 5 作为参数传递进去,函数计算得到结果 8,然后将结果赋值给 result 变量,最后在控制台输出两数之和。
三、参数的灵活运用:从固定参数到参数数组
(一)固定参数
函数的固定参数在定义时,其数量和类型都是明确且固定的。例如,在计算圆面积的函数中,我们需要接收圆的半径作为参数,以进行面积的计算。以下是该函数的定义:
static double CalculateCircleArea(double radius)
{return Math.PI * radius * radius;
}
在这个函数中,radius 是一个 double 类型的固定参数,用于表示圆的半径。函数通过 Math.PI 常量和传入的半径值,按照圆面积公式计算并返回圆的面积。
(二)参数数组
当函数需要处理数量不确定的参数时,参数数组就派上了用场。在 C# 中,参数数组通过 params 关键字来定义,并且它只能出现在参数列表的最后一个位置。
例如,我们可以定义一个计算多个整数之和的函数:
static int SumNumbers(params int[] numbers)
{int sum = 0;foreach (int num in numbers){sum += num;}return sum;
}
在这个函数中,params int[] numbers 表示这是一个参数数组,它可以接收任意数量的整数参数。在函数体内部,通过 foreach 循环遍历参数数组,将每个元素累加到 sum 变量中,最后返回累加的结果。
调用该函数时,我们可以非常灵活地传递任意多个整数参数,如下所示:
static void Main()
{int total = SumNumbers(1, 2, 3, 4, 5);Console.WriteLine("多个数之和为:" + total);
}
在上述代码中,我们向 SumNumbers 函数传递了 5 个整数参数,函数会正确地计算它们的和并返回。
四、函数在结构体中的应用:增强数据与行为的关联性
在 C# 中,结构体是一种用户自定义的数据类型。在结构体中定义函数,能够将数据和与之相关的操作紧密地结合在一起,从而增强代码的内聚性和可读性。
以表示学生信息的结构体为例:
struct Student
{public string Name;public int Age;public string GetStudentInfo(){return "姓名:" + Name + ",年龄:" + Age;}
}
在这个结构体中,我们定义了两个字段 Name 和 Age,用于存储学生的姓名和年龄信息。同时,还定义了一个 GetStudentInfo 函数,该函数用于返回包含学生姓名和年龄的字符串信息。
在 Main 函数中使用该结构体和其内部函数的示例如下:
static void Main()
{Student student = new Student { Name = "张三", Age = 20 };string info = student.GetStudentInfo();Console.WriteLine(info);
}
在上述代码中,首先创建了一个 Student 结构体的实例 student,并为其 Name 和 Age 字段赋值。然后调用 student 的 GetStudentInfo 函数,获取学生信息字符串,并在控制台输出。
五、函数重载:提升代码的适应性
函数重载是 C# 中一个非常实用的特性,它允许我们在同一个作用域内定义多个具有相同名称的函数,但这些函数的参数列表必须不同(参数个数、类型或顺序不同)。编译器会根据调用函数时传递的实际参数的类型和个数,自动确定应该调用哪个函数。
例如,我们可以针对求两个数最大值的需求,针对不同数据类型进行函数重载:
static int Max(int num1, int num2)
{return num1 > num2? num1 : num2;
}static double Max(double num1, double num2)
{return num1 > num2? num1 : num2;
}
在上述代码中,我们定义了两个名为 Max 的函数,一个用于比较两个整数的大小并返回较大值,另一个用于比较两个双精度浮点数的大小并返回较大值。
在 Main 函数中调用不同版本的 Max 函数的示例如下:
static void Main()
{int intResult = Max(5, 8);double doubleResult = Max(3.5, 7.2);Console.WriteLine("整数最大值:" + intResult);Console.WriteLine("双精度浮点数最大值:" + doubleResult);
}
在这个例子中,根据传递给 Max 函数的参数类型,编译器会准确地调用相应版本的函数,从而实现对不同数据类型的最大值求解。
六、委托:动态调用函数的强大工具
委托是 C# 中一种非常强大的类型,它的作用是存储函数的引用。通过委托,我们可以实现函数的动态调用,这为代码的编写带来了极大的灵活性。
首先,我们需要定义一个委托类型,它定义了返回类型和参数列表。例如:
delegate int MathOperation(int num1, int num2);
在这个例子中,MathOperation 是一个委托类型,它表示可以引用一个接收两个 int 类型参数,并返回一个 int 类型结果的函数。
接下来,我们定义两个符合该委托定义的函数:
static int Add(int num1, int num2)
{return num1 + num2;
}static int Subtract(int num1, int num2)
{return num1 - num2;
}
在 Main 函数中使用委托的示例如下:
static void Main()
{MathOperation operation;operation = Add;int result1 = operation(5, 3);operation = Subtract;int result2 = operation(5, 3);Console.WriteLine("加法结果:" + result1);Console.WriteLine("减法结果:" + result2);
}
在上述代码中,首先声明了一个 MathOperation 类型的变量 operation。然后将 operation 指向 Add 函数,通过 operation 调用 Add 函数并传递参数 5 和 3,得到加法运算的结果。接着,将 operation 重新指向 Subtract 函数,再次调用 operation 并传递相同参数,得到减法运算的结果。通过这种方式,我们实现了根据程序运行时的逻辑动态选择调用不同函数的功能。
七、函数相关的进阶知识拓展
(一)Lambda 表达式与匿名函数
Lambda 表达式是 C# 中的一种匿名函数,它提供了一种简洁的方式来定义可作为参数传递或存储在变量中的代码块。Lambda 表达式可以极大地简化代码编写,尤其是在处理一些简单的函数逻辑时。
例如,我们可以使用 Lambda 表达式来实现两个整数相加的功能,如下所示:
MathOperation addLambda = (num1, num2) => num1 + num2;
int lambdaResult = addLambda(4, 6);
Console.WriteLine("Lambda表达式计算结果:" + lambdaResult);
在上述代码中,(num1, num2) => num1 + num2 就是一个 Lambda 表达式,它定义了一个接收两个整数参数并返回它们之和的函数。通过将这个 Lambda 表达式赋值给 addLambda 变量(addLambda 是 MathOperation 委托类型的变量),我们可以像调用普通函数一样调用它,从而得到计算结果。
(二)递归函数
递归函数是一种在函数内部调用自身的函数。递归函数常用于解决那些可以分解为相似子问题的场景,通过不断地调用自身来逐步解决问题,直到满足某个终止条件。
以计算阶乘为例,我们可以使用递归函数来实现:
static int Factorial(int n)
{if (n == 0 || n == 1){return 1;}else{return n * Factorial(n - 1);}
}
在这个递归函数中,当 n 为 0 或 1 时,函数返回 1,这是递归的终止条件。否则,函数会将 n 与 Factorial(n - 1) 的结果相乘并返回,其中 Factorial(n - 1) 就是对自身的递归调用,通过不断地减小 n 的值,最终达到终止条件。
在 Main 函数中调用递归函数的示例如下:
static void Main()
{int factorialResult = Factorial(5);Console.WriteLine("5的阶乘为:" + factorialResult);
}
在上述代码中,调用 Factorial(5) 时,函数会按照递归逻辑逐步计算,最终返回 5 的阶乘结果。
八. 题目
1. 选择题改编及 C# 解析
在以下给出的常量形式里,不属于字符常量的是哪一项呢?请仔细判断后选择正确答案。
A. '\t'
B. "A"
C. 'Z'
class Program
{static void Main(){// 分析每个选项// 选项A '\t' 是转义字符,属于字符常量// 选项B "A" 是用双引号括起来的,这是字符串常量,不是字符常量// 选项C 'Z' 是用单引号括起来的单个字符,属于字符常量Console.WriteLine("答案选B,因为只有 \"A\" 是字符串常量,不是字符常量。");}
}
2. 递归函数求 f(n) 改编及 C# 解析
已知有这样一个数列,其递推关系为 f(n) = f(n - 1) + f(n - 2),并且初始条件为 f(0) = 2,f(1) = 3。请编写程序计算出 f(40) 的值。
class Program
{static void Main(){int n = 40;int[] f = new int[n + 1];f[0] = 2;f[1] = 3;for (int i = 2; i <= n; i++){f[i] = f[i - 1] + f[i - 2];}Console.WriteLine($"f(40) 的值为: {f[n]}");}
}
3. 正整数分解质因数改编及 C# 解析
请编写一个程序,让用户可以多次输入正整数,程序会将输入的正整数分解为质因数相乘的形式并输出。例如,当用户输入 90 时,程序应打印出 90 = 2 * 3 * 3 * 5。
using System;class Program
{static void Main(){while (true){Console.Write("请输入一个正整数(输入 0 退出): ");int num = int.Parse(Console.ReadLine());if (num == 0) break;Console.Write($"{num} = ");int divisor = 2;bool firstFactor = true;while (num > 1){if (num % divisor == 0){if (!firstFactor) Console.Write(" * ");Console.Write(divisor);num /= divisor;firstFactor = false;}else{divisor++;}}Console.WriteLine();}}
}
4. 求最大公约数和最小公倍数改编及 C# 解析
编写一个程序,让用户输入两个正整数 m 和 n,程序会计算并输出这两个数的最大公约数和最小公倍数。
using System;class Program
{static int GCD(int a, int b){while (b != 0){int temp = b;b = a % b;a = temp;}return a;}static int LCM(int a, int b){return a * b / GCD(a, b);}static void Main(){Console.Write("请输入第一个正整数 m: ");int m = int.Parse(Console.ReadLine());Console.Write("请输入第二个正整数 n: ");int n = int.Parse(Console.ReadLine());int gcd = GCD(m, n);int lcm = LCM(m, n);Console.WriteLine($"最大公约数是: {gcd}");Console.WriteLine($"最小公倍数是: {lcm}");}
}
5. 小球反弹问题改编及 C# 解析
有一个小球从 100 米的高度自由落下,每次落地后会反弹回原高度的一半,然后再落下。请编写程序计算小球在第 10 次落地时,总共经过了多少米,以及第 10 次反弹的高度是多少。
using System;class Program
{static void Main(){double height = 100;double totalDistance = 100;for (int i = 1; i < 10; i++){height /= 2;totalDistance += 2 * height;}height /= 2;Console.WriteLine($"第 10 次落地时共经过: {totalDistance} 米");Console.WriteLine($"第 10 次反弹高度: {height} 米");}
}
6. 求阶乘和改编及 C# 解析
编写一个程序,计算 1 + 2! + 3! + ... + 20! 的和。
using System;class Program
{static long Factorial(int n){long result = 1;for (int i = 2; i <= n; i++){result *= i;}return result;}static void Main(){long sum = 0;for (int i = 1; i <= 20; i++){sum += Factorial(i);}Console.WriteLine($"1 + 2! + 3! + ... + 20! 的和为: {sum}");}
}
7. 递归求阶乘改编及 C# 解析
使用递归的方法编写一个程序,计算 5 的阶乘。已知阶乘的递归公式为 f(n) = n * f(n - 1)。
using System;class Program
{static int Factorial(int n){if (n == 0 || n == 1){return 1;}return n * Factorial(n - 1);}static void Main(){int result = Factorial(5);Console.WriteLine($"5 的阶乘是: {result}");}
}
8. 定义结构体并赋值输出改编及 C# 解析
编写一个程序,定义一个名为 Student 的结构体,该结构体包含学号、姓名、性别和程序设计成绩四个字段。声明该结构体类型的变量,使用赋值语句对其进行赋值,然后将这些信息输出。
using System;struct Student
{public int StudentID;public string Name;public char Gender;public double ProgrammingScore;
}class Program
{static void Main(){Student student;student.StudentID = 101;student.Name = "张三";student.Gender = '男';student.ProgrammingScore = 85.5;Console.WriteLine($"学号: {student.StudentID}");Console.WriteLine($"姓名: {student.Name}");Console.WriteLine($"性别: {student.Gender}");Console.WriteLine($"程序设计成绩: {student.ProgrammingScore}");}
}
9. 四舍五入运算改编及 C# 解析
编写一个程序,让用户输入一个正数,程序会对该数进行四舍五入到个位数的运算,并输出结果。例如,输入 12.56 会得到 13,输入 12.46 会得到 12。
using System;class Program
{static void Main(){Console.Write("请输入一个正数: ");double num = double.Parse(Console.ReadLine());int result = (int)Math.Round(num, 0);Console.WriteLine($"四舍五入后的结果是: {result}");}
}
10. 求满足关系式的 k 的最大值改编及 C# 解析
已知关系式 1*1 + 2*2 + 3*3 + ... + k*k < 2000,编写一个程序,求出满足此关系式的 k 的最大值。
using System;class Program
{static void Main(){int k = 0;int sum = 0;while (sum < 2000){k++;sum += k * k;}Console.WriteLine($"满足关系式的 k 的最大值是: {k - 1}");}
}
11. 百钱买百鸡问题改编及 C# 解析
某人有 100 元钱,打算去买 100 只鸡。已知公鸡 5 元钱一只,母鸡 3 元钱一只,小鸡一元钱 3 只。请编写程序找出所有可能的购买方案,并将其打印出来。
using System;class Program
{static void Main(){Console.WriteLine("可能的购买方案如下:");for (int rooster = 0; rooster <= 20; rooster++){for (int hen = 0; hen <= 33; hen++){int chick = 100 - rooster - hen;if (chick % 3 == 0 && rooster * 5 + hen * 3 + chick / 3 == 100){Console.WriteLine($"公鸡: {rooster} 只, 母鸡: {hen} 只, 小鸡: {chick} 只");}}}}
}
九.结语
C# 函数在编程中占据着不可或缺的重要地位。从基础的定义和调用,到参数的灵活运用、函数重载以及委托等高级特性,再到 Lambda 表达式和递归函数等进阶知识,每一个环节都蕴含着强大的功能和无限的可能性。希望通过本文的详细讲解,能够帮助大家对 C# 函数有更深入、更全面的理解和掌握,从而在编程实践中能够灵活运用这些知识,编写出更加高效、更具扩展性的优质代码。无论是开发小型应用程序,还是构建大型复杂系统,对 C# 函数的精通都将成为开发者的得力武器。
相关文章:
C#初级教程(6)——函数:从基础到实践
一、函数的核心价值:简化与复用代码 以游戏开发项目为例,在游戏中,角色的移动、攻击等行为并非只在单一场景中出现。设想一下,若每次需要角色执行这些行为时,都要重新编写对应的代码,那将是何等繁琐且易错的…...
【Bluedroid】AVRCP 连接源码分析(一)
一、AVRCP协议简介 AVRCP(Audio/Video Remote Control Profile)是蓝牙协议栈中的一个重要部分,它定义了蓝牙设备之间的音视频传输控制的流程和特点。AVRCP使得用户可以通过一个蓝牙设备(如手机)远程控制另一个蓝牙设备(如蓝牙耳机或音箱)上的音视频播放,如播放、暂停、…...
编程考古-忘掉它,Delphi 8 for the Microsoft .NET Framework
忘掉它吧,作一篇记录! 【圣何塞,加利福尼亚 – 2003年11月3日】在今日的Borland开发者大会上,Borland正式推出了Delphi 8 for Microsoft .NET Framework。这款新版本旨在为Delphi开发者提供一个无缝迁移路径,将现有的…...
Linux-Ansible基础模块
文章目录 模块Command模块Shell模块Script模块 🏡作者主页:点击! 🤖Linux专栏:点击! ⏰️创作时间:2025年02月22日19点21分 模块 Command模块 Command模块实践 ansible 192.168.1.100 -m com…...
正则表达式–断言
原文地址:正则表达式–断言 – 无敌牛 欢迎参观我的个人博客:正则表达式特殊字符 – 无敌牛 断言assertions 1、(?...):正向预查(positive lookahead),表示某个字符串后面应该跟着什么。但这个字符串本身…...
Swiper插件的运用和学习
Swiper中文网-轮播图幻灯片js插件,H5页面前端开发 Swiper 是目前最流行的免费开源轮播组件之一,它功能强大、高度可定制且兼容性好,支持移动端手势操作和丰富的交互动画。 下载Swiper压缩包 轮播图演示页面。可以看见各种不同切换效果的轮播图 然后解压…...
标准I/O与文件I/O
一、概念 标准IO:标准IO是指程序与标准输入(stdin)、标准输出(stdout)和标准错误(stderr)之间的输入输出操作。通常用于与用户交互或输出调试信息。文件IO:文件IO是指程序与文件系统…...
JavaScript函数-函数的参数
在JavaScript编程语言中,函数是组织代码和实现复杂逻辑的基本单元。而函数参数则是这些功能的重要组成部分,它们允许我们将数据传递给函数,从而使得函数更加通用和灵活。本文将深入探讨JavaScript函数参数的各种特性及其最佳实践。 参数基础…...
Android TabLayout 实现随意控制item之间的间距
效果 红色标注是不同的间距。 实现方式 1、xml中定义 <com.google.android.material.tabs.TabLayoutandroid:id"id/tab_layout"android:layout_width"wrap_content"app:tabIndicatorColor"color/color_FF00B2E3"app:tabBackground"a…...
STM32的“Unique device ID“能否修改?
STM32F1系列的"Unique device ID"寄存器的地址为0x1FFFF7E8。 这个寄存器是只读的。 "Unique device ID"寄存器位于“System memory”中。“System memory”地址范围为“0x1FFF F000- 0x1FFF F7FF”。 所有STM32 MCU上都存在系统引导加载程序。顾名思义&a…...
STM32-温湿度上传OneNET项目
一、项目需求 使用 ESP8266 连接 OneNET 云平台,并通过 MQTT 协议上传 DHT11 获取的温湿度值。 二、项目框图 三、DHT11工作原理 参考于良许嵌入式手把手教你玩转DHT11(原理驱动) | 良许嵌入式 3.1 正常工作验证 # 上电后ÿ…...
前端面试-JavaScript 数据类型详解
目录 一、数据类型分类 二、核心区别对比 1. 存储方式 2. 比较方式 3. 类型检测方法 三、特殊类型详解 1. Symbol 2. BigInt 3. null vs undefined 四、常见面试扩展问题 五、总结 一、数据类型分类 JavaScript 数据类型分为 基本数据类型(原始类型&…...
【进程 】
【进程】 目录1. ELF格式程序与进程2. 进程的组织方式3. 进程的复刻(fork)4. 进程的状态 目录 1. ELF格式程序与进程 在Linux系统里,程序文件普遍采用ELF(Executable and Linkable Format)格式。这种格式的程序文件存…...
深入HBase——数据结构与算法
引入 通过前面的文章,我们对HBase已经有了基本认识,下面我们从HBase最核心的算法和数据结构进一步深入HBase。 HBase的一个列簇(Column Family)本质上就是一棵LSM树(Log-Structured Merge-Tree)。LSM树…...
Python爬虫实战:获取六图网漫画图
注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 一、引言 Python 作为一种广泛应用于数据处理和网络爬虫领域的编程语言,拥有丰富的库和框架。其中,Scrapy 框架以其高效、灵活、可扩展等特点,成为构建爬虫程序的…...
HAProxy介绍与编译安装
目录 1、HAProxy介绍 2、HAProxy编译安装 Centos 基础环境 Ubuntu 基础环境 编译安装HAProxy 验证HAProxy版本 HAProxy启动脚本 配置文件 启动haproxy 验证haproxy状态 查看haproxy的状态页面 1、HAProxy介绍 HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年…...
全链路优化:如何让单点登录认证接口并发性能翻倍?
背景 最近针对一个单点登录认证项目进行性能优化,在 8核 16G 环境下的认证并发能力从每秒800次提升至每秒1600次,性能提升一倍,整理此次优化过程中的相关性能优化操作总结和大家分享一下。 Nginx配置优化 在并发认证场景下,Ngi…...
在Spring Boot中如何使用Freemaker模板引擎
在 Spring Boot 中使用 FreeMarker 模板引擎可以帮助你创建动态的 Web 页面。以下是详细的步骤和示例代码,介绍如何在 Spring Boot 项目里集成和使用 FreeMarker。 1. 添加依赖 如果你使用的是 Maven 项目,需要在 pom.xml 文件中添加 FreeMarker 相关依赖。Spring Boot 提供…...
Elasticsearch7.1.1 配置密码和SSL证书
生成SSL证书 ./elasticsearch-certutil ca -out config/certs/elastic-certificates.p12 -pass 我这里没有设置ssl证书密码,如果需要设置密码,需要再配置给elasticsearch 在之前的步骤中,如果我们对elastic-certificates.p12 文件配置了密码…...
个人简历html网页模板,科技感炫酷html简历模板
炫酷动效登录页 引言 在网页设计中,按钮是用户交互的重要元素之一。这样一款黑色个人简历html网页模板,科技感炫酷html简历模板,设计效果类似科技看板图,可帮您展示技能、任职经历、作品等,喜欢这种风格的小伙伴不要犹豫哦。该素材呈现了数据符号排版显示出人形的动画效…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
