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

函数的介绍

1.函数的概念

在C语言中也有函数的概念,有些翻译为:子程序,这种翻译更为准确。C语言的函数就是一个完成某项特定的任务的一小段代码。这段代码是有特殊的写法和调用方法的。

C语言的程序其实是有无数个小的函数组合而成的,也可以说:一个大的计算任务可以分解成若干个较小的的函数完成。同时一个函数如果能完成某项特定任务的话,这个函数也是可以复用的,提升了开发软件的效率。

在C语言中一般会见到的两类函数:

  • 库函数
  • 自定义函数

2.库函数

2.1标准库和头文件

C语言标准库中规定了C语言的各种语法规则,C语言并不提供库函数,C语言的国际标准ANSI C规定了一些常用的函数的标准,被称为标准库,那不同的编译器厂商根据ANSI提供的C语言标准就给出了一系列函数的实现。这些函数被称为库函数。

前面内容中学到的 printf 和 scanf 都是库函数,库函数也是函数,不过这些函数已经是现成的,我们只要学会就能直接使用了。有了库函数,一些常见的功能就不需要我们自己写了,在一定程度上提升了效率;同时库函数的质量和执行效率上都更有保证。

各种编译器的标准库中提供了一系列的库函数,这些库函数根据功能划分,都在不同的头文件中进行了声明。

2.2库函数的使用方法

2.2.1头文件的包含

库函数是在标准库中对应的头文件中声明的,所以库函数的使用,应该包含对应的头文件,不包含是可能会出现一些问题。

#include<stdio.h>
#include<math.h>
int main()
{double ret = sqrt(16.0);printf("%lf\n", ret);return 0;
}

 输出结果:

3.自定义函数

了解了库函数,其实自定义函数更加重要。

3.1函数的语法形式

自定义函数和跨函数是一样的,形式如下:

type name(形式参数)

{

}

  • type   是函数返回类型
  • name 是函数名
  • 括号中是放形式参数
  • { }括起来的是函数体

type 是用来表示函数计算结果的类型,有时候返回的类型可以是 void ,表示什么都不返回

name 是为了方便使用函数,就像人一样,有了名字方便称呼,而函数有了名字方便调用,所以函数名尽量根据函数的功能起的有意义。

函数的参数也可以是 viod ,明确表示函数没有参数。如果没有参数,要交代清楚参数的类型和名字,以及参数的个数。

3.2函数的例子

写一个加法函数,完成2个整型变量的加法操作。

int Add(int x, int y)
{return x + y;
}int main()
{int a = 0;int b = 0;scanf("%d %d", &a, &b);int ret=Add(a, b);printf("%d\n", ret);return 0;
}

我们给函数取名为:Add ,函数 Add 需要接收2个整型类型的参数,函数计算的结果也是整型。 

4.形参和实参

在函数使用过程中,把函数的参数分为:实参和形参

4.1实参

在上面的代码中,main 函数中的 a,b称为实际参数,简称实参。实际参数就是真实传递给函数的参数。

4.2形参

在上面代码中,函数名 Add 后括号中的 x 和 y ,称为形式参数,简称形参

为什么是形式参数呢?实际上,如果只是定义了 Add 函数,而不去调用的话,Add 函数的参数 x 和 y 只是形式上存在,不会向内存申请空间,不会真实存在,所以叫做形式参数。形式参数只有在函数被调用的过程中为了存放实参传递过来的值,才会向内存申请空间,这个过程就是形参的实例化。

4.3实参和形参的关系

虽然我们提到了实参是传递给形参的,他们之间是有联系的,但是形参和实参各自是独立的内存空间。

在上面的调试中可以看见虽然 x 和 a 的值相等,但是可以发现两个的地址不一样,同样 y 和 b 也是值一样,地址不一样。所以我们可以理解为形参是实参的一份临时拷贝。

5.return语句

