linux与c语言基础知识(未全部完成)

文章很多处理论,没办法写出来,(linux的一些理论问题,我有时间后,会逐个解决)

文章大多数的理论来字这个链接,

C语言快速入门-C语言基础知识-CSDN博客

一. linux(Ubuntu)

1. 基础命令(未完成,稍后补)

1.1. vim

vim是一个文本编辑器,挺强的

1.1.1 安装vim

(1)检查是否已安装 Vim

vim --version
  • 如果显示版本信息,说明已安装。

  • 如果提示未安装,继续下一步。

(2)安装完整版 Vim

sudo apt update && sudo apt install vim
  • Ubuntu 默认可能安装的是 vim-tiny(精简版),建议替换为完整版。

1.1.2 Vim 的基本使用

Vim 是一个模态编辑器,分为 普通模式(Normal Mode)插入模式(Insert Mode) 和 命令行模式(Command-Line Mode)。 


1.1.3 基本操作流程

1. 启动 Vim(打开/新建文件:)

vim 文件名  # 打开文件(若文件不存在则新建)

 2.进入插入模式

  • 按下 i:在光标前进入插入模式。

  • 按下 a:在光标后进入插入模式。

  • 按下 o:在下一行插入新行并进入插入模式。

3.推出插入模式

  • 按下 Esc 键返回普通模式。

4.保存与退出

  • :w:保存文件。

  • :q:退出 Vim。

  • :wq 或 :x:保存并退出。

  • :q!:强制退出(不保存修改)。

1.2 gdb工具

1.2.1 如何调试
1.2.2 设置断点(p,n,continue)

1.3 vsc中的调试

二. c语言基础知识

1 基础语法

-g:          使用该参数编译可以执行文件,得到调试表。
gdb ./a.out
list:         list 1 列出源码。根据源码指定 行号设置断点。
b:            b 20 在 20 行位置设置断点。
run/r:         运行程序
n/next:      下一条指令(会越过函数)
s/step:      下一条指令(会进入函数)
p/print:    p i 查看变量的值。
continue:继续执行断点后续指令。
finish:      结束当前函数调用。
quit:        退出 gdb 当前调试。

2 二进制(符号位)(结合数据类型的范围来讲)(从Linux来讲)

1.源码

2.反码

3.补码

负整数存的是补码

3 数据类型

1.数据类型

char           //字符数据类型

short          //短整型

int              //整形

long           //长整型

long long   //更长的整形

float           //单精度浮点数

double       //双精度浮点数

C语言中没有String字符串类型吗????

c语言中string用char的数组形式来表示。下方代码有举例。

#include <stdio.h>int main() {char a = 'a'; // 字符型变量 achar a1[] = {'h', 'e', 'l', 'l', 'o', '\0'}; // 字符型数组 a1,注意加上结束符 '\0'char str1[] = "Hello"; // 字符数组表示字符串,即java中的stringchar *str2 = "World";  // 字符指针表示字符串short b = 10; // 短整型变量 bint c = 10; // 整型变量 clong d = 10; // 长整型变量 dfloat f = 10.0f; // 单精度浮点数 fdouble g = 10.00000; // 双精度浮点数 g// 输出变量的值printf("字符 a: %c\n", a);printf("字符数组 a1: %s\n", a1);printf("%s %s\n", str1, str2); printf("Length of str1: %zu\n", strlen(str1));//输出str1的长度,即为5printf("短整型 b: %d\n", b);printf("整型 c: %d\n", c);printf("长整型 d: %ld\n", d);printf("单精度浮点数 f: %.2f\n", f);printf("双精度浮点数 g: %.5f\n", g);return 0;}

2.intger型

int              //整形

