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简历模板,设计效果类似科技看板图,可帮您展示技能、任职经历、作品等,喜欢这种风格的小伙伴不要犹豫哦。该素材呈现了数据符号排版显示出人形的动画效…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...
爬虫基础学习day2
# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
Java并发编程实战 Day 11:并发设计模式
【Java并发编程实战 Day 11】并发设计模式 开篇 这是"Java并发编程实战"系列的第11天,今天我们聚焦于并发设计模式。并发设计模式是解决多线程环境下常见问题的经典解决方案,它们不仅提供了优雅的设计思路,还能显著提升系统的性能…...

leetcode_69.x的平方根
题目如下 : 看到题 ,我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历,我们是整数的平方根,所以我们分两…...