在函数的设计中,函数中经常会出现 return 语句,return 语句的注意事项:

  1. return后边可以是一个数值,也可以是一个表达式,如果是表达式则先执行表达式,再返回表达式的结果。
  2. return后边也可以什么都没有,直接写 return ;这种写法适合函数返回类型是void的情况。
  3. return返回的值和函数返回类型不一致,系统会自动将返回类型的值转换为函数的返回类型。
  4. return 语句执行后,函数就彻底返回,后边的代码不再执行。
  5. 如果函数里面存在 if 等分支语句,则要保证每种情况下都有 return 返回,否则会出现编译错误。 

6.数组做函数参数

在使用函数解决问题时,可能会将数组作为参数传递给函数,在函数内部对数组进行操作。

例如:写一个函数将一个整型数组内容全部置为 -1:

void set_arr(int arr2[],int sz2)
{int i = 0;for (i = 0; i < sz2; i++){arr2[i] = -1;}
}
void print_arr(int arr[], int sz) {int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}printf("\n");
}int main()
{int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };int sz1 = sizeof(arr1) / sizeof(arr1[0]);//打印数组的所有内容print_arr(arr1,sz1);//将数组里面的元素全部设置为-1set_arr(arr1,sz1);print_arr(arr1, sz1);return 0;
}

7.嵌套调用和链式访问

7.1嵌套调用

嵌套调用就是函数之间的相互调用,正是因为函数的相互调用,最后才写出了大型的程序。

例如:实现输入的某年某月有多少天?

get_year(): 来判断是否为闰年

get_days(): 调用get_year确定是否为闰年后,再根据月份来计算这个月有多少天?

//判断是否为闰年
int get_year(int year)
{if (((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)))return 1;elsereturn 0;
}int get_days(int y, int m) {int arr[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };int day = arr[m];if (get_year(y) && m == 2)//闰年返回1{day++;}return day;
}
int main()
{int year = 0;int month = 0;scanf("%d %d", &year, &month);int d = get_days(year, month);printf("%d\n",d);return 0;
}

7.2链式访问

链式访问就是将一个函数的返回值作为另一个将函数的参数,像链条一样将函数串起来就是函数的链式访问。

int main() 
{/*size_t len = strlen("abcdef");printf("%zd\n", len);*/printf("%zd\n", strlen("abcdef"));return 0;
}

可以从上面的代码中看见,将注释了的两行代码转换为一条语句,这里就构成了函数的链式访问。 

int main()
{printf("%d", printf("%d", printf("%d", 43)));
//  打印1      打印2返回1(1个字符)  打印43,返回2(2个字符)
//输出结果为 4321printf("%d ", printf("%d ", printf("%d ", 43)));
//中间加了空格则输出结果为:43 3 2(空格也算是一个字符)
}

8.函数的声明和定义

8.1单个文件

一般我们使用函式的时候,直接将函数写出来就使用了。

例如:判断一年是否为闰年的代码:

红色框里面是函数的定义,而绿色框里面是函数的调用。

这样的顺序没有什么问题,当我们将定义放在调用之后就会出现问题。

就会有这样的错误:

这是因为C语言编译器对源代码进行编译时,从第一行往下扫描,但遇到第251行 is_leap_year调用时,在前面并没有发现 is_leap_year 函数的定义,就会报出上面的警告。

解决的方法:

  1. 将函数的定义写在函数调用的前面
  2. 在函数调用之前写上函数的声明

  • 函数的调用一定要满足:先声明后调用,有时函数的定义是需要写在后面的,这时我们就可以用函数的声明
  • 函数的定义也是一种特殊的声明,所以函数的定义放在调用之前也是可以的。

8.2多个文件

一般情况下,函数的声明和类型的声明放在头文件中,函数的实现会放在源文件中。

分模块写代码的好处:

  1. 逻辑清晰
  2. 方便写作

8.3 static 和 extern

staticextern 都是C语言的关键字。