#include <stdio.h>  // 引入stdio.h头文件以使用printf函数
#include <limits.h> // 引入limits.h头文件以获取取数据类型的范围
int main()
{/* 数据类型*/int a = 10;                            // 整数类型 (设置变量默认类型)float b = 3.14f;                       // 浮点数类型 (设置变量默认类型)char c = 'A';                          // 字符类型 (设置变量默认类型)short d = 5;                           // 短整型 (设置变量默认类型)long e = 100000L;                      // 长整型 (设置变量默认类型)long long f = 10000000000LL;           // 长长整型 (设置变量默认类型)unsigned int g = 20;                   // 无符号整数类型 (设置变量默认类型)unsigned char h = 'B';                 // 无符号字符类型 (设置变量默认类型)unsigned short i = 10;                 // 无符号短整型 (设置变量默认类型)unsigned long j = 100000UL;            // 无符号长整型 (设置变量默认类型)unsigned long long k = 10000000000ULL; // 无符号长长整型 (设置变量默认类型)// 打印变量的值printf("a = %d\n", a); // 注意:%d用于打印整数printf("b = %f\n", b); // 注意:%f用于打印浮点数// 打印数据类型的范围printf("int 最小 = %d,int 最大 = %d", INT_MIN, INT_MAX);                                  // 打印int类型的最小值printf("\nfloat 最小 = %e,float 最大 = %e", __FLT_MIN__, __FLT_MAX__);                    // 打印float类型的最小值和最大值printf("\nchar 最小 = %d,char 最大 = %d", CHAR_MIN, CHAR_MAX);                            // 打印char类型的最小值和最大值printf("\nshort 最小 = %d,short 最大 = %d", SHRT_MIN, SHRT_MAX);                          // 打印short类型的最小值和最大值printf("\nlong 最小 = %ld,long 最大 = %ld", LONG_MIN, LONG_MAX);                          // 打印long类型的最小值和最大值printf("\ndouble 最小 = %e,double 最大 = %e", __DBL_MIN__, __DBL_MAX__);                  // 打印double类型的最小值和最大值printf("\nlong long 最小 = %lld,long long 最大 = %lld", LLONG_MIN, LLONG_MAX);            // 打印long long类型的最小值和最大值printf("\nunsigned int 最小 = %u,unsigned int 最大 = %u", 0, UINT_MAX);                   // 打印unsigned int类型的最小值和最大值printf("\nunsigned char 最小 = %u,unsigned char 最大 = %u", 0, UCHAR_MAX);                // 打印unsigned char类型的最小值和最大值printf("\nunsigned short 最小 = %u,unsigned short 最大 = %u", 0, USHRT_MAX);              // 打印unsigned short类型的最小值和最大值printf("\nunsigned long 最小 = %lu,unsigned long 最大 = %lu", 0, ULONG_MAX);              // 打印unsigned long类型的最小值和最大值printf("\nunsigned long long 最小 = %llu,unsigned long long 最大 = %llu", 0, ULLONG_MAX); // 打印unsigned long long类型的最小值和最大值return 0;
}

3. bool型

非真即假
#include <stdio.h>
int main(int argc, char const *argv[])
{/* bool */// 使用if判断为真,条件代码执行,非真,条件代码不执行if (0){printf("0为假\n");}else{printf("0为真\n");}if (1){printf("1为真\n");}else{printf("1为假\n");}return 0;
}

4. float浮点型

float           //单精度浮点数