static静态的意思,可以用来:

  • 修饰局部变量
  • 修饰全局变量
  • 修饰函数

extern 是用来声明外部符号的。

在了解 staticextern 之前先了解一下:作用域生命周期

作用域 是程序设计的概念,通常来说,一段程序代码中所用到的名字并不总是有效(可用)的,而限定这个名字的可用性的代码范围就是这个名字的作用域。

  1. 局部变量的作用域时变量所在的局部范围。
  2. 全局变量的作用域是整个项目。

生命周期 指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的一个时间段。

  1. 局部变量的生命周期是:进入作用域变量的船舰,生命周期开始,出作用域生命周期结束。
  2. 全局变量的生命周期是:整个程序的生命周期。

8.3.1 static 修饰局部变量:

int test()
{int i = 0;i++;printf("%d ", i);
}int main()
{int i = 0;for (i = 0; i < 5; i++) {test();}return 0;
}
int test()
{static int i = 0;i++;printf("%d ", i);
}int main()
{int i = 0;for (i = 0; i < 5; i++){test();}return 0;
}

将上面的两组代码进行对比的话就可以更好的体现出 static 修饰局部变量的作用。

代码1中的test函数中的i属于局部变量,当主函数调用 test 函数时,局部变量i开始创建,生命周期开始,之后++,再打印,出函数时变量的生命周期结束,释放内存。

代码2中其实运行一下结果就可以发现具有累加的作用,其实主函数调用test函数时变量创建,出函数时也不会被销毁,重新进入函数也不会再次创建变量,直接上次累积的值上面进行计算。

结论:

static 修饰局部变量改变了变量的生命周期,生命周期改变的本质是改变了变量的存储类型,本来一个局部变量是存储在内存的栈区的,当被 static 修饰后就存储到了静态区。存储到静态区的变量和全局变量一样,生命周期就和程序的生命周期一样了,只有程序结束,变量才会销毁,内存才回收,但是作用域不变。

内存:

建议:如果一个变量出了函数之后,我们还想保留值等下次进入函数继续使用,就可以使用static来修饰。

8.3.2 static 修饰全局变量

当我们这样写时输出结果为:2018;而当我们在全局变量的前面加上 static'时,此时的结果又是怎样的呢?

此时就会出现(链接型错误)报错,这是因为:extern 是用来声明外部符号的,如果一个全局的符号在X文件中定义的,在Y文件中想使用的,就可以使用 extern 来进行声明后再使用。

结论:

一个全局变量被static修饰,使得这个全局变量只能在本源的文件中使用,其他文件不能使用。

本质原因是全局变量默认是具有外部链接属性的,在外部文件中想使用,只要适当的声明就可以使用,但是全局变量被static修饰后,外部连接属性就变成里的内部链接属性,只能在自己所在的文件中使用,其他文件就算是进行了声明也无法正常使用。

建议:

如果一个全局变量只想在所在的文件中使用,不想被其他文件使用是,就可以使用static来修饰全局变量。

8.3.3 static 修饰函数

我们可以发现:其实static修饰函数static修饰全局变量是一模一样的,一个函数在整个工程都可以被使用,但是当被 static 修饰时,只能在本文件中使用,其他文件无法使用。

建议:

一个函数只想在本文件中被使用,不想被其他文件使用,就可以用 static 来修饰。

相关文章:

函数的介绍

1.函数的概念 在C语言中也有函数的概念&#xff0c;有些翻译为&#xff1a;子程序&#xff0c;这种翻译更为准确。C语言的函数就是一个完成某项特定的任务的一小段代码。这段代码是有特殊的写法和调用方法的。 C语言的程序其实是有无数个小的函数组合而成的&#xff0c;也可以…...

4.3--入门知识扫盲,IPv4的头部报文解析,数据报分片,地址分类(包你看一遍全部记住)

IPv4协议&#xff1a;网络世界的快递包裹指南&#xff08;附拆箱说明书&#xff09; “IPv4就像一张明信片&#xff0c;既要写清楚地址&#xff0c;又要控制大小别超重” —— 某网络工程师的桌面铭牌 一、IPv4报头&#xff1a;快递面单的终极艺术 1.1 报头结构图&#xff08;…...

Linux生成自签名证书

一、安装OpenSSL 首先确保机器已安装OpenSSL工具OpenSSL的安装可参考&#xff1a;源码编译OpenSSL 二、生成私钥​​​​​​ openssl genpkey -algorithm RSA -out server.key 三、创建证书签署请求(CSR) openssl req -new -key server.key -out server.csr 四、生成自签…...

烽火HG680-KA_海思HI3798MV310_安卓9.0_U盘强刷固件包及注意点说明

之前发布过这个固件包&#xff0c;关于烽火HG680-KA&#xff0f;HG680-KB_海思HI3798MV310_安卓9.0_U盘强刷固件包详细说明一下&#xff0c;汇总总结一些常遇到的情况&#xff0c;这次固件会分开发布&#xff0c;以免混淆。 上一个帖子地址&#xff1a;https://blog.csdn.net/…...

Vue3 核心特性解析:Suspense 与 Teleport 原理深度剖析

Vue3 核心特性解析&#xff1a;Suspense 与 Teleport 原理深度剖析 一、Teleport&#xff1a;突破组件层级的时空传送 1.1 实现原理图解 #mermaid-svg-75dTmiektg1XNS13 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-s…...

Linux Vim 寄存器 | 从基础分类到高级应用

注&#xff1a;本文为 “vim 寄存器” 相关文章合辑。 英文引文&#xff0c;机翻未校。 中文引文&#xff0c;略作重排。 未整理去重&#xff0c;如有内容异常&#xff0c;请看原文。 Registers 寄存器 Learning Vim registers is like learning algebra for the first ti…...

为什么TCP需要三次握手?一次不行吗?

文章目录 1. 三次握手的过程2. 为什么需要三次握手&#xff1f;3. 握手过程中每一步的具体作用4. 简单比喻5. 为什么是三次握手&#xff0c;而不是两次或四次&#xff1f;6. 三次握手中的序列号有什么作用&#xff1f;7. 总结 1. 三次握手的过程 三次握手是建立 TCP 连接的过程…...

OpenGL ES 入门指南:从基础到实战

引言&#xff1a;为什么需要 OpenGL ES&#xff1f; 在当今的嵌入式设备&#xff08;如智能手机、汽车仪表盘、智能家居中控屏&#xff09;中&#xff0c;流畅的图形渲染能力是用户体验的核心。OpenGL ES&#xff08;OpenGL for Embedded Systems&#xff09; 作为行业标准&am…...

台达PLC转太网转换的教程案例(台达DVP系列)

产品介绍 台达DVP-PLC自投身工业自动化市场以来&#xff0c;始终致力于创新发展&#xff0c;不断推陈出新。其产品紧密贴合市场需求与行业工艺&#xff0c;凭借卓越性能与丰富功能&#xff0c;深受用户青睐。不仅推出了高效的程序与编辑工具&#xff0c;显著提升了主机执行速度…...

Ubuntu24.10编译Android12源码并运行于模拟器中

效果如下&#xff1a; 初始化环境&#xff1a; 运行lunch弹出对应目标 生成模拟器版本镜像 镜像生成成功 生成模拟器启动镜像 编译注意事项: 24.10版本&#xff1a; sudo apt install curl curl -sSL https://gerrit-googlesource.proxy.ustclug.org/git-repo//master/r…...

Java面试易忽略知识点

1. CompletableFuture中thenApply()与thenCompose()的区别 考察点&#xff1a;组合式异步编程 解析&#xff1a; ​**thenApply()**&#xff1a;接收前序任务结果&#xff0c;返回普通对象&#xff08;同步转换&#xff09;&#xff0c;适用简单数据处理。​**thenCompose()*…...