#include <stdio.h>  // 引入stdio.h头文件以使用printf函数
#include <limits.h> // 引入limits.h头文件以获取取数据类型的范围
#include <float.h>  // 引入float.h头文件以获取浮点数类型的范围int main(int argc, char const *argv[])
{/* 默认实型(浮点型,小数)为浮点型,默认整数为int型*/// float类型// float类型的精度为6位,范围为-3.4E+38到3.4E+38float a = 3.14f;                                                     // 单精度浮点数类型,占位符%f,精确度为6位printf("a = %f\n", a);                                               // 注意:%f用于打印浮点数,默认打印小数点后6位printf("float 最小 = %f,float 最大 = %f", __FLT_MIN__, __FLT_MAX__); // 打印float类型的最小值和最大值printf("\nfloat 精度 = %d", FLT_DIG);                                // 打印float类型的精度,6位,科学计数法%fprintf("a=%.17f,float类型的字节数为=%lu\n", a, sizeof(float));       // 打印float类型的长度,小数点后六位不精确// double类型// double类型的精度为15位,范围为-1.7E+308到1.7E+308double b = 3.1455555555555555555;                                        // 双精度浮点数类型,占位符%lf,精确度为15位,默认打印小数点后6位printf("\nb = %lf\n", b);                                                // 注意:%lf用于打印双精度浮点数printf("double 最小 = %lf,double 最大 = %lf", __DBL_MIN__, __DBL_MAX__); // 打印double类型的最小值和最大值printf("\ndouble 精度 = %d", DBL_DIG);                                   // 打印double类型的精度,15位,科学计数法%lfprintf("b=%.16lf,double类型的字节数为=%lu\n", b, sizeof(double));        // 打印double类型的长度,小数点后15位不精确// long double类型// long double类型的精度为19位,范围为-1.1E+4932到1.1E+4932long double c = 3.1455555555555555555555;                                            // 长双精度浮点数类型,占位符%Lf,精确度为19位,默认打印小数点后6位printf("\nc = %Lf\n", c);                                                            // 注意:%Lf用于打印长双精度浮点数printf("long double 最小 = %Le,long double 最大 = %Le", __LDBL_MIN__, __LDBL_MAX__); // 打印long double类型的最小值和最大值printf("\nlong double 精度 = %d", LDBL_DIG);                                         // 打印long double类型的精度,19位,科学计数法%Lfprintf("c=%.20Lf,long double类型的字节数为=%lu\n", c, sizeof(long double));          // 打印long double类型的长度,小数点后19位不精确//printf("c=%20.10f\n", a); // 打印float类型的长度return 0;
}

5. char (string)型

char           //字符数据类型

#include <stdio.h>int main()
{/*// 字符charchar c = 'A';printf("%c\n", c); // 输出字符,终端输出为A// 字符输出为ascll码printf("%d\n", c);// 字符串char str[] = "Hello, World!";printf("%s\n", str);*/// 转移符//  \n 换行printf("Hello\nWorld\n");// \t 制表符printf("Hello\tWorld\n");printf("\173\n"); // 173是八进制表示的123printf("\x41\n"); // 41是十六进制表示的65// \\ 反斜杠printf("反斜杠:""a\\b\n");// \' 单引号printf("单引号:", "a\'b\n");// \" 双引号printf("双引号:,""a\"b\n");// \0 字符串结束符char str2[] = "a, b!\0";printf("%s\n", str2);// \b 退格符printf("Hello\bWorld\n");// \r 回车符printf("Hello\rWorld\n");return 0;
}

4 变量/常量

1 变量

1.1 定义变量

简而言之变量即使可以更改的量,其数值可以被更改。

1.2 变量的分类 

1.全局变量

  (1)即作用于代码运行全过程的变量

2.局部变量

  (2)即作用于部分代码块的变量

#include <stdio.h>
// 全局变量
int globalVar = 10; // 全局变量,作用域为整个文件
void function() {// 局部变量int localVar = 5; // 局部变量,作用域仅限于此函数内printf(" 函数内 局部变量 localVar 的值: %d\n", localVar);printf(" 函数内 全局变量 globalVar 的值: %d\n", globalVar);
}int main() {printf("全局变量 globalVar 的值: %d\n", globalVar); // 可以访问全局变量function();//调用上方的函数// printf("局部变量 localVar 的值: %d\n", localVar); // 这行代码会报错,因为 localVar 作用域仅限于 function 函数return 0;
}
1.3. 变量的使用

使变量等于输入两个值,使这两个变量进行加减乘除,结果取小数点后两位。