C#通过SignalR直接返回流式响应内容

1、背景 实现流式响应基本上分为两大技术方案&#xff1a;&#xff08;1&#xff09;基于HTTP的Stream处理&#xff1b;&#xff08;2&#xff09;基于socket的连接。前者的实现方式有&#xff1a;《C#通过API接口返回流式响应内容—SSE方式》和《C#通过API接口返回流式响应内…...

【排序算法对比】快速排序、归并排序、堆排序

排序算法对比&#xff1a;快速排序、归并排序、堆排序 1. 快速排序&#xff08;Quick Sort&#xff09; 原理 快速排序采用 分治法&#xff08;Divide and Conquer&#xff09;&#xff0c;通过选取基准值&#xff08;pivot&#xff09;&#xff0c;将数组划分为 小于基准值…...

YOLO11改进-模块-引入空间带状注意力机制(Spatial Strip Attention,SSA)增强模型对空间信息处理能力的重要模块

在图像相关任务中&#xff0c;传统卷积神经网络&#xff08;CNN&#xff09;在处理空间信息时&#xff0c;卷积核的感受野有限&#xff0c;难以有效捕捉长距离的空间依赖关系。而自注意力机制虽然能建模长距离依赖&#xff0c;但计算复杂度较高。为了在高效计算的同时更好地捕捉…...

C++内存分配方式

文章目录 1、静态内存分配2、栈内存分配3、堆内存分配4、内存池分配5、placement new语法工作原理示例 placement new应用场景 在C 中&#xff0c;内存分配主要有以下几种方式&#xff1a; 1、静态内存分配 特点&#xff1a;在编译时就确定了内存的分配和释放&#xff0c;内存…...

【经验】Orin系列Ubuntu远程桌面:VNC、NoMachine、URDC

1、VNC 1.1 Ubuntu端 1)安装VNC服务器 sudo apt install tigervnc-standalone-server2)安装xfce4 桌面 xfce4 用资源较GNOME ,KDE较少。适合老机器,轻量级桌面。与windows界面环境类似。 sudo apt install xfce4 xfce4-goodies也可以使用其它的桌面系统,可以使用如下命…...

【RabbitMQ】RabbitMQ消息的重复消费问题如何解决?

可以从消息队列和消费者两方面入手&#xff0c;确保消息处理的幂等性和可靠性。 1.消息重复消费的原因 1.1消息队列的机制 消息确认失败&#xff1a; 消费者处理完消息后&#xff0c;未正确发送确认(ACK)给RabbitMQ&#xff0c;导致消息被重新投递。消息重试机制&#xff1a…...

Python、MATLAB和PPT完成数学建模竞赛中的地图绘制

参加数学建模比赛时&#xff0c;很多题目——诸如统计类、数据挖掘类、环保类、建议类的题目总会涉及到地理相关的情景&#xff0c;往往要求我们制作与地图相关的可视化内容。如下图&#xff0c;这是21年亚太赛的那道塞罕坝的题目&#xff0c;期间涉及到温度、降水和森林覆盖率…...

Git 分支删除操作指南(含本地与远程)

&#x1f680; Git 分支删除操作指南&#xff08;含本地与远程&#xff09; 在多人协作的开发过程中&#xff0c;定期清理已合并的临时分支&#xff08;如 feature/*、bugfix/*、hotfix/* 等&#xff09;可以保持仓库整洁&#xff0c;避免混乱。 &#x1f4cc; 分支命名规范回…...

视频推拉流EasyDSS点播平台云端录像播放异常的问题排查与解决

视频推拉流EasyDSS视频直播点播平台可提供一站式的视频转码、点播、直播、视频推拉流、播放H.265视频等服务&#xff0c;搭配RTMP高清摄像头使用&#xff0c;可将无人机设备的实时流推送到平台上&#xff0c;实现无人机视频推流直播、巡检等应用。 有用户反馈&#xff0c;项目现…...

v-model+computed实现父子组件数据传递和同步

v-modelcomputed实现父子组件数据传递和同步 1. 父组件2. 子组件说明总结 1. 父组件 <template><div><span>父子组件传值&#xff1a;{{countRef}}<my-counter v-modelcount></my-counter></span></div> </template> <scr…...

一键秒连WiFi智能设备,uni-app全栈式物联开发指南。

如何使用 uni-app 框架实现通过 WiFi 连接设备并进行命令交互的硬件开发。为了方便理解和实践&#xff0c;我们将提供相应的源代码示例&#xff0c;帮助开发者快速上手。 1. 硬件准备 在开始之前&#xff0c;请确保你已经准备好以下硬件设备&#xff1a; 支持 WiFi 连接的设备…...

关于Docker是否被淘汰虚拟机实现连接虚拟专用网络Ubuntu 22.04 LTS部署Harbor仓库全流程

1.今天的第一个主题&#xff1a; 第一个主题是关于Docker是否真的被K8S弃用&#xff0c;还是可以继续兼容&#xff0c;因为我们知道在去年的时候&#xff0c;由于不可控的原因&#xff0c;docker的所有国内镜像源都被Ban了&#xff0c;再加上K8S自从V1.20之后&#xff0c;宣布…...

【C++】动态规划从入门到精通

一、动态规划基础概念详解 什么是动态规划 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是一种通过将复杂问题分解为重叠子问题&#xff0c;并存储子问题解以避免重复计算的优化算法。它适用于具有以下两个关键性质的问题&#xff1a; 最优子结构&…...

【专栏预告】《VR 360°全景视频开发:从GoPro到Unity VR眼镜应用实战》

【专栏预告】每周天12:00更新&#xff0c;欢迎指导与交流。 专栏地址&#xff1a;《VR 360全景视频开发&#xff1a;从GoPro到Unity VR眼镜应用实战》 前言 随着VR技术的不断发展&#xff0c;360全景视频的需求也在逐年增长。尤其是在VR眼镜端&#xff0c;360全景视频带来了…...

【leetcode100】搜索插入位置

1、题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2…...

Java面试黄金宝典3

1. 什么是 NIO 原理 缓冲区&#xff08;Buffer&#xff09;&#xff1a; 它是一个线性的、有限的基本数据元素序列&#xff0c;本质上是一块内存区域&#xff0c;被包装成了一个对象&#xff0c;以便于进行高效的数据读写操作。不同类型的基本数据都有对应的Buffer子类&#xf…...

vue3 报错 Could not find a declaration file for module ‘/App.vue‘

vue3 报错 Could not find a declaration file for module /App.vue.app.vue路径.js implicitly has an any type 问题描述原因分析&#xff1a;解决方案&#xff1a; 问题描述 Could not find a declaration file for module /App.vue.app.vue路径.js implicitly has an any …...

linux对串口设备文件进行重命名(删除、重建)

0.前言 最近在弄3562的自制板&#xff0c;有很多串口&#xff0c;然后发现设备文件名编号有些跳跃&#xff0c;不方便用户使用&#xff0c;因此&#xff0c;需要对这些设备文件进行重命名 1.查看设备号 我们需要知道目标设备文件的设备号&#xff0c;通过ls -l /dev/tty*查看…...

Linux内核传输层UDP源码分析

一、用户数据包协议&#xff08;UDP&#xff09; 1.UDP数据报头 UDP 提供面向消息的不可靠传输&#xff0c;但没有拥塞控制功能。很多协议都使用 UDP&#xff0c;如用于 IP 网络传输音频和视频的实时传输协议 (Real-time Transport Protocol&#xff0c;RTP)&#xff0c;此类型…...

GitHub 超火的开源终端工具——Warp