#include <stdio.h>
int main() {// 定义变量float num1, num2; // 用于存储输入的两个数float sum, difference, product, quotient; // 用于存储运算结果// 提示用户输入两个数,scanf的标准用法,于printf很相似printf("请输入第一个数: ");scanf("%f", &num1); // 读取第一个数printf("请输入第二个数: ");scanf("%f", &num2); // 读取第二个数// 进行运算sum = num1 + num2; // 加法difference = num1 - num2; // 减法product = num1 * num2; // 乘法quotient = num1 / num2; // 除法(注意:需要确保 num2 不为 0)// 输出结果,%.2f即为取余,小数点后两位,%.3f即为小数点后3位,以此类推。printf("加法结果: %.3f\n", sum);printf("减法结果: %.3f\n", difference);printf("乘法结果: %.3f\n", product);// 除法结果的输出需要检查除数是否为0if (num2 != 0) {printf("除法结果: %.2f\n", quotient);} else {printf("除法结果: 无法除以零\n");}return 0;
}
输出:

1.4. 变量的作用域与生命周期 
作用域:

作用域(scope)是程序设计概念,通常来说,一段程序代码中所用到的名字并不总是可用的

而限定这个名字的可用性的代码范围就是这个名字的作用域。

1. 局部变量的作用域是变量所在的局部范围。

2. 全局变量的作用域是整个代码运行过程。

生命周期:

变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段

1. 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。

2. 全局变量的生命周期是:整个程序的生命周期,同理。

1.5. 定量 / 常量
1 常量定义

简而言之,定量即使不变的量。

2 常量类型

1. 字面常量

2. const 修饰的常变量(java中常用)

3. #define 定义的标识符常量

4. 枚举常量

#include <stdio.h>// 使用 #define 定义标识符常量
#define PI 3.14159 // 圆周率常量// 定义枚举常量
enum Color {RED,    // 默认第一个为0,以此类推。GREEN,  // GREEN = 1BLUE    // BLUE = 2
};int main() {// 字面常量int a = 10; // 整数字面常量float b = 5.5; // 浮点数字面常量// const 修饰的常量const int MAX_VALUE = 100; // 最大值常量,不能被修改// 输出各个常量的值printf("字面常量 a: %d\n", a);printf("字面常量 b: %.2f\n", b);printf("标识符常量 PI: %.5f\n", PI);printf("const 常量 MAX_VALUE: %d\n", MAX_VALUE);// 使用枚举常量enum Color myColor = GREEN; // 赋值为枚举常量printf("枚举常量 myColor: %d\n", myColor); // 输出枚举常量的整数值return 0;
}
输出:

 5. 字符串+转义字符+注释+格式修饰符

1. 字符串

1. 即Java中的String,用来表示多个字符在一起的样子。但是C中没有String的概念,所以字符串用char【】(字符型数组)来表示。

2. 下方的代码,用了四种方式来表示String,具体看代码注释,写的很清楚。

//可以简单认为include与java中的import是同一个意思。
#include <stdio.h>   // 引入标准输入输出库,提供输入输出函数,如printf和scanf
#include <stdlib.h>  // 引入标准库,包含内存分配(如malloc、free)、进程控制和转换等函数
#include <string.h>  // 引入字符串处理库,提供字符串操作函数,如strcpy、strlen等int main() {// 1. 使用字符数组定义字符串char str1[] = "hello world"; // 字符数组,自动添加'\0'char str11[] ={'0','1','2','3','4','\0'}; // 字符数组,自动添加'\0'<规范>// 2. 使用字符指针定义字符串const char *str2 = "hello world"; // 字符指针指向字符串常量// 3. 动态内存分配,malloc 返回的是 void* 类型的指针,表示它可以指向任何类型的内存。//指针相当于一种特殊类型的变量char *str3 = (char *)malloc(12 * sizeof(char)); // 开辟一个char类型,12长度的内存空间变量为str3这个指针变量if (str3 == NULL) { // 检查内存是否分配存在printf("内存分配失败\n");return 1; // 返回1表示异常,并输出内存分配失败}strcpy(str3, "hello world"); // // 输出所有字符串printf("%s\n", str1); // 输出字符数组printf("%s\n", str11); // 输出字符数组printf("%s\n", str2); // 输出字符指针printf("%s\n", str3); // 输出动态分配的字符串// 释放动态分配的内存free(str3);return 0; // 返回0表示程序正常结束
}
输出:

2. 转义字符

转义字符 释义(转义字符顾名思义就是转变意思。

\?      在书写连续多个问号时使用,防止他们被解析成三字母词

\'         用于表示字符常量'

\"        用于表示一个字符串内部的双引号

\\        用于表示一个反斜杠,防止它被解释为一个转义序列符。

\a       警告字符,蜂鸣

\b       退格符

\f        进纸符

\n       换行

\r        回车

\t        水平制表符

\v       垂直制表符

\ddd   ddd表示1~3个八进制的数字。 如: \130 X

\xdd   dd表示2个十六进制数字。 如: \x30 0

 举例:

仔细看注释。

#include<stdio.h>
#include<string.h>
// strlen - string length - 求字符串长度
int main()
{printf("%d\n", strlen("abcdef"));printf("%d\n", strlen("abcdefg")); // 输出字符串 "abcdef" 的长度// \62被解析成一个转义字符printf("%d\n", strlen("c:\test\628\test.c"));//会输出错误,因为系统编译会把\t认识为转义符printf("%d\n", strlen("c:\\test\\628\\test.c")); // 使用双反斜杠表示反斜杠,就没有问题了。return 0;
}
详细使用方法: 
#include <stdio.h>int main() {// 1. \? - 表示问号字符      原因: \? 不会被解析为转义字符,直接输出问号。 printf("这是一个问号: \?\n"); // 输出: 这是一个问号: ?// 2. \' - 表示单引号字符    原因: \' 被解析为单引号字符,用于在字符串中包含单引号。printf("这是一个单引号: \'\n"); // 输出: 这是一个单引号: '// 3. \" - 表示双引号字符    原因: \" 被解析为双引号字符,用于在字符串中包含双引号。printf("这是一个双引号: \"\n"); // 输出: 这是一个双引号: "// 4. \\ - 表示反斜杠字符    原因: \\ 被解析为一个反斜杠字符,用于在字符串中包含反斜杠。printf("这是一个反斜杠: \\\n"); // 输出: 这是一个反斜杠: \// 5. \a - 表示警告音(响铃)原因: \a 表示响铃字符,某些终端或系统可能会发出声音。printf("这将响铃: \a\n"); // 可能会发出警告音(依赖于终端设置)// 6. \b - 表示退格符        原因: \b 将光标移动到前一个字符位置,覆盖该字符。printf("这是一个退格符: Hello\bWorld\n"); // 输出: HelloWorld(“Hello”中的最后一个字母被删除)// // 7. \f - 表示换页符        原因: \f 在某些终端中可能会导致换页,但在其他终端中可能没有明显效果。printf("这是一个换页符: Hello\fWorld\n"); // 输出: Hello(在某些终端中可能表现为换页)// 8. \n - 表示换行符        原因: \n 将光标移动到下一行,输出内容在新行显示。printf("这是一个换行符: Hello\nWorld\n"); // 输出: Hello//                                        //         World// 9. \r - 表示回车符        原因: \r 将光标移动到行首,后续字符会覆盖当前行的内容。printf("这是一个回车符: Hello\rWorld\n"); // 输出: World(“Hello”被覆盖)// 10. \t - 表示水平制表符   原因: \t 插入一个水平制表符的空格,增加字符之间的间距。printf("这是一个制表符: Hello\tWorld\n"); // 输出: Hello    World(“Hello”和“World”之间有一个制表符的空格)// 11. \v - 表示垂直制表符   原因: \v 在某些终端中可能表现为换行,但在其他终端中可能没有明显效果printf("这是一个垂直制表符: Hello\vWorld\n"); // 输出: Hello(可能会在某些终端中表现为换行)// 12. \ddd - 表示八进制数对应的字符    原因: 八进制数表示的字符在ASCII表中对应的字符。printf("这是一个八进制字符: \101\n"); // 输出: A(八进制101对应的字符是'A')// 13. \xdd - 表示十六进制数对应的字符  原因: 十六进制数表示的字符在ASCII表中对应的字符。printf("这是一个十六进制字符: \x41\n"); // 输出: A(十六进制41对应的字符是'A')return 0;}}}

3. 注释

1. 代码中有不需要的代码可以直接删除,也可以注释掉

2. 代码中有些代码比较难懂,可以加一下注释文字

vs Code 分为单行注释与多行注释,自己搜索,默认的我也忘了。嘿嘿嘿。

4. 格式说明符

格式说明符:

%d 或 %i   解释:输出或输入有符号十进制整数。

%u             解释:输出或输入无符号十进制整数。

%f              解释:输出或输入十进制浮点数(float)。

%lf             解释:输出或输入双精度浮点数(double)。

%c             解释:输出或输入单个字符。

%s             解释:输出或输入字符串(字符数组)。

%p             解释:输出指针的地址(内存地址)。

%o             解释:输出无符号八进制整数。

%x 或 %X  解释:输出无符号十六进制整数。%x 使用小写字母,%X 使用大写字母。

%e 或 %E  解释:以科学计数法输出浮点数。%e 使用小写字母 e,%E 使用大写字母 E。

%g 或 %G  解释:根据数值的大小自动选择使用 %f 或 %e 的格式输出浮点数。%g 使用小写字母,

%G             解释:使用大写字母。

格式说明符代码解释 :
#include <stdio.h>
int main() {// 1. %d 或 %i - 输出或输入有符号十进制整数    // 原因: %d 用于打印有符号整数,负数会正常显示。int signedInt = -42;printf("有符号十进制整数: %d\n", signedInt); // 输出: 有符号十进制整数: -42// 2. %u - 输出或输入无符号十进制整数    // 原因: %u 用于打印无符号整数,确保不会显示负号。unsigned int unsignedInt = 42;printf("无符号十进制整数: %u\n", unsignedInt); // 输出: 无符号十进制整数: 42// 3. %f - 输出或输入十进制浮点数(float)    // 原因: %f 默认输出六位小数,适用于浮点数。float floatNum = 3.14f;printf("十进制浮点数: %f\n", floatNum); // 输出: 十进制浮点数: 3.140000// 4. %lf - 输出或输入双精度浮点数(double)    // 原因: %lf 用于打印双精度浮点数,默认输出六位小数。double doubleNum = 3.141592653589793;printf("双精度浮点数: %lf\n", doubleNum); // 输出: 双精度浮点数: 3.141593// 5. %c - 输出或输入单个字符    // 原因: %c 用于打印单个字符。char character = 'A';printf("单个字符: %c\n", character); // 输出: 单个字符: A// 6. %s - 输出或输入字符串(字符数组)    // 原因: %s 用于打印字符串,直到遇到空字符 '\0'。char str[] = "Hello, World!";printf("字符串: %s\n", str); // 输出: 字符串: Hello, World!// 7. %p - 输出指针的地址(内存地址)    // 原因: %p 用于打印指针的地址,通常以十六进制格式输出。int *ptr = &signedInt;printf("指针地址: %p\n", (void *)ptr); // 输出: 指针地址: 0x7ffeedc3a5b4(地址会因运行而异)// 8. %o - 输出无符号八进制整数    // 原因: %o 用于打印无符号整数的八进制表示。printf("无符号八进制整数: %o\n", unsignedInt); // 输出: 无符号八进制整数: 50// 9. %x 或 %X - 输出无符号十六进制整数    // 原因: %x 用于打印小写十六进制,%X 用于打印大写十六进制。printf("无符号十六进制整数 (小写): %x\n", unsignedInt); // 输出: 无符号十六进制整数 (小写): 2aprintf("无符号十六进制整数 (大写): %X\n", unsignedInt); // 输出: 无符号十六进制整数 (大写): 2A// 10. %e 或 %E - 以科学计数法输出浮点数    // 原因: %e 和 %E 用于以科学计数法格式打印浮点数。printf("科学计数法 (小写): %e\n", floatNum); // 输出: 科学计数法 (小写): 3.140000e+00printf("科学计数法 (大写): %E\n", floatNum); // 输出: 科学计数法 (大写): 3.140000E+00// 11. %g 或 %G - 根据数值的大小自动选择格式输出浮点数    // 原因: %g 和 %G 根据数值的大小选择使用 %f 或 %e 格式输出。printf("自动选择格式 (小写): %g\n", doubleNum); // 输出: 自动选择格式 (小写): 3.14159printf("自动选择格式 (大写): %G\n", doubleNum); // 输出: 自动选择格式 (大写): 3.14159return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/76943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面试经历(一)雪花算法

uid生成方面 1&#xff1a;为什么用雪花算法 分布式ID的唯一性需要保证&#xff0c;同时需要做到 1&#xff1a;单调递增 2&#xff1a;确保安全&#xff0c;一个是要能体现出递增的单号&#xff0c;二一个不能轻易的被恶意爬出订单数量 3&#xff1a;含有时间戳 4&#…

基于GA遗传优化TCN-BiGRU注意力机制网络模型的时间序列预测算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2024b&#xff08;提供软件版本下载&#xff09; 3.部分核心程序 &#xff08;完整版代码包…

深度强化学习 pdf 董豪| 马尔科夫性质,马尔科夫过程,马尔科夫奖励过程,马尔科夫决策过程

深度强化学习 pdf 百度云 hea4 pdf 主页 概念 马尔可夫奖励过程和价值函数估计的结合产生了在绝大多数强化学习方法中应用的核心结果——贝尔曼 &#xff08;Bellman&#xff09;方程。最优价值函数和最优策略可以通过求解贝尔曼方程得到&#xff0c;还将介绍三种贝尔曼 方…

验证Kubernetes的服务发现机制

验证Kubernetes的服务发现机制 文章目录 验证Kubernetes的服务发现机制[toc]一、验证基于环境变量的服务发现机制 服务发现是让客户端能够以固定的方式获取到后端Pod访问地址的机制。下面验证环境变量和DNS这两种机制。 一、验证基于环境变量的服务发现机制 对于需要访问服务…

FPGA系列之DDS信号发生器设计(DE2-115开发板)

一、IP核 IP(Intellectual Property)原指知识产权、著作权等&#xff0c;在IC设计领域通常被理解为实现某种功能的设计。IP模块则是完成某种比较复杂算法或功能&#xff08;如FIR滤波器、FFT、SDRAM控制器、PCIe接口、CPU核等&#xff09;并且参数可修改的电路模块&#xff0c…

Java单例模式详解:实现线程安全的全局访问点

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 一、什么是单例模式&#xff1f; 单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;它保证一个类仅有一个实例&#xff…

JVM 生产环境问题定位与解决实战(七):实战篇——OSSClient泄漏引发的FullGC风暴

本文已收录于《JVM生产环境问题定位与解决实战》专栏&#xff0c;完整系列见文末目录 引言 在前六篇博客中&#xff0c;我们系统性地学习了 JVM 生产环境问题定位与解决的全套工具链&#xff0c;涵盖jps、jmap、jstat、jstack、jcmd 等基础工具的使用技巧&#xff0c;深入剖析…

Spark集群搭建-spark-local

&#xff08;一&#xff09;安装Spark 安装Spark的过程就是下载和解压的过程。接下来的操作&#xff0c;我们把它上传到集群中的节点&#xff0c;并解压运行。 1.启动虚拟机 2.通过finalshell连接虚拟机&#xff0c;并上传安装文件到 /opt/software下 3.解压spark安装文件到/op…

Java 异常 SSLException: fatal alert: protocol_version 全解析与解决方案

在 Java 网络通信中&#xff0c;SSLException: fatal alert: protocol_version 是典型的 TLS/SSL 协议版本不兼容异常。本文结合 Java 官方规范、TLS 协议标准及实战经验&#xff0c;提供体系化解决方案&#xff0c;帮助开发者快速定位并解决协议版本冲突问题。 一、异常本质&…

虚拟列表技术深度解析:原理、实现与性能优化实战

虚拟列表技术深度解析&#xff1a;原理、实现与性能优化实战 引言 在当今数据驱动的互联网应用中&#xff0c;长列表渲染已成为前端开发的核心挑战。传统的一次性全量渲染方式在数据量超过千条时&#xff0c;往往导致页面卡顿、内存飙升等问题。虚拟列表&#xff08;Virtual L…

2025-04-20 李沐深度学习4 —— 自动求导

文章目录 1 导数拓展1.1 标量导数1.2 梯度&#xff1a;向量的导数1.3 扩展到矩阵1.4 链式法则 2 自动求导2.1 计算图2.2 正向模式2.3 反向模式 3 实战&#xff1a;自动求导3.1 简单示例3.2 非标量的反向传播3.3 分离计算3.4 Python 控制流 硬件配置&#xff1a; Windows 11Inte…

Redis的使用总结

Redis 核心使用场景 缓存加速 高频访问数据缓存&#xff08;如商品信息、用户信息&#xff09; 缓解数据库压力&#xff0c;提升响应速度 会话存储 分布式系统共享 Session&#xff08;替代 Tomcat Session&#xff09; 支持 TTL 自动过期 排行榜/计数器 实时排序&#x…

富文本编辑器实现

&#x1f3a8; 富文本编辑器实现原理全解析 &#x1f4dd; 基本实现路径图 #mermaid-svg-MO1B8a6kAOmD8B6Y {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-MO1B8a6kAOmD8B6Y .error-icon{fill:#552222;}#mermaid-s…

LeetCode热题100——283. 移动零

给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出:…

与Ubuntu相关命令

windows将文件传输到Ubuntu 传输文件夹或文件 scp -r 本地文件夹或文件 ubuntu用户名IP地址:要传输到的文件夹路径 例如&#xff1a; scp -r .\04.py gao192.168.248.129:/home/gao 如果传输文件也可以去掉-r 安装软件 sudo apt-get update 更新软件包列表 sudo apt insta…

Kafka 在小流量和大流量场景下的顺序消费问题

一、低流量系统 特点 消息量较少&#xff0c;吞吐量要求低。系统资源&#xff08;如 CPU、内存、网络&#xff09;相对充足。对延迟容忍度较高。 保证顺序消费的方案 单分区 单消费者 将消息发送到单个分区&#xff08;例如固定 Partition 0&#xff09;&#xff0c;由单个…

小程序 GET 接口两种传值方式

前言 一般 GET 接口只有两种URL 参数和路径参数 一&#xff1a;URL 参数&#xff08;推荐方式&#xff09; 你希望请求&#xff1a; https://serve.zimeinew.com/wx/products/info?id5124接口应该写成这样&#xff0c;用 req.query.id 取 ?id5124&#xff1a; app.get(&…

小白学习java第14天(中):数据库

1.DML data manage language数据库管理语言 外键:外键是什么&#xff1f;就是对其进行表与表之间的联系&#xff0c;就是使用的键进行关联&#xff01; 方法一&#xff1a;我们在数据库里面就对其进行表与表之间的连接【这种是不建议的&#xff0c;我不太喜欢就是将数据里面弄…

NO.95十六届蓝桥杯备战|图论基础-单源最短路|负环|BF判断负环|SPFA判断负环|邮递员送信|采购特价产品|拉近距离|最短路计数(C++)

P3385 【模板】负环 - 洛谷 如果图中存在负环&#xff0c;那么有可能不存在最短路。 BF算法判断负环 执⾏n轮松弛操作&#xff0c;如果第n轮还存在松弛操作&#xff0c;那么就有负环。 #include <bits/stdc.h> using namespace std;const int N 2e3 10, M 3e3 1…

K8s pod 应用

/** 个人学习笔记&#xff0c;如有问题欢迎交流&#xff0c;文章编排和格式等问题见谅&#xff01; */ &#xff08;1&#xff09;编写 pod.yaml 文件 pod 是 kubernetes 中最小的编排单位&#xff0c;一个 pod 里包含一个或多个容器。 apiVersion: v1 # 指定api版本 kind…