Warp 作为近年来 GitHub 上备受瞩目的开源终端工具&#xff0c;以其智能化、高性能和协作能力重新定义了命令行操作体验。以下从多个维度深入解析其核心特性、技术架构、用户评价及生态影响力&#xff1a; 一、背景与核心团队 Warp 由前 GitHub CTO Jason Warner 和 Google 前…...

【Java基础巩固系列】异常

业务背景 业务开发中&#xff0c;总会遇到代码出现异常的情况&#xff0c;不合理的异常处理或不处理异常除了影响业务功能和中断业务功能外&#xff0c;还会增加排查问题的难度。所以我们要学会正确的使用异常处理。合理的异常处理能减少很多潜在的问题&#xff0c;是提高代码…...

sass介绍

1、Sass简介 Sass 是一种 CSS 的预编译语言。它提供了 变量&#xff08;variables&#xff09;、嵌套&#xff08;nested rules&#xff09;、 混合&#xff08;mixins&#xff09;、 函数&#xff08;functions&#xff09;等功能&#xff0c;并且完全兼容 CSS 语法。Sass 能…...

第1章:云原生时代:容器技术的发展历程与核心价值

第1章:云原生时代:容器技术的发展历程与核心价值 作者:DogDog_Shuai 阅读时间:约15分钟 难度:入门级 目录 1. 引言2. 容器技术的发展历程3. 容器技术的核心价值4. 云原生时代的机遇与挑战5. 总结1. 引言...

软考程序员考试知识点汇总

软考程序员考试&#xff08;初级资格&#xff09;主要考察计算机基础理论、编程能力及软件开发相关知识。以下是核心知识点总结及备考建议&#xff1a; 一、计算机基础 数制与编码 二进制、八进制、十进制、十六进制转换原码、反码、补码表示&#xff08;整数与浮点数&#xf…...

JVM OOM问题如何排查和解决

在 Java 开发中&#xff0c;JVM OOM&#xff08;OutOfMemoryError&#xff09;问题通常是指程序运行时&#xff0c;JVM 无法为对象分配足够的内存空间&#xff0c;导致发生内存溢出的错误。这个问题往往和内存的配置、内存泄漏、或者资源过度使用等因素有关。 1. OOM 错误类型…...

折叠树报表

折叠树报表中包含了三种信息: 1.树组织信息-可展开、收拢 2.节点的统计信息(汇总求和) 3.每个节点对应的数据信息 一、准备数据 mysql8 数据库中存在两张表 org和store表。 org表和部分数据如下,其中orgname是组织的名称,codepath是完整的组织代码,seq是每个节点的顺序,可…...

python 数据可视化matplotib库安装与使用

要使用 matplotlib 库进行数据可视化&#xff0c;首先你需要确保已经安装了该库。如果你还没有安装&#xff0c;可以通过 Python 的包管理器 pip 来安装它。在你的命令行工具中运行以下命令来安装 matplotlib&#xff1a; pip install matplotlib安装完成后&#xff0c;你就可以…...

Springdoc配置参数详解

文章目录 **1. 基础配置****API 文档路径-springdoc.api-docs.path****Swagger UI 路径-springdoc.swagger-ui.path****是否启用 API 文档-springdoc.api-docs.enabled****是否启用 Swagger UI-springdoc.swagger-ui.enabled** **2. 全局元信息-info****应用标题-springdoc.inf…...

抖音视频数据获取实战:从API调用到热门内容挖掘

在短视频流量为王的时代&#xff0c;掌握抖音热门视频数据已成为内容运营、竞品分析及营销决策的关键。本文将手把手教你通过抖音开放平台API获取视频详情数据&#xff0c;并提供完整的代码实现及商业化应用思路。 一、抖音API权限申请与核心接口 抖音API需企业资质认证&…...

【数学建模】灰色关联分析模型详解与应用

灰色关联分析模型详解与应用 文章目录 灰色关联分析模型详解与应用引言灰色系统理论简介灰色关联分析基本原理灰色关联分析计算步骤1. 确定分析序列2. 数据无量纲化处理3. 计算关联系数4. 计算关联度 灰色关联分析应用实例实例&#xff1a;某企业生产效率影响因素分析 灰色关联…...

Spring Boot 与 Couchbase 整合教程

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot 与 Couchbase 整合教程 环境要求 JDK 8Spring Boot 2.7.xCouchbase Server 7.xMaven/Gradle 步骤 1&#xff1a;创建Spring Boot项目 使用 st…...

Oracle ASM Failgroup故障组

Oracle ASM Failgroup故障组 1. 故障组的核心作用2. 故障组的配置规则3. 故障组的设计最佳实践4. 故障组的实际示例场景1&#xff1a;普通冗余&#xff08;2个故障组&#xff09;场景2&#xff1a;高冗余&#xff08;3个故障组&#xff0c;跨数据中心&#xff09; 关键注意事项…...

深度学习框架PyTorch——从入门到精通(2)张量

又名&#xff1a;张亮的一生~~ 张量&#xff08;Tensors&#xff09;初始化张量张量的属性张量上的操作与NumPy桥接 张量&#xff08;Tensors&#xff09; 张量是一种专门的数据结构&#xff0c;类似Python中的数组或者矩阵。在Torch中&#xff0c;我们使用张量来编码模型的输…...

pytorch小记(十三):pytorch中`nn.ModuleList` 详解

pytorch小记&#xff08;十三&#xff09;&#xff1a;pytorch中nn.ModuleList 详解 PyTorch 中的 nn.ModuleList 详解1. 什么是 nn.ModuleList&#xff1f;2. 为什么不直接使用普通的 Python 列表&#xff1f;3. nn.ModuleList 的基本用法示例&#xff1a;构建一个包含两层全连…...

C语言-动态内存管理

1.为什么要有动态内存分配 我们现如今已经掌握的内存开辟方式有 int main() {int a 0;int arr[30] { 0 };return 0; } 这两种方式&#xff0c;但是这种开辟空间的方式有两个特点&#xff1a; 1.空间开辟大小是固定的 2.数组在申明的时候&#xff0c;必须指定数组的长度&…...

深入解析MySQL数据库分库分表技术

友情提示&#xff1a;本文内容由银河易创&#xff08;https://ai.eaigx.com&#xff09;AI创作平台gpt-4-turbo模型生成&#xff0c;仅供参考。 随着互联网应用的快速发展&#xff0c;单一数据库在面对大规模数据时可能会遇到性能瓶颈。因此&#xff0c;数据库分库分表作为一种…...

【Embedded World 2025:边缘 AI、存储革新与 1X nm 工艺重塑嵌入式未来】

Embedded World 2025于3月11-13日在德国纽伦堡举办&#xff0c;作为全球嵌入式系统领域顶级盛会&#xff0c;汇聚超千家展商与3万专业观众&#xff0c;聚焦嵌入式智能、安全管理及行业解决方案。展会呈现边缘AI、低功耗MCU、5G RedCap、新型存储及车规级技术等前沿方向&#xf…...

【人工智能基础2】机器学习、深度学习总结

文章目录 一、人工智能关键技术二、机器学习基础1. 监督、无监督、半监督学习2. 损失函数&#xff1a;四种损失函数3. 泛化与交叉验证4. 过拟合与欠拟合5. 正则化6. 支持向量机 三、深度学习基础&#xff1a;深度神经网络1、概念与原理2、多层神经网络训练方法 一、人工智能关键…...

MySQL如何存储表情符号?

存储表情符号 默认mysql的字符集是utf8&#xff0c;排序规则为 utf8_general_ci INSERT INTO department (name) VALUES (&#x1f604;)在存储表情的时候会报 1366 - Incorrect string value: \xF0\x9F\x98\x84 for column name at row 1, Time: 0.007000s 这时需要修改字符…...